{"version":3,"mappings":"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D,CAAYzI,QAAe,KAS3B,SAAYyI,GAEXA,wBACAA,kBACAA,oBACAA,oBALD,CAAYxI,MAAiB,KAS7B,SAAYwI,GAEXA,wBACAA,kBACAA,wBACAA,oBACAA,sBACAA,oCACAA,oDACAA,oCACAA,oCACAA,wDACAA,0BACAA,8BACAA,gCAdD,CAAYvI,MAAkB,KAkB9B,SAAYuI,GAEXA,wBACAA,kBACAA,oBACAA,oBALD,CAAYtI,QAAqB,KASjC,SAAYsI,GAEXA,wBACAA,kBACAA,wBACAA,oBACAA,oCAND,CAAYrI,QAAuB,KAUnC,SAAYqI,GAEXA,kBACAA,gBACAA,sBACAA,oBACAA,sBACAA,sBACAA,4CACAA,wCACAA,wCACAA,cACAA,wBACAA,oCACAA,cACAA,8BACAA,YAhBD,CAAYpI,QAAc,KAoB1B,SAAYoI,GAEXA,gBACAA,gBACAA,sBACAA,kBACAA,wBACAA,oBACAA,oBACAA,sBACAA,cACAA,sBACAA,gBACAA,gBACAA,8BACAA,cACAA,cACAA,cACAA,wBACAA,sBACAA,oBACAA,sBACAA,cACAA,4CACAA,4CACAA,4CACAA,gBACAA,0CACAA,0CACAA,kDACAA,kDACAA,wDACAA,4CACAA,8CACAA,oDACAA,4CACAA,8CACAA,0BACAA,wBACAA,0BACAA,oBAxCD,CAAYnI,QAAS,KA4CrB,SAAYmI,GAEXA,wBACAA,0BACAA,cAJD,CAAYlI,QAA0B,KAQtC,SAAYkI,GAEXA,oBACAA,sBACAA,kBACAA,0BACAA,gBACAA,wBACAA,oBARD,CAAYjI,MAA0B,KAYtC,SAAYiI,GAEXA,YACAA,gBACAA,kBACAA,kCACAA,kCACAA,4CACAA,cACAA,0BACAA,4BACAA,oBACAA,0BACAA,oBAbD,CAAYhI,QAA4B,KAiBxC,SAAYgI,GAEXA,YACAA,oBACAA,gBACAA,oBALD,CAAY/H,QAA8B,KAS1C,SAAY+H,GAEXA,oBACAA,YACAA,sBACAA,8BACAA,0BACAA,4BACAA,sBACAA,sBACAA,kBACAA,kBACAA,oBACAA,gBACAA,sBAdD,CAAY9H,QAAuB,KAkBnC,SAAY8H,GAEXA,cACAA,4BACAA,sBACAA,gBACAA,sBAND,CAAY7H,QAAgB,KAU5B,SAAY6H,GAEXA,gBACAA,gBACAA,cACAA,gCALD,CAAY5H,QAA2B,KASvC,SAAY4H,GAEXA,kBACAA,kCACAA,sBAJD,CAAY3H,MAAoB,KAQhC,SAAY2H,GAEXA,cACAA,oBACAA,wBAJD,CAAY1H,QAAkB,KAQ9B,SAAY0H,GAEXA,oBACAA,cACAA,0BACAA,oCACAA,sBACAA,oBACAA,8BACAA,8CACAA,gCACAA,sBACAA,sCACAA,0CACAA,kCACAA,oCACAA,wDACAA,8BACAA,kDACAA,gCACAA,oDACAA,wCACAA,4DAtBD,CAAYzH,QAAgC,KA0B5C,SAAYyH,GAEXA,oBACAA,oCACAA,kCACAA,0BACAA,sBACAA,0CACAA,kCARD,CAAYxH,QAA2B,KAYvC,SAAYwH,GAEXA,cACAA,oBACAA,oBACAA,8BACAA,sBACAA,4DACAA,sEARD,CAAYvH,QAAoB,KAYhC,SAAYuH,GAEXA,cACAA,oBACAA,oBACAA,8BALD,CAAYtH,QAA+B,KAS3C,SAAYsH,GAEXA,8BACAA,oBACAA,sBACAA,oBACAA,kCACAA,cACAA,8BACAA,gBACAA,8CACAA,sBACAA,0CACAA,oCACAA,8BAdD,CAAYrH,QAAe,KAkB3B,SAAYqH,GAEXA,oBACAA,gBACAA,oBAJD,CAAYpH,QAA8B,KAQ1C,SAAYoH,GAEXA,kBACAA,kBACAA,wBAJD,CAAYnH,QAA+B,KAQ3C,SAAYmH,GAEXA,gBACAA,wBACAA,sBACAA,0BACAA,sBACAA,8BACAA,4BACAA,gCATD,CAAYlH,QAA+B,KAa3C,SAAYkH,GAEXA,YACAA,UAHD,CAAYjH,QAAwB,KAOpC,SAAYiH,GAEXA,oBACAA,kBACAA,gBAJD,CAAYhH,QAA4B,KAQxC,SAAYgH,GAEXA,8BACAA,0CACAA,wCACAA,wBACAA,sBACAA,gBACAA,sBACAA,gCATD,CAAY/G,QAAwB,KAapC,SAAY+G,GAEXA,oBACAA,kBACAA,oCACAA,kCACAA,gBACAA,gCACAA,oCACAA,oCACAA,8BACAA,kCACAA,oBAZD,CAAY9G,QAA0B,KAgBtC,SAAY8G,GAEXA,gBACAA,kBACAA,sBACAA,oBACAA,wBACAA,wBACAA,gCARD,CAAY7G,QAAc,KAY1B,SAAY6G,GAEXA,cACAA,oBACAA,4BAJD,CAAY5G,MAAgB,KAQ5B,SAAY4G,GAEXA,kBACAA,oBACAA,oBAJD,CAAY3G,MAAQ,KAQpB,SAAY2G,GAEXA,sBACAA,sBAHD,CAAY1G,QAAY,KAOxB,SAAY0G,GAEXA,wBACAA,kBAHD,CAAYzG,QAAU,KAOtB,SAAYyG,GAEXA,cACAA,sDACAA,kDACAA,kBALD,CAAYxG,QAAyB,KASrC,SAAYwG,GAEXA,YACAA,cACAA,gBAJD,CAAYvG,QAAgB,KAQ5B,SAAYuG,GAEXA,kCACAA,sBACAA,0BAJD,CAAYtG,QAAyB,KAQrC,SAAYsG,GAEXA,oBACAA,cACAA,8BACAA,kCACAA,oBACAA,wBACAA,sBACAA,sBATD,CAAYrG,QAAsC,KAalD,SAAYqG,GAEXA,YACAA,wBACAA,sBAJD,CAAYpG,QAAyB,KAQrC,SAAYoG,GAEXA,oBACAA,cAHD,CAAYnG,QAA+B,KAO3C,SAAYmG,GAEXA,sBACAA,YACAA,cACAA,oBACAA,0CACAA,wCACAA,UARD,CAAYlG,QAAyB,KAYrC,SAAYkG,GAEXA,oBACAA,gBACAA,cAJD,CAAYjG,QAAc,KAQ1B,SAAYiG,GAEXA,sBACAA,sBACAA,cACAA,oCALD,CAAYhG,QAAoB,KAShC,SAAYgG,GAEXA,0CACAA,oBACAA,8BACAA,wBACAA,cACAA,4BACAA,kCACAA,sBACAA,0BACAA,sBACAA,8BACAA,0BACAA,sCACAA,8BACAA,sBACAA,wBACAA,0BACAA,oBAnBD,CAAY/F,QAAqC,KAuBjD,SAAY+F,GAEXA,sBACAA,8BACAA,kCACAA,8BALD,CAAY9F,QAAmC,KAS/C,SAAY8F,GAEXA,UACAA,YAHD,CAAY7F,QAAS,KAOrB,SAAY6F,GAEXA,oBACAA,wBACAA,sCACAA,wBALD,CAAY5F,QAA+B,KAS3C,SAAY4F,GAEXA,oBACAA,kBACAA,oBACAA,sBALD,CAAY3F,QAAyB,KASrC,SAAY2F,GAEXA,gBACAA,0CACAA,oBACAA,kCACAA,4BAND,CAAY1F,QAAa,KAUzB,SAAY0F,GAEXA,oBACAA,oBACAA,kBAJD,CAAYzF,QAAgB,KAQ5B,SAAYyF,GAEXA,oCACAA,8CACAA,cACAA,wBACAA,kDACAA,sBACAA,oBACAA,gCACAA,0CACAA,oBACAA,4BACAA,kCACAA,kCACAA,kCACAA,kCACAA,kCACAA,0DACAA,0CACAA,8BACAA,oCArBD,CAAYxF,QAA0B,KAyBtC,SAAYwF,GAEXA,cACAA,kBACAA,0BACAA,8BACAA,sBACAA,oBAPD,CAAYvF,QAAqB,KAWjC,SAAYuF,GAEXA,cACAA,kBACAA,oBAJD,CAAYtF,QAAgB,KAQ5B,SAAYsF,GAEXA,8BACAA,kCACAA,kBACAA,kBACAA,oBAND,CAAYrF,QAAoB,KAUhC,SAAYqF,GAEXA,gBACAA,kBACAA,sBACAA,sBACAA,sBAND,CAAYpF,QAAc,KAU1B,SAAYoF,GAEXA,kBACAA,sBACAA,oBACAA,wBACAA,wBACAA,0BACAA,kBACAA,kCATD,CAAYnF,QAA4B,KAaxC,SAAYmF,GAEXA,gBACAA,kBACAA,sBACAA,oBACAA,wBACAA,wBACAA,sBARD,CAAYlF,QAA4B,KAYxC,SAAYkF,GAEXA,gBACAA,oBAHD,CAAYjF,QAAqC,KAOjD,SAAYiF,GAEXA,oBACAA,kBACAA,oCACAA,0DALD,CAAYhF,QAAgB,KAS5B,SAAYgF,GAEXA,sBACAA,oBACAA,8BAJD,CAAY/E,QAA4B,KAQxC,SAAY+E,GAEXA,oBACAA,sBACAA,8BACAA,gBALD,CAAY9E,QAAmC,KAS/C,SAAY8E,GAEXA,cACAA,cACAA,wBAJD,CAAY7E,QAAqB,KAQjC,SAAY6E,GAEXA,cACAA,kBACAA,cACAA,sBACAA,sBAND,CAAY5E,QAAgC,KAU5C,SAAY4E,GAEXA,wBACAA,sBACAA,sBACAA,kBACAA,sBACAA,oBAPD,CAAY3E,QAAiB,KAW7B,SAAY2E,GAEXA,gCACAA,cACAA,oCACAA,sBALD,CAAY1E,QAAgB,KAS5B,SAAY0E,GAEXA,wBACAA,sBACAA,wBAJD,CAAYzE,QAAkB,KAQ9B,SAAYyE,GAEXA,oBACAA,cAHD,CAAYxE,QAAuC,KAOnD,SAAYwE,GAEXA,4BACAA,oBACAA,oBACAA,oBALD,CAAYvE,QAA2B,KASvC,SAAYuE,GAEXA,YACAA,8BACAA,8BACAA,oBALD,CAAYtE,QAAuB,KASnC,SAAYsE,GAEXA,gBACAA,kBACAA,oBAJD,CAAYrE,QAA+B,KAQ3C,SAAYqE,GAEXA,YACAA,cACAA,oBACAA,gBACAA,oBAND,CAAYpE,QAA4B,KAUxC,SAAYoE,GAEXA,0CACAA,gCACAA,8CACAA,oCACAA,oBAND,CAAYnE,QAAiC,KAU7C,SAAYmE,GAEXA,kBACAA,4BACAA,kBACAA,sBACAA,4BACAA,sBACAA,wBACAA,sDACAA,4BACAA,oCACAA,8DACAA,8BACAA,wBACAA,oBAfD,CAAYlE,QAAiC,KAmB7C,SAAYkE,GAEXA,wBACAA,sBACAA,wBACAA,sCACAA,sCACAA,sCACAA,wBACAA,8BATD,CAAYjE,QAAkB,KAa9B,SAAYiE,GAEXA,kBACAA,oBACAA,gBAJD,CAAYhE,QAAqB,KAQjC,SAAYgE,GAEXA,gBACAA,kBACAA,oBAJD,CAAY/D,QAA6B,KAQzC,SAAY+D,GAEXA,gDACAA,0DAHD,CAAY9D,QAA4B,KAOxC,SAAY8D,GAEXA,oBACAA,sBACAA,sBAJD,CAAY7D,QAAe,KAQ3B,SAAY6D,GAEXA,kBACAA,wBAHD,CAAY5D,QAAsB,KAOlC,SAAY4D,GAEXA,oBACAA,sBACAA,oBACAA,sBALD,CAAY3D,QAAyB,KASrC,SAAY2D,GAEXA,YACAA,0BACAA,cACAA,cACAA,kBACAA,sBACAA,oBARD,CAAY1D,QAAY,KAYxB,SAAY0D,GAEXA,gBACAA,kBACAA,oBAJD,CAAYzD,QAAqB,KAQjC,SAAYyD,GAEXA,kBACAA,kBACAA,sBAJD,CAAYxD,QAAsB,KAQlC,SAAYwD,GAEXA,sBACAA,kCACAA,4BACAA,oBALD,CAAYvD,QAAyB,KASrC,SAAYuD,GAEXA,oBACAA,oBAHD,CAAYtD,QAAmB,KAO/B,SAAYsD,GAEXA,YACAA,sCACAA,sBAJD,CAAYrD,QAA+B,KAQ3C,SAAYqD,GAEXA,gBACAA,gBACAA,oBAJD,CAAYpD,QAAkB,KAQ9B,SAAYoD,GAEXA,gBACAA,wBACAA,sBACAA,sBALD,CAAYnD,QAAkB,KAS9B,SAAYmD,GAEXA,cACAA,kCACAA,8BACAA,gCALD,CAAYlD,QAA0B,KAStC,SAAYkD,GAEXA,0BACAA,oCACAA,cACAA,gCALD,CAAYjD,QAA8B,KAS1C,SAAYiD,GAEXA,cACAA,kCACAA,8BACAA,gEALD,CAAYhD,QAA2B,KASvC,SAAYgD,GAEXA,kDACAA,gBACAA,UACAA,gCALD,CAAY/C,QAAuB,KASnC,SAAY+C,GAEXA,4BACAA,kBACAA,sBACAA,cACAA,cAND,CAAY9C,QAAuB,KAUnC,SAAY8C,GAEXA,gBACAA,YACAA,YACAA,0BACAA,kBACAA,cAPD,CAAY7C,QAAmB,KAW/B,SAAY6C,GAEXA,cACAA,kBACAA,cAJD,CAAY5C,QAA2B,KAQvC,SAAY4C,GAEXA,sCACAA,oCACAA,8CACAA,4CACAA,8BAND,CAAY3C,QAAiC,KAU7C,SAAY2C,GAEXA,oDACAA,gCAHD,CAAY1C,QAA8B,KAO1C,SAAY0C,GAEXA,wBACAA,QACAA,QACAA,QACAA,QACAA,QACAA,QACAA,QACAA,QACAA,QACAA,QACAA,QACAA,QACAA,QACAA,QACAA,QACAA,QACAA,QACAA,QACAA,QACAA,QACAA,QACAA,QACAA,QACAA,QACAA,QACAA,QA5BD,CAAYzC,QAAqB,KAgCjC,SAAYyC,GAEXA,kBACAA,cAHD,CAAYxC,QAAmC,KAO/C,SAAYwC,GAEXA,wBACAA,0BAHD,CAAYvC,QAA4B,KAOxC,SAAYuC,GAEXA,sCACAA,0CACAA,wBAJD,CAAYtC,QAA2B,KAQvC,SAAYsC,GAEXA,wBACAA,sBACAA,kBACAA,oBACAA,sBACAA,wBAPD,CAAYrC,QAA4B,KAWxC,SAAYqC,GAEXA,wBACAA,kBACAA,kBACAA,oBACAA,oBACAA,gBACAA,kBARD,CAAYpC,QAAkC,KAY9C,SAAYoC,GAEXA,gBACAA,wDACAA,wBACAA,kBACAA,kDACAA,8CACAA,sCARD,CAAYnC,QAAwB,KAYpC,SAAYmC,GAEXA,wBACAA,gCACAA,8BAJD,CAAYlC,QAAkC,KAQ9C,SAAYkC,GAEXA,wBACAA,sBACAA,gBAJD,CAAYjC,QAAiC,KAQ7C,SAAYiC,GAEXA,cACAA,kCACAA,4CAJD,CAAYhC,QAA2B,KAQvC,SAAYgC,GAEXA,8BACAA,gCACAA,gCAJD,CAAY/B,QAAsB,KAQlC,SAAY+B,GAEXA,cACAA,gBACAA,4BAJD,CAAY9B,QAAkC,KAQ9C,SAAY8B,GAEXA,kBACAA,oBAHD,CAAY7B,QAAY,KAOxB,SAAY6B,GAEXA,wCACAA,sBACAA,wBACAA,8CALD,CAAY5B,QAAoC,KAShD,SAAY4B,GAEXA,8BACAA,oBACAA,oBACAA,kCACAA,4BACAA,cAPD,CAAY3B,QAAwB,KAWpC,SAAY2B,GAEXA,oBACAA,sBACAA,gBACAA,8BACAA,sBACAA,wCACAA,sBACAA,cATD,CAAY1B,QAAoB,KAahC,SAAY0B,GAEXA,kBACAA,gCACAA,oCAJD,CAAYzB,QAAsC,KAQlD,SAAYyB,GAEXA,kBACAA,sBACAA,oCACAA,gDACAA,sBACAA,0BACAA,gBACAA,wCACAA,8CACAA,gDACAA,4CACAA,0BACAA,0BACAA,sBACAA,oCACAA,kCAjBD,CAAYxB,QAAiB,KAqB7B,SAAYwB,GAEXA,YACAA,cAHD,CAAYvB,QAAuB,KAOnC,SAAYuB,GAEXA,cACAA,wBACAA,sBAJD,CAAYtB,QAA0B,KAQtC,SAAYsB,GAEXA,oBACAA,wBACAA,kBACAA,oBALD,CAAYrB,QAA4B,KASxC,SAAYqB,GAEXA,cACAA,kCACAA,sBACAA,gBALD,CAAYpB,QAAgC,KAS5C,SAAYoB,GAEXA,wBACAA,8CACAA,wBACAA,oBACAA,kBACAA,kCACAA,wBACAA,gBACAA,0BACAA,wBAXD,CAAYnB,QAAyB,KAerC,SAAYmB,GAEXA,sBACAA,kDAHD,CAAYlB,QAAmC,KAO/C,SAAYkB,GAEXA,oBACAA,kBACAA,8BAJD,CAAYjB,QAA+B,KAQ3C,SAAYiB,GAEXA,cACAA,oCACAA,wEAJD,CAAYhB,QAA8B,KAQ1C,SAAYgB,GAEXA,4BACAA,wBACAA,kCACAA,8CACAA,gCACAA,kCACAA,oCACAA,gCACAA,kBACAA,sBACAA,sCACAA,gCACAA,8BACAA,8BACAA,oBACAA,8BACAA,kCACAA,oBAnBD,CAAYf,QAAmB,KAuB/B,SAAYe,GAEXA,kBACAA,cACAA,oBACAA,kBACAA,sBACAA,kCACAA,4CACAA,4BACAA,sCACAA,4BACAA,kDACAA,0BACAA,sBAdD,CAAYd,QAA0B,KAkBtC,SAAYc,GAEXA,8BAFD,CAAYb,QAAiB,KAM7B,SAAYa,GAEXA,wBACAA,0BACAA,YACAA,gBALD,CAAYZ,QAAuB,KASnC,SAAYY,GAEXA,cACAA,sBACAA,wBAJD,CAAYX,QAA6B,KAQzC,SAAYW,GAEXA,YACAA,gBAHD,CAAYV,QAAU,KAOtB,SAAYU,GAEXA,wBACAA,oBACAA,oBAJD,CAAYT,QAAqB,KAQjC,SAAYS,GAEXA,YACAA,gBAHD,CAAYR,QAAc,KAO1B,SAAYQ,GAEXA,gBACAA,kBACAA,oBAJD,CAAYP,QAAW,KAQvB,SAAYO,GAEXA,4BACAA,oCACAA,oBACAA,oBALD,CAAYN,QAAoB,KAShC,SAAYM,GAEXA,kBACAA,wCACAA,wCACAA,0BACAA,oBAND,CAAYL,QAA0B,KAUtC,SAAYK,GAEXA,cACAA,cACAA,4BAJD,CAAYJ,QAAmC,KAQ/C,SAAYI,GAEXA,4BACAA,oBACAA,cACAA,gBACAA,wBAND,CAAYH,QAAgB,KAU5B,SAAYG,GAEXA,kBACAA,wBACAA,oCAJD,CAAYF,QAAgC,KAUrC,IAkJKyC,GASAC,GA3JCC,GAAQ,CACnBC,mBAAoBzL,GACrB0L,oBAAqBzL,GACrB0L,yBAA0BzL,GAC1B0L,qBAAsBzL,GACtB0L,4BAA6BzL,GAC7B0L,yBAA0BzL,GAC1B0L,gBAAiBzL,GACjB0L,kBAAmBzL,EACnB0L,mBAAoBzL,EACpB0L,sBAAuBzL,GACvB0L,wBAAyBzL,GACzB0L,eAAgBzL,GAChB0L,UAAWzL,GACX0L,2BAA4BzL,GAC5B0L,2BAA4BzL,EAC5B0L,6BAA8BzL,GAC9B0L,+BAAgCzL,GAChC0L,wBAAyBzL,GACzB0L,iBAAkBzL,GAClB0L,4BAA6BzL,GAC7B0L,qBAAsBzL,EACtB0L,mBAAoBzL,GACpB0L,iCAAkCzL,GAClC0L,4BAA6BzL,GAC7B0L,qBAAsBzL,GACtB0L,gCAAiCzL,GACjC0L,gBAAiBzL,GACjB0L,+BAAgCzL,GAChC0L,gCAAiCzL,GACjC0L,gCAAiCzL,GACjC0L,yBAA0BzL,GAC1B0L,6BAA8BzL,GAC9B0L,yBAA0BzL,GAC1B0L,2BAA4BzL,GAC5B0L,eAAgBzL,GAChB0L,iBAAkBzL,EAClB0L,SAAUzL,EACV0L,aAAczL,GACd0L,WAAYzL,GACZ0L,0BAA2BzL,GAC3B0L,iBAAkBzL,GAClB0L,0BAA2BzL,GAC3B0L,uCAAwCzL,GACxC0L,0BAA2BzL,GAC3B0L,gCAAiCzL,GACjC0L,0BAA2BzL,GAC3B0L,eAAgBzL,GAChB0L,qBAAsBzL,GACtB0L,sCAAuCzL,GACvC0L,oCAAqCzL,GACrC0L,UAAWzL,GACX0L,gCAAiCzL,GACjC0L,0BAA2BzL,GAC3B0L,cAAezL,GACf0L,iBAAkBzL,GAClB0L,2BAA4BzL,GAC5B0L,sBAAuBzL,GACvB0L,iBAAkBzL,GAClB0L,qBAAsBzL,GACtB0L,eAAgBzL,GAChB0L,6BAA8BzL,GAC9B0L,6BAA8BzL,GAC9B0L,sCAAuCzL,GACvC0L,iBAAkBzL,GAClB0L,6BAA8BzL,GAC9B0L,oCAAqCzL,GACrC0L,sBAAuBzL,GACvB0L,iCAAkCzL,GAClC0L,kBAAmBzL,GACnB0L,iBAAkBzL,GAClB0L,mBAAoBzL,GACpB0L,wCAAyCzL,GACzC0L,4BAA6BzL,GAC7B0L,wBAAyBzL,GACzB0L,gCAAiCzL,GACjC0L,6BAA8BzL,GAC9B0L,kCAAmCzL,GACnC0L,kCAAmCzL,GACnC0L,mBAAoBzL,GACpB0L,sBAAuBzL,GACvB0L,8BAA+BzL,GAC/B0L,6BAA8BzL,GAC9B0L,gBAAiBzL,GACjB0L,uBAAwBzL,GACxB0L,0BAA2BzL,GAC3B0L,aAAczL,GACd0L,sBAAuBzL,GACvB0L,uBAAwBzL,GACxB0L,0BAA2BzL,GAC3B0L,oBAAqBzL,GACrB0L,gCAAiCzL,GACjC0L,mBAAoBzL,GACpB0L,mBAAoBzL,GACpB0L,2BAA4BzL,GAC5B0L,+BAAgCzL,GAChC0L,4BAA6BzL,GAC7B0L,wBAAyBzL,GACzB0L,wBAAyBzL,GACzB0L,oBAAqBzL,GACrB0L,4BAA6BzL,GAC7B0L,kCAAmCzL,GACnC0L,+BAAgCzL,GAChC0L,sBAAuBzL,GACvB0L,oCAAqCzL,GACrC0L,6BAA8BzL,GAC9B0L,4BAA6BzL,GAC7B0L,6BAA8BzL,GAC9B0L,mCAAoCzL,GACpC0L,yBAA0BzL,GAC1B0L,mCAAoCzL,GACpC0L,kCAAmCzL,GACnC0L,4BAA6BzL,GAC7B0L,uBAAwBzL,GACxB0L,mCAAoCzL,GACpC0L,aAAczL,GACd0L,qCAAsCzL,GACtC0L,yBAA0BzL,GAC1B0L,qBAAsBzL,GACtB0L,uCAAwCzL,GACxC0L,kBAAmBzL,GACnB0L,wBAAyBzL,GACzB0L,2BAA4BzL,GAC5B0L,6BAA8BzL,GAC9B0L,iCAAkCzL,GAClC0L,0BAA2BzL,GAC3B0L,oCAAqCzL,GACrC0L,gCAAiCzL,GACjC0L,+BAAgCzL,GAChC0L,oBAAqBzL,GACrB0L,2BAA4BzL,GAC5B0L,kBAAmBzL,GACnB0L,wBAAyBzL,GACzB0L,8BAA+BzL,GAC/B0L,WAAYzL,GACZ0L,sBAAuBzL,GACvB0L,eAAgBzL,GAChB0L,YAAazL,GACb0L,qBAAsBzL,GACtB0L,2BAA4BzL,GAC5B0L,oCAAqCzL,GACrC0L,iBAAkBzL,GAClB0L,iCAAkCzL,KAInC,SAAYE,GAEXA,wBACAA,oCACAA,4BACAA,gCALD,CAAYuC,QAAyB,KASrC,SAAYvC,GAEXA,4BACAA,oBACAA,kBAJD,CAAYwC,QAA4B,SOxpDnCgJ,GAWAC,2BCqCMC,EAAU,IAlDrB,wBAYIzL,oBAAoB,EATpB,6BAAID,6BAAc,KAMlB,WAAuB,OAAOC,KAAK0L,qBANnC,SAAmBvL,GACXH,KAAK0L,kBAAoBvL,IAC7BH,KAAK0L,gBAAkBvL,EACLwL,SAAgBC,MACxBC,oDAOdC,sBAAI/L,oBAAK,KAAT,WAAoB,OAAO,IAAIgM,sCAC/BD,sBAAI/L,wBAAS,KAAb,WAAwB,OAAO,IAAIgM,MAAK,IAAIA,MAAOC,eAAe,IAAID,MAAOE,YAAY,IAAIF,MAAOG,UAAY,oCAChHJ,sBAAI/L,uBAAQ,KAAZ,WAAuB,OAAO,IAAIgM,MAAK,IAAIA,MAAOC,eAAe,IAAID,MAAOE,YAAY,IAAIF,MAAOG,UAAY,oCAC/GJ,sBAAI/L,iCAAkB,KAAtB,WAAiC,OAAO,IAAIgM,MAAK,IAAIA,MAAOC,eAAe,IAAID,MAAOE,YAAY,IAAIF,MAAOG,UAAY,oCACzHJ,sBAAI/L,+BAAgB,KAApB,WAA+B,OAAO,IAAIgM,KAAK/L,KAAKmM,UAAUH,cAAehM,KAAKmM,UAAUF,WAAYjM,KAAKmM,UAAUD,UAAY,oCACnIJ,sBAAI/L,iCAAkB,KAAtB,WAAiC,OAAO,IAAIgM,KAAK/L,KAAKmM,UAAUH,cAAehM,KAAKmM,UAAUF,WAAYjM,KAAKmM,UAAUD,UAAY,oCACrIJ,sBAAI/L,gCAAiB,KAArB,WAAgC,OAAO,IAAIgM,KAAK/L,KAAKmM,UAAUH,cAAehM,KAAKmM,UAAUF,WAAYjM,KAAKmM,UAAUD,UAAY,qCACpIJ,sBAAI/L,kCAAmB,KAAvB,WAAkC,OAAO,IAAIgM,KAAK/L,KAAKmM,UAAUH,cAAehM,KAAKmM,UAAUF,WAAYjM,KAAKmM,UAAUD,UAAY,qCACtIJ,sBAAI/L,gCAAiB,KAArB,WAAgC,OAAO,IAAIgM,KAAK/L,KAAKmM,UAAUH,cAAehM,KAAKmM,UAAUF,WAAYjM,KAAKmM,UAAUD,UAAY,qCACpIJ,sBAAI/L,kCAAmB,KAAvB,WAAkC,OAAO,IAAIgM,KAAK/L,KAAKmM,UAAUH,cAAehM,KAAKmM,UAAUF,WAAYjM,KAAKmM,UAAUD,UAAY,qCACtIJ,sBAAI/L,iCAAkB,KAAtB,WAAiC,OAAO,IAAIgM,MAAK,IAAIA,MAAOC,eAAe,IAAID,MAAOE,WAAY,oCAClGH,sBAAI/L,gCAAiB,KAArB,WAAgC,OAAO,IAAIgM,MAAK,IAAIA,MAAOC,eAAe,IAAID,MAAOE,WAAa,EAAG,oCACrGH,sBAAI/L,iCAAkB,KAAtB,WAAiC,OAAO,IAAIgM,MAAK,IAAIA,MAAOC,eAAe,IAAID,MAAOE,WAAa,EAAG,oCACtGH,sBAAI/L,gCAAiB,KAArB,WAAgC,OAAO,IAAIgM,MAAK,IAAIA,MAAOC,eAAe,IAAID,MAAOE,WAAY,oCACjGH,sBAAI/L,gCAAiB,KAArB,WAAgC,OAAO,IAAIgM,MAAK,IAAIA,MAAOC,cAAuD,EAAxCI,KAAKC,OAAM,IAAIN,MAAOE,WAAa,GAAQ,oCACrHH,sBAAI/L,8BAAe,KAAnB,WAA8B,OAAO,IAAIgM,MAAK,IAAIA,MAAOC,cAAe,EAAG,oCAC3EF,sBAAI/L,kCAAmB,KAAvB,WAAkC,OAAO,IAAIgM,MAAK,IAAIA,MAAOC,cAAgB,EAAG,EAAG,oCACnFF,sBAAI/L,+BAAgB,KAApB,WAA+B,OAAO,IAAIgM,MAAK,IAAIA,MAAOC,cAAe,GAAI,qCAC7EF,sBAAI/L,kCAAmB,KAAvB,WAAkC,OAAO,IAAIgM,MAAK,IAAIA,MAAOC,cAAuD,EAAxCI,KAAKC,OAAM,IAAIN,MAAOE,WAAa,GAAQ,oCACvHH,sBAAI/L,mCAAoB,KAAxB,WAAmC,OAAO,IAAIgM,MAAK,IAAIA,MAAOC,cAAuD,EAAxCI,KAAKC,OAAM,IAAIN,MAAOE,WAAa,GAAS,EAAG,oCAC5HH,sBAAI/L,+BAAgB,KAApB,WAA+B,OAAO,IAAIgM,MAAK,IAAIA,MAAOC,cAAe,EAAG,oCAC5EF,sBAAI/L,gCAAiB,KAArB,WAAgC,OAAO,IAAIgM,MAAK,IAAIA,MAAOC,cAAgB,EAAG,EAAG,oCACjFF,sBAAI/L,mCAAoB,KAAxB,WAAmC,OAAOC,KAAKsM,iDAC/CR,sBAAI/L,iCAAkB,KAAtB,WAAiC,OAAO,IAAIgM,MAAK,IAAIA,MAAOC,cAAe,EAAG,qCAC9EF,sBAAI/L,kCAAmB,KAAvB,WAAkC,OAAO,IAAIgM,MAAK,IAAIA,MAAOC,cAAuD,EAAxCI,KAAKC,OAAM,IAAIN,MAAOE,WAAa,GAAS,EAAG,oCAC3HH,sBAAI/L,oCAAqB,KAAzB,WAAoC,OAAO,IAAIgM,MAAK,IAAIA,MAAOC,cAAe,EAAG,oCACjFF,sBAAI/L,kCAAmB,KAAvB,WAAkC,OAAO,IAAIgM,MAAK,IAAIA,MAAOC,cAAe,EAAG,qCAC/EF,sBAAI/L,mCAAoB,KAAxB,WAAmC,OAAO,IAAIgM,MAAK,IAAIA,MAAOC,cAAe,EAAG,oCAChFF,sBAAI/L,iCAAkB,KAAtB,WAAiC,OAAO,IAAIgM,MAAK,IAAIA,MAAOC,cAAe,EAAG,qCAC9EF,sBAAI/L,oCAAqB,KAAzB,WAAoC,OAAO,IAAIgM,MAAK,IAAIA,MAAOC,cAAe,EAAG,oCACjFF,sBAAI/L,kCAAmB,KAAvB,WAAkC,OAAO,IAAIgM,MAAK,IAAIA,MAAOC,cAAe,GAAI,qCAChFF,sBAAI/L,+BAAgB,KAApB,WAAmC,MAAO,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,4CACtO+L,sBAAI/L,gCAAiB,KAArB,WAAkC,MAAO,2CACzC+L,sBAAI/L,+BAAgB,KAApB,WAAiC,MAAO,2CAC5CA,EAhDA,6eC6BI,WAAuCM,EAAcC,UAAyBP,YAAMM,GAAQ,cAAeC,IAAIN,KAGvG,OAL6BuM,QAK7BpM,oBAAR,SAAgBE,GAElB,OAAOL,KAAKQ,IAAIC,iBAAiBT,KAAKU,eAAgB,UAAY,CAAC0B,cAAe/B,KAGxEF,mBAAR,SAAeE,GAEjB,OAAOL,KAAKQ,IAAIS,kBAAkBjB,KAAKU,eAAgB,SAAUL,OAAS,IAGhEF,kCAAR,SAA8BE,GAEhC,OAAOL,KAAKQ,IAAIS,kBAAkBjB,KAAKU,eAAgB,wBAAyBL,OAAS,IAG/EF,mCAAR,SAA+BE,GAEjC,OAAOL,KAAKQ,IAAIS,kBAAkBjB,KAAKU,eAAgB,yBAA0BL,OAAS,IAGhFF,oCAAR,SAAgCE,GAElC,OAAOL,KAAKQ,IAAIS,kBAAkBjB,KAAKU,eAAgB,0BAA2BL,OAAS,IAGjFF,iDAAR,SAA6CE,GAE/C,OAAOL,KAAKQ,IAAIS,kBAAkBjB,KAAKU,eAAgB,uCAAwCL,OAAS,IAG9FF,wCAAR,SAAoCE,GAEtC,OAAOL,KAAKQ,IAAIS,kBAAkBjB,KAAKU,eAAgB,8BAA+BL,OAAS,IAGrFF,iCAAR,SAA6BE,GAE/B,OAAOL,KAAKQ,IAAIC,iBAAiBT,KAAKU,eAAgB,uBAAyB,CAAC8L,cAAenM,KAGrFF,0BAAR,SAAsBE,GAExB,OAAOL,KAAKQ,IAAIS,kBAAkBjB,KAAKU,eAAgB,gBAAiBL,OAAS,IAGvEF,mCAAR,SAA+BE,GAEjC,OAAOL,KAAKQ,IAAIS,kBAAkBjB,KAAKU,eAAgB,yBAA0BL,OAAS,sEAlD3Ea,SAAMC,MAACC,cAjBfC,OAeIlB,qUAAmBsM,KAD/BvL,iBACYf,IAA4BoB,8eCNrC,WAAuClB,EAAcC,UAAyBP,YAAMM,GAAQ,sBAAuBC,IAAIN,KAG/G,OALqC0M,QAKrCvM,mBAAR,SAAeE,EAAyCC,GAE1D,OAAON,KAAKQ,IAAIS,kBAAkBjB,KAAKU,eAAgB,SAAUL,EAAgB,MAAPC,OAAO,EAAPA,EAASO,mBAGzEV,2BAAR,SAAuBE,EAAyCC,GAElE,OAAON,KAAKQ,IAAIS,kBAAkBjB,KAAKU,eAAgB,iBAAkBL,EAAgB,MAAPC,OAAO,EAAPA,EAASO,mBAGjFV,8BAAR,SAA0BE,EAAiBC,GAE7C,OAAON,KAAKQ,IAAIC,iBAAiBT,KAAKU,eAAgB,oBAAsB,CAACiM,QAAStM,EAASqB,UAAWpB,uEAf3FY,SAAMC,MAACC,cATfC,OAOIlB,qUAA2ByM,KADvC1L,iBACYf,IAAoCoB,+dCdjDsL,eACI,mBACI9M,cAAOC,KACP,SAAKC,SAAW,YA+BxB,OAlC6B6M,QAkC7B3M,EAlCA,CAA6BC,geCF7B2M,eACI,mBACIhN,cAAOC,KASJ,iBAAmB,IAAI6M,GAR1BxM,EAAKJ,SAAW,wBAWxB,OAdyC+M,QAczC7M,EAdA,CAAyCC,siBCKzC6M,eACI,mBACIlN,cAAOC,KAoBJ,iBAAmB,IAAI6M,GACvBxM,sBAA2C,IAAI0M,GAC/C1M,QAAkC,GArBrCA,EAAKJ,SAAW,kCAwBxB,OA3BmDiN,QA2BnD/M,EA3BA,CAAmDC,MA6BnD+M,eACI,mBACIpN,cAAOC,KACP,SAAKC,SAAW,2BAOxB,OAV4CiN,QAU5C/M,EAVA,CAA4CC,geChC5CgN,eACI,mBACIrN,cAAOC,KAIJ,kBAAgC,IAAI+M,GACpC1M,qBAAoD,IAAI4M,GACxD5M,WAA4B,IAAIyB,EALnCzB,EAAKJ,SAAW,sCAOxB,OAVuDoN,QAUvDlN,EAVA,CAAuDC,geCFvDkN,eACI,mBACIvN,cAAOC,KAIJ,kBAAgC,IAAI+M,GAHvC1M,EAAKJ,SAAW,iCAMxB,OATkDsN,QASlDpN,EATA,CAAkDC,geCAlDoN,eACI,mBACIzN,cAAOC,KACP,SAAKC,SAAW,uBASxB,OAZwCwN,QAYxCtN,EAZA,CAAwCC,geCFxCsN,eACI,mBACI3N,cAAOC,KACP,SAAKC,SAAW,mCAaxB,OAhBoD0N,QAgBpDxN,EAhBA,CAAoDC,6eVCpD,SAAKL,GACDA,oCACHA,kCACAA,oCACAA,8BACAA,4CACAA,oCACAA,sDACAA,sDARD,CAAKwL,QAAoB,KAWzB,SAAKxL,GACJA,4FACAA,oFACAA,wEACAA,0EACAA,oFACAA,sFACAA,0FACAA,kEACAA,gGACGA,0FACAA,4FACAA,0GAZJ,CAAKyL,QAA6B,SWY7BoC,kBXKD,oBACI7N,cAAOC,KAGX,OAL+B6N,QAK/B/B,sBAAI3L,mBAAI,KAAR,WACI,OAAOH,KAAK8N,0CAKT3N,oBAAP,iBACI,OAAgB,QAATE,OAAK0N,YAAI,eAAEC,QAAS/W,UAGxBkJ,mBAAP,iBACI,OAAgB,QAATE,OAAK0N,YAAI,eAAEC,QAAS/W,SAGxBkJ,yBAAP,WACI,OAAOH,KAAKiO,WAAajO,KAAK+N,KAAKG,cAOhC/N,4BAAP,WACI,OAAOH,KAAKmO,QAAQ,CAAC5C,GAAqB6C,mBAGvCjO,2BAAP,WACI,OAAOH,KAAKmO,QAAQ,CAAC5C,GAAqB8C,kBAGvClO,mCAAP,WACI,OAAOH,KAAKmO,QAAQ,CAAC5C,GAAqB8C,gBACtC,CAAC7C,GAA8B8C,4CAGhCnO,gCAAP,WACI,OAAOH,KAAKmO,QAAQ,CAAC5C,GAAqB8C,eAAgB9C,GAAqBgD,qBAC3E,CAAC/C,GAA8BgD,iDAGhCrO,qCAAP,WACI,OAAOH,KAAKmO,QAAQ,CAAC5C,GAAqBkD,0BACtC,CAACjD,GAA8BkD,2CAGhCvO,4BAAP,WACI,OAAOH,KAAKmO,QAAQ,CAAC5C,GAAqBoD,iBACtC,CAACnD,GAA8BoD,qCAGhCzO,yBAAP,WACI,OAAOH,KAAKmO,QAAQ,CAAC5C,GAAqBsD,cACtC,CAACrD,GAA8BsD,kCAGhC3O,qCAAP,WACI,OAAOH,KAAKmO,QAAQ,CAAC5C,GAAqBwD,0BACtC,CAACvD,GAA8BwD,8CAGhC7O,gCAAP,WACI,OAAOH,KAAKmO,QAAQ,GAChB,CAAC3C,GAA8ByD,sCAGhC9O,4BAAP,WACI,OAAOH,KAAKmO,QAAQ,CAAC5C,GAAqB2D,mBAGvC/O,6CAAP,WACI,OAAQH,KAAKmP,UAAYnP,KAAK8N,SAASsB,oBAAsBzV,QAO1DwG,6BAAP,WACI,OAAOH,KAAKmO,WAGThO,sCAAP,WACI,QAAIH,KAAKiO,aACJjO,KAAKmP,WAEHnP,KAAK+N,KAAKsB,yCACbrP,KAAK+N,KAAKe,gCACV9O,KAAK+N,KAAKS,gDAGXrO,gCAAP,WACI,OAAOH,KAAKmO,QAAQ,CAAC5C,GAAqB2D,iBACtC,CAAC1D,GAA8B8D,8CAGhCnP,2BAAP,WACI,OAAOH,KAAKmO,QAAQ,CAAC5C,GAAqB2D,iBACtC,CAAC1D,GAA8B+D,+CAGhCpP,gCAAP,WACI,QAAIH,KAAKiO,aAIOjO,KAAKmO,QAAQ,CAAC5C,GAAqB2D,oBAK5ClP,KAAK+N,KAAKa,mCACb5O,KAAK+N,KAAKW,yCACV1O,KAAK+N,KAAKyB,8CAGXrP,yCAAP,WACI,OAAOH,KAAKmP,UAAYnP,KAAK+N,KAAKK,iBAG/BjO,uCAAP,WACI,OAAOH,KAAKmO,aAAQ,EAAW,CAAC3C,GAA8B6D,2CAG3DlP,qCAAP,WACI,OAAOH,KAAKyP,oCAAsCzP,KAAK0P,6BAGpDvP,6CAAP,WACI,OAAOH,KAAKmO,aAAQ,EAAW,CAAC3C,GAA8BmE,sDAG3DxP,kCAAP,SAA6BE,GACzB,QAAIL,KAAKiO,WAEFjO,KAAKoO,mBAAqBpO,KAAK+N,KAAKhN,iBAAmBV,GAKlEF,2DACI,OAAgB,QAATE,OAAK0N,YAAI,eAAEC,QAAS/W,WACV,QAATqJ,OAAKyN,YAAI,eAAES,gDAAiDxO,KAAK+N,KAAKQ,qBAG1EpO,oBAAR,SAAgBE,EACZC,GADJ,WAEI,YAFY,qBACZ,kBACIN,KAAKiO,cACJjO,KAAKmP,WAEW,MAAjB9O,OAAiB,EAAjBA,EAAmBuP,QAAS,GACxBvP,EAAkBwP,KAAK,YAAK,OAACC,EAAK/B,KAAKgC,OAGf,MAA5BzP,OAA4B,EAA5BA,EAA8BsP,QAAS,GACnCtP,EAA6BuP,KAAK,YAAK,OAACC,EAAK/B,KAAKgC,6CA/JrD5P,qUAAa6P,KADzB9O,iBACYf,IAAsB8P,+eYP/B,WAAuC5P,EAAcC,UAAyBP,YAAMM,GAAQ,gCAAiCC,IAAIN,KAGzH,OAL+CkQ,QAK/C/P,mBAAR,SAAeE,EAAkCC,GAEnD,OAAON,KAAKQ,IAAIS,kBAAkBjB,KAAKU,eAAgB,SAAUL,EAAgB,MAAPC,OAAO,EAAPA,EAASO,mBAGzEV,oCAAR,SAAgCE,GAElC,OAAOL,KAAKQ,IAAIC,iBAAiBT,KAAKU,eAAgB,0BAA4B,CAACgB,UAAWrB,KAGpFF,yBAAR,SAAqBE,GAEvB,OAAOL,KAAKQ,IAAIS,kBAAkBjB,KAAKU,eAAgB,eAAgBL,OAAS,sEAfjEa,SAAMC,MAACC,cAVfC,OAQIlB,qUAAqCgQ,KADjDjP,iBACYf,IAA8CoB,+dCjB3D6O,eACI,mBACIrQ,cAAOC,KACP,SAAKC,SAAW,wBAMxB,OATyCoQ,QASzClQ,EATA,CAAyCC,ieFsBzC,SAAKL,GACDA,iCACAA,iCACAA,mCAHJ,CAAK6N,QAAsB,KAK3B,IGvBK0C,GHuBLC,0EAOI,iCAA0B3C,GAa1BvN,sBAAqB,EACrBA,wBAAuB,EACvBA,aAAY,IAChB,OAvBoBmQ,QAuBpBrQ,EAvBA,CAAoBC,qBAoChB,WAAYC,EACAC,EACAwP,EACAC,EACAU,EACAC,EACAC,EACDC,GAPX,MAQI7Q,YAAMM,EAAG,0CAA2CD,KAAYmQ,GAAOM,eAA4B7Q,KAP3F,uCACA8Q,wBACAA,+BACAA,oBACAA,4BACAA,yBACDA,oBATX,OAJyDN,QAIzD1E,sBAAW3L,6BAAc,KAAzB,WAA8B,OAAOsL,kDAalBtL,sBAAnB,WAEIH,KAAK+Q,MAAMrP,UAAYsP,SAAShR,KAAKiR,YAAYvP,WAGjD1B,KAAK+Q,MAAMtP,WAAauP,SAAShR,KAAKiR,YAAYxP,YAClDzB,KAAK+Q,MAAMG,aAAelR,KAAKiR,YAAYE,gBAC3CnR,KAAK+Q,MAAM3O,cAAgB4O,SAAShR,KAAKiR,YAAY7O,eAGjDpC,KAAK+Q,MAAMtP,WAAczB,KAAK+Q,MAAM/C,KAAOJ,GAAuBwD,YACjEpR,KAAS+Q,MAAMG,aAAgBlR,KAAK+Q,MAAM/C,KAAOJ,GAAuByD,YACtErR,KAAK+Q,MAAM/C,KAAOJ,GAAuB0D,cAMjCnR,4BAAnB,sBACUG,EAAYN,KAAKuR,eACjBzB,EAAe9P,KAAKwR,oBAAoBC,QAAQzR,KAAK+Q,MAAM3O,eAC3D2N,EAAW/P,KAAK0R,gBAAgBC,mBAAmB3R,KAAK+Q,MAAM3O,eAEpEpC,KAAK4R,qBAAoBC,MAAIvR,EAAWwP,EAAcC,GAAU+B,UAAU,SAACrB,GACvEpQ,EAAK0Q,MAAMgB,SAAWtB,EAAO,GAC7BpQ,EAAK0Q,MAAMiB,YAAcvB,EAAO,GAAGwB,OACnC5R,EAAK0Q,MAAMmB,QAAUzB,EAAO,GAAGwB,OAE/B5R,EAAS0Q,MAAM/C,OAASJ,GAAuB0D,aAE3CjR,EAAK8R,yBAAwB,IAE7B9R,EAAK8R,yBAAwB,GAE7B9R,EAAK+R,0BAGT/R,EAAKgS,uBAIMlS,+BAAnB,WACQH,KAAK4R,mBAAqB5R,KAAK4R,kBAAkBU,eAGtCnS,wBAAnB,WACI,IAAIE,EAAYL,KAAK+Q,MAAMgB,SAAW,GAAG/R,KAAKuS,GAAG,eAAmB,GAAGvS,KAAKuS,GAAG,sBAC/E,OAAUvS,KAAKuS,GAAG,0BAAyB,MAAMlS,GAGrDF,sDAAiCE,GACzBA,EAAEmS,QAAUtY,MACZ8F,KAAK+Q,MAAM0B,SAAWzS,KAAK0S,2BAE3B1S,KAAK+Q,MAAM0B,SAAWzS,KAAK+Q,MAAM4B,qBAOzCxS,8BACIH,KAAK+Q,MAAM6B,kBAAmB,EAE9B5S,KAAS+Q,MAAM8B,UACX7S,KAAK8S,uBAEL9S,KAAK+S,+BAIL5S,iCAAR,sBACI,GAAIH,KAAK+Q,MAAMtP,WAAY,CACvB,IAAMnB,EAAc,IAAI8P,GACxB9P,EAAY8B,cAAgBpC,KAAK+Q,MAAM3O,cACvC9B,EAAY0S,sBAAwBhT,KAAK+Q,MAAMtP,WAE/CzB,KAAKvE,GAAGuE,KAAKwR,oBAAoByB,cAAc3S,IAAc,EAAO,SAACyP,GACjE1P,EAAK6S,kBAAkBnD,EAASkC,OAAQnS,GACxCO,EAAK0Q,MAAM6B,kBAAmB,EAC9BvS,EAAK8S,gBACN,SAACpD,GACA1P,EAAK+S,GAAGC,YAAYtD,EAASuD,iBAC7BjT,EAAK0Q,MAAM6B,kBAAmB,QAE/B,CACH,IAAM9C,EAAS,IAAIxC,GACnBwC,EAAO1N,cAAgBpC,KAAK+Q,MAAM3O,cAClC0N,EAAOiC,SAAW/R,KAAK+Q,MAAMgB,SAE7B/R,KAAKvE,GAAGuE,KAAKwR,oBAAoB+B,uBAAuBzD,IAAS,EAAO,SAACC,GACrE1P,EAAK6S,kBAAkBnD,EAASkC,OAAQnS,GACxCO,EAAK0Q,MAAM6B,kBAAmB,EAC9BvS,EAAK8S,gBACN,SAACpD,GACA1P,EAAK+S,GAAGC,YAAYtD,EAASuD,iBAC7BjT,EAAK0Q,MAAM6B,kBAAmB,MAKlCzS,wCAAR,sBACUG,EAAS,IAAI8M,GACnB9M,EAAOyR,SAAW/R,KAAK+Q,MAAMgB,SAC7BzR,EAAOkT,mBAAqBxT,KAAK+Q,MAAMyC,mBACvClT,EAAOmS,SAAWzS,KAAK+Q,MAAM0B,SAE7BzS,KAAKvE,GAAGuE,KAAKwR,oBAAoBiC,4BAA4BnT,IAAS,EAAO,SAACwP,GAC1EzP,EAAK0Q,MAAMgB,SAAWjC,EAASmC,OAAOF,SAClCjC,EAASmC,OAAOQ,WAChBpS,EAAK0Q,MAAM0B,SAAS9F,QAAUmD,EAASmC,OAAOQ,SAAS9F,QACvDtM,EAAK0Q,MAAM0B,SAASO,sBAAwBlD,EAASmC,OAAOQ,SAASO,uBAGrE3S,EAAKqT,cAAcC,8BAAgCtT,EAAK0Q,MAAM/C,OAASJ,GAAuB0D,aAC9FjR,EAAKuT,2BAELvT,EAAKwT,gBAEV,SAAC/D,GACAzP,EAAK0Q,MAAM6B,kBAAmB,EAC9BvS,EAAK+S,GAAGC,YAAYvD,EAASwD,oBAIrCnT,uCAAkBE,GACVL,KAAK+Q,MAAM0B,WAAYzS,KAAK+Q,MAAM0B,SAASqB,cAAgB9T,KAAK+T,YAAY1T,KAGpFF,qCAAgBE,GACRL,KAAK+Q,MAAM0B,WAAYzS,KAAK+Q,MAAM0B,SAASuB,eAAiBhU,KAAK+T,YAAY1T,KAG7EF,oCAAR,SAAgCE,GACxBL,KAAK0T,cAAcC,8BAAgC3T,KAAK+Q,MAAMkD,uBAAyB5T,IACvFL,KAAK+Q,MAAMkD,qBAAuB5T,EAE9BA,IAAUL,KAAK+Q,MAAM0B,SAAYzS,KAAKkU,eAChC7T,IAASL,KAAK+Q,MAAM0B,SAAW,QAKzCtS,yBAAR,WACI,GAAIH,KAAK+Q,MAAMtP,WAAc,OAAOzB,KAAKmU,4BAA4BC,IAAIpU,KAAK+Q,MAAMtP,YAAY4S,MAAK,QAAK,YAAK,SAAEpC,UAEjH,GAAIjS,KAAK+Q,MAAMG,aAAc,CACzB,IAAM7Q,EAAW,IAAI0M,GACrB,SAASuH,KAAOtU,KAAK+Q,MAAMG,aAC3B7Q,EAASkU,UAAW,EACpBlU,EAASqB,UAAY1B,KAAK+Q,MAAMrP,aAEzB8S,OAAGnU,GAGd,SAAOmU,OAAG,OAINrU,mCAAR,sBACIH,KAAK+Q,MAAMyC,mBAAqB,IAAIvG,GACpCjN,KAAK+Q,MAAMyC,mBAAmBR,sBAAwBhT,KAAK+Q,MAAMtP,WACjEzB,KAAK+Q,MAAMyC,mBAAmBe,UAAW,EACzCvU,KAAK+Q,MAAMyC,mBAAmBiB,qBAAuB3b,OACrDkH,KAAK+Q,MAAMyC,mBAAmBc,KAAOtU,KAAK+Q,MAAMgB,SAASuC,KACzDtU,KAAK+Q,MAAMyC,mBAAmBkB,SAAU,EACxC1U,KAAK+Q,MAAMyC,mBAAmBmB,UAAW,EACzC3U,KAAK+Q,MAAMyC,mBAAmBoB,yBAA0B,EACxD5U,KAAK+Q,MAAMyC,mBAAmBqB,wBAAyB,EACvD7U,KAAK+Q,MAAMyC,mBAAmB9R,UAAY1B,KAAK+Q,MAAMrP,UAErD1B,KAAK+Q,MAAMyC,mBAAmBsB,MAAQ,CAAC,MACvC9U,KAAK+Q,MAAMyC,mBAAmBsB,MAAM,GAAK,IAAI3H,GAC7CnN,KAAK+Q,MAAMyC,mBAAmBsB,MAAM,GAAGC,UAAY/U,KAAK+Q,MAAMiB,YAAYgD,OAC1EhV,KAAK+Q,MAAMyC,mBAAmBsB,MAAM,GAAGG,UAAYpc,SACnDmH,KAAK+Q,MAAMyC,mBAAmBsB,MAAM,GAAGI,UAAYtc,UAGnDoH,KAAKvE,GAAGuE,KAAKmV,2BAA2BC,wBAAwBpV,KAAK+Q,MAAMrP,YAAY,EAAO,SAACpB,GAC3FD,EAAK0Q,MAAMyC,mBAAmB6B,SAAW/U,EAASgV,QAI1DnV,+CACIH,KAAK+Q,MAAM0B,SAAWzS,KAAK0S,4BAOvBvS,yBAAR,sBACI,GAAKH,KAAK0T,cAAcC,6BAGxB,IAAI3T,KAAK+Q,MAAM/C,OAASJ,GAAuByD,YAE3C,YADArR,KAAK+Q,MAAM0B,SAAWzS,KAAK0S,4BAI/B,IAAMpS,EAAaN,KAAK+Q,MAAM/C,OAASJ,GAAuB0D,aAAetR,KAAK+Q,MAAMiB,YAAYgB,sBAAwBhT,KAAK+Q,MAAMgB,SAASpF,QAChJ3M,KAAKvE,GAAGuE,KAAKuV,wBAAwBC,mBAAmBlV,EAAYN,KAAK+Q,MAAMmB,QAAQxQ,YAAY,EAAO,SAACoO,GACvG,GAAIA,EAAS2F,SAAS7F,OAAS,EAAG,CAC9B,QAASG,EAAI,EAAGA,EAAID,EAAS2F,SAAS7F,OAAQG,IAC1C,QAASU,EAAI,EAAGA,EAAIX,EAAS2F,SAAS1F,GAAG2F,gBAAgB9F,OAAQa,IACzDX,EAAS2F,SAAS1F,GAAG2F,gBAAgBjF,GAAGkF,mBAAqBtV,EAAK0Q,MAAMiB,YAAY2D,mBACpFtV,EAAK0Q,MAAM4B,oBAAsB7C,EAAS2F,SAAS1F,IAK/D,IAAK1P,EAAK0Q,MAAM4B,qBAAoD,IAA7B7C,EAAS2F,SAAS7F,OAAc,CAGnE,GAFAvP,EAAK0Q,MAAM4B,oBAAsB7C,EAAS2F,SAAS,GAE/CpV,EAAK0Q,MAAM4B,oBAAoBiD,yBAA2BlZ,YAA0C,CACpG,IAAMgU,EAAyB,IAAI1O,EACnC0O,EAAuBiF,iBAAmBtV,EAAK0Q,MAAMiB,YAAY2D,iBACjEtV,EAAK0Q,MAAM4B,oBAAoB+C,gBAAgBG,KAAKnF,GAGxDrQ,EAAK0Q,MAAM+E,yBAA0B,EAGzCzV,EAAK0Q,MAAM0B,SAAWpS,EAAK0Q,MAAM4B,oBAGhCtS,EAAK0Q,MAAM0B,WAAYpS,EAAK0Q,MAAM0B,SAAWpS,EAAKqS,gCAKvDvS,qCAAR,WACI,GAAKH,KAAK0T,cAAcC,6BAExB,KAAMtT,EAAW,IAAIyB,EACrB,SAASyS,UAAW,EACpBlU,EAASqB,UAAY1B,KAAK+Q,MAAMmB,QAAQxQ,UACxCrB,EAASuV,uBAAyBlZ,YAClC2D,EAASqV,gBAAkB,CAAC,MAC5BrV,EAASqV,gBAAgB,GAAK,IAAI1T,EAClC3B,EAASqV,gBAAgB,GAAGC,iBAAmB3V,KAAK+Q,MAAMiB,YAAY2D,iBACtEtV,EAASyT,cAAgB9T,KAAK+T,YAAY/T,KAAK+Q,MAAMyC,mBAAqBxT,KAAK+Q,MAAMyC,mBAAmBuC,SAAW/V,KAAK+Q,MAAMiB,YAAYjG,MAC1I1L,EAAS2V,mBAAqB1X,UAE9B0B,KAAS+Q,MAAM/C,OAASJ,GAAuB0D,cAC3CjR,EAASiU,KAAOtU,KAAK+Q,MAAMgB,SAASuC,KACpCjU,EAAS2S,sBAAwBhT,KAAK+Q,MAAMgB,SAASpF,UAErDtM,EAASiU,KAAOtU,KAAK+Q,MAAMiB,YAAYiE,wBACvC5V,EAAS2S,sBAAwBhT,KAAK+Q,MAAMiB,YAAYgB,uBAGrD3S,IAGHF,yBAAR,sBACUG,EAAS,IAAIkN,GACnBlN,EAAOS,eAAiB0K,iBACxBnL,EAAO4V,aAAetW,eACtBI,KAAKvE,GAAGuE,KAAKmW,qBAAqBtC,aAAavT,IAAS,EAAO,WACvDD,EAAKqT,cAAcC,8BAAgCtT,EAAK0Q,MAAM0B,SAC9DpS,EAAKuT,4BAELvT,EAAK0Q,MAAM6B,kBAAmB,EAC9BvS,EAAK6S,kBAAkB7S,EAAK0Q,MAAMiB,YAAalS,GAC/CO,EAAK8S,iBAEV,SAACrD,GACAzP,EAAK+S,GAAGC,YAAYvD,EAASwD,iBAC7BjT,EAAK0Q,MAAM6B,kBAAmB,KAI9BzS,qCAAR,sBACUG,EAAS,IAAIoN,GACnBpN,EAAOS,eAAiB0K,iBACxBnL,EAAO8V,sBAAwB,CAACpW,KAAK+Q,MAAM0B,SAASO,uBACpD1S,EAAO+V,iBAAmB,CAACrW,KAAK+Q,MAAM0B,SAAS9F,SAE/C3M,KAAKvE,GAAGuE,KAAKmW,qBAAqBvC,yBAAyBtT,IAAS,EAAO,WACvED,EAAK6S,kBAAkB7S,EAAK0Q,MAAMiB,YAAalS,GAC/CO,EAAK8S,eAEL9S,EAAK0Q,MAAM6B,kBAAmB,GAC/B,SAAC9C,GACAzP,EAAK+S,GAAGC,YAAYvD,EAASwD,iBAC7BjT,EAAK0Q,MAAM6B,kBAAmB,KAI9BzS,wBAAR,SAAoBE,GAChB,OAAKA,GAEE,IAAI0L,KAAK1L,EAAS2L,cAAe3L,EAAS4L,WAAY5L,EAAS6L,YAG1E/L,wCACIH,KAAK+Q,MAAM0B,SAAW,+CA3WrB6D,WAHAC,UAFAC,UAgBAC,UArBAC,SAFAC,SADAC,SAsBAC,MAwCI1W,qUAAuC2W,KANnD5V,aAAU,CACP6V,UAAWT,IACXU,SAAU,uCACVC,SnB5DW,4wHmB+DF9W,IAAgD+W,+eIxCzD,WAAY7W,UAAyBN,YAAM,kBAAmBM,IAAIL,KAE1D,OAJiCmX,QAIjChX,sBAAR,SAAkBE,GAEd,OAAOL,KAAKQ,IAAIS,kBAAkBjB,KAAKU,eAAgB,YAAaL,OAAS,IAEzEF,2BAAR,SAAuBE,GAEnB,OAAOL,KAAKQ,IAAIC,iBAAiBT,KAAKU,eAAgB,iBAAmB,CAAC0W,WAAY/W,8CAlBrFgB,OAQIlB,qUAAuBkX,KADnCnW,iBACYf,IAAgCiB,0fCCzC,WAAYf,UAAyBN,YAAM,kBAAmBM,IAAIL,KAG1D,OALiCsX,QAKjCnX,mBAAR,SAAeE,EAAmCC,GAEpD,OAAON,KAAKQ,IAAIS,kBAAkBjB,KAAKU,eAAgB,SAAUL,EAAgB,MAAPC,OAAO,EAAPA,EAASO,4DAd5EQ,OAOIlB,qUAAuBoX,KADnCrW,iBACYf,IAAgCoB,+dCb7CiW,eACI,mBACIzX,cAAOC,KACP,SAAKC,SAAW,qBA2BxB,OA9BsCwX,QA8BtCtX,EA9BA,CAAsCC,geCFtCsX,eACI,mBACI3X,cAAOC,KACP,SAAKC,SAAW,8BAOxB,OAV+C0X,QAU/CxX,EAVA,CAA+CqX,6eC2B3C,WAAuCnX,EAAcC,UAAyBP,YAAMM,GAAQ,UAAWC,IAAIN,KAGnG,OALyB4X,QAKzBzX,mBAAR,SAAeE,EAA2BC,GAE5C,OAAON,KAAKQ,IAAIS,kBAAkBjB,KAAKU,eAAgB,SAAUL,EAAgB,MAAPC,OAAO,EAAPA,EAASO,mBAGzEV,iCAAR,SAA6BE,EAAmBC,GAElD,OAAON,KAAKQ,IAAIC,iBAAiBT,KAAKU,eAAgB,uBAAyB,CAACgB,UAAWrB,EAAWW,UAAWV,KAGvGH,2BAAR,SAAuBE,GAEzB,OAAOL,KAAKQ,IAAIS,kBAAkBjB,KAAKU,eAAgB,iBAAkBL,OAAS,IAGxEF,yBAAR,SAAqBE,GAEvB,OAAOL,KAAKQ,IAAIS,kBAAkBjB,KAAKU,eAAgB,eAAgBL,OAAS,IAGtEF,qCAAR,SAAiCE,GAEnC,OAAOL,KAAKQ,IAAIS,kBAAkBjB,KAAKU,eAAgB,2BAA4BL,OAAS,IAGlFF,yBAAR,SAAqBE,GAEvB,OAAOL,KAAKQ,IAAIS,kBAAkBjB,KAAKU,eAAgB,eAAgBL,OAAS,IAGtEF,uCAAR,SAAmCE,GAErC,OAAOL,KAAKQ,IAAIS,kBAAkBjB,KAAKU,eAAgB,6BAA8BL,OAAS,IAGpFF,8CAAR,SAA0CE,GAE5C,OAAOL,KAAKQ,IAAIS,kBAAkBjB,KAAKU,eAAgB,oCAAqCL,OAAS,IAG3FF,8CAAR,SAA0CE,GAE5C,OAAOL,KAAKQ,IAAIS,kBAAkBjB,KAAKU,eAAgB,oCAAqCL,OAAS,IAG3FF,sDAAR,SAAkDE,GAEpD,OAAOL,KAAKQ,IAAIS,kBAAkBjB,KAAKU,eAAgB,4CAA6CL,OAAS,IAGnGF,8BAAR,SAA0BE,GAE5B,OAAOL,KAAKQ,IAAIS,kBAAkBjB,KAAKU,eAAgB,oBAAqBL,OAAS,IAG3EF,mDAAR,SAA+CE,GAEjD,OAAOL,KAAKQ,IAAIC,iBAAiBT,KAAKU,eAAgB,yCAA2C,CAACgB,UAAWrB,uEA5D9Fa,SAAMC,MAACC,cAjBfC,OAeIlB,qUAAe0X,KAD3B3W,iBACYf,IAAwBoB,+dCtBrCuW,eACI,mBACI/X,cAAOC,KAYJ,iBAAuC,GAX1CK,EAAKJ,SAAW,0BAaxB,OAhB2C8X,QAgB3C5X,EAhBA,CAA2CC,ogBCJ3C4X,eACI,mBACIjY,cAAOC,KACP,SAAKC,SAAW,8BAMxB,OAT+CgY,QAS/C9X,EATA,CAA+CC,ghBCO/C8X,2EAQA,OARoBC,QAQpBhY,EARA,CAAoBC,qBAgDhB,WAAYC,UACRN,YAAMM,EAAG,+BAAgC6X,KAAMlY,KA7BnD,OAL8CmY,QAK9CrM,sBAAa3L,qBAAM,KAAnB,SAAoBE,QACF,IAAVA,IACAL,KAAK+Q,MAAMqH,cAAgB/X,EAAMgY,QACjCrY,KAAK+Q,MAAMuH,YAAcjY,EAAMiY,YAC/BtY,KAAKuY,YAAYlY,EAAMgY,QAAShY,EAAMiY,aACtCtY,KAAK+Q,MAAMyH,OAASnY,oCAI5ByL,sBAAa3L,4BAAa,KAA1B,SAA2BE,GAA3B,WACI,GAAiB,MAAbL,KAAKyY,KAAc,CACnBzY,KAAK+Q,MAAM2H,eAAeC,QAAQ,YAC9BrY,EAAKsY,qBAAqB7I,EAAc8I,QAG5C,IAAM/I,EAAe,GAErB9P,KAAK+Q,MAAMyH,OAAOM,MAAMH,QAAQ,aACvB5I,EAAKgJ,QAAUhJ,EAAKiJ,MAAQ3Y,IAC7ByP,EAAa+F,KAAK9F,EAAKkJ,QACvB3Y,EAAK4Y,kBAAkBnJ,MAI/B/P,KAAKyY,KAAKU,gBAAkBrJ,oCAQ3B3P,wBAAT,WACIH,KAAK+Q,MAAMqI,iBAAmB,IAC9BpZ,KAAK+Q,MAAM2H,eAAiB,IAGhCvY,mCAAcE,GACV,GAAIA,GAAmB,SAAdA,EAAEgZ,QAAoB,CAC3B,IAAM/Y,EAAWD,EAAEiZ,WACnBhZ,EAAQiZ,UAAUC,IAAI,cAAcnZ,EAAEoZ,KAAKC,aAEvCrZ,EAAEoZ,KAAKE,aAAe/d,YACtB0E,EAAQiZ,UAAUC,IAAI,kBAKlCrZ,8BAASE,GACL,OAAIA,GAASL,KAAK+Q,MAAMqH,cAAcxI,OAAiB5P,KAAK+Q,MAAMuH,YAAYsB,MACvE5Z,KAAK+Q,MAAMqH,cAAc/X,GAAOuZ,OAG3CzZ,+BAAUE,EAAqBC,GAC3B,OAAON,KAAK+Q,MAAMqH,cAAc/X,GAAauZ,MAAMtZ,IAGvDH,8CAAyBE,EAA+BC,GACpD,IAAMwP,EAAQxP,GAAeN,KAAK+Q,MAAMqH,cAAcxI,OAAS5P,KAAK+Q,MAAMuH,YAAYuB,QAAQxZ,EAAKqZ,aAAe1Z,KAAK+Q,MAAMqH,cAAc9X,GAAauZ,QAAQxZ,EAAKqZ,aACrK1Z,KAAK8Z,SAAS,CAAC,wBAAyBzZ,EAAK0Z,eAAgB,CAAEhE,SAAUjG,EAAMiG,SAAUiE,OAAQlK,EAAMkK,OAAQC,QAAQ,KAG3H9Z,oCAAeE,GACX,IAAMC,EAAOD,EAAE6Z,UAAUC,aAAa9Z,EAAE+Z,KAAKX,KAE7CzZ,KAAKkZ,kBAAkB5Y,IAG3BH,qCAAgBE,GACZ,IAAMC,EAAOD,EAAE6Z,UAAUC,aAAa9Z,EAAE+Z,KAAKX,KAC7CzZ,KAAK4Y,qBAAqBtY,IAG9BH,mCACIH,KAAK+Q,MAAM2H,eAAiB,GAC5B1Y,KAAKyY,KAAKU,gBAAkB,IAGxBhZ,wBAAR,SAAoBE,EAAgDC,GAChEN,KAAK+Q,MAAMsH,QAAU,CACjB,CAAEgC,UAAW,OAAQC,cAAc,GACnC,CAAED,UAAW,YAAaE,SAAS,EAAOC,UAAW,EAAGC,UAAW,OACnE,CAAEJ,UAAW,cAAeE,SAAS,EAAOC,UAAW,EAAGC,UAAW,QAGzE,QAAS3K,EAAI,EAAGA,EAAIzP,EAAcuP,OAAQE,IACtC9P,KAAK+Q,MAAMsH,QAAQxC,KAAK7V,KAAK0a,aAAara,EAAcyP,GAAIA,IAG5C,MAAhBxP,GACAN,KAAK+Q,MAAMsH,QAAQxC,KAAK7V,KAAK0a,aAAapa,EAAaD,EAAcuP,QAAQ,KAI7EzP,yBAAR,SAAqBE,EAA6CC,EAAewP,sBAC7E,IAAMC,EAAgBD,EAAU,YAAc,cACxCW,EAAc,CAAEkK,mBAAoB,iBAAkBC,SAAU,YAAaC,YAAava,EAAOga,cAAc,EAAOQ,aAAc,oBAE1I,GAAIza,EAAa0a,UAAY1a,EAAa0a,SAASnL,OAAS,EAAG,CAC3Da,EAAOuK,QAAU,GACjBvK,EAAOwK,UAAY,SAEnB,QAASvK,EAAI,EAAGA,EAAIrQ,EAAa0a,SAASnL,OAAQc,IAC9CD,EAAOuK,QAAQnF,KACX,CAAEqF,QAAS7a,EAAa0a,SAASrK,GAAGkJ,MAAM,GAAIS,UAActK,EAAa,IAAK1P,EAAa0a,SAASrK,GAAGyK,MAAK,IAAMC,OAAQpb,KAAKsW,EAAE+E,UAAWf,cAAc,EAAOO,YAAava,EAAOwa,aAAc,0BAI3MrK,EAAO4J,UAAetK,EAAa,IAAK1P,EAAa8a,MAAK,IAC1D1K,EAAO2K,OAASpb,KAAKsW,EAAE+E,UAG3B,OAAO5K,GAGHtQ,8BAAR,SAA0BE,GACtBL,KAAK+Q,MAAMqI,mBAGX,IAAM9Y,EAAUgb,iBAAkBjb,GAClCC,EAAQgU,KAAUtU,KAAKuS,GAAG,YAAW,IAAIjS,EAAQgU,KACjDhU,EAAQ2Y,OAASjZ,KAAK+Q,MAAMqI,iBAC5B9Y,EAAQqZ,WAAa/d,WAGrByE,EAAKkb,YAAc,GACnBlb,EAAKmb,UAAY,GAGjBxb,KAAK+Q,MAAMyH,OAAOM,MAAMjD,KAAKvV,GAC7BN,KAAK+Q,MAAM2H,eAAe7C,KAAK,CAC3BoD,OAAQ5Y,EAAK4Y,OACbJ,KAAMxY,EACNob,QAASnb,KAITH,iCAAR,SAA6BE,GACzB,IAAMC,EAAgBN,KAAK+Q,MAAM2H,eAAegD,OAAO,YAAK,SAAEzC,SAAW5Y,EAAK4Y,SAE9E,GAA6B,IAAzB3Y,EAAcsP,OAAc,CAC5BtP,EAAc,GAAGuY,KAAK0C,YAAcjb,EAAc,GAAGmb,QAAQF,YAC7Djb,EAAc,GAAGuY,KAAK2C,UAAYlb,EAAc,GAAGmb,QAAQD,UAE3D,IAAI1L,EAAQ9P,KAAK+Q,MAAMyH,OAAOM,MAAM6C,QAAQrb,EAAc,GAAGmb,SAEzD3L,GAAS,GAAK9P,KAAK+Q,MAAMyH,OAAOM,MAAM8C,OAAO9L,EAAO,GAExDA,EAAQ9P,KAAK+Q,MAAM2H,eAAeiD,QAAQrb,EAAc,IACxDN,KAAK+Q,MAAM2H,eAAekD,OAAO9L,EAAO,8CAnL3CwG,qCA2BJpV,YAASC,MAAC0a,+BAEV3a,wBACAA,+BASAA,WAdQf,qUAA4B2b,KANxC5a,aAAU,CACP6V,UAAWT,IACXU,SAAU,4BACVC,SCvBW,i8CD0BF9W,IAAqC4b,geEpBlDC,eACI,mBACIjc,cAAOC,KACP,SAAKC,SAAW,sBAQxB,OAXuCgc,QAWvC9b,EAXA,CAAuCqX,8dCevC0E,2EAiBA,OAjBoBC,QAiBpBhc,EAjBA,CAAoBC,qBA4BhB,WAAYC,EACAC,EACAwP,EACAC,EACAU,GAJZ,MAKI1Q,YAAMM,EAAG,2BAA4BD,KAAY8b,KAAMlc,KAJ/C,mCACA0Q,oBACAA,qBACAA,8BAIH,OAZiCyL,QAYjChc,iCAAT,WACI,IAAME,EAAW,IAAI+b,MACrB,SAASC,eAAgB,EAElBhc,GAGFF,wBAAT,WACIH,KAAK+Q,MAAMuL,WAAatc,KAAKuc,iBAAiBC,qBAAqBF,WACnEtc,KAAK+Q,MAAM0L,UAAYzc,KAAK+Q,MAAMuL,aAAe7gB,gBAAuCE,QAAoCA,OAC5HqE,KAAK+Q,MAAM2L,SAAWlhB,eACtBwE,KAAK+Q,MAAM4L,aAAejhB,SAC1BsE,KAAK+Q,MAAM6L,aAAe,EAC1B5c,KAAK+Q,MAAM8L,QAAU,GACrB7c,KAAK+Q,MAAM+L,UAAY,GACvB9c,KAAK+Q,MAAM8I,QAAU,GACrB7Z,KAAK+Q,MAAMgM,oBAAqB,EAChC/c,KAAK+Q,MAAMrP,UAAY,KACvB1B,KAAK+Q,MAAMiM,YAAc,GAEzBhd,KAAKid,oBAGD9c,4BAAT,WACKH,KAAKkd,iBACLld,KAAKmd,iBAGAhd,qBAAT,WACI,IAAIE,EAEJ,OAAQL,KAAK+Q,MAAMuL,iBACV7gB,OACD4E,EAASL,KAAKuS,GAAG,UACjB,WAEC9W,gBACD4E,EAASL,KAAKuS,GAAG,mBACjB,WAEC9W,gBACD4E,EAASL,KAAKuS,GAAG,mBAKzB,OAAOlS,GAGXF,6CACIH,KAAK+Q,MAAMrP,UAAY,KACvB1B,KAAK+Q,MAAM8L,QAAU,GACrB7c,KAAK+Q,MAAM+L,UAAY,GACvB9c,KAAK+Q,MAAMqM,kBAAoB,GAC/Bpd,KAAKmd,gBACLnd,KAAKqd,cACLrd,KAAKsd,gBACLtd,KAAKud,mBAGTpd,wCACIH,KAAK+Q,MAAM8L,QAAU,GACrB7c,KAAK+Q,MAAM+L,UAAY,GACvB9c,KAAK+Q,MAAMqM,kBAAoB,GAC/Bpd,KAAKqd,cACLrd,KAAKsd,gBACLtd,KAAKud,mBAGApd,0BAAT,WACIH,KAAKkd,iBACLld,KAAKwd,WAAWC,eAGDtd,0BAAnB,WACIH,KAAK0d,cACL1d,KAAKkd,iBACLld,KAAKwd,WAAWC,eAGpBtd,wCACIH,KAAKid,oBAGT9c,yCAAoBE,GAChBL,KAAK+Q,MAAM8I,QAAQ+B,OAAOvb,EAAO,IAGrCF,yCAAoBE,EAAGC,IACdD,EAAEsd,WACP3d,KAAK+Q,MAAM8I,QAAQvZ,GAAOyV,SAAW1V,EAAEsd,SAAS5H,SAChD/V,KAAK+Q,MAAM8I,QAAQvZ,GAAO0Z,OAAS3Z,EAAEsd,SAAS3D,SAGlD7Z,oCAAeE,EAAGC,IACTD,EAAEsd,WACP3d,KAAK+Q,MAAM8I,QAAQvZ,GAAO0Z,OAAS3Z,EAAEsd,SAAS5R,OAGlD5L,6CAAwBE,GACpBL,KAAK+Q,MAAM6L,aAAevc,GAGtBF,2BAAR,sBAEI,GAAKH,KAAK+Q,MAAMrP,UAAhB,CAQA,IAAMpB,EAAS,IAAIwX,GAEnBxX,EAAO0N,KAAOhO,KAAK+Q,MAAMuL,WACzBhc,EAAOoB,UAAY1B,KAAK+Q,MAAMrP,UAC9BpB,EAAOoc,SAAW1c,KAAK+Q,MAAM2L,SAC7Bpc,EAAOmc,UAAYzc,KAAK+Q,MAAM0L,UAC9Bnc,EAAOyc,mBAAqB/c,KAAK+Q,MAAMgM,mBACvCzc,EAAOqc,aAAe3c,KAAK+Q,MAAM4L,aACjCrc,EAAOuZ,QAAU7Z,KAAK+Q,MAAM8I,QAC5BvZ,EAAO0c,YAAchd,KAAK+Q,MAAMiM,YAChC1c,EAAOsd,iBAAmB5d,KAAK+Q,MAAM+L,UAAUe,OAAO7d,KAAK+Q,MAAM8L,SAEjE7c,KAAKvE,GAAGuE,KAAK8d,wBAAwBC,UAAUzd,IAAS,EAAO,SAACwP,GAC5DzP,EAAK0Q,MAAMyH,OAAS1I,EAASmC,OAE7B5R,EAAK0Q,MAAMiN,aAAe,GAC1B,QAASjO,EAAI,EAAGA,EAAID,EAASmC,OAAOgM,SAAUlO,IAC1C1P,EAAK0Q,MAAMiN,aAAanI,KAAK9F,EAAI,UAxBjC/P,KAAK+Q,MAAMyH,SACXxY,KAAK+Q,MAAMyH,OAAOM,MAAQ,KA4B9B3Y,0BAAR,sBACI,GAAKsL,iBAAL,CAKA,IAAMnL,EAAS,IAAI0b,GACnB1b,EAAOS,eAAiB0K,iBACxBnL,EAAOQ,YAAa,EAEpBd,KAAKke,YAAYC,UAAe,IAAIC,MAAwB,SAACtO,GAA6B,SAAKuO,gBAAgBC,OAAOhe,EAAQ,QAC9HN,KAAKue,GAAG,aAAaC,cATjBxe,KAAKke,YAAYC,UAAe,MAYhChe,4BAAR,sBACI,GAAIH,KAAK+Q,MAAMuL,aAAe7gB,gBAE9B,KAAKgQ,mBAA2BzL,KAAK+Q,MAAMrP,UAEvC,YADA1B,KAAK+Q,MAAMqM,kBAAoB,IAInCpd,KAAKvE,GAAGuE,KAAK8d,wBAAwBW,eAAeze,KAAK+Q,MAAMrP,YAAY,EAAO,SAACpB,GAC/ED,EAAK0Q,MAAMqM,kBAAoB9c,EAASmV,aAIxCtV,wBAAR,sBACI,GAAKsL,kBAA2BzL,KAAK+Q,MAAMrP,UAA3C,CAKA,IAAMpB,EAAS,IAAIoX,GACnBpX,EAAOS,eAAiB0K,iBACxBnL,EAAO6d,UAAYne,KAAK+Q,MAAMrP,UAAY,CAAC1B,KAAK+Q,MAAMrP,WAAa,GACnEpB,EAAOoe,mBAAqB,CAACtlB,WAE7B4G,KAAKke,YAAYrB,QAAc,IAAIuB,MAAuB,SAACtO,GAA6B,SAAK6O,wBAAwBL,OAAOhe,EAAQwP,SAAU,OAAW,GAAW,QAThK9P,KAAKke,YAAYrB,aAAa,GAY9B1c,0BAAR,sBACI,GAAKsL,kBAA2BzL,KAAK+Q,MAAMrP,UAA3C,CAKA,IAAMpB,EAAS,IAAIoX,GACnBpX,EAAOS,eAAiB0K,iBACxBnL,EAAO6d,UAAYne,KAAK+Q,MAAMrP,UAAY,CAAC1B,KAAK+Q,MAAMrP,WAAa,GACnEpB,EAAOoe,mBAAqB,CAACtlB,UAE7B4G,KAAKke,YAAYpB,UAAgB,IAAIsB,MAAuB,SAACtO,GAA6B,SAAK6O,wBAAwBL,OAAOhe,EAAQwP,SAAU,OAAW,GAAW,QATlK9P,KAAKke,YAAYpB,eAAe,GAYhC3c,6BAAR,WAEI,IAAME,EAAS,IAAI2X,GAEfhY,KAAK+Q,MAAMuL,aAAe7gB,iBAC1B4E,EAAO2Z,OAASvO,mBAChBpL,EAAO0V,SAAWtK,mBAElBpL,EAAO2Z,OAASvO,QAGpBzL,KAAK+Q,MAAM8I,QAAQhE,KAAKxV,6CA5PvBiW,WADAsI,UAFAC,UAaAC,aAfAC,0CA8CJ7d,YAASC,MAAC6d,OAFF7e,qUAAwB8e,KANpC/d,aAAU,CACP6V,UAAWT,IACXU,SAAU,uBACVC,SC1CW,68QD6CF9W,IAAiC+W,+eErB1C,WAAY7W,UAAyBN,YAAM,UAAWM,IAAIL,KAGlD,OALyBkf,QAKzB/e,mBAAR,SAAeE,EAA2BC,GAE5C,OAAON,KAAKQ,IAAIS,kBAAkBjB,KAAKU,eAAgB,SAAUL,EAAgB,MAAPC,OAAO,EAAPA,EAASO,mBAGzEV,+BAAR,SAA2BE,GAE7B,OAAOL,KAAKQ,IAAIC,iBAAiBT,KAAKU,eAAgB,qBAAuB,CAACye,UAAW9e,KAG/EF,iCAAR,SAA6BE,GAE/B,OAAOL,KAAKQ,IAAIC,iBAAiBT,KAAKU,eAAgB,uBAAyB,CAACye,UAAW9e,8CA1BpFgB,OASIlB,qUAAeif,KAD3Ble,iBACYf,IAAwBoB,ufCjBrC8d,eACI,mBACItf,cAAOC,KACP,SAAKC,SAAW,gBAYxB,OAfiCqf,QAejCnf,EAfA,CAAiCC,MAiBjCmf,eACI,mBACIxf,cAAOC,KACP,SAAKC,SAAW,2BAQxB,OAX4Cqf,QAW5Cnf,EAXA,CAA4CC,MAY5Cof,eACI,mBACIzf,cAAOC,KACP,SAAKC,SAAW,6BAOxB,OAV8Cqf,QAU9Cnf,EAVA,CAA8CC,+eCpB1C,WAAYC,UACRN,YAAMM,EAAG,+CAAgDmf,GAA2Bpf,OAAUJ,YAHpCyf,iDAZzDnJ,OAYInW,qUAA4Cuf,KANxDxe,aAAU,CACP6V,UAAWT,IACXU,SAAU,8CACVC,SCTW,giCDYF9W,IAAqDwf,wfELlEC,eACI,mBACI7f,cAAOC,KACP,SAAKC,SAAW,iBA8BxB,OAjCkC4f,QAiClC1f,EAjCA,CAAkCC,geCAlC0f,eACI,mBACI/f,cAAOC,KACP,SAAKC,SAAW,uBAaxB,OAhBwC8f,QAgBxC5f,EAhBA,CAAwCC,geCKxC4f,0EACI,+BAAgC,EAChC3f,2BAAmC,IACvC,OAH2B4f,QAG3B9f,EAHA,CAA2BC,qBAWvB,WAAYC,EACDC,EACCwP,GAFZ,MAGI/P,YAAMM,EAAG,4BAA6Buf,GAAcI,KAAMhgB,KAFnD,yBACC+P,eAIH,OARkCkQ,QAQlC9f,4BAAT,WACQH,KAAK0T,cAAcvE,SACnBnP,KAAK8Z,SAAS,CAAC,qBAInB9Z,KAAKkd,kBAGU/c,kCAAnB,SAAyCE,EAA4BC,EAA0CwP,IACvGxP,GAAsBsf,IAAgBtf,GAAsBwf,MAC5D9f,KAAKkd,iBACLld,KAAKue,GAAG,yBAAyBC,WAIlCre,2BAAP,sBACIH,KAAKke,YAAYgC,cAAmB,IAAI9B,MAAuB,SAAC9d,GAA6B,SAAK6f,SAASC,cAAc/f,EAAK0Q,MAAMsP,qBAAsB/f,KAC1JN,KAAKue,GAAG,iBAAiBC,SACzBxe,KAAKvE,GAAGuE,KAAKmgB,SAASG,+BAA+B,EAAO,SAAChgB,GAAyCD,EAAK0Q,MAAMwP,yBAA2BjgB,EAASgV,QAGlJnV,0CAAP,WACIH,KAAKkd,2DAnDgB5G,WASpBO,UALAD,KAgBIzW,qUAAyBqgB,KAJrCtf,aAAU,CACP6V,UAAWT,IACXW,SCnBW,qvBDqBF9W,IAAkC+W,+eEK3C,WAAY7W,UAAyBN,YAAM,qBAAsBM,IAAIL,KAG7D,OALoCygB,QAKpCtgB,mBAAR,SAAeE,EAAkCC,GAEnD,OAAON,KAAKQ,IAAIS,kBAAkBjB,KAAKU,eAAgB,SAAUL,EAAgB,MAAPC,OAAO,EAAPA,EAASO,mBAGzEV,mBAAR,SAAeE,GAEjB,OAAOL,KAAKQ,IAAIS,kBAAkBjB,KAAKU,eAAgB,SAAUL,OAAS,IAGhEF,wBAAR,SAAoBE,GAEtB,OAAOL,KAAKQ,IAAIS,kBAAkBjB,KAAKU,eAAgB,cAAeL,OAAS,IAGrEF,mBAAR,SAAeE,GAEjB,OAAOL,KAAKQ,IAAIS,kBAAkBjB,KAAKU,eAAgB,SAAUL,OAAS,IAGxDF,gBAAhB,SAAoBE,GAEtB,OAAOL,KAAKQ,IAAIC,iBAAiBT,KAAKU,eAAgB,MAAQ,CAACiM,QAAStM,8CAtCjEgB,OAWIlB,qUAA0BugB,KADtCxf,iBACYf,IAAmCoB,+dClBhDof,eACI,mBACI5gB,cAAOC,KAKJ,4BAAyC,IAAI8f,GAJhDzf,EAAKJ,SAAW,mCAMxB,OAToD2gB,QASpDzgB,EATA,CAAoDC,+eCiBhD,WAAYC,EACDC,EACCwP,GAFZ,MAGI/P,YAAMM,EAAG,4BAA6Buf,GAAcxf,OAAUJ,KAFvD,yBACC+P,+BALFA,6BAAoD,IAAI7O,eACxD6O,gCAAmD,IAAI7O,iBAQjE,OAZ2C2f,QAY3C1gB,gCAAWE,GACHA,EAAEoZ,KAAKqH,aACP9gB,KAAK8Z,SAAS,CAAC,sBAAuBzZ,EAAEoZ,KAAK9M,WAIrDxM,qCAAgBE,GACZL,KAAK8Z,SAAS,CAAC,mCAAoC,CAAE/Y,eAAgBV,EAAasM,QAASoU,iBAAkB1gB,EAAaiU,QAG9HnU,qCAAgBE,GAAhB,WACUyP,EAAS,IAAI6Q,GACnB7Q,EAAO/O,eAAiBV,EAAasM,QAErC3M,KAAKvE,GAAGuE,KAAKghB,2BAA2BC,OAAOnR,IAAS,EAAM,SAACC,GAC3DzP,EAAK4S,kBAAkB7S,EAAcuf,GAAc/O,iBAIpD1Q,qCAAP,SAAgCE,UACV,QAAbC,OAAKwN,gBAAQ,eAAEI,eAChB7N,EAAM6gB,eAAeC,MAAMC,QAAQ,CAC/BC,SAAU,QACVpK,SAAU,iBACVqK,UAAU,KAKfnhB,wCAAP,SAAmCE,GAC/BL,KAAKuhB,2BAA2BC,KAAKnhB,EAAMmS,OAC3CxS,KAAKyhB,8BAA8BD,iDA3DdlL,WAIpBO,UAGA6K,oDAWJxgB,4CACAA,gDACAA,YAJQf,qUAAyBwhB,KALrCzgB,aAAU,CACP6V,UAAWT,IACXU,SAAU,wBACVC,SCfW,8uFDiBF9W,IAAkCwf,khBES3C,WAAuCtf,EAAcC,UAAyBP,YAAMM,GAAQ,kBAAmBC,IAAIN,KAG3G,OALiC4hB,QAKjCzhB,4CAAR,SAAwCE,GAE1C,OAAOL,KAAKQ,IAAIC,iBAAiBT,KAAKU,eAAgB,kCAAoC,CAACK,eAAgBV,KAGjGF,uCAAR,SAAmCE,GAErC,OAAOL,KAAKQ,IAAIC,iBAAiBT,KAAKU,eAAgB,6BAA+B,CAACgB,UAAWrB,KAGvFF,wCAAR,SAAoCE,GAEtC,OAAOL,KAAKQ,IAAIC,iBAAiBT,KAAKU,eAAgB,8BAAgC,CAACmhB,WAAYxhB,KAGzFF,8CAAR,SAA0CE,EAAmBC,GAE/D,OAAON,KAAKQ,IAAIC,iBAAiBT,KAAKU,eAAgB,oCAAsC,CAACyB,UAAW9B,EAAWsV,iBAAkBrV,KAG3HH,uCAAR,SAAmCE,GAErC,OAAOL,KAAKQ,IAAIC,iBAAiBT,KAAKU,eAAgB,6BAA+B,CAACyB,UAAW9B,KAGvFF,wCAAR,SAAoCE,GAEtC,OAAOL,KAAKQ,IAAIC,iBAAiBT,KAAKU,eAAgB,8BAAgC,CAACohB,WAAYzhB,KAGzFF,mBAAR,SAAeE,GAEjB,OAAOL,KAAKQ,IAAIS,kBAAkBjB,KAAKU,eAAgB,SAAUL,OAAS,IAGhEF,yBAAR,SAAqBE,GAEvB,OAAOL,KAAKQ,IAAIC,iBAAiBT,KAAKU,eAAgB,eAAiB,CAACqhB,kBAAmB1hB,KAGjFF,iCAAR,SAA6BE,GAE/B,OAAOL,KAAKQ,IAAIC,iBAAiBT,KAAKU,eAAgB,uBAAyB,CAACshB,MAAO3hB,uEA7CxEa,SAAMC,MAACC,cAXfC,OASIlB,qUAAuB8hB,KADnC/gB,iBACYf,IAAgCoB,ufCpB7C2gB,eACI,mBACIniB,cAAOC,KACP,SAAKC,SAAW,oCAMxB,OATqDkiB,QASrDhiB,EATA,CAAqDqX,6eC0BjD,WAAuCnX,EAAcC,UAAyBP,YAAMM,GAAQ,iBAAkBC,IAAIN,KAG1G,OALgCoiB,QAKhCjiB,4BAAR,SAAwBE,GAE1B,OAAOL,KAAKQ,IAAIC,iBAAiBT,KAAKU,eAAgB,kBAAoB,CAACiV,iBAAkBtV,KAGnFF,mBAAR,SAAeE,GAEjB,OAAOL,KAAKQ,IAAIS,kBAAkBjB,KAAKU,eAAgB,SAAUL,OAAS,IAGhEF,6BAAR,SAAyBE,EAAmBC,GAE9C,OAAON,KAAKQ,IAAIC,iBAAiBT,KAAKU,eAAgB,mBAAqB,CAACyB,UAAW9B,EAAWgiB,QAAS/hB,KAGjGH,+BAAR,SAA2BE,EAAmBC,GAEhD,OAAON,KAAKQ,IAAIC,iBAAiBT,KAAKU,eAAgB,qBAAuB,CAACyB,UAAW9B,EAAWgiB,QAAS/hB,KAGnGH,2BAAR,SAAuBE,GAEzB,OAAOL,KAAKQ,IAAIC,iBAAiBT,KAAKU,eAAgB,iBAAmB,CAACiV,iBAAkBtV,KAGlFF,yBAAR,SAAqBE,EAA0BC,EAAiBwP,EAAgBC,GAElF,OAAO/P,KAAKQ,IAAIC,iBAAiBT,KAAKU,eAAgB,eAAiB,CAACiV,iBAAkBtV,EAAkBiiB,UAAWhiB,EAAWiiB,OAAQzS,EAAQ0S,MAAOzS,KAG/I5P,0BAAR,SAAsBE,EAA0BC,EAAkBwP,GAEpE,OAAO9P,KAAKQ,IAAIC,iBAAiBT,KAAKU,eAAgB,gBAAkB,CAACiV,iBAAkBtV,EAAkBoiB,WAAYniB,EAAYoiB,eAAgB5S,KAG3I3P,yBAAR,SAAqBE,GAEvB,OAAOL,KAAKQ,IAAIS,kBAAkBjB,KAAKU,eAAgB,eAAgBL,OAAS,IAGtEF,qCAAR,SAAiCE,GAEnC,OAAOL,KAAKQ,IAAIS,kBAAkBjB,KAAKU,eAAgB,2BAA4BL,OAAS,IAGlFF,gDAAR,SAA4CE,GAE9C,OAAOL,KAAKQ,IAAIS,kBAAkBjB,KAAKU,eAAgB,sCAAuCL,OAAS,IAG7FF,mDAAR,SAA+CE,EAA0BC,GAE3E,OAAON,KAAKQ,IAAIC,iBAAiBT,KAAKU,eAAgB,yCAA2C,CAACiiB,iBAAkBtiB,EAAkBuiB,SAAUtiB,uEAvDjIY,SAAMC,MAACC,cAffC,OAaIlB,qUAAsB0iB,KADlC3hB,iBACYf,IAA+BoB,+dCxB5CuhB,eACI,mBACI/iB,cAAOC,KACP,SAAKC,SAAW,8BAMxB,OAT+C8iB,QAS/C5iB,EATA,CAA+CqX,8dCG/CwL,eACI,mBACIjjB,cAAOC,KACP,SAAKC,SAAW,6BAcxB,OAjB8CgjB,QAiB9C9iB,EAjBA,CAA8CqX,weCc9C0L,0EAWI,oBAAuB,GACvB7iB,YAAsB,GACtBA,4BAA2B,EAE3BA,2BAAmC,IACvC,OAhBoB8iB,QAgBpBhjB,EAhBA,CAAoBC,qBAyBhB,WAAYC,EACAC,EACAwP,EACAC,EACAU,EACAC,EACAC,GANZ,MAQI5Q,YAAMM,EAAG,sCAAuCD,KAAY8iB,GAAOrS,eAA4B7Q,KAPvF,uCACA4Q,4BACAA,yBACAA,oBACAA,oBACAA,6BAKZ,OAbqDuS,QAarDrX,sBAAI3L,kCAAmB,KAAvB,WACI,OAAOH,KAAK+Q,MAAMqS,iBAAmB/lB,kDAGzCyO,sBAAI3L,iCAAkB,KAAtB,WACI,OAAOH,KAAK+Q,MAAMqS,iBAAmB/lB,kDAGzC8C,4DAAuCE,EAAwBC,EAAmCwP,GAAlG,gBAA+D,uBAAmC,kBAC9F,IAAMW,EAAS,IAAIuS,GACnBvS,EAAO1P,eAAiBV,EACxBL,KAAKqjB,uBAAuB5S,EAAQ,WAChCV,EAAKuT,gBAAgBhjB,EAAWwP,GAChCC,EAAKwT,cAAcljB,EAAgBA,EAAgB3H,oBAI3DyH,uDAAkCE,EAAmBC,EAAwBwP,EAAmCC,GAAhH,gBAA6E,uBAAmC,kBAC5G,IAAMW,EAAS,IAAIsS,GACnBtS,EAAOyN,UAAY,CAAC9d,GACpBL,KAAKqjB,uBAAuB3S,EAAQ,WAChCD,EAAK6S,gBAAgBxT,EAAWC,GAChCU,EAAKM,MAAMrP,UAAYrB,EACvBoQ,EAAK8S,cAAcljB,EAAWC,EAAgB5H,eAItDyH,4CAAuBE,EAAkCC,GAAzD,gBAAyD,kBACrDN,KAAKvE,GAAGuE,KAAKwjB,uBAAuBlF,OAAOje,IAAS,EAAO,SAAC0P,GACxDD,EAAKiB,MAAM0S,yBAA0B,WAAK1T,EAAS0F,SAAkC,YAAQ,SAAKiO,0BAC7F5T,EAAKiB,MAAM0S,0BACZ3T,EAAKiB,MAAMqS,eAAiB/lB,4BAEhCiD,OAIRH,uDAAkCE,EAAmBC,EAAwBwP,EAAmCC,GAAhH,gBAA6E,uBAAmC,kBAC5G,IAAMW,EAAS,IAAIsS,GACnBtS,EAAOiT,SAAW,CAACtjB,GACnBL,KAAKqjB,uBAAuB3S,EAAQ,WAChCD,EAAK6S,gBAAgBxT,EAAWC,GAChCU,EAAKM,MAAM5O,UAAY9B,EACvBoQ,EAAK8S,cAAcljB,EAAWC,EAAgB5H,eAItDyH,8DAAyCE,EAA0BC,EAAwBwP,EAAmCC,GAA9H,gBAA2F,uBAAmC,kBAC1H,IAAMW,EAAS,IAAIsS,GACnBtS,EAAOgF,gBAAkB,CAACrV,GAC1BL,KAAKqjB,uBAAuB3S,EAAQ,WAChCD,EAAK6S,gBAAgBxT,EAAWC,GAChCU,EAAKM,MAAM4E,iBAAmBtV,EAC9BoQ,EAAK8S,cAAcljB,EAAkBC,EAAgB5H,sBAI7DyH,gEAA2CE,EAA2BC,EAAoBwP,EAAgBC,EAAwBU,EAAmCC,QAAnC,uBAAmC,kBACjK1Q,KAAKsjB,gBAAgB7S,EAAWC,GAChC1Q,KAAK+Q,MAAM6S,WAAW/N,KAAKvV,GAC3BN,KAAK+Q,MAAM8S,UAAUhO,KAAKxV,GACtByP,IAAU9P,KAAK+Q,MAAMgF,SAAWjG,GACpC9P,KAAKujB,cAAcxT,EAAgBA,EAAgBrX,kBAGvDyH,2DACUG,EAAWN,KAAK8jB,4BAChBhU,EAAe9P,KAAK+jB,gCACpBhU,EAAS,IAAIrC,GACnBqC,EAAOD,GAAgB9P,KAAK+Q,MAAMiT,SAClCjU,EAAOgG,SAAW/V,KAAK+Q,MAAMgF,SAC7BhG,EAAOqG,sBAAwBpW,KAAK+Q,MAAM6S,WAC1C7T,EAAOsG,iBAAmBrW,KAAK+Q,MAAM8S,UACrC9T,EAAOqT,eAAiBpjB,KAAK+Q,MAAMqS,eAEnCpjB,KAAK+Q,MAAM6B,kBAAmB,EAE9B5S,KAAKvE,GAAG6E,EAASsT,yBAAyB7D,IAAS,EAAM,WACrD1P,EAAK0Q,MAAM6B,kBAAmB,EAC9BvS,EAAK4jB,0BACN,WAAQ5jB,EAAK0Q,MAAM6B,kBAAmB,KAG7CzS,6CACI,OAAOH,KAAK+Q,MAAM4I,YAAcjhB,iBAGpCyH,0CACIH,KAAKkkB,kBAGT/jB,2CACIH,KAAKmkB,iBAGThkB,qCAAgBE,GAAOA,UACLhD,mBACV2C,KAAK+Q,MAAM6S,WAAa,GACxB5jB,KAAK+Q,MAAM8S,UAAY,KAIvB1jB,0BAAR,SAAsBE,EAAiBC,EAAwBwP,GAE3D9P,KAAK+Q,MAAMhQ,eAAiBT,EAC5BN,KAAK+Q,MAAMiT,SAAW3jB,EACtBL,KAAK+Q,MAAM4I,WAAa7J,EAGxB9P,KAAKqS,oBAGLrS,KAAKkkB,iBACLlkB,KAAKmkB,iBAGUhkB,wBAAnB,WACIH,KAAK+Q,MAAMqS,eAAiB/lB,2BAC5B2C,KAAK+Q,MAAMqT,gBAAkBpkB,KAAKqkB,KAAK,sBAGnClkB,2BAAR,sBACQG,EAAS,IAAI4hB,GACjB5hB,EAAOS,eAAiBf,KAAK+Q,MAAMhQ,eACnCT,EAAOQ,YAAa,EACpBR,EAAOgkB,YAAa,EACpBhkB,EAAO+V,iBAAmBrW,KAAK+Q,MAAM8S,UAErC7jB,KAAKke,YAAY0F,WAAgB,IAAIxF,MAAuB,SAACtO,GAA6B,SAAKyU,4BAA4BjG,OAAOhe,EAAQwP,MAGtI3P,0BAAR,sBACUG,EAAS,IAAIwiB,GACnBxiB,EAAOQ,YAAa,EACpBR,EAAOS,eAAiBf,KAAK+Q,MAAMhQ,eACnCT,EAAO6d,UAAYne,KAAK+Q,MAAMrP,UAAY,CAAC1B,KAAK+Q,MAAMrP,WAAa,GACnEpB,EAAOqjB,SAAW3jB,KAAK+Q,MAAM5O,UAAY,CAACnC,KAAK+Q,MAAM5O,WAAa,GAClE7B,EAAOqV,iBAAmB3V,KAAK+Q,MAAM4E,iBACrCrV,EAAOsjB,WAAa5jB,KAAK+Q,MAAM6S,WAE/B5jB,KAAKke,YAAY2F,UAAe,IAAIzF,MAAuB,SAACtO,GAA6B,SAAKyF,wBAAwB+I,OAAOhe,EAAQwP,MAGjI3P,sCAAR,WACI,OAAQH,KAAK+Q,MAAM4I,iBACTjhB,gBAA+B,OAAOsH,KAAKmW,0BAC3Czd,WAA0B,OAAOsH,KAAKqe,qBACtC3lB,WAA0B,OAAOsH,KAAK0R,qBACtChZ,kBAAiC,OAAOsH,KAAKwjB,yBAInDrjB,0CAAR,WACI,OAAQH,KAAK+Q,MAAM4I,iBACTjhB,gBAA+B,MAAO,sBACtCA,WAA0B,MAAO,iBACjCA,WAA0B,MAAO,iBACjCA,kBAAiC,MAAO,8DA/MjD4d,WADAC,UADAI,SADAC,SADAiI,UADAnI,SADA8N,MA2CIrkB,qUAAmCskB,KAN/CvjB,aAAU,CACP6V,UAAWT,IACXU,SAAU,oCACVC,SCzCW,kkHD4CF9W,IAA4C+W,geExCzDwN,eACI,mBACI3kB,cAAOC,KACP,SAAKC,SAAW,oBAQxB,OAXqC0kB,QAWrCxkB,EAXA,CAAqCC,iehCMrC,SAAKL,GACDA,mCACAA,yBACAA,yBAHJ,CAAKuQ,QAA2B,KAKhC,IiCVYsU,GAuDAC,GASAC,GAWAC,GAYAC,GASAC,GASAC,GASAC,GASAC,GAkBAC,GASAC,GAUAC,GAoBAC,GA4CAC,GAQAC,GAYAC,GAiBAC,GASAC,GAkBAC,GAUAC,GASAC,GAQAC,GAQAC,GA0BAC,GAYAC,GAYAC,GASAC,GAkBAC,GAQAC,GAQAC,GAaAC,GAOAC,GAQAC,GAaAC,GAgBAC,GAYAC,GAQAC,GAQAC,GAOAC,GAOAC,GASAC,GAQAC,GAQAC,GAaAC,GAQAC,GAOAC,GAYAC,GAQAC,GASAC,GAuBAC,GASAC,GAOAC,GASAC,GASAC,GAUAC,GAQAC,GAyBAC,GAWAC,GAQAC,GAUAC,GAUAC,GAaAC,GAYAC,GAOAC,GASAC,GAQAC,GASAC,GAQAC,GAUAC,GAWAC,GASAC,GAQAC,GAOAC,GASAC,GASAC,GAQAC,GAUAC,GAUAC,GAmBAC,GAaAC,GAQAC,GAQAC,GAOAC,GAQAC,GAOAC,GASAC,GAYAC,GAQAC,GAQAC,GASAC,GAOAC,GAQAC,GAQAC,GASAC,GASAC,GASAC,GASAC,GASAC,GAUAC,GAWAC,GAQAC,GAUAC,GAOAC,GAgCAC,GAOAC,GAOAC,GAQAC,GAWAC,GAYAC,GAYAC,GAQAC,GAQAC,GAQAC,GAQAC,GAQAC,GAOAC,GASAC,GAWAC,GAaAC,GAQAC,GAqBAC,GAOAC,GAQAC,GASAC,GASAC,GAeAC,GAOAC,GAQAC,GAQAC,GAuBAC,GAkBAC,GAMAC,GASAC,GAQAC,GAOAC,GAQAC,GAOAC,GAQAC,GASAC,GAUAC,GAQAC,GAUAC,GjCz+CZC,2EAKA,OALoBC,QAKpBxtB,EALA,CAAoBC,qBAahB,WAAYC,EACAC,EACAwP,EACAC,GAHZ,MAKIhQ,YAAMM,EAAG,gCAAiCD,KAAYstB,GAAO7c,eAA4B7Q,KAJjF,gCACAyQ,oBACAA,sBAOH,OAZsCkd,QAYtCxtB,qBAAT,WACI,OAAOH,KAAKuS,GAAG,iBAKnBpS,2CAAsBE,GAClBL,KAAKujB,cAAcljB,EAAgBiQ,GAA4Bsd,eAGnEztB,sCAAiBE,GACbL,KAAKujB,cAAcljB,EAAWiQ,GAA4Bud,UAG9D1tB,sCAAiBE,GACbL,KAAKujB,cAAcljB,EAAWiQ,GAA4B4B,UAG9D/R,4CACUG,EAAWN,KAAK8tB,4BAChBhe,EAAe9P,KAAK+tB,gCACpBhe,EAAS,IAAI2U,GACnB3U,EAAOD,GAAgB9P,KAAK+Q,MAAMiT,SAClCjU,EAAOgG,SAAW/V,KAAK+Q,MAAMgF,SAE7B/V,KAAKvE,GAAG6E,EAAS0tB,eAAeje,IAAS,EAAM,WAC3C1P,EAAK4jB,4BAIL9jB,0BAAR,SAAsBE,EAAiBC,GACnCN,KAAKsjB,qBAAgB,GAGrBtjB,KAAK+Q,MAAMiT,SAAW3jB,EACtBL,KAAK+Q,MAAM4I,WAAarZ,GAGpBH,sCAAR,WACI,OAAQH,KAAK+Q,MAAM4I,iBACTrJ,GAA4Bsd,aAAe,OAAO5tB,KAAKmW,0BACvD7F,GAA4Bud,QAAU,OAAO7tB,KAAKqe,qBAClD/N,GAA4B4B,QAAU,OAAOlS,KAAK0R,kBAIxDvR,0CAAR,WACI,OAAQH,KAAK+Q,MAAM4I,iBACTrJ,GAA4Bsd,aAAe,MAAO,sBAClDtd,GAA4Bud,QAAU,MAAO,iBAC7Cvd,GAA4B4B,QAAU,MAAO,uDArFtDoE,WADAM,SADAiI,UADAnI,KA0BIvW,qUAA6B8tB,KALzC/sB,aAAU,CACP6V,UAAWT,IACXU,SAAU,4BACVC,SkCxBW,i2BlC0BF9W,IAAsC+W,4emChBnDgX,eACI,mBACInuB,cAAOC,KAwBJ,sBAA6B,IAAI4f,GAEjCvf,QAAoC,GACpCA,mBAAyC,GACzCA,kBAAwC,GA3B3CA,EAAKJ,SAAW,SA8BxB,OAjC0BkuB,QAiC1BhuB,EAjCA,CAA0BC,MAmC1BguB,eACI,mBACIruB,cAAOC,KACP,SAAKC,SAAW,6BAgBxB,OAnB8CkuB,QAmB9ChuB,EAnBA,CAA8CC,UAoB9C,YACI,mBACIL,cAAOC,KACP,SAAKC,SAAW,uBAHgBkuB,QAAxC,CAAwC/tB,MASxC,YACI,mBACIL,cAAOC,KACP,SAAKC,SAAW,uBAHgBkuB,QAAxC,CAAwC/tB,8dClExCiuB,eACI,mBACItuB,cAAOC,KACP,SAAKC,SAAW,YAuBxB,OA1B6BquB,QA0B7BnuB,EA1BA,CAA6BC,geCJ7BmuB,eACI,mBACIxuB,cAAOC,KACP,SAAKC,SAAW,iBAQxB,OAXkCuuB,QAWlCruB,EAXA,CAAkCC,geCAlCquB,eACI,mBACI1uB,cAAOC,KACP,SAAKC,SAAW,yBAaxB,OAhB0CyuB,QAgB1CvuB,EAhBA,CAA0CC,geCA1CuuB,eACI,mBACI5uB,cAAOC,KACP,SAAKC,SAAW,aAUxB,OAb8B2uB,QAa9BzuB,EAbA,CAA8BC,geCA9ByuB,eACI,mBACI9uB,cAAOC,KACP,SAAKC,SAAW,qBAWxB,OAdsC6uB,QActC3uB,EAdA,CAAsCC,geCAtC2uB,eACI,mBACIhvB,cAAOC,KACP,SAAKC,SAAW,2BAKxB,OAR4C+uB,QAQ5C7uB,EARA,CAA4CC,geCM5C6uB,eACI,mBACIlvB,cAAOC,KACP,SAAKC,SAAW,eAoCxB,OAvCgCivB,QAuChC/uB,EAvCA,CAAgCC,geCDhC+uB,eACI,mBACIpvB,cAAOC,KAeJ,eAAwB,GACxBK,QAAwB,GAf3BA,EAAKJ,SAAW,aAiBxB,OApB8BmvB,QAoB9BjvB,EApBA,CAA8BC,MAsB9BivB,eACI,mBACItvB,cAAOC,KACP,SAAKC,SAAW,iBAUxB,OAbkCmvB,QAalCjvB,EAbA,CAAkCC,MAclCkvB,eACI,mBACIvvB,cAAOC,KACP,SAAKC,SAAW,iBAexB,OAlBkCmvB,QAkBlCjvB,EAlBA,CAAkCC,geClClCmvB,eACI,mBACIxvB,cAAOC,KA8BJ,sBAAyB,IAAImvB,GA7BhC9uB,EAAKJ,SAAW,aAwCxB,OA3C8BuvB,QA2C9BrvB,EA3CA,CAA8BC,geCL9BqvB,eACI,mBACI1vB,cAAOC,KACP,SAAKC,SAAW,iBAUxB,OAbkCyvB,QAalCvvB,EAbA,CAAkCovB,0eCMlCI,2EAKA,OALoBC,QAKpBzvB,EALA,CAAoBC,qBAchB,WAAYC,EACAC,EACAwP,EACAC,EACAU,GAJZ,MAKI1Q,YAAMM,EAAG,8BAA+BD,KAAYuvB,GAAO9e,eAA4B7Q,KAJ/E,gCACA0Q,oBACAA,oBACAA,6BAIZ,OAV6Ckf,QAU7CzvB,gDAA2BE,EAAwBC,EAAmCwP,QAAnC,uBAAmC,kBAClF9P,KAAKujB,cAAcljB,EAAgBC,EAAWwP,EAAUpX,kBAG5DyH,sDAAiCE,EAAwBC,EACrDwP,EAAmCC,QAAnC,uBAAmC,kBACnC/P,KAAK+Q,MAAM8e,YAAcvvB,EACzBN,KAAKujB,cAAcljB,EAAgByP,EAAWC,EAAUrX,kBAG5DyH,2CAAsBE,EAAmBC,EAAmCwP,QAAnC,uBAAmC,kBACxE9P,KAAKujB,cAAcljB,EAAWC,EAAWwP,EAAUpX,aAGvDyH,2CAAsBE,EAAmBC,EAAmCwP,QAAnC,uBAAmC,kBACxE9P,KAAKujB,cAAcljB,EAAWC,EAAWwP,EAAUpX,aAGvDyH,kDAA6BE,EAA0BC,EAAmCwP,QAAnC,uBAAmC,kBACtF9P,KAAKujB,cAAcljB,EAAkBC,EAAWwP,EAAUpX,oBAG9DyH,+CACUG,EAAWN,KAAK8jB,4BAChBhU,EAAe9P,KAAK+jB,gCACpBhU,EAAS,IAAIvC,GACnBuC,EAAOD,GAAgB9P,KAAK+Q,MAAMiT,SAClCjU,EAAOmG,aAAelW,KAAK+Q,MAAM8e,YAGjC7vB,KAAK+Q,MAAM6B,kBAAmB,EAE9B5S,KAAKvE,GAAG6E,EAASuT,aAAa9D,IAAS,EAAM,WACzC1P,EAAK0Q,MAAM6B,kBAAmB,EAC9BvS,EAAK4jB,0BACN,WAAQ5jB,EAAK0Q,MAAM6B,kBAAmB,KAGrCzS,0BAAR,SAAsBE,EAAiBC,EAAuBwP,EAAkCC,QAAlC,kBAC1D/P,KAAKsjB,gBAAgBhjB,EAAWwP,GAGhC9P,KAAK+Q,MAAMiT,SAAW3jB,EACtBL,KAAK+Q,MAAM4I,WAAa5J,GAGpB5P,sCAAR,WACI,OAAQH,KAAK+Q,MAAM4I,iBACTjhB,gBAA+B,OAAOsH,KAAKmW,0BAC3Czd,WAA0B,OAAOsH,KAAKqe,qBACtC3lB,WAA0B,OAAOsH,KAAK0R,qBACtChZ,kBAAiC,OAAOsH,KAAKwjB,yBAInDrjB,0CAAR,WACI,OAAQH,KAAK+Q,MAAM4I,iBACTjhB,gBAA+B,MAAO,sBACtCA,WAA0B,MAAO,iBACjCA,WAA0B,MAAO,iBACjCA,kBAAiC,MAAO,8DAtFjD4d,WAJAM,SADAiI,UAFAnI,SACA8N,MAsBIrkB,qUAA2B2vB,KANvC5uB,aAAU,CACP6V,UAAWT,IACXU,SAAU,0BACVC,SCrBW,s3BDwBF9W,IAAoC+W,2fEF7C,WAAY7W,UAAyBN,YAAM,eAAgBM,IAAIL,KAGvD,OAL8B+vB,QAK9B5vB,mBAAR,SAAeE,EAAgCC,GAEjD,OAAON,KAAKQ,IAAIS,kBAAkBjB,KAAKU,eAAgB,SAAUL,EAAgB,MAAPC,OAAO,EAAPA,EAASO,4DAd5EQ,OAOIlB,qUAAoB6vB,KADhC9uB,iBACYf,IAA6BoB,+dCb1C0uB,eACI,mBACIlwB,cAAOC,KACP,SAAKC,SAAW,uBAWxB,OAdwCiwB,QAcxC/vB,EAdA,CAAwCC,+eCoBpC,WAAuCC,EAAcC,UAAyBP,YAAMM,GAAQ,WAAYC,IAAIN,KAGpG,OAL0BmwB,QAK1BhwB,4BAAR,SAAwBE,GAE1B,OAAOL,KAAKQ,IAAIS,kBAAkBjB,KAAKU,eAAgB,kBAAmBL,OAAS,IAGzEF,mBAAR,SAAeE,EAA4BC,GAE7C,OAAON,KAAKQ,IAAIS,kBAAkBjB,KAAKU,eAAgB,SAAUL,EAAgB,MAAPC,OAAO,EAAPA,EAASO,mBAGzEV,+BAAR,SAA2BE,GAE7B,OAAOL,KAAKQ,IAAIC,iBAAiBT,KAAKU,eAAgB,qBAAuB,CAACmhB,WAAYxhB,KAGhFF,gCAAR,SAA4BE,GAE9B,OAAOL,KAAKQ,IAAIC,iBAAiBT,KAAKU,eAAgB,sBAAwB,CAACmhB,WAAYxhB,uEApB5Ea,SAAMC,MAACC,cAZfC,OAUIlB,qUAAgBiwB,KAD5BlvB,iBACYf,IAAyBoB,8eCJlC,WAAYlB,UAAyBN,YAAM,OAAQM,IAAIL,KAG/C,OALsBqwB,QAKtBlwB,mBAAR,SAAeE,EAAwBC,EAAqBwP,GAE9D,OAAO9P,KAAKQ,IAAIC,iBAAiBT,KAAKU,eAAgB,SAAW,CAACK,eAAgBV,EAAgBS,WAAYR,EAAYM,QAAe,MAAPkP,OAAO,EAAPA,EAASjP,6DAbpIQ,OAMIlB,qUAAYmwB,KADxBpvB,iBACYf,IAAqBoB,+dCblCgvB,eACI,mBACIxwB,cAAOC,KACP,SAAKC,SAAW,uCASxB,OAZwDuwB,QAYxDrwB,EAZA,CAAwDC,geCKxDqwB,eACI,mBACI1wB,cAAOC,KAKJ,iBAAmB,IAAI6M,GACvBxM,UAAmB,IAAIguB,GACvBhuB,eAA6B,IAAIkuB,GACjCluB,WAAqB,IAAIkvB,GACzBlvB,0BAA4C,GAE5CA,+BAAmE,IAAIkwB,GAV1ElwB,EAAKJ,SAAW,6BAYxB,OAf8CywB,QAe9CvwB,EAfA,CAA8CC,+eCa1C,WAAuCC,EAAcC,UAAyBP,YAAMM,GAAQ,aAAcC,IAAIN,KAG9F,OALoB2wB,QAKpBxwB,iBAAhB,SAAqBE,GAEvB,OAAOL,KAAKQ,IAAIS,kBAAkBjB,KAAKU,eAAgB,OAAQL,OAAS,IAG9DF,mBAAR,SAAeE,EAAwBC,EAAuCwP,GAEhF,OAAO9P,KAAKQ,IAAIC,iBAAiBT,KAAKU,eAAgB,SAAW,CAACK,eAAgBV,EAAgBuwB,gBAAiBtwB,EAAiBM,QAAe,MAAPkP,OAAO,EAAPA,EAASjP,oBAG3IV,+BAAR,SAA2BE,GAE7B,OAAOL,KAAKQ,IAAIC,iBAAiBT,KAAKU,eAAgB,qBAAuB,CAACmwB,aAAcxwB,uEAf7Ea,SAAMC,MAACC,cATfC,OAOIlB,qUAAkB2wB,KAD9B5vB,iBACYf,IAA2BoB,+dClBxCwvB,eACI,mBACIhxB,cAAOC,KACP,SAAKC,SAAW,2BAIxB,OAP4C+wB,QAO5C7wB,EAPA,CAA4CqX,6eCmBxC,WAAuCnX,EAAcC,UAAyBP,YAAMM,GAAQ,kBAAmBC,IAAIN,KAG3G,OALiCixB,QAKjC9wB,mBAAR,SAAeE,EAAwBC,EAAqBwP,GAE9D,OAAO9P,KAAKQ,IAAIC,iBAAiBT,KAAKU,eAAgB,SAAW,CAACwwB,eAAgB7wB,EAAgB8wB,WAAY7wB,EAAYM,QAAe,MAAPkP,OAAO,EAAPA,EAASjP,sFAL5HK,SAAMC,MAACC,cARfC,OAMIlB,qUAAuBixB,KADnClwB,iBACYf,IAAgCoB,MvBhB7C,SAAYxB,GAEXA,wCACAA,wCACAA,wCACAA,wCACAA,wCACAA,kEACAA,8CACAA,kCACAA,wCACAA,sDACAA,wDACAA,gEACAA,oDACAA,oDACAA,wDACAA,gCACAA,0CACAA,0CACAA,0CACAA,4CACAA,8BACAA,sCACAA,0BACAA,4DACAA,0CACAA,4CACAA,sDACAA,gDACAA,wDACAA,0EACAA,4EACAA,0BACAA,4DACAA,gEACAA,kDACAA,wEACAA,sFACAA,sBACAA,wDACAA,oEACAA,wCACAA,0CACAA,wDACAA,sCACAA,kCACAA,sDACAA,0DACAA,0CACAA,8DACAA,oEAnDD,CAAY6kB,QAAkB,KAuD9B,SAAY7kB,GAEXA,gBACAA,cACAA,0BACAA,YALD,CAAY8kB,QAAmB,KAS/B,SAAY9kB,GAEXA,oBACAA,kBACAA,oBACAA,oBACAA,0BACAA,sBAPD,CAAY+kB,QAAwB,KAWpC,SAAY/kB,GAEXA,oBACAA,kBACAA,oBACAA,oBACAA,4CACAA,8BACAA,8BARD,CAAYglB,QAAoB,KAYhC,SAAYhlB,GAEXA,oBACAA,kBACAA,oBACAA,sBALD,CAAYilB,QAA2B,KASvC,SAAYjlB,GAEXA,oBACAA,wBACAA,oBACAA,oBALD,CAAYklB,QAAwB,KASpC,SAAYllB,GAEXA,wBACAA,kBACAA,oBACAA,oBALD,CAAYmlB,QAAe,KAS3B,SAAYnlB,GAEXA,wBACAA,kBACAA,oBACAA,oBALD,CAAYolB,QAAiB,KAS7B,SAAYplB,GAEXA,wBACAA,kBACAA,wBACAA,oBACAA,sBACAA,oCACAA,oDACAA,oCACAA,oCACAA,wDACAA,0BACAA,8BACAA,gCAdD,CAAYqlB,QAAkB,KAkB9B,SAAYrlB,GAEXA,wBACAA,kBACAA,oBACAA,oBALD,CAAYslB,QAAqB,KASjC,SAAYtlB,GAEXA,wBACAA,kBACAA,wBACAA,oBACAA,oCAND,CAAYulB,QAAuB,KAUnC,SAAYvlB,GAEXA,kBACAA,gBACAA,sBACAA,oBACAA,sBACAA,sBACAA,4CACAA,wCACAA,wCACAA,cACAA,wBACAA,oCACAA,cACAA,8BACAA,YAhBD,CAAYwlB,QAAc,KAoB1B,SAAYxlB,GAEXA,gBACAA,gBACAA,sBACAA,kBACAA,wBACAA,oBACAA,oBACAA,sBACAA,cACAA,sBACAA,gBACAA,gBACAA,8BACAA,cACAA,cACAA,cACAA,wBACAA,sBACAA,oBACAA,sBACAA,cACAA,4CACAA,4CACAA,4CACAA,gBACAA,0CACAA,0CACAA,kDACAA,kDACAA,wDACAA,4CACAA,8CACAA,oDACAA,4CACAA,8CACAA,0BACAA,wBACAA,0BACAA,oBAxCD,CAAYylB,QAAS,KA4CrB,SAAYzlB,GAEXA,wBACAA,0BACAA,cAJD,CAAY0lB,QAA0B,KAQtC,SAAY1lB,GAEXA,oBACAA,sBACAA,kBACAA,0BACAA,gBACAA,wBAC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ACX81D,SAAU,GACV/uB,MAAO,WAEX,CACIjnC,MAAO16B,QACPksC,KAAM,YACNtR,UAAW,OACX81D,SAAU,GACV/uB,MAAO,WAEX,CACIjnC,MAAO16B,SACPksC,KAAM,aACNtR,UAAW,QACX81D,SAAU,GACV/uB,MAAO,WAEX,CACIjnC,MAAO16B,YACPksC,KAAM,gBACNtR,UAAW,WACX81D,SAAU,GACV/uB,MAAO,UACPY,KAAM,gBAEV,CACI7nC,MAAO16B,SACPksC,KAAM,aACNtR,UAAW,QACX81D,SAAU,GACV/uB,MAAO,UACPY,KAAM,aAEV,CACI7nC,MAAO16B,QACPksC,KAAM,YACNtR,UAAW,OACX81D,SAAU,GACV/uB,MAAO,WAEX,CACIjnC,MAAO16B,QACPksC,KAAM,WACNtR,UAAW,OACX81D,SAAU,EACV/uB,MAAO,WAEX,CACIjnC,MAAO16B,aACPksC,KAAM,iBACNtR,UAAW,YACX81D,SAAU,GACV/uB,MAAO,WAEX,CACIjnC,MAAO16B,YACPksC,KAAM,WACNtR,UAAW,WACX+mC,MAAO,UACPY,KAAM,yBAEV,CACI7nC,MAAO16B,WACPksC,KAAM,UACNtR,UAAW,UACX+mC,MAAO,WAEX,CACIjnC,MAAO16B,YACPksC,KAAM,WACNtR,UAAW,WACX+mC,MAAO,WAEX,CACIjnC,MAAO16B,QACPksC,KAAM,OACNtR,UAAW,OACX+mC,MAAO,WAEX,CACIjnC,MAAO16B,uBACPksC,KAAM,sBACNtR,UAAW,sBACX+mC,MAAO,WAEX,CACIjnC,MAAO16B,uBACPksC,KAAM,sBACNtR,UAAW,sBACX+mC,MAAO,WAEX,CACIjnC,MAAO16B,uBACPksC,KAAM,sBACNtR,UAAW,sBACX+mC,MAAO,WAEX,CACIjnC,MAAO16B,sBACPksC,KAAM,OACNtR,UAAW,OACX+mC,MAAO,WAEX,CACIjnC,MAAO16B,sBACPksC,KAAM,eACNtR,UAAW,eACX+mC,MAAO,WAEX,CACIjnC,MAAO16B,0BACPksC,KAAM,mBACNtR,UAAW,mBACX+mC,MAAO,WAEX,CACIjnC,MAAO16B,0BACPksC,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,KAAM1V,wBACNgc,KAAM,2BAEV,CACImlB,MAAO,EACPyB,KAAM,kBACNltB,KAAM1V,iBACNgc,KAAM,oBAEV,CACImlB,MAAO,GACPyB,KAAM,wBACNltB,KAAM1V,sBACNgc,KAAM,0BAEV,CACImlB,MAAO,GACPyB,KAAM,YACNltB,KAAM1V,YACNgc,KAAM,eAEV,CACImlB,MAAO,GACPyB,KAAM,qBACNltB,KAAM1V,oBACNgc,KAAM,uBAEV,CACImlB,MAAO,GACPyB,KAAM,qBACNltB,KAAM1V,mBACNgc,KAAM,wBAEV,CACImlB,MAAO,GACPyB,KAAM,+BACNltB,KAAM1V,6BACNgc,KAAM,iCAEV,CACImlB,MAAO,GACPyB,KAAM,kBACNltB,KAAM1V,gBACNgc,KAAM,qBAEV,CACImlB,MAAO,GACPyB,KAAM,4BACNltB,KAAM1V,0BACNgc,KAAM,8BAEV,CACImlB,MAAO,GACPyB,KAAM,mBACNltB,KAAM1V,iBACNgc,KAAM,sBAEV,CACImlB,MAAO,GACPyB,KAAM,6BACNltB,KAAM1V,2BACNgc,KAAM,+BAEV,CACImlB,MAAO,GACPyB,KAAM,uBACNltB,KAAM1V,qBACNgc,KAAM,0BAEV,CACImlB,MAAO,GACPyB,KAAM,iCACNltB,KAAM1V,+BACNgc,KAAM,mCAEV,CACImlB,MAAO,GACPyB,KAAM,iBACN5mB,KAAM,qBAKlBwkB,yBAA0B,CACtB,CACIG,KAAM,UACNiC,KAAM,UACNnC,KAAM,CAAC,CACHU,MAAO,EACPqB,MAAO,KACPI,KAAM,YACNltB,KAAM1V,WACNgc,KAAM,cACV,CACImlB,MAAO,EACPqB,MAAO,KACPI,KAAM,0BACNltB,KAAM1V,YACNgc,KAAM,2BAEV,CACImlB,MAAO,EACPqB,MAAO,KACPI,KAAM,WACNltB,KAAM1V,WACNgc,KAAM,cAEV,CACImlB,MAAO,EACPqB,MAAO,KACPI,KAAM,iBACNltB,KAAM1V,gBACNgc,KAAM,qBAId,CACI2kB,KAAM,iBACNiC,KAAM,iBACNnC,KAAM,CACF,CACIU,MAAO,EACPqB,MAAO,KACPI,KAAM,QACNltB,KAAM1V,QACNgc,KAAM,WAEV,CACImlB,MAAO,EACPqB,MAAO,KACPI,KAAM,oBACN5mB,KAAM,oBACNtG,KAAM1V,qBAIlB,CACI2gC,KAAM,gBACNiC,KAAM,gBACNnC,KAAM,CACF,CACIU,MAAO,EACPqB,MAAO,KACPI,KAAM,yBACNltB,KAAM1V,wBACNgc,KAAM,2BAEV,CACImlB,MAAO,EACPqB,MAAO,KACPI,KAAM,kBACNltB,KAAM1V,iBACNgc,KAAM,sBAIlB,CACI2kB,KAAM,kBACNiC,KAAM,kBACNnC,KAAM,CACF,CACIU,MAAO,EACPqB,MAAO,KACPI,KAAM,cACNltB,KAAM1V,cACNgc,KAAM,iBAEV,CACImlB,MAAO,GACPqB,MAAO,KACPI,KAAM,wBACNltB,KAAM1V,sBACNgc,KAAM,4BAIlB,CACI2kB,KAAM,WACNiC,KAAM,WACNnC,KAAM,CACF,CACIU,MAAO,GACPqB,MAAO,KACPI,KAAM,YACNltB,KAAM1V,YACNgc,KAAM,eAEV,CACImlB,MAAO,GACPqB,MAAO,KACPI,KAAM,qBACNltB,KAAM1V,oBACNgc,KAAM,yBAIlB,CACI2kB,KAAM,sBACNiC,KAAM,sBACNnC,KAAM,CACF,CACIU,MAAO,GACPqB,MAAO,KACPI,KAAM,qBACNltB,KAAM1V,mBACNgc,KAAM,wBAEV,CACImlB,MAAO,GACPqB,MAAO,KACPI,KAAM,+BACNltB,KAAM1V,6BACNgc,KAAM,iCAEV,CACImlB,MAAO,GACPqB,MAAO,KACPI,KAAM,kBACNltB,KAAM1V,gBACNgc,KAAM,qBAEV,CACImlB,MAAO,GACPqB,MAAO,KACPI,KAAM,4BACNltB,KAAM1V,0BACNgc,KAAM,8BAEV,CACImlB,MAAO,GACPqB,MAAO,KACPI,KAAM,mBACNltB,KAAM1V,iBACNgc,KAAM,sBAEV,CACImlB,MAAO,GACPqB,MAAO,KACPI,KAAM,6BACNltB,KAAM1V,2BACNgc,KAAM,+BAEV,CACImlB,MAAO,GACPqB,MAAO,KACPI,KAAM,uBACNltB,KAAM1V,qBACNgc,KAAM,0BAEV,CACImlB,MA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PyB,KAAM,YACN5mB,KAAM,gBAGlBpS,UACI,CACI,CACIowB,MAAOj4B,SACPypC,KAAM,mBAEV,CACIxR,MAAOj4B,sBACPypC,KAAM,2BAEV,CACIxR,MAAOj4B,WACPypC,KAAM,mBAEV,CACIxR,MAAOj4B,kBACPypC,KAAM,sBAEV,CACIxR,MAAOj4B,eACPypC,KAAM,6BAGlB8nD,oBACI,CACI,CACIt5D,MAAO56B,aACPosC,KAAM,aAEV,CACIxR,MAAO56B,UACPosC,KAAM,WAEV,CACIxR,MAAO56B,aACPosC,KAAM,aAEV,CACIxR,MAAO56B,WACPosC,KAAM,WAEV,CACIxR,MAAO56B,mBACPosC,KAAM,sBAGlB+nD,uBACI,CACI,CACIv5D,MAAO/3B,0BACPupC,KAAM,iBAEV,CACIxR,MAAO/3B,mBACPupC,KAAM,oBAEV,CACIxR,MAAO/3B,wBACPupC,KAAM,0BAEV,CACIxR,MAAO/3B,kBACPupC,KAAM,oBAEV,CACIxR,MAAO/3B,kBACPupC,KAAM,oBAEV,CACIxR,MAAO/3B,kBACPupC,KAAM,oBAEV,CACIxR,MAAO/3B,kBACPupC,KAAM,oBAEV,CACIxR,MAAO/3B,kBACPupC,KAAM,oBAEV,CACIxR,MAAO/3B,YACPupC,KAAM,YAEV,CACIxR,MAAO/3B,sBACPupC,KAAM,uBAEV,CACIxR,MAAO/3B,8BACPupC,KAAM,gCAEV,CACIxR,MAAO/3B,QACPupC,KAAM,QAEV,CACIxR,MAAO/3B,aACPupC,KAAM,cAEV,CACIxR,MAAO/3B,iBACPupC,KAAM,kBAEV,CACIxR,MAAO/3B,sBACPupC,KAAM,wBAEV,CACIxR,MAAO/3B,WACPupC,KAAM,WAEV,CACIxR,MAAO/3B,WACPupC,KAAM,WAEV,CACIxR,MAAO/3B,eACPupC,KAAM,gBAEV,CACIxR,MAAO/3B,gBACPupC,KAAM,iBAEV,CACIxR,MAAO/3B,mBACPupC,KAAM,qBAIlBgoD,kBACI,CACI,CACIx5D,MAAO93B,QACPspC,KAAM,QAEV,CACIxR,MAAO93B,UACPspC,KAAM,UAEV,CACIxR,MAAO93B,c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BACX81D,SAAU,EACV/uB,MAAO,UACPY,KAAM,OAEV,CACI7nC,MAAO16B,SACPksC,KAAM,sCACNtR,UAAW,iCACX81D,SAAU,GACV/uB,MAAO,UACPY,KAAM,aAEV,CACI7nC,MAAO16B,YACPksC,KAAM,kDACNtR,UAAW,6CACX81D,SAAU,GACV/uB,MAAO,UACPY,KAAM,gBAEV,CACI7nC,MAAO16B,UACPksC,KAAM,4CACNtR,UAAW,uCACX81D,SAAU,GACV/uB,MAAO,UACPY,KAAM,cAEV,CACI7nC,MAAO16B,QACPksC,KAAM,sCACNtR,UAAW,iCACX81D,SAAU,GACV/uB,MAAO,UACPY,KAAM,YAEV,CACI7nC,MAAO16B,gBACPksC,KAAM,+DACNtR,UAAW,0DACX81D,SAAU,GACV/uB,MAAO,UACPY,KAAM,gBAEV,CACI7nC,MAAO16B,aACPksC,KAAM,kDACNtR,UAAW,6CACX81D,SAAU,GACV/uB,MAAO,UACPY,KAAM,iBAEV,CACI7nC,MAAO16B,WACPksC,KAAM,sCACNtR,UAAW,iCACX81D,SAAU,GACV/uB,MAAO,UACPY,KAAM,eAEV,CACI7nC,MAAO16B,YACPksC,KAAM,kDACNtR,UAAW,6CACX81D,SAAU,GACV/uB,MAAO,WAEX,CACIjnC,MAAO16B,QACPksC,KAAM,YACNtR,UAAW,OACX81D,SAAU,GACV/uB,MAAO,WAEX,CACIjnC,MAAO16B,SACPksC,KAAM,sCACNtR,UAAW,iCACX81D,SAAU,GACV/uB,MAAO,WAEX,CACIjnC,MAAO16B,YACPksC,KAAM,wDACNtR,UAAW,mDACX81D,SAAU,GACV/uB,MAAO,UACPY,KAAM,gBAEV,CACI7nC,MAAO16B,SACPksC,KAAM,0BACNtR,UAAW,qBACX81D,SAAU,GACV/uB,MAAO,UACPY,KAAM,aAEV,CACI7nC,MAAO16B,QACPksC,KAAM,iCACNtR,UAAW,4BACX81D,SAAU,GACV/uB,MAAO,WAEX,CACIjnC,MAAO16B,QACPksC,KAAM,qCACNtR,UAAW,iCACX81D,SAAU,EACV/uB,MAAO,WAEX,CACIjnC,MAAO16B,aACPksC,KAAM,kDACNtR,UAAW,6CACX81D,SAAU,GACV/uB,MAAO,WAEX,CACIjnC,MAAO16B,WACPksC,KAAM,8CACNtR,UAAW,8CACX+mC,MAAO,WAEX,CACIjnC,MAAO16B,YACPksC,KAAM,6CACNtR,UAAW,6CACX+mC,MAAO,UACPY,KAAM,yBAEV,CACI7nC,MAAO16B,YACPksC,KAAM,oDACNtR,UAAW,oDACX+mC,MAAO,WAEX,CACIjnC,MAAO16B,QACPksC,KAAM,4EACNtR,UAAW,4EACX+mC,MAAO,WAEX,CACIjnC,MAAO16B,uBACPksC,KAAM,oCACNtR,UAAW,oCACX+mC,MAAO,WAEX,CACIjnC,MAAO16B,uBACPksC,KAAM,oCACNtR,UAAW,oCACX+mC,MAAO,WAEX,CACIjnC,MAAO16B,uBACPksC,KAAM,oCACNtR,UAAW,oCACX+mC,MAAO,WAEX,CACIjnC,MAAO16B,sBACPksC,KAAM,uEACNtR,UAAW,uEACX+mC,MAAO,WAEX,CACIjnC,MAAO16B,sBACPksC,KAAM,4DACNtR,UAAW,4DACX+mC,MAAO,WAEX,CACIjnC,MAAO16B,0BACPksC,KAAM,8EACNtR,UAAW,8EACX+mC,MAAO,WAEX,CACIjnC,MAAO16B,0BACPksC,KAAM,qFACNtR,UAAW,qFACX+mC,MAAO,WAEX,CACIjnC,MAAO16B,6BACPksC,KAAM,0DACNtR,UAAW,0DACX+mC,MAAO,WAEX,CACIjnC,MAAO16B,uBACPksC,KAAM,2BACNtR,UAAW,2BACX+mC,MAAO,WAEX,CACIjnC,MAAO16B,wBACPksC,KAAM,2BACNtR,UAAW,2BACX+mC,MAAO,WAEX,CACIjnC,MAAO16B,2BACPksC,KAAM,gEACNtR,UAAW,gEACX+mC,MAAO,WAEX,CACIjnC,MAAO16B,uBACPksC,KAAM,uCACNtR,UAAW,uCACX+mC,MAAO,WAEX,CACIjnC,MAAO16B,wBACPksC,KAAM,wCACNtR,UAAW,wCACX+mC,MAAO,WAEX,CACIjnC,MAAO16B,aACPksC,KAAM,+EACNtR,UAAW,+EACX+mC,MAAO,WAEX,CACIjnC,MAAO16B,cACPksC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tD,uBAEX,CACI6mB,MAAOx6B,SACPojC,KAAM,0DACN4I,KAAM,0DACNgZ,UAAW,EACXyc,MAAO9tD,uBAEX,CACI6mB,MAAOx6B,QACPojC,KAAM,6CACN4I,KAAM,6CACNgZ,UAAW,EACXyc,MAAO9tD,uBAEX,CACI6mB,MAAOx6B,YACPojC,KAAM,6CACN4I,KAAM,6CACNgZ,UAAW,EACXyc,MAAO9tD,wBAGnBk9E,iBACI,CACI,CACIlvD,MAAO,EACPyB,KAAM,iCACNltB,KAAM1V,WACNgc,KAAM,cAEV,CACImlB,MAAO,EACPyB,KAAM,6EACNltB,KAAM1V,YACNgc,KAAM,2BAEV,CACImlB,MAAO,EACPyB,KAAM,6CACNltB,KAAM1V,WACNgc,KAAM,cAEV,CACImlB,MAAO,EACPyB,KAAM,6CACNltB,KAAM1V,QACNgc,KAAM,WAEV,CACImlB,MAAO,EACPyB,KAAM,uCACNltB,KAAM1V,cACNgc,KAAM,iBAEV,CACImlB,MAAO,EACPyB,KAAM,2CACN5mB,KAAM,oBACNtG,KAAM1V,mBAEV,CACImhC,MAAO,EACPyB,KAAM,0DACNltB,KAAM1V,mBACNgc,KAAM,sBAEV,CACImlB,MAAO,EACPyB,KAAM,kFACNltB,KAAM1V,gBACNgc,KAAM,mBAEV,CACImlB,MAAO,EACPyB,KAAM,4EACNltB,KAAM1V,wBACNgc,KAAM,2BAEV,CACImlB,MAAO,EACPyB,KAAM,uCACNltB,KAAM1V,iBACNgc,KAAM,oBAEV,CACImlB,MAAO,GACPyB,KAAM,+FACNltB,KAAM1V,sBACNgc,KAAM,0BAEV,CACImlB,MAAO,GACPyB,KAAM,sEACNltB,KAAM1V,YACNgc,KAAM,eAEV,CACImlB,MAAO,GACPyB,KAAM,+FACNltB,KAAM1V,oBACNgc,KAAM,uBAEV,CACImlB,MAAO,GACPyB,KAAM,wFACNltB,KAAM1V,mBACNgc,KAAM,wBAEV,CACImlB,MAAO,GACPyB,KAAM,2GACNltB,KAAM1V,6BACNgc,KAAM,iCAEV,CACImlB,MAAO,GACPyB,KAAM,kFACNltB,KAAM1V,gBACNgc,KAAM,qBAEV,CACImlB,MAAO,GACPyB,KAAM,qGACNltB,KAAM1V,0BACNgc,KAAM,8BAEV,CACImlB,MAAO,GACPyB,KAAM,+FACNltB,KAAM1V,iBACNgc,KAAM,sBAEV,CACImlB,MAAO,GACPyB,KAAM,kHACNltB,KAAM1V,2BACNgc,KAAM,+BAEV,CACImlB,MAAO,GACPyB,KAAM,kFACNltB,KAAM1V,qBACNgc,KAAM,0BAEV,CACImlB,MAAO,GACPyB,KAAM,qGACNltB,KAAM1V,+BACNgc,KAAM,mCAEV,CACImlB,MAAO,GACPyB,KAAM,sEACN5mB,KAAM,qBAIlBwkB,yBAA0B,CACtB,CACIG,KAAM,UACNiC,KAAM,iCACNnC,KAAM,CAAC,CACHU,MAAO,EACPqB,MAAO,KACPI,KAAM,iCACNltB,KAAM1V,WACNgc,KAAM,cACV,CACImlB,MAAO,EACPqB,MAAO,KACPI,KAAM,6EACNltB,KAAM1V,YACNgc,KAAM,2BAEV,CACImlB,MAAO,EACPqB,MAAO,KACPI,KAAM,6CACNltB,KAAM1V,WACNgc,KAAM,cAEV,CACImlB,MAAO,EACPqB,MAAO,KACPI,KAAM,kFACNltB,KAAM1V,gBACNgc,KAAM,qBAId,CACI2kB,KAAM,iBACNiC,KAAM,sEACNnC,KAAM,CACF,CACIU,MAAO,EACPqB,MAAO,KACPI,KAAM,6CACNltB,KAAM1V,QACNgc,KAAM,WAEV,CACImlB,MAAO,EACPqB,MAAO,KACPI,KAAM,2CACN5mB,KAAM,oBACNtG,KAAM1V,qBAIlB,CACI2gC,KAAM,gBACNiC,KAAM,uCACNnC,KAAM,CACF,CACIU,MAAO,EACPqB,MAAO,KACPI,KAAM,4EACNltB,KAAM1V,wBACNgc,KAAM,2BAEV,CACImlB,MAAO,EACPqB,MAAO,KACPI,KAAM,uCACNltB,KAAM1V,iBACNgc,KAAM,sBAIlB,CACI2kB,KAAM,kBACNiC,KAAM,2GACNnC,KAAM,CACF,CACIU,MAAO,EACPqB,MAAO,KACPI,KAAM,uCACNltB,KAAM1V,cACNgc,KAAM,iBAEV,CACImlB,MAAO,GACPqB,MAAO,KACPI,KAAM,+F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56B,UACPosC,KAAM,2DAEV,CACIxR,MAAO56B,aACPosC,KAAM,4BAEV,CACIxR,MAAO56B,WACPosC,KAAM,kCAEV,CACIxR,MAAO56B,mBACPosC,KAAM,yEAGlB+nD,uBACI,CACI,CACIv5D,MAAO/3B,0BACPupC,KAAM,2DAEV,CACIxR,MAAO/3B,mBACPupC,KAAM,8EAEV,CACIxR,MAAO/3B,wBACPupC,KAAM,mFAEV,CACIxR,MAAO/3B,kBACPupC,KAAM,8BAEV,CACIxR,MAAO/3B,kBACPupC,KAAM,8BAEV,CACIxR,MAAO/3B,kBACPupC,KAAM,8BAEV,CACIxR,MAAO/3B,kBACPupC,KAAM,8BAEV,CACIxR,MAAO/3B,kBACPupC,KAAM,8BAEV,CACIxR,MAAO/3B,YACPupC,KAAM,4BAEV,CACIxR,MAAO/3B,sBACPupC,KAAM,iGAEV,CACIxR,MAAO/3B,8BACPupC,KAAM,6GAEV,CACIxR,MAAO/3B,QACPupC,KAAM,4BAEV,CACIxR,MAAO/3B,aACPupC,KAAM,uEAEV,CACIxR,MAAO/3B,iBACPupC,KAAM,gGAEV,CACIxR,MAAO/3B,sBACPupC,KAAM,gGAEV,CACIxR,MAAO/3B,WACPupC,KAAM,kCAEV,CACIxR,MAAO/3B,WACPupC,KAAM,wCAEV,CACIxR,MAAO/3B,eACPupC,KAAM,2DAEV,CACIxR,MAAO/3B,gBACPupC,KAAM,2DAEV,CACIxR,MAAO/3B,mBACPupC,KAAM,6GAGlBgoD,kBACI,CACI,CACIx5D,MAAO93B,QACPspC,KAAM,kCAEV,CACIxR,MAAO93B,UACPspC,KAAM,sBAEV,CACIxR,MAAO93B,cACPspC,KAAM,iEAEV,CACIxR,MAAO93B,gBACPspC,KAAM,uEAEV,CACIxR,MAAO93B,YACPspC,KAAM,4DAIlBioD,yBACI,CACI,CACIz5D,MAAO,cACPwR,KAAM,kCAEV,CACIxR,MAAO,eACPwR,KAAM,uEAEV,CACIxR,MAAO,sBACPwR,KAAM,kCAEV,CACIxR,MAAO,uBACPwR,KAAM,kCAEV,CACIxR,MAAO,iBACPwR,KAAM,4BAEV,CACIxR,M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,UAAW,QACX81D,SAAU,GACV/uB,MAAO,UACPY,KAAM,aAEV,CACI7nC,MAAO16B,YACPksC,KAAM,gBACNtR,UAAW,WACX81D,SAAU,GACV/uB,MAAO,UACPY,KAAM,gBAEV,CACI7nC,MAAO16B,UACPksC,KAAM,cACNtR,UAAW,SACX81D,SAAU,GACV/uB,MAAO,UACPY,KAAM,cAEV,CACI7nC,MAAO16B,QACPksC,KAAM,YACNtR,UAAW,OACX81D,SAAU,GACV/uB,MAAO,UACPY,KAAM,YAEV,CACI7nC,MAAO16B,gBACPksC,KAAM,qBACNtR,UAAW,gBACX81D,SAAU,GACV/uB,MAAO,UACPY,KAAM,gBAEV,CACI7nC,MAAO16B,aACPksC,KAAM,iBACNtR,UAAW,YACX81D,SAAU,GACV/uB,MAAO,UACPY,KAAM,iBAEV,CACI7nC,MAAO16B,WACPksC,KAAM,eACNtR,UAAW,UACX81D,SAAU,GACV/uB,MAAO,UACPY,KAAM,eAEV,CACI7nC,MAAO16B,YACPksC,KAAM,gBACNtR,UAAW,WACX81D,SAAU,GACV/uB,MAAO,WAEX,CACIjnC,MAAO16B,QACPksC,KAAM,YACNtR,UAAW,OACX81D,SAAU,GACV/uB,MAAO,WAEX,CACIjnC,MAAO16B,SACPksC,KAAM,aACNtR,UAAW,QACX81D,SAAU,GACV/uB,MAAO,WAEX,CACIjnC,MAAO16B,YACPksC,KAAM,gBACNtR,UAAW,WACX81D,SAAU,GACV/uB,MAAO,UACPY,KAAM,gBAEV,CACI7nC,MAAO16B,SACPksC,KAAM,aACNtR,UAAW,QACX81D,SAAU,GACV/uB,MAAO,UACPY,KAAM,aAEV,CACI7nC,MAAO16B,QACPksC,KAAM,YACNtR,UAAW,OACX81D,SAAU,GACV/uB,MAAO,WAEX,CACIjnC,MAAO16B,QACPksC,KAAM,WACNtR,UAAW,OACX81D,SAAU,EACV/uB,MAAO,WAEX,CACIjnC,MAAO16B,aACPksC,KAAM,iBACNtR,UAAW,YACX81D,SAAU,GACV/uB,MAAO,WAEX,CACIjnC,MAAO16B,YACPksC,KAAM,WACNtR,UAAW,WACX+mC,MAAO,UACPY,KAAM,yBAEV,CACI7nC,MAAO16B,WACPksC,KAAM,UACNtR,UAAW,UACX+mC,MAAO,WAEX,CACIjnC,MAAO16B,YACPksC,KAAM,WACNtR,UAAW,WACX+mC,MAAO,WAEX,CACIjnC,MAAO16B,QACPksC,KAAM,OACNtR,UAAW,OACX+mC,MAAO,WAEX,CACIjnC,MAAO16B,uBACPksC,KAAM,sBACNtR,UAAW,sBACX+mC,MAAO,WAEX,CACIjnC,MAAO16B,uBACPksC,KAAM,sBACNtR,UAAW,sBACX+mC,MAAO,WAEX,CACIjnC,MAAO16B,uBACPksC,KAAM,sBACNtR,UAAW,sBACX+mC,MAAO,WAEX,CACIjnC,MAAO16B,sBACPksC,KAAM,OACNtR,UAAW,OACX+mC,MAAO,WAEX,CACIjnC,MAAO16B,sBACPksC,KAAM,sBACNtR,UAAW,eACX+mC,MAAO,WAEX,CACIjnC,MAAO16B,0BACPksC,KAAM,0BACNtR,UAAW,mBACX+mC,MAAO,WAEX,CACIjnC,MAAO16B,0BACPksC,KAAM,0BACNtR,UAAW,mBACX+mC,MAAO,WAEX,CACIjnC,MAAO16B,6BACPksC,KAAM,cACNtR,UAAW,cACX+mC,MAAO,WAEX,CACIjnC,MAAO16B,uBACPksC,KAAM,QACNtR,UAAW,QACX+mC,MAAO,WAEX,CACIjnC,MAAO16B,wBACPksC,KAAM,SACNtR,UAAW,SACX+mC,MAAO,WAEX,CACIjnC,MAAO16B,2BACPksC,KAAM,YACNtR,UAAW,YACX+mC,MAAO,WAEX,CACIjnC,MAAO16B,uBACPksC,KAAM,QACNtR,UAAW,QACX+mC,MAAO,WAEX,CACIjnC,MAAO16B,wBACPksC,KAAM,SACNtR,UAAW,SACX+mC,MAAO,WAEX,CACIjnC,MAAO16B,cACPksC,KAAM,4BACNtR,UAAW,sBACX+mC,MAAO,UACPY,KAAM,yBAEV,CACI7nC,MAAO16B,aACPksC,KAAM,kBACNtR,UAAW,kBACX+mC,MAAO,WAEX,CACIjnC,MAAO16B,cACPksC,KAAM,sBACNtR,UAAW,sBACX+mC,MAAO,WAEX,CACIjnC,MA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ACNgZ,UAAW,EACXyc,MAAO9tD,wBAGnBk9E,iBACI,CACI,CACIlvD,MAAO,EACPyB,KAAM,WACNltB,KAAM1V,WACNgc,KAAM,cAEV,CACImlB,MAAO,EACPyB,KAAM,kCACNltB,KAAM1V,YACNgc,KAAM,2BAEV,CACImlB,MAAO,EACPyB,KAAM,UACNltB,KAAM1V,WACNgc,KAAM,cAEV,CACImlB,MAAO,EACPyB,KAAM,WACNltB,KAAM1V,QACNgc,KAAM,WAEV,CACImlB,MAAO,EACPyB,KAAM,cACNltB,KAAM1V,cACNgc,KAAM,iBAEV,CACImlB,MAAO,EACPyB,KAAM,sBACN5mB,KAAM,oBACNtG,KAAM1V,mBAEV,CACImhC,MAAO,EACPyB,KAAM,8BACNltB,KAAM1V,mBACNgc,KAAM,sBAEV,CACImlB,MAAO,EACPyB,KAAM,oBACNltB,KAAM1V,gBACNgc,KAAM,mBAEV,CACImlB,MAAO,EACPyB,KAAM,gCACNltB,KAAM1V,wBACNgc,KAAM,2BAEV,CACImlB,MAAO,EACPyB,KAAM,uBACNltB,KAAM1V,iBACNgc,KAAM,oBAEV,CACImlB,MAAO,GACPyB,KAAM,2CACNltB,KAAM1V,sBACNgc,KAAM,0BAEV,CACImlB,MAAO,GACPyB,KAAM,aACNltB,KAAM1V,YACNgc,KAAM,eAEV,CACImlB,MAAO,GACPyB,KAAM,0BACNltB,KAAM1V,oBACNgc,KAAM,uBAEV,CACImlB,MAAO,GACPyB,KAAM,gCACNltB,KAAM1V,mBACNgc,KAAM,wBAEV,CACImlB,MAAO,GACPyB,KAAM,6CACNltB,KAAM1V,6BACNgc,KAAM,iCAEV,CACImlB,MAAO,GACPyB,KAAM,gCACNltB,KAAM1V,gBACNgc,KAAM,qBAEV,CACImlB,MAAO,GACPyB,KAAM,6CACNltB,KAAM1V,0BACNgc,KAAM,8BAEV,CACImlB,MAAO,GACPyB,KAAM,4BACNltB,KAAM1V,iBACNgc,KAAM,sBAEV,CACImlB,MAAO,GACPyB,KAAM,6CACNltB,KAAM1V,2BACNgc,KAAM,+BAEV,CACImlB,MAAO,GACPyB,KAAM,gCACNltB,KAAM1V,qBACNgc,KAAM,0BAEV,CACImlB,MAAO,GACPyB,KAAM,6CACNltB,KAAM1V,+BACNgc,KAAM,mCAEV,CACImlB,MAAO,GACPyB,KAAM,2BACN5mB,KAAM,qBAKlBwkB,yBAA0B,CACtB,CACIG,KAAM,UACNiC,KAAM,WACNnC,KAAM,CAAC,CACHU,MAAO,EACPqB,MAAO,KACPI,KAAM,WACNltB,KAAM1V,WACNgc,KAAM,cACV,CACImlB,MAAO,EACPqB,MAAO,KACPI,KAAM,kCACNltB,KAAM1V,YACNgc,KAAM,2BAEV,CACImlB,MAAO,EACPqB,MAAO,KACPI,KAAM,UACNltB,KAAM1V,WACNgc,KAAM,cAEV,CACImlB,MAAO,EACPqB,MAAO,KACPI,KAAM,oBACNltB,KAAM1V,gBACNgc,KAAM,qBAId,CACI2kB,KAAM,iBACNiC,KAAM,qBACNnC,KAAM,CACF,CACIU,MAAO,EACPqB,MAAO,KACPI,KAAM,WACNltB,KAAM1V,QACNgc,KAAM,WAEV,CACImlB,MAAO,EACPqB,MAAO,KACPI,KAAM,sBACN5mB,KAAM,oBACNtG,KAAM1V,qBAIlB,CACI2gC,KAAM,gBACNiC,KAAM,iBACNnC,KAAM,CACF,CACIU,MAAO,EACPqB,MAAO,KACPI,KAAM,gCACNltB,KAAM1V,wBACNgc,KAAM,2BAEV,CACImlB,MAAO,EACPqB,MAAO,KACPI,KAAM,uBACNltB,KAAM1V,iBACNgc,KAAM,sBAIlB,CACI2kB,KAAM,kBACNiC,KAAM,kCACNnC,KAAM,CACF,CACIU,MAAO,EACPqB,MAAO,KACPI,KAAM,cACNltB,KAAM1V,cACNgc,KAAM,iBAEV,CACImlB,MAAO,GACPqB,MAAO,KACPI,KAAM,2CACNltB,KAAM1V,sBACNgc,KAAM,4BAIlB,CACI2kB,KAAM,WACNiC,KAAM,gBACNnC,KAAM,CACF,CACIU,MAAO,GACPqB,MAAO,KACPI,KAAM,aACNltB,KAAM1V,YACNgc,KAAM,eAEV,CACImlB,MAAO,GACPqB,MAAO,KACPI,KAAM,0BACNltB,KAAM1V,oBACNgc,KAAM,yBAIlB,CACI2kB,KAAM,sBACNiC,KAAM,6BACNnC,KAAM,CACF,CACIU,MAAO,GACPqB,MAAO,KACPI,KAAM,gCACNltB,KAAM1V,mBACNgc,KAAM,wBAEV,CACImlB,MAAO,GACPqB,MAAO,KACPI,KAAM,6CACNltB,KAAM1V,6BACNgc,KAAM,iCAEV,CACImlB,MAAO,GACPqB,MAAO,KACPI,KAAM,gCACNltB,KAAM1V,gBACNgc,KAAM,qBAEV,CACImlB,MAAO,GACPqB,MAAO,KACPI,KAAM,6CACNltB,KAAM1V,0BACNgc,KAAM,8BAEV,CACImlB,MAAO,GACPqB,MAAO,KACPI,KAAM,4BACNltB,KAAM1V,iBACNgc,KAAM,sBAEV,CACImlB,MAAO,GACPqB,MAAO,KACPI,KAAM,yCACNltB,KAAM1V,2BACNgc,KAAM,+BAEV,CACImlB,MAAO,GACPqB,MAAO,KACPI,KAAM,gCACNltB,KAAM1V,qBACNgc,KAAM,0BAEV,CACImlB,MAAO,GACPqB,MAAO,KACPI,KAAM,6CACNltB,KAAM1V,+BACNgc,KAAM,qCAIlB,CACI2kB,KAAM,gBACNiC,KAAM,SACNnC,KAAM,CACF,CACIU,MAAO,GACPqB,MAAO,KACPI,KAAM,4BACNltB,KAAM,KACNsG,KAAM,oBAEV,CACImlB,MAAO,EACPqB,MAAO,KACPI,KAAM,8BACNltB,KAAM1V,mBACNgc,KAAM,yBAOtBs0E,cAAe,CACX,CACInvD,MAAO,EACPyB,KAAM,SAEV,CACIzB,MAAO,EACPyB,KAAM,eAGd2tD,sBAAuB,CACnB,CACIpvD,MAAO,EACPyB,KAAM,+BAEV,CACIzB,MAAO,EACPyB,KAAM,2BAEV,CACIzB,MAAO,EACPyB,KAAM,0BAGdq/C,wBACI,CACI,CACIjoD,MAAOn6B,SACP2rC,KAAM,yBAEV,CACIxR,MAAOn6B,SACP2rC,KAAM,eAEV,CACIxR,MAAOn6B,QACP2rC,KAAM,YAGlBglD,mCACI,CACI,CACIx2D,MAAOn6B,SACP2rC,KAAM,yBAEV,CACIxR,MAAOn6B,SACP2rC,KAAM,eAEV,CACIxR,MAAOn6B,QACP2rC,KAAM,WAEV,CACIxR,MAAOn6B,iBACP2rC,KAAM,wCAGlBilD,iBACI,CACI,CACIz2D,MAAOn7B,WACP2sC,KAAM,aAEV,CACIxR,MAAOn7B,UACP2sC,KAAM,aAEV,CACIxR,MAAOn7B,WACP2sC,KAAM,SAEV,CACIxR,MAAOn7B,WACP2sC,KAAM,YAEV,CACIxR,MAAOn7B,uBACP2sC,KAAM,oCAEV,CACIxR,MAAOn7B,gBACP2sC,KAAM,+BAGlBklD,qBACI,CACI,CACI12D,MAAOp7B,WACP4sC,KAAM,aAEV,CACIxR,MAAOp7B,UACP4sC,KAAM,aAEV,CACIxR,MAAOp7B,WACP4sC,KAAM,SAEV,CACIxR,MAAOp7B,WACP4sC,KAAM,YAEV,CACIxR,MAAOp7B,cACP4sC,KAAM,mBAEV,CACIxR,MAAOp7B,YACP4sC,KAAM,aAGlBmlD,qBACI,CACI,CACI32D,MAAOj7B,WACPysC,KAAM,aAEV,CACIxR,MAAOj7B,aACPysC,KAAM,gBAEV,CACIxR,MAAOj7B,WACPysC,KAAM,SAEV,CACIxR,MAAOj7B,WACPysC,KAAM,aAGlBolD,mBAAoB,CAChB,CACI52D,MAAO/1B,UACPunC,KAAM,UAEV,CACIxR,MAAO/1B,UACPunC,KAAM,UAEV,CACIxR,MAAO/1B,YACPunC,KAAM,cAGdqlD,eACI,CACI,CACI72D,MAAO96B,YACPssC,KAAM,YAEV,CACIxR,MAAO96B,SACPssC,KAAM,aAEV,CACIxR,MAAO96B,YACPssC,KAAM,gBAEV,CACIxR,MAAO96B,UACPssC,KAAM,YAEV,CACIxR,MAAO96B,WACPssC,KAAM,kBAEV,CACIxR,MAAO96B,kBACPssC,KAAM,sBAEV,CACIxR,MAAO96B,0BACPssC,KAAM,iCAEV,CACIxR,MAAO96B,kBACPssC,KAAM,yBAEV,CACIxR,MAAO96B,kBACPssC,KAAM,wBAEV,CACIxR,MAAO96B,aACPssC,KAAM,mBAEV,CACIxR,MAAO96B,eACPssC,KAAM,sBAGlBslD,kBACI,CACI,CACIrzE,SAAUtK,YACVuO,OAAQvO,QACRq4B,KAAM,QAEV,CACI/tB,SAAUt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,GACAC,GACAC,GAEAC,GACAC,GACAC,GAEAC,GACApoH,GACAqoH,GAEAC,GACAC,GACAC,GAEAC,GACAC,GACAC,GAEAC,GACAC,GAEAC,GACAC,GACAC,GAEAC,GACAC,GACAC,GACAl/E,GACAm/E,GAEAC,GACAC,GACAC,GACAC,GACAC,GAEAC,GACAC,GACAC,GACAC,GACAC,GAEAC,GACAC,GACAC,GAEAC,GACAC,GAEAnB,GACAoB,GAEAC,GACAC,GAEAlkJ,GACAC,GACAkkJ,GAEAC,GACAC,GACAC,GACAC,GACAC,GACAC,GAGAC,GACAC,GACAC,GACAC,GACAvrE,GACAwrE,GACAC,GACAC,GACAC,GAEAC,GACAC,GACAC,GACAC,GACAC,GACAC,GAEAC,GACAC,GACAC,GAEAC,GACAC,GACAC,GAEAC,GACAC,GACAC,GAEAp/G,GACAq/G,GACAC,GACAC,GACAC,GACAC,GACAC,GAEAC,GACAC,GACAC,GAEAC,GACAC,GACAC,GAEAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GAEAC,GACAC,GACAC,GAEAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GAEAC,GACAC,GACAC,GAEAhoJ,GACAioJ,GACAC,GACAC,GACAC,GACAC,GAEAC,GACAxoK,GACAuoK,GAEAE,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,GACA5qJ,GACA6qJ,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACA5rJ,GACA6rJ,GACAznD,GACA0nD,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACA50B,GACAv6E,GACAovG,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACA1kB,GACA2kB,GAGAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GAEAC,GAEAC,GACAC,GACAC,GAEAC,GAEAC,GACAC,GACAC,GACAC,GACAC,GACAC,GAEAC,GACAC,GACAC,GACA9qB,GACA+qB,GACAC,GAEAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACA9uF,IAEG70F,OAAO6lE,OAAO+9G,IACd5jL,OAAO6lE,OAAOg+G,IACd7jL,OAAO6lE,OAAO96E,IAEZwJ,kBAAkB,CACvBy/K,IAEKz/K,YAAY,CACjBuW,EACAiI,GACA6X,GACAhgB,EACA8N,GACAmS,GACAF,GACAyU,GACAvM,GACAyqC,EACAgO,GACAxI,GACArtC,GACA64G,GACA5jI,GACAioC,GACAyd,GACA/Q,GACAkD,GACAmc,GACAj0D,GACAE,GACA07E,GACAa,GACAn9B,GACAl/C,EACA2rE,GACAqE,GACApS,GACAyT,GACAzT,GACAnR,GACAr5B,GACAywD,GACA4U,GACA3U,GACA8P,GACAxrF,GACA65H,GACAxiC,GACAiG,GACA0F,GACAsB,GACA6E,GACAoB,GACAzC,GACAsB,GACAtO,GACA12C,GACA8tD,GACAC,GACA80D,GACAC,GACA5wD,GACAuC,GACAh5G,GACAgY,GACAC,GACA0tF,GACAl7C,EACAqkE,GACAsE,GACAtE,GACAr2D,GACAqjB,GACAo2C,GACA6C,GACAmB,GACAqT,GACA1rE,GACA/6D,GACAwW,GACAklH,GACAwyC,GACAj5B,GACAvZ,GACAma,GACA34H,GACA05H,GACA/xD,GACAhqB,GACA6mF,GACA9rF,GACAmjC,GACA2uD,GACAnxD,GACA6B,GACAoB,GACAwwD,GACAN,GACAY,G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CA,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,6DCzvCKb,EACT,CACI7G,GACI,CACI8/M,IAAO,eACPp+F,GAAM,eACNn6F,OAAU,qBACVsyB,MAAS,qBACTkmK,KAAQ,2BACRC,QAAW,8BACXC,OAAU,qBACVlZ,OAAU,qBACVmZ,KAAQ,2BACRC,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,sCAChC,qBAAsB,8JACtB,+BAAgC,yIAChC,mBAAoB,kHACpB,6BAA8B,yIAC9B,kBAAmB,iJAEnB,6BAA8B,gHAE9B,yBAA0B,sHAC1B,wBAAyB,6DACzB,wBAAyB,oCACzB,yBAA0B,8BAC1B,wBAAyB,qBACzB,mBAAoB,8CACpB,6BAA8B,qBAC9B,2BAA4B,qBAE5B,+BAAgC,sHAChC,8BAA+B,6DAC/B,8BAA+B,oCAC/B,+BAAgC,8BAEhC,yCAA0C,wCAC1C,yCAA0C,oDAC1C,6CAA8C,6EAC9C,gCAAiC,kJAEjC,4BAA6B,cAC7B,0BAA2B,oBAC3B,uBAAwB,QACxB,oBAAqB,KACrB,oBAAqB,KACrB,oBAAqB,KACrB,wBAAyB,SACzB,0BAA2B,WAC3B,+BAAgC,kBAChC,qCAAsC,gBACtC,sCAAuC,2BACvC,oCAAqC,oBACrC,oCAAqC,oBAErC,yBAA0B,SAC1B,yBAA0B,eAC1B,0BAA2B,2BAC3B,2BAA4B,2BAE5B,sBAAuB,+DACvB,yBAA0B,wDAE1B,kCAAmC,4GAEnC,gCAAiC,sEACjC,oCAAqC,gCACrC,mCAAoC,6BACpC,mCAAoC,mCACpC,6BAA8B,oFAC9B,+BAAgC,oDAChC,4BAA6B,yFAC7B,4BAA6B,2BAC7B,mCAAoC,sEACpC,qCAAsC,qBACtC,8BAA+B,SAC/B,gCAAiC,WACjC,yCAA0C,wLAC1C,qCAAsC,0DACtC,iCAAkC,qKAClC,wBAAyB,0DACzB,oCAAqC,qBACrC,kCAAmC,QACnC,yCAA0C,QAC1C,sCAAuC,SACvC,yCAA0C,iBAC1C,oCAAqC,YACrC,4CAA6C,wBAC7C,uCAAwC,eACxC,+CAAgD,2BAChD,0CAA2C,cAC3C,wCAAyC,WACzC,2CAA4C,mBAC5C,wCAAyC,YACzC,uCAAwC,UACxC,gDAAiD,QACjD,8CAA+C,MAC/C,6BAA8B,eAC9B,sBAAuB,eACvB,uBAAwB,eACxB,kCAAmC,6EACnC,mCAAoC,6EACpC,8BAA+B,8CAC/B,mCAAoC,sEACpC,qCAAsC,gEACtC,2BAA4B,0DAC5B,wBAAyB,WACzB,mCAAoC,oBACpC,wBAAyB,WACzB,mCAAoC,oBACpC,wBAAyB,WACzB,mCAAoC,oBACpC,wBAAyB,WACzB,mCAAoC,oBACpC,0BAA2B,aAC3B,6BAA8B,MAC9B,+BAAgC,QAChC,sCAAuC,cACvC,uCAAwC,eACxC,sBAAuB,SACvB,2BAA4B,uBAC5B,yBAA0B,aAC1B,0BAA2B,gBAC3B,gCAAiC,uBACjC,uBAAwB,kBACxB,oCAAqC,mCACrC,4BAA6B,iCAC7B,gCAAiC,iCACjC,wBAAyB,SACzB,uBAAwB,QACxB,4BAA6B,cAC7B,0BAA2B,WAC3B,wBAAyB,SACzB,0BAA2B,YAC3B,8BAA+B,sBAC/B,2BAA4B,aAC5B,2BAA4B,aAC5B,qCAAsC,iBACtC,qCAAsC,gBACtC,oCAAqC,QACrC,0CAA2C,oBAE3C,0BAA2B,YAC3B,iCAAkC,MAElC,mBAAoB,8BACpB,yBAA0B,KAE1B,yBAA0B,cAC1B,oBAAqB,YACrB,gCAAiC,gBACjC,+BAAgC,qBAChC,wBAAyB,aACzB,0BAA2B,eAC3B,kCAAmC,4BACnC,+BAAgC,yBAChC,+BAAgC,qBAChC,+BAAgC,MAChC,wBAAyB,aACzB,2BAA4B,gBAC5B,yBAA0B,cAC1B,2BAA4B,gBAC5B,wBAAyB,aACzB,8BAA+B,0BAC/B,4BAA6B,wBAC7B,2BAA4B,uBAC5B,8BAA+B,0BAE/B,+BAAgC,UAChC,mCAAoC,aACpC,iCAAkC,WAClC,qCAAsC,cACtC,oCAAqC,SAErC,8BAA+B,mBAE/B,8BAA+B,QAC/B,8BAA+B,QAC/B,+BAAgC,SAChC,gCAAiC,UACjC,+BAAgC,SAEhC,8BAA+B,QAC/B,4BAA6B,aAC7B,8BAA+B,QAC/B,2BAA4B,KAE5B,oCAAqC,SACrC,qCAAsC,UACtC,sCAAuC,WACvC,qCAAsC,UAEtC,0BAA2B,MAC3B,2BAA4B,OAC5B,+BAAgC,YAChC,4BAA6B,QAE7B,6BAA8B,SAE9B,kCAAmC,eACnC,mCAAoC,gBACpC,uCAAwC,qBACxC,oCAAqC,iBAErC,qCAAsC,UACtC,oCAAqC,gBACrC,qBAAsB,UAEtB,2CAA4C,iEAC5C,6CAA8C,mEAE9C,0CAA2C,cAC3C,4CAA6C,gBAC7C,8CAA+C,mBAC/C,gDAAiD,qBAEjD,8BAA+B,cAC/B,+BAAgC,WAEhC,6BAA8B,QAC9B,4BAA6B,WAE7B,sBAAuB,2BACvB,wBAAyB,2BACzB,uBAAwB,2BACxB,wBAAyB,uCACzB,sBAAuB,wCAEvB,oBAAqB,+BACrB,uBAAwB,oDACxB,wBAAyB,yBAEzB,+BAAgC,QAChC,0BAA2B,qBAC3B,6BAA8B,WAE9B,sBAAuB,MACvB,qBAAsB,KACtB,yBAA0B,UAC1B,wBAAyB,SACzB,+BAAgC,gBAChC,2BAA4B,YAC5B,iCAAkC,kBAClC,wCAAyC,SACzC,2CAA4C,iBAC5C,sCAAuC,eACvC,8CAA+C,2BAC/C,yCAA0C,kBAC1C,iDAAkD,8BAClD,4CAA6C,cAC7C,0CAA2C,WAC3C,6CAA8C,mBAC9C,0CAA2C,YAC3C,yCAA0C,WAC1C,4CAA6C,eAC7C,yCAA0C,aAC1C,uCAAwC,YACxC,wCAAyC,aAEzC,kCAAmC,oBACnC,uCAAwC,0BACxC,iCAAkC,WAClC,kCAAmC,MACnC,mCAAoC,OACpC,qCAAsC,0BACtC,kCAAmC,YACnC,mCAAoC,MACpC,mCAAoC,iBACpC,qCAAsC,aACtC,sCAAuC,cACvC,uBAAwB,UACxB,0BAA2B,gBC9R9Bv4M,EACb,CACI+nB,GAAM,CACFmwL,IAAO,QACPp+F,GAAM,KACNn6F,OAAU,WACV64L,WAAc,cACdhyD,MAAS,QACTv0G,MAAS,UACTkmK,KAAQ,QACRC,QAAW,cACXC,OAAU,iBACVlZ,OAAU,SACVmZ,KAAQ,SACRC,GAAM,UAEN,gCAAiC,yBAEjC,+BAAgC,cAEhC,sBAAuB,cACvB,gCAAiC,qBACjC,qBAAsB,8BACtB,+BAAgC,4BAChC,mBAAoB,uBACpB,6BAA8B,qBAC9B,0BAA2B,uCAC3B,oCAAqC,oCACrC,oBAAqB,oBACrB,8BAA+B,kBAC/B,mBAAoB,oBACpB,6BAA8B,kBAC9B,qBAAsB,uBACtB,+BAAgC,mBAChC,qBAAsB,qCACtB,+BAAgC,mCAChC,mBAAoB,oBACpB,6BAA8B,kBAC9B,kBAAmB,oBAEnB,6BAA8B,wCAE9B,yBAA0B,yCAC1B,wBAAyB,4BACzB,wBAAyB,kBACzB,yBAA0B,cAC1B,wBAAyB,SACzB,mBAAoB,mBACpB,uBAAwB,QACxB,iCAAkC,kBAClC,6BAA8B,WAC9B,2BAA4B,SAC5B,iCAAkC,eAClC,2BAA4B,UAC5B,8BAA+B,cAE/B,+BAAgC,yCAChC,8BAA+B,4BAC/B,8BAA+B,kBAC/B,+BAAgC,cAEhC,yCAA0C,kBAC1C,yCAA0C,mBAC1C,6CAA8C,0BAC9C,gCAAiC,kCAEjC,yCAA0C,6BAC1C,uCAAwC,2BACxC,4CAA6C,6BAC7C,0CAA2C,2BAC3C,gCAAiC,gBACjC,8BAA+B,cAE/B,4BAA6B,sBAC7B,0BAA2B,gCAC3B,uBAAwB,QACxB,oBAAqB,KACrB,oBAAqB,KACrB,oBAAqB,KACrB,wBAAyB,QACzB,0BAA2B,SAC3B,+BAAgC,mBAChC,sCAAuC,mBACvC,qCAAsC,iBACtC,sCAAuC,uCACvC,oCAAqC,wBACrC,oCAAqC,4BAErC,yBAA0B,QAC1B,yBAA0B,QAC1B,0BAA2B,YAC3B,2BAA4B,UAE5B,sBAAuB,WACvB,yBAA0B,qBAE1B,kCAAmC,8BACnC,yBAA0B,YAE1B,8CAA+C,6BAC/C,2CAA4C,0CAC5C,2DAA4D,gDAC5D,0CAA2C,iBAC3C,gCAAiC,uBACjC,oCAAqC,8CACrC,mCAAoC,wCACpC,mCAAoC,2CACpC,6BAA8B,2BAC9B,+BAAgC,aAChC,4BAA6B,kBAC7B,4BAA6B,YAC7B,mCAAoC,UACpC,qCAAsC,WACtC,8BAA+B,WAC/B,gCAAiC,YACjC,yCAA0C,uDAC1C,qCAAsC,mBACtC,iCAAkC,qDAClC,wBAAyB,YACzB,oCAAqC,YACrC,kCAAmC,UACnC,yCAA0C,eAC1C,sCAAuC,QACvC,yCAA0C,cAC1C,oCAAqC,YACrC,4CAA6C,kBAC7C,uCAAwC,YACxC,+CAAgD,kBAChD,0CAA2C,cAC3C,wCAAyC,WACzC,2CAA4C,cAC5C,wCAAyC,cACzC,uCAAwC,QACxC,gDAAiD,SACjD,8CAA+C,MAC/C,2BAA4B,aAC5B,6BAA8B,UAC9B,sBAAuB,YACvB,uBAAwB,QACxB,kCAAmC,mBACnC,mCAAoC,oBACpC,8BAA+B,uBAC/B,iCAAkC,oBAClC,uCAAwC,mCACxC,wCAAyC,oCACzC,2BAA4B,iBAC5B,mCAAoC,kBACpC,qCAAsC,oBACtC,2BAA4B,mBAC5B,wBAAyB,cACzB,mCAAoC,uBACpC,wBAAyB,cACzB,mCAAoC,uBACpC,wBAAyB,YACzB,mCAAoC,qBACpC,wBAAyB,YACzB,mCAAoC,qBACpC,0BAA2B,gBAC3B,6BAA8B,SAC9B,+BAAgC,YAChC,sCAAuC,iBACvC,uCAAwC,eACxC,sBAAuB,WACvB,2BAA4B,2BAC5B,uBAAwB,cACxB,yBAA0B,gBAC1B,0BAA2B,sBAC3B,gCAAiC,qCACjC,uBAAwB,sBACxB,+BAAgC,iBAChC,wCAAyC,uCACzC,oCAAqC,UACrC,4BAA6B,UAC7B,gCAAiC,WACjC,kCAAmC,uBACnC,gCAAiC,0BACjC,wBAAyB,UACzB,8BAA+B,gBAC/B,uBAAwB,QACxB,uBAAwB,QACxB,8BAA+B,sCAC/B,4BAA6B,kBAC7B,0BAA2B,WAC3B,8BAA+B,WAC/B,6BAA8B,UAC9B,8BAA+B,WAC/B,wBAAyB,WACzB,8BAA+B,gBAC/B,6BAA8B,eAC9B,0BAA2B,iBAC3B,8BAA+B,8BAC/B,2BAA4B,mBAC5B,2BAA4B,mBAC5B,yBAA0B,oBAC1B,0BAA2B,YAC3B,qCAAsC,wBACtC,qCAAsC,eACtC,oCAAqC,iBACrC,0CAA2C,mBAC3C,0BAA2B,oBAE3B,0BAA2B,0CAC3B,8BAA+B,0BAC/B,yBAA0B,oBAC1B,iCAAkC,YAElC,mBAAoB,sCACpB,yBAA0B,KAC1B,mBAAoB,sBACpB,2BAA4B,QAC5B,eAAgB,WAChB,mBAAoB,gBACpB,mBAAoB,YACpB,oBAAqB,kBACrB,uBAAwB,YACxB,yBAA0B,cAE1B,yBAA0B,aAC1B,oBAAqB,YACrB,gCAAiC,qBACjC,+BAAgC,6BAChC,wBAAyB,gBACzB,0BAA2B,gBAC3B,kCAAmC,iCACnC,+BAAgC,8BAChC,+BAAgC,uBAChC,+BAAgC,MAChC,wBAAyB,iBACzB,2BAA4B,oBAC5B,yBAA0B,iBAC1B,2BAA4B,mBAC5B,wBAAyB,mBACzB,8BAA+B,qCAC/B,4BAA6B,kCAC7B,2BAA4B,kCAC5B,8BAA+B,oCAE/B,+BAAgC,SAChC,mCAAoC,gBACpC,iCAAkC,cAClC,qCAAsC,iBACtC,oCAAqC,UAErC,8BAA+B,aAE/B,8BAA+B,QAC/B,iCAAkC,WAClC,+BAAgC,SAChC,8BAA+B,SAC/B,+BAAgC,UAChC,gCAAiC,UACjC,+BAAgC,QAEhC,oCAAqC,OACrC,iCAAkC,YAClC,4BAA6B,yBAC7B,8BAA+B,aAC/B,2BAA4B,KAE5B,uCAAwC,YACxC,qCAAsC,UACtC,oCAAqC,YACrC,qCAAsC,YACtC,sCAAuC,UACvC,qCAAsC,YAEtC,0BAA2B,SAC3B,2BAA4B,SAC5B,+BAAgC,iBAChC,4BAA6B,MAE7B,6BAA8B,SAE9B,kCAAmC,4BACnC,mCAAoC,4BACpC,uCAAwC,oCACxC,oCAAqC,yBAErC,qCAAsC,cACtC,oCAAqC,gBACrC,qBAAsB,iBAEtB,yCAA0C,6BAC1C,2CAA4C,+BAE5C,2CAA4C,uDAC5C,6CAA8C,sDAE9C,0CAA2C,kBAC3C,4CAA6C,iBAC7C,8CAA+C,iBAC/C,gDAAiD,gBAEjD,8BAA+B,mBAC/B,+BAAgC,aAEhC,wBAAyB,QACzB,0BAA2B,gBAC3B,yBAA0B,eAC1B,8BAA+B,qBAC/B,6BAA8B,MAC9B,4BAA6B,aAC7B,sCAAuC,iBACvC,qCAAsC,gBACtC,uCAAwC,kBACxC,wCAAyC,mBACzC,kCAAmC,aACnC,iCAAkC,YAClC,mCAAoC,cACpC,oCAAqC,eACrC,+BAAgC,kBAChC,8BAA+B,iBAC/B,gCAAiC,mBACjC,iCAAkC,oBAClC,0BAA2B,2BAC3B,+BAAgC,6CAEhC,sBAAuB,OACvB,wBAAyB,QACzB,uBAAwB,OACxB,wBAAyB,gBACzB,sBAAuB,sBAEvB,oBAAqB,mBACrB,uBAAwB,4BACxB,wBAAyB,aACzB,8BAA+B,kDAE/B,+BAAgC,WAChC,0BAA2B,oBAC3B,6BAA8B,cAE9B,sBAAuB,IACvB,qBAAsB,IACtB,yBAA0B,OAC1B,wBAAyB,OACzB,+BAAgC,yBAChC,2BAA4B,kBAC5B,iCAAkC,yBAClC,wCAAyC,QACzC,2CAA4C,YAC5C,sCAAuC,YACvC,8CAA+C,oBAC/C,yCAA0C,oBAC1C,iDAAkD,oBAClD,4CAA6C,eAC7C,0CAA2C,WAC3C,6CAA8C,cAC9C,0CAA2C,cAC3C,yCAA0C,WAC1C,4CAA6C,cAC7C,yCAA0C,QAC1C,uCAAwC,YACxC,wCAAyC,eAEzC,kCAAmC,gCACnC,uCAAwC,4BACxC,iCAAkC,mBAClC,kCAAmC,MACnC,mCAAoC,QACpC,qCAAsC,gCACtC,kCAAmC,mBACnC,mCAAoC,MACpC,mCAAoC,oBACpC,qCAAsC,eACtC,sCAAuC,cACvC,0CAA2C,OAC3C,6CAA8C,UAC9C,wCAAyC,eACzC,wCAAyC,eACzC,uCAAwC,SACxC,oCAAqC,MACrC,qCAAsC,eACtC,qCAAsC,mBACtC,0CAA2C,oBAC3C,yCAA0C,mBAC1C,uBAAwB,iBACxB,0BAA2B,eAC3B,0BAA2B,mBAC3B,oBAAqB,OACrB,qBAAsB,aACtB,oBAAqB,OACrB,sBAAuB,SACvB,oBAAqB,WACrB,qBAAsB,YACtB,oBAAqB,OACrB,sBAAuB,gBACvB,yBAA0B,YAC1B,2BAA4B,cAC5B,yBAA0B,YAC1B,0BAA2B,aAC3B,sBAAuB,SACvB,8BAA+B,kBAC/B,8BAA+B,kBAC/B,2BAA4B,eAC5B,0BAA2B,cAC3B,yBAA0B,aAC1B,2BAA4B,eAC5B,0BAA2B,cAC3B,4BAA6B,gBAC7B,yBAA0B,aAC1B,wBAAyB,eACzB,oBAAqB,OACrB,oBAAqB,OACrB,qBAAsB,mBACtB,2BAA4B,eAC5B,+BAAgC,oBAChC,8BAA+B,mBAC/B,8BAA+B,mBAC/B,gCAAiC,qBACjC,iCAAkC,sBAClC,4BAA6B,gBAC7B,yBAA0B,aAC1B,2BAA4B,eAC5B,8BAA+B,kBAC/B,+BAAgC,mBAChC,sBAAuB,SACvB,sBAAuB,SACvB,sBAAuB,SACvB,qBAAsB,QACtB,qBAAsB,QACtB,sBAAuB,SACvB,2BAA4B,QAC5B,2BAA4B,eAC5B,+BAAgC,aAChC,0BAA2B,aAC3B,yBAA0B,YAC1B,0BAA2B,aAC3B,wBAAyB,WACzB,+BAAgC,mBAChC,iCAAkC,qBAClC,sBAAuB,SACvB,oBAAqB,OACrB,uBAAwB,UACxB,sBAAuB,SACvB,qBAAsB,QACtB,sBAAuB,SACvB,oBAAqB,OACrB,qBAAsB,QACtB,sBAAuB,SACvB,uBAAwB,UACxB,+BAAgC,OAChC,iCAAkC,SAClC,iCAAkC,SAClC,iCAAkC,SAClC,gCAAiC,QACjC,iCAAkC,SAClC,iCAAkC,SAClC,gCAAiC,QACjC,gCAAiC,QACjC,iCAAkC,SAElC,iCAAkC,gBAClC,kCAAmC,WACnC,8BAA+B,0DAC/B,2CAA4C,yBAC5C,sCAAuC,yBACvC,wCAAyC,6BACzC,6CAA8C,6BAC9C,wCAAyC,iCACzC,yCAA0C,8CAC1C,oCAAqC,yCACrC,6BAA8B,wBAC9B,yCAA0C,iCAE1C,8BAA+B,gBAC/B,8BAA+B,SAC/B,4BAA6B,UAC7B,4BAA6B,UAC7B,8BAA+B,SAC/B,gCAAiC,WACjC,8BAA+B,eAC/B,+BAAgC,UAChC,kCAAmC,kBACnC,+BAAgC,eAChC,sCAAuC,kBACvC,mCAAoC,yBAEpC,gDAAiD,UACjD,qDAAsD,OACtD,gDAAiD,UACjD,qDAAsD,OACtD,sCAAuC,SACvC,2CAA4C,OAC5C,2CAA4C,gBAC5C,gDAAiD,SACjD,sCAAuC,SACvC,2CAA4C,SAC5C,uDAAwD,uCACxD,0DAA2D,6CAC3D,mCAAoC,SAEpC,yDAA0D,kCAC1D,sDAAuD,iCACvD,oDAAqD,4BACrD,gDAAiD,4BAEjD,yDAA0D,8BAC1D,sDAAuD,6BACvD,oDAAqD,uBACrD,gDAAiD,uBAEjD,yDAA0D,4BAC1D,4DAA6D,8BAC7D,sDAAuD,2BACvD,yDAA0D,6BAC1D,oDAAqD,uBACrD,uDAAwD,6BACxD,gDAAiD,8BAEjD,uDAAwD,wBACxD,0DAA2D,0BAC3D,oDAAqD,uBACrD,uDAAwD,yBACxD,kDAAmD,qBACnD,qDAAsD,2BACtD,8CAA+C,4BAE/C,uDAAwD,yBACxD,0DAA2D,2BAC3D,oDAAqD,wBACrD,uDAAwD,0BACxD,kDAAmD,sBACnD,qDAAsD,4BACtD,8CAA+C,6BAE/C,yDAA0D,2BAC1D,4DAA6D,6BAC7D,sDAAuD,0BACvD,yDAA0D,4BAC1D,oDAAqD,wBACrD,uDAAwD,8BACxD,6CAA8C,WAE9C,sDAAuD,0BACvD,yDAA0D,gCAE1D,6CAA8C,OAC9C,qDAAsD,gBACtD,iDAAkD,YAElD,8CAA+C,OAC/C,sDAAuD,gBAEvD,+CAAgD,WAChD,uDAAwD,gBACxD,2DAA4D,WAE5D,4BAA6B,UAC7B,8BAA+B,oBAC/B,6BAA8B,cAC9B,+BAAgC,eAChC,2BAA4B,gBAE5B,+BAAgC,iBAChC,+BAAgC,iBAChC,+BAAgC,iBAChC,wBAAyB,WACzB,wBAAyB,UACzB,4BAA6B,mBAC7B,4BAA6B,sBAC7B,wBAAyB,UACzB,0BAA2B,UAC3B,6BAA8B,YAC9B,6BAA8B,kBAC9B,6BAA8B,oBAC9B,6BAA8B,oBAC9B,6BAA8B,qBAC9B,kCAAmC,YACnC,mCAAoC,YACpC,mCAAoC,aACpC,6BAA8B,mBAC9B,6BAA8B,yBAC9B,+BAAgC,oBAChC,8BAA+B,uBAC/B,qCAAsC,+BACtC,yCAA0C,QAC1C,2CAA4C,YAC5C,sCAAuC,iCACvC,oCAAqC,gCACrC,qCAAsC,UACtC,sCAAuC,SACvC,8BAA+B,oBAC/B,yBAA0B,WAC1B,4BAA6B,yBAC7B,mCAAoC,8BACpC,4CAA6C,aAC7C,2CAA4C,WAC5C,6BAA8B,qBAC9B,4BAA6B,wBAC7B,8BAA+B,6BAC/B,4BAA6B,6BAC7B,6BAA8B,gBAC9B,4BAA6B,qBAC7B,gCAAiC,uBACjC,8BAA+B,mBAC/B,qCAAsC,mCACtC,mCAAoC,+BACpC,8BAA+B,eAC/B,uBAAwB,SACxB,wBAAyB,SACzB,yBAA0B,QAC1B,6BAA8B,mBAC9B,0BAA2B,WAC3B,gCAAiC,kBACjC,8BAA+B,kBAC/B,wBAAyB,WACzB,0BAA2B,cAC3B,oCAAqC,qBACrC,kCAAmC,oBACnC,oCAAqC,kBACrC,qCAAsC,yBACtC,qCAAsC,yBACtC,qCAAsC,oBACtC,qCAAsC,oBAEtC,mBAAoB,QACpB,mBAAoB,KACpB,mBAAoB,KAEpB,2BAA4B,UAC5B,+BAAgC,WAChC,wCAAyC,kBACzC,sCAAuC,iBACvC,6CAA8C,qBAC9C,0CAA2C,+BAE3C,qBAAsB,WACtB,yBAA0B,cAC1B,uBAAwB,mBACxB,0BAA2B,yBAC3B,qBAAsB,SACtB,oBAAqB,SACrB,qBAAsB,YACtB,yBAA0B,WAC1B,4BAA6B,QAC7B,sBAAuB,WACvB,mBAAoB,QACpB,qBAAsB,SACtB,wBAAyB,WACzB,mBAAoB,YAEpB,sBAAuB,QACvB,2BAA4B,gBAC5B,yBAA0B,SAC1B,uBAAwB,OACxB,0BAA2B,eAC3B,yBAA0B,QAC1B,uBAAwB,aACxB,0BAA2B,eAC3B,yBAA0B,cAC1B,yBAA0B,cAC1B,sBAAuB,WACvB,2BAA4B,mBAC5B,yBAA0B,gBAC1B,4BAA6B,iBAC7B,2BAA4B,eAC5B,6BAA8B,sBAC9B,gCAAiC,2BACjC,yBAA0B,UAC1B,0BAA2B,cAC3B,4BAA6B,aAC7B,mCAAoC,sBACpC,0BAA2B,YAC3B,mCAAoC,oBACpC,6BAA8B,iBAC9B,6BAA8B,iBAC9B,sBAAuB,QACvB,0BAA2B,gBAC3B,0BAA2B,aAC3B,iCAAkC,yBAClC,2BAA4B,iBAC5B,iCAAkC,sBAClC,uBAAwB,UACxB,4BAA6B,oBAC7B,yBAA0B,WAC1B,uBAAwB,WACxB,2BAA4B,WAC5B,oBAAqB,IACrB,iCAAkC,gBAClC,sCAAuC,aACvC,mCAAoC,sBACpC,qCAAsC,wBACtC,iCAAkC,oBAClC,qCAAsC,oCACtC,oCAAqC,0CACrC,sCAAuC,kCAEvC,sBAAuB,QACvB,2BAA4B,QAC5B,yBAA0B,MAC1B,8BAA+B,WAC/B,+BAAgC,YAChC,qCAAsC,mBACtC,iCAAkC,eAClC,qCAAsC,qBACtC,gCAAiC,eACjC,0BAA2B,MAC3B,6BAA8B,WAC9B,gCAAiC,cACjC,gCAAiC,cACjC,sCAAuC,oBACvC,uCAAwC,6GACxC,6CAA8C,gEAC9C,4CAA6C,qJAC7C,mDAAoD,4KACpD,2CAA4C,0HAC5C,uCAAwC,uBACxC,wCAAyC,wBACzC,iDAAkD,wCAClD,+DAAgE,2KAChE,uDAAwD,yHACxD,0CAA2C,kCAC3C,mDAAoD,0CACpD,eAAgB,OAChB,eAAgB,OAChB,oBAAqB,aACrB,sBAAuB,eACvB,qBAAsB,eACtB,6BAA8B,uBAC9B,iBAAkB,UAClB,kBAAmB,WACnB,qBAAsB,cACtB,kBAAmB,OACnB,+BAAgC,mBAChC,gCAAiC,oBACjC,2BAA4B,uBAC5B,wBAAyB,mBACzB,2BAA4B,uBAC5B,oCAAqC,2CACrC,kCAAmC,qDAEnC,qBAAsB,eAEtB,yCAA0C,YAC1C,+BAAgC,wDAChC,sCAAuC,OACvC,4BAA6B,aAE7B,mCAAoC,6XCxsBxC,YACWxiN,GACAC,GACCC,EACAC,EACAC,GACAC,GACAC,GACAC,GACAC,GACAC,EACAC,IAVDiI,uBACAA,8BACCA,iBACAA,kBACAA,yBACAA,uBACAA,6BACAA,kBACAA,WACAA,2BACAA,yBAGJA,uBAAyD,GAI1D,kCAAP,SAAqB3I,IACjB,OAAQ2I,KAAK+5M,iBAAiBnQ,UAAUC,aAAexyM,IAIpDD,0BAAP,SAAoBC,IAChB,OAAO2I,KAAKqvI,qBAAqBC,gBAAgBj4I,KAI9CD,8BAAP,SAAwBC,IACpB,OAAO2I,KAAKqvI,qBAAqBkjD,yBAAyBl7L,KAI9DyU,sBAAW1U,2BAAW,KAAtB,WACI,OAAO4I,KAAKg6M,kBAAkBl6M,+CAG3B1I,oCAAP,WACI,OAAO4I,KAAKi6M,2BAGT7iN,gBAAP,SAAUC,GAAkDC,GAAqCC,EAAsDC,GAAvJ,iBAA4D,gBACxDH,GAAgBya,UAAU,SAACpa,IACvB,GAAIA,cAAoBqsM,KACpBxsM,EAAMG,QAEL,CACD,IAAMC,GAAeD,GACjBC,GAAam9B,WACTx9B,IAAqBG,GAAKynC,GAAGnH,YAAYtgC,GAAKq9J,UAAUviJ,GAAG,eAClD,MAAThb,GAAoBA,EAAMG,KAGlB,MAAZF,EACIA,EAAKE,IAG4B,KAAjCC,GAAiB4+B,aACb9+B,GAAKynC,GAAG1I,kBAAkB7+B,GAAa2b,iBAEvC7b,GAAKynC,GAAG7rB,YAAY1b,GAAa2b,qBASzDlc,0CAAoBC,IAApB,YAGQE,EAAQmoD,SAASw6J,YAAY,SACjC3iN,EAAM4iN,UAAU,wBAAwB,GAAM,GAC9Cz6J,SAAS06J,cAAc7iN,MAEvBo4L,KAEQ,CAAC3vL,KAAKq6M,eAAeC,iBACrBt6M,KAAKq6M,eAAeE,iBAAiBv6M,KAAKw6M,wBAC5C1oM,UAAU,SAACta,OAEAG,GAFCF,GAAmBD,KAAEE,GAAqBF,KAG3CC,GAAoBq9B,UACpBn9B,GAAcF,GAAoBwa,QAGlC3a,GAAK4nC,GAAG1I,kBAAkB,8DAA8D/+B,GAAoB6b,kBAI5G3b,GAAc,IAAIuI,MACNu6M,iBAAmB,IAC/B9iN,GAAY+iN,mBAAqB,IACjC/iN,GAAYg6D,eAAiB,cAEjCr6D,GAAKqjN,yBAAyBhjN,IAG1BD,GAAsBo9B,UACtBx9B,GAAK+3I,qBAAqBurE,WAAWljN,GAAsB+d,UAG3Dne,GAAK4nC,GAAG1I,kBAAkB,gEAAgE9+B,GAAsB4b,iBAIpHhc,GAAKujN,eAGLvjN,GAAKwjN,uBAGLxjN,GAAKyjN,wCAGLzjN,GAAK2iN,0BAA4BxiN,GAAoBq9B,WAAap9B,GAAsBo9B,UACxFz9B,QAKVD,kCAAP,WACI4I,KAAKg7M,WAAWF,qBAAqB96M,OAIlC5I,0BAAP,WAGI,IAC+B,MAAvB0I,eAAkCA,aAAsBE,KAAKs+D,oBAAoBoB,QAAQ,mBACxFroE,KACkB,MAAvByI,eAAkCA,aAAsBE,KAAK+5M,iBAAiBnQ,UAAUqR,iBAGxFn7M,cAAuBiC,gBAAsBV,MAAad,GAC1DT,cAAuBiC,eAAuB,QAAaT,MAC/DD,MAAOvB,+BAGPyB,KACI,CACI25M,WAAYp7M,cAAuBiC,YACnCo5M,qBAAqB,IAI7Bn7M,KAAK80J,UAAUsmD,oBAInBhkN,+CAAyBC,IACrB,IAAIC,GAAiBN,MAAQK,IAC7BC,GAAkB2iL,cAAmB3iL,GAAkB2iL,cAAa,IAAI3iL,GAAkB2iL,cAAa,IACvG3iL,GAAkByhE,cAAmBzhE,GAAkByhE,cAAa,IAAIzhE,GAAkByhE,cAAa,IACvGzhE,GAAkBiyG,YAAiBjyG,GAAkBiyG,YAAW,IAAIjyG,GAAkBiyG,YAAW,IACjGjyG,GAAkB24K,eAAoB34K,GAAkB24K,eAAc,IAAI34K,GAAkB24K,eAAc,IAC1G34K,GAAkBi0H,WAAgBj0H,GAAkBi0H,WAAU,IAAIj0H,GAAkBi0H,WAAU,IAC9Fj0H,GAAkB+jB,UAAe/jB,GAAkB+jB,UAAS,IAAI/jB,GAAkB+jB,UAAS,IAE3Frb,KAAKg6M,kBAAkBj4M,aAAwBzK,GAC/C0I,KAAKg6M,kBAAkBj4M,cAAyB1K,GAChD2I,KAAKg6M,kBAAkBj4M,cAAyB1K,IAGpDD,kCACI,IAAIC,GAAU,IAAI6I,KAClB,UAAQ40B,WAAY,EACpBz9B,GAAQoe,SAAWrU,MAAc,SAAC9J,IAC9B,OAAO,IAAI4I,KAAkB5I,GAASA,SAGnCw/L,MAAGz/L,KAGdD,oDAGI,OAAO,QACH4I,KAAK+5M,iBAAiBlc,UAAUkR,wBAAwB/uM,KAAKujC,eAAe2oK,UAAU,IACjF73L,MACG,OAAS,aACL,QAAK/c,KAAuBA,GAAmB05L,UAC3C15L,GAAqB,IAAI+K,OACN2uL,MAAQ,iBAGxB35L,GAAKgkN,UAAUvhM,SAAS,CAACxiB,GAAmB05L,OAAQ15L,GAAmBm2C,QAAQ9Y,KAAK,SAACp9B,GACxF,UAAKw9J,iBAAiBhyG,gBAAgBxrD,GAC/BywC,QAAQmE,SAAQ,UAOvC/0C,mDAAR,WACI4I,KAAK+5M,iBAAiBlc,UAAUwR,gCAAgCv9L,UAAU,SAACza,IACvEyI,gCAAyCzI,MAIzCD,gCAAR,WAEI,OADoB4I,KAAK+5M,iBAAiBlc,UAAUz6J,WAAWqY,MAAM,KAClD,8CA3NlBj6C,WACAG,WALAT,YAGA0V,WAKAhV,WADAC,WAGAC,WAJA6U,YAKD3U,WAGC0U,WAFAzU,OAKI7K,yWAAgBH,KAD5BJ,iBACYO,OAmNN,cAEH,OAAO,WACH,OAAO,IAAI4wC,QAAQ,SAAC5wC,GAASC,IACXq4L,QAAgBx4L,IACtBokN,oBAAoBlkN,wHC7OpC,0CAAcy7L,IACV,MAAO,IAHFiE,4UAA6BpH,KADzC74L,iBACYigM,mHCOT,YAAoB12L,4BAChBJ,KAAKu7M,oBAAsBv7M,KAAKw7M,kBAAkBvpG,YAClDjyG,KAAKy7M,oBAGT,qCAAQr7M,EAAaF,GACjB,IAAMJ,EAAcE,KAAK07M,eAAet7M,GACxCu/D,aAAag8I,QAAQ77M,EAAaI,IAGtC2yL,8BAAQzyL,GACJ,IAAMF,EAAcF,KAAK07M,eAAet7M,GACxC,OAAOu/D,aAAaC,QAAQ1/D,IAGhC2yL,iCAAWzyL,GACP,IAAMF,EAAcF,KAAK07M,eAAet7M,GACxCu/D,aAAai8I,WAAW17M,IAG5B2yL,yCACI/mL,OAAOijC,KAAK4wB,cAAchnD,QAAQ,SAACzY,GAC3BA,EAAIo5C,WAAWl5C,EAAKm7M,sBACpB57I,aAAai8I,WAAW17M,MAK5B2yL,4BAAR,SAAuBzyL,GACnB,MAAO,GAAGJ,KAAKu7M,oBAAsBn7M,GAGjCyyL,+BAAR,sBACO7yL,KAAK0/D,QAAQ,wBAIhB5zD,OAAOijC,KAAK4wB,cAAchnD,QAAQ,SAACzY,GAC/B,IAAKA,EAAIo5C,WAAWl5C,EAAKm7M,qBAAsB,CAC3C,IAAMz7M,EAASM,EAAKs7M,eAAex7M,GAC7BkB,EAAQu+D,aAAaC,QAAQ1/D,GAErB,OAAVkB,GACAu+D,aAAag8I,QAAQ77M,EAAQsB,MAKzCpB,KAAKg/D,QAAQ,qBAAsB,oDAzDlC0wH,OAKImD,0UAAmBlD,KAH/B94L,cAAW,CACRg1C,WAAY,UAEHgnJ,kMCOT,WACYtyL,EACAe,EACAsV,GAFA5W,sBACAA,iBACAA,oBAGZ,wCAAYO,EAA+Be,GAA3C,WACI,GAAItB,KAAKujC,eAAes4K,WAAY,SAAOlsB,OAAG,GAExC,MAAwC3vL,KAAK87M,UAAUx6M,EAAMy6M,IAAK,aAAa,GAA9Ep6M,EAASH,KAAEmV,EAAwBnV,KAEpCK,EAAmB7B,KAAKujC,eAAey4K,eAEvCj6M,EADkB/B,KAAKq7M,UAAUxkK,eAAe72C,KAAKq7M,UAAUvkK,wBAAwBq7D,WACxDx7F,GAA4B9U,EACjE,IAAKi1L,YAAc/0L,GAAY,CAC3B,IAAMD,EAAc,IAAI4tL,KACxB,SAAYusB,UAAYl6M,EACxBD,EAAYo6M,cAAgBp8M,aACrBE,KAAK07E,aAAaygI,QAAQr6M,IAAeD,GAAmBA,EAC/D,WAAM,SAAKw5M,UAAUe,cAAcz6M,IAAY,WAAM,SAAK06M,cAAc16M,KAGhF,YAAK06M,cAAc16M,MACZguL,OAAG,IAGNzuL,0BAAR,SAAsBX,GAClBP,KAAKq7M,UAAUvhM,SAAS,CAAC,iBAAkB,CAAEsuE,SAAUhnF,aAAqBm5B,UAAWh6B,KAGnFW,sBAAR,SAAkBX,EAAae,EAAasV,sBACxC,IAAMpV,EAAajB,EAAI+7M,MAAM,IAAIjqI,OAAO,QAAU/wE,EAAM,aAClDK,EAAQH,EAAaA,EAAW,GAAK,KAE3C,GAAIoV,EAAU,CACV,IAAMD,EAAa,QAAQrV,EAAG,SAG9Bf,GADAA,GADAA,EAAMA,EAAIk3B,QAAQ,IAAI46C,OAAO,OAAO17D,EAAU,QAAQA,EAAU,MAAO,KAC7D8gB,QAAQ,IAAI46C,OAAO,MAAM17D,EAAU,KAAM,MACzC8gB,QAAQ,IAAI46C,OAAO,IAAI17D,EAAU,KAAM,KAGrD,MAAO,CAACpW,EAAKoB,6CA/CZzB,WADAE,YADAyyL,QAOI3xL,qUAAUK,KADtB1K,iBACYqK,s3DCQT,WAAoBY,EACRE,EACAC,EACAI,GACAqU,EACA1f,GACAC,GACAC,IAPQ8I,iBACRA,qBACAA,iBACAA,uBACAA,UACAA,4BACAA,yBACAA,iCAGZ,oCAAQ8B,EAAqBE,EAA2BC,EAA6BI,GAAwBqU,EAAyF1f,IAAtM,YAA6G,iCAAyF,kBAClM8K,EAAOy6M,kBAAoBv8M,KAAKw8M,yBAAyBC,uBAClDz8M,KAAK08M,cAAcC,MAAM76M,GAAQuS,MACpC,OAAS,SAACnd,IACN,IAAKA,GAAS49B,UACV,UAAK1hB,GAAGC,YAAYnc,GAASoc,iBACzBoD,GAAcA,EAAaxf,OACxB27L,QAAG,GAEd,OAAQ37L,GAAS+a,OAAO2qM,kBACfltB,aACD,OAAOz4L,GAAK4lN,eAAe3lN,GAAU8K,EAAkBC,EAAoBH,EAAOsmF,SAAU/lF,SAC3FqtL,qBACD,UAAKzxJ,UAAUnkB,SAAS,CAAC,iCAAkC,CAAEuvB,SAAUvnC,EAAOunC,cACvEwpJ,QAAG,QACTnD,aACD,UAAKt8K,GAAGC,YAAYnc,GAAS+a,OAAO6qM,oBAChCpmM,GAAcA,EAAaxf,OACxB27L,QAAG,QACTnD,kBACD,WAAe14L,GAAY04L,eACpBmD,QAAG,QACTnD,gBACD,WAAe14L,GAAY04L,aACpBmD,QAAG,QACTnD,WACD,OAAI1tL,GAAkB/K,GAAK8lN,yBAC3B9lN,GAAKgnC,UAAUnkB,SAAS,CAAC,wBAClB+4K,QAAG,QACTnD,mBACD,UAAKt8K,GAAGC,eAAYnS,MAAG,yBACnBwV,GAAcA,EAAaxf,OAExB27L,QAAG,WAEV,OAAI7wL,GAAkB/K,GAAK8lN,yBAC3B9lN,GAAKmc,GAAGC,YAAYnc,GAAS+a,OAAO6qM,oBAChCpmM,GAAcA,EAAaxf,OACxB27L,QAAG,QAOtB9wL,2BAAR,SAAuBD,EAAmDE,EAA2BC,EAA6BI,GAAmBqU,GAArJ,YAGI,OAAK1W,KAAKk9B,UAAU8/K,0BAMhB/6M,IAAuBD,GACvBhC,KAAKi9M,eAAeC,uBAAuBp7M,EAASmQ,OAAOkgG,UAAWrwG,EAASmQ,OAAOsrB,kBAGrFt7B,IAAuBD,GACxBhC,KAAKi9M,eAAeE,0BAIjBn9M,KAAKi9M,eAAeG,WAAWt7M,EAASmQ,OAAQ,WACnDjb,GAAK8pK,oBAAoBza,eACzBrvJ,GAAK8pK,oBAAoBu8C,mBACzB3mM,GAAcA,KACf,WACC1f,GAAKinC,UAAUnkB,SAAS,CAAC,sBAnBzB9Z,KAAKoT,GAAGojB,qBAAkBt1B,MAAG,2BACtB2xL,QAAG,KAuBV9wL,mCAAR,WACI/B,KAAKi9M,eAAeE,2BAGxBp7M,8BAASD,GAAT,WACI9B,KAAK08M,cAAcY,SACdjpM,MACG,OAAI,YAEKpS,EAAS6yB,WAAW9yB,EAAKoR,GAAGojB,kBAAkBv0B,EAASqR,oBAEnExB,UAAU,WACP9P,EAAKi7M,eAAeG,gBAAW,EAAW,KAAM,WAC5Cp7M,EAAK8+J,oBAAoBza,eACzBvkJ,GAAgBA,SAKhCC,sCAAiBD,GAAjB,WACI,OAAO9B,KAAK08M,cAAc/gI,iBAAiB75E,GAAcuS,MAAK,OAAS,SAAOpS,GAAiD,mGAC3H,OAAKA,EAAS6yB,UAKa,MAAM10B,KAC7BJ,KAAK+5M,iBAAiBlc,UAAUkR,wBAAwB9sM,EAASgQ,OAAOnE,SAAS9N,KAAKojC,gBALtFnhC,EAASqR,iBAAmBtT,KAAKoT,GAAGC,YAAYpR,EAASqR,iBACzD,IAAO,WAKX,OAFMjR,GAAqBpL,YAECoL,GAAmB2uL,OAEzCt6K,EAAMlV,OAAQa,GAAmBorC,QAAU,IAAE,CAAE0kE,UAAWlwG,EAASgQ,OAAOkgG,YAC1En7G,GAAMgJ,KAAKi+B,UAAUs/K,OAAOl7M,GAAmB2uL,MAAOt6K,GAC5D1W,KAAKi+B,UAAUu/K,iBAAiBxmN,IAChC,IAAO,IAL+C,IAAO,YASrE8U,sBAAY/J,yBAAU,KAAtB,WAEI,OADoB/B,KAAK+5M,iBAAiBlc,UAAUz6J,WAAWqY,MAAM,KAClD,6EArIlBp6C,YAFAD,WACAG,WAIAD,WATAquL,WAQApvL,WAPAu2L,WAUAlgL,OAII7U,mVAAYJ,KADxB9K,iBACYkL,2fCIAb,EACT,CACI,KACA,KACA,KACA,KACA,mBAKJ,WACYyV,EACA9U,EACAD,EACAG,EACAD,EACAE,GALAhC,cACAA,sBACAA,iBACAA,wBACAA,sBACAA,qBAEL,wCAAP,SAA4B2W,GAExB,OADoBsrC,OAAO5gC,SAASo8L,SAAS9hM,QAAQ,YAChC,GAAOhF,GAAYA,EAASgF,QAAQ,YAAa,GAInEha,+BAAP,WACI,OAAO3B,KAAK09M,eAAeC,SAASlkM,MAGjC9X,yCAAP,WAMI,UAJIE,EAAQ7B,KAAK09M,eACb97M,EAAM,IAGY,QAAf+U,EAAK,MAAL9U,OAAK,EAALA,EAAO87M,gBAAQ,eAAE5B,IAAInsM,QAAS,GACjChO,EAAM,IAAIC,EAAM87M,SAAS5B,IAAI,GAAG9rB,KAAOruL,EACvCC,EAAQA,EAAM+7M,OAGlB,OAAOh8M,GAIHD,mCAAR,WAII,QAHMgV,EAAS3W,KAAK09M,eAAeC,SAASE,YACtCh8M,EAAY,GAESD,aAAOi4B,QAAQljB,GAAf/U,eAAwB,CAAxC,WAACI,EAAGF,KAAEG,EAAKH,KAClBD,EAAUG,GAAOhC,KAAK89M,cAAc77M,GAGxC,OAAOJ,GAIJF,2BAAP,SAAsBgV,GAClB,IAAM9U,EAAiB7B,KAAK+9M,yBAG5B,OAAO/9M,KAAKg+M,8BAA8Bn8M,EAAgB8U,IAGvDhV,0CAAP,SAAqCgV,EAAa9U,SACxCE,EAAU/B,KAAKi+M,qBAAqBp8M,GACpCC,EAAY,GAClB,QAAWE,KAAO2U,EAAQ,CACtB,IAAI1U,EAAWD,EACXA,EAAIs3C,WAAWv3C,KAAUE,EAAWD,EAAIo7B,UAAUr7B,EAAQ6N,SAC9D,IAAMvN,GAAwB,UAAhBsU,EAAO3U,KAA2C,SAAhB2U,EAAO3U,IAAyB2U,EAAO3U,IACvF8J,OAAO0hD,OAAO1rD,IAASF,MAAKK,GAAWI,GAAKT,IAGhD,OAAOE,GAGJH,6BAAP,WACI3B,KAAK09M,eAAeC,SAASE,YAAc,IAIvCl8M,iCAAR,SAA6BgV,GACzB,OAAOA,EAAY,KAAO,MAKvBhV,2BAAP,WACI,IAAMgV,EAAS3W,KAAK09M,eAAeC,SAASO,OAC5C,OAAOpyM,OAAOijC,KAAKp4B,GAAQ/G,OAAS+G,EAAS3W,KAAK62C,eAAe72C,KAAK82C,yBAMnEn1C,4BAAP,WACI,IAAMgV,EAAoB,GAAGsrC,OAAO5gC,SAASo8L,SAAWx7J,OAAO5gC,SAAS42K,OACxE,OAAOj4L,KAAKm+M,sBAAsBxnM,IAK/BhV,qBAAP,SAAgBgV,EAAe9U,EAAsBD,GAEjD5B,KAAKujC,eAAe66K,+BAEpB,IAAMr8M,EAAU/B,KAAKq+M,WAAW1nM,EAAQ9U,EAAgBD,GACxD,OAAO5B,KAAKs+M,OAAOC,cAAcx8M,IAI9BJ,0BAAP,SAAqBgV,GACjB,YAAK4sB,eAAe66K,+BAEbp+M,KAAKs+M,OAAOC,cAAc5nM,IAG7BhV,uBAAR,SAAmBgV,EAAe9U,EAAsBD,SAEhDI,EAFRF,OAKI,GAFsB,iBAAX6U,EAAqB3U,EAAS6T,KAAKc,GAAc3U,EAAW2U,GAEnE3U,GAAaA,EAAS6N,KAAK,aAAK,MAAM,KAAN7X,KAGpC,KACIqK,GAiCArL,GACAC,GAnCAgL,EAA0B,GAE9B,GAAgB,MAAZD,EAAkB,CAClBA,EAAS2W,QAAQ,cACb3gB,GAAWA,IAAYA,GAAS+iC,aAE5B/iC,GAASyjD,MAAM,KAAK9iC,QAAQ,aACxB,GAAa,MAAT1gB,IAA0B,IAATA,GAAa,CAC9BA,GAAQA,GAAMw/B,QAAQ,IAAK,IAAIA,QAAQ,IAAK,IAG5C,IAAMv/B,GAAUgJ,EAAoB8wB,KAAK,YAAQ,UAAMsnB,WAAWlhD,KAC9DF,KAASD,GAAQA,GAAMmlC,UAAUllC,GAAQ0X,SAG7C,IAAMzX,GAAe2J,EAAKi4M,iBAAiBlc,UAAUz6J,WAAWqY,MAAM,KAAKzpB,KAAK,YAAK,UAAMsnB,WAAWlhD,KAClGD,KAAcF,GAAQA,GAAMmlC,UAAUjlC,GAAayX,OAAS,IAEhE3N,EAAc4T,KAAK5d,SAOnC,IAAMye,EAAezU,EAAc0Z,QAAQ,WAC3CtZ,GAAcqU,GAAgB,EAAIzU,EAAc,GAAKA,EAAc,QAEnEA,EAAgB,KAChBI,GAAc,KAOlB,GAAmB,MAAfA,GAAqB,CAErB,IACMlL,GADc6I,KAAKw+M,eAAex+M,KAAKs+M,OAAOG,QACnB/iM,OAAO,aAAK,UAAEu0K,KAAKx0I,MAAM,KAAK,IAAMp5C,KACjElL,GAAayY,OAAS,EACtB3Y,GAAQ4K,GAAkBiK,OAAOijC,KAAKltC,GAAgBgO,KAAK,aAAK,MAAK,gBAAL7X,MAAwB6J,EAAe29B,aACjGroC,GAAa66B,KAAK,aAAK,MAAY,UAAZh6B,GAAEk4L,SACzB/4L,GAAa66B,KAAK,aAAK,OAACh6B,GAAEk4L,SACD,IAAxB/4L,GAAayY,SACpB3Y,GAAQE,GAAa,IAEzBH,GAAsB,MAATC,IAAsC,UAAhBA,GAAMi5L,YAEzCl5L,IAAY,EAKhB,IAAMI,GAAU4I,KAAKi+M,qBAAqBjnN,IACpCK,GAAY,GAClB,QAAWC,MAAOuK,EACF,iBAARvK,IACJwU,OAAO0hD,OAAOn2D,KAAS0K,MAAK3K,GAAUE,IAAM0I,KAAK0+M,SAAS78M,EAAevK,KAAKyK,IAOlF,GAHsB,MAAlBF,IAA6BA,EAAiB,IAGhC,MAAdD,EAAyB,CACzB,IAAMrK,EAAkBN,GAAQA,GAAMijB,UAAYla,KAAK09M,eAAeC,SAASzjM,UAC/EtY,EAAarK,GAAkBA,EAAe6rC,WAAgB7rC,EAAe6rC,WAAU,IAAM,QAE7FxhC,GAA0B,IAI9B,IAAIpK,EAAc,GAClB,GAAqB,MAAjByK,EAAuB,CACvB,IAAMxK,GAAawK,EAAc0Z,QAAQ,SACrClkB,IAAc,IACdD,EAAcyK,EAAc08M,UAG1BjoM,EAAezU,EAAc0Z,QAAQ,aACvB,IAChBnkB,EAAiBA,EAAW,IAAIyK,EAAc08M,SAG9ClnN,IAAc,IACdwK,EAAc,GAAKjC,KAAK4+M,iBAAmBh9M,EAAaK,EAAc,QAEvE,CACH,IACMtK,GADeqI,KAAK6+M,kBACIpnL,QAAQ,WAAY,IAAIgkB,MAAM,KAE5DjkD,EAAcG,GAASgnN,QAEnBhnN,GAASgkB,QAAQ,YAAc,IAC/BnkB,EAAiBA,EAAW,IAAIG,GAASgnN,SAKjD,QAFM/mN,GAAsB,GACxBC,GAAgBmI,KAAKs+M,OAAOQ,YAAYnB,SAASoB,KAC9ClnN,GAAcmnN,YACjBnnN,GAAgBA,GAAcmnN,WAC9BpnN,GAAoBie,KAAKhe,GAAckkN,IAAI3lL,IAAI,aAAK,UAAE65J,OAAMl3I,KAAK,MAGrE,IAAMjhD,EAAgBd,GAAYY,GAAoBmhD,KAAK,KAAKthB,QAAWjgC,EAAW,IAAK,IAAMyK,EAC3FlK,GAAef,GAAYiL,EAAgB,KACjD,OAAOjC,KAAKs+M,OAAOW,cAAc,CAACznN,EAAa,CAAE0nN,QAAS,CAAEC,QAASrnN,EAAemqD,OAAQlqD,MACxF,CAAE8lN,YAAaxmN,OAGvBsK,2CAAsBgV,GAClB,IAAM9U,EAAiB7B,KAAK+5M,iBAAiBnQ,UAAUyD,mBACvD,IAAI12L,GAAiB,MAAT9U,EAAe,OAAO8U,EAClC,IAAM/U,EAAQ,IAAIywE,OAAOxwE,EAAO,KAChC,OAAO8U,EAAK8gB,QAAQ71B,EAAO,KAKxBD,2BAAP,SAAsBgV,GAElB,QADI9U,EAAS,cACJG,GAEL,IAAMC,EAAKb,KAAQuV,EAAO3U,IAW1B,GATAd,EAAoByX,QAAQ,YACpB1W,EAAMguL,KAAK32I,WAAW5iC,KAAIzU,EAAMguL,KAAOhuL,EAAMguL,KAAKx4J,QAAQ/gB,EAAG,OAGrE3U,EAAKg4M,iBAAiBlc,UAAUz6J,WAAWqY,MAAM,KAAK9iC,QAAQ,YACtD1W,EAAMguL,KAAK32I,WAAW5iC,KAAIzU,EAAMguL,KAAOhuL,EAAMguL,KAAKx4J,QAAW/gB,EAAC,IAAK,OAG3E7U,EAAOgU,KAAK5T,GACRA,EAAMm9M,SAAU,CAEhB,IAAM/8M,GAAiBN,EAAKy8M,eAAev8M,EAAMm9M,UAEjDv9M,EAAMR,OAAOQ,GAAWQ,aAjBvBP,EAAI,EAAGA,EAAI6U,EAAO/G,OAAQ9N,MAA1BA,GAqBT,SAASD,EAAO6Z,OAAO,SAAC1Z,EAAOC,EAAOI,IAAS,UAAK+zB,IAAI,YACpD,MAAO,CAAE65J,KAAMv5K,EAAEu5K,KAAMC,OAAQx5K,EAAEw5K,UAClCz7H,UAAU,YAAK,SAAEw7H,OAASjuL,EAAMiuL,MAAQv5K,EAAEw5K,SAAWluL,EAAMkuL,WAAYjuL,KAKtEN,2BAAR,WACI,8BAAiE,MAAjC7B,uBAA6C,EAAIA,uBAAgC,EAC1GoB,EAAoBpB,uBAAgCoB,EAAoB0O,SAK5EjO,4BAAP,SAAuBgV,GACnB3W,KAAK8wM,UAAUrc,kBAAkBjzK,KAAK7K,IAKnChV,8BAAP,WACI3B,KAAKs+M,OAAOC,cAAcv+M,KAAK6+M,oBAI5Bl9M,yBAAP,WACI,OAAO3B,KAAK8Z,SAAS,OAGlBnY,mBAAP,SAAcgV,EAAe9U,GAA7B,WACUE,EAAS,GACTD,EAAU9B,KAAKi+M,sBAAqB,GAC1CnyM,OAAOijC,KAAKltC,GAAa8W,QAAQ,mBAC7B7M,OAAO0hD,OAAOzrD,IAAM/K,OAAK8K,EAAU4U,GAAM9U,EAAK88M,SAAS78M,EAAY6U,IAAK1f,OAG5E,IAAMgL,EAAUigD,OAAO5gC,SAASqhC,KAAKjrB,QAAQz3B,KAAKs+M,OAAOvC,IAAK,IACxD95M,EAAUjC,KAAKq+M,WAAW,CAAC1nM,GAAQ9U,GAEzC,MAAO,GAAGG,EADEhC,KAAKs+M,OAAOe,aAAap9M,IAKlCN,6BAAP,SAAwBgV,EAAc9U,sBAC9BA,EACAogD,OAAOpB,KAAKlqC,EAAM,UAElBsrC,OAAO5gC,SAASqhC,KAAO/rC,GAIxBhV,0BAAP,SAAqBgV,GACjB3W,KAAKw9M,iBAAiB,OAAO7mM,IAG1BhV,0BAAP,SAAqBgV,GACjB3W,KAAKw9M,iBAAiB,UAAU7mM,IAG7BhV,2BAAP,SAAsBgV,GAClB3W,KAAKw9M,iBAAiB,mCAAmC7mM,IAGtDhV,6BAAP,SAAwBgV,GACpB,IAAM9U,EAAS8U,EAAO8gB,QAAQ,IAAK,IAAIA,QAAQ,IAAK,IAAIA,QAAQ,IAAK,IACrEz3B,KAAKw9M,iBAAiB,0CAA0C37M,IAG7DF,yBAAP,SAAoBgV,GACZ3W,KAAK07C,cAAc3d,YACnB/9B,KAAKw9M,iBAAiB,aAAa7mM,GAGvC3W,KAAKw9M,iBAAiB,yBAAyB7mM,EAAQ,kBAGpDhV,4BAAP,SAAuBgV,GACnB,OAASmgL,YAAcngL,IAAWA,EAAO2iC,WAAW,OAGhD33C,qBAAR,SAAiBgV,GACb,OAAImgL,YAAcngL,IAAUmgL,YAAcngL,EAAM3K,aAAqB2K,EAExDA,EAED+kF,eAGR/5F,0BAAR,SAAsBgV,GAElB,GADImgL,YAAcngL,IACdkxB,MAAM8F,QAAQh3B,IAA4B,iBAAVA,IAAuB,mCAAmC8sC,KAAK9sC,GAAS,OAAOA,EAEnH,IAAM9U,EAAS8U,EAAiB8kC,MAAM,KACtC,OAAO,IAAI1vC,KAAKiF,SAASnP,EAAM,IAAKmP,SAASnP,EAAM,IAAM,EAAGmP,SAASnP,EAAM,+CA7XnD6tL,YAAvBA,YAMAxvL,WAJAyvL,WAGAvvL,WADAyyL,QA0BIlxL,qUAAgBJ,KAD5B1K,iBACY8K,MAmWN,WAAuBA,GAC1B,IAAMgV,EAAkB,GAElB9U,EAAOR,KAAgBM,GAE7B,SAAoBgX,QAAQ,SAAC/W,GAAgB,SAAQ+W,QAAQ,YAAU,SAAO9C,KAAKrU,EAAmBO,EAAQH,QACvG+U,EAcJ,WAA4BhV,EAAegV,GAE9C,IAAM9U,EAAaT,KAAQO,GAE3B,SAAcsuL,KAAOt5K,EAAS9U,EAAcouL,KACrCpuL,mnBCrZP,OAFsD8tL,OAEtDzvL,gCAAWJ,GACP,MAAO,IAHFI,qUAAoC42L,KADhDjgM,iBACYqJ,IAA6CwvL,wICctD,WAAoB5vL,EACRsB,GADQpB,2BACRA,wBAXJA,gCAA6B,IAAI2vL,IAAsB,GAC/C3vL,yBAAsBA,KAAKs/M,2BAA2B3zK,eAE9D3rC,2BAAwB,IAAI2vL,IAA8B,GAClD3vL,oBAAiBA,KAAKu/M,sBAAsB5zK,eAUrD,yBAAP,uBACS3rC,KAAK+5M,iBAAiBlc,UAAUM,uBAErCn+L,KAAKw/M,yBACLx/M,KAAKy/M,8BAAgCz/M,KAAK0/M,oBAAoBC,kBACzD7tM,UAAU,SAAC1Q,GAAoB,UAAUtB,EAAK0/M,6BAGhDt/M,mCAAP,uBACSF,KAAK+5M,iBAAiBlc,UAAUM,uBAErCn+L,KAAK4/M,gCAAkC5/M,KAAK0/M,oBAAoBG,wBAAwB/tM,UAAU,SAAC1Q,GAC/F,GAAKA,EAAS0zB,UAEd,KAAMvzB,EAAqBH,EAASkU,KAEpCxV,EAAKw/M,2BAA2B53K,KAAKnmC,EAAmBu+M,OACxDhgN,EAAKy/M,sBAAsB73K,KAAKnmC,EAAmBw+M,QAElDjgN,EAAKkgN,WAAalgN,EAAKkgN,SAAWC,YAAY,WAAM,SAAKT,0BAA0B,WAIrFt/M,iBAAP,WACIggN,cAAclgN,KAAKggN,UACnBhgN,KAAKy/M,gCAAkCz/M,KAAKy/M,8BAA8B5oB,QAAU72L,KAAKy/M,8BAA8BntM,cACvHtS,KAAK4/M,kCAAoC5/M,KAAK4/M,gCAAgC/oB,QAAU72L,KAAK4/M,gCAAgCttM,wDA7C5HwkL,WAFApH,OAKIxvL,qUAAmB2yL,GAD/B,gBAAW,CAAEhnJ,WAAY,UACb3rC,0ICUA42L,EACb,CACIqpB,MACA,CACIC,MAAO,eACPC,OAAQ,UACRC,4BAA6B,uBAC7BC,qBAAsB,uBACtBC,wBAAyB,0BACzBC,qBAAsB,uBACtBC,uBAAwB,yBACxBC,cAAe,gBACfC,eAAgB,iBAChBC,yBAA0B,uBAC1BC,gBAAiB,kBACjBC,mBAAoB,qBACpBC,qBAAsB,6BACtBC,WAAY,4BACZzR,KAAM,OACN0R,uBAAwB,yBACxBC,0BAA2B,eAC3BC,wBAAyB,QACzBC,uBAAwB,gBACxBC,wBAAyB,QACzBC,wBAAyB,QACzBC,wBAAyB,yBACzBC,mCAAoC,uBACpCC,8BAA+B,uBAC/BC,uBAAwB,UACxBC,8BAA+B,wBAC/BC,kCAAmC,0BACnCC,4BAA6B,sBAC7BC,gCAAiC,uBACjCC,kCAAmC,yBACnCC,8BAA+B,wBAC/BC,uBAAwB,cACxBC,gCAAiC,oBACjCC,mCAAoC,uBACpCC,uBAAwB,iBACxBC,+BAAgC,aAChCC,0BAA2B,uBAC3BC,gCAAiC,uBACjCC,4BAA6B,kBAC7BC,wBAAyB,UACzBC,kCAAmC,yBACnCC,8BAA+B,iBAC/BC,2BAA4B,kBAC5BC,qBAAsB,2BACtBC,2BAA4B,qBAC5BC,mCAAoC,6BACpCC,oCAAqC,uBACrCC,sBAAuB,aACvBC,wBAAyB,YACzBC,qBAAsB,SAE1BC,MACA,CACIC,UACI,CACI,CACIhxL,MAAOq9J,YACP7rJ,KAAM,UAEV,CACIxR,MAAOq9J,aACP7rJ,KAAM,WAEV,CACIxR,MAAOq9J,aACP7rJ,KAAM,YAIlBy/K,4BAA6B,CACzB,CACIjxL,MAAOq9J,WACP7rJ,KAAM,QACN/C,GAAI,GAER,CACIzO,MAAOq9J,SACP7rJ,KAAM,MACN/C,GAAI,GAER,CACIzO,MAAOq9J,cACP7rJ,KAAM,WACN/C,GAAI,IAGZyiL,oCAAqC,CACjC,CACIlxL,MAAOq9J,WACP7rJ,KAAM,SAEV,CACIxR,MAAOq9J,SACP7rJ,KAAM,OAEV,CACIxR,MAAOq9J,cACP7rJ,KAAM,YAEV,CACIxR,MAAOq9J,iBACP7rJ,KAAM,SAGd2/K,iCAAkC,CAC9B,CACInxL,MAAOq9J,UACP7rJ,KAAM,OACN/C,GAAI,EACJ+b,UAAW,GAEf,CACIxqB,MAAOq9J,aACP7rJ,KAAM,eACN/C,GAAI,EACJ+b,UAAW,GAEf,CACIxqB,MAAOq9J,gBACP7rJ,KAAM,cACN/C,GAAI,EACJ+b,UAAW,GAEf,CACIxqB,MAAOq9J,cACP7rJ,KAAM,YACN/C,GAAI,EACJ+b,UAAW,IAGnB4mK,oBAAqB,CACjB,CACIpxL,MAAOq9J,WACP7rJ,KAAM,QACN/C,GAAI,GAER,CACIzO,MAAOq9J,SACP7rJ,KAAM,QACN/C,GAAI,IAGZ4iL,uBAAwB,CACpB,CACIrxL,MAAOq9J,WACP7rJ,KAAM,QACN/C,GAAI,EACJ+b,UAAW,GAEf,CACIxqB,MAAOq9J,SACP7rJ,KAAM,MACN/C,GAAI,EACJ+b,UAAW,GAEf,CACIxqB,MAAOq9J,cACP7rJ,KAAM,WACN/C,GAAI,EACJ+b,UAAW,GAEf,CACIxqB,MAAOq9J,cACP7rJ,KAAM,aACN/C,GAAI,EACJ+b,UAAW,IAGnB8mK,kBAAmB,CACf,CACItxL,MAAOq9J,WACP7rJ,KAAM,QACNgZ,UAAW,EACXrjB,MAAO,EACPyB,KAAM,QACN5mB,KAAMq7K,YAEV,CACIr9J,MAAOq9J,SACP7rJ,KAAM,MACNgZ,UAAW,EACXrjB,MAAO,EACPyB,KAAM,MACN5mB,KAAMq7K,UAEV,CACIr9J,MAAOq9J,iBACP7rJ,KAAM,eACNgZ,UAAW,EACXrjB,MAAO,EACPyB,KAAM,eACN5mB,KAAMq7K,kBAEV,CACIr9J,MAAOq9J,cACP7rJ,KAAM,WACNgZ,UAAW,EACXrjB,MAAO,EACPyB,KAAM,WACN5mB,KAAMq7K,eAEV,CACIr9J,MAAOq9J,WACP7rJ,KAAM,QACNgZ,UAAW,EACXrjB,MAAO,EACPyB,KAAM,QACN5mB,KAAMq7K,aAGdk0B,qBACI,CACI,CACIvxL,MAAOq9J,WACP7rJ,KAAM,SAEV,CACIxR,MAAOq9J,aACP7rJ,KAAM,WAEV,CACIxR,MAAOq9J,aACP7rJ,KAAM,WAEV,CACIxR,MAAOq9J,UACP7rJ,KAAM,SAGlBggL,kCAAmC,CAC/B,CACIhgL,KAAM,aACNigL,WAAY,qBACZC,SAAU,IACVC,YAAY,GAEhB,CACIngL,KAAM,QACNigL,WAAY,iBACZC,SAAU,IACVC,YAAY,GAEhB,CACIngL,KAAM,WACNigL,WAAY,oBACZC,SAAU,IACVC,YAAY,IAGpBC,iCAAkC,CAC9B,CACIpgL,KAAM,SACNqgL,YAAa,gDACbC,SAAU,IACVC,oBAAqB10B,aAEzB,CACI7rJ,KAAM,UACNqgL,YAAa,4BACbC,SAAU,IACVC,oBAAqB10B,eAG7B20B,WACI,CACI,CACIhyL,MAAOq9J,UACP7rJ,KAAM,QAEV,CACIxR,MAAOq9J,WACP7rJ,KAAM,SAEV,CACIxR,MAAOq9J,SACP7rJ,KAAM,OAEV,CACIxR,MAAOq9J,cACP7rJ,KAAM,aAGlBygL,gBAAiB,CACb,CACIznK,UAAW,EACXxqB,MAAO,EACPwR,KAAM,SAEV,CACIgZ,UAAW,EACXxqB,MAAO,EACPwR,KAAM,UAGd0gL,kBAAmB,CACf,CACIlyL,MAAOq9J,UACP7rJ,KAAM,QAEV,CACIxR,MAAOq9J,YACP7rJ,KAAM,WAEV,CACIxR,MAAOq9J,YACP7rJ,KAAM,WAGd2gL,WAAY,CACR,CACInyL,MAAOq9J,aACP7rJ,KAAM,WAEV,CACIxR,MAAOq9J,YACP7rJ,KAAM,WAGd0uJ,cAAe,CACX,CACIlgK,MAAOq9J,eACP7rJ,KAAM,2BACP,CACCxR,MAAOq9J,eACP7rJ,KAAM,4BACP,CACCxR,MAAOq9J,YACP7rJ,KAAM,mBACP,CACCxR,MAAOq9J,oBACP7rJ,KAAM,mBACP,CACCxR,MAAOq9J,mBACP7rJ,KAAM,kBACP,CACCxR,MAAOq9J,0BACP7rJ,KAAM,0BACP,CACCxR,MAAOq9J,yBACP7rJ,KAAM,yBACP,CACCxR,MAAOq9J,6BACP7rJ,KAAM,6BACN4gL,SAAU/0B,aACVg1B,YAAa,aACd,CACCryL,MAAOq9J,mCACP7rJ,KAAM,qCACP,CACCxR,MAAOq9J,sCACP7rJ,KAAM,kCACP,CACCxR,MAAOq9J,4BACP7rJ,KAAM,0BACP,CACCxR,MAAOq9J,+BACP7rJ,KAAM,2BACP,CACCxR,MAAOq9J,iCACP7rJ,KAAM,6BACP,CACCxR,MAAOq9J,2BACP7rJ,KAAM,wBACP,CACCxR,MAAOq9J,gCACP7rJ,KAAM,6BACP,CACCxR,MAAOq9J,6BACP7rJ,KAAM,2BACP,CACCxR,MAAOq9J,+BACP7rJ,KAAM,gCACP,CACCxR,MAAOq9J,8BACP7rJ,KAAM,8BACP,CACCxR,MAAOq9J,gCACP7rJ,KAAM,kCACP,CACCxR,MAAOq9J,2BACP7rJ,KAAM,8BACP,CACCxR,MAAOq9J,gCACP7rJ,KAAM,4CACP,CACCxR,MAAOq9J,iCACP7rJ,KAAM,6CACP,CACCxR,MAAOq9J,+BACP7rJ,KAAM,kCACP,CACCxR,MAAOq9J,0CACP7rJ,KAAM,+CACP,CACCxR,MAAOq9J,0CACP7rJ,KAAM,gDACP,CACCxR,MAAOq9J,mBACP7rJ,KAAM,2BACP,CACCxR,MAAOq9J,kCACP7rJ,KAAM,yCACP,CACCxR,MAAOq9J,sCACP7rJ,KAAM,qCACP,CACCxR,MAAOq9J,oCACP7rJ,KAAM,mCACP,CACCxR,MAAOq9J,yCACP7rJ,KAAM,wCACP,CACCxR,MAAOq9J,6BACP7rJ,KAAM,6BACP,CACCxR,MAAOq9J,mCACP7rJ,KAAM,oCACP,CACCxR,MAAOq9J,kCACP7rJ,KAAM,kCACP,CACCxR,MAAOq9J,6BACP7rJ,KAAM,6BACP,CACCxR,MAAOq9J,qCACP7rJ,KAAM,8CAGd8gL,kBAAmB,CACf,CACItyL,MAAOq9J,SACP7rJ,KAAM,OAEV,CACIxR,MAAOq9J,aACP7rJ,KAAM,WAEV,CACIxR,MAAOq9J,aACP7rJ,KAAM,YAGd+gL,kBAAmB,CACf,CACIvyL,OAAO,EACPwR,KAAM,WAEV,CACIxR,OAAO,EACPwR,KAAM,YAGdghL,sBAAuB,CACnB,CACIxyL,MAAOq9J,iBACP7rJ,KAAM,iBAEV,CACIxR,MAAOq9J,cACP7rJ,KAAM,aAEV,CACIxR,MAAOq9J,gBACP7rJ,KAAM,eAEV,CACIxR,MAAOq9J,aACP7rJ,KAAM,YAGd2nD,MACA,CACI,CACIn5D,MAAOq9J,SACP7rJ,KAAM,OAEV,CACIxR,MAAOq9J,QACP7rJ,KAAM,OAGdihL,UAAW,CACP,CACIzyL,MAAOq9J,UACP7rJ,KAAM,QAEV,CACIxR,MAAOq9J,YACP7rJ,KAAM,UAEV,CACIxR,MAAOq9J,YACP7rJ,KAAM,WAGdkhL,UACA,CACI,CACI1yL,MAAOq9J,aACP7rJ,KAAM,WACR,CACExR,MAAOq9J,UACP7rJ,KAAM,QACR,CACExR,MAAOq9J,WACP7rJ,KAAM,WAIlBmhL,aACA,CACIC,YAAa,WACbC,YAAa,YACbC,YAAa,WACbC,WAAY,eACZC,SAAU,QACVC,UAAW,SACXC,kBAAmB,kBACnBC,aAAc,aACdC,mBAAoB,kBACpBC,mBAAoB,cACpBC,YAAa,SACbC,gBAAiB,yBACjBC,gBAAiB,+CACjBC,yBAA0B,kBAC1BC,oBAAqB,iHACrBC,yBAA0B,kBAC1BC,oBAAqB,uGACrBC,0BAA2B,0BAC3BC,eAAgB,eAChBC,mBAAoB,kHACpBC,qBAAsB,8BACtBC,qBAAsB,yFACtBC,oBAAqB,sBACrBC,mBAAoB,qBACpBC,0BAA2B,2BAC3BC,0BAA2B,qBAC3BC,sBAAuB,uBACvBC,sBAAuB,0HACvBC,sBAAuB,wEACvBC,sBAAuB,uGACvBC,sBAAuB,uIACvBC,sBAAuB,oKACvBC,WAAY,WACZC,MAAO,KACPC,OAAQ,MACRC,MAAO,KACPC,UAAW,SACXC,UAAW,iBACXC,SAAU,QACVC,QAAS,OACTC,SAAU,QACVC,aAAc,aACdC,cAAe,cACfC,YAAa,WACbC,YAAa,+CACbC,qBAAsB,8CACtBC,sBAAuB,kDACvBC,aAAc,6DACdC,oBAAqB,oCACrBC,iBAAkB,iDAClBC,oBAAqB,wFACrBC,gBAAiB,iDACjBC,kBAAmB,4CACnBC,qBAAsB,2DACtBC,iBAAkB,+DAClBC,sBAAuB,sBACvBC,8BAA+B,gDAC/BC,qBAAsB,oEACtBC,QAAS,SACTC,QAAS,SACTC,QAAS,UACTC,QAAS,YACTC,QAAS,WACTC,QAAS,SACTC,QAAS,WACTC,SAAU,MACVC,SAAU,MACVC,SAAU,MACVC,SAAU,MACVC,SAAU,MACVC,SAAU,MACVC,SAAU,MACVC,WAAY,kCACZC,gBAAiB,+BACjBC,SAAU,QACVC,QAAS,gBACTC,kBAAmB,kBACnBC,MAAO,KACPC,eAAgB,aAChBC,aAAc,UACdC,eAAgB,aAChBC,SAAU,MACVC,OAAQ,MACRC,UAAW,SACXC,eAAgB,eAChBC,iBAAkB,sBAClBC,gBAAiB,uBACjBC,kBAAmB,wBACnBC,kBAAmB,wBACnBC,SAAU,kBACVC,OAAQ,gBACRC,YAAa,wBACbC,YAAa,gBACbC,mBAAoB,YACpBC,eAAgB,iBAChBC,iBAAkB,qBAClBC,kBAAmB,kCACnBC,WAAY,UACZC,aAAc,cACdC,WAAY,UACZC,cAAe,eACfC,mBAAoB,cACpBC,KAAM,qBACNC,KAAM,YACNC,KAAM,aACNC,KAAM,aACNC,KAAM,eACNC,KAAM,oBACNC,KAAM,kBACNC,KAAM,sBACNC,KAAM,YACNC,KAAM,MACNC,KAAM,WACNC,KAAM,WACNC,KAAM,cACNC,KAAM,sBACNC,KAAM,YACNC,KAAM,eACNC,KAAM,aACNC,KAAM,aACNC,KAAM,cACNC,KAAM,sBACNC,KAAM,YACNC,KAAM,kBACNC,eAAgB,eAChBC,gBAAiB,eACjBC,gBAAiB,mBACjBC,gBAAiB,2BACjBC,iBAAkB,qCAClBC,iBAAkB,sCAClBC,4BAA6B,OAC7BC,oBAAqB,yBACrBC,iBAAkB,mBAClBC,eAAgB,qBAChBC,iBAAkB,oBAClBC,UAAW,aACXC,eAAgB,eAChBC,oBAAqB,oBACrBC,qBAAsB,qBACtBC,cAAe,cACfC,mBAAoB,oBACpBC,0BAA2B,2BAC3BC,uBAAwB,uBACxBC,kBAAmB,+CACnBC,qBAAsB,mBACtBC,wBAAyB,yGACzBC,uBAAwB,wBACxBC,eAAgB,eAChBC,aAAc,aACdC,kBAAmB,YACnBC,WAAY,UACZC,MAAO,KAEPC,cAAe,cACfC,cAAe,eACfC,cAAe,WACfC,oBAAqB,oBACrBC,oBAAqB,qBACrBC,oBAAqB,oBACrBC,iBAAkB,qBAClBC,aAAc,QAEdC,sBAAuB,6BACvBC,iBAAkB,2CAClBC,iBAAkB,0CAClBC,eAAgB,oBAChBC,cAAe,6BACfC,oBAAqB,uBACrBC,mBAAoB,gBACpBC,mBAAoB,oBAEpBC,SAAU,QACVC,aAAc,aAEdC,YAAa,SACbC,SAAU,QACVC,SAAU,QACVC,oBAAqB,qBACrBC,YAAa,YACbC,eAAgB,gBAChBC,qBAAsB,qBACtBC,oBAAqB,oBAErBC,iBAAkB,kBAClBC,UAAW,SACXC,cAAe,cACfC,qBAAsB,sBAEtBC,QAAS,OACTC,eAAgB,cAEhBC,WAAY,0BACZC,YAAa,YACbC,UAAW,UACXC,WAAY,KACZC,eAAgB,eAChBC,sBAAuB,YACvBC,WAAY,UACZC,WAAY,UACZC,YAAa,OACbC,kBAAmB,kBACnBC,sBAAuB,uBACvBC,0BAA2B,uBAC3BC,UAAW,SACXC,aAAc,KACdC,aAAc,KACdC,cAAe,MACfC,sBAAuB,sBACvBC,wBAAyB,gBACzBC,QAAS,QACTC,SAAU,SAEVC,OAAQ,MACRC,SAAU,QACVC,eAAgB,eAEhBC,6BAA8B,2BAC9BC,8BAA+B,wEAC/BC,uBAAwB,kBACxBC,aAAc,aACdC,YAAa,YACbC,wBAAyB,+EAEzBC,uBAAwB,uBACxBC,WAAY,UACZC,WAAY,UACZC,UAAW,SAEXC,WAAY,OACZC,wBAAyB,+DACzBC,wBAAyB,gEAEzBC,aAAc,8BACdC,QAAS,UACTC,QAAS,WACTC,QAAS,QACTC,QAAS,UACTC,QAAS,MACTC,QAAS,OACTC,QAAS,OACTC,QAAS,SACTC,QAAS,YACTC,SAAU,UACVC,SAAU,WACVC,SAAU,WAEVC,UAAW,SACXC,kBAAmB,kBACnBC,kBAAmB,iBACnBC,oBAAqB,mBACrBC,gBAAiB,iBACjBC,cAAe,eACfC,kBAAmB,2DACnBC,mBAAoB,gDACpBC,kBAAmB,iCACnBC,qBAAsB,oDACtBC,0BAA2B,iDAC3BC,2BAA4B,kDAC5BC,iCAAkC,iGAClCC,sBAAuB,uBACvBC,SAAU,QACVC,SAAU,QAEVC,eAAgB,iCAChBC,qBAAsB,oBACtBC,eAAgB,YAChBC,oBAAqB,oBAErBC,cAAe,cACfC,YAAa,YACbC,gBAAiB,gBACjBC,gBAAiB,gBACjBC,cAAe,eACfC,eAAgB,eAChBC,eAAgB,eAChBC,eAAgB,eAChBC,YAAa,YACbC,uBAAwB,eAExBC,yBAA0B,oCAC1BC,sBAAuB,2BACvBC,aAAc,cACdC,oBAAqB,sBACrBC,sBAAuB,wBACvBC,sBAAuB,sBACvBC,aAAc,aACdC,WAAY,WACZC,6BAA8B,kCAC9BC,mBAAoB,oBACpBC,YAAa,YACbC,QAAS,OACTC,YAAa,SACbC,cAAe,cACfC,oBAAqB,qBACrBC,MAAO,KACPC,sBAAuB,uBACvBC,qBAAsB,sBACtBC,eAAgB,eAChBC,UAAW,SACXC,mBAAoB,oBACpBC,gBAAiB,gBACjBC,gBAAiB,iBACjBC,2BAA4B,8CAC5BC,UAAW,UACXC,iBAAkB,iBAClBC,gBAAiB,kBACjBC,YAAa,YACbC,sCAAuC,0FACvCC,2BAA4B,oFAC5BC,gBAAiB,uCACjBC,cAAe,cACfC,gBAAiB,iBACjBC,YAAa,sBACbC,eAAgB,eAChBC,YAAa,SACbC,YAAa,SACbC,cAAe,SACfC,SAAU,QACVC,aAAc,YACdC,UAAW,SACXC,SAAU,QACVC,eAAgB,UAChBC,aAAc,aACdC,uBAAwB,wBACxBC,eAAgB,sBAChBC,YAAa,YACbC,gBAAiB,oDACjBC,wBAAyB,uBACzBC,sBAAuB,oBACvBC,oCAAqC,wFACrCC,UAAW,UACXC,eAAgB,eAChBC,aAAc,YACdC,+BAAgC,OAChCC,+BAAgC,aAChCC,oCAAqC,kFACrCC,iBAAkB,gBAClBC,YAAa,WACbC,YAAa,YACbC,yBAA0B,6BAC1BC,gBAAiB,wBACjBC,kBAAmB,mBACnBC,oBAAqB,oBACrBC,2BAA4B,yBAC5BC,8BAA+B,6BAC/BC,4BAA6B,2BAC7BC,8BAA+B,6BAE/BC,aAAc,uBACdC,kBAAmB,gBACnBC,sBAAuB,cACvBC,aAAc,aACdC,aAAc,aACdC,SAAU,QACVC,YAAa,YACbC,UAAW,UACXC,QAAS,OACTC,2BAA4B,0BAC5BC,0BAA0B,8BAC1BC,mBAAoB,QACpBC,mBAAoB,QACpBC,aAAc,UACdC,kBAAmB,mCACnBC,cAAe,uBACfC,aAAc,aACdC,mBAAoB,oDACpBC,sBAAuB,2BACvBC,sBAAuB,2BACvBC,sBAAuB,uBACvBC,aAAc,aACdC,YAAa,WACbC,cAAe,aACfC,UAAW,SACXC,UAAW,SACXC,cAAe,cACfC,eAAgB,eAChBC,eAAgB,eAChBC,QAAS,OACTC,YAAa,WACbC,cAAe,cACfC,QAAS,OACTC,oBAAqB,sBACrBC,uBAAwB,yBACxBC,qBAAsB,qBACtBC,yBAA0B,2BAC1BC,eAAgB,uBAChBC,iBAAkB,aAClBC,WAAY,cACZC,YAAa,YACbC,YAAa,YACbC,gBAAiB,QACjBC,mBAAoB,YACpBC,oBAAqB,qBACrBC,sBAAuB,uBACvBC,qBAAsB,UACtBC,mBAAoB,oBACpBC,sBAAuB,sBACvBC,wBAAyB,sBACzBC,cAAe,sBACfC,kBAAmB,kBACnBC,wBAAyB,uBACzBC,8BAA+B,iJAC/BC,kBAAmB,kBACnBC,mBAAoB,mBACpBC,4BAA6B,yDAC7BC,6BAA8B,yDAC9BC,kBAAmB,kBACnBC,wBAAyB,wBACzBC,cAAe,aACfC,WAAY,UACZC,sBAAuB,yCACvBC,aAAc,aACdC,uBAAwB,uBACxBC,6BAA8B,6EAC9BC,uBAAwB,uBACxBC,aAAc,UACdC,oBAAqB,QACrBC,kBAAmB,MACnBC,uBAAwB,WACxBC,oBAAqB,QACrBC,SAAU,QACVC,cAAe,cACfC,YAAa,OACbC,QAAS,OACTC,kBAAmB,kBACnBC,uBAAwB,WACxBC,oBAAqB,QACrBC,yBAA0B,0BAC1BC,mCAAoC,oBACpCC,0CAA2C,0DAC3CC,SAAU,QACVC,2CAA4C,gCAC5CC,cAAe,cACfC,cAAe,YACfC,kBAAmB,mBACnBC,yBAA0B,UAC1BC,8BAA+B,iBAC/BC,wCAAyC,qCACzCC,cAAe,cACfC,kCAAmC,6BACnCC,kBAAmB,gBACnBC,gBAAiB,cACjBC,qBAAsB,mBACtBC,iBAAkB,eAClBC,oBAAqB,kBACrBC,qBAAsB,oBACtBC,QAAS,OACTC,cAAe,cACfC,YAAa,YACbC,SAAU,QACVC,eAAgB,iBAChBC,sBAAuB,8BACvBC,UAAW,WCx8BNxtC,GACb,CACIstB,MACA,CACIC,MAAO,kFACPC,OAAQ,iCACRC,4BAA6B,qGAC7BC,qBAAsB,+FACtBE,qBAAsB,gEACtBD,wBAAyB,6BACzBE,uBAAwB,kFACxBC,cAAe,uCACfC,eAAgB,sEAChBC,yBAA0B,uHAC1BC,gBAAiB,6EACjBC,mBAAoB,gEACpBE,WAAY,qGACZzR,KAAM,iCACNwR,qBAAsB,2GACtBE,uBAAwB,yFACxBC,0BAA2B,sEAC3BC,wBAAyB,iCACzBC,uBAAwB,uEACxBC,wBAAyB,iCACzBC,wBAAyB,iCACzBC,wBAAyB,qGACzBC,mCAAoC,qGACpCC,8BAA+B,+FAC/BC,uBAAwB,sEACxBC,8BAA+B,2BAC/BC,kCAAmC,6BACnCC,4BAA6B,0DAC7BC,gCAAiC,gEACjCC,kCAAmC,kFACnCC,8BAA+B,gEAC/BC,uBAAwB,gCACxBC,gCAAiC,sEACjCC,mCAAoC,wHACpCC,uBAAwB,sEACxBC,+BAAgC,0DAChCC,0BAA2B,kEAC3BC,gCAAiC,uHACjCC,4BAA6B,6EAC7BC,wBAAyB,oDACzBG,2BAA4B,qGAC5BC,qBAAsB,8FACtBC,2BAA4B,gEAC5BC,mCAAoC,2GACpCC,oCAAqC,yKACrCC,sBAAuB,qGACvBC,wBAAyB,iCACzBC,qBAAsB,YAE1BC,MACA,CACIC,UACI,CACI,CACIhxL,MAAOq9J,YACP7rJ,KAAM,kCAEV,CACIxR,MAAOq9J,aACP7rJ,KAAM,wCAEV,CACIxR,MAAOq9J,aACP7rJ,KAAM,yCAIlBy/K,4BAA6B,CACzB,CACIjxL,MAAOq9J,WACP7rJ,KAAM,uCACN/C,GAAI,GAER,CACIzO,MAAOq9J,SACP7rJ,KAAM,qCACN/C,GAAI,GAER,CACIzO,MAAOq9J,cACP7rJ,KAAM,0CACN/C,GAAI,IAGZyiL,oCAAqC,CACjC,CACIlxL,MAAOq9J,WACP7rJ,KAAM,wCAEV,CACIxR,MAAOq9J,SACP7rJ,KAAM,sCAEV,CACIxR,MAAOq9J,cACP7rJ,KAAM,2CAEV,CACIxR,MAAOq9J,iBACP7rJ,KAAM,0FAGd2/K,iCAAkC,CAC9B,CACInxL,MAAOq9J,UACP7rJ,KAAM,UACN/C,GAAI,EACJ+b,UAAW,GAEf,CACIxqB,MAAOq9J,aACP7rJ,KAAM,kBACN/C,GAAI,EACJ+b,UAAW,GAEf,CACIxqB,MAAOq9J,gBACP7rJ,KAAM,iBACN/C,GAAI,EACJ+b,UAAW,GAEf,CACIxqB,MAAOq9J,cACP7rJ,KAAM,eACN/C,GAAI,EACJ+b,UAAW,IAGnB4mK,oBAAqB,CACjB,CACIpxL,MAAOq9J,WACP7rJ,KAAM,uCACN/C,GAAI,GAER,CACIzO,MAAOq9J,SACP7rJ,KAAM,iCACN/C,GAAI,IAGZ4iL,uBAAwB,CACpB,CACIrxL,MAAOq9J,WACP7rJ,KAAM,uCACN/C,GAAI,EACJ+b,UAAW,GAEf,CACIxqB,MAAOq9J,SACP7rJ,KAAM,qCACN/C,GAAI,EACJ+b,UAAW,GAEf,CACIxqB,MAAOq9J,cACP7rJ,KAAM,0CACN/C,GAAI,EACJ+b,UAAW,GAEf,CACIxqB,MAAOq9J,cACP7rJ,KAAM,8CACN/C,GAAI,EACJ+b,UAAW,IAGnB8mK,kBAAmB,CACf,CACItxL,MAAOq9J,WACP7rJ,KAAM,uCACNgZ,UAAW,EACXrjB,MAAO,EACPyB,KAAM,uCACN5mB,KAAMq7K,YAEV,CACIr9J,MAAOq9J,SACP7rJ,KAAM,qCACNgZ,UAAW,EACXrjB,MAAO,EACPyB,KAAM,qCACN5mB,KAAMq7K,UAEV,CACIr9J,MAAOq9J,iBACP7rJ,KAAM,wFACNgZ,UAAW,EACXrjB,MAAO,EACPyB,KAAM,wFACN5mB,KAAMq7K,kBAEV,CACIr9J,MAAOq9J,cACP7rJ,KAAM,0CACNgZ,UAAW,EACXrjB,MAAO,EACPyB,KAAM,0CACN5mB,KAAMq7K,eAEV,CACIr9J,MAAOq9J,WACP7rJ,KAAM,WACNgZ,UAAW,EACXrjB,MAAO,EACPyB,KAAM,WACN5mB,KAAMq7K,aAGdk0B,qBACI,CACI,CACIvxL,MAAOq9J,WACP7rJ,KAAM,kCAEV,CACIxR,MAAOq9J,aACP7rJ,KAAM,kCAEV,CACIxR,MAAOq9J,aACP7rJ,KAAM,4BAEV,CACIxR,MAAOq9J,UACP7rJ,KAAM,6BAGlBggL,kCAAmC,CAC/B,CACIhgL,KAAM,aACNigL,WAAY,qBACZC,SAAU,IACVC,YAAY,GAEhB,CACIngL,KAAM,QACNigL,WAAY,iBACZC,SAAU,IACVC,YAAY,GAEhB,CACIngL,KAAM,WACNigL,WAAY,oBACZC,SAAU,IACVC,YAAY,IAGpBC,iCAAkC,CAC9B,CACIpgL,KAAM,SACNqgL,YAAa,gDACbC,SAAU,IACVC,oBAAqB10B,aAEzB,CACI7rJ,KAAM,UACNqgL,YAAa,4BACbC,SAAU,IACVC,oBAAqB10B,eAG7B20B,WACI,CACI,CACIhyL,MAAOq9J,UACP7rJ,KAAM,sBAEV,CACIxR,MAAOq9J,WACP7rJ,KAAM,4BAEV,CACIxR,MAAOq9J,SACP7rJ,KAAM,OAEV,CACIxR,MAAOq9J,cACP7rJ,KAAM,aAGlBygL,gBAAiB,CACb,CACIznK,UAAW,EACXxqB,MAAO,EACPwR,KAAM,4BAEV,CACIgZ,UAAW,EACXxqB,MAAO,EACPwR,KAAM,6BAGd0gL,kBAAmB,CACf,CACIlyL,MAAOq9J,UACP7rJ,KAAM,sBAEV,CACIxR,MAAOq9J,YACP7rJ,KAAM,sBAEV,CACIxR,MAAOq9J,YACP7rJ,KAAM,6BAGd2gL,WAAY,CACR,CACInyL,MAAOq9J,aACP7rJ,KAAM,WAEV,CACIxR,MAAOq9J,YACP7rJ,KAAM,WAGd0uJ,cAAe,CACX,CACIlgK,MAAOq9J,eACP7rJ,KAAM,qDACP,CACCxR,MAAOq9J,eACP7rJ,KAAM,2DACP,CACCxR,MAAOq9J,YACP7rJ,KAAM,uEACP,CACCxR,MAAOq9J,oBACP7rJ,KAAM,2HACP,CACCxR,MAAOq9J,mBACP7rJ,KAAM,uIACP,CACCxR,MAAOq9J,0BACP7rJ,KAAM,8EACP,CACCxR,MAAOq9J,yBACP7rJ,KAAM,0FACP,CACCxR,MAAOq9J,6BACP7rJ,KAAM,+HACP,CACCxR,MAAOq9J,mCACP7rJ,KAAM,uLACP,CACCxR,MAAOq9J,sCACP7rJ,KAAM,kHACP,CACCxR,MAAOq9J,4BACP7rJ,KAAM,2IACP,CACCxR,MAAOq9J,+BACP7rJ,KAAM,oKACP,CACCxR,MAAOq9J,iCACP7rJ,KAAM,2IACP,CACCxR,MAAOq9J,2BACP7rJ,KAAM,sEACP,CACCxR,MAAOq9J,gCACP7rJ,KAAM,qIACP,CACCxR,MAAOq9J,6BACP7rJ,KAAM,+PACP,CACCxR,MAAOq9J,+BACP7rJ,KAAM,2IACP,CACCxR,MAAOq9J,8BACP7rJ,KAAM,+HACP,CACCxR,MAAOq9J,gCACP7rJ,KAAM,iIACP,CACCxR,MAAOq9J,2BACP7rJ,KAAM,wLACP,CACCxR,MAAOq9J,gCACP7rJ,KAAM,8LACP,CACCxR,MAAOq9J,iCACP7rJ,KAAM,wLACP,CACCxR,MAAOq9J,+BACP7rJ,KAAM,oPACP,CACCxR,MAAOq9J,0CACP7rJ,KAAM,mOACP,CACCxR,MAAOq9J,0CACP7rJ,KAAM,gPACP,CACCxR,MAAOq9J,mBACP7rJ,KAAM,0FACP,CACCxR,MAAOq9J,kCACP7rJ,KAAM,wGACP,CACCxR,MAAOq9J,sCACP7rJ,KAAM,yMACP,CACCxR,MAAOq9J,oCACP7rJ,KAAM,kKACP,CACCxR,MAAOq9J,yCACP7rJ,KAAM,uKACP,CACCxR,MAAOq9J,6BACP7rJ,KAAM,oKACP,CACCxR,MAAOq9J,mCACP7rJ,KAAM,8JACP,CACCxR,MAAOq9J,kCACP7rJ,KAAM,oKACP,CACCxR,MAAOq9J,6BACP7rJ,KAAM,kJACP,CACCxR,MAAOq9J,qCACP7rJ,KAAM,iDAGd8gL,kBAAmB,CACf,CACItyL,MAAOq9J,SACP7rJ,KAAM,sBAEV,CACIxR,MAAOq9J,aACP7rJ,KAAM,kCAEV,CACIxR,MAAOq9J,aACP7rJ,KAAM,6BAGd+gL,kBAAmB,CACf,CACIvyL,OAAO,EACPwR,KAAM,kCAEV,CACIxR,OAAO,EACPwR,KAAM,6BAGdghL,sBAAuB,CACnB,CACIxyL,MAAOq9J,iBACP7rJ,KAAM,qDAEV,CACIxR,MAAOq9J,cACP7rJ,KAAM,2DAEV,CACIxR,MAAOq9J,gBACP7rJ,KAAM,2DAEV,CACIxR,MAAOq9J,aACP7rJ,KAAM,YAGd2nD,MACI,CACI,CACIn5D,MAAOq9J,SACP7rJ,KAAM,gBAEV,CACIxR,MAAOq9J,QACP7rJ,KAAM,iBAGlBihL,UAAW,CACP,CACIzyL,MAAOq9J,UACP7rJ,KAAM,WAEV,CACIxR,MAAOq9J,YACP7rJ,KAAM,aAEV,CACIxR,MAAOq9J,YACP7rJ,KAAM,cAGdkhL,UACA,CACI,CACI1yL,MAAOq9J,aACP7rJ,KAAM,WACR,CACExR,MAAOq9J,UACP7rJ,KAAM,QACR,CACExR,MAAOq9J,WACP7rJ,KAAM,WAIlBmhL,aACA,CACIC,YAAa,qBACbC,YAAa,8CACbC,YAAa,iCACbC,WAAY,sEACZC,SAAU,sEACVC,UAAW,iCACXC,kBAAmB,oDACnBC,aAAc,wCACdC,mBAAoB,gEACpBC,mBAAoB,yFACpBC,YAAa,4EACbC,gBAAiB,kHACjBC,gBAAiB,wHACjBC,yBAA0B,kHAC1BC,oBAAqB,sbACrBC,yBAA0B,gEAC1BC,oBAAqB,uVACrBC,0BAA2B,kHAC3BC,eAAgB,gEAChBC,mBAAoB,qaACpBC,qBAAsB,6FACtBC,qBAAsB,qWACtBC,oBAAqB,uCACrBC,mBAAoB,mFACpBC,0BAA2B,qGAC3BC,0BAA2B,iHAC3BC,sBAAuB,0FACvBC,sBAAuB,gbACvBC,sBAAuB,mXACvBC,sBAAuB,uVACvBC,sBAAuB,ocACvBC,sBAAuB,qkBACvBC,WAAY,sEACZC,MAAO,iCACPC,OAAQ,eACRC,MAAO,eACPC,UAAW,iCACXC,UAAW,yFACXC,SAAU,2BACVC,QAAS,2BACTC,SAAU,qBACVC,aAAc,qBACdC,cAAe,gEACfC,YAAa,2BACbC,YAAa,wJACbC,qBAAsB,2KACtBC,sBAAuB,qKACvBC,aAAc,+LACdC,oBAAqB,kHACrBC,iBAAkB,gNAClBC,oBAAqB,0UACrBC,gBAAiB,iHACjBC,kBAAmB,oKACnBC,qBAAsB,uNACtBC,iBAAkB,+OAClBC,sBAAuB,6EACvBC,8BAA+B,8PAC/BC,qBAAsB,uEACtBC,QAAS,iCACTC,QAAS,qBACTC,QAAS,iCACTC,QAAS,iCACTC,QAAS,iCACTC,QAAS,2BACTC,QAAS,qBACTC,SAAU,UACVC,SAAU,UACVC,SAAU,UACVC,SAAU,UACVC,SAAU,UACVC,SAAU,UACVC,SAAU,UACVC,WAAY,uHACZC,gBAAiB,yHACjBC,SAAU,iCACVC,QAAS,0DACTC,kBAAmB,8CACnBC,MAAO,gBACPC,eAAgB,2DAChBC,aAAc,2BACdC,eAAgB,kCAChBC,SAAU,2BACVC,OAAQ,2BACRC,UAAW,iCACXC,eAAgB,0DAChBC,iBAAkB,sEAClBC,gBAAiB,oDACjBC,kBAAmB,yFACnBC,kBAAmB,yFACnBC,SAAU,gEACVC,OAAQ,4CACRC,YAAa,8HACbC,YAAa,uEACbC,mBAAoB,8CACpBC,eAAgB,qGAChBC,iBAAkB,+FAClBC,kBAAmB,oHACnBC,WAAY,iCACZC,aAAc,8DACdC,WAAY,2BACZC,cAAe,0DACfC,mBAAmB,cACnBC,KAAM,oDACNC,KAAM,6BACNC,KAAM,8BACNC,KAAM,wCACNC,KAAM,wCACNC,KAAM,oDACNC,KAAM,8CACNC,KAAM,gEACNC,KAAM,+BACNC,KAAM,qBACNC,KAAM,uCACNC,KAAM,+BACNC,KAAM,oDACNC,KAAM,sEACNC,KAAM,2CACNC,KAAM,oDACNC,KAAM,6CACNC,KAAM,2CACNC,KAAM,8CACNC,KAAM,gEACNC,KAAM,+BACNC,KAAM,oDACNC,eAAgB,0DAChBC,gBAAiB,0DACjBC,gBAAiB,gEACjBE,iBAAkB,wHAClBC,iBAAkB,8HAClBC,4BAA6B,UAC7BC,oBAAqB,6EACrBC,iBAAkB,0DAClBC,eAAgB,wBAChBN,gBAAiB,+FACjBO,iBAAkB,6EAClBC,UAAW,8CACXC,eAAgB,yFAChBC,oBAAqB,0DACrBC,qBAAsB,oDACtBC,cAAe,mFACfC,mBAAoB,mFACpBC,0BAA2B,+FAC3BC,uBAAwB,mFACxBC,kBAAmB,uJACnBC,qBAAsB,0DACtBC,wBAAyB,oUACzBC,uBAAwB,iKACxBC,eAAgB,oDAChBC,aAAc,oDACdC,kBAAmB,2BACnBC,WAAY,6CACZC,MAAO,SAEPC,cAAe,0DACfC,cAAe,gEACfC,cAAe,2BACfC,oBAAqB,mFACrBC,oBAAqB,kHACrBC,oBAAqB,sEACrBC,iBAAkB,yFAClBC,aAAc,WAEdC,sBAAuB,2IACvBC,iBAAkB,uJAClBC,iBAAkB,kKAClBC,eAAgB,6EAChBC,cAAe,6JACfC,oBAAqB,sEACrBC,mBAAoB,oDACpBC,mBAAoB,+HAEpBC,SAAU,qBACVC,aAAc,wEAEdC,YAAa,2BACbC,SAAU,uCACVC,SAAU,iCACVC,oBAAqB,6HACrBC,YAAa,6CACbC,eAAgB,2BAChBC,qBAAsB,oDACtBC,oBAAqB,uBAErBC,iBAAkB,oDAClBC,UAAW,8CACXC,cAAe,0DACfC,qBAAsB,0FAEtBC,QAAS,eACTC,eAAgB,iCAEhBC,WAAY,oHACZC,YAAa,gEACbC,UAAW,2DACXC,WAAY,2BACZC,eAAgB,uCAChBC,sBAAuB,wCACvBC,WAAY,iCACZC,WAAY,iCACZC,YAAa,0DACbC,kBAAmB,0DACnBC,sBAAuB,qGACvBC,0BAA2B,oFAC3BC,UAAW,uCACXC,aAAc,iCACdC,aAAc,kCACdC,cAAe,iEACfC,sBAAuB,gEACvBC,wBAAyB,8CACzBC,QAAS,SACTC,SAAU,gBACVI,6BAA8B,kHAC9BC,8BAA+B,2NAC/BC,uBAAwB,yFACxBG,wBAAyB,yQACzBF,aAAc,gEACdC,YAAa,gEACbgI,QAAS,iCACTvI,OAAQ,2BACRC,SAAU,qBACVC,eAAgB,kFAEhBO,uBAAwB,gEACxBC,WAAY,2BACZC,WAAY,mDACZC,UAAW,kFAEXC,WAAY,2DACZC,wBAAyB,+QACzBC,wBAAyB,+QAEzBC,aAAc,uEAEdC,QAAS,iCACTC,QAAS,uCACTC,QAAS,qBACTC,QAAS,mCACTC,QAAS,qBACTC,QAAS,2BACTC,QAAS,2BACTC,QAAS,uCACTC,QAAS,uCACTC,SAAU,6CACVC,SAAU,uCACVC,SAAU,iCACVC,UAAW,iCACXC,kBAAmB,oDACnBC,kBAAmB,gFACnBC,oBAAqB,4IACrBC,gBAAiB,0CACjBC,cAAe,iDACfC,kBAAmB,kKACnBC,mBAAoB,+HACpBC,kBAAmB,+GACnBC,qBAAsB,qOACtBC,0BAA2B,gMAC3BC,2BAA4B,iPAC5BC,iCAAkC,waAClCC,sBAAuB,4GACvBC,SAAU,2BACVC,SAAU,iCAEVC,eAAgB,uJAChBC,qBAAsB,8CACtBC,eAAgB,2BAChBC,oBAAqB,0DAErBC,cAAe,0BACfC,YAAa,gCACbC,gBAAiB,0DACjBC,gBAAiB,6CACjBC,cAAe,0EACfC,eAAgB,wDAChBC,eAAgB,yDAChBC,eAAgB,4CAChBC,YAAa,sCACbC,uBAAwB,yBAExBC,yBAA0B,sGAC1BC,sBAAuB,gEACvBC,aAAc,+FACdC,oBAAqB,yCACrBC,sBAAuB,2CACvBC,sBAAuB,0DACvBC,aAAc,8DACdC,WAAY,gEACZC,6BAA8B,6HAC9BC,mBAAoB,gEACpBC,YAAa,0BACbC,QAAS,2BACTC,YAAa,qBACbC,cAAe,+FACfC,oBAAqB,yFACrBC,MAAO,eACPC,sBAAuB,gEACvBC,qBAAsB,gEACtBC,eAAgB,4EAChBC,UAAW,gEACXC,mBAAoB,qGACpBC,gBAAiB,gEACjBC,gBAAiB,yDACjBC,2BAA4B,2MAC5BC,UAAW,iCACXC,iBAAkB,gEAClBC,gBAAiB,mFACjBC,YAAa,gEACbC,sCAAuC,+SACvCC,2BAA4B,wQAC5BG,gBAAiB,4CACjBC,YAAa,sEACbF,cAAe,8CACfG,eAAgB,sEAChBC,YAAa,qBACbC,YAAa,uCACbC,cAAe,iCACfC,SAAU,QACVC,aAAc,YACdC,UAAW,iCACXC,SAAU,qBACVC,eAAgB,2BAChBC,aAAc,0DACdC,uBAAwB,yFACxBC,eAAgB,8DAChBC,YAAa,sEACbC,gBAAiB,0MACjBC,wBAAyB,sEACzBC,sBAAuB,qCACvBC,oCAAqC,yVACrCC,UAAW,0DACXC,eAAgB,0DAChBC,aAAc,2BACdC,+BAAgC,OAChCC,+BAAgC,aAChCC,oCAAqC,uYACrCC,iBAAkB,uCAClBC,YAAa,2BACbC,YAAa,wCACbC,yBAA0B,+EAC1BC,gBAAiB,0EACjBC,kBAAmB,mBACnBC,oBAAqB,oBACrBC,2BAA4B,gDAC5BC,8BAA+B,gCAC/BC,4BAA6B,0DAC7BC,8BAA+B,sEAE/BC,aAAc,uBACdC,kBAAmB,0DACnBC,sBAAuB,+EACvBC,aAAc,oCACdC,aAAc,gEACdC,SAAU,iCACVC,YAAa,uCACbC,UAAW,8CACXE,2BAA4B,yFAC5BC,0BAA2B,kHAC3BC,mBAAoB,iCACpBC,mBAAoB,iCACpBC,aAAc,sEACdC,kBAAmB,kJACnBC,cAAe,sEACfC,aAAc,8CACdC,mBAAoB,yPACpBC,sBAAuB,qHACvBC,sBAAuB,qHACvBC,sBAAuB,kHACvBC,aAAc,gEACdC,YAAa,wCACbC,cAAe,mDACfE,UAAW,2BACXC,cAAe,oDACfC,eAAgB,0DAChBC,eAAgB,wDAChBC,QAAS,oDACTC,YAAa,0DACbC,cAAe,0DACfC,QAAS,2BACTC,oBAAqB,2GACrBC,uBAAwB,4GACxBE,yBAA0B,+FAC1BD,qBAAsB,yFACtBE,eAAgB,4GAChBC,iBAAkB,uCAClBE,YAAa,wCACbC,YAAa,wCACbC,gBAAiB,qBACjBC,mBAAoB,sBACpBnB,UAAW,iCACXoB,oBAAqB,8FACrBC,sBAAuB,8FACvBC,qBAAsB,8DACtBP,WAAY,wFACZQ,mBAAoB,0FACpBC,sBAAuB,mCACvBC,wBAAyB,mCACzBC,cAAe,2DACfC,kBAAmB,oFACnBC,wBAAyB,mKACzBC,8BAA+B,4sBAC/BC,kBAAmB,qGACnBC,mBAAoB,+FACpBC,4BAA6B,4DAC7BC,6BAA8B,4DAC9B6C,eAAgB,wDAChBC,sBAAuB,gEACvB7C,kBAAmB,qBACnBC,wBAAyB,2BACzBC,cAAe,gBACfC,WAAY,aACZC,sBAAuB,4CACvBC,aAAc,2DACdC,uBAAwB,0BACxBC,6BAA8B,gFAC9BC,uBAAwB,0BACxBC,aAAc,aACdC,oBAAqB,WACrBC,kBAAmB,SACnBC,uBAAwB,cACxBC,oBAAqB,WACrBC,SAAU,WACVC,cAAe,iBACfC,YAAa,UACbC,QAAS,UACTC,kBAAmB,qBACnBC,uBAAwB,cACxBC,oBAAqB,WACrBC,yBAA0B,6BAC1BC,mCAAoC,uBACpCC,0CAA2C,6DAC3CC,SAAU,QACVC,2CAA4C,oCAC5CC,cAAe,iBACfC,cAAe,eACfC,kBAAmB,sBACnBC,yBAA0B,aAC1BC,8BAA+B,oBAC/BC,wCAAyC,wCACzCC,cAAe,iBACfC,kCAAmC,gCACnCC,kBAAmB,mBACnBC,gBAAiB,iBACjBC,qBAAsB,sBACtBC,iBAAkB,kBAClBC,oBAAqB,qBACrBC,qBAAsB,uBACtBC,QAAS,UACTC,cAAe,iBACfC,YAAa,eACbC,SAAU,WACVG,UAAW,cC/7BNjgO,EACb,CACI+/M,MACA,CACIC,MAAO,kCACPC,OAAQ,mBACRC,4BAA6B,kCAC7BC,qBAAsB,4BACtBC,wBAAyB,8BACzBC,qBAAsB,gCACtBC,uBAAwB,gCACxBC,cAAe,iBACfC,eAAgB,uBAChBC,yBAA0B,+CAC1BC,gBAAiB,sBACjBC,mBAAoB,0BACpBC,qBAAsB,sCACtBC,WAAY,2CACZzR,KAAM,UACN0R,uBAAwB,kCACxBC,0BAA2B,kBAC3BC,wBAAyB,WACzBC,uBAAwB,mBACxBC,wBAAyB,SACzBC,wBAAyB,OACzBC,wBAAyB,6BACzBC,mCAAoC,kCACpCC,8BAA+B,4BAC/BC,uBAAwB,eACxBC,8BAA+B,6BAC/BC,kCAAmC,8BACnCC,4BAA6B,6BAC7BC,gCAAiC,gCACjCC,kCAAmC,gCACnCC,8BAA+B,+BAC/BC,uBAAwB,cACxBC,gCAAiC,4BACjCC,mCAAoC,qCACpCC,uBAAwB,uBACxBC,+BAAgC,sBAChCC,0BAA2B,4CAC3BC,gCAAiC,+CACjCC,4BAA6B,sBAC7BC,wBAAyB,YACzBC,kCAAmC,mCACnCC,8BAA+B,mBAC/BC,2BAA4B,wBAC5BC,qBAAsB,qCACtBC,2BAA4B,0BAC5BC,mCAAoC,sCACpCC,oCAAqC,gCACrCC,sBAAuB,kBACvBC,wBAAyB,oBACzBC,qBAAsB,aAE1BC,MACA,CACIC,UACI,CACI,CACIhxL,MAAOq9J,YACP7rJ,KAAM,yCAEV,CACIxR,MAAOq9J,aACP7rJ,KAAM,kDAEV,CACIxR,MAAOq9J,aACP7rJ,KAAM,oDAIlBy/K,4BAA6B,CACzB,CACIjxL,MAAOq9J,WACP7rJ,KAAM,wBACN/C,GAAI,GAER,CACIzO,MAAOq9J,SACP7rJ,KAAM,MACN/C,GAAI,GAER,CACIzO,MAAOq9J,cACP7rJ,KAAM,WACN/C,GAAI,IAGZyiL,oCAAqC,CACjC,CACIlxL,MAAOq9J,WACP7rJ,KAAM,yBAEV,CACIxR,MAAOq9J,SACP7rJ,KAAM,OAEV,CACIxR,MAAOq9J,cACP7rJ,KAAM,YAEV,CACIxR,MAAOq9J,iBACP7rJ,KAAM,SAGd2/K,iCAAkC,CAC9B,CACInxL,MAAOq9J,UACP7rJ,KAAM,UACN/C,GAAI,EACJ+b,UAAW,GAEf,CACIxqB,MAAOq9J,aACP7rJ,KAAM,oBACN/C,GAAI,EACJ+b,UAAW,GAEf,CACIxqB,MAAOq9J,gBACP7rJ,KAAM,iBACN/C,GAAI,EACJ+b,UAAW,GAEf,CACIxqB,MAAOq9J,cACP7rJ,KAAM,gBACN/C,GAAI,EACJ+b,UAAW,IAGnB4mK,oBAAqB,CACjB,CACIpxL,MAAOq9J,WACP7rJ,KAAM,wBACN/C,GAAI,GAER,CACIzO,MAAOq9J,SACP7rJ,KAAM,cACN/C,GAAI,IAGZ4iL,uBAAwB,CACpB,CACIrxL,MAAOq9J,WACP7rJ,KAAM,wBACN/C,GAAI,EACJ+b,UAAW,GAEf,CACIxqB,MAAOq9J,SACP7rJ,KAAM,MACN/C,GAAI,EACJ+b,UAAW,GAEf,CACIxqB,MAAOq9J,cACP7rJ,KAAM,WACN/C,GAAI,EACJ+b,UAAW,GAEf,CACIxqB,MAAOq9J,cACP7rJ,KAAM,YACN/C,GAAI,EACJ+b,UAAW,IAGnB8mK,kBAAmB,CACf,CACItxL,MAAOq9J,WACP7rJ,KAAM,wBACNgZ,UAAW,EACXrjB,MAAO,EACPyB,KAAM,wBACN5mB,KAAMq7K,YAEV,CACIr9J,MAAOq9J,SACP7rJ,KAAM,MACNgZ,UAAW,EACXrjB,MAAO,EACPyB,KAAM,MACN5mB,KAAMq7K,UAEV,CACIr9J,MAAOq9J,iBACP7rJ,KAAM,eACNgZ,UAAW,EACXrjB,MAAO,EACPyB,KAAM,eACN5mB,KAAMq7K,kBAEV,CACIr9J,MAAOq9J,cACP7rJ,KAAM,WACNgZ,UAAW,EACXrjB,MAAO,EACPyB,KAAM,WACN5mB,KAAMq7K,eAEV,CACIr9J,MAAOq9J,WACP7rJ,KAAM,YACNgZ,UAAW,EACXrjB,MAAO,EACPyB,KAAM,YACN5mB,KAAMq7K,aAGdk0B,qBACI,CACI,CACIvxL,MAAOq9J,WACP7rJ,KAAM,YAEV,CACIxR,MAAOq9J,aACP7rJ,KAAM,YAEV,CACIxR,MAAOq9J,aACP7rJ,KAAM,SAEV,CACIxR,MAAOq9J,UACP7rJ,KAAM,YAGlBggL,kCAAmC,CAC/B,CACIhgL,KAAM,aACNigL,WAAY,qBACZC,SAAU,IACVC,YAAY,GAEhB,CACIngL,KAAM,QACNigL,WAAY,iBACZC,SAAU,IACVC,YAAY,GAEhB,CACIngL,KAAM,WACNigL,WAAY,oBACZC,SAAU,IACVC,YAAY,IAGpBC,iCAAkC,CAC9B,CACIpgL,KAAM,SACNqgL,YAAa,gDACbC,SAAU,IACVC,oBAAqB10B,aAEzB,CACI7rJ,KAAM,UACNqgL,YAAa,4BACbC,SAAU,IACVC,oBAAqB10B,eAG7B20B,WACI,CACI,CACIhyL,MAAOq9J,UACP7rJ,KAAM,WAEV,CACIxR,MAAOq9J,WACP7rJ,KAAM,yBAEV,CACIxR,MAAOq9J,SACP7rJ,KAAM,OAEV,CACIxR,MAAOq9J,cACP7rJ,KAAM,aAGlBygL,gBAAiB,CACb,CACIznK,UAAW,EACXxqB,MAAO,EACPwR,KAAM,SAEV,CACIgZ,UAAW,EACXxqB,MAAO,EACPwR,KAAM,aAGd0gL,kBAAmB,CACf,CACIlyL,MAAOq9J,UACP7rJ,KAAM,WAEV,CACIxR,MAAOq9J,YACP7rJ,KAAM,eAEV,CACIxR,MAAOq9J,YACP7rJ,KAAM,cAGd2gL,WAAY,CACR,CACInyL,MAAOq9J,aACP7rJ,KAAM,WAEV,CACIxR,MAAOq9J,YACP7rJ,KAAM,WAGd0uJ,cAAe,CACX,CACIlgK,MAAOq9J,eACP7rJ,KAAM,qCACP,CACCxR,MAAOq9J,eACP7rJ,KAAM,wCACP,CACCxR,MAAOq9J,YACP7rJ,KAAM,2BACP,CACCxR,MAAOq9J,oBACP7rJ,KAAM,oCACP,CACCxR,MAAOq9J,mBACP7rJ,KAAM,iCACP,CACCxR,MAAOq9J,0BACP7rJ,KAAM,sCACP,CACCxR,MAAOq9J,yBACP7rJ,KAAM,8BACP,CACCxR,MAAOq9J,6BACP7rJ,KAAM,oCACN4gL,SAAU/0B,aACVg1B,YAAa,aACd,CACCryL,MAAOq9J,mCACP7rJ,KAAM,0CACP,CACCxR,MAAOq9J,sCACP7rJ,KAAM,4CACP,CACCxR,MAAOq9J,4BACP7rJ,KAAM,uCACP,CACCxR,MAAOq9J,+BACP7rJ,KAAM,yCACP,CACCxR,MAAOq9J,iCACP7rJ,KAAM,kDACP,CACCxR,MAAOq9J,2BACP7rJ,KAAM,qCACP,CACCxR,MAAOq9J,gCACP7rJ,KAAM,+CACP,CACCxR,MAAOq9J,6BACP7rJ,KAAM,yCACP,CACCxR,MAAOq9J,+BACP7rJ,KAAM,oDACP,CACCxR,MAAOq9J,8BACP7rJ,KAAM,2DACP,CACCxR,MAAOq9J,gCACP7rJ,KAAM,iDACP,CACCxR,MAAOq9J,2BACP7rJ,KAAM,kDACP,CACCxR,MAAOq9J,gCACP7rJ,KAAM,wEACP,CACCxR,MAAOq9J,iCACP7rJ,KAAM,wEACP,CACCxR,MAAOq9J,+BACP7rJ,KAAM,6DACP,CACCxR,MAAOq9J,0CACP7rJ,KAAM,qFACP,CACCxR,MAAOq9J,0CACP7rJ,KAAM,6EACP,CACCxR,MAAOq9J,mBACP7rJ,KAAM,iCACP,CACCxR,MAAOq9J,kCACP7rJ,KAAM,iDACP,CACCxR,MAAOq9J,sCACP7rJ,KAAM,wEACP,CACCxR,MAAOq9J,oCACP7rJ,KAAM,sDACP,CACCxR,MAAOq9J,yCACP7rJ,KAAM,2DACP,CACCxR,MAAOq9J,6BACP7rJ,KAAM,0CACP,CACCxR,MAAOq9J,mCACP7rJ,KAAM,kDACP,CACCxR,MAAOq9J,kCACP7rJ,KAAM,gDACP,CACCxR,MAAOq9J,6BACP7rJ,KAAM,2CACP,CACCxR,MAAOq9J,qCACP7rJ,KAAM,+EAGd8gL,kBAAmB,CACf,CACItyL,MAAOq9J,SACP7rJ,KAAM,SAEV,CACIxR,MAAOq9J,aACP7rJ,KAAM,YAEV,CACIxR,MAAOq9J,aACP7rJ,KAAM,UAGd+gL,kBAAmB,CACf,CACIvyL,OAAO,EACPwR,KAAM,YAEV,CACIxR,OAAO,EACPwR,KAAM,UAGdghL,sBAAuB,CACnB,CACIxyL,MAAOq9J,iBACP7rJ,KAAM,kBAEV,CACIxR,MAAOq9J,cACP7rJ,KAAM,mBAEV,CACIxR,MAAOq9J,gBACP7rJ,KAAM,kBAEV,CACIxR,MAAOq9J,aACP7rJ,KAAM,aAGd2nD,MACA,CACI,CACIn5D,MAAOq9J,SACP7rJ,KAAM,SAEV,CACIxR,MAAOq9J,QACP7rJ,KAAM,OAGdihL,UAAW,CACP,CACIzyL,MAAOq9J,UACP7rJ,KAAM,WAEV,CACIxR,MAAOq9J,YACP7rJ,KAAM,WAEV,CACIxR,MAAOq9J,YACP7rJ,KAAM,YAGdkhL,UACA,CACI,CACI1yL,MAAOq9J,aACP7rJ,KAAM,SACR,CACExR,MAAOq9J,UACP7rJ,KAAM,QACR,CACExR,MAAOq9J,WACP7rJ,KAAM,WAIlBmhL,aACA,CACIC,YAAa,SACbC,YAAa,oBACbC,YAAa,gBACbC,WAAY,oCACZC,SAAU,oBACVC,UAAW,mBACXC,kBAAmB,wBACnBC,aAAc,wBACdC,mBAAoB,yBACpBC,mBAAoB,gBACpBC,YAAa,mBACbC,gBAAiB,iCACjBC,gBAAiB,+DACjBC,yBAA0B,qBAC1BC,oBAAqB,uIACrBC,yBAA0B,wBAC1BC,oBAAqB,8IACrBC,0BAA2B,iCAC3BC,eAAgB,oBAChBC,mBAAoB,8IACpBC,qBAAsB,8DACtBC,qBAAsB,uHACtBC,oBAAqB,gCACrBC,mBAAoB,iCACpBC,0BAA2B,mCAC3BC,0BAA2B,2CAC3BC,sBAAuB,iCACvBC,sBAAuB,iJACvBC,sBAAuB,sGACvBC,sBAAuB,+IACvBC,sBAAuB,oKACvBC,sBAAuB,yNACvBC,WAAY,6BACZC,MAAO,KACPC,OAAQ,QACRC,MAAO,KACPC,UAAW,WACXC,UAAW,mBACXC,SAAU,WACVC,QAAS,SACTC,SAAU,WACVC,aAAc,aACdC,cAAe,gBACfC,YAAa,YACbC,YAAa,gDACbC,qBAAsB,2CACtBC,sBAAuB,yEACvBC,aAAc,6EACdC,oBAAqB,qCACrBC,iBAAkB,gEAClBC,oBAAqB,+IACrBC,gBAAiB,0DACjBC,kBAAmB,0DACnBC,qBAAsB,6EACtBC,iBAAkB,8EAClBC,sBAAuB,kCACvBC,8BAA+B,2HAC/BC,qBAAsB,gFACtBC,QAAS,UACTC,QAAS,QACTC,QAAS,SACTC,QAAS,eACTC,QAAS,SACTC,QAAS,UACTC,QAAS,YACTC,SAAU,MACVC,SAAU,MACVC,SAAU,MACVC,SAAU,MACVC,SAAU,MACVC,SAAU,MACVC,SAAU,SACVC,WAAY,uCACZC,gBAAiB,wCACjBC,SAAU,WACVC,QAAS,sBACTC,kBAAmB,qBACnBC,MAAO,MACPC,eAAgB,aAChBC,aAAc,SACdC,eAAgB,YAChBC,SAAU,MACVC,OAAQ,MACRC,UAAW,cACXC,eAAgB,qBAChBC,iBAAkB,+BAClBC,gBAAiB,4BACjBC,kBAAmB,4BACnBC,kBAAmB,4BACnBC,SAAU,mBACVC,OAAQ,iBACRC,YAAa,6BACbC,YAAa,iBACbC,mBAAoB,oBACpBC,eAAgB,yBAChBC,iBAAkB,+BAClBC,kBAAmB,0CACnBC,WAAY,cACZC,aAAc,kBACdC,WAAY,aACZC,cAAe,mBACfC,mBAAoB,cACpBC,KAAM,qBACNC,KAAM,YACNC,KAAM,aACNC,KAAM,aACNC,KAAM,aACNC,KAAM,oBACNC,KAAM,eACNC,KAAM,sBACNC,KAAM,YACNC,KAAM,SACNC,KAAM,cACNC,KAAM,cACNC,KAAM,uBACNC,KAAM,wBACNC,KAAM,cACNC,KAAM,mBACNC,KAAM,YACNC,KAAM,YACNC,KAAM,sBACNC,KAAM,wBACNC,KAAM,cACNC,KAAM,qBACNC,eAAgB,wBAChBC,gBAAiB,sBACjBC,gBAAiB,0BACjBC,gBAAiB,gDACjBC,iBAAkB,2DAClBC,iBAAkB,oFAClBC,4BAA6B,SAC7BC,oBAAqB,sCACrBC,iBAAkB,0BAClBC,eAAgB,+CAChBC,iBAAkB,+BAClBC,UAAW,kBACXC,eAAgB,kBAChBC,oBAAqB,wBACrBC,qBAAsB,qBACtBC,cAAe,sBACfC,mBAAoB,4BACpBC,0BAA2B,qCAC3BC,uBAAwB,2BACxBC,kBAAmB,0EACnBC,qBAAsB,iCACtBC,wBAAyB,2HACzBC,uBAAwB,6CACxBC,eAAgB,kBAChBC,aAAc,aACdC,kBAAmB,wBACnBC,WAAY,UACZC,MAAO,KAEPC,cAAe,oBACfC,cAAe,aACfC,cAAe,eACfC,oBAAqB,uBACrBC,oBAAqB,sBACrBC,oBAAqB,2BACrBC,iBAAkB,wBAClBC,aAAc,QAEdC,sBAAuB,qDACvBC,iBAAkB,oFAClBC,iBAAkB,uEAClBC,eAAgB,+BAChBC,cAAe,qDACfC,oBAAqB,qCACrBC,mBAAoB,uBACpBC,mBAAoB,2CAEpBC,SAAU,UACVC,aAAc,wCAEdC,YAAa,SACbC,SAAU,wBACVC,SAAU,cACVC,oBAAqB,0BACrBC,YAAa,sBACbC,eAAgB,oBAChBC,qBAAsB,qBACtBC,oBAAqB,yBAErBC,iBAAkB,qBAClBC,UAAW,WACXC,cAAe,kBACfC,qBAAsB,2BAEtBC,QAAS,SACTC,eAAgB,iBAEhBC,WAAY,+BACZC,YAAa,oBACbC,UAAW,cACXC,WAAY,KACZC,eAAgB,qBAChBC,sBAAuB,aACvBC,WAAY,eACZC,WAAY,SACZC,YAAa,SACbC,kBAAmB,wBACnBC,sBAAuB,6BACvBC,0BAA2B,wCAC3BC,UAAW,SACXC,aAAc,OACdC,aAAc,KACdC,cAAe,MACfC,sBAAuB,2BACvBC,wBAAyB,yBACzBC,QAAS,MACTC,SAAU,SAEVC,OAAQ,YACRC,SAAU,UACVC,eAAgB,gBAEhBC,6BAA8B,kCAC9BC,8BAA+B,mFAC/BC,uBAAwB,qBACxBC,aAAc,gBACdC,YAAa,kBACbC,wBAAyB,0GAEzBC,uBAAwB,+BACxBC,WAAY,UACZC,WAAY,WACZC,UAAW,gBAEXC,WAAY,YACZC,wBAAyB,2GACzBC,wBAAyB,8FAEzBC,aAAc,iCACdC,QAAS,QACTC,QAAS,UACTC,QAAS,QACTC,QAAS,QACTC,QAAS,OACTC,QAAS,QACTC,QAAS,QACTC,QAAS,UACTC,QAAS,aACTC,SAAU,UACVC,SAAU,YACVC,SAAU,YAEVC,UAAW,WACXC,kBAAmB,qBACnBC,kBAAmB,oBACnBC,oBAAqB,oBACrBC,gBAAiB,sBACjBC,cAAe,mBACfC,kBAAmB,sEACnBC,mBAAoB,oDACpBC,kBAAmB,iDACnBC,qBAAsB,wEACtBC,0BAA2B,0DAC3BC,2BAA4B,sDAC5BC,iCAAkC,yHAClCC,sBAAuB,gCACvBC,SAAU,SACVC,SAAU,OAEVC,eAAgB,4CAChBC,qBAAsB,oBACtBC,eAAgB,WAChBC,oBAAqB,2BAErBC,cAAe,gBACfC,YAAa,cACbC,gBAAiB,yBACjBC,gBAAiB,qBACjBC,cAAe,eACfC,eAAgB,kBAChBC,eAAgB,wBAChBC,eAAgB,oBAChBC,YAAa,YACbC,uBAAwB,mBAExBC,yBAA0B,uDAC1BC,sBAAuB,mDACvBC,aAAc,4BACdC,oBAAqB,6CACrBC,sBAAuB,8BACvBC,sBAAuB,6BACvBC,aAAc,uBACdC,WAAY,iBACZC,6BAA8B,oDAC9BC,mBAAoB,0BACpBC,YAAa,cACbC,QAAS,UACTC,YAAa,WACbC,cAAe,mBACfC,oBAAqB,+BACrBC,MAAO,OACPC,sBAAuB,6BACvBC,qBAAsB,4BACtBC,eAAgB,mBAChBC,UAAW,UACXC,mBAAoB,iCACpBC,gBAAiB,sCACjBC,gBAAiB,uBACjBC,2BAA4B,kDAC5BC,UAAW,mBACXC,iBAAkB,uBAClBC,gBAAiB,8BACjBC,YAAa,mBACbC,sCAAuC,yHACvCC,2BAA4B,4HAC5BC,gBAAiB,yEACjBC,cAAe,qBACfC,gBAAiB,eACjBC,YAAa,qCACbC,eAAgB,uBAChBC,YAAa,WACbC,YAAa,UACbC,cAAe,YACfC,SAAU,sBACVC,aAAc,QACdC,UAAW,YACXC,SAAU,QACVC,eAAgB,QAChBC,aAAc,sBACdC,uBAAwB,yBACxBC,eAAgB,oCAChBC,YAAa,iCACbC,gBAAiB,gEACjBC,wBAAyB,6CACzBC,sBAAuB,0BACvBC,oCAAqC,mHACrCC,UAAW,YACXC,eAAgB,uCAChBC,aAAc,aACdC,+BAAgC,OAChCC,+BAAgC,aAChCC,oCAAqC,qHACrCC,iBAAkB,iBAClBC,YAAa,YACbC,YAAa,iBACbC,yBAA0B,sCAC1BC,gBAAiB,iCACjBC,kBAAmB,wBACnBC,oBAAqB,0BACrBC,2BAA4B,+BAC5BC,8BAA+B,sCAC/BC,4BAA6B,yCAC7BC,8BAA+B,yCAE/BC,aAAc,6BACdC,kBAAmB,sBACnBC,sBAAuB,iBACvBC,aAAc,kBACdC,aAAc,+BACdC,SAAU,WACVC,YAAa,cACbC,UAAW,cACXC,QAAS,QACTC,2BAA4B,qCAC5BC,0BAA0B,gCAC1BC,mBAAoB,QACpBC,mBAAoB,OACpBC,aAAc,eACdC,kBAAmB,wDACnBC,cAAe,6BACfC,aAAc,eACdC,mBAAoB,yFACpBC,sBAAuB,+BACvBC,sBAAuB,+BACvBC,sBAAuB,8BACvBC,aAAc,kBACdC,YAAa,cACbC,cAAe,cACfC,UAAW,YACXC,UAAW,YACXC,cAAe,sBACfC,eAAgB,kBAChBC,eAAgB,qBAChBC,QAAS,SACTC,YAAa,YACbC,cAAe,gBACfC,QAAS,SACTC,oBAAqB,yCACrBC,uBAAwB,iCACxBC,qBAAsB,yBACtBC,yBAA0B,gCAC1BC,eAAgB,+BAChBC,iBAAkB,uBAClBC,WAAY,sBACZC,YAAa,cACbC,YAAa,gBACbC,gBAAiB,QACjBC,mBAAoB,aACpBC,oBAAqB,0BACrBC,sBAAuB,yBACvBC,qBAAsB,UACtBC,mBAAoB,gCACpBC,sBAAuB,qBACvBC,wBAAyB,wBACzBC,cAAe,0BACfC,kBAAmB,oBACnBC,wBAAyB,sCACzBC,8BAA+B,2JAC/BC,kBAAmB,mBACnBC,mBAAoB,sBACpBC,4BAA6B,0FAC7BC,6BAA8B,gFAC9BC,kBAAmB,wBACnBC,wBAAyB,8BACzBC,cAAe,gBACfC,WAAY,eACZC,sBAAuB,0CACvBC,aAAc,aACdC,uBAAwB,0BACxBC,6BAA8B,4EAC9BC,uBAAwB,6BACxBC,aAAc,YACdC,oBAAqB,wBACrBC,kBAAmB,MACnBC,uBAAwB,WACxBC,oBAAqB,WACrBC,SAAU,YACVC,cAAe,kBACfC,YAAa,YACbC,QAAS,SACTC,kBAAmB,mBACnBC,uBAAwB,YACxBC,oBAAqB,YACrBC,yBAA0B,6BAC1BC,mCAAoC,gCACpCC,0CAA2C,iFAC3CC,SAAU,YACVC,2CAA4C,qCAC5CC,cAAe,qBACfC,cAAe,gBACfC,kBAAmB,iCACnBC,yBAA0B,aAC1BC,8BAA+B,+BAC/BC,wCAAyC,4CACzCC,cAAe,qBACfC,kCAAmC,4CACnCC,kBAAmB,sCACnBC,gBAAiB,oBACjBC,qBAAsB,yBACtBC,iBAAkB,qBAClBC,oBAAqB,uBACrBC,qBAAsB,0BACtBC,QAAS,YACTC,cAAe,iBACfC,YAAa,gBACbC,SAAU,QACVC,eAAgB,kBAChBC,sBAAuB,ssBCr8B3B,WAAoBx+N,EACRG,GADQ/B,wBACRA,sBAOL,oCAAP,sBAMI,OAJAA,KAAKsgO,eAAiB,GACtBtgO,KAAKugO,qBAAuB,GAC5BvgO,KAAKwgO,QAAU,GAEPtgO,mBACCyvL,YAEW,MAAwBkD,SAAd/wL,EAASZ,EAAK2xL,GAA1B,WACN7yL,KAAKwgO,QAAQ3qN,KAAK9T,GAClB/B,KAAKsgO,eAAezqN,KAAK/T,GACzB,WAEH6tL,aAEW5tL,EAAwB+0L,QAAdh1L,EAASZ,EAAK41L,EAA1B,WACN92L,KAAKwgO,QAAQ3qN,KAAK9T,GAClB/B,KAAKsgO,eAAezqN,KAAK/T,GACzB,WAEH6tL,aAEW5tL,EAAwB3B,QAAd0B,EAASZ,EAAKd,EAA1B,WACNJ,KAAKwgO,QAAQ3qN,KAAK9T,GAClB/B,KAAKsgO,eAAezqN,KAAK/T,GAMrC,IACMG,EADqBjC,KAAK+5M,iBAAiB9M,gBACNvxL,OAAO,aAAK,UAAEysE,YAAchxF,GAAEgxF,WAAWC,WAAaloF,eAC7F+B,GAAmBA,EAAgB2N,SAAQ5P,KAAKugO,qBAAuBvgO,KAAKugO,qBAAqB1iN,OAAO5b,IAG5G,IACMyU,EADe1W,KAAK+5M,iBAAiBhN,UACZrxL,OAAO,aAAK,UAAEysE,YAAchxF,GAAEgxF,WAAWC,WAAaloF,eACjFwW,GAAaA,EAAU9G,SAAQ5P,KAAKsgO,eAAiBtgO,KAAKsgO,eAAeziN,OAAOnH,IAGpF1W,KAAKsgO,eAAiBtgO,KAAKsgO,eAAe5kN,OAAO,aAAK,OAAK,MAALvkB,KAGtD,IACMF,GADW+I,KAAK+5M,iBAAiBlc,UAAUuR,WAC1B1zL,OAAO,aAAK,UAAEysE,YAAchxF,GAAEgxF,WAAWC,WAAaloF,eACvDjJ,GAAMykB,OAAO,aAAK,UAAEysE,YAAchxF,GAAEgxF,WAAWs4I,qBACvD9nN,QAAQ,aAClB,IAAMvhB,GAAoBH,GAAM+6B,KAAK,aAAK,UAAEm2D,WAAW/kD,aAAejsC,GAAEgxF,WAAWs4I,qBAC/ErpO,IACA0U,OAAO2pI,oBAAoBt+I,IACtBukB,OAAO,aAAQ,MAAS,eAATrkB,KACfshB,QAAQ,aACL,IAAMrhB,GAAaH,GAAEE,IACrBD,GAAkBC,IAAQC,OAK1C0I,KAAKwgO,QAAUxgO,KAAKwgO,QAAQ3iN,OAAO5mB,IAGnCiJ,wBAAiCF,KAAK0gO,0BAEtCxgO,4BAAqCF,KAAK2gO,8BAE1C3gO,KAAKq6M,eAAeumB,uBAAuB9uN,UAAU,aACjD,GAAK3a,GAAS29B,UAEd,KAAM19B,GAAoBD,GAASme,KAAKoG,OAAO,aAAK,UAAEysE,WAAWC,WAAaloF,eAC1E9I,IAAqBA,GAAkBwY,QACvCxY,GAAkBuhB,QAAQ,aACcthB,GAAC8wF,WAA7B,IAAe5wF,EAAQ2J,EAAK7J,GAA9B,gBACAG,EAAuB+J,KAAalK,IAC1CyU,OAAOijC,KAAKv3C,GAAyBmhB,QAAQ,aACrC7M,OAAOijC,KAAKx3C,GAAUokB,QAAQlkB,KAAQ,UAAUD,EAAwBC,MAEhFD,EAAwB48G,GAAQ78G,EAChCqK,EAAK0+N,eAAiB1+N,EAAK0+N,eAAeziN,OAAO,CAACrmB,SAK9DwI,KAAK6gO,kBAAoB7gO,KAAK8gO,oBAI1Bj/N,6BAAR,SAAyBD,EAAUG,GAC/B,OAAOA,EAAK05C,MAAM,KAAKqO,OAAO,SAAChoD,EAAKE,GAAQ,UAAOF,EAAIE,IAAMJ,IAIzDC,8BAAR,WAC+B,MAAvB7B,KAAKsgO,iBACLpgO,aAAsBF,KAAK+5M,iBAAiBnQ,UAAUqR,gBACtDj7M,KAAKo7M,qBAMNv5M,eAAP,SAAUD,EAAuBG,WAAqBD,oDAKlD,IAAIG,EAHJjC,KAAK+gO,oBAIDn/N,EAAc03C,WAAW,QACzB13C,EAAgBA,EAAcw7B,UAAU,GACxCn7B,GAAmB,GAIvBF,EAAaA,GAAc,GAG3B,IAAIM,GAAQT,EAAcwqD,SAAS,KAAOxqD,EAAgB,gBAAgBA,EAEtE8U,EAAQ1W,KAAKghO,iBAAiBhhO,KAAKugO,qBAAsBl+N,GAAON,GASpE,GAPa,MAAT2U,IAGAA,EAAQ1W,KAAKghO,iBAAiBhhO,KAAKsgO,eAAgBj+N,GAAON,IAIjD,MAAT2U,EAAoB,OAAOzU,OAAmB,EAAY,IAAIL,EAAa,IAG/E,QAAS5K,GAAQ,EAAGA,GAAQ8K,EAAK8N,OAAQ5Y,KACrC0f,EAAQA,EAAM+gB,QAAQ,IAAIzgC,GAAK,IAAK8K,EAAK9K,KAI7C,QAAuBC,aAAKspO,qBAALtpO,kBAA2B,CAA7C,IAAIE,GAAUD,OACf,GAA4B,MAAxBC,GAAW8pO,UACf,QAAoB7pO,WAAW6pO,UAAX7pO,kBAAsB,CAArC,IAAIE,GAAOD,OACZqf,EAAQA,EAAM+gB,QAASngC,GAA6B4pO,IAAM5pO,GAA6B6pO,MAK/F,OAAOzqN,GAGX7U,sCAAiBD,EAAsBG,EAAeD,GAClD,IAAME,EAA4BJ,EAAc8Z,OAAO,YAAK,SAAEysE,YAAczxE,EAAEyxE,WAAW/kD,aAAethC,IAEpGG,EAAQjC,KAAKohO,4BAA4Bp/N,EAA2BD,GACxE,GAAa,MAATE,EAAoB,CACpB,IAAMI,GAAwBT,EAAc8Z,OAAO,YAAK,OAAChF,EAAEyxE,aAAezxE,EAAEyxE,WAAW/kD,aAGvFnhC,EAAQjC,KAAKohO,4BAA4B/+N,GAAuBN,GAEpE,OAAOE,GAGXJ,iDAA4BD,EAAsBG,GAE9C,QADID,EACmBE,uBAAe,CAAjC,IAAIK,GAAUJ,KAGf,GADAH,EAAQ9B,KAAKqhO,iBAAiBh/N,GAAYN,GAC/B,MAEf,OAAOD,GAIJD,qBAAP,SAAgBD,EAAmBG,EAAgBD,GAC/C,IACIG,EADOjC,KAAKqkB,KAAKziB,EAAWE,GAChBkwB,KAAK,aAAK,UAAEM,OAASvwB,IACrC,OAAY,MAARE,EAA0B,IAAIF,EAAM,IACjCE,EAAK6hC,MAITjiC,sBAAP,SAAiBD,EAAmBG,EAAgBD,GAChD,IACIG,EADOjC,KAAKqkB,KAAKziB,EAAWE,GAChBkwB,KAAK,aAAK,UAAEM,OAASvwB,IACrC,GAAY,MAARE,EACJ,OAAOA,GAIJJ,iBAAP,SAAYD,EAAmBG,SAE3B,YAAKg/N,oBAGLh/N,EAAaA,GAAc,IAEsC,QAA1DD,OAAKk/N,iBAAiBhhO,KAAKwgO,QAAS5+N,EAAWG,UAAW,eAAEg/D,KAAK/gE,KAAKshO,gBAAiB,IAIlGz/N,kCAAaD,EAA0BG,GAEnC,YAAwB,IAApBH,EAAMk7C,gBAA+C,IAApB/6C,EAAM+6C,WAAgC,OACnD,IAApBl7C,EAAMk7C,gBAA+C,IAApB/6C,EAAM+6C,UAAgC,OACnD,IAApBl7C,EAAMk7C,gBAA+C,IAApB/6C,EAAM+6C,UAAgCl7C,EAAMk7C,UAAY/6C,EAAM+6C,eAGhF,IAAfl7C,EAAMkiC,WAAqC,IAAf/hC,EAAM+hC,KAA2BliC,EAAMkiC,KAAKy9L,cAAcx/N,EAAM+hC,MAEzF,GAIJjiC,oCAAP,WAII,QAAuBD,WAAK2+N,qBAAL3+N,eAA2B,CAA7C,IAAIE,EAAUC,KACXC,EAAQhC,KAAKqhO,iBAAiBv/N,EAAY,uBAC9C,GAAa,MAATE,EAAoB,OAAOA,IAKvCH,mDACI,QAAuBD,WAAK2+N,qBAAL3+N,eAA2B,CAA7C,IAAIE,EAAUC,KACXC,EAAQhC,KAAKqhO,iBAAiBv/N,EAAY,2BAC9C,GAAa,MAATE,EAAoB,OAAOA,IAKhCH,6BAAP,WACI,IAAMD,EAAW5B,KAAKqkB,KAAK,aACvBtiB,EAAO,GACLD,EAAY9B,KAAK+5M,iBAAiBnQ,UAAU43B,UAElD,OAAc,MAAT1/N,OAAS,EAATA,EAAW8N,SAEhBhO,EAAS+W,QAAQ,YACT7W,EAAUsqD,SAASpqD,EAAKswB,QACxBvwB,EAAK8T,KAAK7T,KAIXD,GARwBH,GAU5BC,qCAAP,SAAgCD,GAC5B,YAAKm/N,oBACEjhO,yBAAsCssD,SAASxqD,6CAxQrD9B,WAEAsB,OAGIS,0UAAgBR,KAD5BxK,iBACYgL,MAwQN,WAAYA,aAAeE,oDAC9B,OAAOH,UAAgBN,IAAkBiR,GAAEgvC,WAAC1/C,EAAO,IAAOE,oSCrP1D,WAAoB4U,EACR9U,EACAD,EACAG,EACAD,EACAE,GALZ,WAAoBhC,cACRA,sBACAA,wBACAA,wBACAA,wBACAA,gBAfJA,cAA0B,GAE1BA,yBAAsB,IAAII,IAA2B,GACpDJ,kBAAeA,KAAKyhO,oBAAoB91L,eAEzC3rC,0BAAuB,IAAII,IAA6B,GACvDJ,mBAAgBA,KAAK0hO,qBAAqB/1L,eA2M3C3rC,0BAAuB,SAACqC,IAC5B,IAAMqU,EAAerU,GAAMqiF,MAAMi9I,aAC3B3qO,GAAmBiL,EAAK2/N,SAASntK,UAAU,aAAK,UAAE5tC,KAAOnQ,IAC3D1f,IAAoB,GACpBiL,EAAKokJ,aAAarvJ,KArMtBgJ,KAAK+0J,iBAAiB8sE,kBAAkB/vN,UAAU,SAACzP,KAC1CA,IACLJ,EAAKokJ,aAAa,KAEtBrmJ,KAAKqhB,SAASygN,WAAW9hO,KAAK+hO,sBAZlC,6BAAIpgO,4BAAa,KAAjB,WAAsB,OAAO3B,KAAK4hO,SAAShyN,wCAgBpCjO,6BAAP,sBACI3B,KAAKs+M,OAAO0jB,OACP3tN,MAEG,OAAO,YAAS,oBAAiBs7K,QACjC,OAAI,WACI,MAAiBh5K,EAAKsrN,yBAApBrgO,EAAKC,QAAEE,EAAGF,MAEhB,MAAO,CACHglB,GAAIlQ,EAAK2nM,OAAO4jB,uBAAuBl9M,GACvCm9M,IAAKpgO,EACLkP,YAAa0F,EAAKqnM,8BAA8Bp8M,EAAM+7M,SAASE,aAC/DrqK,UAAW5xC,EAAMsY,UACjBkoN,SAAoC,WAA1BxgO,EAAM+7M,SAASztB,WAGjC,OAAO,YAAe,OAACruL,EAAYsgO,IAAI/1K,SAAS,cAEnDt6C,UAAU,YAAe,SAAKuwN,gBAAgBxgO,MAGvDF,yCAAoBgV,EAAuB9U,GAEvC,IAAMD,GAAmB,mBAAc5B,KAAK4hO,SAAU,YAAK,SAAEnuL,gBAAkB98B,IAC3E/U,EAAmB,IAGvB5B,KAAK4hO,SAAShgO,GAAkB66B,MAAQ56B,EAExC7B,KAAKsiO,iBAGT3gO,uCAAkBgV,GACd,IAAM9U,EAAmB7B,KAAK4hO,SAASntK,UAAU,YAAK,SAAE5tC,KAAOlQ,EAAYkQ,KACvEhlB,EAAmB,IAEvB7B,KAAK4hO,SAAS//N,GAAoB8U,EAGlC3W,KAAKsiO,iBAGF3gO,4BAAP,SAAuBgV,GAEnB,IAAM9U,EAAkB7B,KAAK4hO,SAAShyN,QAAU5P,KAAK4hO,SAAS5hO,KAAK4hO,SAAShyN,OAAS,GACjF/N,GAAmBA,EAAgBsgO,IAAI3kM,SAAS,QAChDx9B,KAAK4hO,SAASluH,MAIO1zG,KAAK4hO,SAASntK,UAAU,YAAK,SAAE5tC,KAAOlQ,EAAYkQ,KACpD,GACnB7mB,KAAK4hO,SAAS/rN,KAAKc,GAGvB3W,KAAKsiO,eAELtiO,KAAKyhO,oBAAoB/5L,KAAK/wB,IAG3BhV,mBAAP,WAEI,IAAMgV,EAAqB3W,KAAK4hO,SAAShyN,QAAU5P,KAAK4hO,SAAS5hO,KAAK4hO,SAAShyN,OAAS,GACxF,IAAK+G,EAED,OAAO3W,KAAKwvK,iBAAiBzsH,kBAIjC,IAAMlhD,EAAsB7B,KAAK4hO,SAAS5hO,KAAK4hO,SAAShyN,OAAS,GACjE,OAAI/N,EAEI8U,EAAmByrN,WAAavgO,EAAoBugO,SAC7CpiO,KAAKuiO,iBAAiB1gO,EAAqB7B,KAAK4hO,SAAShyN,OAAS,GAEtE5P,KAAKwiO,aAAa3gO,EAAqB7B,KAAK4hO,SAAShyN,OAAS,GAGlE5P,KAAKwvK,iBAAiBzsH,mBAG1BphD,gCAAP,SAA2BgV,GAEvB,IAAM9U,EAAc7B,KAAK4hO,SAAS5vM,KAAK,aAAK,UAAEnL,KAAOlQ,EAAKkQ,KACpDjlB,EAAmB5B,KAAK4hO,SAASjmN,QAAQ9Z,GAG/C,GAD2B7B,KAAK4hO,SAAS5hO,KAAK4hO,SAAShyN,OAAS,GACzCwyN,SAAU,CAEvB,MAAapiO,KAAKiiO,wBAAuB,GAApChgO,GAAFH,IAAKA,OAEd,GAAID,EAAYsgO,KAAOlgO,EAEnB,OAAOjC,KAAKwiO,aAAa,KAAM5gO,GAGvC,OAAO5B,KAAKwiO,aAAa3gO,EAAaD,IAG1CD,mCAGI,KAD2B3B,KAAK4hO,SAAShyN,QAAU5P,KAAK4hO,SAAS5hO,KAAK4hO,SAAShyN,OAAS,IAGpF,OAAO5P,KAAKwvK,iBAAiBzsH,kBAGjC,IAAMlhD,GAAsB,cAAS7B,KAAK4hO,SAAU,YAAK,OAAC7/N,EAAEqgO,WAEtDxgO,EAA2BC,EAAsB7B,KAAK4hO,SAASjmN,QAAQ9Z,GAAuB7B,KAAK4hO,SAAShyN,OAAS,EAE3H,OAAO5P,KAAKuiO,iBAAiB1gO,EAAqBD,IAG9CD,6BAAR,SAAyBgV,EAA8B9U,GAC7C,MAAa7B,KAAKiiO,wBAAuB,GAApCngO,GAAFF,IAAKA,OAERI,GAAgC,MAAf2U,OAAe,EAAfA,EAAiBwrN,OAAQrgO,EAAM,KAAO6U,EAC7D,OAAO3W,KAAKwiO,aAAaxgO,EAAgBH,IAGrCF,yBAAR,SAAqBgV,EAA0B9U,GAA/C,WAEI,OAAQ8U,GAAe3W,KAAKuc,iBAAiBzC,SAAS,CAACnD,EAAYwrN,KAAMxrN,EAAY1F,cAAgBjR,KAAKuc,iBAAiBzC,SAAS,OAC/H6a,KAAK,SAAC5yB,GAEH,OAAIA,GAEuB,MAAnBF,GAAyBD,EAAKykJ,aAAaxkJ,GAE/CD,EAAK0gO,eACEt6L,QAAQmE,SAAQ,IAEpBnE,QAAQmE,SAAQ,MAI3BxqC,yBAAR,WAEI,IAAIgV,EAAqBrV,KAAOtB,KAAK4hO,UACjC5hO,KAAK4hO,SAAShyN,OAAS,GAAG+G,EAAsBiF,OAAO5b,KAAK4hO,SAAShyN,OAAS,GAG9E,MAAa5P,KAAKiiO,wBAAuB,GAApClgO,GAAFF,IAAKA,OACR8U,EAAsB/G,OAAS,GAAK+G,EAAsB,GAAGwrN,MAAQpgO,GACrE4U,EAAsBgoM,QAI1B3+M,KAAK0hO,qBAAqBh6L,KAAK/wB,IAG5BhV,uBAAP,WAEI,OAAO3B,KAAK4hO,SAAShyN,OAAS,GAG3BjO,yBAAP,SAAoBgV,GAEE,MAAdA,GAEA3W,KAAKyiO,gBAAgB9rN,EAAY3W,KAAK4hO,SAAShyN,OAAS,GACxD5P,KAAK4hO,SAAShmN,OAAOjF,EAAY3W,KAAK4hO,SAAShyN,OAAS+G,EAAa,KAErE3W,KAAKyiO,kBACLziO,KAAK4hO,SAAShyN,OAAS,GAG3B5P,KAAK0hO,qBAAqBh6L,KAAK1nC,KAAK4hO,WAGhCjgO,4BAAR,SAAwBgV,EAAqB9U,GACzC,QAASD,EAAI+U,GAAc,EAAG/U,GAAiB,MAAZC,EAAmBA,EAAW7B,KAAK4hO,SAAShyN,QAAShO,IACpF5B,KAAK0iO,eAAe1iO,KAAK4hO,SAAShgO,KAIlCD,2BAAR,SAAuBgV,GACnB,IAAM9U,EAAoB8U,GAAeA,EAAY88B,eAEhD5xC,GAAqB7B,KAAK4hO,SAAS/xN,KAAK,YAAK,SAAEgX,KAAOlQ,EAAYkQ,IAAMjlB,EAAE4xC,YAAc78B,EAAY68B,oBAElGtyC,eAAsBW,IAWzBF,mCAAR,SAA+BgV,GAK3B,QAJI9U,EAAQ7B,KAAK09M,eACb97M,EAAcC,EAAM87M,SAAS5B,IAG1BplM,EAAoB9U,EAAMm9M,WAAan9M,EAAMu9M,SAASxvM,QACzD/N,EAAQ8U,EAAoB9U,EAAMm9M,WAAan9M,EAAMu9M,SAASv9M,EAAMu9M,SAASxvM,OAAS,GACtFhO,EAAWN,OAAOM,GAAgBC,EAAM87M,SAAS5B,KAErD,MAAO,CAAE4mB,MAAO9gO,EAAOk6M,IAAKn6M,EAAYw0B,IAAI,YAAK,SAAE65J,OAAMl3I,KAAK,OAG1Dp3C,0CAAR,SAAsCgV,GAClC,IAAI9U,EAAY,GAChB,QAASD,KAAO+U,EAAQ,CAEpB9U,EADeD,EAAIw7B,UAAUx7B,EAAI+Z,QAAQ,KAAO,IAC5BhF,EAAO/U,GAE/B,OAAOC,GAGXF,2CACI,IAAK3B,KAAK4hO,UAAY5hO,KAAK4hO,SAAShyN,OAAS,EAAG,OAAO,EAEvD,IAAM+G,EAAqB3W,KAAK4hO,SAAS5hO,KAAK4hO,SAAShyN,OAAS,GAEhE,SAD4B5P,KAAK4hO,SAAS5hO,KAAK4hO,SAAShyN,OAAS,GACnCwyN,UAAYzrN,EAAmByrN,oDAxQ7BzyC,YAA/BA,YAIApuL,YACAF,WAFAD,WALqBvK,QAqBjB8K,qUAAmBpB,KAD/BmvL,iBACY/tL,sLCmBT,WAAoBT,EACRX,EACAe,GAFZ,WAAoBtB,0BACRA,iBACAA,UAvBJA,yBAAwD,IAAI82L,IAAgB92L,KAAK4iO,iBAChF5iO,iBAAcA,KAAK6iO,oBAAoBl3L,eACzC3rC,aAAU,CACb8iO,mBAAoB,CAChBryJ,MAAM,EACNk3H,aAAa,IAsGrB3nM,2BAAwB,SAACwB,eAMjBO,EACJ,OANI6U,EAAKmsN,qBACLC,aAAapsN,EAAKmsN,oBAClBnsN,EAAKmsN,mBAAqB,OAIM,QAAhCpsN,EAAY,QAAZhV,IAAKf,eAAO,eAAEkiO,0BAAkB,eAAEryJ,OAAiB,SAATjvE,EAC1CO,EAAU6U,EAAK8Z,GAAGne,GAAG,gCACkB,QAAhC3Q,EAAY,QAAZC,IAAKjB,eAAO,eAAEkiO,0BAAkB,eAAEn7B,cAAwB,gBAATnmM,IACxDO,EAAU6U,EAAK8Z,GAAGne,GAAG,iCAGzBxQ,IAAY6U,EAAKmsN,mBAAqBtlM,WAAW,WAC7C7mB,EAAKqsN,UAAUlrM,YAAYh2B,GAC3B6U,EAAKmsN,mBAAqB,MAC3B,QAEMhhO,GArGT/B,KAAKkjO,oBAAsBljO,KAAKmjO,cAChCnjO,KAAKojO,mBACAC,QAAQ,CAACxsO,YAAoBA,WAAmBA,YAAoBA,WAAmBA,cACvFib,UAAU,WACP,IAAMtQ,EAAUoV,EAAKgsN,gBACfjhO,EAAciV,EAAKusN,cACrBxsN,GAAQ,EACRhV,IAAgBiV,EAAKssN,sBACrBvsN,EAAQC,EAAK0sN,sBAAsB,eACnC1sN,EAAKssN,oBAAsBvhO,GAG3BH,IAAYoV,EAAK2sN,sBACf5sN,GAASC,EAAK2sN,qBAAwB5sN,EAAQC,EAAK0sN,sBAAsB,SAC3E1sN,EAAK2sN,mBAAqB/hO,EAC1BoV,EAAKisN,oBAAoBn7L,KAAK9wB,EAAK2sN,uBA7BnD,6BAAWliO,oBAAK,KAAhB,WACI,MAAO,CACH,iBAAkBrB,KAAKojO,mBAAmBI,UAAU3sO,aACpD,eAAgBmJ,KAAKojO,mBAAmBI,UAAU3sO,YAClD,gBAAiBmJ,KAAKojO,mBAAmBI,UAAU3sO,aACnD,eAAgBmJ,KAAKojO,mBAAmBI,UAAU3sO,YAClD,iBAAkBmJ,KAAKojO,mBAAmBI,UAAU3sO,+CA8BrDwK,0BAAP,WACI,OAAIrB,KAAKojO,mBAAmBI,UAAU3sO,aAA4BuJ,kBAC9DJ,KAAKojO,mBAAmBI,UAAU3sO,YAA2BuJ,iBAC7DJ,KAAKojO,mBAAmBI,UAAU3sO,aAA4BuJ,kBAC9DJ,KAAKojO,mBAAmBI,UAAU3sO,YAA2BuJ,iBAC7DJ,KAAKojO,mBAAmBI,UAAU3sO,aAA4BuJ,uBAAlE,GAGGiB,kBAAP,WACI,OAAQnB,cAAuBE,aAG5BiB,qBAAP,WAII,MAA6B,UADdsuL,cACD8zC,YAGXpiO,sBAAP,WAQI,MAA6B,YADdsuL,cACD8zC,YAGXpiO,qBAAP,WAII,MAA6B,WADdsuL,cACD8zC,YAGXpiO,wBAAP,WAEI,OADoBsuL,mBAIjBtuL,wBAAP,WACI,OAAO4gD,OAAOyhL,WAAW,SAASC,SAG/BtiO,0BAAP,WACI,IAAMH,EAASyuL,cACf5tJ,QAAQC,IAAI9gC,IAGTG,yBAAP,WACI,IAAMH,EAAalB,KAAK4iO,gBACxB,OAAQ1hO,IAAed,kBAA+Bc,IAAed,mBAGlEiB,2BAAP,WAEI,OADmBrB,KAAK4iO,kBACDxiO,4DA3HtBvJ,YAQAiJ,WAHA+yL,SAUIxxL,qUAAaD,KAHzBsuL,cAAW,CACR7jJ,WAAY,UAEHxqC,uGCLDd,uIAAa,KACrBqW,uBACAA,qBACAA,qCACAA,0CAsBA,WAAoBpV,EACRG,EACAgV,EACA9U,GAHQ7B,4BACRA,wBACAA,2BACAA,2BANJA,gCAA6B,IAAI0vL,IAChC1vL,0BAAuBA,KAAK4jO,2BAA2Bj4L,eAOhE,6BAAI/0B,yBAAU,KAAd,WAA4B,OAA0B,MAAlB5W,KAAK6jO,2CACzC/3N,sBAAI8K,8BAAe,KAAnB,WAAgC,OAAO5W,KAAK67M,WAAa77M,KAAK6jO,UAAUtmM,gBAAkB,oCAC1FzxB,sBAAI8K,qCAAsB,KAA1B,WAAuC,OAAO5W,KAAK67M,WAAa77M,KAAK6jO,UAAUC,uBAAyB,oCACxGh4N,sBAAI8K,4BAAa,KAAjB,WAA8B,OAAO5W,KAAK67M,WAAa77M,KAAK6jO,UAAUvpM,kBAAe,mCACrFxuB,sBAAI8K,wBAAS,KAAb,WAA0B,OAAO5W,KAAK67M,WAAa77M,KAAK6jO,UAAU1xH,eAAY,mCAC9ErmG,sBAAI8K,2BAAY,KAAhB,WAA4C,OAAO5W,KAAK67M,WAAa77M,KAAK+jO,eAAiB,oCAC3Fj4N,sBAAI8K,wBAAS,KAAb,sBAAyB,OAAO5W,KAAK67M,WAAa/vM,OAAOijC,KAAK/uC,KAAK+jO,gBAAgB3tM,IAAI,YAAK,SAAK2tM,eAAepiO,KAAM,oCACtHmK,sBAAI8K,0BAAW,KAAf,WAA8D,OAAO5W,KAAK67M,WAAa77M,KAAKgkO,cAAgB,oCAG5GptN,gCAAWpV,EACPG,EACAgV,EACA9U,GAHJ,WASI,QANA,cACA7B,KAAK6jO,UAAYriO,EACjBxB,KAAK+jO,eAAiBviO,EAAWA,EAASsM,cAAW,EAErD9N,KAAKo+M,+BAA+B58M,GAE9BA,EAAU,CACZxB,KAAKikO,sBAAwBjkO,KAAKikO,oBAAoBptC,QAAU72L,KAAKikO,oBAAoB3xN,cAEzF,IAAMvQ,EAAmB/B,KAAK+5M,iBAAiBlc,UAAU+Q,uBAAuB5uM,KAAK6jO,UAAU/1N,UAC1FuG,QACGs7K,QACA,OAAS,SAAC3tL,GACN,GAAIA,EACA,OAAOJ,EAAKm4M,iBAAiBlc,UAAUiR,yBAEvC,KAAM,2BAEd,QAAI,YAAM,SAAKo1B,eAAeliO,MAC9B,QAAI,WAAM,SAAKmiO,oBAAoBC,WACnC,QAAI,WAAQziO,GAAeA,OAC3B,OAAI,WAAM,YAElB,YAAKsiO,oBAAsBliO,EACtB+P,UAAU,CACP41B,KAAM,YACF9lC,EAAKgiO,2BAA2Bl8L,KAAKnnC,EAAc8jO,UACpD7kL,MAAO,YACN59C,EAAKgiO,2BAA2Bl8L,KAAKnnC,EAAc+jO,UAIxDviO,EAGX,IAAKP,EAAU,CACXxB,KAAKukO,wBAA0BvkO,KAAKukO,sBAAsB1tC,QAAU72L,KAAKukO,sBAAsBjyN,cAE/F,IAAMxQ,EAAuB9B,KAAK+5M,iBAAiBlc,UAAUgR,2BAC5Dx6L,MACG,QAAI,WACIxS,GACAD,EAAKu7M,0BAETv7M,EAAKsiO,oBAAe,MAExB,QAAI,WAAM,SAAKC,oBAAoBK,UACnC,QAAI,WAAQ7tN,GAAiBA,OAC7B,OAAI,WAAM,YAEd,YAAK4tN,sBAAwBziO,EACxBgQ,UAAU,YACPlQ,EAAKgiO,2BAA2Bl8L,KAAKnnC,EAAc+jO,SAEpDxiO,IAKf8U,gCAAWpV,EAAsBG,sBAC7B3B,KAAKo9M,gBAAW,EAAW,KAAM57M,EAASG,IAI9CiV,oCAAepV,GACXxB,KAAKgkO,cAAgBxiO,GAGzBoV,4CAAuBpV,EAAmBG,GACtC3B,KAAKs+D,oBAAoBU,QAAQ,YAAax9D,GAC9CxB,KAAKs+D,oBAAoBU,QAAQ,WAAYr9D,IAGjDiV,+CACI5W,KAAKs+D,oBAAoB82B,WAAW,aACpCp1F,KAAKs+D,oBAAoB82B,WAAW,aAGxCx+E,oCACI,OAAO5W,KAAKs+D,oBAAoBoB,QAAQ,cAG5C9oD,mCACI,OAAO5W,KAAKs+D,oBAAoBoB,QAAQ,aAG5C9oD,kDAA6BpV,GAA7B,gBAA6B,cACzB,IAAMmV,GAAkB3W,KAAKqvI,qBAAqBC,gBAAgBxvI,qBAClE,GAAK6W,KAAkBA,EAAiB,GAExC,KAAM9U,EAAwB8U,EAAiB,EAAMA,EAAiB,EAAK,EAEvE3W,KAAKykO,+BACLzB,aAAahjO,KAAKykO,8BAClBzkO,KAAKykO,6BAA+B,MAGpCzkO,KAAK0kO,qCACL1B,aAAahjO,KAAK0kO,oCAClB1kO,KAAK0kO,mCAAqC,MAG1CljO,GAAcxB,KAAK6jO,YACfhiO,IACA7B,KAAK0kO,mCAAqCjnM,WAAW,WACjD97B,EAAKiiO,2BAA2Bl8L,KAAKnnC,EAAcokO,gBAC7B,IAAvB9iO,EAA8B,KAGrC7B,KAAKykO,6BAA+BhnM,WAAW,WAC3C97B,EAAKijO,kBACW,IAAjBjuN,EAAwB,OAI3BC,2BAAR,WACI5W,KAAKo+M,8BAA6B,GAClCp+M,KAAK4jO,2BAA2Bl8L,KAAKnnC,EAAcskO,mDAvKlD3kO,WAEAkB,WAEAC,WADAE,OAaIqV,qUAAc1V,KAH1BrK,cAAW,CACRg1C,WAAY,UAEHj1B,86DCHT,WAAoBrW,EAA4De,GAAhF,MACID,cAAOrB,KADS,oCAA4D4W,kBAFxEA,yBAAyD,KAM3D,OATwBxW,OASxBc,4BAAN,SAAsBX,EAClBe,EACAsV,EACApV,mGAGA,cAA+B,IAAM,QAAexB,KAAK8kO,cAAcC,qCAEvE,OAFApjO,EAAKqjO,uBAA0BnjO,SAAsE4T,SAEhGzV,KAAKilO,wCAAwC1kO,EAAee,GAAYsO,SAKvE+G,EAAc3W,KAAKklO,kBACbnrC,oBAAsBnjL,EAClCD,EAAYmjL,MAAQt4L,EAEpBmV,EAAYwuN,SAAW5kO,EACvBoW,EAAYyuN,gBAAkB9jO,EAE9BqV,EAAY2M,gBAAgB,SAAC1hB,YAXzB5B,KAAKoT,GAAGC,YAAYrT,KAAKuS,GAAG,8CAC5B,WAaRrR,6DAAwCX,EAAkBe,SACtD,OAAkC,QAA3BsV,OAAKouN,8BAAsB,eAAEtpN,OAAO,YAAK,UAAEypN,UAAY5kO,GAAaiB,EAAEmY,YAAcrY,GAAeE,EAAEmY,YAAerY,MAG/HJ,kEACI,OAAO,SAACI,EAAgCsV,GAAoD,SAAKkuN,cAAc/qC,oBAAoBz4L,EAAwBsV,KAGvJ1V,2BAAR,WACI,IAAMX,EAAmBP,KAAKs9H,yBAAyBC,wBAAwBmyD,KAE/E,OADqB1vL,KAAK2wM,iBAAiBlzE,gBAAqBl9H,GAC5C40B,mDAvDnBt+B,kCAQAigM,OAII51L,qUAAYhB,GADxB,gBAAW,CAAE2rC,WAAY,UACb3qC,IAAqByuL,+JCK9B,WAAoBpuL,mCANpBvB,eAA8C,GAGtCA,qBAAkB,IAAI82L,IACrB92L,kBAAeA,KAAKqlO,gBAAgB15L,eAK7C,iCAAKpqC,EAAqBF,EAAeH,EAAuCX,EAC5Ee,EAAwBsV,EAA6BpV,GACrD,IAAIG,EAAkB3B,KAAKslO,UAAU/jO,KAChCI,GAAmC,YAAhBJ,MACpBI,EAAkB3B,KAAKulO,yBACPjxN,KAAO/S,EACvBI,EAAgB86B,MAAQp7B,EACxBM,EAAgB0uM,cAAgBrwM,KAAKswM,eAAepvM,GACpDS,EAAgB6jO,MAAQjlO,EACxBoB,EAAgB8jO,wBAA0BnkO,EAC1CK,EAAgB+jO,SAAW9uN,EAC3BjV,EAAgBwtK,MAAQ3tK,EACxBxB,KAAKslO,UAAU/jO,GAAeI,GAGlCA,EAAgBgkO,aAAevlO,aAGnCgB,0BAAKG,GACD,IAAMF,EAAkBrB,KAAKslO,UAAU/jO,GACvC,GAAKF,EAEL,OAAIA,EAAgBukO,gBAEpBvkO,EAAgBskO,aAAevlO,aACxB,IAGXgB,2BAAMG,GACF,IAAMF,EAAkBrB,KAAKslO,UAAU/jO,IAClCF,IAELA,EAAgBskO,aAAevlO,cAGnCgB,8BAASG,GACL,IAAMF,EAAkBrB,KAAKslO,UAAU/jO,GACvC,OAAOF,GAAmBA,EAAgBskO,cAG9CvkO,oCAAeG,EAAqBF,GAChC,IAAMH,EAAkBlB,KAAKslO,UAAU/jO,IAClCL,IAEDA,EAAgBykO,eAAiBtkO,IAAOH,EAAgBykO,aAAetkO,GAC3ErB,KAAKqlO,gBAAgB39L,KAAK,CAAEm+L,YAAatkO,EAAawP,MAAO1P,MAGjED,gDACI0K,OAAOijC,KAAK/uC,KAAKslO,WAAW3sN,QAAQ,YAChCpX,EAAKumJ,MAAMzmJ,KAEfrB,KAAKslO,UAAY,IAGrBlkO,oCAAeG,GACPA,GAAevB,KAAKslO,UAAU/jO,KAC9BvB,KAAK8nJ,MAAMvmJ,UACJvB,KAAKslO,UAAU/jO,KAItBH,kCAAR,WACI,IAAMG,EAAmBvB,KAAKs9H,yBAAyBC,wBAAwBoyD,KAE/E,OADqB3vL,KAAK2wM,iBAAiBlzE,gBAAqBl8H,GAC5C4zB,UAGhB/zB,2BAAR,SAAuBG,GACnB,OAAOA,aAAmBmuL,cACpB,IAAI74L,KAAe0K,EAASvB,KAAK2wM,kBACjC,IAAI95M,KAAgB0K,EAASvB,KAAK2wM,iBAAkB9d,KAAa7yL,KAAKs9H,oEA1F3EoyD,8BASItuL,qUAAclB,KAH1BwvL,cAAW,CACR7jJ,WAAY,UAEHzqC,q3BCRDuuL,IAaAmH,EAOAjE,GAMAzyL,EAQAF,EASAJ,EAOAsB,EAOAG,EAKAF,EAOAH,EAMAX,EAMAe,EAQAsV,EAMApV,EAOAG,EAWAgV,EAOA9U,EAOAD,EAMAG,EAMAD,EAOAE,EAMAC,EAMAI,GAMAqU,EAKA1f,GAKAC,GAOAC,GAQAC,GAKAC,GAMAC,GA+CAC,GAOAC,EAMAC,EAMAC,GAMAC,GASAC,GAIAC,eA7RAE,QAA0B,KAClCsuE,kBACAtuE,oBACAA,oBACAA,oCACAA,kCACAA,wBACAA,sCACAA,0BACAA,8BACAA,gBACAA,gCAEJ,SAAYA,GACRA,0BACAA,kBACAA,kBACAA,4BAJJ,CAAYg/L,MAAoB,KAOhC,SAAYh/L,GACRA,sBACAA,sBACAA,cAHJ,CAAY+6L,QAAqB,KAMjC,SAAY/6L,GACRA,8BACAA,4BACAA,8BACAA,4BACAA,8BALJ,CAAYsI,MAAe,KAQ3B,SAAYtI,GACRA,8BACAA,4BACAA,8BACAA,4BACAA,8BACAA,kCANJ,CAAYoI,MAAe,KAS3B,SAAYpI,GACRA,kBACAA,kBACAA,kCACAA,kBAJJ,CAAYgI,MAAe,KAO3B,SAAYhI,GACRA,cACAA,oBACAA,cAHJ,CAAYsJ,MAA2B,KAOvC,SAAYtJ,GACRA,UACAA,YAFJ,CAAYyJ,MAAU,KAKtB,SAAYzJ,GACRA,kBACAA,kBACAA,8BACAA,cAJJ,CAAYuJ,MAAY,KAOxB,SAAYvJ,GACRA,sBACAA,kBACAA,gBAHJ,CAAYoJ,MAAa,KAMzB,SAAYpJ,GACRA,oBACAA,sBACAA,sBAHJ,CAAYyI,MAAsB,KAMlC,SAAYzI,GACRA,cACAA,gBACAA,sBACAA,kBACAA,cALJ,CAAYwJ,MAAiB,KAQ7B,SAAYxJ,GACRA,UACAA,gBACAA,kBAHJ,CAAY8e,MAAmB,KAM/B,SAAY9e,GACRA,sBACAA,oCACAA,8CACAA,4CAJJ,CAAY0J,MAA0B,KAOtC,SAAY1J,GACRA,gBACAA,YACAA,4BACAA,gBACAA,gBACAA,4BACAA,sBACAA,sBARJ,CAAY6J,MAA+B,KAW3C,SAAY7J,GACRA,cACAA,0BACAA,sBACAA,oBAJJ,CAAY6e,MAAmC,KAO/C,SAAY7e,GACRA,mBACAA,qBACAA,uBACAA,+BAJJ,CAAY+J,MAA0B,KAOtC,SAAY/J,GACRA,sBACAA,kBACAA,0BAHJ,CAAY8J,MAAmB,KAM/B,SAAY9J,GACRA,cACAA,eACAA,eAHJ,CAAYiK,MAAa,KAMzB,SAAYjK,GACRA,gBACAA,oBACAA,oBACAA,cAJJ,CAAYgK,MAAwB,KAOpC,SAAYhK,GACRA,cACAA,kBACAA,kBAHJ,CAAYkK,MAAqB,KAMjC,SAAYlK,GACRA,gBACAA,gBACAA,gBAHJ,CAAYmK,MAAsB,KAMlC,SAAYnK,GACRA,cACAA,gBACAA,kBAHJ,CAAYuK,QAAkB,KAM9B,SAAYvK,GACRA,kBACAA,kBAFJ,CAAY4e,MAAiB,KAK7B,SAAY5e,GACRA,cACAA,gBAFJ,CAAYd,QAAiB,KAK7B,SAAYc,GACRA,cACAA,YACAA,gBACAA,sBAJJ,CAAYb,QAAc,KAO1B,SAAYa,GACRA,sBACAA,YACAA,oBACAA,oBACAA,gBALJ,CAAYZ,QAAuB,KAQnC,SAAYY,GACRA,oBACAA,kBAFJ,CAAYX,QAAc,KAK1B,SAAYW,GACRA,kBACAA,kBACAA,oBAHJ,CAAYV,QAAyB,KAMrC,SAAYU,GACRA,wBACAA,wBACAA,kBAEAA,kCACAA,gCACAA,8CACAA,4CACAA,oDACAA,gEAEAA,sEACAA,kDACAA,wDACAA,4DACAA,gDACAA,0DACAA,oDACAA,oDACAA,wDACAA,sDAEAA,0DACAA,gDACAA,0DACAA,4DAEAA,wDACAA,8EACAA,8EAEAA,gCACAA,8DAEAA,sEACAA,kEACAA,4EAEAA,oDACAA,gEACAA,8DACAA,oDAEAA,oEA5CJ,CAAYT,QAAiB,KA+C7B,SAAYS,GACRA,4BACAA,sBACAA,0BACAA,oBAJJ,CAAYR,QAAqB,KAOjC,SAAYQ,GACRA,cACAA,kBACAA,kBAHJ,CAAYP,MAAgB,KAM5B,SAAYO,GACRA,YACAA,oBACAA,oBAHJ,CAAYN,MAAmB,KAM/B,SAAYM,GAEXA,UACAA,YAHD,CAAYL,QAAS,KAMrB,SAAYK,GACRA,uBACAA,uBACAA,mCACAA,mCACAA,yBACAA,uBANJ,CAAYJ,QAAqB,KASjC,SAAYI,GACRA,4CADJ,CAAYH,QAAqB,KAIjC,SAAYG,GACRA,cACAA,oBACAA,gBACAA,oBAJJ,CAAYF,QAAY,uBASpB,aAEOoI,qBAAkBE,EAClBF,kBAAeqB,EACfrB,gBAAauB,EACbvB,uBAAoBsB,EACpBtB,yBAAsB4W,EACtB5W,gCAA6BwB,EAC7BxB,qCAAkC2B,EAClC3B,gCAA6B6B,EAC7B7B,yBAAsB4B,EACtB5B,8BAA2B8B,EAC3B9B,0BAAuB82L,EACvB92L,mBAAgB+B,EAChB/B,4BAAyBiC,EACzBjC,uBAAoBhJ,GACpBgJ,oBAAiB/I,GACjB+I,wBAAqBqC,GACrBrC,+BAA4B5I,GAC5B4I,2BAAwB1I,GACxB0I,sBAAmBzI,EACnByI,oBAAiB7I,GACjB6I,yBAAsBxI,EACtBwI,2BAAwBtI,GACxBsI,2BAAwBrI,gDAzBtBG,yWAAe43L,KAD3B74L,iBACYiB,sJC7RFkI,mBAAuC,IAAInJ,eAC3CmJ,oBAAsD,IAAInJ,eAC1DmJ,gBAAmC,IAAInJ,eACvCmJ,uBAA0C,IAAInJ,eAE7CmJ,2BAAwB,IAAI0vL,IAC7B1vL,mBAAgBA,KAAK8lO,sBAAsBn6L,eAM1C3rC,2BAAwB,IAAI2vL,IAA+B,GAC1D3vL,aAAUA,KAAK+lO,sBAAsBp6L,eAMtC3rC,kCAA+B,IAAI82L,IAAgB,IAClD92L,mBAAgBA,KAAKgmO,6BAA6Br6L,eAMnD3rC,6BAA0B,IAAI2vL,IAAuB,GACpD3vL,eAAYA,KAAKimO,wBAAwBt6L,eAM1C3rC,yBAAsB,IAAI2vL,IAAiC,GAC1D3vL,iBAAcA,KAAKkmO,oBAAoBv6L,eAOxC3rC,yBAAsB,IAAI0vL,IACzB1vL,iBAAcA,KAAKmmO,oBAAoBx6L,eAMxC3rC,gCAA6B,IAAI2vL,IAA6D,GAC7F3vL,wBAAqBA,KAAKomO,2BAA2Bz6L,eAMtD3rC,8BAA2B,IAAI0vL,IAC9B1vL,sBAAmBA,KAAKqmO,yBAAyB16L,eAMlD3rC,4BAAyB,IAAI0vL,IAC5B1vL,2BAAwBA,KAAKsmO,uBAAuB36L,eAMrD3rC,6BAA0B,IAAI0vL,IAC7B1vL,4BAAyBA,KAAKumO,wBAAwB56L,eAMvD3rC,wBAAqB,IAAI0vL,IACxB1vL,gBAAaA,KAAKwmO,mBAAmB76L,eAMtC3rC,+BAA4B,IAAI0vL,IAC/B1vL,uBAAoBA,KAAKymO,0BAA0B96L,eAMpD3rC,uBAAoB,IAAI0vL,IACvB1vL,eAAYA,KAAK0mO,kBAAkB/6L,eAMpC3rC,qBAAkB,IAAI0vL,IACrB1vL,cAAWA,KAAK2mO,gBAAgBh7L,eAUjC3rC,yBAAsB,IAAI0vL,IACzB1vL,kBAAeA,KAAK4mO,oBAAoBj7L,eArGjD,8CAAkB7rC,GACdE,KAAK8lO,sBAAsBp+L,KAAK5nC,IAMpCI,mCAAcJ,GACVE,KAAK+lO,sBAAsBr+L,KAAK5nC,IAMpCI,yCAAoBJ,GAChBE,KAAKgmO,6BAA6Bt+L,KAAK5nC,IAM3CI,uCACIF,KAAKimO,wBAAwBv+L,MAAK,IAOtCxnC,oCAAeJ,GACXE,KAAKkmO,oBAAoBx+L,KAAK5nC,IAMlCI,uCAAkBJ,GACdE,KAAKmmO,oBAAoBz+L,KAAK5nC,IAMlCI,2CAAsBJ,EAA2BsB,GAC7CpB,KAAKomO,2BAA2B1+L,KAAK,CAAEm/L,kBAAmB/mO,EAAmB4kF,MAAOtjF,KAMxFlB,yCAAoBJ,EAA2BsB,EAAgBG,EAAsBF,GACjFrB,KAAKqmO,yBAAyB3+L,KAAK,CAAEm/L,kBAAmB/mO,EAAmB4kF,MAAOtjF,EAAOqY,KAAIlY,EAAEulO,SAAQzlO,KAMpGnB,2BAAP,SAAsBJ,GAClBE,KAAKsmO,uBAAuB5+L,KAAK5nC,IAM9BI,4BAAP,SAAuBJ,GACnBE,KAAKumO,wBAAwB7+L,KAAK5nC,IAM/BI,iCAAP,SAA4BJ,GACxBE,KAAKwmO,mBAAmB9+L,KAAK5nC,IAM1BI,4BAAP,SAAuBJ,GACnBE,KAAKymO,0BAA0B/+L,KAAK5nC,IAMjCI,8BAAP,SAAyBJ,GACrBE,KAAK0mO,kBAAkBh/L,KAAK5nC,IAMzBI,wBAAP,WACIF,KAAK2mO,gBAAgBj/L,MAAK,IAGvBxnC,wBAAP,WACIF,KAAK2mO,gBAAgBj/L,MAAK,IAMvBxnC,wBAAP,SAAmBJ,GACfE,KAAK4mO,oBAAoBl/L,KAAK5nC,IAlHzBI,qUAAgB2yL,KAH5Bh8L,cAAW,CACRg1C,WAAY,UAEH3rC,2FCkBAyvL,EAAa,IApB1B,WAGI3vL,gBAA4C,GAY5CA,sCAA8D,IAAInJ,KAA0B,WAAM,WAElGmJ,iCAA4G,4LCf5G,eAEA,wCAAWI,GACPJ,KAAK+mO,cAAap3C,KAAOvvL,IAG7ByyL,mCAAazyL,GACTJ,KAAK+mO,cAAap3C,OAAO3vL,KAAK+mO,eAAkB3mO,IAGpDyyL,sCAAgBzyL,GACZ,GAA0B,MAAtBJ,KAAK+mO,cACT,KAAI7mO,EAASF,KAAK+mO,cAAc/0M,KAAK,YAAK,SAAE2uH,KAAOvgJ,IACnD,GAAc,MAAVF,EAAqB,KAAO,gBAAgBE,EAAU,kBAC1D,OAAOF,EAAOoyB,QAGlBugK,+CAAyBzyL,GACrB,MAA2C,KAApCJ,KAAKsvI,gBAAgBlvI,2CApBvByyL,0UAAoBnD,KADhC74L,iBACYg8L,iICET,WAAoB3yL,2BAGb,kCAAP,SAAsBA,GAClBF,KAAK+0J,iBAAiB87C,eAAe3wM,IAGlCE,4BAAP,SAAuBF,GACnBF,KAAK+0J,iBAAiBiyE,gBAAgB9mO,IAInCE,2BAAP,SAAsBF,EAAkBJ,EAAoBsB,EAAqBG,GAC7EvB,KAAKinO,YAAY/mO,EAAU,UAAWkB,GAAc,IAAOtB,GAAW,EAAOyB,IAI1EnB,wBAAP,SAAmBF,EAAkBJ,EAAoBsB,EAAqBG,GAC1EvB,KAAKinO,YAAY/mO,EAAU,UAAWkB,GAAc,IAAMtB,GAAW,EAAOyB,IAIzEnB,wBAAP,SAAmBF,EAAkBJ,EAAoBsB,EAAqBG,GAC1EvB,KAAKinO,YAAY/mO,EAAU,QAASkB,GAAc,KAAOtB,GAAW,EAAOyB,IAGxEnB,mBAAP,SAAcF,GACVF,KAAKinO,YAAY/mO,EAAU,OAAQ,UAAO,GAAW,IAMlDE,8BAAP,SAAyBF,GACrBF,KAAKinO,YAAY/mO,EAAU,OAAQ,MACnC6hC,QAAQyd,MAAMt/C,IAIVE,wBAAR,SAAoBF,EAAkBJ,EAAesB,EAAoBG,EACrEF,EAA0BH,GAC1B,IAAMX,EAASm/C,SAASm/I,iBAAiB,qBACnCv9L,EAAUtB,KAAKknO,iBAAiBhnO,EAAUqB,EAAWhB,EAAQT,EAAOuB,EAAgBH,GACpF0V,EAAcxV,EAA6B,IAAhBb,EAAOqP,UACxC8/K,KAAOpuL,EAASxB,EAAO8W,GAAe,IAAO,IAAOA,IAGhDxW,6BAAR,SAAyBF,EAAkBJ,EAAmBsB,EAA6BG,EACvFF,EAA0BH,GAC1B,IAAMX,EAAsB,oBAAoBgB,EAC1CD,EAAiB,kBAAkBC,EACnCqV,EAAWvV,EAAiB,eAAiB,gBAInD,MAAO,CACH8lO,cAAc,EACdC,cAAc,EACd7gJ,MAAO,IACPijH,SAAU,CACNnnM,GAAIuU,EACJk5C,GAAIl5C,EACJlK,GAAI5M,GAAa,KACjBq0M,OAXO9yM,EACT,UAAUrB,KAAKqnO,mBAAmBjmO,GAClCF,EAAuB,MAAMlB,KAAKqnO,mBAAmBjmO,GAAY,WAWnEkmO,gBAAiB,kDAAkD/mO,EAAmB,0EAC9Be,EAAc,kFACZpB,EAAQ,iDAElEqnO,KAAM,CACF9vB,SAAU,GAEdD,UAAW,CACP+vB,KACA,CACInlL,KAAM,OACNq1J,SAAU,IACVl/H,KAAM,EACNz+E,GAAI,GAER0tO,KACA,CACIplL,KAAM,OACNq1J,SAAU,IACVl/H,KAAM,EACNz+E,GAAI,MAMZsG,+BAAR,SAA2BF,SACnBkB,EAAM,EACJG,EAAarB,EAAO0P,OAAkC,QAAzB9P,IAAOI,EAAO0P,OAAS,UAAE,eAAE2zF,wBAAwBK,IAAM,KAE5F,OAAIriG,IACAH,EAAMG,GAENH,GAAO,EACPA,EAAM,IAGNA,EAAM6gD,OAAO0hD,YAAcviG,EAC3BA,GAAO,GAGJA,4CA/GNuuL,OAGIvvL,qUAAS02L,KADrBjgM,iBACYuJ,0VCIT,WAAoBgB,EACRG,GADQvB,YACRA,wBAKL,oCAAP,SAAwBoB,EAAqBG,EAAiBF,EAAmBH,EAA6CX,EAAuBe,EAAoDsV,GACrM,OAAO5W,KAAKynO,kBAAkBrmO,EAAc,IAAMG,EAASF,EAAaH,EAAeX,EAAce,EAASsV,IAG3G9W,8BAAP,SAAyBsB,EAAqBG,EAAiBF,EAAmCH,EAAmBX,EAA6Ce,EAAoDsV,GAClN,OAAO5W,KAAK0nO,mBAAmBtmO,EAAc,IAAMG,EAASF,EAAQH,EAAaX,EAAee,EAASsV,IAGtG9W,gCAAP,SAA2BsB,EAAqBG,EAAiBF,EAAmBH,EAA6CX,EAAoDe,GACjL,OAAOtB,KAAK2nO,qBAAqBvmO,EAAc,IAAMG,EAASF,EAAaH,EAAeX,EAASe,IAM/FxB,+BAAR,SAA2BsB,EAAaG,EAAWF,EAAkBH,EAA6CX,EAAoDe,GAClK,OAAOtB,KAAK4nO,KAAKC,KAAK7nO,KAAKiyG,YAAc7wG,EAAKuuL,gBAAkBpuL,GAAOvB,KAAKi+C,UAAU58C,EAAaH,OAAe,EAAWX,EAASe,KAGlIxB,8BAAR,SAA0BsB,EAAaG,EAAmBF,EAA6CH,EAAuBX,EAAoDe,GAC9K,OAAOtB,KAAK4nO,KAAK3+K,IAAIjpD,KAAKiyG,YAAc7wG,EAAKpB,KAAKi+C,UAAU18C,EAAaF,EAAeH,EAAcX,EAASe,KAG3GxB,iCAAR,SAA6BsB,EAAaG,EAAmBF,EAA6CH,EAAoDX,GAC1J,OAAOP,KAAK4nO,KAAKE,OAAO9nO,KAAKiyG,YAAc7wG,EAAKpB,KAAKi+C,UAAU18C,EAAaF,OAAe,EAAWH,EAASX,KAI3GT,sBAAR,SAAkBsB,EAAkBG,EAA6CF,EAAuBH,EAAoDX,GACxJ,IAAMe,EACN,CACI48M,OAAQl+M,KAAK+nO,mBAAmB3mO,GAChC4mO,QAAShoO,KAAKioO,WAAW1mO,EAAeL,GACxCgnO,eAAkC,MAAjB3mO,EACjB4mO,QAAS5nO,GAGb,OAAIc,IACCC,EAAY8mO,aAAe/mO,GAGzBC,GAGHxB,uBAAR,SAAmBsB,EAA6CG,GAC5D,IAAIF,EAAUE,EACd,OAAIH,IAAeC,EAAOwxL,GAAQ,CAAE,oBAAqBzxL,GAAoBC,IACtEA,GAIHvB,+BAAR,SAA2BsB,GAGvB,IAAIG,EAASvB,KAAKqoO,2BAA2BjnO,GAI7C,OAAc,MAAVG,GACAuK,OAAOijC,KAAKxtC,GAAQoX,QAAQ,YACxB,IAAMzX,EAAQK,EAAOF,GACjBH,aAAiB4K,UAAY5K,aAAiB2mC,SAC9C/7B,OAAOijC,KAAK7tC,GAAOyX,QAAQ,YACvB,IAAMrX,EAAaJ,EAAMX,GACzBgB,EAAOhB,GAAYe,WAEhBC,EAAOF,MAM1BE,EAASvB,KAAKqoO,2BAA2B9mO,IAKrCzB,uCAAR,SAAmCsB,GAAnC,WACI,QAAoB,IAAhBA,EACJ,cAAO2tC,KAAK3tC,GAAauX,QAAQ,YAC7B,IAAMzX,EAAQE,EAAYC,IACW,MAAVH,GAA2B,IAATA,WAAoBE,EAAYC,GACzEH,aAAiB6K,OAAM3K,EAAYC,GAAOE,EAAK+mO,oBAAoBpnO,MAEpEE,GAOHtB,gCAAR,SAA4BsB,GACxB,IACIC,EADM,IAAI0K,KAAKA,KAAKw8N,IAAInnO,EAAM4K,cAAe5K,EAAM6K,WAAY7K,EAAM8K,UAAW9K,EAAMu3M,WAAYv3M,EAAMw3M,aAAcx3M,EAAMonO,eACtH9sI,cACV,OAAIr6F,EAAEm8B,SAAS,OAAMn8B,EAAIA,EAAE+7B,UAAU,EAAG/7B,EAAEuO,OAAS,IAC5CvO,GAKJvB,sBAAP,WACI,GAAIE,KAAK+5M,iBAAiBnQ,UAAU6+B,4BAA6B,OAAOzoO,KAAK+5M,iBAAiBnQ,UAAU6+B,4BAExG,IAAMrnO,EAAiBpB,KAAK+5M,iBAAiBnQ,UAAUuD,eACjD5rM,EAA0BH,GAAkB,IAAIA,GAAoB,GACpEC,EAAqBrB,KAAK+5M,iBAAiBnQ,UAAUyD,mBACrDnsM,EAA8BG,GAAsB,GAAGA,GAAwB,IAGrF,OAAUggB,SAASmsL,SAAQ,KAAKnsL,SAASqsL,SAAWnsM,EAA0BL,EAA2B,iDA7HxGrK,YAMAigM,OAGIh3L,qUAAiBM,KAD7BsvL,iBACY5vL,uICIbiM,KAAK28N,UAAUC,OAAS,WAEpB,OAAO,IAAI58N,KAAK/L,KAAKgM,cAAehM,KAAKiM,WAAYjM,KAAKkM,YAG9DH,KAAK28N,UAAUE,QAAU,WAErB,OAAO5oO,KAAK2oO,SAAShoK,YAAa,IAAI50D,MAAO48N,SAAShoK,WAI1D50D,KAAK28N,UAAUG,KAAO,WAElB,OAAO,IAAI98N,KAAK,KAAM,EAAG,EAAG/L,KAAK24M,WAAY34M,KAAK44M,aAAc54M,KAAKwoO,eCjBzE,+BAIkB,oBAAd,SAAyB1oO,GACrB,IAAIsB,EAAO,IAAI2K,KAAKjM,GACpB,SAAK21C,SAAS,EAAG,EAAG,EAAG,GAChBr0C,GAIGlB,aAAd,SAAyBJ,GACrB,OAAO,IAAIiM,KAAK,KAAM,EAAG,EAAGjM,EAAM64M,WAAY74M,EAAM84M,aAAc94M,EAAM0oO,eAG9DtoO,gBAAd,SAA4BJ,EAAUsB,GAClC,OAAQA,EAAGu/D,UAAY7gE,EAAG6gE,WAAc,KAG9BzgE,gBAAd,SAA4BJ,EAAUsB,GAClC,OAAQA,EAAGu/D,UAAY7gE,EAAG6gE,WAAc,KAG9BzgE,cAAd,SAA0BJ,EAAUsB,GAChC,IAAIG,EAAK,IAAIwK,KAAK,EAAG,EAAG,EAAGjM,EAAG64M,WAAY74M,EAAG84M,cAE7C,OADS,IAAI7sM,KAAK,EAAG,EAAG,EAAG3K,EAAGu3M,WAAYv3M,EAAGw3M,cAClCj4I,UAAYp/D,EAAGo/D,WAAc,MAG9BzgE,aAAd,SAAyBJ,EAAUsB,GAC/B,OAAQA,EAAGunO,SAAShoK,UAAY7gE,EAAG6oO,SAAShoK,WAAc,OAGhDzgE,cAAd,SAA0BJ,EAAUsB,GAChC,OAAQA,EAAGunO,SAAShoK,UAAY7gE,EAAG6oO,SAAShoK,WAAa,QAG/CzgE,gBAAd,SAA4BJ,EAAUsB,GAClC,IAAIG,EAAS,EACb,SAAiD,IAAvCH,EAAG4K,cAAgBlM,EAAGkM,eAChCzK,GAAUzB,EAAGmM,YACb1K,GAAUH,EAAG6K,aACI,EAAI,EAAI1K,GAGfrB,aAAd,SAAyBJ,EAAUsB,GAC/B,OAAQtB,EAAGkM,eAAiB5K,EAAG4K,eAAiBlM,EAAGmM,YAAc7K,EAAG6K,YAAcnM,EAAGoM,WAAa9K,EAAG8K,WAG3FhM,MAAd,SAAkBJ,GACd,OAAO,IAAIiM,KAAKjM,EAAGkM,cAAelM,EAAGmM,WAAY,IAGvC/L,MAAd,SAAkBJ,GACd,OAAO,IAAIiM,KAAKjM,EAAGkM,cAAe,EAAG,IAG3B9L,MAAd,SAAkBJ,GACd,OAAO,IAAIiM,KAAKjM,EAAGkM,cAAe,GAAI,IAG5B9L,MAAd,SAAkBJ,GACd,OAAO,IAAIiM,KAAKjM,EAAGkM,cAAelM,EAAGmM,WAAa,EAAG,IAG3C/L,aAAd,SAAyBJ,GACrB,OAAQA,QACC,EAAG,SAAOg3L,MAAG,gBACb,EAAG,SAAOA,MAAG,gBACb,EAAG,SAAOA,MAAG,gBACb,EAAG,SAAOA,MAAG,gBACb,EAAG,SAAOA,MAAG,gBACb,EAAG,SAAOA,MAAG,gBACb,EAAG,SAAOA,MAAG,aAIZ52L,kBAAd,SAA8BJ,GAC1B,OAAQA,QACC,EAAG,SAAOg3L,MAAG,iBACb,EAAG,SAAOA,MAAG,iBACb,EAAG,SAAOA,MAAG,iBACb,EAAG,SAAOA,MAAG,iBACb,EAAG,SAAOA,MAAG,iBACb,EAAG,SAAOA,MAAG,iBACb,EAAG,SAAOA,MAAG,cAIZ52L,qBAAd,SAAiCJ,EAAYsB,sBACzC,IAAIG,EAAYsxL,SAAgBlD,KAChC,GAAY,MAAR7vL,EAAc,SAAOg3L,MAAG,iBAC5B,IAAIz1L,EAAuBrB,KAAK8oO,2BAA2BhpO,GACvDoB,EAAyBlB,KAAK+oO,WAAWjpO,EAAM,IAAIiM,OAAW/L,KAAKgpO,UAAUlpO,MAC3E4vL,MAAW5vL,EAAMyB,EAAU47B,YAAYE,kBACvC,QAAWv9B,EAAMyB,EAAU47B,YAAYxF,iBACzCp3B,EAAqBa,EAAY,IAAIF,EAAc,IAAM,GAC7D,SAAO41L,MAAG,qBAAsBz1L,GAAc,QAAG,UAAWd,IAOlDL,YAAd,SAAwBJ,GACpB,OAA0B,GAAnBA,EAAK64M,YAAwC,GAArB74M,EAAK84M,cAA0C,GAArB94M,EAAK0oO,cAGnDtoO,6BAAf,SAA0CJ,GACtC,IAEMuB,IAFM,IAAI0K,MACCq5G,UAAYtlH,EAAKslH,WACV,IAAO,GACzBlkH,EAASG,EAAW,GACpBd,EAAQW,EAAS,GACjBI,EAASf,EAAQ,EACjBqW,EAAUrW,EAAQ,GAClBiB,EAASoV,EAAU,GAIzB,GAAI5W,KAAKgpO,UAAUlpO,GAAO,CACtB,GAAIuB,GAAY,EAAG,SAAOy1L,MAAG,QAC7B,GAAIz1L,GAAY,EAAG,SAAOy1L,MAAG,QAC7B,GAAIz1L,GAAY,GAAI,SAAOy1L,MAAG,QAC9B,GAAIz1L,GAAY,GAAI,SAAOy1L,MAAG,QAC9B,GAAIz1L,GAAY,GAAI,SAAOy1L,MAAG,QAC9B,GAAIz1L,GAAY,GAAI,SAAOy1L,MAAG,QAC9B,GAAIz1L,GAAY,GAAI,SAAOy1L,MAAG,QAC9B,GAAIz1L,GAAY,IAAK,SAAOy1L,MAAG,QAC/B,GAAIv2L,GAAS,EAAG,OAAO,QAAG,OAAQ6L,KAAKC,MAAMnL,YAGzCX,GAAS,EAAG,SAAOu2L,MAAG,QAI9B,OAAIv2L,GAAS,GAAU,QAAG,QACtBA,GAAS,GAAU,QAAG,QACtBe,GAAU,GAAU,QAAG,OAAQ8K,KAAKC,MAAM9L,IAG1Ce,GAAU,GAAU,QAAG,QACvBA,GAAU,KAAUw1L,MAAG,QACvBlgL,GAAW,KAAUkgL,MAAG,OAAQ1qL,KAAKC,MAAM/K,IAG3CsV,GAAW,GAAU,QAAG,QACxBA,GAAW,GAAU,QAAG,QACxBpV,GAAU,GAAU,QAAG,OAAQ4K,KAAKC,MAAMuK,IAG1CpV,GAAU,GAAU,QAAG,QACvBA,GAAU,KAAUs1L,MAAG,SAEpB,QAAG,OAAQ1qL,KAAKC,MAAM7K,KAGnBtB,kBAAd,WAUI,MARI,CACI,IAAIrJ,MAAoB,QAAG,YAAa,MACxC,IAAIA,MAAoB,QAAG,gBAAiB,MAC5C,IAAIA,MAAoB,QAAG,eAAgB,MAC3C,IAAIA,MAAoB,QAAG,gBAAiB,OAC5C,IAAIA,MAAoB,QAAG,aAAc,UAOvCqJ,SAAd,SAAqBJ,EAAYsB,GAC7B,IAAMG,EAAU,IAAIwK,KAAKjM,EAAK6gE,WAC9B,SAAQu5B,QAAQp6F,EAAKoM,UAAY9K,GAC1BG,GAGGrB,UAAd,SAAsBJ,EAAYsB,GAC9B,IAAMG,EAAU,IAAIwK,KAAKjM,EAAK6gE,WAC9B,SAAQu5B,QAAQp6F,EAAKoM,UAAoB,EAAR9K,GAC1BG,GAGGrB,WAAd,SAAuBJ,EAAYsB,GAC/B,IAAMG,EAAU,IAAIwK,KAAKjM,EAAK6gE,WAC9B,SAAQ+7C,SAAS58G,EAAKmM,WAAa7K,GAC5BG,GAEfrB,EA5LA,wFCJAwvL,2BAEkB,2BAAd,SAAgCoH,EAAkBjE,IAC9C,GAAIiE,GAAQ92L,KAAKmwD,YAAY2mI,GAAQ,GAAKA,EAAKphJ,OAAO,gBAAmBohJ,EAAamyC,UAAW,CAC7F,IAAM7oO,EAASJ,KAAKkpO,4BAA4BpyC,EAAMjE,IAElDzyL,IADkB02L,EAAKphJ,OAAO,WACJohJ,EAAKphJ,OAAO,SAAUt1C,KAI9CuvL,8BAAd,SAA0CmH,EAAkBjE,oBAClD3xL,EAAW41L,EAAKp5J,UAAU6lE,wBAEhC,GAA+B,IAA3BvjG,KAAKmwD,YAAY2mI,GAAa,MAAO,OAGzC,IAAIv2L,EAAS0hD,OAAO0hD,YAAcziG,EAAS0iG,IAC3C,IAAIivF,IAASA,GAAK15J,cAAgBtiC,aAA+Bg8L,GAAK15J,cAAgBtiC,YAI/E,CAEH,IAAM2K,EAAck+C,SAASm/I,iBAAiB,8BACxCl9L,EAAaH,EAAYA,EAAYoO,OAAS,GAGpDrP,GAFyBoB,GAAcA,EAAWigJ,cAC1CjgJ,EAAWigJ,aAAgBunF,aAAexnO,EAAWynO,WAAiB,MATkC,CAChH,IAAM9nO,GAA+F,QAAtFpB,EAA6D,QAA7DE,WAASspM,cAAc,8CAAsC,eAAEnmG,+BAAuB,eAAE8lI,SAAU,EAEjH9oO,GADqB0hD,OAAO0hD,YAAcriG,EAY9C,IAAMO,EAAiB69C,SAAS/hB,uBAAuB,aACvD,IAAK97B,IAAmBA,EAAe+N,OAAQ,MAAO,OAEtD,IAAMhO,KAEgD,QAFvBP,EAES,QAFTE,EACsC,QADtCH,EAAqB,QAArBtB,EAAQ,MAAR4/C,cAAQ,EAARA,SAAU4pL,mBAAW,eAC9C9lI,iBAAiB3hG,EAAeA,EAAe+N,OAAS,GAAI,WAAG,eAC/D25N,iBAAiB,yBAAiB,eAAEjtB,MAAM,cAAM,eAAEvjK,KAAK,MAAO,GAEpE,OAAQx4C,EAAS,IAAMA,EAAS0hD,OAAO0hD,YAAcpjG,GAAUqB,GAGpD+tL,cAAf,SAA2BmH,GACvB,IAAMjE,GAAiBiE,EAAK5jE,aAC5B,OAAiB,GAAV2/D,GAAeiE,EAAKx6G,iBAAiB1sE,OAASijL,IAE7DlD,EA7CA,2VCGA7vL,2BAGkB,iBAAd,SAAkDyB,EAA2BF,GAA7E,WAEI,GAAuB,GAAnBA,EAASuO,OAGb,KAAMrP,EAA2B,IAAIsnC,MACrC,SAASlvB,QAAQ,YACbpY,EAASsV,KAAK3U,EAAKsoO,UAAmBjoO,EAAMD,MAGzCf,IAGGa,eAAd,SAA2BG,GACvB,MACI,CACI+wB,OAAQ/wB,EAAK+wB,MACbwR,KAAMviC,EAAKuiC,KACX8pD,YAAarsF,EAAKqsF,cAUhBxsF,YAAd,SAAoDG,EAA2BF,GAE3E,GAAc,MAAVA,EAGJ,KAAMH,EAAqBlB,KAAKypO,eAAeloO,GACzChB,EAAeP,KAAK0pO,YAAYroO,GACtC,SAAapB,SAAWiB,EAAUjB,SAC3BM,IAGGa,iBAAd,SAAsCG,GAClC,OAAO,IAAIA,GAGDH,cAAd,SAA0BG,GACtB,OAAOmuL,IAAUnuL,IAGPH,kBAAd,SAA8BG,GAC1B,OAAQA,IAAQuK,OAAOvK,IAGbH,iBAAd,SAAyDG,EAA2BF,EAAiBH,GAEjG,GAAc,MAAVG,GAAsC,MAAfH,EAC3B,QAAWX,KAAKc,EAAQH,EAAYX,GAAKc,EAAOd,IAGtCa,UAAd,SAAsBG,GAClB,OAAqB,iBAATA,GAA6B,IAARA,UAClB,IAARA,GAA4B,MAAPA,GAAsB,IAAPA,IAGjCH,KAAd,SAAiBG,EAAUF,6BACfrB,KAAKqvJ,QAAQ9tJ,GAAOF,EAAUE,GAG5BH,QAAd,SAAoBG,GAChB,OAAIvB,KAAKqvJ,QAAQ9tJ,GAAW,EACX,iBAANA,EAAuBA,GACtBA,EAAEk2B,QAAQ,IAAK,IAAIA,QAAQ,IAAK,KAKlCr2B,kBAAd,SAA8BG,GAE1B,QADIF,GAAK,UAAgBH,EAAK,WACrBX,EAAI,EAAGe,OAAE,EAAEf,EAAIgB,EAAMqO,OAAQrP,IAClCe,EAAKC,EAAMooO,WAAWppO,GACtBc,EAAK+K,KAAKw9N,KAAKvoO,EAAKC,EAAI,YACxBJ,EAAKkL,KAAKw9N,KAAK1oO,EAAKI,EAAI,YAE5B,SAAK8K,KAAKw9N,KAAKvoO,EAAKA,IAAO,GAAI,YAAc+K,KAAKw9N,KAAK1oO,EAAKA,IAAO,GAAI,cACvEA,EAAKkL,KAAKw9N,KAAK1oO,EAAKA,IAAO,GAAI,YAAckL,KAAKw9N,KAAKvoO,EAAKA,IAAO,GAAI,eACxD,GAAG05B,SAAS,IAAIi+C,SAAS,EAAG,MAAQ33E,IAAO,GAAG05B,SAAS,IAAIi+C,SAAS,EAAG,MAI5E53E,YAAd,SAAwBG,GACpB,OAAa,MAATA,GACGA,GAIGH,gBAAd,SAA4BG,EAAkBF,EAAsBH,GAChE,QADgE,cACf,MAA7CK,EAIJ,SAHMhB,EAAiBspO,KAAKtoO,GACtBD,EAAa,GAEVsV,EAAS,EAAGA,EAASrW,EAAeqP,OAAQgH,GAAU,IAAK,CAGhE,QAFMpV,EAAQjB,EAAesqD,MAAMj0C,EAAQA,EAAS,KAC9CjV,EAAc,IAAIkmC,MAAMrmC,EAAMoO,QAC3B+G,EAAI,EAAGA,EAAInV,EAAMoO,OAAQ+G,IAC9BhV,EAAYgV,GAAKnV,EAAMmoO,WAAWhzN,GAGtC,IAAM9U,EAAYX,EAA8C,IAAI4oO,YAAYnoO,GAA9C,IAAIooO,WAAWpoO,GACjDL,EAAWuU,KAAKhU,GAGpB,OAAO,IAAIkiM,KAAKziM,EAAY,CAAE8gD,KAAM/gD,MAG1BD,kBAAd,SAA8BG,GAI1B,QAHIF,EAAS,GACPH,EAAQ,IAAI6oO,WAAWxoO,GACvBhB,EAAMW,EAAM8oO,WACT1oO,EAAI,EAAGA,EAAIf,EAAKe,IACrBD,GAAUk4E,OAAO0wJ,aAAa/oO,EAAMI,IAExC,OAAO2gD,OAAOioL,KAAK7oO,IAGTD,sBAAd,SAAkCG,GAC9B,GAA+C,MAA3CA,EACJ,KAAMF,EAAOE,EAAWk6C,MAAM,KAC9Bl6C,EAAaF,EAAKuO,OAAS,EAAIvO,EAAK,GAAG+7B,UAAU/7B,EAAK,GAAGsa,QAAQ,KAAO,GAAKpa,EAK7E,QAHML,EAAgB+gD,OAAO4nL,KAAKtoO,GAC5BhB,EAAMW,EAAc0O,OACpBtO,EAAQ,IAAIyoO,WAAWxpO,GACpBqW,EAAI,EAAGA,EAAIrW,EAAKqW,IACrBtV,EAAMsV,GAAK1V,EAAcyoO,WAAW/yN,GAExC,OAAOixB,MAAM0wC,KAAK,IAAIwxJ,WAAWzoO,EAAM6oO,WAG7B/oO,wBAAd,SAAoCG,GAChC,IAAMF,GAAQ,IAAI+oO,aAAcC,OAAO9oO,GACjCL,EAAY2mC,MAAM0wC,KAAKl3E,EAAO,SAACd,GACjC,cAAO+pO,cAAc/pO,KACvBw4C,KAAK,IAEP,OAAOkJ,OAAOioL,KAAKhpO,IAGTE,iBAAd,SAA6BG,EAAsBF,GAC/C,MAAO,QAAQA,EAAQ,WAAWrB,KAAKuqO,gBAAgBhpO,IAG7CH,2BAAd,SAAuCG,EAAsBF,GACzD,MAAO,QAAQA,EAAQ,WAAWE,GAGxBH,yBAAd,SAAqCG,GACjC,OAAOA,EAAQk6C,MAAM,KAAK,IAGhBr6C,eAAd,SAA8BG,EAAWF,GACrC,OAAiB,MAAVE,EAAsBA,EAASF,GAG5BD,kBAAd,SAAiCG,EAAqBF,GAClD,IAAIH,EAAW,GACf,OAAa,MAATK,IAAoBL,EAAMA,EAAI2c,OAAOtc,EAAMw0L,YAClC,MAAT10L,IAAoBH,EAAMA,EAAI2c,OAAOxc,EAAM00L,YACxC70L,GAGGE,wBAAd,SAAoCG,EAASF,GA8BzC,QA9BJH,OACQX,EAAO,GAAIe,EAAI,EAAGsV,EAAI,EAAGpV,EAAS,GAIhCG,EAAa,IAAI0wE,OAGf,MAAQhxE,EAAa,iDAMVA,EAAa,aAE5B,MAKAsV,EAAU,CAAC,IAIX9U,EAAa,KAKVA,EAAaF,EAAW6oO,KAAKjpO,IAAU,CAG1C,IAAMK,EAAsBC,EAAW,GAevC,GATID,EAAoBgO,QAAWhO,GAAuBP,GAGtDsV,EAAQd,KAAK,IAMbhU,EAAW,GAGX,IAAIE,EAAkBF,EAAW,GAAG41B,QAAQ,IAAI46C,OAAO,KAAM,KAAM,UAI/DtwE,EAAkBF,EAAW,GAKrC8U,EAAQA,EAAQ/G,OAAS,GAAGiG,KAAK9T,GAQrC,IAHA4U,EAAUA,EAAQ+E,OAAO,YAAK,OAACxa,EAAKmuJ,QAAQrtJ,KAGvCV,EAAI,EAAGA,EAAIqV,EAAQ/G,OAAQtO,IAC5B,GAAS,GAALA,EACAE,EAASmV,EAAQrV,OACd,CACH,IAAMQ,EAAM,GACZ,IAAK8U,EAAI,EAAGA,EAAIpV,EAAOoO,OAAQgH,IACvBA,EAAID,EAAQrV,GAAGsO,SACf9N,EAAIN,EAAOoV,IAAMD,EAAQrV,GAAGsV,IAGpCrW,EAAKsV,KAAK/T,GAGlB,OAAOvB,GAIGa,wBAAd,SAAoCG,GAEhC,OADc,IAAI8wE,OAAO,oBACX5uB,KAAKliD,IAGTH,sBAAd,SAAkCG,GAE9B,OADc,IAAI8wE,OAAO,gBACV5uB,KAAKliD,IAGVH,gBAAd,SAA4BG,EAAeF,GACvC,IAAMH,EAAuB,GAE7B,GAAIK,GAASA,EAAMqO,OAIf,QAHMrP,EAASgB,EAAMqO,OACjBtO,EAAQ,aAEDO,GACP,IAAMD,EAAa,IAAI6oO,WAEvB7oO,EAAW8oO,UAAY,SAAC3oO,GACpBT,IAEA,IAAMQ,EAASF,EAAW+oO,OACpB3oO,EAAQ6lC,MAAM0wC,KAAK,IAAIwxJ,WAAWjoO,IAExCZ,EAAO2U,KAAK,CACRvB,KAAMzS,EAAKo3B,KACXjrB,KAAMnM,EAAKugD,KACX9sC,KAAMtT,EACN4oO,OAAQ9oO,EACRgyG,KAAMjyG,IAGNtB,IAAWe,GACXD,EAAKH,IAIbU,EAAWipO,kBAAkBhpO,IAtBdL,uBAAK,GAATG,WAyBfN,EAAKH,IAICE,iBAAd,SAA6BG,EAA6BF,EAAkBH,EAAqBX,sBAC7F,IAAMe,EAAOF,EAAM0pO,cAAczpO,EAAUH,EAAaX,GAClDqW,EAAYkrE,IAAIC,gBAAgBzgF,GAChCE,EAA2B,iBAATD,EAAoBA,EAAQA,EAAK+S,MAAQ/S,EAAK6gI,UAAY,IAAM7gI,EAAK6gI,UAAY,IACzGpiI,KAAK+qO,aAAan0N,EAAWpV,IAGnBJ,eAAd,SAA2BG,EAAiBF,GACxC,IAAMH,EAAIw+C,SAASP,cAAc,KACjCj+C,EAAEwhD,KAAOnhD,EACTL,EAAE8gF,SAAW3gF,EACbH,EAAE+gF,QACFH,IAAIkpJ,gBAAgBzpO,IAIVH,WAAd,SAAuBG,EAAUF,EAAUH,GACvC,YADuC,gBAC1B,OAATK,GAA0B,OAATF,IAAkBrB,KAAKirO,SAAS1pO,KAAUvB,KAAKirO,SAAS5pO,KACtErB,KAAKkrO,gBAAgB3pO,EAAML,KAAsBlB,KAAKkrO,gBAAgB7pO,EAAMH,IAGzEE,qBAAd,SAAiCG,EAAaF,GAC1C,IAAMH,EAAS,IAAIupO,WACnBvpO,EAAOghD,iBAAiB,OAAQ,WAC5B7gD,EAAOH,EAAOypO,UACf,GAECppO,GAAwB,IAAfA,EAAMkvE,KACfvvE,EAAOiqO,cAAc5pO,GAErBF,EAAO,OAIDD,0BAAd,SAAsCG,EAAYF,GAC9C,IAAMH,EAAS,IAAIupO,WACnBvpO,EAAOghD,iBAAiB,OAAQ,WAC5B,IAAM3hD,EAAeW,EAAOypO,OAC5BtpO,EAAOwmC,MAAM0wC,KAAK,IAAIwxJ,WAAWxpO,OAClC,GAECgB,GAAsB,IAAdA,EAAKkvE,KACbvvE,EAAO2pO,kBAAkBtpO,GAEzBF,EAAO,OAIDD,gCAAd,SAA4CG,GACxC,IAAMF,EAAwB,IAAIwxL,KAC5B3xL,EAAS,IAAIupO,WACnB,SAAOvoL,iBAAiB,OAAQ,WAC5B,IAAM3hD,EAAeW,EAAOypO,OAC5BtpO,EAAsBqmC,KAAKG,MAAM0wC,KAAK,IAAIwxJ,WAAWxpO,OACtD,GAEHgB,GAA0B,IAAdA,EAAKkvE,KACbvvE,EAAO2pO,kBAAkBtpO,GAEzBF,EAAsBqmC,UAAK,GAGxBrmC,EAAsBsqC,eAAet3B,QAAKjU,KAAK,KAG5CgB,WAAd,SAAuBG,EAAcF,kCAAoBH,GAAK,WACnD,IAAIowE,IAAI/vE,EAAM60B,IAAI,YAAK,SAAQl1B,OAG5BE,eAAd,SAA8BG,GAC1B,IAAMF,EAAU,IAAI+pO,eACpB/pO,EAAQw/C,KAAK,MAAOt/C,GAAM,GACtBF,EAAQgqO,kBACRhqO,EAAQgqO,iBAAiB,oBAE7BhqO,EAAQiqO,OACR,IAAMpqO,EAAyB,KAAlBG,EAAQo1L,QAAkBp1L,EAAQkqO,aAAajyL,WAAW,KAA8B,KAAvBj4C,EAAQkqO,aACtF,OAAOrqO,EAAOu5B,KAAK44E,MAAMnyG,GAAQ,MAavBE,cAAd,SAA0EG,GACtE,OAAOu1L,IAAiBv1L,EAAO,CAAEiqO,MAAM,KAG7BpqO,kBAAd,SAA8BG,GAC1B,OAAOk5B,KAAK44E,MAAM9xG,EAAYvB,KAAKyrO,aAmBzBrqO,kBAAd,SAA8BG,EAAUF,sBACpC,IAAMH,EAAOhB,KAAQqB,GAGrB,GAAIF,EACA,QAAWd,KAAYW,GACO,OAAtBA,EAAQX,SAA4C,IAAtBW,EAAQX,IAAiD,KAAtBW,EAAQX,YAClEW,EAAQX,GAI3B,OAAOk6B,KAAKC,UAAUx5B,IAGZE,YAAd,SAAwBG,EAAUF,wBAC9B,IAAMH,EAAOlB,KACPO,EAAW,GACjB,OAAO,IAAIoyC,MAAMpxC,EAAK,CAClB0nD,IAAG,SAAC3nD,EAAQsV,GACR,IAAMpV,EAAQF,EAAOsV,GAErB,IAA2B,IAAvBrW,EAASqW,GAAoB,OAAOpV,EAExC,GAAIA,GAASJ,EAAM6pO,SAASzpO,MAAYA,aAAiBuK,OAAS3K,EAAMsqO,QAAQlqO,GAAQ,CACpF,IAAMG,EAAapB,EAASqW,IAAa1V,EAAKyqO,UAAUnqO,EAAOH,GAC/D,SAASuV,GAAYjV,EACdA,EAGX,SAASiV,IAAY,EACdpV,GAEXoxC,IAAG,SAACtxC,EAAQsV,EAAUpV,GAClB,IAAMG,EAAUP,EAAM6pO,SAASzpO,IAAUA,KAAWA,aAAiBuK,OAAS3K,EAAMsqO,QAAQlqO,GACtFN,EAAKyqO,UAAUnqO,EAAOH,GACtBG,EACN,SAAOoV,GAAYjV,EACnBpB,EAASqW,IAAY,EACrBvV,GAAWA,EAAQqmC,QACZ,GAEXkkM,eAAc,SAACtqO,EAAQsV,GACnB,cAAOtV,EAAOsV,UACPrW,EAASqW,GAChBvV,GAAWA,EAAQqmC,QACZ,MAKLtmC,UAAd,SAAsBG,GAClB,OAAOsmC,MAAM8F,QAAQpsC,IAGXH,WAAd,SAAuBG,GACnB,MAAsB,iBAARA,GAGJH,UAAd,SAAsBG,EAAeF,GACjC,QADiC,eAC5BE,GAA0B,IAAjBA,EAAMqO,OAChB,OAAO,EAGX,IAAM1O,EAAa,wJACfX,EAAS,GAETc,EACAd,EAASgB,EAAMk6C,MAAM,KAErBl7C,EAAOsV,KAAKtU,GAGhB,QAASD,EAAI,EAAGA,EAAIf,EAAOqP,OAAQtO,IAC/B,IAAKf,EAAOe,GAAGg7M,MAAMp7M,GACjB,OAAO,EAIf,OAAO,GAGGE,eAAd,SAA2BG,GACvB,GAAIA,EACA,OAAQA,OACC,OACD,MAAO,2BACN,WACA,QACD,MAAO,4BACN,WACA,QACD,MAAO,6BACN,WACA,OACD,MAAO,uBACN,WACA,WACA,QACD,MAAO,sBACN,WACA,QACD,MAAO,6BACN,WACA,QACD,MAAO,2BACN,OACD,MAAO,2BACN,WACA,YACA,OACD,MAAO,2BACN,OACD,MAAO,+BAEP,MAAO,eAInB,MAAO,gBAGGH,QAAd,SAAoBG,GAChB,QAAS6K,KAAKmqH,MAAOh1H,EAAM,OAAiB,QAGlCH,aAAd,SAAyBG,EAAcF,EAAYH,GAC/C,QAD+C,kBAC1CK,EACD,OAAO,KAEX,GAAIA,EAAQL,IAAQG,EAChB,OAAOE,EAEX,GAAqB,MAAjBA,EAAQ4f,MAAe,CAEvB,QADI5gB,EAAS,KACJe,EAAI,EAAa,MAAVf,GAAkBe,EAAIC,EAAQ4f,MAAMvR,OAAQtO,IACxDf,EAASa,EAAMyqO,WAAWtqO,EAAQ4f,MAAM7f,GAAID,EAAOH,GAEvD,OAAOX,EAEX,OAAO,MAwBGa,eAAd,SAA2BG,GACvB,IAAMF,EAAM,IAAI+pO,eAChB/pO,EAAIw/C,KAAK,OAAQt/C,GAAM,GACvBF,EAAIiqO,OAEJ,IAAMpqO,EAAcG,EAAIyqO,kBAAkB,gBAC1C,OAA0B,IAAnBzqO,EAAI0qO,YAAmC,MAAf1qO,EAAIo1L,SAAmBv1L,EAAYo4C,WAAW,cAAgBp4C,EAAYo4C,WAAW,eAG1Gl4C,UAAd,SAA4BG,EAAWF,GACnC,IAAMH,EAAM,IAAI8mD,IAChB,SAAKrvC,QAAQ,SAACpY,GACV,IAAMe,EAAMD,EAAUd,GAChBqW,EAAa1V,EAAI+nD,IAAI3nD,GACtBsV,EAGDA,EAAWf,KAAKtV,GAFhBW,EAAI0xC,IAAItxC,EAAK,CAACf,MAKfW,GAGGE,wBAAd,SAAoCG,GAChC,OAAKA,GACE0gD,OAAO4nL,KAAKtoO,IA5MRH,SAAS,mFACTA,YAAY,8BACZA,aAAa,SAACG,EAAKF,GAC9B,GAAqB,iBAAVA,EAAoB,CAC3B,IAAIH,EAAIE,EAAM4qO,OAAOxB,KAAKnpO,GAC1B,GAAIH,EACA,OAAO,IAAI6K,KAAK1K,GAEpB,GADAH,EAAIE,EAAM6qO,UAAUzB,KAAKnpO,GAClB,CACH,IAAMd,EAAIW,EAAE,GAAGu6C,MAAM,UACrB,OAAO,IAAI1vC,KAAKxL,EAAE,IAAMA,EAAE,GAAK,GAAKA,EAAE,KAG9C,OAAOc,GAiJGD,aAAa,SAACG,EAAmBF,EAAkBH,GAE7D,OADqBE,EAAMsoO,YAAYnoO,GACnBma,OAAO,SAACpa,GAGxB,QADMsV,EAAQvV,EAASo6C,MAAM,KACpBj6C,EAAI,EAAGA,EAAIoV,EAAMhH,OAAQpO,IAAK,CACnC,IAAMG,EAAOiV,EAAMpV,GACnB,GAAIF,EAAOK,IAASL,EAAOK,GAAMo5B,WAAW2kD,cAActzB,SAAc,MAALlrD,OAAK,EAALA,EAAOw+E,eACtE,OAAO,EAIf,QAAIp+E,EAAO6f,QACP7f,EAAO6f,MAAQ/f,EAAM8qO,WAAW5qO,EAAO6f,MAAO9f,EAAUH,GACjDI,EAAO6f,MAAMvR,WAkCpCxO,EA9lBA,qGCKWhB,wCCNE,4UAAiBsvL,KAJ7B74L,aAAU,CACPmgB,SAAU,eACVC,SAAU,MAED/W,oBDCT,WAAYJ,GACRM,EAAcN,kDATHjJ,cAONqJ,qUAAc42L,KAJ1BjgM,YAAS,CACNs1O,aAAc,CAACx8C,GACfy8C,QAAS,CAACz8C,MAEDzvL,4GEPDwxB,0BCAColK,EAAc,CACvBu1C,YAAY,EACZC,QAAS,0ECAAprO,GAAsB,QAAQ,aAAc,IACrDG,MAAM,QAAMA,MAAO,CACf,mBAAoB,gBAExBA,MAAM,SAAOA,MAAM,CACf,mBAAoB,oBAExBA,MAAW,eAAaA,MAAQ,2dCFpCuV,yEACI,kBAAkB,GAClBiwD,QAAoB3mE,WAGxB,OALoBK,OAKpBgsO,EALA,CAAoBhrO,oBA2BhB,WAAYslE,GAAZ,MACI2lK,YAAM3lK,EAAG,6BAA8BjwD,IAAM5W,KALxC,oBAAY,EAEX8mE,eAAiD,IAAI4oH,iBAV/D,OAF4CnvL,OAE5CuL,sBAAaygO,yBAAU,KAAvB,SAAwB1lK,GACpB7mE,KAAK+Q,MAAMg7D,SAAW,GAEjBlF,GAEL7mE,KAAKysO,eAAe5lK,oCAWxB0lK,kCAAa1lK,GACT,IAAIC,EAAKD,EAAO6lK,WAEhB,OAAI7lK,EAAOzjC,aAAc0jC,EAAQA,EAAE,IAAID,EAAOzjC,YAEvC0jC,GAGXylK,mCAAc1lK,GACV,OAAK7mE,KAAK+Q,MAAM47N,eAEZ3sO,KAAK+Q,MAAM47N,cAAcD,aAAe7lK,EAAO6lK,YAAc1sO,KAAK+Q,MAAM47N,cAAcvpM,aAAeyjC,EAAOzjC,WACrGpjC,KAAK+Q,MAAM67N,MAHkB1sO,UAS5CqsO,gCAAW1lK,GAAX,WACI7mE,KAAK+Q,MAAM47N,cAAgB9lK,EAE3BppC,WAAW,WACP,IAAM4rC,EAAU3pB,SAASy3H,eAAerwG,EAAK+lK,aAAahmK,IAE1D,GAAIwC,EAAS,CACTA,EAAQ+tG,eAAe,CAAEC,SAAU,SAAUC,MAAO,WACpD,IAAMvwG,EAASsC,EAAQyjK,qBAAqB,SAExC/lK,EAAOn3D,OAAS,GAAsC,WAAjCm3D,EAAO,GAAGgmK,WAAW3qL,MAC1C2kB,EAAO,GAAGkf,QAGdnf,EAAK/1D,MAAM67N,MAAQ1sO,QAEnBu9B,WAAW,WAAQqpC,EAAK/1D,MAAM67N,MAAQ1sO,eAMlDqsO,oCAAe1lK,GACX7mE,KAAKgtO,aAAaxrN,KAAKqlD,IAGnB0lK,2BAAR,SAAuB1lK,GAGnB,QAFIC,aAEKsC,GAGU,OAFftC,EAAUC,EAAKh2D,MAAMg7D,SAAS/5C,KAAK,aAAK,UAAEiH,OAAS4tC,EAAQuC,GAAG6jK,iBAG1DnmK,EAAU,CACN7tC,KAAM4tC,EAAQuC,GAAG6jK,YACjBxzM,MAAOotC,EAAQuC,GAAG8jK,aAClBv7M,MAAOo1C,EAAKomK,UAAYpmK,EAAKx0D,GAAG,MAAQs0D,EAAQuC,GAAG6jK,aAAepmK,EAAQuC,GAAG6jK,YAC7ErsO,QAAS,IAGbmmE,EAAKh2D,MAAMg7D,SAASl2D,KAAKixD,IAG7BA,EAAQlmE,QAAQiV,KAAKgxD,EAAQuC,YAdxBpC,EAAI,EAAGA,EAAIH,EAAQj3D,OAAQo3D,MAA3BA,GAiBT,IAASA,EAAI,EAAGA,EAAIhnE,KAAK+Q,MAAMg7D,SAASn8D,OAAQo3D,IAC5ChnE,KAAK+Q,MAAMg7D,SAAS/E,GAAGpmE,QAAUZ,KAAK+Q,MAAMg7D,SAAS/E,GAAGpmE,QAAQmgE,KAAK,SAACmG,GAAGD,IACrE,OAAIC,GAAEwlK,WAAazlK,GAAEylK,WAAqB,EACtCxlK,GAAEwlK,WAAazlK,GAAEylK,YAAqB,EACnC,IAIf1sO,KAAK+Q,MAAMg7D,SAAW/rE,KAAK+Q,MAAMg7D,SAAShL,KAAK,SAACqI,EAAGlC,IAAM,SAAEztC,MAAQytC,GAAEztC,kDA7GpE35B,2CAqBJ4vL,mCAOAA,2BACAA,8BAEAA,YAZQ68C,qUAA0BjrO,KAPtCouL,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,0BACVC,SChBW,0hBDkBXm2N,WAAY,CAAClsO,iBAEJqrO,IAAmCnrO,ofEbhDU,yEAII,mBAAW,EACX+kE,YAAW,EACXA,aAAqB,OACzB,OAPoBjlE,OAOpB2qO,EAPA,CAAoBhrO,oBAoBhB,WAAYslE,GAAZ,MACI2lK,YAAM3lK,EAAG,iCAAkCtlE,KAAYO,EAAO5B,cAA4BF,KAJrF,oBAAY,EAOrB8mE,oBAAoB,WAChB,QAAIA,EAAKumK,kBAAkBr7M,KAAK,YAAK,SAAEM,QAAUw0C,EAAK/1D,MAAMqyB,gBAKhE,OAhBgDxhC,OAgBhD2qO,mCACI,IAAM1lK,EAAS,IAAItlE,KACnBslE,EAAO6lK,WAAa1sO,KAAK+Q,MAAM27N,WAC/B7lK,EAAOzjC,WAAapjC,KAAK+Q,MAAMqyB,WAC/ByjC,EAAOv0C,MAAQtyB,KAAK+Q,MAAMuhB,MAC1Bu0C,EAAOymK,SAAWttO,KAAK+Q,MAAMu8N,SAC7BzmK,EAAO0mK,SAAWvtO,KAAK+Q,MAAMw8N,SAC7B1mK,EAAOomK,YAAcjtO,KAAK+Q,MAAM4zM,YAEhC3kN,KAAKikB,uBAAuB4iD,6CA7C3B/mE,kDAsBJ4vL,2BACAA,gCACAA,WAJQ68C,qUAA8BxqO,KAN1C2tL,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,+BACVC,SClBW,k2GDqBFs1N,IAAuC1qO,yfEFhD,WAAYglE,GAAZ,MACI2lK,YAAM3lK,EAAG,wBAAyBtlE,OAAUvB,KALvC,oBAAY,EAEX8mE,eAAmC,IAAI4oH,iBAMjD,OAZuCh5K,OAYvC61N,gCACIvsO,KAAKgtO,aAAaxrN,iDAxBjB1hB,uCAaJ4vL,mCACAA,2BACAA,8BAEAA,YANQ68C,qUAAqBv1O,KANjC04L,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,oBACVC,SCRW,kxFDWFs1N,IAA8BnrO,6gBEH3C1J,+BAyBI,WAAYmvE,GAAZ,MACI2lK,YAAM3lK,EAAG,4BAA6BtlE,KAAY7J,GAAOwI,YAA6BA,gBAA+BF,KAJhH,cAA4BE,UAOlB,OAhBwB1I,OAgBxB+0O,4BAAnB,WACSvsO,KAAKwlO,QACNxlO,KAAKwlO,MAASxlO,KAAKwB,EAAEq8B,OAAOE,WAE1B79B,iBADEF,KAAKwB,EAAEq8B,OAAO2vM,eAAkBttO,kBAA+BA,mBAGlEF,KAAKwwM,SACNxwM,KAAKwwM,OAAStwM,sBAIHqsO,wBAAnB,WACI,OAAOvsO,KAAKy8B,OAGP8vM,4BAAT,WACI,IAAM1lK,EAAa7mE,KAAKw6M,qBACxB,OAAOx6M,KAAKwB,EAAEoyL,iBAAiBrhL,GAAG,qBAAsBs0D,IAInD0lK,oCAAT,sBAGI,OAAQvsO,KAAKgO,WACJ9N,QACDF,KAAK+Q,MAAM08N,aAAeztO,KAAKuS,GAAG,SAClCvS,KAAK+Q,MAAM28N,iBAAmB1tO,KAAKuS,GAAG,aACtCvS,KAAK+Q,MAAM48N,kBAAe,EAC1B,WACCztO,WACDF,KAAK+Q,MAAM08N,aAAeztO,KAAKuS,GAAG,UAClCvS,KAAK+Q,MAAM28N,iBAAmB1tO,KAAKuS,GAAG,SACtCvS,KAAK+Q,MAAM48N,kBAAe,EAC1B,WACCztO,YACM,MAAUF,KAAKwvH,QAAO,GAC7BxvH,KAAK+Q,MAAM08N,aAAe3mK,EAAOhjC,KACjC9jC,KAAK+Q,MAAM68N,iBAAmB9mK,EAAO+mK,SAEjC/mK,EAAO+mK,UACPpwM,WAAW,WACPopC,EAAKinK,YAAYC,SAASC,IAAI74M,SAAS8wD,SACxC,KAIPjmF,KAAK8tO,YAAYG,mBAAoB,EACrCjuO,KAAK+Q,MAAM48N,aAAe3tO,KAAKwvH,QAAQ3kE,MAAM,8CAjFpD/qD,4CAmBJ4vL,YAASvuL,MAAC,8BAEVuuL,wBACAA,yBACAA,uBACAA,wBACAA,sBACAA,8BACAA,WAVQ68C,qUAAyB90O,KANrCi4L,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,uBACVC,SClBW,6rCDqBFs1N,IAAkC1qO,+dEV/C/J,yEAKI,yBAA0B,EAC1B+uE,OAAc,GACdA,iBAA2B,KAC/B,OARoBjvE,QAQpB20O,EARA,CAAoBhrO,qBA+DhB,WAAYslE,EAA8BC,SAA1CC,EACIylK,YAAM3lK,EAAG,yBAA0BtlE,KAAYzJ,IAAMkI,KADf,4BA/ClC+mE,0BAAqBsC,MACxBnpE,gBAA8B,CAAEwkN,SAAUxkN,YAAkCykN,YAAa,UAAWuoB,aAAc,EAAGgB,iBAAiB,GACvI7kK,EAACnpE,gBAA8B,CAAEwkN,SAAUxkN,YAAkCykN,YAAa,UAAWuoB,aAAc,EAAGgB,iBAAiB,GACvI7kK,EAACnpE,aAA2B,CAAEwkN,SAAUxkN,YAAkCykN,YAAa,UAAWuoB,aAAc,EAAGgB,iBAAiB,GAEpI7kK,EAACnpE,qBAAmC,CAAEwkN,SAAUxkN,YAAkCykN,YAAa,YAAauoB,aAAc,EAAGgB,iBAAiB,GAC9I7kK,EAACnpE,oBAAkC,CAAEwkN,SAAUxkN,YAAkCykN,YAAa,YAAauoB,aAAc,EAAGgB,iBAAiB,GAC7I7kK,EAACnpE,2BAAyC,CAAEwkN,SAAUxkN,aAAmCykN,YAAa,YAAauoB,aAAc,EAAGgB,iBAAiB,GACrJ7kK,EAACnpE,0BAAwC,CAAEwkN,SAAUxkN,aAAmCykN,YAAa,YAAauoB,aAAc,EAAGgB,iBAAiB,GACpJ7kK,EAACnpE,8BAA4C,CAAEwkN,SAAUxkN,aAAmCykN,YAAa,YAAauoB,aAAc,EAAGgB,iBAAiB,GACxJ7kK,EAACnpE,oCAAkD,CAAEwkN,SAAUxkN,aAAmCykN,YAAa,YAAauoB,aAAc,EAAGgB,iBAAiB,GAE9J7kK,EAACnpE,uCAAqD,CAAEwkN,SAAUxkN,aAAmCykN,YAAa,QAASuoB,aAAc,EAAGgB,iBAAiB,GAC7J7kK,EAACnpE,6BAA2C,CAAEwkN,SAAUxkN,aAAmCykN,YAAa,QAASuoB,aAAc,EAAGgB,iBAAiB,GACnJ7kK,EAACnpE,gCAA8C,CAAEwkN,SAAUxkN,aAAmCykN,YAAa,QAASuoB,aAAc,EAAGgB,iBAAiB,GACtJ7kK,EAACnpE,kCAAgD,CAAEwkN,SAAUxkN,aAAmCykN,YAAa,QAASuoB,aAAc,EAAGgB,iBAAiB,GACxJ7kK,EAACnpE,4BAA0C,CAAEwkN,SAAUxkN,aAAmCykN,YAAa,QAASuoB,aAAc,EAAGgB,iBAAiB,GAClJ7kK,EAACnpE,iCAA+C,CAAEwkN,SAAUxkN,aAAmCykN,YAAa,QAASuoB,aAAc,EAAGgB,iBAAiB,GACvJ7kK,EAACnpE,8BAA4C,CAAEwkN,SAAUxkN,aAAmCykN,YAAa,QAASuoB,aAAc,EAAGgB,iBAAiB,GACpJ7kK,EAACnpE,gCAA8C,CAAEwkN,SAAUxkN,aAAmCykN,YAAa,QAASuoB,aAAc,EAAGgB,iBAAiB,GACtJ7kK,EAACnpE,+BAA6C,CAAEwkN,SAAUxkN,aAAmCykN,YAAa,QAASuoB,aAAc,EAAGgB,iBAAiB,GAErJ7kK,EAACnpE,iCAA+C,CAAEwkN,SAAUxkN,YAAkCykN,YAAa,WAAYuoB,aAAc,EAAGgB,iBAAiB,GACzJ7kK,EAACnpE,4BAA0C,CAAEwkN,SAAUxkN,YAAkCykN,YAAa,WAAYuoB,aAAc,EAAGgB,iBAAiB,GACpJ7kK,EAACnpE,iCAA+C,CAAEwkN,SAAUxkN,YAAkCykN,YAAa,WAAYuoB,aAAc,EAAGgB,iBAAiB,GACzJ7kK,EAACnpE,kCAAgD,CAAEwkN,SAAUxkN,YAAkCykN,YAAa,WAAYuoB,aAAc,EAAGgB,iBAAiB,GAE1J7kK,EAACnpE,gCAA8C,CAAEwkN,SAAUxkN,YAAkCykN,YAAa,WAAYuoB,aAAc,EAAGgB,iBAAiB,GACxJ7kK,EAACnpE,2CAAyD,CAAEwkN,SAAUxkN,YAAkCykN,YAAa,WAAYuoB,aAAc,EAAGgB,iBAAiB,GACnK7kK,EAACnpE,2CAAyD,CAAEwkN,SAAUxkN,YAAkCykN,YAAa,WAAYuoB,aAAc,EAAGgB,iBAAiB,GAEnK7kK,EAACnpE,oBAAkC,CAAEwkN,SAAUxkN,YAAkCykN,YAAa,YAAauoB,aAAc,EAAGgB,iBAAiB,GAC7I7kK,EAACnpE,mCAAiD,CAAEwkN,SAAUxkN,aAAmCykN,YAAa,YAAauoB,aAAc,EAAGgB,iBAAiB,GAC7J7kK,EAACnpE,uCAAqD,CAAEwkN,SAAUxkN,aAAmCykN,YAAa,YAAauoB,aAAc,EAAGgB,iBAAiB,GACjK7kK,EAACnpE,qCAAmD,CAAEwkN,SAAUxkN,aAAmCykN,YAAa,YAAauoB,aAAc,EAAGgB,iBAAiB,GAC/J7kK,EAACnpE,0CAAwD,CAAEwkN,SAAUxkN,aAAmCykN,YAAa,YAAauoB,aAAc,EAAGgB,iBAAiB,GAEpK7kK,EAACnpE,8BAA4C,CAAEwkN,SAAUxkN,YAAkCykN,YAAa,YAAauoB,aAAc,EAAGgB,iBAAiB,GACvJ7kK,EAACnpE,oCAAkD,CAAEwkN,SAAUxkN,YAAkCykN,YAAa,YAAauoB,aAAc,EAAGgB,iBAAiB,GAC7J7kK,EAACnpE,mCAAiD,CAAEwkN,SAAUxkN,YAAkCykN,YAAa,YAAauoB,aAAc,EAAGgB,iBAAiB,GAC5J7kK,EAACnpE,8BAA4C,CAAEwkN,SAAUxkN,YAAkCykN,YAAa,YAAauoB,aAAc,EAAGgB,iBAAiB,QAWlJ,OApD+Bt2O,QAoD/B20O,4BAAT,WACIvsO,KAAK8qE,WACL9qE,KAAKmuO,wBACLnuO,KAAKouO,qBAGT7B,6CACIvsO,KAAKquO,uBAAuB/qN,gBAAgB,SAACwjD,GAEN,IAA/BD,EAAK91D,MAAM2oB,gBACXmtC,EAAKynK,iBAAiBxnK,GAEtBD,EAAK0nK,gBAAgBznK,GAGzBD,EAAK2nK,kBAAkBC,WAAW3nK,MAI1CylK,qCACI,QADJ1lK,kBACaO,IAOL,GANIiC,EAAKt4D,MAAM29N,eAAetnK,IAAGs9I,WAAaxkN,aAC1CmpE,EAAKt4D,MAAM29N,eAAetnK,IAAG90C,MAAQ+2C,EAAKt4D,MAAM29N,eAAetnK,IAAGunK,aAAe,IAAM,IAChFtlK,EAAKt4D,MAAM29N,eAAetnK,IAAGs9I,WAAaxkN,cACjDmpE,EAAKt4D,MAAM29N,eAAetnK,IAAG90C,MAAQ+2C,EAAKt4D,MAAM29N,eAAetnK,IAAGwnK,YAAY7zM,YAG9E1jC,aAAcgyE,EAAKt4D,MAAM29N,eAAetnK,IAAG90C,OAC3C,SAAKvhB,MAAM2oB,gBAAkB,EAC7B+D,WAAW,WACPopC,EAAK2nK,kBAAkBC,WAAW5nK,EAAK91D,MAAM29N,eAAetnK,KAC5DP,EAAKzzD,GAAGC,YAAYwzD,EAAKt0D,GAAG,kBAAkBklB,QAAQ,MAAOovC,EAAK91D,MAAM29N,eAAetnK,IAAGslK,sCAX7F3lK,EAAI,EAAGA,EAAI/mE,KAAK+Q,MAAM29N,eAAe9+N,OAAQm3D,IAAG,SAAhDA,wCAkBT,eAASK,IACL,GAAI/vE,aAAc6vE,GAAKn2D,MAAM89N,cAAcznK,IAAG90C,OAC1C,kBAAW,WACPu0C,EAAK91D,MAAM2oB,gBAAkB,EAC7BmtC,EAAK2nK,kBAAkBC,WAAW5nK,EAAK91D,MAAM89N,cAAcznK,KAC3DP,EAAKzzD,GAAGC,YAAYwzD,EAAKt0D,GAAG,kBAAkBklB,QAAQ,MAAOovC,EAAK91D,MAAM29N,eAAetnK,IAAGslK,uCALtG,IAAS3lK,EAAI,EAAGA,EAAI/mE,KAAK+Q,MAAM89N,cAAcj/N,OAAQm3D,IAAG,UAA/CA,0CAYT/mE,KAAKvE,GAAGuE,KAAKwB,EAAE07B,UAAU4xM,sBAAsBC,YAAY/uO,KAAK+Q,MAAM29N,eAAe7wN,OAAO7d,KAAK+Q,MAAM89N,iBAAiB,EAAM,SAACznK,IAC3HnlB,OAAO5gC,SAASw2E,YAIxB00I,oCAAe1lK,GACX7mE,KAAKw/H,cAAcxxH,KAAO9N,WAE1BF,KAAKw/H,cAAcl8G,gBAAgB,WAC/BujD,EAAO6T,WAAY,IAGvB16E,KAAKw/H,cAAc/iG,MAAQz8B,KAAKuS,GAAG,eACnCvS,KAAKw/H,cAAc9iG,OAAS18B,KAAKuS,GAAG,mBAAmBklB,QAAQ,MAAOovC,EAAO6lK,aAGzEH,8BAAR,sBACIvsO,KAAKvE,GAAGuE,KAAKwB,EAAE07B,UAAU4xM,sBAAsBE,cAAc,EAAO,SAACloK,GAIjE,IAAIuC,EAHJxC,EAAK91D,MAAM29N,eAAiB,GAC5B7nK,EAAK91D,MAAM89N,cAAgB,GAI3B/nK,EAASrxD,SAASkD,QAAQ,SAACouD,GACvBA,EAAE3jC,WAAa2jC,EAAE3jC,WAAa2jC,EAAE3jC,WAAa,MAE7CimC,EAAWxC,EAAKooK,sBAAsBloK,EAAE2lK,cASpC3lK,EAAEkmK,YAAc5jK,EAASs7I,YACzB59I,EAAEmmK,aAAe7jK,EAAS6jK,aAC1BnmK,EAAE29I,SAAWr7I,EAASq7I,SACtB39I,EAAEmnK,gBAAkB7kK,EAAS6kK,gBAE7B7kK,EAAaq7I,WAAaxkN,YACtB6mE,EAAE6nK,YAAc59N,SAAS+1D,EAAEz0C,MAAO,IAC3B+2C,EAASq7I,WAAaxkN,eAC7B6mE,EAAE4nK,aAA2B,MAAZ5nK,EAAEz0C,OAGvBu0C,EAAK91D,MAAM29N,eAAe74N,KAAKkxD,KAjB/BF,EAAK91D,MAAM89N,cAAch5N,KAAKkxD,GAE1BF,EAAK91D,MAAMm+N,eAAevzN,QAAQorD,EAAEkmK,aAAe,GACnDpmK,EAAK91D,MAAMm+N,eAAer5N,KAAKkxD,EAAEkmK,mBAqB7CV,kCAAR,WACI,IAAM1lK,EAAU7mE,KAAK+5M,iBAAiBlc,UAAUz6J,WAAWqY,MAAM,KAGjEz7C,KAAK+Q,MAAMs8N,kBAAoB,GAC/BrtO,KAAK+Q,MAAMs8N,kBAAkBx3N,KAAK,CAC9BiuB,KAAM,MACNxR,WAAO,IAGX,QAASw0C,EAAI,EAAGA,EAAID,EAAQj3D,OAAQk3D,IAChC9mE,KAAK+Q,MAAMs8N,kBAAkBx3N,KAAK,CAC9BiuB,KAAM+iC,EAAQC,GACdx0C,MAAOu0C,EAAQC,MAKnBylK,qBAAR,WACIvsO,KAAK+Q,MAAM0sE,KAAO,CACd,CACIhkD,MAAO,EACPyB,KAAMl7B,KAAKuS,GAAG,eACf,CACCknB,MAAO,EACPyB,KAAMl7B,KAAKuS,GAAG,gBAKlBg6N,6BAAR,SAAyB1lK,GACrB,GAAI7mE,KAAK+Q,MAAM29N,eAAe18M,KAAK,YAAK,SAAE06M,aAAe7lK,EAAO6lK,YAAc3lK,EAAE3jC,aAAeyjC,EAAOzjC,aAClGpjC,KAAKoT,GAAGojB,kBAAkBx2B,KAAKuS,GAAG,+BAC/B,CACH,IAAMu0D,EAAW9mE,KAAKivO,sBAAsBpoK,EAAO6lK,YAEnD7lK,EAAO0mK,SAAWzmK,EAASonK,gBAC3BrnK,EAAO69I,SAAW59I,EAAS49I,SAC3B79I,EAAOomK,YAAcnmK,EAAS69I,YAC9B99I,EAAOqmK,aAAepmK,EAASomK,aAE/BrmK,EAAW69I,WAAaxkN,aACpB2mE,EAAO8nK,cAAe,EACf9nK,EAAO69I,WAAaxkN,cAC3B2mE,EAAO+nK,YAAc,GAGzB,IAAMvlK,EAAUhyE,iBAAkB2I,KAAK+Q,MAAM29N,gBAC7CrlK,EAAQxzD,KAAKgxD,GAEb7mE,KAAK+Q,MAAM29N,eAAiBrlK,IAI5BkjK,4BAAR,SAAwB1lK,GACpB,GAAI7mE,KAAK+Q,MAAM89N,cAAc78M,KAAK,YAAK,SAAE06M,aAAe7lK,EAAO6lK,YAAcrjK,EAAEjmC,aAAeyjC,EAAOzjC,aACjGpjC,KAAKoT,GAAGojB,kBAAkBx2B,KAAKuS,GAAG,+BAC/B,CAEHs0D,EAAO0mK,UAAW,EAClB1mK,EAAOymK,UAAW,EAElB,IAAMxmK,EAAUzvE,iBAAkB2I,KAAK+Q,MAAM89N,eAC7C/nK,EAAQjxD,KAAKgxD,GAEb7mE,KAAK+Q,MAAM89N,cAAgB/nK,EAEvB9mE,KAAK+Q,MAAMm+N,eAAevzN,QAAQkrD,EAAOomK,aAAe,GACxDjtO,KAAK+Q,MAAMm+N,eAAer5N,KAAKgxD,EAAOomK,wDAzP7CntO,WAIA1I,wDAkEJs4L,YAASvuL,MAACa,8BACV0tL,YAASvuL,MAACK,0BACVkuL,YAASvuL,MAACxJ,OA9CF40O,qUAAsB10O,KANlC63L,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,qBACVC,SCvBW,g9CD0BFs1N,IAA+B1qO,ufEnB5CxJ,2EAKA,OALoBF,QAKpBo0O,EALA,CAAoBhrO,qBAiBhB,WAAYslE,GAAZ,MACI2lK,YAAM3lK,EAAG,2BAA4BxuE,KAAM2H,KAyB/C,+BAAwB,WACpB8mE,EAAK/1D,MAAMo+N,uBAAyBroK,EAAK/1D,MAAMo+N,yBAvB1C,OATiCh3O,QASjCo0O,wBAAT,WACIvsO,KAAK+Q,MAAMq+N,uBAAyBpvO,KAAK01J,aAAax1J,4BACtDF,KAAK+Q,MAAMs+N,4BAA8BrvO,KAAK01J,aAAax1J,iCAC3DF,KAAK+Q,MAAMu+N,6BAA+BtvO,KAAK01J,aAAax1J,mCAGvDqsO,4BAAT,YACQvsO,KAAKuvO,UAEJvvO,KAAKuvO,QAAQzlC,UAAW9pM,KAAKuvO,QAAQzlC,QAAU,IACpD9pM,KAAKuvO,QAAQzlC,QAAQj0L,KAAK,CACtBwL,SAAU,QACV4X,KAAM,cACNr4B,QAAS,CACLm2L,YAAa,CAAEC,MAAO,mCAAoCrqI,MAAO,aACjEwjB,KAAM,8BACN/tB,KAAM,SACNjnB,QAASn7B,KAAKwvO,oEA5CrB1vO,wCAoBJ4vL,yBACAA,YAASvuL,MAACjJ,SAHFq0O,qUAAwBn0O,KANpCs3L,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,uBACVC,SChBW,6bDmBFs1N,IAAiCnrO,wlBEX1C,WAAYylE,UAER2lK,YAAM3lK,EAAG,gBAAiBtlE,KAAYA,OAAUvB,YAJrBhH,iDAH1B8G,OAGIysO,qUAAatzO,GADzB,eAAU,CAAE+d,SAAU,WAAYC,SAAS,uFAC/Bs1N,IAAsB1qO,sfCGnCrI,cAEIwG,YAAqBE,yBAkCrB,WAAY2mE,EACAC,GADZ,MAEI0lK,YAAM3lK,EAAG,mBAAoBrtE,KAAUwG,KAD/B,8BARFqpE,UAA6B,IAAIqmH,iBAG3C,OAXkCp2L,QAWlCwS,sBAAIygO,iCAAkB,KAAtB,uBACI,OAA6E,QAAtExlK,EAA6C,QAA7CsC,EAAgC,QAAhCvC,EAAiB,QAAjBD,OAAK4oK,oBAAY,eAAEppJ,qBAAa,eAAE+4H,SAAS,UAAE,eAAE77G,+BAAuB,eAAEjd,wCAQnFimJ,mCACIvsO,KAAKu0J,QAAQ/yI,QAIjB1V,sBAAIygO,mCAAoB,KAAxB,WACI,IAAM1lK,EAAe7mE,KAAKmwL,KAAKz0K,OAAO,YAAK,OAAa,GAAborD,EAAEvsD,SAAgC,MAAbusD,EAAEvsD,UAClE,GAA4B,IAAxBssD,EAAaj3D,OAAc,OAAOi3D,EAAa,oCAIvD0lK,uCACIvsO,KAAK+Q,MAAM2+N,UAAY1vO,KAAK+Q,MAAM2+N,UAGtCnD,2CACI,OAAOvsO,KAAK+Q,MAAM2+N,SAAW1vO,KAAKuS,GAAG,eAAiBvS,KAAKuS,GAAG,gBAGlEg6N,gCAAW1lK,GACP,OAAOA,GAAWA,EAAQ8oK,kBAAoB,GAGlDpD,uCAAkB1lK,EAAOC,GAIrB,GAHAD,EAAMnjB,iBACNmjB,EAAM8L,kBAEF3yE,KAAKwB,EAAEq8B,OAAOE,aAAe/9B,KAAK4vO,oBAAqB,CACvD,IAAMvmK,EAAQrpE,KAAKy8B,OAASz8B,KAAKuS,GAAG,qBAC9Bw0D,EAAa,IAAI1tE,MAIvB,OAHA0tE,EAAWtqC,MAAQ4sC,EACnBtC,EAAW9O,MAAQj4D,KAAKmwL,UACxBnwL,KAAKyxK,mBAAmBo+D,gBAAgB9oK,GAI5C,SAAGwgK,KAAK1gK,IACD,4CApFN/mE,WAI8BzG,uCAyBlCq2L,uBACAA,uBACAA,qCACAA,yBAGAA,+BAEAA,YAASvuL,MAAC,mBAVForO,qUAAgBhzO,KAN5Bm2L,aAAU,CACP34K,UAAW,CAACjX,KACZkX,SAAU,WACVC,SC3BW,49FD8BFs1N,IAAyBnrO,4CEpBzBpB,UAAoD,UAInDA,aAAU,IAAI0vL,eAGjB,kCADP,SACsB68C,GAClBA,EAAM55J,mBACF3yE,KAAKwlK,UACTxlK,KAAKm7B,QAAQ3Z,QAGjBgrN,gCACI,OAAQxsO,KAAKmvK,OAAS,KAAOnvK,KAAKgO,KAAQ,aAAehO,KAAKgO,KAAQ,mCAfzE0hL,sBACAA,0BACAA,sBACAA,uBACAA,yBACAA,iCAEAA,eAAYvuL,MAAC,QAAS,CAAC,cARfqrO,qUAAgB5yO,KAN5B81L,aAAU,CAEP14K,SAAU,WACVC,SCLW,kODQFu1N,iBENAxyO,IAAsB,QAAQ,aAAc,IACrDqH,MAAM,QAAMA,MAAM,CACdyuO,SAAU,SACVxpJ,OAAQ,UAEZjlF,MAAM,SAAOA,MAAM,CACf0uO,QAAS,IACTD,SAAU,SACVxpJ,OAAQ,YAEZjlF,MAAW,eAAaA,MAAQ,yBAChCA,MAAW,eAAaA,MAAQ,igBCKhC,WAAYwlE,UACR2lK,YAAM3lK,EAAG,4BAA6BtlE,OAAUvB,KAGpD,OAR2C/F,QAQ3C6R,sBAAIygO,wBAAS,KAAb,WACI,OAAOl1O,aAAc2I,KAAKy8F,MAAMnoF,MAAQtU,KAAKuS,GAAG,kBAAoBvS,KAAKy8F,MAAMnoF,+EApB9ExU,sCAaJ4vL,WAFQ68C,qUAAyBryO,KANrCw1L,aAAU,CACP14K,SAAU,uBACVC,SCVW,4xBDYXm2N,WAAY,CAACpzO,mBAEJuyO,IAAkCnrO,2CEG3C,WAAoBmrO,oBAGpB,6BAAIC,sBAAO,KAAX,WAAqB,OAAOxsO,KAAKk1B,sCAEjCppB,sBAAI0gO,6BAAc,KAAlB,WACI,OAAOxsO,KAAKs4C,SAAWt4C,KAAKs4C,QAAQ12C,GAAK5B,KAAKs4C,QAAQ12C,EAAE8qC,OAASxsC,+CAGrE4L,sBAAI0gO,yBAAU,KAAd,WACI,OAAOxsO,KAAKgwO,iBAAmBhwO,KAAKs4C,QAAQ12C,EAAEuiM,qDAGlDqoC,+BACIxsO,KAAKgwO,eACChwO,KAAKs4C,QAAQ12C,EAAEwpM,eACfprM,KAAKq7M,UAAUvhM,SAAS,CAAC9Z,KAAKiwO,YAAajwO,KAAKkwO,wDAhCrD51O,uCAUJo1L,sBACAA,4BAEAA,8BACAA,sBAIAA,WATQ88C,qUAAsBjyO,KALlCm1L,aAAU,CACP14K,SAAU,oBACVC,SCPW,2QDUFu1N,gCEAT,cAGA,6BAAIA,sBAAO,KAAX,WAAqB,OAAOxsO,KAAKk1B,0GADhCw6J,sBAEAA,WANQ88C,qUAAyB7xO,KALrC+0L,aAAU,CACP14K,SAAU,uBACVC,SCLW,0NDQFu1N,wDEQT,WAAoBD,oBAGXvsO,YAAiBA,KAAK80J,UAAUviJ,GAAG,SAEnCvS,gBAAqBA,KAAK80J,UAAUviJ,GAAG,aAEvCvS,cAAU,EAKVA,2BAAuB,EACtBA,UAAO,IAAI0vL,eACX1vL,cAAW,IAAI0vL,eACf1vL,0BAAuB,IAAI0vL,eAKrC,6CACS1vL,KAAKmwO,mBAKVnwO,KAAK6uH,SAASrtG,OACdxhB,KAAKowO,oBALDpwO,KAAK09H,KAAKnoG,aAQlBzpB,sBAAI0gO,+BAAgB,KAApB,WACI,QAAIxsO,KAAKwlK,UAILxlK,KAAK09H,gBAAgB1iI,OAA2BgF,KAAK09H,KAAa29D,sBACzDr7L,KAAK09H,KAAa/6E,yCAKnC72C,sBAAI0gO,uBAAQ,KAAZ,WACI,OAAIxsO,KAAK09H,gBAAgB1iI,MACdgF,KAAK09H,KAAKp3B,0CAOzBkmI,6CAEgC,MAAxBxsO,KAAKqwO,gBACLrwO,KAAK09H,KAAK/R,wBAAwB3rH,KAAKqwO,iBAAiB17M,KAAK,YACpDkyC,GAKL0lK,EAAK+D,KAAK9uN,OACV+qN,EAAK6D,oBALD7D,EAAKgE,qBAAqB/uN,UASlCxhB,KAAKswO,KAAK9uN,OACVxhB,KAAKowO,qBAIb5D,2CACI,OAAQxsO,KAAKwwO,0BAA4BxwO,KAAKiuO,mBAGlDzB,8CACI,OAAOxsO,KAAK09H,MAAQ19H,KAAK09H,KAAKqgE,oBAAsB/9L,KAAK09H,KAAKqgE,sBAGlEyuC,wCACQxsO,KAAK09H,KAAKvkG,cAAgBj5B,kBAAoCF,KAAKywO,sBAAsBzwO,KAAK09H,KAAKnoG,aAG3Gi3M,gCAAWD,GACP,OAAOA,GAAWA,EAAQoD,kBAAoB,4CA9F7C50O,uCAcJ20L,wBACAA,4BACAA,4BACAA,iCACAA,yBACAA,6BACAA,mCACAA,0BACAA,mCACAA,sCACAA,sBACAA,2BACAA,uCACAA,2BAEAA,YAASvuL,MAAC,YAlBFqrO,qUAAoBvxO,KALhCy0L,aAAU,CACP14K,SAAU,kBACVC,SCZW,0yBDeFu1N,2fEMT,WAAY3lK,UAER2lK,YAAM3lK,EAAG,yBAA0BtlE,OAAUvB,KAI1C,OAbiC3E,QAajCkxO,uBAAP,SAAkB1lK,GAGd7mE,KAAK0wO,QAAU7pK,EACf7mE,KAAK2wO,WAAWtqJ,cAAcpE,SAGlCsqJ,iDAGQzlK,EAAiB9mE,KAAK2wO,WAAWtqJ,cAAcuqJ,MACnD,GAAY,MAAR9pK,GAAoC,GAAfA,EAAKl3D,OAM9B,IAAI5P,KAAK6wO,gBAAkB3wO,cAIvB,OAFAF,KAAK0wO,QAAQ5pK,QACb9mE,KAAK8wO,aAMT,IAAIznK,EAAS,IAAIohK,WACjBphK,EAAOqhK,UAAY,SAAC3jK,GAGhB,IAAIC,EAAgBD,EAAEgqK,WAAmBpG,OAMzC,OAHA9jK,EAAK8pK,WAAWtqJ,cAAc7zE,MAAQ,KAG9Bq0D,EAAKgqK,qBAEJ3wO,sBAED2mE,EAAK6pK,QAAQ1pK,QAEZ9mE,0BAED,IAAIkpE,EAAWpC,EAAKvrB,MAAM,SAG1B,OAFA2tB,EAAWA,EAAS1tD,OAAO,aAAK,OAACrkB,aAAc4vE,WAC/CJ,EAAK6pK,QAAQtnK,GACb,KAEClpE,yBAGD,IAAIgnE,GAAa7vE,2BAA4B2vE,EAAM,KAEnD,YADAH,EAAK6pK,QAAQxpK,MAKzBmC,EAAO2nK,WAAWlqK,EAAK,IACvB9mE,KAAK8wO,eAGDvE,uBAAR,WACIvsO,KAAK2wO,WAAWtqJ,cAAc7zE,MAAQ,6CAvFrC1S,2CAaJ4vL,YAASvuL,MAAC,sCACVuuL,iCACAA,kCACAA,WALQ68C,qUAAsBjxO,KANlCo0L,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,oBACVC,SCXW,yJDcFs1N,IAA+BnrO,04DEJ5CpF,cAYIgE,kBAAuB,EACvBA,eAAuB,IAAI/D,GAC3B+D,eAAW,EACXA,sBAAkB,EAClBA,mBAAwB,GAG5B/D,cACI+D,uBAA4B,EAC5BA,mBAA+B,KAC/BA,uBAA4B,kBA4C5B,WAAY6mE,EAA8BC,GAA1C,MACI0lK,YAAM3lK,EAAG,0BAA2BtlE,KAAYvF,GAAOkE,YAA6BA,gBAA+BF,KAD7E,qBA/BlCqpE,cAAuB,GACvBA,iBAAyB,aAcxBA,4BAA2B,EAC3BA,gBAAwB,EAMxBA,eAAuB,IAnBhC,OALyCztE,QAKzCkQ,sBAAaygO,yBAAU,KAOvB,WACI,OAAOvsO,KAAKixO,iBARhB,SAAwBpqK,GAAxB,aACI7mE,KAAKixO,YAAcpqK,EACH,QAAhBwC,OAAK4nK,mBAAW,SAAEt4N,QAAQ,YACtBmuD,EAAKoqK,WAAWnqK,sCA8BfwlK,wBAAT,WACI,GAAkB,MAAdvsO,KAAKy8B,MACT,OAAOz8B,KAAK67D,kBAAoB,MAAQ77D,KAAKy8B,OAGxC8vM,oCAAT,sBACI9uM,WAAW,WACPopC,EAAKsqK,aACLtqK,EAAK91D,MAAM2+N,UAAW,GACvB,MAGEnD,+BAAT,WACIvsO,KAAK+Q,MAAM2+N,UAAW,EACtB1vO,KAAK+Q,MAAMqgO,iBAAkB,EAC7BpxO,KAAKqxO,aAIT9E,iCACkC,MAA1BvsO,KAAK+Q,MAAMugO,cACXtxO,KAAK+Q,MAAMwgO,sBAAmB,EAC9BvxO,KAAK+Q,MAAMygO,WAAY,EACvBxxO,KAAKyxO,MAAMprJ,cAAcqrJ,QACzB1xO,KAAKyxO,MAAMprJ,cAAcsrJ,eAAY,EACrC3xO,KAAK+Q,MAAMugO,YAAYM,iBAAiBj5N,QAAQ,YAAK,SAAEk5N,SACvD7xO,KAAK+Q,MAAMugO,iBAAc,EACzBtxO,KAAK+Q,MAAMqgO,iBAAkB,IAMrC7E,6CAEIlxB,UAAUy2B,YAAYC,MAAM,CAAE94M,KAAM,WAC/BtE,KAAK,YACF,GAA8B,UAA1BmyC,EAAiB4d,MAGjB,OAFA7d,EAAK91D,MAAMihO,cAAe,OAC1BnrK,EAAKzzD,GAAGC,YAAYwzD,EAAKt0D,GAAG,8BAIxCs0D,EAAK91D,MAAMkhO,aAAeprK,EAAKqrK,iBAC/BrrK,EAAK91D,MAAMohO,cAAiBtrK,EAAKurK,kBAAoB,IAGjD/2B,UAAUg3B,cAAgBh3B,UAAUg3B,aAAaC,cACjDj3B,UAAUg3B,aAAaC,aACnB,CACIb,MACA,CACIc,WAAY,cACZhsJ,MAAO,CAAEisJ,MAAO,KAAMvkL,IAAK4Y,EAAK4rK,YAChCnsJ,OAAQ,CAAEksJ,MAAO,KAAMvkL,IAAK4Y,EAAK6rK,cAErCC,OAAO,IAERh+M,KAAK,YACJkyC,EAAK91D,MAAMqgO,iBAAkB,EAC7BvqK,EAAK91D,MAAMugO,YAAcjoK,EACzBxC,EAAK91D,MAAM6hO,iBAAmBvpK,EAAOuoK,iBAAiB,GAAGiB,cAAcC,YACvEjsK,EAAK91D,MAAMgiO,WAAa1pK,EAAOuoK,iBAAiB,GAAGiB,cAActsJ,MACjE1f,EAAK91D,MAAMiiO,YAAc3pK,EAAOuoK,iBAAiB,GAAGiB,cAAcvsJ,OAClEzf,EAAK4qK,MAAMprJ,cAAcsrJ,UAAYtoK,EACrCxC,EAAK4qK,MAAMprJ,cAAc4sJ,QAC1B,YACClxM,QAAQyd,MAAM6pB,GACdxC,EAAK91D,MAAMihO,cAAe,EAC1BnrK,EAAKzzD,GAAGC,YAAYwzD,EAAKt0D,GAAG,mCAIjC2/C,MAAM,YACLnwB,QAAQyd,MAAMsnB,GACdD,EAAK91D,MAAMihO,cAAe,EAC1BnrK,EAAKzzD,GAAGC,YAAYwzD,EAAKt0D,GAAG,kCAOxCg6N,mCACI,IAAI1lK,EAAQ7mE,KAAKkzO,YACjBlzO,KAAKmzO,WAAWt9N,KAAKgxD,GACjB7mE,KAAKozO,0BAA4BpzO,KAAKqzO,gBAG9C9G,wDACQzlK,EAAQ9mE,KAAKkzO,YAEjBlzO,KAAK+Q,MAAMuiO,UAAUC,eAAiBtzB,YAAY,WAC9Cp5I,EAAK91D,MAAMuiO,UAAUE,oBACrB3sK,EAAK91D,MAAMuiO,UAAUG,iBAAmB,IAAI1nO,KAA8C,IAAzC86D,EAAK91D,MAAMuiO,UAAUE,mBAA0B93I,cAAc7wC,MAAM,GAAI,KACzH,KAEH7qD,KAAK0zO,iBAAiB/+M,KAAK,SAAC00C,GACxB,IAAItC,EAAeF,EAAK8sK,aAAatqK,GACrCvC,EAAM8sK,aAAe/sK,EAAKgtK,mBAAmB9sK,GAC7C1vE,6BAA8B0vE,EAAc,SAACC,GACzCF,EAAMgtK,WAAa9sK,IAEvBH,EAAKssK,WAAWt9N,KAAKixD,KACtB5U,MAAM,SAACmX,GACNtnC,QAAQyd,MAAM6pB,GACdxC,EAAKzzD,GAAGC,aAAoB,MAALg2D,OAAK,EAALA,EAAO7pB,OAAK,KAAS,MAAL6pB,OAAK,EAALA,EAAOmqC,aAItD+4H,kDACsD,eAAZ,QAAlC1lK,OAAK91D,MAAMuiO,UAAUS,qBAAa,eAAErvJ,SACpC1kF,KAAK+Q,MAAMuiO,UAAUS,cAAclC,OACnC7xO,KAAK+Q,MAAMuiO,UAAUU,kBAAmB,GAGxCh0O,KAAK+Q,MAAMuiO,UAAUC,iBACrBrzB,cAAclgN,KAAK+Q,MAAMuiO,UAAUC,gBACnCvzO,KAAK+Q,MAAMuiO,UAAUC,eAAiB,KACtCvzO,KAAK+Q,MAAMuiO,UAAUG,iBAAmB,KACxCzzO,KAAK+Q,MAAMuiO,UAAUE,kBAAoB,IAIjDjH,uCACSvsO,KAAKi0O,iBACVj0O,KAAKmxO,cAGT5E,6CACSvsO,KAAKi0O,iBACVj0O,KAAKmxO,cAKT5E,qCAAgB1lK,GACZ7mE,KAAK+Q,MAAMwgO,iBAAmB1qK,EAC9B7mE,KAAK+Q,MAAMygO,WAAY,EACvBxxO,KAAKq0E,gBACLr0E,KAAKk0O,QAAQ7tJ,cAAcjnC,IAAMynB,EAAKstK,aAI1C5H,sCACIvsO,KAAK+Q,MAAMwgO,sBAAmB,EAC9BvxO,KAAK+Q,MAAMygO,WAAY,EACvBxxO,KAAKmxO,cAKT5E,gDACIvsO,KAAKmzO,WAAanzO,KAAKmzO,WAAWz3N,OAAO,YAAK,SAAE/O,SAAWk6D,EAAK91D,MAAMwgO,iBAAiB5kO,UACvF3M,KAAKo0O,OAAOj/M,SAAS8F,UACrBj7B,KAAKq0O,kBAIT9H,+CACIvsO,KAAK2rH,wBAAwB3rH,KAAKg4B,iBAAiBrD,KAAK,YACpD,GAAKmyC,EAEL,IAAID,EAAKytK,UAAYztK,EAAKssK,WAAWvjO,OAASi3D,EAAKytK,SAE/C,YADAztK,EAAKzzD,GAAGC,YAAYwzD,EAAKt0D,GAAG,wBAAyBs0D,EAAKytK,WAI9D,GAAIztK,EAAK0tK,UAAY1tK,EAAKssK,WAAWvjO,OAASi3D,EAAK0tK,SAE/C,YADA1tK,EAAKzzD,GAAGC,YAAYwzD,EAAKt0D,GAAG,wBAAyBs0D,EAAK0tK,WAI9D1tK,EAAKwqK,YACLxqK,EAAK5iD,uBAAuB4iD,EAAKssK,YACjCtsK,EAAKtxC,gBAIbg3M,sCACIvsO,KAAK+Q,MAAMyjO,aAAc,GAG7BjI,sCACIvsO,KAAK+Q,MAAMyjO,aAAc,GAG7BjI,oCAAe1lK,GAAf,aACUE,EAAiB,QAATsC,EAAC,MAADxC,OAAC,EAADA,EAAG1N,cAAM,eAAEy3K,MACzB,GAAK7pK,GAA0B,IAAZ,MAALA,OAAK,EAALA,EAAOn3D,QAErB,KAAMo3D,EAAOD,EAAM,GACbqC,EAAUpC,EAAK5kB,KAAK9I,WAAW,SAC/B4tB,GAAa,IAAIujK,WAEnBrhK,GACAlC,GAAWhlB,iBAAiB,OAAQ,SAACklB,IAEjC,IAAMD,GAAW,IAAIgjE,MACf7iE,GAAS5nB,SAASP,cAAc,UAChCkoB,GAAUC,GAAOmtK,WAAW,MAElCttK,GAAS/nB,IAAMgoB,GAAMjO,OAAOwxK,OAAO5vM,WACnCosC,GAAS9nB,OAAS,WAEd,IAAMmoB,GAAQL,GAASof,MAAQpf,GAASmf,OACpChd,GAAQnC,GAASof,MACjBhf,GAASJ,GAASmf,OAElBxf,EAAK2rK,YAAcnpK,GAAQxC,EAAK2rK,aAChCnpK,GAAQxC,EAAK2rK,WACblrK,GAASn7D,KAAKmqH,MAAMjtD,GAAQ9B,KAG5BV,EAAK4rK,aAAenrK,GAAST,EAAK4rK,cAClCnrK,GAAST,EAAK4rK,YACdppK,GAAQl9D,KAAKmqH,MAAMhvD,GAASC,KAGhCF,GAAOif,MAAQjd,GACfhC,GAAOgf,OAAS/e,GAEhBF,GAAQqtK,UAAUvtK,GAAU,EAAG,EAAGmC,GAAO/B,IACzC,IAAMu2G,GAASz2G,GAAQstK,OAAOC,UAAU9tK,EAAK+tK,eAAgB/tK,EAAKguK,cAC5DC,GAAQjuK,EAAKkuK,SAASl3D,IAC5Bh3G,EAAKqsK,WAAWt9N,KAAKk/N,OAI7B7tK,GAAWikK,cAAcpkK,EAAM,MAG/BG,GAAWhlB,iBAAiB,OAAQ,+HAC1B,UAAeglB,GAAWyjK,OAC1BxjK,GAASt/B,MAAM0wC,KAAK,IAAIwxJ,WAAW3iK,KACnCE,GAAO,IAAIy8H,KAAK,CAAC,IAAIgmC,WAAW5iK,KAAU,CAAE/kB,KAAM4kB,EAAK5kB,QAEvDilB,GAAQ,IAAI9lE,MACZoL,QAAU3M,KAAKi1O,yBACI,GAAMj1O,KAAKk1O,cAAc5tK,YAA5C,UAAmBC,UAEzBlwE,6BAA8BmwE,GAAkB,SAACs2G,IAC7Cz2G,GAAM8tK,WAAar3D,GACnBx0G,GAAK4nK,WAAW7pK,MAGpBA,GAAMysK,WAAa3sK,GACnBnnE,KAAKkxO,WAAW7pK,IAChBrnE,KAAKmzO,WAAWt9N,KAAKwxD,eACtB,GAEHH,GAAW2jK,kBAAkB7jK,IAGjC,IAAMC,GAAevnB,SAASy3H,eAAe,iBAC7ClwG,KAAiBA,GAAaz0D,MAAQ,MAGlC+5N,mCAAR,WACI,OAAOvsO,KAAKmzO,WAAWrpL,OAAO,SAAC+c,EAAKC,GAAM,SAAEn6D,QAAUk6D,EAAMC,EAAEn6D,QAAUk6D,GAAK,GAAK,GAG9E0lK,sBAAR,WACI,YAAKoI,OAAOtuJ,cAAcouJ,WAAW,MAAMC,UAAU10O,KAAKyxO,MAAMprJ,cAAe,EAAG,EAAGrmF,KAAK+Q,MAAMgiO,WAAY/yO,KAAK+Q,MAAMiiO,aAChHhzO,KAAKg1O,SAASh1O,KAAK20O,OAAOtuJ,cAAcuuJ,UAAU50O,KAAK60O,eAAgB70O,KAAK80O,gBAG/EvI,qBAAR,SAAiB1lK,GACb,IAAMC,EAAQ,IAAIvlE,KAClB,SAAM4yO,YAActtK,EACpBC,EAAMn6D,QAAU3M,KAAKi1O,yBACrBnuK,EAAMquK,WAAa99O,yBAA0ByvE,EAAMqtK,aAC5CrtK,GAGHylK,2BAAR,sBACIvsO,KAAK+Q,MAAMuiO,UAAUS,cAAgB,IAAIA,cAAc/zO,KAAK+Q,MAAMugO,aAClE,IAAIxqK,EAAO,GAWX,OATA9mE,KAAK+Q,MAAMuiO,UAAUS,cAAcqB,gBAAkB,SAACruK,GAAU,SAAKlxD,KAAKkxD,EAAMttD,OAChFzZ,KAAK+Q,MAAMuiO,UAAUS,cAAcsB,QACnCr1O,KAAK+Q,MAAMuiO,UAAUU,kBAAmB,EAE1B,IAAIhsM,QAAQ,SAAC++B,EAASC,GAChCH,EAAK91D,MAAMuiO,UAAUS,cAAcuB,OAASvuK,EAC5CF,EAAK91D,MAAMuiO,UAAUS,cAAcx0L,QAAU,SAAC6pB,GAAU,SAAOA,MAGpDz0C,KAAK,WAAM,YAGtB43M,uBAAR,SAAmB1lK,YACI,QAAfC,IAAKgtK,kBAAU,eAAElkO,QAAS,IAAMi3D,EAAK+sK,eAAc/sK,EAAK+sK,aAAe5zO,KAAK6zO,mBAAmB7zO,KAAK2zO,aAAa,CAAC,IAAI5J,WAAWljK,EAAKitK,iBACvH,QAAfzqK,IAAK8rK,kBAAU,eAAEvlO,QAAS,IAAMi3D,EAAKstK,cAAattK,EAAKstK,YAAc98O,oBAAqBwvE,EAAKsuK,WAAYn1O,KAAK60O,kBAGhHtI,yBAAR,SAAqB1lK,GACjB,OAAO,IAAIk9H,KAAKl9H,EAAM,CAAEzkB,KAAM,gBAG1BmqL,+BAAR,SAA2B1lK,GACvB,OAAO7mE,KAAKu1O,UAAUC,uBAAuB1zJ,IAAIC,gBAAgBlb,KAG7D0lK,0BAAR,SAAsB1lK,EAAYC,GAAlC,WAAkC,yBACvB,IAAI9+B,QAAc,SAAC++B,EAASC,GAC/B,IAEI,IAAMoC,EAAc1pB,SAASP,cAAc,SAC3CiqB,EAAYqsK,aAAa,MAAO3zJ,IAAIC,gBAAgBlb,IACpDuC,EAAY8hD,OACZ9hD,EAAYlnB,iBAAiB,QAAS,SAACglB,IACnCF,EAAOE,MAGXkC,EAAYlnB,iBAAiB,iBAAkB,WAEvCknB,EAAYquI,SAAW3wI,EACvBE,EAAO,wBAIXvpC,WAAW,WACP2rC,EAAYssK,YAAc5uK,GAC3B,KAEHsC,EAAYlnB,iBAAiB,SAAU,WAEnC,IAAMglB,GAASxnB,SAASP,cAAc,UACtC+nB,GAAOqf,MAAQnd,EAAYusK,WAC3BzuK,GAAOof,OAASld,EAAYwsK,YAE5B,IAAM3uK,GAAMC,GAAOutK,WAAW,MAC9BxtK,GAAIytK,UAAUtrK,EAAa,EAAG,EAAGlC,GAAOqf,MAAOrf,GAAOof,QAEtDrf,GAAI0tK,OAAOkB,OACP,aACI9uK,EAAQK,KAEZ,aACAiC,EAAKyrK,yBAKd5tK,IACHnlC,QAAQyd,MAAM0nB,QAKlBqlK,2BAAR,iBACI,OAAsC,QAA/B1lK,OAAKivK,kCAA0B,eAAEvvJ,QAAS,GAG7CgmJ,4BAAR,iBACI,OAAsC,QAA/B1lK,OAAKivK,kCAA0B,eAAExvJ,SAAU,GAG9CimJ,qCAAR,iBACUzlK,EAAWpnB,SAASm/I,iBAAiB,cAC3C,OAAK/3H,GAAaA,EAASl3D,OACS,QAA7Bi3D,IAASC,EAASl3D,OAAS,UAAE,eAAE2zF,wBADI,+CAvbzCzjG,WAGAnH,6CA0CJ+2L,uBAWAA,0CACAA,8BACAA,0BACAA,0BACAA,4BAEAA,6BACAA,8BACAA,uBAEAA,YAASvuL,MAAC,yBACVuuL,YAASvuL,MAAC,2BACVuuL,YAASvuL,MAAC,oCACVuuL,YAASvuL,MAAC,mCACVuuL,YAASvuL,MAACxF,2BACV+zL,WA/BQ68C,qUAAuB1wO,KANnC6zL,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,qBACVC,SCxCW,mvJD2CFs1N,IAAgC1qO,ofErC7CrF,+BAgBI,WAAYqqE,GAAZ,MACI2lK,YAAM3lK,EAAG,2BAA4BtlE,KAAY/E,GAAO0D,YAA6BA,gBAA+BF,KAJ/G,eAAgB8mE,EAAK60H,aAOrB,OAViCr/L,QAUjCiwO,wBAAT,WACI,OAAOvsO,KAAKy8B,OAGP8vM,qBAAT,WACI,IAAM1lK,EAAa7mE,KAAKw6M,qBACxB,OAAOx6M,KAAKwB,EAAEoyL,iBAAiBrhL,GAAG,qBAAsBs0D,6CA5BvD/mE,uCAaJ4vL,4BACAA,uBACAA,wBACAA,WAJQ68C,qUAAwBhwO,KANpCmzL,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,sBACVC,SCbW,u8BDgBFs1N,IAAiC1qO,ufEV9C7E,cAEIgD,gBAAY,kBAiDZ,WAAY6mE,GAAZ,MACI2lK,YAAM3lK,EAAG,mBAAoB7pE,KAAMgD,KApC9B,4BAA6B,EAiCrB8mE,kBAAkB,IAuBnCA,cAAc,SAACuC,IACNvC,EAAK/1D,MAAMglO,YAChB1sK,EAAE3lB,iBACF2lB,EAAEssI,6BAuBN7uI,UAAU,WAAM,SAAKkvK,IAAIC,aA9EzB,OARkCn5O,QAQlCgP,sBAAaygO,2BAAY,KAMzB,WACI,OAAOvsO,KAAKk2O,mBAPhB,SAA0BrvK,IACjBA,IACL7mE,KAAKk2O,cAAgBrvK,EACrB7mE,KAAKm2O,8CAQTrqO,sBAAaygO,0BAAW,KAMxB,WACI,OAAOvsO,KAAKo2O,kBAPhB,SAAyBvvK,IAChBA,IACL7mE,KAAKo2O,aAAevvK,EACpB7mE,KAAKm2O,8CAOTrqO,sBAAWygO,4BAAa,KAIxB,WACI,OAAOvsO,KAAK+Q,MAAMslO,mBALtB,SAAyBxvK,GAAzB,WACI7mE,KAAK+Q,MAAMslO,cAAgBxvK,EAC3BppC,WAAW,WAAM,SAAK64M,iBAAiB,sCAYxB/J,4BAAnB,WACItqL,OAAOC,iBAAiB,YAAaliD,KAAKu2O,YAAa,CAAEC,SAAS,IAClEv0L,OAAOC,iBAAiB,aAAcliD,KAAKu2O,YAAa,CAAEC,SAAS,KAGpDjK,oCAAnB,iBACIvsO,KAAK+Q,MAAM0lO,QAAsB,QAAZ5vK,OAAK4vK,eAAO,QAAI,GAChCz2O,KAAK+Q,MAAM0lO,QAAQC,WAAU12O,KAAK+Q,MAAM0lO,QAAQC,SAAW,WAC3D12O,KAAK+Q,MAAM0lO,QAAQ3jH,kBAAiB9yH,KAAK+Q,MAAM0lO,QAAQ3jH,gBAAkB,WACzE9yH,KAAK+Q,MAAM0lO,QAAQE,WAAU32O,KAAK+Q,MAAM0lO,QAAQE,SAAW,IAGjDpK,+BAAnB,WACItqL,OAAOu0J,oBAAoB,YAAax2M,KAAKu2O,aAC7Ct0L,OAAOu0J,oBAAoB,aAAcx2M,KAAKu2O,cASlDhK,sCACIvsO,KAAK+Q,MAAMglO,WAAY,GAG3BxJ,oCACIvsO,KAAK+Q,MAAMglO,WAAY,GAG3BxJ,sCACIvsO,KAAKm2O,aAGT5J,4CACIvsO,KAAKm2O,aAGT5J,sCACSvsO,KAAK42O,mBAAmB52O,KAAKg2O,IAAI34G,SAK1CkvG,4BACIvsO,KAAK+Q,MAAMslO,cAAgBr2O,KAAKg2O,IAAIpB,aAGxCrI,iCACI,IAAM1lK,EAAQ7mE,KAAK62O,YACb/vK,EAAS9mE,KAAK82O,aAEhBjwK,GACA7mE,KAAKg2O,IAAIpjM,IAAI,cAAei0B,EAAQ,GAGpCC,IAC+B,GAA3B9mE,KAAK+2O,oBAA2BjwK,EAAS9mE,KAAKg3O,gBAAkBh3O,KAAK+2O,mBACrE/2O,KAAKg2O,IAAIpjM,IAAI,eAAgB5yC,KAAK+2O,oBAGlC/2O,KAAKg2O,IAAIpjM,IAAI,eAAgBk0B,EAAS9mE,KAAKg3O,kBAInDh3O,KAAKs2O,iBAGD/J,0BAAR,WACIvsO,KAAKg2O,IAAI34G,QACiB,MAAtBr9H,KAAKq2O,eAA4Br2O,KAAKg2O,IAAIiB,YAAYj3O,KAAKq2O,cAAe,CAAEa,MAAO,IACnFl3O,KAAK42O,mBAAmB52O,KAAKg2O,IAAImB,gDApIpCr3O,oCAmBJ4vL,YAASvuL,MAAC,kCACVuuL,oCACAA,yBACAA,8BAGAA,6BAWAA,WAnBQ68C,qUAAgBxvO,KAN5B2yL,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,cACVC,SCfW,4ODkBFs1N,IAAyBnrO,+dEXtChE,+BAmBI,WAAYypE,GAAZ,MACI2lK,YAAM3lK,EAAG,yBAA0BtlE,KAAYnE,GAAO8C,YAA6BA,gBAA+BF,KAJ7G,4BAAqB,IAQ9B,OAZwC9C,QAYxC4O,sBAAWygO,4BAAa,KAIxB,WACI,OAAOvsO,KAAKo3O,QAAQf,mBALxB,SAAyBxvK,GACrB7mE,KAAKo3O,QAAQf,cAAgBxvK,mCAOd0lK,wBAAnB,WACI,OAAOvsO,KAAKy8B,OAGG8vM,oCAAnB,gBAC8B,IAAtBvsO,KAAKq3O,aACLr3O,KAAK+Q,MAAMumO,OAASt3O,KAAKq3O,aAEzBr3O,KAAK+Q,MAAMumO,OAASt3O,KAAKuS,GAAG,WAEhCvS,KAAKu3O,kBAGThL,kCACIvsO,KAAKo3O,QAAQI,kBAIjBjL,uCACI,GAAKvsO,KAAK42O,kBAWN52O,KAAK2kE,4BAXoB,CAEzB,GAAI3kE,KAAKo3O,QAAQ/nF,UAEb,YADArvJ,KAAKoT,GAAGC,YAAYrT,KAAKuS,GAAG,wBAAyB,QAKzDvS,KAAKo3O,QAAQ5/M,OACbx3B,KAAKikB,uBAAuBjkB,KAAKq2O,iBAMjC9J,2BAAR,mBACI,OAA4E,QAArEzlK,EAA4C,QAA5CD,WAAS6iI,cAAc,6BAAqB,eAAEnmG,+BAAuB,eAAEhd,OAAQ,GAAK,GAGvFgmJ,2BAAR,sBACI9uM,WAAW,WACPopC,EAAK91D,MAAM8lO,YAAchwK,EAAK4wK,iBAC9B5wK,EAAK91D,MAAM+lO,aAAe70L,OAAO0hD,YAAc,GAChD,+CA9EF7jG,wCAiBJ4vL,YAASvuL,MAAClE,mBACVyyL,8BACAA,oCACAA,mCACAA,WALQ68C,qUAAsBpvO,KANlCuyL,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,oBACVC,SChBW,+9CDmBFs1N,IAA+B1qO,0hBEP5C/D,0EACI,mBAAsB,GACtB+oE,qBAAqB,KACrBA,mBAA2B,IAC/B,OAJoBjpE,QAIpB2uO,EAJA,CAAoBhrO,qBAmDhB,WAAYslE,EACAC,GADZ,MAEI0lK,YAAM3lK,EAAG,4BAA6BtlE,KAAYzD,GAAOoC,YAA6BA,gBAA+BF,KAD7G,+BArCHqpE,kBAA0B,EAE3BA,6BAAqC,6BAEpCA,SAAc,CACnBquK,IAAK,GACLC,MAAOtuK,EAAKuuK,cACZC,+BAA+B,EAC/BC,wBAAwB,EACxBhF,YAAa,EAAI,EACjBiF,4BAA4B,EAC5BC,iBAAkB,CACdt6O,cACAA,cACAA,cACAA,cACAA,eACAA,UACAA,aACAA,YACAA,cACAA,aACAA,mBACAA,YACAA,YACAA,yBAEJu6O,2BAA2B,EAC3BC,4BAA6B,GAIvB7uK,gBAAsC,IAAIqmH,eAC1CrmH,kBAAmD,IAAIqmH,eAoFjErmH,wBAAwB,SAACtC,EAAkBC,GACvCqC,EAAK8uK,cAAc32N,KAAKulD,GACxBsC,EAAK+uK,gBAAgB52N,KAAKwlD,MA9EX,OA5CwBppE,QA4CxB2uO,4BAAnB,WACIvsO,KAAK+Q,MAAMsnO,iBAAkB,GAGd9L,oCAAnB,sBAEI9uO,mBAAyBk3B,KAAK,YACtBmyC,GAAWA,EAAQl3D,SACnBi3D,EAAK91D,MAAMunO,UAAYxxK,EAAQ1wC,IAAI,YAAK,SAAEpR,KAC1C6hD,EAAK0xK,qBAEVrmL,MAAM,YACLnwB,QAAQC,IAAI8kC,MAODylK,+BAAnB,WACIvsO,KAAK+Q,MAAMsnO,iBAAkB,GAGjB9L,oBAAhB,WACI,OAAIvsO,KAAKw4O,iBAAgB,IACzBx4O,KAAK2kE,yBACE,GAGH4nK,4BAAR,6BACwB,QAAhBzlK,OAAK2xK,mBAAW,eAAEC,YAClB14O,KAAKy4O,YAAY5G,OAAOl9M,KAAK,SAACqyC,GAC1BH,EAAK4xK,YAAYpD,MACb,CAAEsD,SAAU9xK,EAAK+xK,oBACjB/xK,EAAKgyK,OACLhyK,EAAKiyK,sBACL,SAAC1vK,MACAlX,MAAM,SAACkX,GACJrnC,QAAQC,IAAIonC,OAErBlX,MAAM,SAAC8U,GACNjlC,QAAQyd,MAAMwnB,MAKtBhnE,KAAKy4O,YAAc,IAAIh7O,MAA6C,QAAjCspE,EAAkB,QAAlBsC,OAAK0vK,qBAAa,eAAE1yJ,qBAAa,eAAErhE,IACtEhlB,KAAKy4O,YAAYpD,MACb,CAAEsD,SAAU34O,KAAK44O,oBACjB54O,KAAK64O,OACL74O,KAAK84O,sBACL,SAAC9xK,MACA9U,MAAM,SAAC8U,GACJjlC,QAAQC,IAAIglC,OAIhBulK,4BAAR,SAAwB1lK,GAAxB,WACI,GAAI7mE,KAAKy4O,YACL,YAAKA,YAAY5G,OAAOl9M,KAAK,SAAC00C,GAC1BxC,EAAYC,EAAK7iD,yBAA2B6iD,EAAKnC,0BAClDzS,MAAM,SAACmX,GACNtnC,QAAQyd,MAAM6pB,GACdvC,EAAKnC,2BAEF,GAIf4nK,oCAAgB1lK,GACZ7mE,KAAK+Q,MAAMioO,qBACXh5O,KAAK+Q,MAAMioO,mBAAqBh5O,KAAK+Q,MAAMioO,mBAAqBh5O,KAAK+Q,MAAMunO,UAAU1oO,OACrF5P,KAAKi5O,eACLj5O,KAAKu4O,mBAQThM,iCAAY1lK,GACJ7mE,KAAKw4O,gBAAgB3xK,IACzB7mE,KAAK2kE,yBAGD4nK,6BAAR,WACI,IAAM1lK,EAAW7mE,KAAKs+D,oBAAoBoB,QAAQ1/D,KAAKk5O,4BACjDpyK,EAAQ9mE,KAAK+Q,MAAMunO,UAAU38N,QAAQkrD,GAC3C,OAAIC,EAAQ,GACR9mE,KAAK+Q,MAAMioO,mBAAqBh5O,KAAK+Q,MAAMunO,UAAU1oO,OAAS,EACvD5P,KAAK+Q,MAAMunO,UAAUt4O,KAAK+Q,MAAMioO,sBAG3Ch5O,KAAK+Q,MAAMioO,mBAAqBlyK,EACzBD,IAGH0lK,yBAAR,WACIvsO,KAAKs+D,oBAAoBU,QAAQh/D,KAAKk5O,2BAA4Bl5O,KAAK+Q,MAAMunO,UAAUt4O,KAAK+Q,MAAMioO,sBAG9FzM,0BAAR,SAAsB1lK,EAAiBC,GACnC,IAAMuC,EAAS,SAAChC,GAAKG,IACjB,OAAIH,GAAMG,GACCA,GAEJH,IAQLH,GAAeL,EAAkBC,EACnCA,EAAmBD,EACjBI,GAAa76D,KAAKC,MAJG,GAIG66D,IACxBE,GAAciC,EAAOj9D,KAAKC,MAAM46D,GAAa,GANxB,KAO3B,GAAIA,GARsB,IAQU,CAChC,IAAIE,GAAQkC,EAAOpC,GATG,KAYtB,MAAO,CACHsf,MAAOpf,GACPmf,OAJSjd,EAAOj9D,KAAKC,MAAM86D,GAAQ,GAThB,MAgB3B,MAAO,CAAEof,MAAOtf,GAAYqf,OAAQlf,8CAjMnCtnE,WAOAnC,+CAeJ+xL,YAASvuL,MAAC,kCAEVuuL,wBAIAA,6BA2BAA,+BACAA,kCACAA,YApCQ68C,qUAAyB1uO,KANrC6xL,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,uBACVC,SCrBW,mlBDwBFs1N,IAAkC1qO,8BEhB3C,WACY0qO,EACA1lK,EACAC,GAFA9mE,mBACAA,qBACAA,iBALJA,cAAU,EAOlB,6BAAawsO,0BAAW,KAAxB,SAAyBD,GAErB,IAAI1lK,EAAQ7mE,KAAKqrH,UAAUwoE,cAAc04C,GACrCvsO,KAAKm5O,UAAStyK,GAASA,GACvBA,IAAU7mE,KAAKo5O,SAEfp5O,KAAKm9H,cAAck8G,mBAAmBr5O,KAAKs5O,aAC3Ct5O,KAAKo5O,SAAU,GACRvyK,GAAS7mE,KAAKo5O,UAErBp5O,KAAKm9H,cAAcE,QACnBr9H,KAAKo5O,SAAU,6EAxBA1pD,qBAAaA,0BAC/B1xL,6CAYJ0xL,yBAeAA,WAxBQ88C,qUAAuBvuO,GADnC,eAAU,CAAE+Y,SAAU,mBACVw1N,4ICWT,WAAoBD,gBAFXvsO,cAAuC,QAIhD,uCACI,MAAO,0BAA0BA,KAAK0lO,UAG1C8G,sCACI,OAAOxsO,KAAKu5O,MAAMlzJ,wDAtBNqpG,8CASfA,yBACAA,sBACAA,uBACAA,0BACAA,WANQ88C,qUAAqB1tO,KALjC4wL,aAAU,CACP14K,SAAU,oBACVC,SCJW,olBDOFu1N,6FECDxsO,mBAA+B,GAEhC,kCAAP,SAAsBusO,GAAtB,WACIA,EAAGiN,OAAO1nO,UAAU,WAChB+0D,EAAK4yK,cAAc9gO,QAAQ,YAAK,SAAE6uN,SAClC3gK,EAAK4yK,cAAc5jO,KAAK02N,KAE5BA,EAAGmN,OAAO5nO,UAAU,WAAM,SAAK2nO,cAAgB5yK,EAAK4yK,cAAc/9N,OAAO,YAAK,WAAM6wN,OAT/EC,qUAAkBntO,KAH9BqwL,cAAW,CACR7jJ,WAAY,UAEH2gM,qzBCmBT,WAAYD,GACRA,EAAE/3B,YAAc,OAChB+3B,EAAEh4B,UAAY,0DAlB8Cl2M,QAevDmuO,EAAuChtO,KADnD,eAAU,CAAEwX,SAAU,uCACVw1N,oBAST,WAAYD,GACRA,EAAE/3B,YAAc,OAChB+3B,EAAEh4B,UAAY,0DA1BoEj2M,QAuB7EkuO,EAAoChtO,KADhD,eAAU,CAAEwX,SAAU,oCACVw1N,oBAST,WAAYD,GACRA,EAAE/3B,YAAc,OAChB+3B,EAAEh4B,UAAY,0DAjCO51M,UA8BhB6tO,EAAiChtO,KAD7C,eAAU,CAAEwX,SAAU,oCACVw1N,oBAUT,WAAYD,GACRA,EAAEnqL,KAAO,OACTmqL,EAAEz2B,cAAgB,UAClBy2B,EAAE32B,WAAa,WAEf22B,EAAEv2B,gBACF,CACIt3E,aAAc,OACdC,aAAc,WAIlB3+H,KAAK25O,aAAepN,EAAEz5J,eAAehhE,UAAU,SAAC+0D,GAC5CA,EAAE3sD,UAAUw7B,OAAO,YAAa,CAAE7L,UAAU,MAKpD,0CACI7pC,KAAK25O,aAAarnO,wDA5DjB/T,QAuCIiuO,EAA2BhtO,KADvC,eAAU,CAAEwX,SAAU,uBACVw1N,oBA4BT,WAAYD,GACRA,EAAEnqL,KAAO,OACTmqL,EAAEz2B,cAAgB,OAClBy2B,EAAE32B,WAAa,WAEf22B,EAAEv2B,gBACF,CACIt3E,aAAc,SACdC,aAAc,WAIlB3+H,KAAK25O,aAAepN,EAAEz5J,eAAehhE,UAAU,SAAC+0D,GAC5CA,EAAE3sD,UAAUw7B,OAAO,YAAa,CAAE7L,UAAU,MAKpD,0CACI7pC,KAAK25O,aAAarnO,wDAtFjB/T,QAiEIiuO,EAAsBhtO,KADlC,eAAU,CAAEwX,SAAU,kBACVw1N,oBA2BT,WAAYD,EAAuB1lK,GAE/B,IAAMC,EAAW1oE,SAAgBrF,OAEjCwzO,EAAEnqL,KAAO,OACTmqL,EAAEz2B,cAAgBjvI,EAAU1pC,YAAYE,gBACxCkvM,EAAE32B,WAAe9uI,EAAS8sI,WAAsB,SAAT,OACvC24B,EAAEniG,IAAM,KACRmiG,EAAEt+K,IAAM,qDApGP1vD,YAPAP,QAkGIwuO,EAAsBhtO,KADlC,eAAU,CAAEwX,SAAU,kBACVw1N,oBAeT,WAAYD,EAAyB1lK,GACjC0lK,EAAEnxN,OAASyrD,EAAU1pC,YAAY9hB,UACjCkxN,EAAEr3B,UAAY,CAAE0kC,UAAW,2DA5GWp7O,YAPrCR,QAgHIwuO,EAAqBhtO,KADjC,eAAU,CAAEwX,SAAU,iBACVw1N,oBAST,WAAYD,EAAyB1lK,GACjC0lK,EAAEnxN,OAASyrD,EAAU1pC,YAAYosE,YACjCgjI,EAAEr3B,UAAY,CAAE0kC,UAAW,2DApHWp7O,YAPrCR,QAwHIwuO,EAAuBhtO,KADnC,eAAU,CAAEwX,SAAU,mBACVw1N,oBAST,WAAYD,EAAyB1lK,GACjC,IAAIC,EAAcD,EAAU1pC,YAAYosE,YAClClgC,EAAevC,EAAYitC,YAAYltC,EAAU1pC,YAAYs9K,mBAC9C,IAAjBpxI,IACAvC,EAAcA,EAAY1pC,UAAU,EAAGisC,IAE3CkjK,EAAEnxN,OAAS0rD,EACXylK,EAAEr3B,UAAY,CAAE0kC,UAAW,2DAjIWp7O,YAPrCR,QAgIIwuO,EAA8BhtO,KAD1C,eAAU,CAAEwX,SAAU,0BACVw1N,oBAuCT,WAAoBD,EAA+B1lK,GAA/B7mE,SAA+BA,iBAvB1CA,iBAAa,EACtB,6BAAsCwsO,4BAAa,KAAnD,SAAoDD,GAApD,WACIvsO,KAAKkB,EAAE66E,mBAAqB,SAACjV,GACzB,IAAMuC,EAASvC,EAAKD,EAAKxsD,WACnB0sD,EAAWD,EAAKylK,GAKtB,GAHe,MAAXljK,IAGCxC,EAAKgzK,YAAyB,IAAXxwK,EACpB,OAAO,KAGX,IAAIrC,GAAS,SAAaqC,EAAQxC,EAAKwkD,UAAUluF,YAAY9hB,WAE7D,OAAI0rD,IACAC,EAAYA,EAAM,IAAID,GAGnBC,6EA3JVroE,cARAX,2CA+IJ0xL,4BACAA,+BACAA,QAAKvuL,MAAC,8BAJEqrO,EAAgChtO,KAD5C,eAAU,CAAEwX,SAAU,+BACVw1N,oBA+BT,WAAYD,EAAyB1lK,GACjC0lK,EAAEnxN,OAASyrD,EAAU1pC,YAAY8yI,eACjCs8D,EAAEr3B,UAAY,CAAE0kC,UAAW,2DAvKWp7O,YAPrCR,QA2KIwuO,EAA0BhtO,KADtC,eAAU,CAAEwX,SAAU,sBACVw1N,mBAST,WAAYD,EAAyB1lK,GACjC0lK,EAAEnxN,OAASyrD,EAAU1pC,YAAY47B,cAAgB,MACjDwzK,EAAEr3B,UAAY,CAAE0kC,UAAW,2DA/KWp7O,YAPrCR,QAmLIwuO,EAAyBhtO,KADrC,eAAU,CAAEwX,SAAU,qBACVw1N,oBAST,WAAYD,EAAyB1lK,GACjC0lK,EAAEnxN,OAASyrD,EAAU1pC,YAAYouF,WACjCghH,EAAEr3B,UAAY,CAAE0kC,UAAW,2DAvLWp7O,YAPrCR,QA2LIwuO,EAAsBhtO,KADlC,eAAU,CAAEwX,SAAU,kBACVw1N,oBAST,WAAYD,EAAyB1lK,GACjC0lK,EAAEnxN,OAASyrD,EAAU1pC,YAAY88I,cACjCsyD,EAAEr3B,UAAY,CAAE0kC,UAAW,2DA/LWp7O,YAPrCR,QAmMIwuO,EAAyBhtO,KADrC,eAAU,CAAEwX,SAAU,qBACVw1N,oBAST,WAAoBD,EAA+B1lK,GAA/B7mE,SAA+BA,SAGnD,8CACI,IAAMusO,EAAmBvsO,KAAKkB,EAAEi0B,SAC5B0xC,EAAoB3nE,iBAAsBqtO,EAAiB7uM,WAC1DmpC,IAAmBA,EAAoB,IAAI3nE,KAAUqtO,EAAiB7uM,UAAW,KACtF,IAAMopC,EAAQD,EAAkBnxB,OAAO,mBAEvCoxB,EAAMjxD,KAAK,CACPusC,KAAM,SACN03L,kBAAkB,EAClBtmI,QAASxzG,KAAKwB,EAAEoyL,iBAAiBrhL,GAAG,sBACpCs/L,mBAAoB,SAACxoI,GACjB,OAAe,MAAXA,EAAE72D,OACCnb,aAAcgyE,EAAE72D,OAAO,MAItCq0D,EAAkBnxB,OAAO,kBAAmBoxB,6CAxNyDroE,YAHpGqB,OAuMI0sO,EAAsBhtO,KADlC,eAAU,CAAEwX,SAAU,6BACVw1N,oBA0BT,WAAoBD,EAAiC1lK,GAAjC7mE,SAAiCA,iBAKrD,6BAA6BwsO,uBAAQ,KAWrC,WACI,OAAOxsO,KAAK+5O,eAZhB,SAAsCxN,GAAtC,IAGQzlK,EAHRD,QACI7mE,KAAK+5O,UAAYxN,EACJ,MAATA,KAEAvsO,KAAKkB,EAAEka,OAAO2f,WAAWue,WAAWt5C,KAAKqrH,UAAUluF,YAAY88I,iBAAgBnzG,EAAS9mE,KAAKqrH,UAAUluF,YAAY88I,eACnHj6K,KAAKkB,EAAEka,OAAO2f,WAAWue,WAAWt5C,KAAKqrH,UAAUluF,YAAYosE,eAAcziC,EAAS9mE,KAAKqrH,UAAUluF,YAAYosE,aACjHvpG,KAAKkB,EAAEka,OAAO2f,WAAWue,WAAWt5C,KAAKqrH,UAAUluF,YAAY9hB,aAAYyrD,EAAS9mE,KAAKqrH,UAAUluF,YAAY9hB,WAE9GyrD,IACL9mE,KAAKkB,EAAEka,OAAS0rD,EAAOrrB,MAAM,KAAKqO,OAAO,SAACuf,EAAatC,GAAc,UAAUA,EAAC,KAAIF,EAAKkzK,UAAS,KAAK,IAAIlvL,MAAM,GAAG,+EA5O9ErsD,YAPrCR,0CA0OJ0xL,QAAKvuL,MAAC,qBANEqrO,EAA0BhtO,KADtC,eAAU,CAAEwX,SAAU,sBACVw1N,kCAyBF,2BADP,SACeD,GACXA,EAAM55J,oDAFT+8G,eAAYvuL,MAAC,QAAS,CAAC,cADfqrO,EAAuBhtO,KADnC,eAAU,CAAEwX,SAAU,8BACVw1N,oBAYT,WAAYD,EAA+B1lK,iBACvC0lK,EAAE/4L,UAAYxzC,KAAKwzC,UACnB+4L,EAAEj4N,KAAO,QACTi4N,EAAEyN,YAAch6O,KAAKg6O,YACrBzN,EAAE59E,OAAS3uJ,KAAKi6O,OAAOl8M,2DA9PtB9+B,YAZAd,2CAmQJuxL,6BACAA,WAFQ88C,EAAsBhtO,KADlC,eAAU,CAAEwX,SAAU,mBACVw1N,qBAcT,WAAY3lK,EAA0BC,GAAtC,MACI0lK,YAAM3lK,EAAGC,IAAO9mE,KAChB,SAAEsyB,MAAQ,iBAH2B/yB,iDApQpCP,YAXAb,QA+QIouO,EAAuB/sO,KADnC,eAAU,CAAEwX,SAAU,oBACVu1N,IAAgCh2N,kBAiBzC,WAAYg2N,EACA1lK,EACAC,EACAuC,GAHZ,WACYrpE,wBACAA,gCACAA,SARHA,uBAAmB,EACnBA,mBAAe,EAEhBA,yBAAsB,UAS9BA,kBAAe,SAACgnE,EAAWoC,GACvB,IAAMlC,GAAQH,EAAKmzK,cAAgB9wK,EAAQ52D,QAAU42D,EAAQ52D,MACvDy0D,GAAmBF,EAAKu2D,yBAAyBC,wBAAwBx+H,IACzEqoE,GAAYL,EAAKq2D,iBAAiBK,gBAAgBx2D,IACxDG,GAAUjyC,SAAS2O,KAAOijC,EAAKjjC,OAASijC,EAAKozK,iBACvC/wK,EAAQluB,OAAOhgC,QACf6rD,EAAKvlE,EAAEoyL,iBAAiBrhL,GAAG20D,GAAQ,SAAW,UACpDE,GAAUjyC,SAASokC,MAAQ2N,GACrBH,EAAKqzK,WAAarzK,EAAKszK,oBACvBtzK,EAAKuzK,iBAAc,EACzB,IAAMnzK,GAAUC,GAAUjyC,SAASolN,iBACnCvzK,EAAUvnB,YAAY0nB,KAdtBolK,EAAOzxN,aAAe9a,KAAK8a,6DA7R1Bnc,cAV2F+wL,0BAA3FA,kCAMA5vL,0CAqRJ4vL,4BACAA,sBACAA,kCACAA,8BACAA,WALQ88C,EAA+BhtO,KAD3C,eAAU,CAAEwX,SAAU,qCACVw1N,oBAmCT,WAAoBD,eAEpB,uCACI,IAAMA,EAAUvsO,KAAKw6O,KAAK98M,QAAW2oD,cAAckd,wBAAwBK,IAGrE/8B,EAAS5kB,OAAO0hD,YAAc4oI,EAG9BzlK,EAAcpnB,SAASm/I,iBAAiB,8BACxCx1H,EAAavC,EAAYA,EAAYl3D,OAAS,GAC9Cm3D,EAAmBsC,GAAcA,EAAWu4E,cAAoBv4E,EAAWu4E,aAAgBunF,aAAe9/J,EAAW+/J,WAAiB,EAGtIpiK,EAAiBtnB,SAAS/hB,uBAAuB,0BACjDyrC,GAAwB1pB,SAAS4pL,YAClC9lI,iBAAiBx8B,EAAeA,EAAep3D,OAAS,GAAI,IAC5D25N,iBAAiB,kBAAkBjtB,MAAM,OAAOvjK,KAAK,IAG1D/4C,KAAKw6O,KAAKl0J,QAAUzf,EAAS,IAAMA,EAAS5kB,OAAO0hD,YAAc98B,GAAUuC,EAAuBrC,4CAxU7EroE,sCAkTxBgxL,WADQ88C,EAAqBhtO,KADjC,eAAU,CAAEwX,SAAU,4BACVw1N,oBAyCT,WAAoBD,EACR1lK,GADQ7mE,iBACRA,wBACRA,KAAKka,UAAU68K,YAAc,CAAEC,MAAO,YACtCh3L,KAAKka,UAAUugO,mBAAoB,EARvC,6BAAajO,uBAAQ,KAArB,SAAsBD,GAClBvsO,KAAK06O,UAAYnO,EACbvsO,KAAK06O,YAAW16O,KAAKka,UAAU68K,YAAc,CAAEC,MAAO,uDAUvDw1C,oBADP,SACeD,GAEX,GADAA,EAAM55J,mBACF3yE,KAAK06O,UAET,CAAK16O,KAAK26O,QAAQn9M,SAAS,OAAMx9B,KAAK26O,QAAa36O,KAAK26O,QAAO,KAC/D,IAAM9zK,EAAa7mE,KAAK46O,YAAc56O,KAAKka,UAAU1H,MAC/Cs0D,EAAW,GAAG9mE,KAAK26O,QAAU9zK,EAEnC7mE,KAAKuc,iBAAiBzC,SAAS,CAACgtD,GAAW9mE,KAAK66O,sDAzWqDp8O,YADpGnE,0CAiVJo1L,2BACAA,4BACAA,0BAGAA,yBAWAA,eAAYvuL,MAAC,QAAS,CAAC,cAjBfqrO,EAAqBhtO,KADjC,eAAU,CAAEwX,SAAU,kBACVw1N,oBAmCT,WAAYD,GAAZ,WAFUvsO,aAAU,IAAI0vL,eAOxB1vL,kBAAe,SAAC8mE,EAAWuC,GACvB,IAAMtC,EAAWF,EAAK2+F,UAAY3+F,EAAK2+F,SAASn8F,GAChDvC,EAAUsL,UAAY/I,EAAKpsB,cAAgB,GACvC8pB,EACAD,EAAUvtD,UAAUC,IAAI,YAI5BstD,EAAUg0K,QAAU,SAAC9zK,GACjBA,EAAM2L,kBACN9L,EAAK0tF,QAAQ/yI,KAAK6nD,KAdtBkjK,EAAO3xN,UAAc2xN,EAAO3xN,UAAY,IAAE,eAC1C2xN,EAAOzxN,aAAe9a,KAAK8a,6DAnX1Bnc,4CA8WJ+wL,yBACAA,YAFQ88C,EAAsBhtO,KADlC,eAAU,CAAEwX,SAAU,6BACVw1N,mBA0BT,WAAYD,EAAyB1lK,6BACjC7mE,KAAK+6O,mBAAmBC,eAAezO,mDA/XtCntO,aACAE,MA4XIktO,EAAuBhtO,KADnC,eAAU,CAAEwX,SAAU,gCACVw1N,oBCxYT,WAAoBD,YAUpBvsO,gBAAqB,GAsFrBA,gBAAqB,OAUrBA,iBAAsB,QAWtBA,iBAAsB,QAnHlBusO,EAAE0O,eAAgB,EAGlB1O,EAAE2O,WAAa,WAEfl7O,KAAKm7O,kBAOT,6BAAI3O,uBAAQ,KAAZ,WAAyB,OAAOxsO,KAAKo7O,eACrC,SAAsB7O,GAClBvsO,KAAKo7O,UAAY7O,EAGjBvsO,KAAKkB,EAAEm6O,gBAAqC,UAAlBr7O,KAAKo7O,UAAwB,EAAI,EAG3Dp7O,KAAKkB,EAAEo6O,iBAAsC,UAAlBt7O,KAAKo7O,2CAIpCtvO,sBAAI0gO,wBAAS,KAAb,WAA2B,OAAOxsO,KAAKu7O,gBACvC,SAAuBhP,GACnBvsO,KAAKu7O,WAAahP,EAClBvsO,KAAKw7O,uBACLx7O,KAAKm7O,mDAKTrvO,sBAAI0gO,wBAAS,KAAb,WAA2B,OAAOxsO,KAAKy7O,gBACvC,SAAuBlP,GACnBvsO,KAAKy7O,WAAalP,EAClBvsO,KAAKw7O,uBACLx7O,KAAKm7O,mDAITrvO,sBAAI0gO,2BAAY,KAAhB,WAA6B,OAAOxsO,KAAK07O,mBACzC,SAA0BnP,GACtBvsO,KAAK07O,cAAgBnP,EACrBvsO,KAAKw7O,uBACLx7O,KAAKm7O,mDAIT3O,uCACIxsO,KAAKkB,EAAEy6O,aAAe37O,KAAK47O,oBAAoBvgN,KAAKr7B,OAKxD8L,sBAAI0gO,0BAAW,KAAf,WAA4B,OAAOxsO,KAAK67O,kBACxC,SAAyBtP,GACrBvsO,KAAK67O,aAAetP,EACpBvsO,KAAKw7O,wDAGgBhP,oBAAzB,WACIxsO,KAAK2/E,WAAapG,OAAOv5E,KAAKkB,EAAEi0B,SAASugB,OAAO,UAGhB82L,+BAApC,WACIxsO,KAAK2/E,WAAa,IAItB6sJ,uDAG4B,MAApBxsO,KAAK47K,YACL57K,KAAKkB,EAAEszM,YAAcx0M,KAAK47K,YAEtB57K,KAAKy7O,YAAez7O,KAAKu7O,YAAcv7O,KAAK87O,WAC5C97O,KAAKkB,EAAEszM,YAAc,SAAC1tI,GAAS,OAAS,MAARA,EACvBzvE,QAASyvE,EAAKylK,EAAKgP,WAAahP,EAAKuP,WAAavP,EAAKxiL,aAAY,MAAM1yD,QAASyvE,EAAKylK,EAAKwP,YAC/F,MAGN/7O,KAAKkB,EAAEszM,YAAcx0M,KAAK+7O,UAIlC,IAAMl1K,EAAM,GACZA,EAAIhxD,KAAK7V,KAAK+7O,WACV/7O,KAAKg8O,WAAWn1K,EAAIhxD,KAAK7V,KAAK+pD,YAC9B/pD,KAAKi8O,WAAWp1K,EAAIhxD,KAAK7V,KAAK87O,YAClC97O,KAAKkB,EAAEy/L,WAAa95H,GAKxB/6D,sBAAI0gO,wBAAS,KAAb,WAA0B,OAAOxsO,KAAKk8O,gBACtC,SAAuB3P,GACfvsO,KAAKk8O,YAAc3P,IACnBvsO,KAAKk8O,WAAa3P,EAClBvsO,KAAKw7O,yDAMb1vO,sBAAI0gO,yBAAU,KAAd,WAA2B,OAAOxsO,KAAKm8O,iBACvC,SAAwB5P,GAChBvsO,KAAKm8O,aAAe5P,IACpBvsO,KAAKm8O,YAAc5P,EACnBA,IAAUvsO,KAAKkB,EAAEqzM,UAAYg4B,GAC7BvsO,KAAKw7O,yDAMb1vO,sBAAI0gO,yBAAU,KAAd,WAA2B,OAAOxsO,KAAKo8O,iBACvC,SAAwB7P,GAChBvsO,KAAKo8O,aAAe7P,IACpBvsO,KAAKo8O,YAAc7P,EACnBvsO,KAAKw7O,yDAILhP,6BAAR,SAAyBD,EAAU1lK,GAC/B,IAAMC,EAAQD,EAAKprB,MAAM,KAAKqO,OAAO,SAACuf,EAAKtC,GAAQ,UAAOsC,EAAItC,IAAMwlK,GACpE,MAAwB,iBAAVzlK,EAAqBA,EAAM/rC,WAAa+rC,GAIlD0lK,gCAAR,SAA4BD,EAAU1lK,EAAWC,GAC7C,IAAIuC,EAAyBrpE,KAAK2/E,WAG9B5Y,EAAqB,GAIzB,OAHI/mE,KAAKi8O,YAAWl1K,EAAa/mE,KAAKq8O,qBAAqBhzK,EAAgBrpE,KAAKqhO,iBAAiBkL,EAAUvsO,KAAK87O,YAAa,UAGzH97O,KAAKy7O,WAGE,GAFkBz7O,KAAKq8O,qBAAqBhzK,EAAgB,GAAGrpE,KAAKqhO,iBAAiBkL,EAAUvsO,KAAK+pD,YAAe,SAClG/pD,KAAKq8O,qBAAqBhzK,EAAgBrpE,KAAKqhO,iBAAiBkL,EAAUvsO,KAAK+7O,WAAY,SAC7E/7O,KAAKi8O,UAAYl1K,EAAa,IAG5C/mE,KAAKq8O,qBAAqBhzK,EAAgBrpE,KAAKqhO,iBAAiBkL,EAAUvsO,KAAK+7O,WAAY,gBAC/F/7O,KAAKi8O,UAAYl1K,EAAa,KAKlDylK,iCAAR,SAA6BD,EAAwB1lK,EAAqBC,SAClEC,EACJ,GAAK1vE,aAAck1O,IAAoBl1O,aAAcwvE,GAcjDE,EAAS1vE,QAASwvE,OAd6C,CAC/D,IAAIG,EAAOH,EAAY6Y,cAAc/jE,QAAQ4wN,EAAe7sJ,eAC5D,GAAI1Y,GAAQ,EAAG,CAEX,IAAIoC,EAAOmjK,EAAe38N,OAC1Bm3D,EAAYF,EAAYhc,MAAM,EAAGmc,GAAK,2CAA2CH,EAAYhc,MAAMmc,EAAMA,EAAOoC,GAAK,UAAUvC,EAAYhc,MAAMmc,EAAOoC,QAIxJrC,EAAS1vE,QAASwvE,GAS1B,MAAO,wBAAwBC,EAAM,KAAqB,QAAjBuC,OAAKizK,oBAAY,QAAI,IAAE,KAAKv1K,EAAM,mDAnL1E1oE,0CAsBJqxL,2BAYAA,2BASAA,8BAQAA,6BAcAA,yBAKAA,eAAYvuL,MAAC,uCAIbuuL,eAAYvuL,MAAC,yCA+BbuuL,4BAUAA,4BAWAA,WA1HQ88C,qUAAwBt1N,GADpC,eAAU,CAAEF,SAAU,oBACVw1N,oBCKT,WAAYD,GACRA,EAAOgQ,0BAA4Bv8O,KAAKw8O,+BAI5C,2DACI,OAAQx8O,KAAKy8O,uBACJv8O,yBACW,QACP,OAAOF,KAAK08O,6CAI7BlQ,gEAAyDD,EAAkB1lK,EAAiCC,GACxG,MAAO,CAAC9mE,KAAKqa,UAAmBna,yBAA2CqsO,6CAtB1E5tO,oDAMJ+wL,WADQ88C,qUAAwCmQ,GADpD,eAAU,CAAE3lO,SAAU,8CACVw1N,2VCKT,WACYD,EACe1lK,EACvBC,EACAuC,GAHQrpE,iBAFJA,cAAkB,GAON,MAAZ6mE,GAAkBC,EAAS2uK,aAAapsK,EAAGgd,cAAe,WAAY,KAG9E,6BACImmJ,mBAAI,KADR,SACSD,GAELvsO,KAAK48O,SAAW/0M,MAAM8F,QAAQ4+L,GAAYA,EAAW,CAACA,oCAQ1DC,oBADA,WAGI,YAAKvuM,UAAUnkB,SAAS9Z,KAAK48O,SAAU58O,KAAK68O,kBACrC,4CAhCNviP,sCAWAo1L,YAASvuL,MAAC,qBAZ6CuuL,mBAAjCA,8CAmB1BA,iCAMAA,yBAIAA,eAAYvuL,MAAC,YAvBLqrO,EAAet/N,KAD3B,eAAU,CAAE8J,SAAU,6BACVw1N,oBAsCT,WAAoBD,oBADZvsO,cAAkB,GAK1B,6BACIwsO,mBAAI,KADR,SACSD,GAELvsO,KAAK48O,SAAW/0M,MAAM8F,QAAQ4+L,GAAYA,EAAW,CAACA,oCAQ1DC,oBADA,SACQD,EAAgB1lK,EAAkBC,EAAkBuC,GAExD,OAAe,IAAXkjK,GAAgB1lK,GAAWC,GAAWuC,GAC1CrpE,KAAKi+B,UAAUnkB,SAAS9Z,KAAK48O,SAAU58O,KAAK68O,kBACrC,4CA9DNviP,uCA+CJo1L,iCAOAA,yBAGAA,eAAYvuL,MAAC,QAAS,CAAC,gBAAiB,iBAAkB,iBAAkB,uBAlBpEqrO,EAAuBt/N,KADnC,eAAU,CAAE8J,SAAU,wBACVw1N,m2BClCb9+N,cACI,WAAoB6+N,EACR1lK,EACAC,EACAuC,GAHQrpE,SACRA,YACAA,gBACAA,wBAIZA,eAAW,EACX,6BAAawsO,sBAAO,KAApB,SAAqBD,GAGbvsO,KAAK88O,UAAYvQ,IAIrBvsO,KAAK+8O,SAAWxQ,EAIZvsO,KAAKg9O,iBACLh9O,KAAK42C,yCAOb41L,uCACIxsO,KAAK42C,OACL52C,KAAKg9O,iBAAkB,GAGnBxQ,iBAAR,WACQxsO,KAAKi9O,SACLj9O,KAAKk9O,kBAELl9O,KAAKm9O,mBAIb3Q,kDACU3lK,EAAmB7mE,KAAKkB,EAAEi0B,SAC5B2xC,EAAoB5nE,iBAAsB2nE,EAAiBnpC,WAC1DopC,IACDA,EAAoB,IAAI5nE,KAAU2nE,EAAiBnpC,UAAW,KASlE,IAAM2rC,EAAQvC,EAAkBpxB,OAAO,mBAAmBh6B,OAAO,YAAK,SAAE0mC,OAASmqL,EAAKv6B,OAGlFhyM,KAAK+8O,UACL1zK,EAAMxzD,KAAK,CACPusC,KAAMpiD,KAAKgyM,KACXx+F,QAASxzG,KAAKo9O,qBAAuB,GAAMp9O,KAAKq9O,iBAAoBr9O,KAAKmjC,iBAAiB5wB,GAAG,0BAKrGu0D,EAAkBpxB,OAAO,kBAAmB2zB,IAGhDmjK,kDACQ3lK,EAAQ7mE,KAAKkB,EAAEo8O,WAAW,wBAChB,IAAVz2K,IACAA,EAAQ,IAIZ7mE,KAAS+8O,SACLl2K,EAAMhxD,KAAK,CAAEusC,KAAMpiD,KAAKgyM,OAExBnrI,EAAQA,EAAMnrD,OAAO,YAAK,SAAE0mC,OAASmqL,EAAKv6B,OAI9ChyM,KAAKkB,EAAEq8O,WAAW,kBAAmB12K,qCAzExC6oH,iCAgBAA,sCACAA,WA0DL88C,EApFA,kBAyFI,WAAY3lK,EAAuBC,UAC/B0lK,YAAM3lK,EAAG,YAAY,EAAOC,IAAiB9mE,KAGxC,OALoCwN,QAKpC++N,4BAAT,WACIC,YAAMgR,gBAAep/M,qDApGpB3/B,YADA1D,SA+FIwxO,EAA2B5+N,KADvC,eAAU,CAAEqJ,SAAU,iCACVu1N,IAAoC7+N,mBAY7C,WAAYm5D,EAAyBC,UACjC0lK,YAAM3lK,EAAG,YAAY,EAAOC,IAAiB9mE,KAGxC,OALsCwN,QAKtC++N,4BAAT,WACIC,YAAMgR,gBAAep/M,qDA/GsB5/B,YAD1CzD,SA0GIwxO,EAA6B5+N,KADzC,eAAU,CAAEqJ,SAAU,mCACVu1N,IAAsC7+N,mBAY/C,WAAYm5D,EAAyBC,UACjC0lK,YAAM3lK,EAAG,YAAY,EAAOC,IAAiB9mE,KAGxC,OALsCwN,QAKtC++N,4BAAT,WACIC,YAAMgR,gBAAep/M,qDA1HA//B,YADpBtD,SAqHIwxO,EAA6B5+N,KADzC,eAAU,CAAEqJ,SAAU,mCACVu1N,IAAsC7+N,mBAY/C,WAAYm5D,EAAwBC,UAChC0lK,YAAM3lK,EAAG,YAAY,EAAOC,IAAiB9mE,KAGxC,OALqCwN,QAKrC++N,4BAAT,WACIC,YAAMgR,gBAAep/M,qDArI4C7wB,YADhExS,SAgIIwxO,EAA4B5+N,KADxC,eAAU,CAAEqJ,SAAU,kCACVu1N,IAAqC7+N,mBAa9C,WAAYm5D,EAA0BC,UAClC0lK,YAAM3lK,EAAG,YAAY,EAAOC,IAAiB9mE,KAGxC,OALuCwN,QAKvC++N,4BAAT,WACIC,YAAMgR,gBAAep/M,qDAhJzB9wB,YAFKvS,SA4IIwxO,EAA8B5+N,KAD1C,eAAU,CAAEqJ,SAAU,oCACVu1N,IAAuC7+N,mBAahD,WAAYm5D,EAAuBC,UAC/B0lK,YAAM3lK,EAAG,YAAY,EAAOC,IAAiB9mE,KAGxC,OALoCwN,QAKpC++N,4BAAT,WACIC,YAAMgR,gBAAep/M,qDA5JF7/B,YAFlBxD,SAwJIwxO,EAA2B5+N,KADvC,eAAU,CAAEqJ,SAAU,iCACVu1N,IAAoC7+N,mBAY7C,WAAYm5D,EAAuBC,UAC/B0lK,YAAM3lK,EAAG,YAAY,EAAMC,IAAiB9mE,KAGvC,OALmCwN,QAKnC++N,4BAAT,WACIC,YAAMgR,gBAAep/M,qDAtKpBz/B,cAHA5D,SAmKIwxO,EAA0B5+N,KADtC,eAAU,CAAEqJ,SAAU,gCACVu1N,IAAmC7+N,mBAY5C,WAAYm5D,EAAwBC,UAChC0lK,YAAM3lK,EAAG,YAAY,EAAOC,IAAiB9mE,KAGxC,OALqCwN,QAKrC++N,4BAAT,WACIC,YAAMgR,gBAAep/M,qDAlLkB3wB,YAFtC1S,SA8KIwxO,EAA4B5+N,KADxC,eAAU,CAAEqJ,SAAU,kCACVu1N,IAAqC7+N,mBAY9C,WAAYm5D,EAAsBC,UAC9B0lK,YAAM3lK,EAAG,YAAY,EAAOC,IAAiB9mE,KAGxC,OALmCwN,QAKnC++N,4BAAT,WACIC,YAAMgR,gBAAep/M,qDA7LuC9/B,YAF3DvD,SAyLIwxO,EAA0B5+N,KADtC,eAAU,CAAEqJ,SAAU,gCACVu1N,IAAmC7+N,0CClK5C,WACY6+N,EACA1lK,GADA7mE,kBACAA,gBAZHA,kBAAuB,IACvBA,2BAAgC,EAC/BA,oBAAiB,IAAI0vL,eAE/B1vL,oBAAiB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAEtCA,iBAAc,IAAIoQ,KAS1B,oCAAQm8N,GAEJvsO,KAAKy9O,YAAY/1M,KAAK6kM,IAI1BC,2CAEIxsO,KAAK09O,yBAA2B19O,KAAK++C,SAAS4+L,OAAO39O,KAAK49O,WAAWv3J,cAAermF,KAAK69O,UAAW,SAACh3K,IAC5FA,IACD0lK,EAAKuR,sBAAwBj3K,EAAMk3K,SACgB,IAA/CxR,EAAKyR,eAAeriO,QAAQkrD,EAAMk3K,UAClCxR,EAAK0R,QAAQp3K,GAGjB0lK,EAAK0R,QAAQp3K,MAKrB7mE,KAAKk+O,aAAel+O,KAAKy9O,YAAYppO,QAAKhE,MAAarQ,KAAKm+O,eAAersO,UAAU,YAAK,SAAKssO,eAAe58N,KAAKqlD,MAGvH2lK,mCACIxsO,KAAKk+O,aAAa5rO,cAClBtS,KAAK09O,qEAtDuDhuD,oBAAYA,kDAa3EA,8BACAA,sCACAA,gCACAA,YAJQ88C,qUAAsBh8N,KAHlCk/K,aAAU,CACP14K,SAAU,qBAEDw1N,wDCQT,WACYD,EACA1lK,EACAC,GAFA9mE,wBACAA,sBACAA,wBAGZ,uCACIA,KAAKk+O,aAAel+O,KAAK09M,eAAejkM,KAAK3H,UAAU,YACnD,GAAIy6N,GAAQA,EAAK8R,YAAa,CAC1B,IAAMx3K,EAAY,IAAItlE,KACtBslE,EAAU/wC,WAAU/6B,OAAGwxO,EAAK8R,aAC5B90D,mBAA2B1iH,MAKvC2lK,mCACIxsO,KAAKk+O,cAAgBl+O,KAAKk+O,aAAa5rO,eAG3Ck6N,qCACI,OAAOxsO,KAAK+5M,iBAAiBlc,UAAUnxJ,OAASxsC,iBAC1CnF,OAAG,iBACHA,OAAG,cAGbyxO,gCACQxsO,KAAK+5M,iBAAiBlc,UAAUnxJ,OAASxsC,cAM7C+hD,OAAO5gC,SAASqhC,KAAOT,OAAOq8L,gBAL1Bt+O,KAAKwvK,iBAAiBzsH,mBAQ9BypL,yBACI,OAAOjjD,6DArDNnyL,YACA+f,aAIAnZ,QAQIwuO,qUAAkBn1N,KAN9Bq4K,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,gBACVC,SCdW,ioCDiBFu1N,ujBELT,WAAY3lK,UACR2lK,YAAM,UAAW3lK,IAAI7mE,YAHQwX,iDAL5BC,QAKI80N,qUAAe50N,KAD3B+3K,iBACY68C,IAAwBxtN,0CCIjC,WAAoBwtN,EAAwB1lK,GAA5C,WAAoB7mE,cAAwBA,iBAEnCA,KAAKu+O,eACVv+O,KAAKw+O,OAAOC,mBAAmB3sO,UAAU,YAAS,SAAK4sO,sBAAsBr1K,EAAMs1K,aAAallO,KAAM4vD,EAAMu1K,OAAQ93K,EAAK+3K,oBAItH,oCAAP,SAAwBtS,KAmBjBC,0CAAP,YAESxsO,KAAKu+O,eACqB,WAA3BO,aAAaC,YAAyBD,aAAaE,qBAIpDxS,6BAAP,SAAwBD,GAAxB,WAEI,IACI,IAAKvsO,KAAKu+O,cAAe,aACpBz3K,GACL,OAE2B,MAA3Bu0I,UAAU4jC,eACd5jC,UAAU4jC,cAAcC,kBAAkBvqN,KAAK,YAE3C,IAEImyC,EAAaq4K,iBAAiBt4K,EAAKiuF,UAAUviJ,GAAG,sBAAuBg6N,SAE3EljK,QAOAmjK,wBAAR,WAEQ,MAAS,iBAAkBvqL,QAAY60I,uDAtE1Cj/K,aAEA9c,SAMIyxO,qUAA0B3tN,KADtC6wK,iBACY88C,gICaT,WAAoBD,EACR1lK,EACAC,EACAuC,EACAtC,EACAC,GALQhnE,eACRA,sBACAA,2BACAA,iBACAA,UACAA,gCAPJA,eAAY,mEAQmB,UAA/BA,KAAKo/O,eAAeC,SAAqD,QAA9Br/O,KAAKo/O,eAAeE,QAAkD,UAA9Bt/O,KAAKo/O,eAAeE,UAAoBt/O,KAAKu/O,UAAW,GAI3I,uCAAR,SAA4BhT,GACxB,IACIzlK,EADI,IAAI/6D,KAAKA,KAAKw8N,IAAIgE,EAAMvgO,cAAeugO,EAAMtgO,WAAYsgO,EAAMrgO,UAAWqgO,EAAM5zB,WAAY4zB,EAAM3zB,aAAc2zB,EAAM/D,eACpH9sI,cACV,OAAI50B,EAAEtpC,SAAS,OAAMspC,EAAIA,EAAE1pC,UAAU,EAAG0pC,EAAEl3D,OAAS,IAC5Ck3D,GAIH0lK,uBAAR,SAAmBD,GAGf,IAAI1lK,EACJ,IACIA,EAAO7mE,KAAKs+D,oBAAoBoB,QAAQ,kBACnC2J,IAIT,GAHKxC,IAAQA,EAAO3mE,aACpBqsO,EAAUA,EAAQiT,MAAM,CAAExX,QAASuE,EAAQvE,QAAQp1L,IAAI,eAAgBi0B,MAElE7mE,KAAKkyG,QAAQ2pG,WAAY,OAAO0wB,EAEf,QAAlBA,EAAQkT,QAAyD,MAArClT,EAAQmT,6BAC/BnT,EAAQruB,OAAOriH,IAAI,qBAAuB0wI,EAAQruB,OAAOj1J,IAAI,sBAElEsjL,EAAUA,EAAQiT,MAAM,CAAExX,QAASuE,EAAQvE,QAAQp1L,IAAI,eAAgB,+BAG3E,IAAMk0B,EAAoB9mE,KAAKw8M,yBAAyBC,uBACxD,SAAU8vB,EAAQiT,MAAM,CAAExX,QAASuE,EAAQvE,QAAQp1L,IAAI,yBAA0Bk0B,MAElE04K,MAAM,CAAExX,QAASuE,EAAQvE,QAAQp1L,IAAI,cAAe5yC,KAAKkyG,QAAQC,cAI7Eq6H,sBAAP,SAAiBD,EAA2B1lK,GAA5C,WAEUwC,EAAgCrpE,KAAK2/O,WAAWpT,GAGtD,OAAgD,MAA5CvsO,KAAK4/O,uBAAuBv2K,KAC5BkgH,yBAAgC,EAChCA,qBAA6B,GAIjCvpL,KAAK6/O,aAAax2K,EAAY1pB,KAAM,GAG7BknB,EAAKi5K,OAAOz2K,GAAah1D,MAC5B,QAAI,SAAC0yD,GAA0B,SAAKg5K,YAAY12K,EAAatC,MAC7D,QAAW,SAACA,GAAsB,SAAKs4B,YAAYh2B,EAAatC,OAIhEylK,6BAAR,SAAyBD,EAAgB1lK,GACrC,IAAIC,EAAW,IAAIvlE,KACnB,SAASuzB,WAAY,EACrBgyC,EAASvwC,aAAeswC,EACxBC,EAASxzD,iBAAkB,SAAGi5N,GACvBzlK,GAIH0lK,wBAAR,SAAoBD,EAA+B1lK,GAAnD,MAEQE,EAFRD,OAGI,OAAQD,EAAa4vH,aACX,EAGE1vH,EAAW/mE,KAAKggP,iBAAiB,eAAgB,KACjDj+M,QAAQyd,MAAM,uDAAuD+sL,EAAYxwB,KACjFh6K,QAAQyd,MAAMqnB,GACd,WAIF,IAIEE,EAAWF,EAAarnB,MAExBx/C,KAAKkyG,QAAQ+tI,WAAW,WAAQn5K,EAAK7oC,UAAUnkB,SAAS,CAAC,6BACzD,WAIF,IAGEitD,EAAWF,EAAarnB,MACxB,WAGF,IAGEunB,EAAW/mE,KAAKggP,iBAAiB,sBAAuBn5K,EAAa4vH,QAErEz2L,KAAKkyG,QAAQ+tI,WAAW,WAAQn5K,EAAK7oC,UAAUnkB,SAAS,CAAC,6BAA+B,GACxF,WAIF,IAGEitD,EAAW/mE,KAAKggP,iBAAiB,oBAAqBn5K,EAAa4vH,QACnE,WAGF,IAOkB,OADhB1vH,EAAWF,EAAarnB,SACFunB,EAAW,IAAIxlE,MACrCwlE,EAASxwC,aAAeswC,EAAa4vH,OACrC1vH,EAASzzD,mBAAkBvY,OAAG,kBAAmB1D,QAAS0vE,EAASzzD,kBAInEyuB,QAAQyd,MAAM,iCAAiCnoD,QAAS0vE,EAASzzD,iBAAgB,OAAOjc,QAAS0vE,EAASxqC,0BAC1G,WAEF,IAEFwqC,EAAWF,EAAarnB,MACxBx/C,KAAKi+B,UAAUnkB,SAAS,CAAC,qBACzB,WAEE,IAGFitD,EAAW/mE,KAAKggP,iBAAiB,uBAAwBn5K,EAAa4vH,QACtE,IAAMzvH,EAAWhnE,KAAKkyG,QAAQg6F,WAAalsM,KAAKkyG,QAAQg6F,UAAUt8L,OAAkC,QAAzBy5D,OAAK6oC,QAAQg6F,UAAU,UAAE,eAAE53L,UAAO,EAC7GtU,KAAKkyG,QAAQ+tI,WAAW,WAAQn5K,EAAK7oC,UAAUnkB,SAAS,CAAC,iCAAkC,CAAEuvB,SAAU29B,MACvG,WAEE,IAEED,EAAW/mE,KAAKggP,iBAAiB,uBAAwBn5K,EAAa4vH,QACtEz2L,KAAKk/B,GAAG7rB,YAAY0zD,EAASzzD,iBAC7ByuB,QAAQyd,MAAMunB,EAASzzD,iBACvB,eAMAyzD,EAAW,IAAIxlE,MACNuzB,WAAY,EACrBiyC,EAASxwC,aAAeswC,EAAa4vH,OACrC1vH,EAASzzD,gBAAkBuzD,EAAaq5K,WAGxC,IAAI92K,EAAQ,IAAIx7B,MAAMi5B,EAAa2sC,SAAS2sI,MACxCj5K,GAAUL,EAAa2sC,QAAW3sC,EAAa2sC,QAAU3sC,EAAa4vH,OAAY5vH,EAAa4vH,OAAM,MAAM5vH,EAAaq5K,WAAe,eAC3In+M,QAAQyd,MAAM0nB,IACVkC,GAAOrnC,QAAQyd,MAAM4pB,GAOrC,OAAgD,MAA5CppE,KAAK4/O,uBAAuBrT,KAA2BhjD,yBAAgC,GAGpF,IAAIzqK,KAA2B,SAACmoD,IACnC,IAAIG,GAAe,IAAI3uE,MAAa,CAAEknD,KAAMonB,IAC5CE,GAASv/B,KAAK0/B,IACdH,GAAS3nB,cAMTktL,wBAAR,SAAoBD,EAA+B1lK,GAW/C,GATIA,aAAqBpuE,QAErBuH,KAAK6/O,aAAah5K,EAAUlnB,KAAM,GAGc,MAA5C3/C,KAAK4/O,uBAAuBrT,KAA2BhjD,yBAAgC,IAI3F1iH,EAAUzkB,MAAQ3pD,wBAAkCouE,EAAUzkB,MAAQ3pD,qBAA8B,CACpG,IAAIquE,EAAqC9mE,KAAK4/O,uBAAuBrT,GACxD,MAATzlK,GAAoB9mE,KAAKogP,yBAAyBv5K,EAAgCC,GAGrFylK,EAAYpE,QAAQl/K,IAAIsgI,wCACzBvpL,KAAKkyG,QAAQksG,gCAKbouB,mCAAR,SAA+BD,GAC3B,IAAI1lK,EAAS0lK,EAAQvE,QAAQ/+K,IAAI,qBACjC,OAAO4d,EAASA,EAAO,QAAoC,GAIvD2lK,qCAAR,SAAiCD,EAA0B1lK,GAGvD,KAAIA,GAAiB3mE,WAAoCqsO,EAAMnqL,MAAQ3pD,wBACnEouE,GAAiB3mE,cAAuCqsO,EAAMnqL,MAAQ3pD,sBAG1E,KAAIquE,EAAmBylK,EAAM8T,OAAS9T,EAAMjsF,MAAQ,IAChDz5E,GAAiB3mE,YACbqsO,EAAMnqL,MAAQ3pD,uBAA8BquE,GAAsB,IAClEylK,EAAMnqL,MAAQ3pD,yBAAgCquE,EAAW,GAAgB,GAAXA,IAItEyiH,qBAA6BziH,IAKzB0lK,yBAAR,SAAqBD,EAAgB1lK,GAIjC,GAAK0lK,GAAYA,aAAkBzgO,OAInC,IAAIygO,aAAkB1kM,MAClB,QAAmBi/B,uBAAQ,CAAtB,IAAMC,EAAIsC,KACXrpE,KAAK6/O,aAAa94K,EAAMF,GAKhC,QAAkBG,aAAOj4B,KAAKw9L,GAAZvlK,eAAqB,CAAlC,IAAME,GAAGkC,KAGJnC,GAAQslK,EAAOrlK,IACrB,GAAID,cAAiBp/B,MACjB,QAAmBu/B,6BAAO,CAAfL,EAAII,OACXnnE,KAAK6/O,aAAa94K,EAAMF,GAK5BI,cAAiBn7D,QAAQ9L,KAAK6/O,aAAa54K,GAAOJ,GAGpC,GAAdA,GACII,cAAiBl7D,OAAMwgO,EAAOrlK,IAAOlnE,KAAKsoO,oBAAoBrhK,KAIpD,GAAdJ,IAIqB,iBAAVI,IAAsBjnE,KAAKsgP,UAAU78L,KAAKwjB,MAC7CjnE,KAAKu/O,UAAqB,MAATt4K,GACjBslK,EAAOrlK,IAAO,IAAIn7D,MACZk7D,GAAM7pC,UAAU,EAAG,IACnB6pC,GAAM7pC,UAAU,EAAG,GAAK,GACxB6pC,GAAM7pC,UAAU,EAAG,KACnB6pC,GAAM7pC,UAAU,GAAI,KACpB6pC,GAAM7pC,UAAU,GAAI,KACpB6pC,GAAM7pC,UAAU,GAAI,KAG1BmvM,EAAOrlK,IAAO,IAAIn7D,KAAKk7D,KAKjB,OAAVA,KAAgBslK,EAAOrlK,SAAO,gDA5SzCq5K,YATAxnP,aAUA4E,YANArD,aAQAyhB,YADAykO,QAIIhU,qUAAqBlxN,KADjCo0K,iBACY88C,+NCmBT,WAC8BD,EACK1lK,EACxBC,EACCuC,EACAtC,EACAC,EACAoC,EACAlC,GACAD,GACAG,GACAD,IAVkBnnE,gBACKA,eACxBA,cACCA,cACAA,cACAA,sBACAA,wBACAA,uBACAA,qBACAA,uBACAA,2BAnBZA,0BAAsB,EAEtBA,uBAAmB,EACnBA,gBAAY,EAEJA,oBAAiC,GAbzC,6BAA0BwsO,uBAAQ,KAAlC,sBACU3lK,EAAW7mE,KAAKi6O,OAAOt+L,QAAU,OAAS,GAEhD,MADkB,GAAG7vC,OAAOijC,KAAK/uC,KAAKi6O,OAAOwG,OAAO/kO,OAAO,YAAM,SAAKu+N,OAAOwG,MAAMp3K,KAAKtwB,KAAK,KAAO8tB,mCAgCxG2lK,2CA4BI,GAxBAxsO,KAAK0gP,kBAEL1gP,KAAK8sC,eAAej3B,KAAK7V,KAAKujC,eAAeo9M,qBAAqB7uO,UAAU,YACpEg1D,IAAUy5K,cACVhU,EAAKqU,kBAGb5gP,KAAK8sC,eAAej3B,KAAK7V,KAAKgiO,OAAO6e,UAAU/uO,UAAU,YACrDy6N,EAAKuU,iBAAmBh6K,EACpBA,GACArpC,WAAW,WACH8uM,EAAKuU,mBAAkBvU,EAAKuU,kBAAmB,IACpD,QAGX9gP,KAAK8sC,eAAej3B,KAAK7V,KAAKgiO,OAAO+e,SAASjvO,UAAU,YACpDy6N,EAAKyU,UAAYl6K,EACbA,GACArpC,WAAW,WACH8uM,EAAKyU,YAAWzU,EAAKyU,WAAY,IACtC,QAIPhhP,KAAKihP,QAAS,CACd,IAAMp6K,EAAe7mE,KAAK0/C,SAASotL,qBAAqB,QAEpDjmK,EAAaj3D,OAAS,GACtBi3D,EAAa,GAAG4uK,aAAa,OAAQz1O,KAAKihP,WAKtDzU,uCACIxsO,KAAKinJ,eAAe0pD,iBAAmB3wM,KAAKq4L,aAC5Cr4L,KAAKkhP,aAAavwC,iBAAmB3wM,KAAKq4L,aAC1Cr4L,KAAKyxK,mBAAmBk/B,iBAAmB3wM,KAAKmhP,yBAGpD3U,yCAAoBD,EAA8B1lK,GAAlD,IACQwC,EADRvC,OAEI,SAAUnuD,QAAQ,YACVouD,EAASkpH,OAASppH,GAIjBwC,GAAoBtC,EAAS5lD,QAAOkoD,EAAmBvC,EAAKs6K,oBAAoBr6K,EAAS5lD,MAAO0lD,IAHjGwC,EAAmBtC,IAKpBsC,GAGXmjK,mCACIxsO,KAAK8sC,eAAen0B,QAAQ,YAAK,SAAErG,iBAGvCk6N,yCAAoBD,GAChB,IAAM1lK,EAAmB7mE,KAAKohP,oBAAoBphP,KAAKqhP,UAAW9U,GAClEvsO,KAAKgiO,OAAOsf,oBAAoBz6K,GAAoBA,EAAiB2oI,OAGzEg9B,kDAEIxsO,KAAKs+M,OAAO0jB,OACP3tN,MACG,QAAU,YAAK,SAAKktO,uBACpB,QAAO,YAAS,oBAAiBpqO,SACpCrF,UAAU,YACHy6N,EAAKgV,sBACDhV,EAAK8U,UACL9U,EAAKgV,qBAAsB,EAE3BhV,EAAKiV,WAAajV,EAAKkV,oBAM3CjV,+CAEIxsO,KAAK8sC,eAAej3B,QAChBsG,MAAc,CAACnc,KAAK+5M,iBAAiBlc,UAAUqR,UAAUlvM,KAAKujC,eAAeuuJ,cACzE9xL,KAAK+5M,iBAAiBlc,UAAUsR,iBAAiBnvM,KAAKujC,eAAeuuJ,gBACpEz9K,MACG,QAAI,SAACwyD,OAACC,EAASD,KAAEwC,EAAWxC,KAAM,gBAAIC,GAAcuC,QACpDntD,MAAK,IACL,QAAI,YACAqwN,EAAK8U,UAAYx6K,EACb0lK,EAAKiV,aACLjV,EAAKgV,qBAAsB,EAC3BhV,EAAKmV,oBAAoBnV,EAAKiV,YAC9BjV,EAAKiV,WAAa,SAG1B,QAAS,WAAM,SAAKljC,OAAO0jB,UAC3B,QAAO,YAAS,oBAAiB7qN,SACpCrF,UAAU,YACPy6N,EAAKgV,qBAAsB,EAC3BhV,EAAKmV,oBAAoBnV,EAAKkV,qBAKtCjV,0BAAR,WAII,QAHID,EAAQvsO,KAAK09M,eACb72I,EAAc0lK,EAAM5uB,SAAS5B,IAE1BwwB,EAAMvtB,YACTutB,EAAQA,EAAMvtB,WACdn4I,EAAWw1C,SAAOx1C,GAAgB0lK,EAAM5uB,SAAS5B,KAErD,GAAIwwB,EAAM5uB,SAASO,QAAUquB,EAAM5uB,SAASO,OAAOvxM,UAAY4/N,EAAM5uB,SAASlkM,KAAKkoO,WAAY,CAC3F,IAAM76K,EAAoBD,EAAY70C,KAAK,YAAK,SAAEi+J,OAASs8C,EAAM5uB,SAASO,OAAOvxM,UACjFm6D,IAAsBD,EAAcA,EAAYnrD,OAAO,YAAK,WAAMorD,KAEtE,IAAMuC,EAAMxC,EAAYzwC,IAAI,YAAK,SAAE65J,OAAMl3I,KAAK,KAC9C,MAAO,IAAIswB,EAAIjsC,UAAU,EAAGisC,EAAI1tD,QAAQ,KAAO,GAAK0tD,EAAIjsC,UAAUisC,EAAI0qC,YAAY,KAAO,sEAxIxF27E,SAAMvuL,MAAC3I,yCACPk3L,SAAMvuL,MAAC3I,gBAjCP2F,YAJ+BgZ,aAO/BW,YAFAyoO,YAHAnpP,YAIA4nB,YAIAE,YAVA/H,aAGA9d,2CAgBJq2L,cAAWvuL,MAAC,+BAKZuuL,YAASvuL,MAAC,mBAAoB,CAAEg4L,KAAMzJ,sDACtCA,YAASvuL,MAAC,uBAAwB,CAAEg4L,KAAMzJ,wBARlC88C,qUAAYptN,KALxBswK,aAAU,CACP14K,SAAU,eACVC,SChBW,u/BDmBFu1N,gCEVT,WAAmBD,iEARdpuO,QAOIquO,qUAAoBltN,KALhCowK,aAAU,CACP14K,SAAU,mBACVC,SCLW,wJDQFu1N,gCEYT,WAAmBD,EACP1lK,EACAC,GAFZ,WAAmB9mE,cACPA,cACAA,UALZA,iBAAa,EACLA,oBAAiC,GAKrCA,KAAK8sC,eAAej3B,KAAK7V,KAAKgiO,OAAO4f,sBAAsB9vO,UAAU,SAACi1D,GAClEsC,EAAKw4K,qBAAqB96K,MAIlC,kDACI/mE,KAAK8sC,eAAej3B,KAAK7V,KAAKgiO,OAAO78J,YAAYrzD,UAAU,YAAK,SAAKgwO,eAAej7K,OAGxF2lK,oCAAeD,GACNA,EAIDvsO,KAAK+hP,WAAaxV,IAAarsO,WAH/BF,KAAK+hP,YAAc/hP,KAAK+hP,WACxB/hP,KAAKgiO,OAAO8f,eAAe9hP,KAAK+hP,WAAa7hP,UAAyBA,cAM9EssO,0CAAqBD,GAArB,WACIvsO,KAAKw8B,iBAAiBxuB,KAAOu+N,EAAQv+N,KACrChO,KAAKw8B,iBAAiBE,OAAS6vM,EAAQ7vM,OACvC18B,KAAKw8B,iBAAiBlZ,gBAAgB,WAClCujD,EAAK3nC,GAAG8nM,iBAAgB,IACzB,WACCngK,EAAK3nC,GAAG8nM,iBAAgB,MAIhCwF,mCACIxsO,KAAK8sC,eAAen0B,QAAQ,YAAK,SAAErG,0DAlDlCnU,YAGA2Z,YADAiE,kDAWJ2zK,YAASvuL,MAAC,iBADFqrO,qUAAmB/sN,KAL/BiwK,aAAU,CACP14K,SAAU,iBACVC,SCXW,61BDcFu1N,oEEGT,WAAoBD,EACR1lK,EACAC,EACAuC,GAHQrpE,wBACRA,wBACAA,SACAA,2BANJA,sBAAmB,IAAI6f,KAAsB,GAC9C7f,eAAYA,KAAKgiP,iBAAiBr2M,eAOzC,wCAAY4gM,GACR,GAAgB,MAAZA,EAEJ,KAAKvsO,KAAKmjC,iBAAiB8+M,yBAAyB1V,GAChD,WAAK/qO,EAAE4R,GAAGC,YAAY,qBAAqBk5N,EAAQ,mCAC5C,qBAAqBA,EAAQ,kCAIpChjD,gBAAwBgjD,IACxBhjD,cAAsBgjD,EACtBvsO,KAAKs+D,oBAAoBU,QAAQ,WAAYutK,GAE7CvsO,KAAKwvK,iBAAiBqrC,eACtB76M,KAAKwvK,iBAAiBsrC,wBAG1B96M,KAAKgiP,iBAAiBt6M,KAAK6kM,KAG/BC,mCACI,OAAQjjD,oBACCrpL,YACD,MAAO,UAENA,aACD,MAAO,gBAGP,MAAO,mDAjDdlC,YAGAjD,aACA+E,WAFAnC,QAQI6uO,qUAAe5sN,KAH3B8vK,cAAW,CACR7jJ,WAAY,UAEH2gM,+jBCQbpwD,gBAMA8lE,0EACI,wBAAsC,GACtCr7K,YAA+B,GAC/BA,cAA2B,IAAIu1G,KACnC,OAJoBn8J,QAIpBssN,EAJA,CAAoBhrO,qBAwChB,WAAYslE,EACAC,EACAuC,EACAtC,EACAC,EACAoC,EACAlC,IANZ,OAOIslK,YAAM3lK,EAAG,mBAAoBq7K,KAAMliP,KAN3B,6BACAinE,mBACAA,qBACAA,8BACAA,yBACAA,uBA9BJA,gBAAc,EAmBtBA,iBAAsC,GAE9BA,kBAAiC,GAkEzCA,oBAAmB,WACf,IAAMG,GAAyBH,GAAKzlE,EAAE07B,UAAUo5J,iBAAiBp2L,gCAE3DinE,GAAQF,GAAK9jC,iBAAiB29L,mBAAmBplN,OAAO,aAAQ,UAAK4W,QAAUi3J,gBAAqBnzJ,IAAI,aAAQ,MAAC,CACnHzE,MAAO21C,GAAKxjC,KACZvpB,QAAS0sD,GAAKk7K,gBACdjmM,QAAS,WAAM,UAAKkmM,eAAe96K,GAAKh1C,WAG5C,OAAOtS,OAAC,CACJ2R,MAAOs1C,GAAK10D,GAAG,gBACfgI,UAAW0sD,GAAKo7K,gBAChBnmM,QAAS+qB,GAAKo7K,iBACf,CACC1wN,MAAOs1C,GAAK10D,GAAG,qBACfgI,QAAS6sD,GACTlrB,QAAS+qB,GAAKq7K,iBAAiBjnN,KAAK4rC,MAErCE,IAAK,CACR,CACIx1C,MAAOs1C,GAAK10D,GAAG,aACfgI,SAAS,EACT2hC,QAAS+qB,GAAKs7K,SAASlnN,KAAK4rC,WA5GpC,OANkChnD,QAMlCnU,sBAAaygO,yBAAU,KAQvB,WACI,OAAOvsO,KAAKwiP,iBAThB,SAAwB37K,GAChBA,IAAU7mE,KAAKwiP,cAEnBxiP,KAAKwiP,YAAc37K,EACd7mE,KAAKyiP,eACL57K,EACA7mE,KAAK0iP,oBADE1iP,KAAKyiP,aAAarpM,iDAOlCttC,sBAAYygO,2BAAY,KAAxB,WACI,IAAM1lK,EAAe7mE,KAAKwvM,MAAQxvM,KAAKwvM,KAAKr6K,SAC5C,OAAI0xC,IAAiBA,EAAa87K,qBAAwB97K,EAAa+7K,0BAChE/7K,mCAoBF0lK,4BAAT,sBACIvsO,KAAKmiP,gBAAkBniP,KAAK+5M,iBAAiBnQ,UAAUi5C,gBACvD7iP,KAAK8iP,gBAEL9iP,KAAK8sC,eAAej3B,KAAK7V,KAAKwB,EAAEm/B,UAAU+vK,UAAU5+L,UAAU,SAACg1D,GACvDA,IACAD,EAAKk8K,kBACLl8K,EAAK47K,cAAgB57K,EAAK47K,aAAaxnN,cAI/Cj7B,KAAK+Q,MAAMiyO,eAAiBhjP,KAAKwB,EAAEsxL,iBAAiBmwD,oBAEpDjjP,KAAKkjP,cAAgBljP,KAAKmjP,oBAGrB5W,oCAAT,sBACIvsO,KAAK8sC,eAAej3B,KAAK7V,KAAKwB,EAAEm/B,UAAUyiN,cAActxO,UAAU,YAC9D+0D,EAAKw8K,cAAgBv8K,EACrBD,EAAK47K,cAAgB57K,EAAK47K,aAAa9oK,WAAW7S,MAGtDyiH,yCAA+C,YAC3C,GAA8B,eAA1BziH,EAAEorH,uBAEFprH,EAAEwrH,iBAAoBxrH,EAAEwrH,gBAAgB,CAAEn5J,YAAaj5B,mBAK3D,KAAMmpE,EAAmBxC,EAAKy2D,yBAAyBC,wBAAwBz2D,EAAEurH,eAC3EtrH,EAAeF,EAAKwxH,aAAa56D,gBAAgEp0D,GAEvGxC,EAAKw7K,gBAAkB,WAAM,SAAaltN,SAASmuN,kBAI3D/W,gDACIvsO,KAAK8sC,eAAej3B,KAAK7V,KAAKwB,EAAEsxL,iBAAiB+K,UAAUqR,UAAUlvM,KAAKwB,EAAE87B,QAAQw0J,cAC/EhgL,UAAU,YACP+0D,EAAK91D,MAAM2/L,UAAY5pI,EACvBD,EAAKk8K,sBAKjBxW,kCACIvsO,KAAK+hP,YAAc/hP,KAAK+hP,WACxB/hP,KAAKwB,EAAEm/B,UAAUmhN,eAAe9hP,KAAK+hP,WAAa7hP,UAAyBA,aA6B/EqsO,sCAAiB1lK,aACb,MAAgE,UAAb,QAA5CE,EAAqC,QAArCsC,EAAsB,QAAtBvC,EAAE,MAAFD,OAAE,EAAFA,EAAI08K,0BAAkB,eAAEl9J,qBAAa,eAAE15B,aAAK,eAAE61F,UAGzD+pF,kDACIvsO,KAAK+Q,MAAM2/L,UAAU/3L,QAAQ,YAAQ,SAAK6qO,eAAe18K,KACzD9mE,KAAKyiP,cAAgBziP,KAAKyiP,aAAa/sM,OAAO,QAAS11C,KAAK+Q,MAAM2/L,YAGtE67B,oCAAe1lK,GAAf,WACIA,EAAK3rC,KAAOl7B,KAAKyjP,mBAAmB58K,GACpC7mE,KAAK0jP,aAAa78K,GAEdA,EAAK1lD,OAAO0lD,EAAK1lD,MAAMxI,QAAQ,YAAK,SAAK6qO,eAAen6K,MAGhEkjK,kCAAa1lK,GACT,IAAMC,EAAeD,EAAK6lI,YAAc1sM,KAAKwB,EAAE87B,QAAQw0J,aAAajrH,EAAK6lI,YACnErjI,IAAmBhyE,aAAcwvE,EAAKk4K,aAEtCj4K,GAAgBA,EAAakqD,eAAenqD,EAAKk4K,aAAej4K,EAAaD,EAAKk4K,YAClFh4K,IAA2B1vE,aAAcwvE,EAAK88K,qBAE9C98K,EAAK88K,mBAAmB78K,GAC9BD,EAAKtsD,UAAY8uD,GAAoBtC,EAGjC/mE,KAAKwB,EAAEq8B,OAAO8d,SAAWkrB,EAAKsJ,MAAQtJ,EAAKsJ,KAAK72B,WAAW,aAAYutB,EAAKsJ,KAAUtJ,EAAKsJ,KAAI,QAG/FtJ,EAAK1lD,OAAS9pB,aAAcwvE,EAAKsJ,QAAOtJ,EAAKsJ,KAAO,uBAGpDnwE,KAAKwB,EAAEq8B,OAAOE,aAAY8oC,EAAKtsD,QAAUssD,EAAKtsD,UAAsC,MAA1BssD,EAAK+8K,mBAAwC/8K,EAAK+8K,oBAE5G5jP,KAAKqjP,eAAiBrjP,KAAKqjP,gBAAkBx8K,EAAK2oI,OACjD3oI,EAAag9K,UAAW,IAIjCtX,oDACSvsO,KAAKyiP,cAAiBziP,KAAKwiP,aAEZxiP,KAAK8jP,iBACbnrO,QAAQ,YAAK,SAAK8pO,aAAasB,WAAW16K,MAG1DkjK,iDACUzlK,EAAS,SAACC,EAASC,SAAoC,SAAKwoI,OAAS3oI,EAAKw8K,cAC1ErjO,MAAI+mD,IACM,QAAVqC,IAAKjoD,aAAK,eAAEvR,QAAS,EAAIo3D,EAAK7lD,MAAM2oC,OAAO,SAACod,GAAKD,IAAU,UAAIppD,OAAOipD,EAAO9mD,SAAI+mD,GAAO,CAAEC,EAAKwoI,OAAOvoI,MAAS,IAAM,IAEvHoC,EAAc,GAClB,YAAKt4D,MAAM2/L,UAAUh1L,OAAO,YAAC,MAAI,OAAO,QAAPsrD,IAAE7lD,aAAK,eAAEvR,SAAQ+I,QAAQ,YACtD0wD,EAAcrpD,SAAIqpD,GAAgBvC,EAAO,GAAIC,MAE1CsC,GAGXkjK,wCAAmB1lK,GACf,IAAMC,EAAoBD,EAAK2oI,KAAKpyK,UAAUypC,EAAK2oI,KAAK7zL,QAAQ,KAAO,EAAGkrD,EAAK2oI,KAAK5/L,QACpF,OAAOi3D,EAAK3rC,MAAQl7B,KAAKwB,EAAEoyL,iBAAiBrhL,GAAG,WAAWu0D,EAAqBD,EAAK6lI,aAGxF6/B,iCAAY1lK,GAAZ,WAEI,IAAIA,EAAMm9K,KAAKH,SAGf,KAAK7jP,KAAK+hP,aAAel7K,EAAMm9K,KAAKpmC,QAAU/2I,EAAMlpD,SAASwD,MAEzD,YADAnhB,KAAKwB,EAAEm/B,UAAUmhN,eAAe5hP,WAKpC,IAAMmpE,EAAOxC,EAAMlpD,SAEnB,GAAI0rD,EAAK4Y,OAA+B,mBAAf5Y,EAAK4Y,MAE1B,YADA5Y,EAAK4Y,QAIT,GAAK5Y,EAAK4mH,KAEV,KAAMlpH,EAAesC,EAAKqjI,WAAa1sM,KAAKwB,EAAE87B,QAAQw0J,aAAazoH,EAAKqjI,YAAc1sM,KAAKwB,EAAE87B,QAAQ4uK,UAAU,GACzGllI,EAAaqC,EAAK46K,YAAc56K,EAAK46K,WAAWl9K,IAAiB,GAEvE/mE,KAAK8gK,oBAAoBza,eAEzBrmJ,KAAKwB,EAAEy8B,UAAUnkB,SAAS,CAACuvD,EAAK4mH,KAAMjpH,GAAaqC,EAAKw0I,aAAe,MAAMlpL,KAAK,WAE1EmyC,EAAKi7K,YAAYj7K,EAAKtlE,EAAEm/B,UAAUmhN,eAAe5hP,iBAI7DqsO,oCAAe1lK,GAAf,WACqBA,EAAE3sD,UAAUwjB,UAAUmhK,iBAAiB,qBAC/ClmL,QAAQ,SAACouD,EAAIC,IACbF,EAAK/1D,MAAM2/L,YAAc5pI,EAAK/1D,MAAM2/L,UAAU1pI,KAEnDD,EAAG7kB,iBAAiB,aAAc,mBAC9B,IAAI4kB,EAAKi7K,WAET,KAAM96K,GAASmC,EAAMjQ,OACrB2N,EAAK/1D,MAAMmzO,YAAc,CACrBC,OAAQzkM,SAASgqJ,cAAiB7hK,MAAM0wC,KAAKtR,GAAO1tD,WAAW6c,IAAI,aAAK,UAAIgxC,KAAKruB,KAAK,IAAG,yBACzFs9G,QAAoC,QAA3BnvF,KAAKn2D,MAAM2/L,UAAU1pI,UAAM,iBAAE9rC,KACtColF,UAAWr5C,OAGnBF,EAAG7kB,iBAAiB,aAAc,YAAS,SAAKnxC,MAAMmzO,YAAc,IAAI9nE,SAIhFmwD,wCAAmB1lK,GAAnB,WACI,OAAKA,GACDA,EAAQttD,UAAU6qO,SAAS,wBAA2Bv9K,EAAQu4I,UAAav4I,EAAQu4I,SAASxvM,OAEtFi4B,MAAM0wC,KAAK1R,EAAQu4I,UAAUptL,KAAK,YAAK,SAAKqyN,mBAAmBt9K,KAFsCF,EAD1F,MAOzB0lK,kCACI,MAAO,KAAKvsO,KAAKwB,EAAE07B,UAAUC,YAAYmnN,cAAa,QAAQjtP,QAAS2I,KAAKwB,EAAE07B,UAAUC,YAAYonN,gBAGxGhY,0CACI,OAAsC,MAAlCvsO,KAAKwB,EAAE87B,QAAQC,gBAAqC,GACjDv9B,KAAKwB,EAAE87B,QAAQC,gBAAgBH,UAAU,EAAG,KAGvDmvM,iDACI,OAAOl1O,QAAS2I,KAAKwB,EAAE87B,QAAQwmM,uBAAwB9jO,KAAKuS,GAAG,YAAY6qB,UAAU,EAAG,KAG5FmvM,oCAAe1lK,EAAOC,GAClBD,EAAMnjB,iBACNmjB,EAAM8L,kBACN7L,EAAG09K,OAAO39K,IAGd0lK,wCACIvsO,KAAK8Z,SAAS,CAAC,4BAGnByyN,2CACIvsO,KAAKi8E,WAAWjuE,KAAO9N,WACvBF,KAAKi8E,WAAWv/C,OAAS18B,KAAKuS,GAAG,qBACjCvS,KAAKi8E,WAAW34D,gBAAgB,WAC5BujD,EAAK/sD,SAAS,CAAC,sBAIvByyN,mCACI,IAAM1lK,EAAa7mE,KAAKw6M,qBACxB,OAAOx6M,KAAKwB,EAAEoyL,iBAAiBrhL,GAAG,oBAAqBs0D,IAG3D0lK,0CAEI,OADoBvsO,KAAKwB,EAAEsxL,iBAAiB+K,UAAUz6J,WAAWqY,MAAM,KACpD,IAGvB8wL,oCAAe1lK,GACX7mE,KAAKykP,gBAAgBC,YAAY79K,GACjC7mE,KAAK8sC,eAAej3B,KAAK7V,KAAK2kP,cAAcC,eAAe/9K,GAAU/0D,UAAU,SAACg1D,GACxEA,EAAShyC,WAAWmtB,OAAO5gC,SAASw2E,aAIvC00I,+BAAT,WACIvsO,KAAK8sC,eAAen0B,QAAQ,YAAK,SAAErG,0DAjUlCxS,WAUA/E,aANA8pP,YAGA9kO,UAZW2vK,kCAaX5vK,YALA1oB,sCA8BJs4L,YAASvuL,MAACqwL,KAAqB,CAAEv+G,QAAQ,wBACzCy8G,YAASvuL,MAAC,oCACVuuL,YAASvuL,MAAC,mBAAoB,CAAEg4L,KAAMzJ,yCAGtCA,WANQ68C,qUAAgB/rN,KAL5BkvK,aAAU,CACP14K,SAAU,cACVC,SClCW,i3IDqCFs1N,IAAyBnrO,2eEnBtCugB,0EACI,mBAA+B,KAEnC,OAHoBf,QAGpB2rN,EAHA,CAAoBhrO,qBAgBhB,WAAYslE,EACAC,EACAuC,GAFZ,MAGImjK,YAAM3lK,EAAG,0BAA2BtlE,KAAYogB,KAAM3hB,KAF9C,+BACA+mE,qBANJA,iBAAiC,KAUhC,OAZgCnmD,QAYhC2rN,4BAAT,sBACIvsO,KAAK8kP,YAAc9kP,KAAKwB,EAAEy8B,UAAU4gL,kBAG/B7+M,KAAK8kP,YAAYxrM,WAAW,OAC7Bt5C,KAAK8kP,YAAc,IAAM9kP,KAAK8kP,aAIlCxqP,cAA4B,YACxBusE,EAAKi+K,YAAcj+K,EAAKi+K,YAAYrtN,QAAQ,IAAIqvC,EAAG,OAGvD9mE,KAAKmiP,gBAAkBniP,KAAK+5M,iBAAiBnQ,UAAUi5C,gBACvD7iP,KAAK8iP,iBAIUvW,wBAAnB,WACI,IAAI1lK,EAAY7mE,KAAK67D,kBACrB,GAAI77D,KAAK+Q,MAAMg0O,SAAU,CACrB,IAAMj+K,EAAoB9mE,KAAK+Q,MAAMg0O,SAASv1C,KAAKpyK,UAAUp9B,KAAK+Q,MAAMg0O,SAASv1C,KAAK7zL,QAAQ,KAAO,EAAG3b,KAAK+Q,MAAMg0O,SAASv1C,KAAK5/L,QACjIi3D,EAAY7mE,KAAKwB,EAAEoyL,iBAAiBrhL,GAAG,WAAWu0D,EAAqB9mE,KAAK+Q,MAAMg0O,SAASr4C,YAE/F,OAAO7lI,GAGX0lK,gDACIvsO,KAAK8sC,eAAej3B,KAAK7V,KAAKwB,EAAEsxL,iBAAiB+K,UAAUqR,UAAUlvM,KAAKwB,EAAE87B,QAAQw0J,cAC/EhgL,UAAU,YAEP+0D,EAAK91D,MAAM2/L,UAAY5pI,EAClBprD,OAAO,YAAQ,SAAKu0K,OAASppH,EAAKi+K,cACvCj+K,EAAKk8K,kBAEL,IAAI15K,EAAYvC,EAAM90C,KAAK,YAAQ,SAAKi+J,OAASppH,EAAKi+K,cAClDz7K,IACAxC,EAAK91D,MAAMg0O,SAAW17K,GAI1BxC,EAAKrO,qBAKjB+zK,kDACIvsO,KAAK+Q,MAAM2/L,UAAU/3L,QAAQ,YAAQ,SAAK6qO,eAAe18K,MAG7DylK,oCAAe1lK,GAAf,WACIA,EAAK3rC,KAAOl7B,KAAKyjP,mBAAmB58K,GACpC7mE,KAAK0jP,aAAa78K,GAEdA,EAAK1lD,OAAO0lD,EAAK1lD,MAAMxI,QAAQ,YAAK,SAAK6qO,eAAen6K,MAGhEkjK,wCAAmB1lK,GACf,IAAMC,EAAoBD,EAAK2oI,KAAKpyK,UAAUypC,EAAK2oI,KAAK7zL,QAAQ,KAAO,EAAGkrD,EAAK2oI,KAAK5/L,QACpF,OAAOi3D,EAAK3rC,MAAQl7B,KAAKwB,EAAEoyL,iBAAiBrhL,GAAG,WAAWu0D,EAAqBD,EAAK6lI,aAGxF6/B,kCAAa1lK,GACT,IAAMC,EAAeD,EAAK6lI,YAAc1sM,KAAKwB,EAAE87B,QAAQw0J,aAAajrH,EAAK6lI,YACnErjI,IAAmBhyE,aAAcwvE,EAAKk4K,aAEtCj4K,GAAgBA,EAAakqD,eAAenqD,EAAKk4K,aAAej4K,EAAaD,EAAKk4K,YAClFh4K,IAA2B1vE,aAAcwvE,EAAK88K,qBAE9C98K,EAAK88K,mBAAmB78K,GAC9BD,EAAKtsD,UAAY8uD,GAAoBtC,EAGjC/mE,KAAKwB,EAAEq8B,OAAO8d,SAAWkrB,EAAKsJ,MAAQtJ,EAAKsJ,KAAK72B,WAAW,aAAYutB,EAAKsJ,KAAUtJ,EAAKsJ,KAAI,QAG/FtJ,EAAK1lD,OAAS9pB,aAAcwvE,EAAKsJ,QAAOtJ,EAAKsJ,KAAO,uBAGpDnwE,KAAKwB,EAAEq8B,OAAOE,aAAY8oC,EAAKtsD,QAAUssD,EAAKtsD,UAAsC,MAA1BssD,EAAK+8K,mBAAwC/8K,EAAK+8K,qBAGpHrX,mCAAc1lK,GACV,GAAIA,EAAKob,OAA+B,mBAAfpb,EAAKob,MAC1Bpb,EAAKob,aAIT,GAAKpb,EAAKopH,KAEV,KAAMnpH,EAAeD,EAAK6lI,WAAa1sM,KAAKwB,EAAE87B,QAAQw0J,aAAajrH,EAAK6lI,YAAc1sM,KAAKwB,EAAE87B,QAAQ4uK,UAAU,GACzG7iI,EAAaxC,EAAKo9K,YAAcp9K,EAAKo9K,WAAWn9K,IAAiB,GAEvE9mE,KAAK8gK,oBAAoBza,eACzBrmJ,KAAKwB,EAAEy8B,UAAUnkB,SAAS,CAAC+sD,EAAKopH,KAAM5mH,GAAaxC,EAAKg3I,aAAe,QAGlE0uB,+BAAT,WACIvsO,KAAK8sC,eAAen0B,QAAQ,YAAK,SAAErG,0DAvIlCxS,WAGAggB,YAFA1oB,QAwBIm1O,qUAAuB5rN,KALnC+uK,aAAU,CACP14K,SAAU,uBACVC,SCzBW,kiBD4BFs1N,IAAgC1qO,sgBEfzC,WAAYglE,GAAZ,MACI2lK,YAAM3lK,EAAG,yBAA0BtlE,OAAUvB,KAOjD,iBAAU,SAACqpE,EAAetC,GACtB,OAAO36D,KAAKmqH,MAAc,IAARltD,GAAe,KAAYvC,EAAKv0D,GAAG,wBALzD,OALwCmsB,QAKxC6tM,iCACI,OAAOhjD,yBAOXgjD,gCACI,OAAOhjD,+DAvBNzpL,OASIysO,qUAAsB3qN,KANlC8tK,aAAU,CACP14K,SAAU,oBACVC,SCRW,syBDYFs1N,IAA+BnrO,2hBEC5C2hB,2EAEA,OAFoBF,QAEpB0pN,EAFA,CAAoBhrO,qBAchB,WAAYslE,EACAC,EACAuC,GAFZ,MAGImjK,YAAM3lK,EAAG,2BAA4B9jD,KAAM/iB,KAFnC,+BACA+mE,mBAJFA,yBAAyB,IAAI2oH,iBAWpB,OAbuB7sK,QAavB0pN,4BAAnB,sBACIvsO,KAAKglP,mBAELhlP,KAAKilP,0BAA4BjlP,KAAKinJ,eAAe0+E,aAAa7zN,UAAU,SAACg1D,GAC/C,kBAAtBA,EAAM++J,aAAmC/+J,EAAM/1D,QAAU7Q,aAA4B2mE,EAAKtoD,GAAG,iBAC7FsoD,EAAKtoD,GAAG,gBAAgBC,YAKjB+tN,+BAAnB,WACIvsO,KAAKilP,2BAA6BjlP,KAAKilP,0BAA0B3yO,eAGrEi6N,mDACUzlK,EAAS,IAAIvlE,IACnBulE,EAAOo+K,uBAAyBllP,KAAK+Q,MAAMm0O,uBAE3CllP,KAAKke,YAAYinO,aAAkB,IAAIjjO,MAAuB,SAACmnD,GAC3D,SAAKq2I,oBAAoB0lC,gBAAgBt+K,EAAQuC,SAAU,OAAW,GAAW,IAGzFkjK,oDACIvsO,KAAK+Q,MAAMm0O,wBAAyB,EACpCllP,KAAKglP,mBACO,QAAZn+K,OAAKi1G,eAAO,SAAEupE,UACdrlP,KAAKslP,uBAAuB9jO,KAAKxhB,KAAK+Q,MAAMm0O,yBAGhD3Y,qCACI,OAAQvsO,KAAK+Q,MAAMm0O,uBAA0DllP,KAAKuS,GAAG,aAAzCvS,KAAKuS,GAAG,wBAGxDg6N,0CACIvsO,KAAKue,GAAG,gBAAgBC,mDA5DvB1e,WAPAsiB,YAEApD,wDAoBJ0wK,YAFQ68C,qUAAwB/nN,KANpCkrK,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,wBACVC,SCpBW,o9BDuBFs1N,IAAiCnrO,grBET9C+hB,0EACI,wBAAwB,GACxB0jD,kBAAmC,IAAI0+K,MAGvC1+K,qBAAkC,IAAIyK,MAC1C,OANoBruD,QAMpBspN,EANA,CAAoBhrO,qBA6ChB,WAAYslE,EACDC,EACCuC,EACAtC,EACAC,GAJZ,MAKIwlK,YAAM3lK,EAAG,mBAAoB1jD,KAAMnjB,KAJ5B,kBACCopE,mBACAA,uBACAA,6BA/BHA,mBAA2B,EA2IpCA,aAAa,SAAClC,IACVkC,EAAK5nE,EAAEm/B,UAAUmhN,iBACjB56K,GAAEyL,mBAqBNvJ,kBAAkB,WACdA,EAAKo8K,cAAcrwN,SAASoyM,UA9JhC,OAVkCtkN,QAUlCnX,sBAAIygO,6BAAc,KAAlB,uBACI,OAAOvsO,KAAKwB,EAAEsxL,iBAAiB+K,UAAUC,mBACF,QAAhCh3H,EAA0B,QAA1BD,OAAK91D,MAAM8mJ,uBAAe,eAAEn6B,YAAI,eAAEvkG,eAAgBj5B,eACjB,QAAhC6mE,EAA0B,QAA1BsC,OAAKt4D,MAAM8mJ,uBAAe,eAAEn6B,YAAI,eAAEqgE,uBACnC/9L,KAAKwB,EAAE4kJ,oBAAoB43C,cAAgB,IAAMh+L,KAAKylP,iDAGjE35O,sBAAIygO,wBAAS,KAAb,iCACI,OAASvsO,KAAKwB,EAAEq8B,OAAOE,aAA8C,QAAhC+oC,EAA0B,QAA1BD,OAAK91D,MAAM8mJ,uBAAe,eAAEn6B,YAAI,eAAEvkG,eAAgBj5B,mBAC9EF,KAAKwB,EAAEq8B,OAAOE,cAAgD,QAAhCgpC,EAA0B,QAA1BsC,OAAKt4D,MAAM8mJ,uBAAe,eAAEn6B,YAAI,eAAEvkG,eAAgBj5B,eAC7C,QAAhCkpE,EAA0B,QAA1BpC,OAAKj2D,MAAM8mJ,uBAAe,eAAEn6B,YAAI,eAAEw9D,uBAClCl7L,KAAKwB,EAAEsxL,iBAAiB+K,UAAUnxJ,OAASxsC,kBACR,QAAhC+mE,GAA0B,QAA1BC,QAAKn2D,MAAM8mJ,uBAAe,iBAAEn6B,YAAI,iBAAEvkG,eAAgBj5B,kDAGrE4L,sBAAIygO,gCAAiB,KAArB,uCACI,OAAuC,QAAhCzlK,EAA0B,QAA1BD,OAAK91D,MAAM8mJ,uBAAe,eAAEn6B,YAAI,eAAEvkG,eAAgBj5B,kBACjDF,KAAKwB,EAAEq8B,OAAOE,cAA+C,QAAhCgpC,EAA0B,QAA1BsC,OAAKt4D,MAAM8mJ,uBAAe,eAAEn6B,YAAI,eAAEvkG,eAAgBj5B,cAC3C,QAAhCkpE,EAA0B,QAA1BpC,OAAKj2D,MAAM8mJ,uBAAe,eAAEn6B,YAAI,eAAEvkG,eAAgBj5B,eACd,QAAhC+mE,GAA0B,QAA1BC,QAAKn2D,MAAM8mJ,uBAAe,iBAAEn6B,YAAI,iBAAEw9D,wBAAwD,QAAhC/zH,GAA0B,QAA1BC,QAAKr2D,MAAM8mJ,uBAAe,iBAAEn6B,YAAI,iBAAEqgE,yDAWvGwuC,4BAAT,sBACIvsO,KAAKuyG,qBAAqBvyG,KAAKwB,EAAEm/B,UAAUsnG,QAAQn2H,UAAU,SAACg1D,YACrDA,GAAYA,EAAS+yH,oBAAsBhzH,EAAKgzH,oBAErDhzH,EAAK91D,MAAM8mJ,gBAAe70I,SAAQ6jD,EAAK91D,MAAM8mJ,iBAAoB/wF,GACjED,EAAK91D,MAAMotL,qBAAuBt3H,EAAKrlE,EAAEsxL,iBAAiB+K,UAAUM,uBAC7B,QAAhCp3H,EAA0B,QAA1BsC,IAAKt4D,MAAM8mJ,uBAAe,eAAEn6B,YAAI,eAAEvkG,cAAej5B,gBAExD2mE,EAAK6+K,yBACL7+K,EAAKwN,oBAGTr0E,KAAKuyG,qBAAqBvyG,KAAKwB,EAAEm/B,UAAUglN,WAAW7zO,UAAU,YAC5D+0D,EAAK91D,MAAM60O,oBAAsB9+K,MAIhCylK,oCAAT,WACIvsO,KAAK0lP,0BAGTnZ,yDACIhjD,yCAA+C,oBAC3C,GAAIziH,EAAEmrH,oBAAoD,QAA/B5oH,IAAKt4D,MAAM8mJ,gBAAgBn6B,YAAI,eAAEt6F,YAG5D,IAAI0jC,EAAE++K,qBAAuB/+K,EAAE++K,sBAAwBh/K,EAAK91D,MAAM8mJ,gBAAgBn6B,KAAKjqF,cACnF,OAAO,EAEX,IAAIqzB,EAAEwrH,iBAAoBxrH,EAAEwrH,gBAAgBzrH,EAAK91D,MAAM8mJ,gBAAgBn6B,MAIvE,KAAM12D,EAAuBF,EAAEorH,oBAAmB,KAAmB,QAAfnrH,IAAEsrH,qBAAa,eAAEp5J,MACvE,GAAI4tC,EAAKwxH,eAAgBxxH,EAAK91D,MAAM+0O,mBAAmBjqJ,IAAI70B,GAK3D,KAAMoC,EAAmBvC,EAAKy2D,yBAAyBC,wBAAwBz2D,EAAEurH,eAC3EnrH,GAAeL,EAAKwxH,aAAa56D,gBAAgEr0D,GASvG,GAPAlC,GAAa/xC,SAAS0wN,oBAAsBh/K,EAAK91D,MAAM8mJ,gBAAgBn6B,KAAKjqF,cAC5EyzB,GAAa/xC,SAAS4wN,cAAgBl/K,EAAK91D,MAAM8mJ,gBAAgBn6B,KAAKt6F,WACtE8jC,GAAa/xC,SAASxb,WAAaktD,EAAK91D,MAAM8mJ,gBAAgBn6B,KAAK/jH,WAGnEktD,EAAK91D,MAAM8mJ,gBAAgBn6B,KAAKsoH,0BAA0B9+K,GAAa/xC,WAElE0xC,EAAKozK,OAAOl8M,YAAc+oC,EAAEm/K,sBAAuB,CAEpD,IAAMh/K,GAAiB,CACnB9M,KAAM2M,EAAEsrH,WACRtuJ,KAAMgjC,EAAGsrH,gBAA4B,EAAftrH,EAAEqrH,WACxB+zD,KAAMp/K,EAAEsrH,WAAatrH,EAAEqrH,gBAAa,EACpCg0D,MAAO,WACHj/K,GAAa/xC,SAASmuN,eAG9Bz8K,EAAK91D,MAAMq1O,eAAevwO,KAAKoxD,IAG/BC,GAAa/xC,SAASkxN,eAAiBp/K,QAEvCJ,EAAK91D,MAAM8mJ,gBAAgBn6B,KAAKi8D,mBAAmB9jL,KAAK,CACpDs6D,KAAMrJ,EAAEsrH,WACRl3J,KAAM4rC,EAAEqrH,WACRh3J,QAAS,WACL+rC,GAAa/xC,SAASmuN,gBAKlCz8K,EAAK91D,MAAM+0O,mBAAmBtsO,IAAIwtD,SAKnCulK,8BAAP,WACI,OAAOvsO,KAAKsmP,6BAA+BtmP,KAAK+Q,MAAM8mJ,iBAAmB73J,KAAK+Q,MAAM8mJ,gBAAgBqmC,iBAGjGquC,6BAAP,WACI,OAAOvsO,KAAKsmP,6BAA+BtmP,KAAK+Q,MAAM8mJ,iBAAmB73J,KAAK+Q,MAAM8mJ,gBAAgBC,gBAGxGy0E,iDACI,OAAOvsO,KAAKwB,EAAEsxL,iBAAiB+K,UAAUnxJ,OAASxsC,eAGtDqsO,kDACI,GAAIvsO,KAAK+Q,MAAM8mJ,gBAAgB0uF,aAC3BvmP,KAAK+Q,MAAM8mJ,gBAAgB0uF,uBACpBvmP,KAAKwmP,wBAEZxmP,KAAKymP,sBACF,CAEH,IAAKzmP,KAAKsmP,8BAAgCtmP,KAAK+Q,MAAM8mJ,gBAAgBn6B,MAC9D19H,KAAK+Q,MAAM8mJ,gBAAgBn6B,KAAKvkG,aAAej5B,gBAAiC,OACvFF,KAAKwB,EAAE07B,UAAU6lB,oBASzBwpL,wCAAmB1lK,GACf,GAAK7mE,KAAKi6O,OAAOl8M,WAAjB,CAKA,IAAM+oC,EAAgB,IAAIztE,MAC1BytE,EAAcxyD,KAAO,gBACrBwyD,EAAcrqC,MAAQz8B,KAAKuS,GAAG,oBAC9Bu0D,EAAcuvF,QAAUvzI,GACxB9iB,KAAKyxK,mBAAmBvqB,KAAKpgF,QARzB9mE,KAAKinJ,eAAeC,KAAK,gBAAiBlnJ,KAAKuS,GAAG,oBAAqBuQ,KAW/EypN,mDACI,OAA2C,QAApC1lK,OAAK91D,MAAM8mJ,gBAAgBmlC,iBAAS,eAAEptL,QASjD28N,0CAAqB1lK,GACjB7mE,KAAK+Q,MAAM8mJ,gBAAgBp7H,MAAQoqC,EAAElpD,SAASud,KAC9C2rC,EAAElpD,SAAS+oO,YAGfna,8BACIvsO,KAAK+Q,MAAM8mJ,gBAAgB8kC,mBAI/B4vC,mCACIvsO,KAAK+Q,MAAM8mJ,gBAAgBqlC,oBAG/BqvC,gCAAW1lK,GACP,OAAOA,GAAWA,EAAQ8oK,kBAAoB,GAGlDpD,qDACI,OAAOvsO,KAAKwB,EAAEq8B,OAAOC,cAA8C,QAA/B+oC,OAAK91D,MAAM8mJ,gBAAgBn6B,YAAI,eAAEvkG,eAAgBj5B,aAC9EF,KAAKwB,EAAEq8B,OAAOE,YAGzBwuM,oDACI,OAAOvsO,KAAKwB,EAAEq8B,OAAOC,cAA8C,QAA/B+oC,OAAK91D,MAAM8mJ,gBAAgBn6B,YAAI,eAAEvkG,eAAgBj5B,aAGzFqsO,2CACI,OAAkE,QAA3D1lK,WAAS6iI,cAAc,4CAAoC,eAAEimC,mBAAoB,4CAhOvF7vO,WAEA3B,YAIA6gB,YAD0B3lB,aARfq2L,yEA4BfA,sCACAA,sCACAA,qCACAA,iCACAA,+BAEAA,YAASvuL,MAAC,sCACVuuL,YAASvuL,MAAC,mBAAoB,CAAEg4L,KAAMzJ,wBAR9B68C,qUAAgB/jL,KAL5BknI,aAAU,CACP14K,SAAU,cACVC,SCxBW,wjLD2BFs1N,IAAyBnrO,0fEblC,WAAYylE,UAER2lK,YAAM3lK,EAAG,sBAAuBtlE,KAAYA,OAAUvB,KAGjD,OAP4B2mP,QAO5Bpa,4BAAT,sBAEI9uM,WAAW,WAAQopC,EAAK/sD,SAAS,CAAC,oBAAqB,CAAEsuE,SAAUmhG,iBAA2B,+CApB7FzpL,OAWIysO,qUAAmB5nN,KAL/B+qK,aAAU,CACP14K,SAAU,iBACVC,SCTW,+jBDYFs1N,IAA4B1qO,ufEOzCm9B,0EAOI,wBAAsC,GAMtC6nC,gBAAyC3mE,gBAC7C,OAdoBwtB,QAcpB6+M,EAdA,CAAoBhrO,qBA0ChB,WAAYslE,EACAC,EACAuC,EACAtC,EACAC,GAJZ,MAKIwlK,YAAM3lK,EAAG,iBAAkBtlE,KAAay9B,KAAMh/B,KAJtC,wBACAopE,mBACAA,wBACAA,oBANJA,iBAAiC,KAhBzC,OAFgC17C,QAEhC6+M,uBADA,SACW1lK,GACW,UAAdA,EAAMzsD,KACNpa,KAAK4mP,YAMb96O,sBAAIygO,iCAAkB,KAAtB,WACI,OAAOvsO,KAAK+Q,MAAM81O,wBAA0B7mP,KAAK8mP,yDAGrDh7O,sBAAIygO,sCAAuB,KAA3B,WACI,QAASvsO,KAAK+Q,MAAMohG,aAAenyG,KAAK+Q,MAAMg2O,6CAazCxa,4BAAT,sBACIvsO,KAAKwB,EAAEsxL,iBAAiB+K,UAAUyR,cAG9BtvM,KAAKs2L,iBAAiBp2L,8BACtBF,KAAK8Z,SAAS,CAAC,uBAAwB,CAAEsuE,SAAUmhG,cAAqBhvJ,UAAWv6B,KAAK+Q,MAAMwpB,YAK7Fv6B,KAAKs2L,iBAAiBp2L,mCAAiDF,KAAKs2L,iBAAiBp2L,6BAKlGF,KAAK+Q,MAAMi2O,MAAQ,EAEnBhnP,KAAK+Q,MAAMiyO,eAAiBhjP,KAAKwB,EAAEsxL,iBAAiBmwD,oBAEpDjjP,KAAK8sC,eAAej3B,KAAK7V,KAAKykP,gBAAgBwC,UAAUn1O,UAAU,YAC1D+0D,EAAK50D,OAAOm2E,WAAathB,IAE7BD,EAAK50D,OAAOm2E,SAAWthB,EACvBD,EAAKrlE,EAAEy8B,UAAUnkB,SAAS,CAAC,iBAAkB,CAAEsuE,SAAUmhG,gBACzD9rJ,WAAW,WAAM,SAAKj8B,EAAEy8B,UAAUipN,qBAAqB,UAbvDlnP,KAAK8Z,SAAS,CAAC,qBAAsB,CAAEsuE,SAAUmhG,cAAqBhvJ,UAAWv6B,KAAK+Q,MAAMwpB,aAiB3FgyM,wBAAT,WACIvsO,KAAK+Q,MAAMo2O,yBAA2BnnP,KAAKs2L,iBAAiBp2L,kCAC5DF,KAAK+Q,MAAM81O,sBAAwB7mP,KAAKs2L,iBAAiBp2L,4BACzDF,KAAK+Q,MAAMwpB,UAAYv6B,KAAKwB,EAAEy8B,UAAUkgL,sBAAsBn+M,KAAKiR,YAAYspB,WAE/Ev6B,KAAK+Q,MAAMg2O,YAAc/mP,KAAKujC,eAAe6jN,cAC7CpnP,KAAK+Q,MAAMohG,UAAYnyG,KAAKujC,eAAey4K,eAExCh8M,KAAK8mP,0BACJ9mP,KAAK+Q,MAAMmrM,cAAgBh8M,eAI1BqsO,yBAAT,WAEI,GAAiC,MAA7BvsO,KAAKiR,YAAYm3E,SACjBpoF,KAAKiS,OAAOm2E,SAAWpoF,KAAKiR,YAAYm3E,aACrC,CACH,IAAMvhB,EAAW7mE,KAAKs+D,oBAAoBoB,QAAQ,YAClD1/D,KAAKiS,OAAOm2E,SAAWvhB,GAAY7mE,KAAKwB,EAAEsxL,iBAAiB8W,UAAUqR,gBAEzEj7M,KAAKykP,gBAAgBC,YAAY1kP,KAAKiS,OAAOm2E,UAG7CpoF,KAAK+Q,MAAMs4B,SAAWrpC,KAAKiR,YAAYo4B,SACvCrpC,KAAKqnP,iBAKT9a,4CACSvsO,KAAKg4B,gBAAgB7C,SAASgkE,WAAWsZ,UAE9CzyG,KAAKsnP,gBAELtnP,KAAK07E,aAAaygI,QAAQn8M,KAAKiS,OAAQjS,KAAK8mP,wBAAyB9mP,KAAK+Q,MAAMw2O,kBAC5E,WACI1gL,EAAK2gL,eAET,SAAC1gL,GACqC,KAA/BA,EAAevwC,cAAuBswC,EAAKigL,0BAC1CjgL,EAAK4gL,yBACL5gL,EAAK50D,OAAOgqM,eAAY,IAGhC,SAACn1I,GACGD,EAAK6gL,YAAY5gL,KAEpBh1D,UAAU,gBAGnBy6N,mCACQvsO,KAAK+Q,MAAMwpB,UACXv6B,KAAKwB,EAAEy8B,UAAUm+K,cAAcp8M,KAAK+Q,MAAMwpB,WAG9Cv6B,KAAKwB,EAAE07B,UAAU6lB,mBAGZwpL,yBAAT,WACIvsO,KAAK4mP,YAGTra,0CACIvsO,KAAK8Z,SAAS,CAAC,4BAA6B,CAAEuvB,SAAUrpC,KAAK+Q,MAAMs4B,YAGvEkjM,gDACIvsO,KAAKwB,EAAEsxL,iBAAiB+K,UAAUmR,8BAC7Bl9L,UAAU,YAAS,SAAKf,MAAM42O,oBAAsB7gL,KAG7DylK,0CAAqB1lK,IAChBA,EAAK74D,OAAS9N,YAAoC2mE,EAAK74D,OAAS9N,kBAC1DF,KAAK8Z,SAAS,CAAC+sD,EAAK+gL,QAG/Brb,sCACQvsO,KAAK+Q,MAAM81O,uBAAuB7mP,KAAK8Z,SAAS,CAAC,qBAAsB,CAAEsuE,SAAUpoF,KAAKiS,OAAOm2E,YAGvGmkJ,iCAAY1lK,GACR7mE,KAAKiS,OAAO+vL,eAAiBn7H,EAC7B7mE,KAAK+Q,MAAMi2O,MAAQ,EACnBhnP,KAAK+Q,MAAMw2O,mBAAoB,EAC/BvnP,KAAK+Q,MAAMmrM,cAAgBh8M,aAE3B,IAAM4mE,EAAU9mE,KAAKiS,OAAO+vL,gBAAkB9hM,WACxCF,KAAKuS,GAAG,2BACRvS,KAAKuS,GAAG,2BACdvS,KAAKoT,GAAG2kB,YAAY+uC,IAGxBylK,0CACI,OAAwB,GAApBvsO,KAAK+Q,MAAMi2O,MACPhnP,KAAKiS,OAAO+vL,gBAAkB9hM,WAA8CF,KAAKuS,GAAG,2BAC5EvS,KAAKuS,GAAG,2BAEjB,IAGXg6N,4CAAuB1lK,GACnBppC,WAAW,WAAM,SAAEvjB,UAAUib,WAAW8wD,SAAS,MAGrDsmJ,2CACIvsO,KAAKynP,0BAGUlb,+BAAnB,WACIvsO,KAAK8sC,eAAen0B,QAAQ,YAAK,SAAErG,iBAG/Bi6N,mCAAR,WACIvsO,KAAKujC,eAAe45K,0BACpBn9M,KAAK+Q,MAAMg2O,iBAAc,EACzB/mP,KAAK+Q,MAAMohG,eAAY,EACvBnyG,KAAK+Q,MAAMmrM,cAAgBh8M,eAGvBqsO,0BAAR,WAII,GAHAvsO,KAAKiS,OAAOiqM,cAAgBl8M,KAAK+Q,MAAMmrM,cACvCl8M,KAAKiS,OAAOo3B,SAAWrpC,KAAK+Q,MAAMs4B,SAE/BrpC,KAAK8mP,wBAIJ,OAHA9mP,KAAKiS,OAAOgqM,UAAYj8M,KAAK+Q,MAAMohG,eAEnCnyG,KAAK+Q,MAAMw2O,mBAAoB,GAIhCvnP,KAAK+Q,MAAMmrM,eAAiBh8M,cAK/BF,KAAKiS,OAAOgqM,UAAYj8M,KAAK+Q,MAAM82O,QAJ/B7nP,KAAKiS,OAAOgqM,UAAYj8M,KAAK+Q,MAAM+2O,mDAjOtChoP,WAOAwQ,YAKAiwO,YACA5iP,YAHAoiB,0CA4BJ2vK,eAAYvuL,MAAC,oBAAqB,CAAC,oCAOnCuuL,YAASvuL,MAAC,sBARForO,qUAAcztM,KAN1B4wJ,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,YACVC,SCtCW,6jKDyCFs1N,IAAuB1qO,2eE/BpCysB,0EAGI,wBAAsC,KAC1C,OAJoBy5N,QAIpBxb,EAJA,CAAoBhrO,qBAehB,WAAYslE,EACAC,EACAuC,GAFZ,MAGImjK,YAAM3lK,EAAG,iBAAkBtlE,KAAa+sB,KAAMtuB,KAFtC,wBACA+mE,oBAIH,OAT4BghL,QAS5Bxb,4BAAT,WACIvsO,KAAKwB,EAAEsxL,iBAAiB+K,UAAUyR,cAGlCtvM,KAAK+Q,MAAMwpB,UAAYv6B,KAAKwB,EAAEy8B,UAAUkgL,sBAAsBn+M,KAAK+Q,MAAMwpB,WAI5C,MAA7Bv6B,KAASiR,YAAY+6I,MAA6C,MAAxBhsJ,KAAKiR,YAAY+2O,KACvDhoP,KAAK+Q,MAAMi2O,MAAQ,EACnBhnP,KAAKiS,OAAOo3B,SAAU,QACtBrpC,KAAKiS,OAAOiqM,cAAgBh8M,WAC5BF,KAAKiS,OAAOgqM,UAAYj8M,KAAKiR,YAAY+6I,KACzChsJ,KAAK+Q,MAAMwpB,UAAY0tN,mBAAmBjoP,KAAKiR,YAAYyzE,OAC3D3iD,QAAQC,IAAI,2BAA2BhiC,KAAK+Q,MAAMwpB,WAClDv6B,KAAKkoP,cAELloP,KAAK+Q,MAAMi2O,MAAQ,EACnBhnP,KAAKmoP,0BASb5b,4CACIvsO,KAAK07E,aAAaygI,QAAQn8M,KAAKiS,QAAQ,GAAO,EAAO,WACjD40D,EAAKuhL,gBACN,KAAM,MACJt2O,UAAU,eAGnBy6N,oCACQvsO,KAAK+Q,MAAMwpB,UACXv6B,KAAKwB,EAAEy8B,UAAUm+K,cAAcp8M,KAAK+Q,MAAMwpB,WAE1Cv6B,KAAKwB,EAAE07B,UAAU6lB,mBAMzBwpL,wDACIxqM,QAAQC,IAAI,4BAA4BhiC,KAAK+Q,MAAMwpB,WACnDv6B,KAAKvE,GAAGuE,KAAK2kP,cAAc0D,oBAAoBroP,KAAK+Q,MAAMwpB,YAAY,EAAO,SAACusC,GACtEA,EAAShyC,WACTiN,QAAQC,IAAI,kBAAkB8kC,EAASxxD,MACvCuxD,EAAKrlE,EAAEy8B,UAAUu/K,iBAAiB12I,EAASxxD,MAAM,IAEjDuxD,EAAKzzD,GAAGC,YAAYyzD,EAASxzD,6DA/EpCxT,WAEAwQ,YAGAu0O,QAcItY,qUAAmB+b,KAN/B54D,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,kBACVC,SCnBW,kBDsBFs1N,IAA4B1qO,0fELrC,WAAYglE,EACAC,EACAuC,GAFZ,MAGImjK,YAAM3lK,EAAG,kBAAmBtlE,KAAYA,OAAUvB,KAF1C,wBACA+mE,qBAIH,OARwBr4C,QAQxB69M,qBAAT,sBACKvsO,KAAK07E,aAAa6sK,SAAS,WACxB1hL,EAAKogF,eAAeuhG,gBACpB/qN,WAAW,WAAQopC,EAAK/sD,SAAS,CAAC,iBAAkB,CAAEsuE,SAAUmhG,iBAA2B,iDAzB9FzpL,WAIAwQ,YACA0O,QASIutN,qUAAe99M,KAN3BihK,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,aACVC,SCZW,uMDeFs1N,IAAwB1qO,yfECjC,WAAYglE,EACAC,GADZ,MAEI0lK,YAAM3lK,EAAG,yBAA0BtlE,KAAYA,OAAUvB,KADjD,4BAKH,OAR+B6uB,QAQ/B09M,4BAAT,sBACIvsO,KAAKinJ,eAAeuhG,gBACpB/qN,WAAW,WAAQopC,EAAK/sD,SAAS,CAAC,iBAAkB,CAAEsuE,SAAUmhG,iBAA2B,+CAvB1FzpL,WAIAkf,QASIutN,qUAAsBv9M,KANlC0gK,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,oBACVC,SCXW,8SDcFs1N,IAA+B1qO,sgBEExC,WAAYglE,UACR2lK,YAAM,qBAAsB3lK,IAAI7mE,KAG7B,OANqCmvB,QAMrCo9M,yBAAP,SAAoB1lK,EAAwBC,GACxC,OAAO9mE,KAAKQ,IAAIC,iBACZT,KAAKU,eACL,eACA,CAAEivM,eAAgB9oI,EAAgBjmE,QAAgB,MAAPkmE,OAAO,EAAPA,EAASjmE,oBAGrD0rO,gCAAP,WACI,OAAOvsO,KAAKQ,IAAIC,iBAAiBT,KAAKU,eAAgB,wBAGnD6rO,uBAAP,SAAkB1lK,EAA+BC,GAC7C,OAAO9mE,KAAKQ,IAAIS,kBAAkBjB,KAAKU,eAAgB,aAAcmmE,EAAe,MAAPC,OAAO,EAAPA,EAASjmE,4DAvBrF4W,QAKI80N,qUAA0Bl9M,KADtCqgK,iBACY68C,IAAmCn9M,geCLhDM,0EACI,yBAAoC,GACpCm3C,kBAAyB,IAC7B,OAHoBr3C,QAGpB+8M,EAHA,CAAoBhrO,qBAkBhB,WAAYslE,EAA8BC,GAA1C,MACI0lK,YAAM3lK,EAAG,qCAAsCtlE,KAAYmuB,KAAM1vB,KAD3B,wCAJ1C,OAFoDwvB,QAEpD1jB,sBAAWygO,gBAAC,KAAZ,iBACI,OAAkC,QAA3B1lK,OAAK4hL,8BAAsB,eAAE7mP,mCAO/B2qO,8BAAT,sBACIvsO,KAAKkd,iBACLld,KAAKvE,GAAGuE,KAAK0oP,2BAA2BC,uBAAuB,EAAO,SAAC7hL,GACnED,EAAK91D,MAAM63O,gBAAkB9hL,EAASrxD,SAEtCqxD,EAASrxD,SAASkD,QAAQ,YACF,MAAhB0wD,EAAO/2C,QACP+2C,EAAO/2C,OAAQ,UAMvBi6M,2BAAR,sBACIvsO,KAAKke,YAAY5I,KAAU,IAAI4M,MAC3B,SAAC4kD,GAAO,MAAK,SAAK4hL,2BAA2BG,aAAsC,QAAzBx/K,IAAKt4D,MAAM4+L,sBAAc,SAAI,IAAM7oI,SAC7F,EAAW,SAACA,GACRA,EAASnuD,QAAQ,YACgB,MAAzB0wD,EAAOsmI,iBACPtmI,EAAOsmI,gBAAiB,SAGjC,GACP3vM,KAAKue,GAAG,QAAQC,UAGX+tN,iCAAT,WACI,MAAO,CACHlwN,eAAe,EACfq9B,eAAe,EACfE,aAAc55C,KAAK4B,IAIR2qO,0BAAnB,WACIvsO,KAAKkd,kBAGUqvN,0BAAnB,WACIvsO,KAAK+Q,MAAM4+L,gBAAiB,EAC5B3vM,KAAKkd,kBAGTqvN,iCACIvsO,KAAKkd,2DAxEJpd,WAIAwvB,sDAeJogK,YAASvuL,MAAC,6BADForO,qUAAkCh9M,KAP9CmgK,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,kCACVC,SCjBW,0mEDqBFs1N,IAA2C1qO,0fETpD,WAAYglE,UACR2lK,YAAM,eAAgB3lK,IAAI7mE,KAGvB,OAN+B4vB,QAM/B28M,mCAAP,SAA8B1lK,EAAgCC,GAC1D,OAAO9mE,KAAKQ,IAAIS,kBAAkBjB,KAAKU,eAAgB,yBAA0BmmE,EAAe,MAAPC,OAAO,EAAPA,EAASjmE,mBAE/F0rO,uCAAP,WACI,OAAOvsO,KAAKQ,IAAIC,iBAAiBT,KAAKU,eAAgB,6BAA8B,KAEjF6rO,sCAAP,WACI,OAAOvsO,KAAKQ,IAAIC,iBAAiBT,KAAKU,eAAgB,4BAA6B,8CAlBlF+W,QAKI80N,qUAAoBz8M,KADhC4/J,iBACY68C,IAA6BxtN,wfCL1C0X,2EAEA,OAFoB1G,QAEpBw8M,EAFA,CAAoBhrO,qBAiBhB,WAAYslE,EAAsBC,GAAlC,MACI0lK,YAAM3lK,EAAGC,EAAevlE,KAAck1B,KAAMz2B,KAHtC,mBAAY,IAAI0vL,eAe1BrmH,qBAAqB,SAACtC,GAClBA,EAAE7lD,eAAeC,MAAMC,QAAQ,CAC3BC,SAAU,QACV2e,OAAQ,WACR1e,UAAU,EACV1gB,QAAS,CACLuvE,KAAM,UACNh1C,QAAS,WACLkuC,EAAKy/K,UAAUtnO,cA1B/B,OAF2CuO,QAE3CjkB,sBAAaygO,wBAAS,KAAtB,SAAwB1lK,GACpB7mE,KAAK+Q,MAAM8S,UAAYgjD,mCAQlB0lK,oCAAT,WACIC,YAAM1mK,wBAAuB1nC,WACzBp+B,KAAK4B,IAAG5B,KAAK4B,EAAEszB,KAAK6wC,qBAAsB,IAGlDwmK,gCAAW1lK,GACP7mE,KAAK8Z,SAAS,CAAC,kCAAmC+sD,EAAEptD,KAAK9M,oDA7BxD7M,wDAcJ4vL,2BAGAA,YALQ68C,qUAAyBv8M,KANrC0/J,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,uBACVC,SCZW,kBDeFs1N,IAAkCwc,geEG/C34N,0EAMI,yBAA0B,EAE1By2C,iBAAgB,EAChBA,4BAAmC,GACnCA,YAAW,IACf,OAXoB52C,QAWpBs8M,EAXA,CAAoBhrO,qBA2BhB,WAAYslE,EAA8BC,GAA1C,MACI0lK,YAAM3lK,EAAG,gCAAiCtlE,KAAc6uB,KAAMpwB,KADxB,gCA2DlCqpE,kBAAkB,8BACtB,OAAQA,EAAKt4D,MAAMi4O,4BACV9oP,WAAuC,OAAqB,QAAd6mE,IAAKkiL,iBAAS,eAAErnP,OAC9D1B,SAAqC,OAAmB,QAAZ8mE,IAAKkiL,eAAO,eAAEtnP,OAC1D1B,iBAA6C,OAA2B,QAApBkpE,IAAK+/K,uBAAe,eAAEvnP,OAC1E1B,cAA0C,OAAwB,QAAjBgnE,KAAKkiL,oBAAY,iBAAExnP,OACpE1B,WAAuC,OAA0B,QAAnB+mE,KAAKoiL,sBAAc,iBAAEznP,UAC/D,OAAqB,QAAdwlE,KAAK6hL,iBAAS,iBAAErnP,MA9D/B,OAZsCquB,QAYtCs8M,8BAAT,sBACIvsO,KAAKvE,GAAGuE,KAAKspP,qBAAqBvkB,6BAA6B,EAAO,SAACj+J,GACnED,EAAK91D,MAAM8S,UAAYijD,EAASrxD,WAGpCzV,KAAKvE,GAAGuE,KAAKspP,qBAAqBC,8BAC9B,EAAO,SAACziL,GACJD,EAAK91D,MAAMy4O,0BAA4B3iL,EAAKxiD,KAAK,qBAC5C3I,OAAO,YAAK,SAASpG,KAAKzF,KAAK,YAAK,WAAMw5D,EAAE/2C,SAAUu0C,EAAK4iL,0BAA0BpgL,EAAE/2C,SAC/D,IAAzBw0C,EAASxxD,KAAK1F,QAKlBi3D,EAAK91D,MAAM24O,cAAgB5iL,EAASxxD,KAAK1F,OAAS,EAClDi3D,EAAK91D,MAAMi4O,sBAAwBliL,EAASxxD,KAAK,GAEjDuxD,EAAK3pD,kBAPD2pD,EAAK91D,MAAM44O,UAAW,KAYtCpd,iDACI,GAAKvsO,KAAK+Q,MAAMi4O,sBAEhB,KAAMliL,EAAS,IAAIvlE,KACnBulE,EAAOk7H,eAAiBhiM,KAAK+Q,MAAMi4O,sBACnCliL,EAAOgpI,QAAU9vM,KAAK+Q,MAAM64O,cAC5B9iL,EAAO+iL,UAAY7pP,KAAK+Q,MAAM+4O,gBAC9BhjL,EAAOlkD,SAAW5iB,KAAK+Q,MAAMg5O,eAC7BjjL,EAAOr0D,SAAWzS,KAAK+Q,MAAMi5O,eAE7BhqP,KAAKke,YAAY+rO,cACb,IAAI/nO,MAAuB,SAACmnD,GAA6B,SAAKigL,qBAAqBY,uBAAuBpjL,EAAQuC,SAC9G,OAAW,GAAW,KAGlCkjK,gCAAW1lK,GACP7mE,KAAK8Z,SAAS,CAAC,kCAAmC+sD,EAAEptD,KAAK9M,SACrD,CAAEw9O,YAAanqP,KAAK+Q,MAAMi4O,uBAAyB9oP,WAAwCA,iBAA8BA,qBAGjIqsO,oCAAe1lK,GACX7mE,KAAK8Z,SAAS,CAAC,kCAAmC+sD,EAAEl6D,SAChD,CAAEw9O,YAAanqP,KAAK+Q,MAAMi4O,uBAAyB9oP,WAAwCA,iBAA8BA,qBAGxHqsO,iCAAT,sBACI,MAAO,CACHlwN,eAAe,EACfq9B,eAAe,EACfE,aAAc,WAAM,SAAKwwM,qBAexB7d,0BAAT,WACIvsO,KAAKkd,kBAGAqvN,0BAAT,WACIvsO,KAAK+Q,MAAM64O,cAAgB5pP,KAAK+Q,MAAMg5O,eAAiB/pP,KAAK+Q,MAAM+4O,gBAAkB9pP,KAAK+Q,MAAMi5O,oBAAiB,EAChHhqP,KAAKkd,kBAGTqvN,kCAAa1lK,GAAb,WACI7mE,KAAK+Q,MAAM2oB,gBAAkBmtC,EAAMvoC,UACnCt+B,KAAK+Q,MAAMi4O,sBAAwBniL,EAAMlpD,SAAS2U,MAClDtyB,KAAKkd,iBAELugB,WAAW,WAAM,SAAK05C,mBAG1Bo1J,+CAA0B1lK,GACtB,OAAQA,QACC3mE,WACD,OAAOF,KAAKs2L,iBAAiBp2L,4CAC5BA,SACD,OAAOF,KAAKs2L,iBAAiBp2L,0CAC5BA,cACD,OAAOF,KAAKs2L,iBAAiBp2L,+CAC5BA,iBACM,KACNA,WACD,OAAO,UAEP,OAAO,IAInBqsO,iCACIvsO,KAAKkd,2DAhJJpd,WAEA6vB,yCA8BJ+/J,YAASvuL,MAAC,8BACVuuL,YAASvuL,MAAC,oCACVuuL,YAASvuL,MAAC,yCACVuuL,YAASvuL,MAAC,wCACVuuL,YAASvuL,MAAC,gCACVuuL,YAASvuL,MAAC+uB,OANFq8M,qUAA6Bp8M,KANzCu/J,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,2BACVC,SClCW,oiMDqCFs1N,IAAsC1qO,2eE7BnD0uB,2EAEA,OAFoBoG,QAEpB41M,EAFA,CAAoBhrO,qBAYhB,WAAYslE,EAA8BC,EAAmDuC,GAA7F,MACImjK,YAAM3lK,EAAG,4BAA6BtlE,KAAcgvB,GAAOrwB,cAA4BF,KADjD,gCAAmD+mE,gBAIpF,OANkCpwC,QAMlC41M,4BAAT,WACIvsO,KAAK+Q,MAAMo5O,YAAcnqP,KAAKiR,YAAYk5O,YAAcnqP,KAAKiR,YAAYk5O,YAAcjqP,kBACvF,IAAM2mE,EAAU7mE,KAAKwB,EAAEy8B,UAAUmoB,iBAAiBz5C,QAClD3M,KAAKwrE,UAAUjqE,KAAcvB,KAAKspP,qBAAqBl1O,IAAIyyD,IAAU,EAAO,SAACC,OAGjFylK,sCACI,OAAOvsO,KAAKiS,OAAOuyC,aACVtkD,UACD,MAAO,kBACNA,aACD,MAAO,gBACNA,aACD,MAAO,wBACNA,WACD,MAAO,qDApCdJ,WAEA6vB,UACAh3B,SAYI4zO,qUAAyB/7M,KANrCk/J,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,uBACVC,SCfW,y6CDkBFs1N,IAAkC1qO,ufER/CkvB,2EAIA,OAJoB6F,QAIpB21M,EAJA,CAAoBhrO,qBAiBhB,WAAYslE,UACR2lK,YAAM3lK,EAAG,uBAAwBtlE,KAAYwvB,GAAO7wB,cAA4BF,KAGjE,OARmB42B,QAQnB21M,oCAAnB,WACI9uM,WAAW,WACP,IAAMopC,EAAS/1C,iBAAyB4uB,SAASgqJ,cAAc,kCAC/D7iI,GAAUA,EAAO4xH,SAAS,CAAE70F,IAAK/8B,EAAOwjL,oBAIhD9d,gCAAW1lK,GACP,IAAMC,EAAY9mE,KAAKyV,SAASkG,QAAQkrD,GACxC,OAAqB,IAAdC,GAAmB9mE,KAAKyV,SAASqxD,EAAY,GAAG19B,YAAYu/L,SAASvjH,WAAav+C,EAAKz9B,YAAYu/L,SAASvjH,WAGvHmnH,6CAAwB1lK,GAAxB,WACI,MAAO,CAAE1lD,MAAO0lD,EAAKyjL,eAAgBloM,KAAM,SAAUmoM,eAAgB,SAAClhL,GAA+B,SAAKmhL,qBAAqBnhL,MAG3HkjK,iCAAR,SAA6B1lK,GACzB,IAAMC,EAAaD,EAAKvyD,MAAQuyD,EAAKltD,aAAektD,EAAKvyD,KAAOuyD,EAAKvyD,KAAO,GAC5E,OAAQuyD,EAAKqN,aACJh0E,cACD,OAAOF,KAAKuS,GAAG,wBAAyBs0D,EAAKltD,WAAYmtD,QACxD5mE,gBACD,OAAOF,KAAKuS,GAAG,0BAA2Bs0D,EAAKltD,WAAYmtD,QAC1D5mE,sBACAA,aACD,OAAU2mE,EAAKltD,WAAU,IAAImtD,IAIzCylK,2CAAsB1lK,GAAtB,WACI,MAAO,CAAE1lD,MAAO0lD,EAAK4jL,mBAAoBroM,KAAM,QAASmoM,eAAgB,SAAClhL,GAA+B,SAAKqhL,mBAAmBrhL,MAGpIkjK,wCAAmB1lK,GACf,OAAQA,EAAKqN,aACJh0E,cACD,OAAOF,KAAKuS,GAAG,sBAAuBs0D,EAAKltD,WAAY,IAAGktD,EAAK8jL,aAAe,SAC7EzqP,gBACD,OAAOF,KAAKuS,GAAG,wBAAyBs0D,EAAKltD,WAAY,IAAGktD,EAAK8jL,aAAe,SAC/EzqP,iBACD,OAAU2mE,EAAKltD,WAAU,KAAIktD,EAAK8jL,aAAe,KAI7Dpe,qCAAgB1lK,EAA+BC,EAA4BuC,EAAetC,GACtF,QAAwB,YAAhBD,EAAKoN,QAAyB7K,EAAQ,KAC/B,WAATtC,EACIF,EAAMwC,GAAOtvD,gBAAkB8sD,EAAMwC,EAAQ,GAAGtvD,eAAiB8sD,EAAMwC,GAAO6K,SAAWrN,EAAMwC,EAAQ,GAAG6K,OAC1GrN,EAAMwC,GAAOshL,eAAiB9jL,EAAMwC,EAAQ,GAAGshL,cAAgB9jL,EAAMwC,GAAO6K,SAAWrN,EAAMwC,EAAQ,GAAG6K,SAItHq4J,qCAAgB1lK,GACZ,OAAO7mE,KAAKyV,SAASkG,QAAQkrD,KAAU7mE,KAAKyV,SAAS7F,OAAS,4CAlF7D9P,yCAuBJ4vL,WAFQ68C,qUAAoBv7M,KAPhC0+J,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,kBACVC,SCnBW,srFDuBFs1N,IAA6B1qO,6CEH7B,4UAAmBg1B,KAZ/B64J,YAAS,CACNk7D,QACI,CACIx5N,QAGRg7M,QACI,CACIh7M,WAICo7M,4eCXbvnN,2EAIA,OAJoBF,QAIpBwnN,EAJA,CAAoBhrO,qBAehB,WAAYslE,EAA8BC,GAA1C,MACI0lK,YAAM3lK,EAAG,0BAA2BtlE,KAAa0jB,KAAMjlB,KADjB,yBAEtCqpE,EAAKrkC,YAAY,oBACjBqkC,EAAKrkC,YAAY,uBAQrB,OAfyCjgB,QAezCwnN,2CACI,GAAKvsO,KAAKg4B,gBAAgB7C,SAASgkE,WAAWsZ,QAC9C,KAAI3rC,EAAS,IAAIvlE,KACjBulE,EAAOm1I,UAAYj8M,KAAK+Q,MAAM85O,YAC9B/jL,EAAOzlB,YAAcrhD,KAAK+Q,MAAM+5O,aAChC9qP,KAAKvE,GAAGuE,KAAK2kP,cAAcoG,eAAejkL,IAAS,EAAO,WACtDD,EAAKzzD,GAAG2kB,eAAYh9B,OAAG,yBAEvB8rE,EAAKrlE,EAAE87B,QAAQ2iN,WAAW,WAAQp5K,EAAK/sD,SAAS,CAAC,iBAAkB,CAAEsuE,SAAUmhG,sBAIvFgjD,gCACIvsO,KAAKwB,EAAE07B,UAAU6lB,mBAGrBwpL,wCACI,OAAOvsO,KAAK+Q,MAAM+5O,cAAgB9qP,KAAK+Q,MAAMi6O,cAIjDze,oDACI,OAAO,IAAIvkM,QAAQ,SAAC8+B,EAASuC,GACzB,IAAItC,EAAS,IAAIxlE,KACjBwlE,EAAOk1I,UAAYp1I,EAAK91D,MAAM+5O,aAC9B/jL,EAAOqhB,SAAWmhG,cAClB1iH,EAAKprE,GAAGorE,EAAK89K,cAAcsG,yBAAyBlkL,IAAS,EAAO,WAAM,UAAQ,IAAO,SAACC,GAA2B,SAAOA,EAAS1zD,+DAzDxIxT,WAGA+kP,iDAeJn1D,YAASvuL,MAAC,sBAFForO,qUAAuBvnN,KANnC0qK,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,qBACVC,SCjBW,g+EDoBFs1N,IAAgC1qO,2eER7C0jB,2EASA,OAToBF,QASpBknN,EATA,CAAoBhrO,qBAoBhB,WAAYslE,EACIC,EACAuC,GAFhB,MAGImjK,YAAM3lK,EAAG,iCAAkCtlE,KAAagkB,KAAMvlB,KAFlD,yBACA+mE,6BAEZA,EAAK/hC,YAAY,oBACjB+hC,EAAK/hC,YAAY,uBAIZ,OAbuC3f,QAavCknN,wBAAT,WACIvsO,KAAK+Q,MAAMs4B,SAAWrpC,KAAKiR,YAAYo4B,SACvCrpC,KAAK+Q,MAAMo2O,yBAA2BnnP,KAAKs2L,iBAAiBp2L,mCAG7CqsO,4BAAnB,WACIvsO,KAAK+Q,MAAMi2O,MAAQ,EACnBhnP,KAAK+Q,MAAMm6O,gBAAkBlrP,KAAKuS,GAAG,wBAOzCg6N,2CACI,GAAKvsO,KAAKg4B,gBAAgB7C,SAASgkE,WAAWsZ,QAC9C,KAAI3rC,EAAS,IAAIvlE,KACjBulE,EAAOshB,SAAWmhG,cAClBziH,EAAOz9B,SAAWrpC,KAAK+Q,MAAMs4B,SAC7By9B,EAAOy1I,kBAAoBv8M,KAAKw8M,yBAAyBC,uBAEhC,IAAzBz8M,KAAS+Q,MAAMi2O,OACXlgL,EAAOm1I,UAAYj8M,KAAK+Q,MAAM85O,YAC9B/jL,EAAOzlB,YAAcrhD,KAAK+Q,MAAM+5O,eAEhChkL,EAAOm1I,UAAYj8M,KAAK+Q,MAAM82O,QAC9B/gL,EAAOo1I,cAAgBh8M,aACvB4mE,EAAOzlB,YAAcrhD,KAAK+Q,MAAM+5O,cAGpC9qP,KAAK2kP,cAAcwG,sBAAsBrkL,GAAQh1D,UAAU,SAACu3D,GACxD,GAAIA,aAAoB9nE,KAGpB,OAFK8nE,EAASv0C,WAAW+xC,EAAKzzD,GAAGC,YAAYg2D,EAAS/1D,sBACtDuzD,EAAKukL,YAGT,OAAQ/hL,EAASuzI,kBACR18M,aAGD,OAFA2mE,EAAKzzD,GAAG2kB,aAAY,SAAG,8BACvB8uC,EAAKukL,YACL,KACClrP,kBAGD,OAFA2mE,EAAK91D,MAAMi2O,MAAQ,OACnBngL,EAAK91D,MAAMm6O,gBAAkBrkL,EAAKt0D,GAAG,4BACrC,KACCrS,gBAGD,OAFA2mE,EAAK91D,MAAMi2O,MAAQ,OACnBngL,EAAK91D,MAAMm6O,gBAAkBrkL,EAAKt0D,GAAG,4BACrC,QAIA,OAFC82D,EAASyzI,oBAAsBzzI,EAAS/1D,kBAAwBuzD,EAAKzzD,GAAGC,YAAYg2D,EAASyzI,oBAAsBzzI,EAAS/1D,sBAC7HuzD,EAAKukL,iBAMrB7e,gCACIvsO,KAAKorP,aAGT7e,4CACIvsO,KAAKwB,EAAE87B,QAAQ2iN,WAAW,WAAQp5K,EAAK/sD,SAAS,CAAC,iBAAkB,CAAEsuE,SAAUmhG,cAAqBlgJ,SAAUw9B,EAAK91D,MAAMs4B,cAG7HkjM,wCACI,OAAOvsO,KAAK+Q,MAAM+5O,cAAgB9qP,KAAK+Q,MAAMi6O,cAIjDze,oDACI,OAAO,IAAIvkM,QAAQ,SAAC8+B,EAASuC,GACzB,IAAItC,EAAS,IAAIxlE,KACjBwlE,EAAOk1I,UAAYp1I,EAAK91D,MAAM+5O,aAC9B/jL,EAAOqhB,SAAWmhG,cAClB1iH,EAAKprE,GAAGorE,EAAK89K,cAAcsG,yBAAyBlkL,IAAS,EAAO,WAAM,UAAQ,IAAO,SAACC,GAA2B,SAAOA,EAAS1zD,sBAI7Ii5N,wCACIvsO,KAAK8Z,SAAS,CAAC,uEArHdha,WAIA+kP,YAEArE,iDAoBJ9wD,YAASvuL,MAAC,sBAFForO,qUAA8BjnN,KAN1CoqK,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,4BACVC,SCzBW,0mHD4BFs1N,IAAuC1qO,2eEhBpDgkB,2EAWA,OAXoBF,QAWpB4mN,EAXA,CAAoBhrO,qBAqBhB,WAAYslE,EAA8BC,EAA0CuC,GAApF,MACImjK,YAAM3lK,EAAG,4BAA6BtlE,KAAaskB,KAAM7lB,KADnB,2BAA0C+mE,kBAEhFA,EAAK/hC,YAAY,oBACjB+hC,EAAK/hC,YAAY,uBAIZ,OAVkCrf,QAUlC4mN,wBAAT,sBACIvsO,KAAK+Q,MAAMi2O,MAAQ,EACnBhnP,KAAK+Q,MAAMs4B,SAAWrpC,KAAKiR,YAAYo4B,SACvCrpC,KAAK+Q,MAAM8+L,gBAAkB7vM,KAAKqkB,KAAK,+BAA+B3I,OAAO,YACzE,OAAQorD,EAAEx0C,YACDpyB,WACD,OAAO2mE,EAAKyvH,iBAAiBp2L,4CAC5BA,SACD,OAAO2mE,EAAKyvH,iBAAiBp2L,0CAC5BA,cACD,OAAO2mE,EAAKyvH,iBAAiBp2L,0CAIrC,OAAO,KAOfqsO,qDACI,GAAKvsO,KAAKg4B,gBAAgB7C,SAASgkE,WAAWsZ,QAC9C,KAAM3rC,EAAS,IAAIvlE,KACnBulE,EAAOz9B,SAAWrpC,KAAK+Q,MAAMs4B,SAC7By9B,EAAOk7H,eAAiBhiM,KAAK+Q,MAAMixL,eACnCl7H,EAAOgpI,QAAW9vM,KAAK+Q,MAAMixL,gBAAkB9hM,WAAwCF,KAAK+Q,MAAM02E,MAAQznF,KAAK+Q,MAAM8kJ,MACrH/uF,EAAOshB,SAAWmhG,cAClBvpL,KAAKvE,GAAGuE,KAAK2kP,cAAc0G,gBAAgBvkL,IAAS,EAAO,SAACuC,GACpDA,EAASv0C,WACT+xC,EAAKzzD,GAAG2kB,YAAY8uC,EAAKt0D,GAAG,yBAAyBklB,QAAQ,MAAOqvC,EAAOgpI,UAC3EjpI,EAAK91D,MAAMi2O,MAAQ,GAEnBngL,EAAKzzD,GAAGC,YAAYg2D,EAAS/1D,qBAKzCi5N,kDACI,GAAKvsO,KAAKg4B,gBAAgB7C,SAASgkE,WAAWsZ,QAE9C,KAAM3rC,EAAS,IAAIvlE,KACnBulE,EAAOz9B,SAAWrpC,KAAK+Q,MAAMs4B,SAC7BrpC,KAAKvE,GAAGuE,KAAK2kP,cAAc2G,cAAcxkL,IAAS,EAAO,SAACuC,SACtDxC,EAAK91D,MAAMw6O,sBAAwBliL,EAASp3D,OAE5C40D,EAAU91D,MAAMw6O,sBAAsBC,SAE1B3kL,EAAK91D,MAAMw6O,sBAAsBE,UAAa5kL,EAAK91D,MAAMw6O,sBAAsBG,UAGlF7kL,EAAK91D,MAAMw6O,sBAAsBG,WAClC7kL,EAAK91D,MAAM8+L,gBAAkBhpI,EAAK91D,MAAM8+L,gBAAgBn0L,OAAO,YAAK,SAAE4W,OAASpyB,cAC9E2mE,EAAK91D,MAAMw6O,sBAAsBE,WAClC5kL,EAAK91D,MAAM8+L,gBAAkBhpI,EAAK91D,MAAM8+L,gBAAgBn0L,OAAO,YAAK,SAAE4W,OAASpyB,cACnF2mE,EAAK91D,MAAMi2O,MAAQ,EACnBngL,EAAK91D,MAAMixL,gBAA2C,QAA1Bj7H,IAAKh2D,MAAM8+L,uBAAe,eAAEjgM,QAAS,EAAIi3D,EAAK91D,MAAM8+L,gBAAgB,GAAGv9K,MAAQ,MAP3Gu0C,EAAKzzD,GAAGojB,kBAAkBqwC,EAAKt0D,GAAG,kCAFlCs0D,EAAKzzD,GAAGojB,kBAAkBqwC,EAAKt0D,GAAG,8BAgB9Cg6N,wDACI,GAAKvsO,KAAKg4B,gBAAgB7C,SAASgkE,WAAWsZ,QAC9C,KAAM3rC,EAAS,IAAIvlE,KACnBulE,EAAOz9B,SAAWrpC,KAAK+Q,MAAMs4B,SAC7By9B,EAAO6kL,MAAQ3rP,KAAK+Q,MAAM46O,MAC1B7kL,EAAOshB,SAAWmhG,cAClBvpL,KAAKvE,GAAGuE,KAAK2kP,cAAciH,oBAAoB9kL,IAAS,EAAO,WAAM,SAAK/1D,MAAMi2O,MAAQ,MAI5Fza,gCACIvsO,KAAKkrD,YACLlrD,KAAK+Q,MAAMi2O,MAAQ,GAGvBza,gCACIvsO,KAAK8Z,SAAS,CAAC,kBAInByyN,wCACI,OAAOvsO,KAAK+Q,MAAM+5O,cAAgB9qP,KAAK+Q,MAAMi6O,cAIjDze,oDACI,OAAO,IAAIvkM,QAAQ,SAAC8+B,EAASuC,GACzB,IAAMtC,EAAS,IAAIxlE,KACnBwlE,EAAOk1I,UAAYp1I,EAAK91D,MAAM+5O,aAC9B/jL,EAAOqhB,SAAWmhG,cAClB1iH,EAAKprE,GAAGorE,EAAK89K,cAAcsG,yBAAyBlkL,IAChD,EAAO,WAAM,UAAQ,IAAO,SAACC,GAA2B,SAAOA,EAAS1zD,sBAOpFi5N,2CACI,GAAKvsO,KAAKg4B,gBAAgB7C,SAASgkE,WAAWsZ,QAC9C,KAAM3rC,EAAS,IAAIvlE,KACnBulE,EAAOz9B,SAAWrpC,KAAK+Q,MAAMs4B,SAC7By9B,EAAO6kL,MAAQ3rP,KAAK+Q,MAAM46O,MAC1B7kL,EAAOshB,SAAWmhG,cAClBziH,EAAOzlB,YAAcrhD,KAAK+Q,MAAM+5O,aAChC9qP,KAAKvE,GAAGuE,KAAK2kP,cAAckH,sBAAsB/kL,IAAS,EAAO,WAC7DD,EAAKzzD,GAAG2kB,eAAYh9B,OAAG,yBAEvB8rE,EAAKrlE,EAAE87B,QAAQ2iN,WAAW,WACtBp5K,EAAK/sD,SAAS,CAAC,iBAAkB,CAAEsuE,SAAUmhG,sBAKzDgjD,0CACI,OAAQvsO,KAAK+Q,MAAMi2O,YACV,EAAG,OAAOhnP,KAAKuS,GAAG,8BAClB,EAAG,OAAOvS,KAAKuS,GAAG,8BAClB,EAAG,OAAOvS,KAAKuS,GAAG,8BAClB,EAAG,OAAOvS,KAAKuS,GAAG,oEA7J1BzS,WAKAigB,UADA8kO,iDAsBJn1D,YAASvuL,MAAC,sBADForO,qUAAyB3mN,KANrC8pK,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,uBACVC,SC3BW,g0MD8BFs1N,IAAkC1qO,2eErB/CskB,2EAOA,OAPoBF,QAOpBsmN,EAPA,CAAoBhrO,qBAkBhB,WAAYslE,EAA8BC,GAA1C,MACI0lK,YAAM3lK,EAAG,iCAAkCtlE,KAAa4kB,KAAMnmB,KADxB,yBAEtCqpE,EAAKrkC,YAAY,oBACjBqkC,EAAKrkC,YAAY,uBAIZ,OAXiC/e,QAWjCsmN,wBAAT,WACIvsO,KAAK+Q,MAAMi2O,MAAQ,EACnBhnP,KAAK+Q,MAAMs4B,SAAWrpC,KAAKiR,YAAYo4B,SACvCrpC,KAAK+Q,MAAM46O,MAAQ3rP,KAAKiR,YAAY06O,MAGH,MAA7B3rP,KAAKiR,YAAYm3E,WACjBmhG,cAAsBvpL,KAAKiR,YAAYm3E,SACvCpoF,KAAKk9B,UAAU29K,eACf76M,KAAKk9B,UAAU49K,yBAOvByxB,wDACI,GAAKvsO,KAAKg4B,gBAAgB7C,SAASgkE,WAAWsZ,QAC9C,KAAI3rC,EAAS,IAAIvlE,KACjBulE,EAAOz9B,SAAWrpC,KAAK+Q,MAAMs4B,SAC7By9B,EAAO6kL,MAAQ3rP,KAAK+Q,MAAM46O,MAC1B7kL,EAAOshB,SAAWmhG,cAClBvpL,KAAKvE,GAAGuE,KAAK2kP,cAAciH,oBAAoB9kL,IAAS,EAAO,WAAM,SAAK/1D,MAAMi2O,MAAQ,MAI5Fza,gCACIvsO,KAAKkrD,YACLlrD,KAAK+Q,MAAMi2O,MAAQ,GAGvBza,gCACIvsO,KAAK8Z,SAAS,CAAC,kBAInByyN,wCACI,OAAOvsO,KAAK+Q,MAAM+5O,cAAgB9qP,KAAK+Q,MAAMi6O,cAIjDze,oDACI,OAAO,IAAIvkM,QAAQ,SAAC8+B,EAASuC,GACzB,IAAItC,EAAS,IAAIxlE,KACjBwlE,EAAOk1I,UAAYp1I,EAAK91D,MAAM+5O,aAC9B/jL,EAAOqhB,SAAWmhG,cAClB1iH,EAAKprE,GAAGorE,EAAK89K,cAAcsG,yBAAyBlkL,IAAS,EAAO,WAAM,UAAQ,IAAO,SAACC,GAA2B,SAAOA,EAAS1zD,sBAO7Ii5N,2CACI,GAAKvsO,KAAKg4B,gBAAgB7C,SAASgkE,WAAWsZ,QAC9C,KAAI3rC,EAAS,IAAIvlE,KACjBulE,EAAOz9B,SAAWrpC,KAAK+Q,MAAMs4B,SAC7By9B,EAAO6kL,MAAQ3rP,KAAK+Q,MAAM46O,MAC1B7kL,EAAOshB,SAAWmhG,cAClBziH,EAAOzlB,YAAcrhD,KAAK+Q,MAAM+5O,aAChC9qP,KAAKvE,GAAGuE,KAAK2kP,cAAckH,sBAAsB/kL,IAAS,EAAO,WAC7DD,EAAKzzD,GAAG2kB,eAAYh9B,OAAG,yBAEvB8rE,EAAKrlE,EAAE87B,QAAQ2iN,WAAW,WAAQp5K,EAAK/sD,SAAS,CAAC,iBAAkB,CAAEsuE,SAAUmhG,sBAIvFgjD,0CACI,OAA4B,IAArBvsO,KAAK+Q,MAAMi2O,MAAchnP,KAAKuS,GAAG,yBAAgD,IAArBvS,KAAK+Q,MAAMi2O,MAAchnP,KAAKuS,GAAG,yBAA2B,6CAlG9HzS,WAGA+kP,iDAkBJn1D,YAASvuL,MAAC,sBAFForO,qUAAwBrmN,KANpCwpK,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,sBACVC,SCpBW,64GDuBFs1N,IAAiC1qO,2eEP9C4kB,0EACI,oBAA+B,IAAIllB,KACnCslE,mBAAsC,GACtCA,iBAAyC,IAAItlE,KAC7CslE,YAAoB,EACpBA,eAAuB,EACvBA,0BAAkC,EAClCA,gBAAuB,KAC3B,OARoBtgD,QAQpBgmN,EARA,CAAoBhrO,qBAoBhB,WAAYslE,EAA8BC,GAA1C,MACI0lK,YAAM3lK,EAAG,0BAA2BtlE,KAAYklB,GAAOvmB,cAA4BF,KAD7C,2BAIjC,OARgCumB,QAQhCgmN,4BAAT,WACIvsO,KAAK8rP,kBACL9rP,KAAK+rP,uBAGAxf,wBAAT,WACI,IAAM1lK,EAAW7mE,KAAK+Q,MAAMi7O,gBAAkBhsP,KAAK+Q,MAAMi7O,eAAezuN,gBACxE,OAAOspC,GAAe7mE,KAAK67D,kBAAiB,MAAMgL,GAGtD0lK,kDACIvsO,KAAKvE,GAAGuE,KAAK2kP,cAAcsH,kBAAkBjsP,KAAKiR,YAAYqpB,aAAct6B,KAAKiR,YAAYjD,OACzF,EAAO,SAAC84D,GACJD,EAAK91D,MAAMy6O,UAAW,EAClB1kL,EAASxxD,OACTuxD,EAAK91D,MAAMm7O,WAAW7iN,SAAWy9B,EAASxxD,KAAK+zB,SAC/Cw9B,EAAK91D,MAAMm7O,WAAWl+O,KAAO84D,EAASxxD,KAAKtH,KAC3C64D,EAAK91D,MAAMm7O,WAAW33O,SAAWuyD,EAASxxD,KAAKf,SAC/CsyD,EAAK91D,MAAMm7O,WAAWC,iBAAmBrlL,EAASxxD,KAAK62O,iBACvDtlL,EAAK91D,MAAMm7O,WAAWE,UAAYtlL,EAASxxD,KAAK82O,UAChDvlL,EAAK91D,MAAMm7O,WAAWG,eAAiBvlL,EAASxxD,KAAK+2O,eACrDxlL,EAAK91D,MAAMm7O,WAAWI,iBAAmBxlL,EAASxxD,KAAKg3O,iBACvDzlL,EAAK91D,MAAMw7O,YAAczlL,EAASxxD,KAAKi3O,YACvC1lL,EAAK91D,MAAMy7O,uBAAyB1lL,EAASxxD,KAAKk3O,uBAClD3lL,EAAK91D,MAAM07O,iBAAmB3lL,EAASxxD,KAAKm3O,mBAEjD,WACC5lL,EAAK91D,MAAMy6O,UAAW,EACtB3kL,EAAK91D,MAAMm7O,WAAWE,UAAYlsP,UAClC2mE,EAAK6lL,8BAIjBngB,sDACIvsO,KAAKvE,GAAGuE,KAAK2kP,cAAcgI,gBAAgB3sP,KAAKiR,YAAYqpB,aAAct6B,KAAKiR,YAAYjD,OACvF,EAAO,SAAC84D,GACAA,EAAS70D,SACT40D,EAAK91D,MAAMi7O,eAAiBllL,EAAS70D,OACrC40D,EAAKx0D,oBACAw0D,EAAK91D,MAAMy6O,WACZ3kL,EAAK91D,MAAMm7O,WAAW7iN,SAAWw9B,EAAK91D,MAAMi7O,eAAevkK,MAC3D5gB,EAAK91D,MAAMm7O,WAAWl+O,KAAO64D,EAAK51D,YAAYjD,KAEzC64D,EAAK91D,MAAMm7O,WAAW7iN,WACvBw9B,EAAK91D,MAAMm7O,WAAW7iN,SAAWw9B,EAAK51D,YAAYo4B,WAG1Dw9B,EAAK+lL,2BAKrBrgB,2DACIvsO,KAAKvE,GAAGuE,KAAK2kP,cAAckI,0BAA0B,EACjD,SAAC/lL,GAAuC,SAAK/1D,MAAMm7O,WAAWpE,SAAWhhL,EAASxxD,QAG1Fi3N,iDACSvsO,KAAK6nJ,WAIV7nJ,KAAK2rH,wBAAwB3rH,KAAKg4B,iBAAiBrD,KAAK,SAACmyC,GACrD,GAAIA,EAAS,CACT,IAAMuC,EAAS,IAAI9nE,KACnB8nE,EAAO/uC,aAAeusC,EAAK51D,YAAYqpB,aACvC+uC,EAAOhgC,SAAWw9B,EAAK91D,MAAMm7O,WAAW7iN,SACxCggC,EAAOy+K,SAAWjhL,EAAK91D,MAAMm7O,WAAWpE,SACxCz+K,EAAOr7D,KAAO64D,EAAK91D,MAAMm7O,WAAWl+O,KACpCq7D,EAAO+iL,UAAYvlL,EAAK91D,MAAMm7O,WAAWE,UACzC/iL,EAAOgjL,eAAiBxlL,EAAK91D,MAAMm7O,WAAWG,eAC9ChjL,EAAOijL,iBAAmBzlL,EAAK91D,MAAMm7O,WAAWI,iBAChDjjL,EAAOojL,iBAAmB5lL,EAAK91D,MAAM07O,iBACrCpjL,EAAO90D,SAAWsyD,EAAK91D,MAAMm7O,WAAW33O,SAExCsyD,EAAKprE,GAAGorE,EAAK89K,cAAcmI,gBAAgBzjL,IAAS,EAAM,WACtD,GAAKxC,EAAK91D,MAAMy6O,SAAhB,CAIA3kL,EAAK3zD,kBAAkB2zD,EAAK91D,MAAMm7O,WAAY3qP,MAC9C,IAAMwlE,EAASF,EAAK51D,YAAYupB,gBAAkBC,KAAK44E,MAAMxsC,EAAK51D,YAAYupB,sBAAmB,EACjGqsC,EAAK51D,YAAYspB,UACXssC,EAAKrlE,EAAEy8B,UAAUnkB,SAAS,CAAC+sD,EAAK51D,YAAYspB,WAAYwsC,GACxDF,EAAKrlE,EAAE4kJ,oBAAoB4tC,cAP7BntH,EAAKilL,wBAazBvf,0CACQvsO,KAAK+Q,MAAMm7O,WAAWE,YAAclsP,UACpCF,KAAK+Q,MAAMm7O,WAAWI,kBAAmB,EAEzCtsP,KAAK+Q,MAAMm7O,WAAWG,gBAAiB,GAI/C9f,+CACSvsO,KAAK+Q,MAAMm7O,WAAWG,iBACvBrsP,KAAK+Q,MAAMm7O,WAAWI,kBAAmB,IAIjD/f,uCACI,OAAOvsO,KAAK+Q,MAAMm7O,WAAWE,YAAclsP,WAG/CqsO,yCAAoB1lK,GAChB,GAAoB,iBAAhBA,EAAExsD,UAA8B,CAChC,IAAMysD,EAA4BD,EAAE1a,cAAclsB,eAElD4mC,EAAE1a,cAAclsB,eAAiB,SAACopC,GAC9BvC,EAA0BuC,GAErBxC,EAAE3pB,IAAIzjC,KAAKszO,YACZlmL,EAAE3sD,UAAUivC,UAAU0d,EAAE3pB,IAAIkM,SAAU,aAAcyd,EAAE3pB,IAAIzjC,KAAKuzO,iBAM/EzgB,oCACIvsO,KAAK+Q,MAAMw7O,aAAc,EACzBvsP,KAAKvE,GAAGuE,KAAK2kP,cAAcsI,kBAAkBjtP,KAAKiR,YAAYqpB,eAAe,IAGjFiyM,gDACIvsO,KAAKktP,kBAAkB5yN,aAAet6B,KAAKiR,YAAYqpB,aACvDt6B,KAAKktP,kBAAkBlB,eAAiBhsP,KAAK+Q,MAAMi7O,eACnDhsP,KAAKktP,kBAAkB5pO,gBAAgB,WACnCujD,EAAKtxC,eAILg3M,oBAAR,WACI,GAAIvsO,KAAK+Q,MAAMm7O,WAAWG,gBAAkBrsP,KAAK+Q,MAAMm7O,WAAWI,iBAAkB,CAChF,GAA2C,IAAvCtsP,KAAK+Q,MAAM07O,iBAAiB78O,OAC5B,YAAKwD,GAAGC,YAAYrT,KAAKuS,GAAG,wBAErB,EAEP,GAAIvS,KAAK+Q,MAAM07O,iBAAiB58O,KAAK,YAAK,oBAAcg3D,EAAEmmL,eAAiB31P,aAAcwvE,EAAEkmL,cACvF,YAAK35O,GAAGC,YAAYrT,KAAKuS,GAAG,uBAErB,EAKnB,OAAO,GAGHg6N,iCAAR,sBACUzlK,EAAuB9mE,KAAKs2L,iBAAiBp2L,uCAC7CmpE,EAAqBrpE,KAAKs2L,iBAAiBp2L,qCAC3C6mE,EAA0B/mE,KAAKs2L,iBAAiBp2L,0CAEtDF,KAAK+Q,MAAMo8O,cAAgBntP,KAAKqkB,KAAK,cAAc3I,OAAO,YACtD,GAAIsrD,EAAE10C,QAAUpyB,UAAqB,OAAO,EAG5C,GAAI8mE,EAAE10C,QAAUpyB,WAAsB,CAElC,GAAI2mE,EAAK91D,MAAMi7O,eAAevkK,OAAS3gB,EAAsB,OAAO,EAEpE,GAAID,EAAK91D,MAAMm7O,WAAWE,YAAclsP,WACnC,SAAU2pC,UAAW,GACf,EAKf,GAAIm9B,EAAE10C,QAAUpyB,SAAoB,CAEhC,GAAI2mE,EAAK91D,MAAMi7O,eAAen2F,OAASxsF,EAAoB,OAAO,EAElE,GAAIxC,EAAK91D,MAAMm7O,WAAWE,YAAclsP,SACnC,SAAU2pC,UAAW,GACf,EAIf,GAAIm9B,EAAE10C,QAAUpyB,cAAyB,CACrC,GAAI2mE,EAAK91D,MAAMi7O,eAAen2F,OAAS9uF,EAAyB,OAAO,EACvE,GAAIF,EAAK91D,MAAMm7O,WAAWE,YAAclsP,cACnC,SAAU2pC,UAAW,GACf,EAIf,OAAO,8CA9NV/pC,WACA+kP,iDAuBJn1D,YAASvuL,MAAC,8CACVuuL,YAASvuL,MAAC,wBAFForO,qUAAuB/lN,KANnCkpK,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,qBACVC,SC7BW,y2QDgCFs1N,IAAgC1qO,0CEnBzC,WAAoB0qO,2BAJVvsO,gBAAa,IAAI0vL,eAE3B1vL,aAAUA,KAAK+5M,iBAAiBnQ,UAAUwjD,WAI1C,8CAAkB7gB,GACdvsO,KAAKqtP,WAAW7rO,KAAK+qN,6CAfpBn1O,4CAQJs4L,YADQ88C,qUAAgB1lN,KAL5B4oK,aAAU,CACP14K,SAAU,cACVC,SCLW,sGDQFu1N,4eEIbplN,0EAGI,uBAAgB,IACpB,OAJoBF,QAIpBqlN,EAJA,CAAoBhrO,qBAuChB,WAAYslE,EACDC,EACCuC,GAFZ,MAGImjK,YAAM3lK,EAAG,yBAA0Bz/C,KAAMpnB,KAFlC,kBACC+mE,iBAvBHA,6BAA4B,EAC5BA,mBAAkB,EAClBA,iBAAgB,EAChBA,eAAc,EAGbA,eAAe,IAAI2oH,eACnB3oH,eAAe,IAAI2oH,eACnB3oH,aAAa,IAAI2oH,eAClB3oH,cAAsB,SACtBA,qBAAqB,yBACrBA,0BAA0B,0BAC1BA,4BAA4B,wBAG5BA,4BAA2B,EAC3BA,mBAAkB,IArB3B,OADwC7/C,QACxCpb,sBAAaygO,oBAAK,KAAlB,SAAmB1lK,GACf7mE,KAAK+Q,MAAMqhG,MAAQvrC,EACnB7mE,KAAKstP,kDA8BA/gB,wBAAT,WACIvsO,KAAK+Q,MAAMq3E,SAAWmhG,cACtBvpL,KAAK+Q,MAAMqhG,MAAQpyG,KAAK+Q,MAAMqhG,OAAS,IAG3Cm6H,oCAAe1lK,GACP7mE,KAAKutP,eACLvtP,KAAKwtP,aAAahsO,KAAKqlD,IAI/B0lK,kCAAa1lK,GACT,IAAMC,EAAM9mE,KAAK+Q,MAAMqhG,MAAM39C,UAAU,YAAK,SAAEngD,OAASuyD,EAAKvyD,QAChD,IAARwyD,IACA9mE,KAAK+Q,MAAMqhG,MAAMx2F,OAAOkrD,EAAK,GAC7B9mE,KAAKytP,WAAWjsO,KAAKqlD,GACrB7mE,KAAK0tP,aAAalsO,KAAKxhB,KAAK+Q,MAAMqhG,SAI1Cm6H,qDACIvsO,KAAK2tP,cAAcnvD,WAAW,SAAC13H,GACvBA,GAAQA,EAAKl3D,QACbi3D,EAAK+mL,eAAe9mL,MAKhCylK,oCAAe1lK,GACX,IAAIC,GAAe,EACfuC,GAAgB,EAEhBtC,EAAS,GACb,GAAI/mE,KAAK6tP,OAEL,QADM7mL,EAAuBhnE,KAAK6tP,OAAOpyM,MAAM,KAAK1C,KAAK,KAAK0C,MAAM,KAAKrlB,IAAI,aAAK,UAAEutB,OAAO+7B,cAAcjkC,MAAM,KAAKi4D,mBACzGpqC,IACP,IAAM/B,GAAgB+B,GAAKrwC,KAAK0qB,OAAO+7B,cAAcjkC,MAAM,KAAKi4D,MACL,MAAvD1sC,EAAqBh1C,KAAK,aAAK,YAAMu1C,MAAwBR,EAAOlxD,KAAKyzD,KAF9DpC,4BAAK,GAATD,aAKfF,EAASF,EAGb,oBAAWyC,IAEP,IAAgE,IAD/ChC,GAAKv2D,MAAMqhG,MAAM12F,OAAO,aAAK,QAAEq5N,GAAEvtF,UACrC/yF,UAAU,aAAM,UAAG+yF,QAAQvuH,OAASqwC,GAAKrwC,OAElD,GAAIquC,GAAKwmL,kBAAoBxmL,GAAKymL,QAAQzkL,GAAKlnB,MAC3CinB,GAAgB,UACTC,GAAKmH,KAAOnJ,GAAK0mL,YACxBlnL,GAAe,MACZ,CACH,IAAMg3G,GAAU,CACZxpK,KAAMg1D,GAAKrwC,KACXuuH,QAASl+E,GACT2kL,KAAM3kL,GAAKmH,KACXy9K,UAAW,uBACXC,mBAAoB7mL,GAAKymL,QAAQzkL,GAAKlnB,OAE1CklB,GAAKv2D,MAAMqhG,MAAMv8F,KAAKioK,cAhBfz2G,4BAAM,IAAVG,QAqBX6B,GAAerpE,KAAKoT,GAAGC,eAAYtY,OAAGiF,KAAKouP,4BAC3CtnL,GAAc9mE,KAAKoT,GAAGC,aAAY,SAAGrT,KAAKquP,wBAAyBruP,KAAKsuP,aAAazsG,UAAU7hJ,KAAKguP,eAExGhuP,KAAK0tP,aAAalsO,KAAKxhB,KAAK+Q,MAAMqhG,QAGtCm6H,iCAAY1lK,GACR7mE,KAAKuuP,eAAe1nL,GACpB7mE,KAAK+Q,MAAMy9O,gBACXxuP,KAAK4tP,eAAe/mL,EAAE4nL,aAAa7d,QAGvCrE,iCAAY1lK,GACR7mE,KAAKuuP,eAAe1nL,GACpB7mE,KAAK+Q,MAAMy9O,iBAGfjiB,iCAAY1lK,GACR7mE,KAAKuuP,eAAe1nL,GACpB7mE,KAAK+Q,MAAMy9O,iBAGfjiB,gCAAW1lK,GACP7mE,KAAKuuP,eAAe1nL,IAGxB0lK,kCACI,OAAOvsO,KAAK+Q,MAAMy9O,cAAgB,GAGtCjiB,iDACIvsO,KAAK0uP,eAAeprO,gBAAgB,SAACwjD,GACjC,GAAIA,EAAQ,CACR,IAAIuC,EAAc,EAClBxC,EAAK+mL,eAAe9mL,EAAO1wC,IAAI,SAAC2wC,GAAU,SAAK4nL,yBAAyB5nL,EAAMotK,YAAa9qK,YAK/FkjK,oBAAR,SAAgB1lK,GACZ,OAAOA,EAASvtB,WAAW,UAGvBizL,2BAAR,sBACQvsO,KAAK+Q,MAAMqhG,OACXpyG,KAAK+Q,MAAMqhG,MAAMz5F,QAAQ,YACrBmuD,EAAEonL,UAAYrnL,EAAK+nL,aAAa9nL,MAKpCylK,yBAAR,SAAqB1lK,GACjB,OAAOxvE,kBAAmBwvE,EAAKu7D,YAG3BmqG,2BAAR,SAAuB1lK,GACnBA,EAAEnjB,iBACFmjB,EAAE8L,mBAGE45J,qCAAR,SAAiC1lK,EAAgBC,GAM7C,QALMuC,EAAYxC,EAAOprB,MAAM,KACzBsrB,EAAc9kB,OAAO4nL,KAAKxgK,EAAU,GAAGjsC,UAAUisC,EAAU,GAAG1tD,QAAQ,KAAO,IAC/EqrD,EAAaD,EAAYn3D,OACvBw5D,EAAQ,IAAI2gK,WAAW/iK,GAEtBA,KACHoC,EAAMpC,GAAcD,EAAY4iK,WAAW3iK,GAG/C,IAAME,GAAO,SAASlnE,KAAK6uP,mBAAkB,OAE7C,OAAO,IAAI/6I,KAAK,CAAC1qC,GAAQlC,GAAM,CAAE9kB,KAAM,gBAGnCmqL,6BAAR,WACI,IAAM1lK,EAAM,IAAI96D,KAGhB,MAAO,GAAG/L,KAAK8uP,eAAejoL,EAAI36D,WAAalM,KAAK8uP,eAAejoL,EAAI56D,WAAa,GAAK46D,EAAI76D,cAAa,KAAKhM,KAAK8uP,eAAejoL,EAAI8xI,YAAc34M,KAAK8uP,eAAejoL,EAAI+xI,cAAgB54M,KAAK8uP,eAAejoL,EAAI2hK,eAGjN+D,2BAAR,SAAuB1lK,GACnB,OAAOA,EAAK9rC,WAAWi+C,SAAS,EAAG,+CAxMlCl5E,WAKA3B,YAFAiP,kDAkBJsiL,2CAKAA,iCACAA,+BACAA,6BACAA,0BACAA,wBACAA,8BACAA,+BACAA,6BACAA,8BACAA,oCACAA,yCACAA,2CACAA,kCACAA,gCACAA,0CACAA,iCACAA,+BAEAA,YAASvuL,MAAC5F,4BACVm0L,YAASvuL,MAACjF,OAzBFqwO,qUAAsBplN,KANlCuoK,aAAU,CACP14K,SAAU,oBACVC,SCpBW,stEDsBXF,UAAW,CAAC3J,gCAEHm/N,IAA+BnrO,2eEjB5CsmB,2EAEA,OAFoBF,QAEpB+kN,EAFA,CAAoBhrO,qBAqBhB,WAAYslE,GAAZ,MACI2lK,YAAM3lK,EAAG,oBAAqBn/C,KAAM1nB,KAX/B,wBAAgB,EAChB8mE,YAAW,EACXA,2BAA0B,EAC1BA,6BAA4B,EAC3BA,aAAa,IAAI4oH,eACjB5oH,eAAe,IAAI4oH,eACpB5oH,mBAAkB,IAQlB,OAhB0Bt/C,QAgB1B+kN,4BAAT,sBACQvsO,KAAKiS,OAAOk8O,oBACZ92P,mBAAoB,CAAC2I,KAAKiS,OAAOu1I,SAAU,SAAC1gF,GACxC,IAAMuC,EAAOvC,EAAY,GACzBD,EAAK91D,MAAMqmF,YAAc//F,oBAAqBgyE,EAAK/zD,KAAMuxD,EAAK50D,OAAOu1I,QAAQplG,SAKzFmqL,4CACoB,QAAX1lK,OAAK50D,cAAM,eAAEk8O,sBAIlBnuP,KAAK+uP,YAAY33J,YAAcp3F,KAAK+Q,MAAMqmF,YAC1Cp3F,KAAK+uP,YAAYzrO,gBAAgB,gBAGrCipN,oCACIvsO,KAAK+uP,YAAY9qO,0BAGrBsoN,oCACIvsO,KAAKytP,WAAWjsO,KAAKxhB,KAAKiS,SAG9Bs6N,sCACIvsO,KAAKwtP,aAAahsO,KAAKxhB,KAAKiS,SAGhCs6N,+BACIvsO,KAAKmT,yDA5DJrT,uCAcJ4vL,+BACAA,0BACAA,yCACAA,2CACAA,4BACAA,+BACAA,kCACAA,6BAEAA,YAASvuL,MAAC7D,SAVFivO,qUAAiB9kN,KAL7BioK,aAAU,CACP14K,SAAU,eACVC,SCbW,q6DDgBFs1N,IAA0BnrO,0fEQnC,WAAYylE,GAAZ,MACI2lK,YAAM3lK,EAAG,qBAAsBtlE,OAAUvB,KATpC,oBAAqB,GACrB8mE,cAAsBA,EAAKv0D,GAAG,aAC9Bu0D,eAAuB,IACvBA,aAAqB,EACrBA,MAAc,EACdA,MAAc,EACbA,WAAW,IAAI4oH,iBAMzB,OAdoC5nK,QAcpCykN,4BAAO1lK,GAEH,GAAuB,MAAnB7mE,KAAKu0K,YAAyC,IAAnBv0K,KAAKu0K,WAGhC,OAFAv0K,KAAKu0K,WAAa,QAClBv0K,KAAKu2K,SAAS/0J,KAAK,IAInBxhB,KAAKgvP,WAAa,IAAMnoL,EACpB7mE,KAAKu0K,YAAcv0K,KAAKu0K,WAAW3kK,QAAU5P,KAAKgvP,YAClDhvP,KAAKu2K,SAAS/0J,KAAKxhB,KAAKu0K,YAKhCv0K,KAAKu2K,SAAS/0J,KAAKxhB,KAAKu0K,aAG5Bg4D,2BAAM1lK,KACGA,IAAUA,EAAMr0D,SACjBxS,KAAKu0K,WAAa,GAClBv0K,KAAKygM,QAAO,8CA9Cf3gM,2CAaJ4vL,6BACAA,8BACAA,4BACAA,qBACAA,qBACAA,0BACAA,YARQ68C,qUAAkBxkN,KAL9B2nK,aAAU,CACP14K,SAAU,aACVC,SCXW,qzBDcFs1N,IAA2BnrO,2CENpC,2DADSorO,qUAA4BpkN,KALxCsnK,aAAU,CACP14K,SAAU,wBACVC,SCJW,0YDOFu1N,gCEGT,WAAoBD,EAA4D1lK,EACpEC,GADQ9mE,gCAA4DA,wBACpEA,eAEZ,uCACIA,KAAKivP,kBAGTziB,kDACKxsO,KAAKkvP,QAAQC,cAAcnvP,KAAKovP,cAAgB,IAAIz2O,QAAQ,SAACkuD,GAC1D,IAAMC,EAAmBylK,EAAKjvG,yBAAyBC,wBAAwB12D,GAC/EC,EAAiBu6E,OACjBkrF,EAAKnvG,iBAAiBK,gBAAgB32D,+CArB9B4oH,kCAAyCA,0BACpDnnK,6CAOJmnK,WADQ88C,qUAA2BhkN,KAJvCknK,aAAU,CACP14K,SAAU,0BACVC,SCLW,iCDOFu1N,wfEUbzjN,2EAUA,OAVoBF,QAUpB0jN,EAVA,CAAoBhrO,qBAuBhB,WAAYslE,EACAC,EACAuC,EACAtC,GAHZ,MAIIylK,YAAM3lK,EAAG,sBAAuBtlE,KAAawnB,KAAM/oB,KAH3C,wBACAgnE,kBACAA,oBALJA,iBAAiC,KAShC,OAZ4Bn+C,QAY5B0jN,4BAAT,wBAGQvsO,KAAKs2L,iBAAiBp2L,8BACtBF,KAAK8Z,SAAS,CAAC,uBAAwB,CAAEsuE,SAAUmhG,cAAqBhvJ,UAAWv6B,KAAK+Q,MAAMwpB,YAK5B,GAAlEv6B,KAAKs2L,iBAAiBp2L,6BAK1BF,KAAK+Q,MAAM8+L,gBAAkB7vM,KAAKqkB,KAAK,+BAA+B3I,OAAO,YACzE,OAAQ2tD,EAAE/2C,YACDpyB,WACD,OAAO2mE,EAAKyvH,iBAAiBp2L,4CAC5BA,SACD,OAAO2mE,EAAKyvH,iBAAiBp2L,0CAC5BA,cACD,OAAO2mE,EAAKyvH,iBAAiBp2L,0CAIrC,OAAO,IAEXF,KAAK+Q,MAAMo2O,yBAA2BnnP,KAAKs2L,iBAAiBp2L,kCAC5DF,KAAK+Q,MAAMs+O,2BAA6BrvP,KAAKs2L,iBAAiBp2L,iCAC9DF,KAAK+Q,MAAMu+O,yBAA2BtvP,KAAKs2L,iBAAiBp2L,+BAC5DF,KAAKiS,OAAO+vL,eAA8C,QAA7Bl7H,OAAK/1D,MAAM8+L,gBAAgB,UAAE,eAAEv9K,MAC5DtyB,KAAK+Q,MAAMwpB,UAAYv6B,KAAKwB,EAAEy8B,UAAUkgL,sBAAsBn+M,KAAK+Q,MAAMwpB,WACzEv6B,KAAK+Q,MAAMypB,gBAAkBx6B,KAAKiR,YAAYupB,gBAC9Cx6B,KAAK+Q,MAAMi2O,MAAQ,EAEnBhnP,KAAKqnP,gBAELrnP,KAAK8sC,eAAej3B,KAAK7V,KAAKykP,gBAAgBwC,UAAUn1O,UAAU,YAC1D+0D,EAAK50D,OAAOm2E,WAAa/e,IAE7BxC,EAAK50D,OAAOm2E,SAAW/e,EAEvBxC,EAAKrlE,EAAEy8B,UAAUnkB,SAAS,CAAC,qBAAsB,CAAEsuE,SAAUmhG,gBAC7D9rJ,WAAW,WAAM,SAAKj8B,EAAEy8B,UAAUipN,qBAAqB,UAjCvDlnP,KAAK8Z,SAAS,CAAC,iBAAkB,CAAEsuE,SAAUmhG,iBAqC5CgjD,yBAAT,WAEqC,MAA7BvsO,KAAKiR,YAAYm3E,SACjBpoF,KAAKiS,OAAOm2E,SAAWpoF,KAAKiR,YAAYm3E,SAExCpoF,KAAKiS,OAAOm2E,SAAWpoF,KAAKwB,EAAEsxL,iBAAiB8W,UAAUqR,gBAE7Dj7M,KAAKykP,gBAAgBC,YAAY1kP,KAAKiS,OAAOm2E,UAG7CpoF,KAAKiS,OAAOo3B,SAAWrpC,KAAKiR,YAAYo4B,UAG5CkjM,0CAAqB1lK,GACbA,EAAK74D,OAAS9N,YAAkCF,KAAK8Z,SAAS,CAAC+sD,EAAK+gL,QAG5Erb,0CACIvsO,KAAK8Z,SAAS,CAAC,4BAA6B,CAAEuvB,SAAUrpC,KAAKiS,OAAOo3B,YAG/DkjM,yBAAT,WAC4B,GAApBvsO,KAAK+Q,MAAMi2O,MAAYhnP,KAAKuvP,YACH,GAApBvvP,KAAK+Q,MAAMi2O,OAAYhnP,KAAKwvP,WAIzCjjB,6CACSvsO,KAAKg4B,gBAAgB7C,SAASgkE,WAAWsZ,SAC9CzyG,KAAKvE,GAAGuE,KAAK2kP,cAAc8K,QAAQzvP,KAAKiS,SAAS,EAAO,SAAC60D,GACjDA,EAAShyC,WACT+xC,EAAKzzD,GAAG2kB,YAAY8uC,EAAKt0D,GAAG,yBAAyBklB,QAAQ,MAAOovC,EAAK50D,OAAOo3B,WAChFw9B,EAAK91D,MAAMi2O,MAAQ,GAEnBngL,EAAKzzD,GAAGC,YAAYyzD,EAASxzD,oBAMzCi5N,2CACSvsO,KAAKg4B,gBAAgB7C,SAASgkE,WAAWsZ,UAC9CzyG,KAAKiS,OAAOiqM,cAAgBh8M,SAC5BF,KAAK07E,aAAaygI,QAAQn8M,KAAKiS,QAAQ,EAAOjS,KAAK+Q,MAAMw2O,kBAAmB,WACxE1gL,EAAK2gL,gBAEJ11O,UAAU,gBAGnBy6N,gCACIvsO,KAAK+Q,MAAMi2O,MAAQ,GAGvBza,iCACQvsO,KAAK+Q,MAAMs+O,4BAA4BrvP,KAAK8Z,SAAS,CAAC,mBAGtDyyN,0BAAR,WACIvsO,KAAK+Q,MAAM2+O,qBAAuB1vP,KAAKwB,EAAEsxL,iBAAiB+K,UAAUmR,+BAGhEu9B,wBAAR,WACI,GAAIvsO,KAAK+Q,MAAMwpB,UAAf,CACI,IAAMssC,EAAS7mE,KAAK+Q,MAAMypB,gBAAkBC,KAAK44E,MAAMrzG,KAAK+Q,MAAMypB,sBAAmB,EACrFx6B,KAAKwB,EAAEy8B,UAAUnkB,SAAS,CAAC9Z,KAAK+Q,MAAMwpB,WAAYssC,QAGtD7mE,KAAKwB,EAAE07B,UAAU6lB,mBAGrBwpL,mCACI,IAAM1lK,EAAa7mE,KAAKw6M,qBACxB,OAAOx6M,KAAKwB,EAAEoyL,iBAAiBrhL,GAAG,2BAA4Bs0D,IAGlE0lK,yCACI,IAAM1lK,EAAa7mE,KAAKw6M,qBACxB,OAAOx6M,KAAKwB,EAAEoyL,iBAAiBrhL,GAAG,+BAAgCs0D,IAGnD0lK,+BAAnB,WACIvsO,KAAK8sC,eAAen0B,QAAQ,YAAK,SAAErG,0DA7KlCxS,WADAwQ,YADAu0O,YAeA9kO,+CAqBJ2vK,YAASvuL,MAAC,sBADForO,qUAAmBzjN,KAN/B4mK,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,mBACVC,SChCW,yqKDmCFs1N,IAA4B1qO,sgBE3BrC,WAAYglE,UAAyB2lK,YAAM,qBAAsB3lK,IAAI7mE,KAE9D,OAHqCopB,QAGrCmjN,mCAAP,SAA8B1lK,GAC1B,OAAO7mE,KAAKQ,IAAIS,kBAAkBjB,KAAKU,eAAgB,yBAA0BmmE,6CAPhFpvD,QAGI80N,qUAA0BljN,KADtCqmK,iBACY68C,IAAmCxtN,+eCS5C,WAAY8nD,EACAC,GADZ,MAEI0lK,YAAM3lK,EAAG,kCAAmCtlE,KAAYA,OAAUvB,KAD1D,wCAIO,OAP8BupB,QAO9BgjN,4BAAnB,WACIvsO,KAAKkd,kBAGUqvN,kCAAnB,SAAyC1lK,EAA4BC,EAA0CuC,GACvGvC,IAAuBvlE,MAAoBvB,KAAKkd,kBAGxDqvN,sCACIvsO,KAAKke,YAAYyxO,oBAAyB,IAAIxmO,KAAwBnpB,KAAK4vP,6BAG/ErjB,kCACIvsO,KAAK8Z,SAAS,CAAC,qFAhCdha,WAGAwpB,MASIijN,qUAA+B/iN,KAN3CkmK,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,+BACVC,SCXW,mdDcFs1N,IAAwC1qO,8eEMjD,WAAYglE,EAA8BC,EAA8CuC,GAAxF,MAEImjK,YAAM3lK,EAAG,8BAA+BtlE,KAAoBA,KAAWulE,EAAU5mE,cAA4BF,KAFvE,oBAA8C+mE,iCAKrE,OAV0Bp9C,QAU1B4iN,0BAAnB,WACIvsO,KAAKmT,gBAGUo5N,+BAAnB,WACI,IAAIvsO,KAAKo5B,UAET,MAAO,CAAC,CACJ8B,KAAMl7B,KAAKuS,GAAG,eACdgI,SAAS,EACT4gB,QAASn7B,KAAK2mC,SAAStL,KAAKr7B,SAI3BusO,qBAAT,sBACIvsO,KAAKi8E,WAAWjuE,KAAO9N,WACvBF,KAAKi8E,WAAWv/C,OAAS18B,KAAKuS,GAAG,uCACjCvS,KAAKi8E,WAAW34D,gBAAgB,WAAQujD,EAAK0oD,kBAGjDg9G,qDACIvsO,KAAKs3J,OAAOh0I,gBAAgB,SAACwjD,GACzB,IAAMuC,EAAS,IAAI9nE,KACnB8nE,EAAOwmL,qBAAuBhpL,EAAK50D,OAAOtF,QAC1C08D,EAAO24H,eAAiBl7H,EAAMk7H,eAC9B34H,EAAOymL,YAAchpL,EAAMgpL,YAC3BzmL,EAAOymI,QAAUhpI,EAAMgpI,QAEvBjpI,EAAKprE,GAAGorE,EAAK+oL,2BAA2BG,uBAAuB1mL,IAAS,OAAM,EAC1E,SAACtC,GAA2B,SAAKvlE,EAAE4R,GAAGC,YAAYwzD,EAAKt0D,GAAG,oCAItEg6N,oDAA+B1lK,GAC3B7mE,KAAKiS,OAAO8xM,WAAal9I,EAAElpD,SAASomM,WACpC/jN,KAAKiS,OAAO+xM,SAAWn9I,EAAElpD,SAASqmM,SAClChkN,KAAKiS,OAAOgyM,WAAap9I,EAAElpD,SAASsmM,YAGxCsoB,mDAA8B1lK,GAC1B7mE,KAAKiS,OAAOkyM,YAAct9I,EAAElpD,SAASwmM,YACrCnkN,KAAKiS,OAAOmyM,SAAWv9I,EAAElpD,SAASymM,SAClCpkN,KAAKiS,OAAOoyM,oBAAsBx9I,EAAElpD,SAAS0mM,8DAhE7CvkN,WAFAwpB,gDAgBHomK,YAASvuL,MAAC,8BACVuuL,YAASvuL,MAAC,iBAHForO,qUAA2B3iN,KALvC8lK,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,0BACVC,SCbW,4lQDeFs1N,IAAoCvxO,2fEP7C,WAAY6rE,UACR2lK,YAAM,uBAAwB3lK,IAAI7mE,KAG/B,OALuCgqB,QAKvCuiN,uCAAP,SAAkC1lK,GAC9B,OAAO7mE,KAAKQ,IAAIS,kBAAkBjB,KAAKU,eAAgB,6BAA8BmmE,IAGlF0lK,yBAAP,WACI,OAAOvsO,KAAKQ,IAAIC,iBAAiBT,KAAKU,eAAgB,eAAgB,8CAdrE+W,QAII80N,qUAA4BtiN,KADxCylK,iBACY68C,IAAqCxtN,+eCU9C,WAAY8nD,EACAC,GADZ,MAEI0lK,YAAM3lK,EAAG,oCAAqCtlE,KAAYA,OAAUvB,KAD5D,0CAIO,OAPgCmqB,QAOhCoiN,4BAAnB,WACIvsO,KAAKkd,kBAIUqvN,kCAAnB,SAAyC1lK,EAA4BC,EAA0CuC,GACvGvC,IAAuBvlE,MAAsBvB,KAAKkd,kBAG1DqvN,iDACIvsO,KAAKke,YAAYosD,sBAA2B,IAAIpoD,MAAuB,SAAC4kD,GACpE,SAAK8T,6BAA6Bo1K,2DA/BrClwP,WAIAoqB,MASIqiN,qUAAiCniN,KAN7CslK,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,iCACVC,SCZW,6dDeFs1N,IAA0C1qO,0fEJnD,WAAYglE,UACR2lK,YAAM,OAAQ3lK,IAAI7mE,KAGf,OANuBwqB,QAMvB+hN,oBAAP,SAAe1lK,EAAaC,GACxB,OAAO9mE,KAAKQ,IAAIC,iBAAiBT,KAAKU,eAAgB,UAAW,CAAEuvP,IAAKppL,EAAKqpL,SAAUppL,KAGpFylK,wBAAP,SAAmB1lK,EAAiBC,GAChC,OAAO9mE,KAAKQ,IAAIC,iBAAiBT,KAAKU,eAAgB,cAAe,CAAEyvP,QAAStpL,EAASqpL,SAAUppL,8CAflGrvD,QAII80N,qUAAY9hN,KADxBilK,iBACY68C,IAAqBn9M,geCMlCtE,0EACI,6BAA4C,GAG5C+7C,QAAQ,GACRA,WAAW,GACXA,oBAAuC,GACvCA,iBAAiB,GACjBA,kBAAkB,KACtB,OAT2Bl8C,QAS3B4hN,EATA,CAA2BhrO,qBAmCvB,WACIslE,EACQC,EACAuC,EACAtC,EACAC,EACAoC,GANZ,OAOIojK,YAAM3lK,EAAG,gCAAiCtlE,KAAsBupB,GAAOg8C,EAAU5mE,cAA4BF,KALrG,qBACAknE,gCACAA,cACAA,8BACAA,kBATZA,wBAA4B,yIAC5BA,qBAAyB,mBAgJzBA,qBAAoB,WAAM,UAAKkpL,gBAE/BlpL,gBAAe,WAAM,SAAEA,GAAKj1D,OAAO66D,UAAc5F,GAAKj1D,OAAOo+O,iBAAqBnpL,GAAKj1D,OAAOq+O,SAAappL,GAAKj1D,OAAOs+O,kBA1JvH,OAR+C5lO,QAQ/C7e,sBAAIygO,yCAA0B,KAA9B,sBACI,OAAOvsO,KAAK+Q,MAAM4+O,qBAAuB3vP,KAAKiS,OAAO49O,uBAA6D,MAArC7vP,KAAKiS,OAAO49O,qBACnF7vP,KAAK+Q,MAAM4+O,oBAAoB39N,KAAK,YAAK,OAAc,MAAd80C,EAAEn6D,UAC3C3M,KAAK+Q,MAAM4+O,oBAAoB39N,KAAK,YAAK,SAAErlB,UAAYk6D,EAAK50D,OAAO49O,wDAiB1DtjB,4BAAnB,WACIvsO,KAAKwwP,2BAGUjkB,oCAAnB,WACIvsO,KAAKywP,uBACLzwP,KAAK0wP,YAGUnkB,mCAAnB,WACI,OAAOvsO,KAAKiS,QAAUjS,KAAKiS,OAAOqC,MAGnBi4N,0BAAnB,WACIvsO,KAAKmT,gBAGUo5N,+BAAnB,WACI,OAAO,GAGQA,+BAAnB,WACIvsO,KAAKiS,OAAOqC,KAAO,IAGJi4N,wBAAnB,YACKvsO,KAAKiS,OAAO0+O,wBAA0B3wP,KAAKiS,OAAO0+O,sBAAwBzwP,WAC3EF,KAAKiS,OAAO2+O,sBAAuB,GAGpBrkB,+BAAnB,WACI,IAAIvsO,KAAKo5B,UAET,MAAO,CAAC,CACJ8B,KAAMl7B,KAAKuS,GAAG,eACdgI,SAAS,EACT4gB,QAASn7B,KAAK2mC,SAAStL,KAAKr7B,SAIjBusO,2BAAnB,WACIvsO,KAAK+Q,MAAM8/O,6BAA+B7wP,KAAKiS,OAAO2+O,sBACrD5wP,KAAKiS,OAAO6+O,0BAA4B9wP,KAAKiS,OAAO6+O,wBAA0B,IAAIvvP,OAClFvB,KAAKiS,OAAO49O,uBAAyB7vP,KAAKiS,OAAO49O,sBAAuB,MAG1DtjB,6BAAnB,mBAGI,IAAKvsO,KAAKowP,iBAAmBpwP,KAAKiS,OAAO8+O,WACrC,YAAK39O,GAAGC,YAAYrT,KAAKuS,GAAG,uCACrB,EAGX,GAAIvS,KAAKiS,OAAO++O,aAAe9wP,gBAAgD,CAC3E,IAAMmpE,EAAc,eAEpB,GAAIrpE,KAAKiS,OAAO66D,WAAyD,GAA7C9sE,KAAKiS,OAAO66D,SAASnxD,QAAQ0tD,IACrDrpE,KAAKiS,OAAOq+O,UAAuD,GAA5CtwP,KAAKiS,OAAOq+O,QAAQ30O,QAAQ0tD,IACnDrpE,KAAKiS,OAAOo+O,kBAAuE,GAApDrwP,KAAKiS,OAAOo+O,gBAAgB10O,QAAQ0tD,GACnE,YAAKj2D,GAAGC,YAAYrT,KAAKuS,GAAG,gDACrB,EAIf,QAAIvS,KAAKiS,OAAO8+O,aAAgB/wP,KAAKiS,OAAOg/O,yBAAuE,QAA7CnqL,EAAmC,QAAnCD,OAAK50D,OAAO6+O,+BAAuB,eAAEI,gBAAQ,eAAEthP,WACjH5P,KAAKoT,GAAGC,YAAYrT,KAAKuS,GAAG,6CACrB,IAMPg6N,oCAAR,sBACIvsO,KAAKvE,GAAGuE,KAAK4vP,2BAA2BphI,WAAW,EAAO,SAAC1nD,GACvD,GAAiC,IAA7BA,EAASrxD,SAAS7F,OAAc,CAChC,IAAMy5D,EAA4B,CAC9B18D,SAAS,IACTo3M,WAAYl9I,EAAKt0D,GAAG,kBAExBs0D,EAAK91D,MAAM4+O,mGAAsB9kO,EAACw+C,GAA8BvC,EAASrxD,UACpEoxD,EAAK50D,OAAO49O,uBAAsBhpL,EAAK50D,OAAO49O,sBAAuB,UACvEhpL,EAAK91D,MAAM4+O,oBAAsB7oL,EAASrxD,YAIjD82N,iCAAR,sBACUzlK,EAAoB9mE,KAAKwB,EAAEsxL,iBAAiB+K,UAAU0R,kBAExDlmI,EAAa,GAEjBvC,EAAkBnuD,QAAQ,YAGtB,QAASquD,EAAI,EAAGA,EAAID,EAAgBoqL,eAAevhP,OAAQo3D,IAAK,CAC5D,IAAMoC,EAAOrC,EAAgBoqL,eAAenqL,GAEtCC,GADmBJ,EAAKy2D,yBAAyBC,wBAAwBn0D,GACzC/oB,OAAOwmB,EAAKuqL,UAC7C/nL,IAAYA,EAAapC,GAAa9xC,SAASiO,YAEpDyjC,EAAK91D,MAAMsgP,eAAetqL,EAAgBoqL,eAAenqL,GAAGjsC,YAAcksC,GAAa9xC,SAASse,cAChGozB,EAAK91D,MAAMugP,gBAAgBvqL,EAAgBoqL,eAAenqL,GAAGjsC,YAAc8rC,EAAKrlE,EAAEoyL,iBAAiBrhL,GAAG,SAAS00D,GAAa9xC,SAASse,cAAiB41B,MAI9JvC,EAAkBnuD,QAAQ,YAEtB,GAAIouD,EAAgBptD,WAAY,CAC5B,IAAMqtD,EAAM,IAAID,EAAgBptD,WAChCktD,EAAK91D,MAAMsgP,eAAetqL,EAAgBptD,WAAWohB,YAAcisC,EAAI/mE,SACvE4mE,EAAK91D,MAAMugP,gBAAgBvqL,EAAgBptD,WAAWohB,YAAc8rC,EAAKrlE,EAAEoyL,iBAAiBrhL,GAAGy0D,EAAI/mE,SAAUopE,MAIrHrpE,KAAK+Q,MAAMw+L,kBAAoBzoI,GAG3BylK,qBAAR,sBACIvsO,KAAK+Q,MAAMovM,MAAQngN,KAAK+Q,MAAMw+L,kBAAkB7zL,OAAO,kBAAK,SAAE61O,UAAY1qL,EAAK50D,OAAO0+O,yBAA2B9pL,EAAK50D,OAAO0H,YACtHktD,EAAK91D,MAAMsgP,eAA2B,QAAZtqL,IAAEptD,kBAAU,eAAEohB,aAAe8rC,EAAK50D,OAAO0H,cACrEyc,IAAI,YAAK,SAAE+6N,iBAAgBl/M,OAAO7b,IAAI,YAAK,MAAC,CAAEo7N,cAAe3qL,EAAK91D,MAAMsgP,eAAehoL,EAAEtuC,YAAazmB,KAAMuyD,EAAK91D,MAAMugP,gBAAgBjoL,EAAEtuC,eAE1I/6B,KAAKiS,OAAO0H,YAAyC,GAA3B3Z,KAAK+Q,MAAMovM,MAAMvwM,SAC3C5P,KAAKiS,OAAOkzN,SAAWnlO,KAAK+Q,MAAMovM,MAAM,GAAGqxC,eAG/C,IAAI1qL,EAAoB9mE,KAAK+Q,MAAMw+L,kBAAkB7zL,OAAO,YAAK,SAAE61O,UAAY1qL,EAAK50D,OAAO0+O,uBAAyBtnL,EAAE1vD,aACtHmtD,EAAoBA,EAAkBprD,OAAO,SAAC2tD,EAAGtC,EAAGC,GAAM,SAAEvS,UAAU,YAAK,SAAE96C,YAAc0vD,EAAE1vD,cAAeotD,IAE5G/mE,KAAK+Q,MAAM0E,SAAWqxD,EAAkB1wC,IAAI,YAAC,QAAI,MAAC,CAAE9hB,KAAMuyD,EAAK91D,MAAMugP,gBAA4B,QAAZvqL,IAAEptD,kBAAU,eAAEohB,YAAa9oB,OAAQ40D,EAAK91D,MAAMsgP,eAA2B,QAAZrqL,IAAErtD,kBAAU,eAAEohB,gBAOpKwxM,iDACIvsO,KAAKyxP,iBAAiBrpK,SAAWpoF,KAAKiS,OAAOm2E,SAC7CpoF,KAAKyxP,iBAAiB3kL,SAAW9sE,KAAKiS,OAAO66D,SAC7C9sE,KAAKyxP,iBAAiBnuO,gBAAgB,SAACwjD,GACnCD,EAAK50D,OAAO66D,SAAWhG,EAAMgG,YAIrCy/J,qCACIvsO,KAAK6sE,cAAcC,SAAW9sE,KAAKiS,OAAO66D,SAC1C9sE,KAAK6sE,cAAcvpD,gBAAgB,eAGvCipN,oDAA+B1lK,GACvBA,EAAEtjB,QACFvjD,KAAKiS,OAAOkzN,SAAW,KACvBnlO,KAAKiS,OAAO0H,WAAa,MAG7B3Z,KAAK0wP,YAGTnkB,yCAAoB1lK,GACZA,EAAEtjB,QACFvjD,KAAKiS,OAAOkzN,SAAW,MAG3BnlO,KAAK0wP,YAGTnkB,uCAAkB1lK,IACTA,EAAEtjB,OACPvjD,KAAK0wP,YAGTnkB,gEACIvsO,KAAKvE,GAAGuE,KAAK0xP,aAAaC,YAAY3xP,KAAKiS,OAAO6+O,wBAAwBnkP,SAAS,IAAO,EAAM,YAC5F,IAAM08D,EAAO,IAAI9nE,KACjB8nE,EAAK+4D,UAAYv7D,EAAK50D,OAAO6+O,wBAAwB1uH,UACrD/4D,EAAK/0D,KAAOuyD,EAAK50D,OAAO6+O,wBAAwBx8O,KAChDjd,oBAAqBgyE,EAAMhyE,qBAAsByvE,EAAS70D,OAAOi/O,UAAWrqL,EAAK50D,OAAO6+O,wBAAwBc,gBAI/GrlB,qBAAT,sBACIvsO,KAAKi8E,WAAWjuE,KAAO9N,WACvBF,KAAKi8E,WAAWv/C,OAAS18B,KAAKuS,GAAG,yCACjCvS,KAAKi8E,WAAW34D,gBAAgB,WAC5BujD,EAAK0oD,kBAIbg9G,0CAAqB1lK,GAArB,WACQA,GAAUppC,WAAW,WAAM,SAAKo0N,UAAY/qL,EAAK+qL,SAAS18N,SAAS8F,aAG3EsxM,0CAAqB1lK,GAArB,WACQA,GAAUppC,WAAW,WAAM,SAAKq0N,OAAShrL,EAAKgrL,MAAM38N,SAAS8F,aAGrEsxM,+DACUzlK,EAAWzvE,iBAAkB2I,KAAKiS,QACxC60D,EAAS8pL,sBAAuB5wP,KAAKiS,OAAO2+O,qBAC5C5wP,KAAKvE,GAAGuE,KAAK8lC,SAASisN,2BAA2BjrL,IAAW,EAAM,SAACuC,GAC/DxC,EAAK50D,OAAO2+O,qBAAuBvnL,EAAS/zD,QAIpDi3N,oCAAe1lK,GAAf,aACUE,EAAiB,QAATsC,EAAC,MAADxC,OAAC,EAADA,EAAG1N,cAAM,eAAEy3K,MACzB,GAAK7pK,GAA0B,IAAZ,MAALA,OAAK,EAALA,EAAOn3D,QAErB,KAAMo3D,EAAOD,EAAM,GACbqC,EAAa,IAAIqhK,WAEvBrhK,EAAWlnB,iBAAiB,OAAQ,SAACglB,IACjC,IAAMD,GAAaC,GAAM/N,OAAOwxK,OAC1BvjK,GAAQ/vE,yBAA0B4vE,IAEnCH,EAAK70D,OAAO6+O,0BAAyBhqL,EAAK70D,OAAO6+O,wBAA0B,IAAIvvP,MACpFulE,EAAK70D,OAAO6+O,wBAAwBI,SAAW9pL,GAC/CN,EAAK70D,OAAO6+O,wBAAwBx8O,KAAOwyD,EAAK70D,OAAO6+O,wBAAwBxnN,SAAW09B,EAAK/tC,KAC/F6tC,EAAK70D,OAAO6+O,wBAAwB1uH,UAAY,OAGpDh5D,EAAW+hK,cAAcpkK,EAAM,+CAtR9BjnE,WAGAoqB,UADAZ,UALqComK,kBAA1BA,kCAaXhlK,gDAqBJglK,YAASvuL,MAAC,2CACVuuL,YAASvuL,MAAC,qCACVuuL,YAASvuL,MAAC,gCACVuuL,YAASvuL,MAAC,2BACVuuL,YAASvuL,MAAC,YANForO,qUAA6B3hN,KANzC8kK,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,4BACVC,SC7BW,g0cDgCFs1N,IAAsCvxO,+eEf/C,WAAY6rE,EACAC,GADZ,MAEI0lK,YAAM3lK,EAAG,qBAAsBtlE,KAAYA,OAAUvB,KAD7C,4BAKH,OAR0BirB,QAQ1BshN,4CAAT,sBACIvsO,KAAKgyP,eAAe1uO,gBAAgB,SAACwjD,GACjCD,EAAKprE,GAAGorE,EAAKwzI,eAAe43C,SAASnrL,IAAQ,EAAO,WAAQD,EAAK/sD,SAAS,CAAC,iBAAkB,CAAEsuE,SAAUmhG,mBAC1G,WAAM,SAAKzvK,SAAS,CAAC,iBAAkB,CAAEsuE,SAAUmhG,4DArBrDzpL,WAGAse,gDAaJsxK,YAASvuL,MAAC3F,SANF+wO,qUAAiBrhN,KAL7BwkK,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,gBACVC,SCbW,0QDeFs1N,IAA0B1qO,2eERvC2pB,0EACI,eAAgB,IACpB,OAFoBF,QAEpBihN,EAFA,CAAoBhrO,qBAYhB,WAAYslE,UACR2lK,YAAM3lK,EAAG,uBAAwBr7C,KAAMxrB,KAIpC,OAR+BsrB,QAQ/BihN,4BAAP,WACIvsO,KAAK+Q,MAAMuhB,kDAtBXxyB,OAaKysO,qUAAoBhhN,KALhCmkK,aAAU,CACP14K,SAAU,mBACVC,SCbW,65HDgBFs1N,IAA6BnrO,2eEV1C0qB,2EACA,OADoBF,QACpB2gN,EADA,CAAoBhrO,qBAUhB,WAAYslE,EAA6BC,GAAzC,MACI0lK,YAAM3lK,EAAG,sBAAuB/6C,KAAM9rB,KADD,2BAFJ4rB,iDAVjC9rB,WAHC3B,QAaIouO,qUAAmB1gN,KAL/B6jK,aAAU,CACP14K,SAAU,kBACVC,SCXW,uTDcFs1N,IAA4BnrO,ufENzCirB,0EACI,uBAAuB,GAGvBw6C,oBAA8B,GAE9BA,sBAA8B,EAC9BA,kBAAyB,GACzBA,qBAA4B,KAChC,OAToB16C,QASpBogN,EATA,CAAoBhrO,qBAkBhB,WAAYslE,EAA6BC,GAAzC,MACI0lK,YAAM3lK,EAAG,uBAAwBx6C,KAAMrsB,KADF,oBAItB,OANmBmsB,QAMnBogN,4BAAnB,WACIvsO,KAAK+Q,MAAMi6D,OAAS,OAEpBhrE,KAAK+Q,MAAMmhP,cAAgBlyP,KAAKmyP,mBAChCnyP,KAAK+Q,MAAMqhP,gBAAkBpyP,KAAKqyP,qBAClCryP,KAAK+Q,MAAMuhP,mBAAqBtyP,KAAKuyP,wBACrCvyP,KAAK+Q,MAAMyhP,qBAAuBxyP,KAAKyyP,yBAGpClmB,iCAAP,WACI,OAAOvsO,KAAK+Q,MAAM2hP,kBAAkB35M,KAAK,OAGrCwzL,kCAAR,WACI,MAAO,CACH,CACIrxM,KAAM,WACN1oB,MAAO,WAEX,CACI0oB,KAAM,WACN1oB,MAAO,WAEX,CACI0oB,KAAM,WACN1oB,MAAO,aAKX+5N,+BAAR,WACI,MAAO,CACH,CACIzoM,KAAM,WACNxR,MAAO,WAEX,CACIwR,KAAM,WACNxR,MAAO,WAEX,CACIwR,KAAM,WACNxR,MAAO,aAKXi6M,6BAAR,WACI,MAAO,CACH,CACIj4N,KAAM,WACNwnO,WAAY,gBACZnvO,QAAS,GAEb,CACI2H,KAAM,WACNwnO,WAAY,gBACZnvO,QAAS,GAEb,CACI2H,KAAM,WACNwnO,WAAY,gBACZnvO,QAAS,KAKb4/N,kCAAR,WACI,OAAO,IAAItgN,KAAW,CAClBsY,MAAO,IAAIrY,KAAW,CAClBzS,KAAM,CACF,CACInF,KAAM,WACNwnO,WAAY,gBACZr/I,MAAO,UACP9vF,QAAS,GAEb,CACI2H,KAAM,WACNwnO,WAAY,gBACZr/I,MAAO,UACP9vF,QAAS,GAEb,CACI2H,KAAM,WACNwnO,WAAY,gBACZr/I,MAAO,UACP9vF,QAAS,GAEb,CACI2H,KAAM,WACNwnO,WAAY,gBACZr/I,MAAO,UACP9vF,QAAS,IAEjByN,IAAK,YAETqqB,MAAO,oDA7HX3kC,WACA3B,QAqBKouO,qUAAoBngN,KALhCsjK,aAAU,CACP14K,SAAU,mBACVC,SCrBW,ukZDwBFs1N,IAA6BnrO,+BEftC,2DAFSorO,qUAAoB//M,KALhCijK,aAAU,CACP14K,SAAU,mBACVC,SCJW,uyJDOFu1N,4eEDbz/M,0EAGI,sBAAuC,WACvC85C,gBAAkC,QAClCA,iBAAyB,EACzBA,cAAsB,EACtBA,oBAA4B,EAC5BA,kBAA0B,IAE9B,OAVoBh6C,QAUpB0/M,EAVA,CAAoBhrO,qBAmBhB,WAAYslE,EAA6BC,GAAzC,MACI0lK,YAAM3lK,EAAG,wBAAyB95C,KAAM/sB,KADH,oBAItB,OANoB6sB,QAMpB0/M,4BAAnB,WACIvsO,KAAK+Q,MAAM4hP,MAAQ,CACf,CACI7uN,KAAM,UACNxR,MAAO,WAEX,CACIwR,KAAM,WACNxR,MAAO,aAIftyB,KAAK+Q,MAAM6hP,OAAS,CAChB,CACI9uN,KAAM,QACNxR,MAAO,SAEX,CACIwR,KAAM,OACNxR,MAAO,UAKnBi6M,wCACI,IAAI1lK,EAAS,eAEb,OAAI7mE,KAAK+Q,MAAM8hP,mBACXhsL,GAAU,4CAEV7mE,KAAK+Q,MAAM8hP,kBAAoB7yP,KAAK+Q,MAAM+hP,iBAC1CjsL,GAAU,gCAEkB,YAA5B7mE,KAAK+Q,MAAMgiP,eACXlsL,GAAU,UAAU7mE,KAAK+Q,MAAMgiP,aAAY,KAEd,UAA7B/yP,KAAK+Q,MAAMiiP,gBACXnsL,GAAU,WAAW7mE,KAAK+Q,MAAMiiP,cAAa,KAE7ChzP,KAAK+Q,MAAM8hP,kBAAoB7yP,KAAK+Q,MAAMkiP,gBAC1CpsL,GAAU,2BAEV7mE,KAAK+Q,MAAMmiP,aACXrsL,GAAU,uBAEPA,EAAS,mBAGpB0lK,mCAAc1lK,GACV9kC,QAAQC,IAAI6kC,6CA3EZ/mE,WACA3B,QAmBKouO,qUAAqBz/M,KALjC4iK,aAAU,CACP14K,SAAU,oBACVC,SCpBW,wuIDuBFs1N,IAA8BnrO,+dEjB3CgsB,0EACI,cAAO,KACX,OAFoBF,QAEpBq/M,EAFA,CAAoBhrO,qBAWhB,WAAYslE,EAA6BC,GAAzC,MACI0lK,YAAM3lK,EAAG,qBAAsBz5C,KAAMptB,KADA,oBAItB,OANiBktB,QAMjBq/M,4BAAnB,WAEIvsO,KAAK+Q,MAAMo/K,KAAO,CACd,CACIx+J,MAAO,OACPw+C,KAAM,kBACNj0B,QAAS,WACLna,QAAQC,IAAI,kBAGpB,CACIrQ,MAAO,SACPw+C,KAAM,mBACNj0B,QAAS,WACLna,QAAQC,IAAI,+DAjCxBliC,WACA3B,QAYKouO,qUAAkBp/M,KAL9BuiK,aAAU,CACP14K,SAAU,iBACVC,SCZW,0tSDeFs1N,IAA2BnrO,2eETxC+xP,0EACI,cAAc,GACdtsL,kBAA0B,EAC1BA,kBAA0B,EAC1BA,uBAA+B,EAC/BA,qBAA6B,EAC7BA,0BAAkC,EAClCA,0BAAkC,IACtC,OARoBr5C,QAQpB++M,EARA,CAAoBhrO,qBAiBhB,WAAYslE,EAA6BC,GAAzC,MACI0lK,YAAM3lK,EAAG,oBAAqBssL,KAAMnzP,KADC,oBAItB,OANgBwtB,QAMhB++M,4BAAnB,WACIvsO,KAAK+Q,MAAM0sE,KAAOz9E,KAAKozP,eAGpB7mB,oCAAP,WACQvsO,KAAK+Q,MAAMsiP,iBACXrzP,KAAK+Q,MAAMuiP,qBAAsB,IAGlC/mB,yCAAP,WACQvsO,KAAK+Q,MAAMuiP,sBACXtzP,KAAK+Q,MAAMsiP,gBAAiB,IAG7B9mB,0BAAP,WACI,IAAI1lK,EAAS,2EAEb,OAAI7mE,KAAK+Q,MAAMsiP,iBACXxsL,GAAU,4BAEV7mE,KAAK+Q,MAAMuiP,sBAEXzsL,GAAU,gCAEN7mE,KAAK+Q,MAAMwiP,oBACX1sL,GAAU,8BAEV7mE,KAAK+Q,MAAMyiP,yBACX3sL,GAAU,uDAEV7mE,KAAK+Q,MAAM0iP,yBACX5sL,GAAU,2GAGXA,EAAS,gBAGZ0lK,wBAAR,WACI,MAAO,CACH,CACI9yM,MAAO,EACPyB,KAAM,aACN5mB,KAAM,QAEV,CACImlB,MAAO,EACPyB,KAAM,aACN5mB,KAAM,QAEV,CACImlB,MAAO,EACPyB,KAAM,aACN5mB,KAAM,QAEV,CACImlB,MAAO,EACPyB,KAAM,aACN5mB,KAAM,mDAlFdxU,WACA3B,QAkBKouO,qUAAiB9+M,KAL7BiiK,aAAU,CACP14K,SAAU,gBACVC,SClBW,8zGDqBFs1N,IAA0BnrO,MjJrBvC,SAAYorO,GAERA,gBACAA,gBACAA,4BACAA,8BALJ,CAAY96M,QAAwB,memJWpCD,0EACI,gBAA4B,GAC5Bo1C,SAAiC,GACjCA,SAAiC,GACjCA,SAAgB,GAEhBA,iBAAoC,KAGxC,OAToB/vC,QASpBy1M,EATA,CAAoBhrO,qBAsBhB,WAAYslE,EAA6BC,GAAzC,MACI0lK,YAAM3lK,EAAG,qBAAsBp1C,KAAMzxB,KADA,kBA6ClCqpE,4BAA4B,SAACtC,GAChC,GAAKA,EAAQ2sL,QAGb,OAAOrqL,EAAKt4D,MAAMs8E,OAAOr7D,KAAK,YAAK,SAAErlB,UAAYo6D,EAAQ2sL,UAASp/O,MAG/D+0D,4BAA4B,SAACtC,GAChC,GAAKA,EAAQ4sL,QAGb,OAAOtqL,EAAKt4D,MAAM6iP,OAAO5hO,KAAK,YAAK,SAAErlB,UAAYo6D,EAAQ4sL,UAASr/O,QA1DtE,OAHoCwiB,QAGpChrB,sBAAWygO,gBAAC,KAAZ,iBAA+B,OAAyB,QAAlB1lK,EAAC7mE,KAAKk1B,YAAY,eAAEtzB,mCAMvC2qO,4BAAnB,WACIvsO,KAAK6zP,WACL7zP,KAAK+Q,MAAM+iP,OAAS9zP,KAAK+zP,aAGVxnB,oCAAnB,WACIvsO,KAAK4B,EAAEoyP,wBAAwBh0P,KAAM,SAAU,CAAEwkM,UAAW,0BAC5DxkM,KAAK4B,EAAEoyP,wBAAwBh0P,KAAM,QAAS,CAAEwkM,UAAW,yBAC3DxkM,KAAK4B,EAAEoyP,wBAAwBh0P,KAAM,WAAY,CAAEwkM,UAAW,6BAG3D+nC,qCAAP,SAAgC1lK,GAC5BA,EAAM3lD,eAAeC,MAAMC,QAAQ,CAC/BC,SAAU,QACVpK,SAAU,mBACVqK,UAAU,KAIXirN,kCAAP,SAA6B1lK,GACzB9kC,QAAQC,IAAI6kC,GACZ7mE,KAAK4B,EAAEsuD,QACH,WACA74D,WAAY2I,KAAK4B,EAAEyjM,QAAQ,SAAUx+H,IAAMxvE,WAAY2I,KAAK4B,EAAEyjM,QAAQ,QAASx+H,IAC/EA,IAGD0lK,iCAAP,SAA4B1lK,GACxB7mE,KAAK4B,EAAEsuD,QACH,WACA74D,WAAY2I,KAAK4B,EAAEyjM,QAAQ,QAASx+H,IAAMxvE,WAAY2I,KAAK4B,EAAEyjM,QAAQ,SAAUx+H,IAC/EA,IAGD0lK,oCAAP,SAA+B1lK,GAC3B7mE,KAAK4B,EAAEsuD,QACH,QACA74D,WAAY2I,KAAK4B,EAAEyjM,QAAQ,WAAYx+H,IAAMxvE,WAAY2I,KAAK4B,EAAEyjM,QAAQ,SAAUx+H,IAClFA,IAiBD0lK,8BAAP,SAAyB1lK,GACrB,OAAO7mE,KAAK+Q,MAAMs8E,OAAOr7D,KAAK,YAAK,SAAErlB,UAAYk6D,EAAKptD,KAAKi6O,UAASE,QAGjErnB,8BAAP,WACIvsO,KAAK+Q,MAAMo0E,SAAWnlF,KAAK+Q,MAAMkjP,OAAO79N,IAAI,YAAK,SAAE+uD,WAAUr7B,OAAO,SAAC+c,EAAGC,GAAM,SAAIA,KAG/EylK,2BAAP,SAAsB1lK,GAClB9kC,QAAQC,IAAI6kC,IAGR0lK,sBAAR,WACI,MAAO,CACH,CACIj6M,MAAOZ,SACPoS,KAAM,QACNgZ,UAAW,GAEf,CACIxqB,MAAOZ,SACPoS,KAAM,QACNgZ,UAAW,GAEf,CACIxqB,MAAOZ,eACPoS,KAAM,eACNgZ,UAAW,GAEf,CACIxqB,MAAOZ,gBACPoS,KAAM,gBACNgZ,UAAW,KAKfyvL,qBAAR,WAEI,IAAI1lK,EAAW,CACXl6D,QAAS,EACT2H,KAAM,aAGNwyD,EAAM,CACNn6D,QAAS,EACT2H,KAAM,OAGN+0D,EAAO,CACP18D,QAAS,EACT2H,KAAM,QAGNyyD,EAAe,CACfp6D,QAAS,EACT2H,KAAM,UACNs/O,OAAQ,CAAC/sL,EAAUC,EAAKuC,IAGxBrC,EAAW,CACXr6D,QAAS,EACT2H,KAAM,aAGN80D,EAAW,CACXz8D,QAAS,EACT2H,KAAM,aAGN4yD,GAAc,CACdv6D,QAAS,EACT2H,KAAM,QACNs/O,OAAQ,CAAC5sL,EAAUoC,IAGvBppE,KAAK+Q,MAAMs8E,OAAS,CAACtmB,EAAcG,IACnClnE,KAAK+Q,MAAM6iP,OAAS,CAAC/sL,EAAUC,EAAKuC,EAAMD,EAAUpC,GAEpDhnE,KAAK+Q,MAAMkjP,OAAS,CAChB,CACIN,QAAS9sL,EAASl6D,QAClB+mP,QAAS3sL,EAAap6D,QACtB4sD,MAAO7nC,SACPwiO,aAAa,EACb3xO,OAAQ,EACR4xO,MAAO,KACPhvK,SAAU,MAEd,CACIwuK,QAAS7sL,EAAIn6D,QACb+mP,QAAS3sL,EAAap6D,QACtB4sD,MAAO7nC,SACPwiO,aAAa,EACb3xO,OAAQ,EACR4xO,MAAO,IACPhvK,SAAU,MAEd,CACIwuK,QAAStqL,EAAK18D,QACd+mP,QAAS3sL,EAAap6D,QACtB4sD,MAAO7nC,gBACPwiO,aAAa,EACb3xO,OAAQ,EACR4xO,MAAO,KACPhvK,SAAU,MAEd,CACIwuK,QAAS3sL,EAASr6D,QAClB+mP,QAASxsL,GAAWv6D,QACpB4sD,MAAO7nC,eACPwiO,aAAa,EACb3xO,OAAQ,EACR4xO,MAAO,IACPhvK,SAAU,KAEd,CACIwuK,QAASvqL,EAASz8D,QAClB+mP,QAASxsL,GAAWv6D,QACpB4sD,MAAO7nC,SACPwiO,aAAa,EACb3xO,OAAQ,EACR4xO,MAAO,IACPhvK,SAAU,IAIlBnlF,KAAKo0P,8DAzNLt0P,WACA3B,sCA2BHuxL,YAASvuL,MAAC,kBAFForO,qUAAkBh7M,KAN9Bm+J,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,iBACVC,SCzBW,gzaD4BFs1N,IAA2BnrO,+dElBxC82B,0EACI,mBAAmB,GACnB2uC,cAAoC,KACxC,OAHoB9vC,QAGpBw1M,EAHA,CAAoBhrO,qBAgBhB,WAAYslE,EAA6BC,EAA+BuC,GAAxE,MACImjK,YAAM3lK,EAAG,4BAA6B3uC,KAAMl4B,KADP,kBAA+B+mE,yBAIrD,OAVwBhwC,QAUxBw1M,4BAAnB,WACIvsO,KAAK+Q,MAAMsjP,UAAYr0P,KAAKs0P,eAC5Bt0P,KAAK+Q,MAAMyrI,YAAcx8I,KAAKu0P,kBAGfhoB,+BAAnB,iBACIC,YAAM9gH,mBAAkBttF,WAEG,QAA3ByoC,OAAK2tL,8BAAsB,SAAEliP,eAG1Bi6N,mCAAP,WACI,IAAM1lK,EAAgB,IAAIxtE,MAC1BwtE,EAAcwvF,QAAU5qI,GACxBo7C,EAAcpqC,MAAQ,oBACtBz8B,KAAKyxK,mBAAmBvqB,KAAKrgF,IAG1B0lK,kCAAP,WACI,IAAM1lK,EAAgB,IAAIxtE,MAC1BwtE,EAAcwvF,QAAUr2J,KAAKiX,SAC7B4vD,EAAcpqC,MAAQ,mBACtBz8B,KAAKyxK,mBAAmBvqB,KAAKrgF,IAG1B0lK,8BAAP,WACI,IAAM1lK,EAAa,IAAIxtE,MACvBwtE,EAAWpqC,MAAQ,QACnBoqC,EAAWr6B,WAAaxsC,KAAK+Q,MAAMsjP,UACnCxtL,EAAWg1G,YAAc,SAAC/0G,GAAW,eAAQ9kC,IAAI8kC,IAEjD9mE,KAAKyxK,mBAAmBynC,SAASryI,IAG9B0lK,qCAAP,WACI,IAAM1lK,EAAa,IAAIxtE,MACvBwtE,EAAWpqC,MAAQ,uBACnBoqC,EAAW5O,MAAQj4D,KAAK+Q,MAAMyrI,YAC9Bx8I,KAAKyxK,mBAAmBo+D,gBAAgBhpK,IAGrC0lK,2BAAP,WACI,MAAO,CACH,CACIrxM,KAAM,MACNi1C,KAAM,MACNh1C,QAAS,WAAM,eAAQ6G,IAAI,wCAE/B,CACI9G,KAAM,OACNi1C,KAAM,OACNh1C,QAAS,WAAM,eAAQ6G,IAAI,2CAKhCuqM,yBAAP,WACI,MAAO,CACH,CACI5/N,QAAS,EACT2H,KAAM,QACN6lD,KAAM,yBAEV,CACIxtD,QAAS,EACT2H,KAAM,MACN6lD,KAAM,uBAEV,CACIxtD,QAAS,EACT2H,KAAM,SACN6lD,KAAM,0EAlGbr6D,WAGA3B,YAD+E9E,2CAiBnFq2L,YAASvuL,MAAC,eAFForO,qUAAyBv1M,KALrC04J,aAAU,CACP14K,SAAU,yBACVC,SCjBW,i5BDoBFs1N,IAAkCnrO,+dEf/C+1B,2EAA+B,OAAXC,QAAWm1M,EAA/B,CAAoBhrO,qBAShB,WAAYslE,UACR2lK,YAAM3lK,EAAG,qBAAsB1vC,KAAMn3B,KAGlC,OAN6Bo3B,QAM7Bm1M,oCAAP,WACIvsO,KAAK8Z,SAAS,CAAC,uCAGZyyN,oCAAP,WACIvsO,KAAK8Z,SAAS,CAAC,iFApBfha,OASKysO,qUAAkBp0M,KAL9Bu3J,aAAU,CACP14K,SAAU,iBACVC,SCTW,+iBDYFs1N,IAA2BnrO,+dELxCm3B,2EAA+B,OAAXH,QAAWm0M,EAA/B,CAAoBhrO,qBAUhB,WACIslE,EACQC,GAFZ,MAII0lK,YAAM3lK,EAAG,yBAA0BtlE,KAAYg3B,KAAMv4B,KAF7C,sBAKO,OAT8Bo4B,QAS9Bm0M,wBAAnB,WACI,MAAO,mBAGQA,iCAAnB,sBACUzlK,EAAW,IAAIy+K,MAErB,SAASlpO,eAAgB,EACzByqD,EAASptB,eAAgB,EACzBotB,EAASntB,cAAe,EAExBmtB,EAASgxF,gBAAiB,EAC1BhxF,EAAS61H,gBAAkB,WAAM,SAAKt7K,SAASozO,QAE/C3tL,EAASg2H,iBAAmB,eAC5Bh2H,EAAS81H,sBAAwB58L,KAAKu0P,eAE/BztL,GAGHylK,2BAAR,WACI,MAAO,CACH,CACIrxM,KAAM,MACNi1C,KAAM,MACNh1C,QAAS,WAAM,eAAQ6G,IAAI,wCAE/B,CACI9G,KAAM,OACNi1C,KAAM,OACNh1C,QAAS,WAAM,eAAQ6G,IAAI,oFAnDnCliC,WAECtH,SAUI+zO,qUAA+Bj0M,KAN3Co3J,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,gCACVC,SCZW,snDDeFs1N,IAAwC1qO,+dERrD6yP,0EACI,qBAAoC,KACxC,OAFoBl8N,QAEpB+zM,EAFA,CAAoBhrO,qBAYhB,WACIslE,EACQC,GAFZ,MAII0lK,YAAM3lK,EAAG,yBAA0BtlE,KAAYmzP,KAAM10P,KAF7C,sBAKO,OAT6Bw4B,QAS7B+zM,wBAAnB,WACI,MAAO,kBAGQA,iCAAnB,sBACUzlK,EAAW,IAAIy+K,MAErB,SAASlpO,eAAgB,EACzByqD,EAASptB,eAAgB,EACzBotB,EAASntB,cAAe,EAExBmtB,EAASgxF,gBAAiB,EAC1BhxF,EAAS61H,gBAAkB,WAAM,SAAKt7K,SAASozO,QAE/C3tL,EAASg2H,iBAAmB,eAC5Bh2H,EAAS81H,sBAAwB58L,KAAKu0P,eAE/BztL,GAGHylK,2BAAR,WACI,MAAO,CACH,CACIrxM,KAAM,MACNi1C,KAAM,MACNh1C,QAAS,WAAM,eAAQ6G,IAAI,wCAE/B,CACI9G,KAAM,OACNi1C,KAAM,OACNh1C,QAAS,WAAM,eAAQ6G,IAAI,oFArDnCliC,WAEAtH,SAYK+zO,qUAA8B5zM,KAN1C+2J,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,+BACVC,SCdW,2/DDiBFs1N,IAAuC1qO,mBEJhD,WAAoB0qO,yBAGb,0CAAP,WACIvsO,KAAKinJ,eAAeC,KAAK,YAAa,oBAAqBhwH,KAGxDs1M,kCAAP,WACIxsO,KAAKinJ,eAAeC,KAAK,WAAY,mBAAoBlnJ,KAAKiX,WAG3Du1N,mCAAP,WACIxsO,KAAKinJ,eAAea,MAAM,sDAxB1B9oI,0CAUH0wK,YAASvuL,MAAC,eAFFqrO,qUAAqBlwD,KALjCoT,aAAU,CACP14K,SAAU,oBACVC,SCNW,6uBDSFu1N,geEHbjwD,2EACA,OADoB98I,QACpB8sM,EADA,CAAoBhrO,qBAUhB,WAAYslE,UACR2lK,YAAM3lK,EAAG,4BAA6BtlE,KAAYg7K,GAAOr8K,YAA6BA,gBAA+BF,KAGtG,OANwBy/B,QAMxB8sM,4BAAnB,WACI,MAAO,0DAjBPzsO,OAUKysO,qUAAyBltM,KALrCqwJ,aAAU,CACP14K,SAAU,yBACVC,SCXW,wnCDcFs1N,IAAkC1qO,2eER/C8yP,2EAEA,OAFoBj1N,QAEpB6sM,EAFA,CAAoBhrO,qBAehB,WAAYslE,UACR2lK,YAAM3lK,EAAG,yBAA0BtlE,KAAYozP,GAAOz0P,YAA6BA,gBAA+BF,KAGnG,OATqB0/B,QASrB6sM,wBAAnB,WACIvsO,KAAK+Q,MAAM+7D,SAAW9sE,KAAK8sE,UAG/By/J,0CAEI,MAAO,qBADUvsO,KAAKwB,EAAEq8B,OAAO8d,QAAU,kBAAoB,6DA5BxC77C,yCAgBxB4vL,0BACAA,WAHQ68C,qUAAsB/vD,KANlCkT,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,qBACVC,SCbW,+nHDgBFs1N,IAA+B1qO,0fEAxC,WAAYglE,EAA6BC,GAAzC,MACI0lK,YAAM3lK,EAAG,yBAA0BtlE,KAAYA,KAAWrB,YAA6BA,gBAA+BF,KADjF,uBAIzC,OAPwCqgC,QAOxCv0B,sBAAIygO,kBAAG,KAAP,WACI,OAAOvsO,KAAKu1O,UAAUqf,+BAA+B50P,KAAKmiO,+EApBzDriO,WAIAnH,sCASJ+2L,WADQ68C,qUAAsBjsM,KANlCovJ,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,oBACVC,SCVW,gdDaFs1N,IAA+B1qO,+dEI5C0+B,2EAGA,OAHoBC,QAGpB+rM,EAHA,CAAoBhrO,qBAwBhB,WAAYslE,UACR2lK,YAAM3lK,EAAG,uBAAwBtmC,KAAMvgC,KAGlC,OAlB6BwgC,QAkB7B+rM,4BAAT,WACIvsO,KAAK+Q,MAAM+7D,SAAW,eACtB9sE,KAAK+Q,MAAMmhP,cAAgBlyP,KAAK60P,6BAG7BtoB,6BAAP,WACIvsO,KAAK80P,aAAaxxO,gBAAgB,SAACujD,GAAM,eAAQ7kC,IAAI,2BAGlDuqM,iCAAP,WACIvsO,KAAK+0P,iBAAiBzxO,gBAAgB,SAACujD,GAAM,eAAQ7kC,IAAI,gCAGtDuqM,0BAAP,SAAqB1lK,GACjB9kC,QAAQC,IAAI,mBACZD,QAAQC,IAAI6kC,IAGT0lK,4BAAP,SAAuB1lK,GACnB9kC,QAAQC,IAAI,qBACZD,QAAQC,IAAI6kC,IAGT0lK,8BAAP,WACIvsO,KAAK2tP,cAAc9c,eAAiB3wO,cACpCF,KAAK2tP,cAAcnvD,WAAW,SAAC33H,GAC3B9kC,QAAQC,IAAI,0BACZD,QAAQC,IAAI6kC,MAIb0lK,8BAAP,sBACIvsO,KAAKg1P,cAAc1xO,gBAAgB,SAACwjD,GAChC/kC,QAAQC,IAAI,0BACZD,QAAQC,IAAI8kC,EAAMgG,UAClBjG,EAAK91D,MAAM+7D,SAAWhG,EAAMgG,YAI7By/J,+BAAP,WACIvsO,KAAKi1P,eAAe79J,YAAc,+EAClCp3F,KAAKi1P,eAAe3xO,gBAAgB,WAChCye,QAAQC,IAAI,8BAIbuqM,gCAAP,WACIvsO,KAAKi1P,eAAehxO,0BAGjBsoN,+BAAP,WACIvsO,KAAKgyP,eAAekD,WAAa,cACjCl1P,KAAKgyP,eAAet1N,OAAS,eAC7B18B,KAAKgyP,eAAehkP,KAAO9N,YAE3BF,KAAKgyP,eAAe1uO,gBAAgB,SAACujD,GACjC9kC,QAAQC,IAAI,mCAAqC6kC,MAIlD0lK,iCAAP,WACIvsO,KAAKw8B,iBAAiBE,OAAS,iBAC/B18B,KAAKw8B,iBAAiBxuB,KAAO9N,WAC7BF,KAAKw8B,iBAAiBlZ,gBAAgB,SAACujD,GACnC9kC,QAAQC,IAAI,2CACb,WACCD,QAAQC,IAAI,6CAIbuqM,+BAAP,WACIvsO,KAAK0uP,eAAeprO,gBAAgB,SAACujD,GACjC9kC,QAAQC,IAAI,2BACZD,QAAQC,IAAI6kC,MAIb0lK,8BAAP,WACIvsO,KAAK6sE,cAAcs1J,IAAM,mCACzBniO,KAAK6sE,cAAcvpD,gBAAgB,WAC/Bye,QAAQC,IAAI,4BAIbuqM,gCAAP,WACIvsO,KAAKm1P,gBAAgB7xO,gBAAgB,SAACujD,GAClC9kC,QAAQC,IAAI6kC,MAIZ0lK,sCAAR,WACI,MAAO,CACH,CACI5/N,QAAS,EACTm3B,KAAM,WACNxR,MAAO,UACPs7D,YAAa,iBAEjB,CACIjhF,QAAS,EACTm3B,KAAM,WACNxR,MAAO,UACPs7D,YAAa,mBAKlB2+I,8BAAP,WACIvsO,KAAKo1P,cAAc9xO,gBAAgB,SAACujD,GAChC9kC,QAAQC,IAAI,0BACZD,QAAQC,IAAI6kC,+CAxJhB/mE,6CA0BH4vL,YAASvuL,MAACk0P,8BACV3lE,YAASvuL,MAACpD,2BACV2xL,YAASvuL,MAAC5F,2BACVm0L,YAASvuL,MAACm0P,4BACV5lE,YAASvuL,MAAC7D,8BACVoyL,YAASvuL,MAAC3F,gCACVk0L,YAASvuL,MAACxJ,4BACV+3L,YAASvuL,MAACjF,2BACVwzL,YAASvuL,MAACogC,6BACVmuJ,YAASvuL,MAAC1E,2BACVizL,YAASvuL,MAAC9D,OAZFkvO,qUAAoB/qM,KALhCkuJ,aAAU,CACP14K,SAAU,mBACVC,SCxBW,spJD2BFs1N,IAA6BnrO,+dErB1CwgC,2EAIA,OAJoBF,QAIpB6qM,EAJA,CAAoBhrO,qBAahB,WAAYslE,UACR2lK,YAAM3lK,EAAG,qBAAsBjlC,KAAM5hC,KAGhC,OAN2B0hC,QAM3B6qM,4BAAT,WACIvsO,KAAK+Q,MAAMi6D,OAAS,SACpBhrE,KAAK+Q,MAAMhF,KAAO,IAAIA,+CAtBtBjM,OAcKysO,qUAAkB9qM,KAL9BiuJ,aAAU,CACP14K,SAAU,iBACVC,SCdW,krMDiBFs1N,IAA2BnrO,+dEZxC+gC,0EACI,8BAA+B,IACnC,OAFoBu7I,QAEpB6uD,EAFA,CAAoBhrO,qBAWhB,WAAYslE,UACR2lK,YAAM3lK,EAAG,0BAA2B1kC,KAAMniC,KAGrC,OANgC09K,QAMhC6uD,4BAAT,aAIOA,yBAAP,SAAoB1lK,GAChB9kC,QAAQC,IAAI6kC,6CAtBZ/mE,OAWKysO,qUAAuBgpB,KALnC7lE,aAAU,CACP14K,SAAU,sBACVC,SCXW,8oCDcFs1N,IAAgCnrO,0fEGzC,WAAYylE,GAAZ,MACI2lK,YAAM3lK,EAAG,sCAAuCtlE,KAAiBA,OAAUvB,KAHrE,mBAAY,IAAI0vL,eAsB1B5oH,qBAAqB,SAACuC,GAClBA,EAAEnoD,eAAeC,MAAMC,QAAQ,CAC3BC,SAAU,QACV2e,OAAQ,WACR1e,UAAU,EACV1gB,QAAS,CACLuvE,KAAM,UACNh1C,QAAS,WACL2rC,EAAKgiL,UAAUtnO,cAxBZ,OATkC8gB,QASlCiqM,kCAAnB,SAAyC1lK,GAAzC,aACI,MAAO,CAAC,CACJ3rC,KAAMl7B,KAAKuS,GAAG,wBACdgI,WAAwB,QAAb8uD,EAAO,MAAPxC,OAAO,EAAPA,EAASptD,YAAI,eAAE6gB,cAC1Ba,QAAS,WAAM,SAAKrhB,SAAS,CAAC,yBAA0B,CAAEwgB,aAAcusC,EAAQptD,KAAK6gB,iBACtF,CACCY,KAAMl7B,KAAKuS,GAAG,0BACdgI,SAAS,EACT4gB,QAAS,WAAM,SAAKrhB,SAAS,CAAC,kCAAmC,CAAEwgB,aAAcusC,EAAQptD,KAAK6gB,iBAC/F,CACCY,KAAMl7B,KAAKuS,GAAG,4BACdgI,SAAS,EACT4gB,QAAS,WAAM,SAAKrhB,SAAS,CAAC,oCAAqC,CAAEwgB,aAAcusC,EAAQptD,KAAK6gB,4DAhCnGx6B,4CAYJ4vL,iCACAA,2BACAA,YAHQ68C,qUAAmChqM,KAL/CmtJ,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,oCACVC,SCVW,q5DDYFs1N,IAA4Cwc,+eEHrD,WAAYliL,UACR2lK,YAAM,mBAAoB3lK,IAAI7mE,YAJQw9K,iDAJrC/lK,QAII80N,qUAAwBipB,KADpC9lE,iBACY68C,IAAiCxtN,geCS9C8/J,0EAKI,yBAAyB,EAEzBh4G,kBAAoC,KACxC,OAR2BlkC,QAQ3B4pM,EARA,CAA2BhrO,qBAmBvB,WAAYslE,EAA8BC,EAC9BuC,GADZ,MAEImjK,YAAM3lK,EAAG,kCAAmCtlE,KAAiBs9K,KAAM7+K,KAF7B,sCAC9B+mE,+BAIO,OAT8BpkC,QAS9B4pM,4BAAnB,sBACIvsO,KAAKkrD,YACLlrD,KAAKkd,iBACLld,KAAK8rP,kBAEL9rP,KAAKvE,GAAGuE,KAAK0oP,2BAA2BC,uBAAuB,EAAO,SAAC7hL,GACnED,EAAK91D,MAAM63O,gBAAkB9hL,EAASrxD,YAItC82N,2BAAR,wBACIvsO,KAAKke,YAAYu3O,WAAgB,IAAIvzO,MAAuB,SAACmnD,GACzD,IAAMtC,EAAS,IAAIxlE,KAEnB,SAAOwU,SAAW8wD,EAAK91D,MAAMgF,SAC7BgxD,EAAO/sD,OAAS6sD,EAAK91D,MAAMiJ,OAC3B+sD,EAAOviB,OAASqiB,EAAK91D,MAAMyzC,OAC3BuiB,EAAO4oI,oBAA+C,IAA9B9oI,EAAK91D,MAAM4+L,eAA+B9oI,EAAK91D,MAAM4+L,gBAAiB,IAC9F5oI,EAAOzsC,aAAeusC,EAAK91D,MAAM2kP,oBAE1B7uL,EAAK6hL,2BAA2BiN,WAAW5uL,EAAQsC,SAC3D,OAAW,GAAW,GAEJ,QAArBvC,OAAKvoD,GAAGk3O,kBAAa,SAAEj3O,UAGlB+tN,sBAAT,WACIvsO,KAAK+Q,MAAMgF,SAAW0nK,SAAgB,IAAI1xK,MAC1C/L,KAAK+Q,MAAMiJ,OAASyjK,SAAgB,IAAI1xK,MACxC/L,KAAK+Q,MAAMyzC,OAAStkD,SACpBF,KAAK+Q,MAAM4+L,gBAAiB,EAC5B3vM,KAAK+Q,MAAM2kP,oBAAsB,KAEjC11P,KAAK41P,aAGArpB,iCAAT,iBACUzlK,EAAW,IAAIy+K,MACrB,SAASlpO,eAAgB,EACzByqD,EAASptB,eAAgB,EACzBotB,EAASltB,aAAwB,QAATitB,OAAK3xC,YAAI,eAAEtzB,EAE5BklE,GAGFylK,0BAAT,WACIvsO,KAAKkd,kBAGAqvN,0BAAT,WACIvsO,KAAKkrD,YACLlrD,KAAKkd,kBAGDqvN,4BAAR,sBACIvsO,KAAKke,YAAY23O,YACb,IAAI3zO,MAAuB,SAAC4kD,GAAY,SAAKgvL,yBAAyBtnI,QAAQ1nD,IAC1E,SAACA,GAAY,SAAKgvL,yBAAyB1hP,IAAI0yD,MAGnDylK,sBAAR,WACQvsO,KAAKiR,YAAYqpB,eACjBt6B,KAAK+Q,MAAM2kP,qBAAuB11P,KAAKiR,YAAYqpB,eAI3DiyM,iCACIvsO,KAAKkd,2DAtGJpd,WAHAwvB,UAYAmT,oCAmBJitJ,YAASvuL,MAACkhC,OAFFkqM,qUAA+B/pM,KAL3CktJ,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,+BACVC,SC5BW,49ED8BFs1N,IAAwC1qO,0fEnBjD,WAAYglE,UACR2lK,YAAM,gBAAiB3lK,IAAI7mE,KAGxB,OAPgC4iC,QAOhC2pM,mBAAP,SAAc1lK,EAAiCC,GAC3C,OAAO9mE,KAAKQ,IAAIS,kBAAkBjB,KAAKU,eAAgB,SAAUmmE,EAAQ,CAACjmE,QAAgB,MAAPkmE,OAAO,EAAPA,EAASjmE,oBAGzF0rO,mCAAP,WACI,OAAOvsO,KAAKQ,IAAIC,iBAAiBT,KAAKU,eAAgB,2BAGnD6rO,+BAAP,WACI,OAAOvsO,KAAKQ,IAAIC,iBAAiBT,KAAKU,eAAgB,uBAGnD6rO,+BAAP,WACI,OAAOvsO,KAAKQ,IAAIC,iBAAiBT,KAAKU,eAAgB,gEAzBrD+W,QAKI80N,qUAAqB9jM,KADjCinJ,iBACY68C,IAA8BxtN,2fCMvC,WAAY8nD,GAAZ,MACI2lK,YAAM3lK,EAAG,8BAA+BtlE,KAA0BA,OAAUvB,KAHtE,mBAAY,IAAI0vL,eAc1B5oH,qBAAqB,SAACuC,GAClBA,EAAEnoD,eAAeC,MAAMC,QAAQ,CAC3BC,SAAU,QACV2e,OAAQ,WACR1e,UAAU,EACV1gB,QAAS,CACLuvE,KAAM,UACNh1C,QAAS,WACL2rC,EAAKgiL,UAAUtnO,cAhB/B,OAP6CyhB,QAO7CspM,gCAAW1lK,GACHA,EAAEptD,KAAK9M,SAAW3M,KAAK8Z,SAAS,CAAC,iCAAkC+sD,EAAEptD,KAAK9M,WAGlF4/N,oCAAe1lK,GACX,OAAOA,EAAY,aAAe,qDArBjC/mE,0CAUJ4vL,YADQ68C,qUAA2BvpM,KANvC0sJ,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,2BACVC,SCRW,sxDDWFs1N,IAAoCwc,geEDjDpkN,2EAYA,OAZoBL,QAYpBioM,EAZA,CAAoBhrO,qBAuBhB,WAAYslE,EACAC,EACAuC,GAFZ,MAGImjK,YAAM3lK,EAAG,8BAA+BtlE,KAAYojC,KAAM3kC,KAFlD,oCACA+mE,4BAIO,OAV0BziC,QAU1BioM,4BAAnB,WACIvsO,KAAK8rP,kBACL9rP,KAAK+1P,kBACL/1P,KAAKg2P,cACLh2P,KAAKi2P,cAELj2P,KAAK41P,aAGUrpB,iCAAnB,iBACUzlK,EAAW,IAAIy+K,MACrB,SAASlpO,eAAgB,EACzByqD,EAASptB,eAAgB,EACzBotB,EAASltB,aAAwB,QAATitB,OAAK3xC,YAAI,eAAEtzB,EAE5BklE,GAGQylK,0BAAnB,WACIvsO,KAAKkd,kBAGUqvN,0BAAnB,WACIvsO,KAAK+Q,MAAMmlP,YAAS,EACpBl2P,KAAK+Q,MAAMolP,gBAAa,EACxBn2P,KAAK+Q,MAAMmjE,YAAS,EACpBl0E,KAAK+Q,MAAMgF,cAAW,EACtB/V,KAAK+Q,MAAMiJ,YAAS,EACpBha,KAAKkd,kBAGFqvN,gCAAP,WACIvsO,KAAKkd,kBAGFqvN,6BAAP,SAAwB1lK,KACP,MAARA,OAAQ,EAARA,EAAUr0D,SAEfxS,KAAK+Q,MAAMgF,SAAW,IAAIhK,KAAK86D,EAASr0D,MAAMijC,SAAS,EAAG,EAAG,MAG1D82L,2BAAP,SAAsB1lK,KACP,MAANA,OAAM,EAANA,EAAQr0D,SAEbxS,KAAK+Q,MAAMiJ,OAAS,IAAIjO,KAAK86D,EAAOr0D,MAAMijC,SAAS,GAAI,GAAI,GAAI,QAG3D82L,4BAAR,sBACIvsO,KAAKke,YAAY23O,YAAiB,IAAI3zO,MAAuB,SAAC4kD,GAAY,SAAKgvL,yBAAyBtnI,QAAQ1nD,IAAU,SAACA,GAAY,SAAKgvL,yBAAyB1hP,IAAI0yD,MAGrKylK,2BAAR,sBACI,GAAKvsO,KAAK+Q,MAAM2kP,oBAAhB,CAKA,IAAM5uL,EAAS,IAAIvlE,KACnBulE,EAAOxsC,aAAet6B,KAAK+Q,MAAM2kP,oBACjC5uL,EAAO1jC,WAAapjC,KAAK+Q,MAAMmlP,OAC/BpvL,EAAOqvL,WAAan2P,KAAK+Q,MAAMolP,WAC/BrvL,EAAOoN,OAASl0E,KAAK+Q,MAAMmjE,OAC3BpN,EAAO/wD,SAAW/V,KAAK+Q,MAAMgF,SAC7B+wD,EAAO9sD,OAASha,KAAK+Q,MAAMiJ,OAE3Bha,KAAKke,YAAYk4O,SAAc,IAAIl0O,MAAuB,SAACmnD,GAAY,SAAKgtL,sBAAsB/3O,OAAOwoD,EAAQuC,SAAU,OAAW,GAAW,QAZ7IrpE,KAAKke,YAAYk4O,cAAc,GAe/B7pB,4BAAR,sBACIvsO,KAAKvE,GAAGuE,KAAKq2P,sBAAsBC,0BAA0B,EAAO,SAACxvL,GACjED,EAAK91D,MAAMwlP,YAAczvL,EAASxxD,QAIlCi3N,wBAAR,sBACIvsO,KAAKvE,GAAGuE,KAAKq2P,sBAAsBG,sBAAsB,EAAO,SAAC1vL,GAC7DD,EAAK91D,MAAM0lP,QAAU3vL,EAASxxD,QAI9Bi3N,wBAAR,sBACIvsO,KAAKvE,GAAGuE,KAAKq2P,sBAAsBK,sBAAsB,EAAO,SAAC5vL,GAC7DD,EAAK91D,MAAM4lP,QAAU7vL,EAASxxD,QAI9Bi3N,sBAAR,WACQvsO,KAAKiR,YAAYqpB,eACjBt6B,KAAK+Q,MAAM2kP,qBAAuB11P,KAAKiR,YAAYqpB,aACnDt6B,KAAK42P,wBAIbrqB,iCACIvsO,KAAKkd,2DAlIJpd,WAGA2iC,UACAK,oCAwBJ4sJ,YAASvuL,MAACujC,OAFF6nM,qUAA2B/nM,KANvCkrJ,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,2BACVC,SC1BW,qnGD6BFs1N,IAAoC1qO,2eEtBjDg1P,2EAMA,OANoB9xN,QAMpBwnM,EANA,CAAoBhrO,qBAehB,WAAYslE,EAAsBC,UAC9B0lK,YAAM3lK,EAAG,0BAA2BtlE,KAAes1P,GAAO/vL,EAAuB5mE,cAA4BF,KAGxG,OANgC+kC,QAMhCwnM,2BAAT,WACIvsO,KAAK82P,WACL92P,KAAK+2P,eACL/2P,KAAKg3P,kBACLh3P,KAAK8qE,YAGFyhK,qBAAP,WACIlxB,UAAU47C,UAAUC,UAAyC,IAA/Bl3P,KAAK+Q,MAAM2oB,gBAAwB15B,KAAK+Q,MAAMomP,KAAOn3P,KAAK+Q,MAAMu2I,UAC9FtnJ,KAAKoT,GAAG2kB,YAAY/3B,KAAKuS,GAAG,mBAGxBg6N,qBAAR,iBACI,GAAe,QAAX1lK,OAAK50D,cAAM,eAAEklP,KAAM,CACnB,IAAMrwL,EAAOrsC,KAAK44E,MAAMrzG,KAAKiS,OAAOklP,MACpCn3P,KAAK+Q,MAAMomP,KAAO18N,KAAKC,UAAUosC,OAAM,EAAW,KAIlDylK,yBAAR,iBACI,GAAe,QAAX1lK,OAAK50D,cAAM,eAAEq1I,SACb,IACI,IAAMxgF,EAAOrsC,KAAK44E,MAAMrzG,KAAKiS,OAAOq1I,UACpCtnJ,KAAK+Q,MAAMu2I,SAAW7sH,KAAKC,UAAUosC,OAAM,EAAW,SACjDuC,GACLrpE,KAAK+Q,MAAMu2I,SAAWtnJ,KAAKiS,OAAOq1I,WAKtCilF,4BAAR,kBACmB,QAAX1lK,OAAK50D,cAAM,eAAEmlP,eACbp3P,KAAK+Q,MAAMqmP,YAAcp3P,KAAKiS,OAAOmlP,YACjCp3P,KAAK+Q,MAAMqmP,YAAY99M,WAAW,OAAQt5C,KAAK+Q,MAAMqmP,YAAcp3P,KAAK+Q,MAAMqmP,YAAYh6N,UAAU,IACxGp9B,KAAK+Q,MAAMqmP,YAAcp3P,KAAK+Q,MAAMqmP,YAAY37M,MAAM,KAAK1C,KAAK,UAIhEwzL,qBAAR,WACIvsO,KAAK+Q,MAAM0sE,KAAO,GAElBz9E,KAASiS,OAAOklP,MACZn3P,KAAK+Q,MAAM0sE,KAAK5nE,KAAK,CACjB4jB,MAAO,EACPyB,KAAMl7B,KAAKuS,GAAG,WACd+B,KAAM,SAGVtU,KAAK+Q,MAAM2oB,gBAAkB,GAE7B15B,KAAK+Q,MAAM2oB,gBAAkB,EAGjC15B,KAAK+Q,MAAM0sE,KAAK5nE,KAAK,CACjB4jB,MAAO,EACPyB,KAAMl7B,KAAKuS,GAAG,eACd+B,KAAM,uDAhFTxU,WAEAgjC,MAgBIypM,qUAAuB8qB,KANnC3nE,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,sBACVC,SCjBW,opHDoBFs1N,IAAgCvxO,2fENzC,WAAY6rE,UACR2lK,YAAM,oBAAqB3lK,IAAI7mE,KAG5B,OANoC6kC,QAMpC0nM,kCAAP,SAA6B1lK,EAAgCC,GAEzD,OAAO9mE,KAAKQ,IAAIS,kBAAkBjB,KAAKU,eAAgB,wBAAyBmmE,EAAe,MAAPC,OAAO,EAAPA,EAASjmE,mBAG9F0rO,wCAAP,SAAmC1lK,GAC/B,OAAO7mE,KAAKQ,IAAIS,kBAAkBjB,KAAKU,eAAgB,8BAA+BmmE,IAGnF0lK,8BAAP,SAAyB1lK,GACrB,OAAO7mE,KAAKQ,IAAIS,kBAAkBjB,KAAKU,eAAgB,oBAAqBmmE,IAGzE0lK,mCAAP,SAA8B1lK,GAC1B,OAAO7mE,KAAKQ,IAAIS,kBAAkBjB,KAAKU,eAAgB,yBAA0BmmE,IAG9E0lK,sCAAP,WACI,OAAOvsO,KAAKQ,IAAIC,iBAAiBT,KAAKU,eAAgB,8BAGnD6rO,0CAAP,WACI,OAAOvsO,KAAKQ,IAAIC,iBAAiBT,KAAKU,eAAgB,gCAAiC,8CAjCtF+W,QAKI80N,qUAAyBrvD,KADrCwS,iBACY68C,IAAkCn9M,4eCH/CkoO,cACIt3P,iCAAqC,GACrCA,yBAA6B,GAE7BA,0BAA+B,EAC/BA,eAAmB,GACnBA,gBAAqB,qBAWrB,WAAY6mE,UACR2lK,YAAM3lK,EAAG,sCAAuCtlE,KAAY+1P,GAAOp3P,YAA6BA,gBAA+BF,KAI1H,OAR4CkqC,QAQ5CqiM,wBAAT,WACI,OAAOvsO,KAAKu3P,uBAAyB,sBAAwBv3P,KAAKuS,GAAG,8CAGtDg6N,4BAAnB,wBACIvsO,KAAK+Q,MAAMwyM,4BAA8BvjN,KAAKqkB,KAAK,0BAC9C08C,KAAK,SAACsI,EAAGtC,GAAM,SAAEjqB,UAAYiqB,EAAEjqB,UAAY,GAAI,IAC/CphC,OAAO,YACJ,OAAQ2tD,EAAE/2C,YACDpyB,WACD,OAAO2mE,EAAKyvH,iBAAiBp2L,4CAC5BA,SACD,OAAO2mE,EAAKyvH,iBAAiBp2L,0CAC5BA,cACD,OAAO2mE,EAAKyvH,iBAAiBp2L,0CAIrC,OAAO,IAEVF,KAAKu3P,yBACNv3P,KAAK+Q,MAAMwyM,4BAA8BvjN,KAAK+Q,MAAMwyM,4BAC/C7nM,OAAO,YAAK,SAAE4W,QAAUpyB,iBAEjCF,KAAK+Q,MAAMymP,2BAAsE,QAAzC1wL,OAAK/1D,MAAMwyM,4BAA4B,UAAE,eAAEjxL,MACnFtyB,KAAK+Q,MAAM2yM,oBAAsB1jN,KAAKqkB,KAAK,uBAC3CrkB,KAAK+Q,MAAMuyM,UAAYtjN,KAAKqkB,KAAK,uDAvDhCvkB,uDAsBJ4vL,WADQ68C,qUAAmCtvD,KAL/CyS,aAAU,CACP14K,SAAU,oCACVC,SCpBW,yhDDuBFs1N,IAA4C1qO,8eEFrD,WAAYglE,GAAZ,MACI2lK,YAAM3lK,EAAG,iCAAkCtlE,KAAsBA,OAAUvB,KARtE,0BAA2B,EAC3B8mE,qBAA6B,EAG5BA,qBAAqB,IAAI4oH,eACzB5oH,YAAY,IAAI4oH,eAiD1B5oH,qBAAqB,SAACuC,GAClBA,EAAEnoD,eAAeC,MAAMC,QAAQ,CAC3BC,SAAU,QACV2e,OAAQ,WACR1e,UAAU,EACV1gB,QAAS,CACLuvE,KAAM,UACNh1C,QAAS,WACL2rC,EAAKgiL,UAAUtnO,cAnDZ,OAZ6BkpB,QAY7B6hM,kCAAnB,SAAyC1lK,GAAzC,WACI,OAAG7mE,KAAK8/B,gBACG,GAGJ,CAAC,CACJ5E,KAAMl7B,KAAKuS,GAAG,wBACdgI,SAAS,EACT4gB,QAAS,WAAM,SAAK6P,oBAAoB67B,KACzC,CACC3rC,KAAMl7B,KAAKuS,GAAG,uBACdgI,SAAS,EACT4gB,QAAS,WAAM,SAAKrhB,SAAS,CAAC,0CAA2C,CAAEwgB,aAAcusC,EAAQptD,KAAK9M,YACvG,CACCuuB,KAAMl7B,KAAKuS,GAAG,0BACdgI,SAAS,EACT4gB,QAAS,WAAM,SAAKrhB,SAAS,CAAC,kCAAmC,CAAEwgB,aAAcusC,EAAQptD,KAAK9M,cAItG4/N,gCAAW1lK,IACF7mE,KAAK8/B,kBAAoB,MAAD+mC,OAAC,EAADA,EAAGptD,OAC5BzZ,KAAKgrC,oBAAoB67B,IAIjC0lK,6CAAwB1lK,GACpB,OAAOA,EAAQ4wL,YAAch6E,wBAAgC52G,EAAiC4wL,aAAa,GAAS,IAGxHlrB,gCAAW1lK,EAASC,GAChB,OAAOD,EAAQC,IAGnBylK,yCAAoB1lK,GACV,MAAoBA,EAAQptD,KAA1B4vD,EAAIvC,OAAEC,EAAOD,UACrB9mE,KAAK8Z,SAAS,CAAC,yBAA0B,CAAEwgB,aAAcysC,EAAS/4D,KAAMq7D,KAG5EkjK,4CAAuB1lK,SACnB7mE,KAAK+/B,mBAAmBve,KAAuB,QAAlBslD,OAAK5xC,KAAKC,gBAAQ,eAAEuiO,iEA9DhD53P,gDAWJ4vL,mCACAA,iCACAA,wCACAA,oCACAA,4BACAA,YANQ68C,qUAA8BjiM,KAL1ColJ,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,8BACVC,SCXW,kpGDaFs1N,IAAuCwc,geEKpDp+M,0EAGI,sBAAyC,GAMzCk8B,oBAAyC,GAEzCA,0BAAkC,IACtC,OAZ2B8wL,QAY3BprB,EAZA,CAA2BhrO,qBA4BvB,WAAYslE,EACAC,EACAuC,GAFZ,MAGImjK,YAAM3lK,EAAG,6BAA8BtlE,KAAsBopC,KAAM3qC,KAF3D,sCACA+mE,+BANZ,OAJ4C4wL,QAI5C7rP,sBAAIygO,gCAAiB,KAArB,WACI,OAAQvsO,KAAK+Q,MAAM6mP,kDASJrrB,4BAAnB,sBACIvsO,KAAKkrD,YACLlrD,KAAK63P,qBACL73P,KAAKkd,iBACLld,KAAKvE,GAAGuE,KAAK0oP,2BAA2BC,uBAAuB,EAAO,SAAC7hL,GACnED,EAAK91D,MAAM+mP,gBAAkBhxL,EAASrxD,WAE1CzV,KAAKvE,GAAGuE,KAAK+3P,yBAAyBC,6BAA6B,EAAO,SAAClxL,GACvED,EAAK91D,MAAMknP,uBAAyBnxL,EAASxxD,OAGjDtV,KAAKvE,GACDuE,KAAK+3P,yBAAyBG,iCAC9B,EACA,SAACpxL,SACGD,EAAK91D,MAAMonP,kBAAqC,QAAjB9uL,IAAS5zD,gBAAQ,QAAI,MAKvD82N,sBAAT,WACIC,YAAMthL,UAAS9sB,WACfp+B,KAAK+Q,MAAMy7O,uBAAyBxsP,KAAKwB,EAAE07B,UAAUo5J,iBAAiBp2L,8BAGjEqsO,iCAAT,iBACUzlK,EAAW,IAAIy+K,MACrB,SAASlpO,eAAgB,EACzByqD,EAASltB,aAAwB,QAATitB,OAAK3xC,YAAI,eAAEtzB,EACnCklE,EAASptB,eAAgB,EAClBotB,GAGQylK,0BAAnB,qBACkD,QAA9CljK,EAA6B,QAA7BvC,EAAmB,QAAnBD,OAAK3xC,KAAKtzB,EAAE02C,eAAO,eAAEnjB,gBAAQ,eAAEojK,uBAAe,SAAEE,SAAS,CAAE70F,IAAK,IAChE5jG,KAAKkd,kBAGUqvN,0BAAnB,WACIvsO,KAAK+Q,MAAM4+L,oBAAiB,EAC5B3vM,KAAK+Q,MAAMupB,kBAAe,EAC1Bt6B,KAAK+Q,MAAMwD,cAAW,EACtBvU,KAAK+Q,MAAMo7O,sBAAmB,EAC9BnsP,KAAK+Q,MAAMw7O,iBAAc,EACzBvsP,KAAK+Q,MAAM6mP,sBAAmB,EAC9B53P,KAAKkd,kBAGDqvN,+BAAR,WACQvsO,KAAKiR,YAAYqpB,eACjBt6B,KAAK+Q,MAAMupB,cAAgBt6B,KAAKiR,YAAYqpB,eAG5CiyM,2BAAR,wBACIvsO,KAAKke,YAAYk6O,kBAAuB,IAAIl2O,MAAuB,SAACmnD,GAChE,IAAMtC,EAAU,IAAIxlE,KACpB,SAAQouM,eAAiB9oI,EAAK91D,MAAM4+L,eACpC5oI,EAAQzsC,aAAeusC,EAAK91D,MAAMupB,aAClCysC,EAAQxyD,SAAWsyD,EAAK91D,MAAMwD,WAAarU,UAChC2mE,EAAK91D,MAAMwD,WAAarU,cAAuB,EAC1D6mE,EAAQolL,iBAAmBtlL,EAAK91D,MAAMo7O,mBAAqBjsP,UAChD2mE,EAAK91D,MAAMo7O,mBAAqBjsP,cAAuB,EAClE6mE,EAAQwlL,YAAc1lL,EAAK91D,MAAMw7O,cAAgBrsP,UACtC2mE,EAAK91D,MAAMw7O,cAAgBrsP,cAAuB,EAC7D6mE,EAAQ6wL,iBAAmB/wL,EAAK91D,MAAM6mP,iBAE/B/wL,EAAKkxL,yBAAyBM,sBAAsBtxL,EAASsC,SACrE,OAAW,GAAYrpE,KAAKs4P,mBAEH,QAA5BxxL,OAAKvoD,GAAG65O,yBAAoB,SAAE55O,UAGlC+tN,wCAAmB1lK,GACf7mE,KAAK+Q,MAAM8xE,aAAehc,GAG9B0lK,0DACIvsO,KAAKs3J,OAAOh0I,gBAAgB,SAACwjD,GACjB,MAA2CA,EAAI0wL,2BAAnBzwL,EAAeD,EAAIyxL,WACjDvxL,EAAS,IAAIzlE,KACnBylE,EAAOohB,SAAWrhB,EAClBC,EAAOg7H,eAAiB34H,EACxBrC,EAAOwxL,uBAAyB3xL,EAAK91D,MAAM8xE,aAC3Chc,EAAKprE,GAAGorE,EAAKkxL,yBAAyBU,uBAAuBzxL,IAAS,EAAO,SAACoC,GAC1EvC,EAAK6tH,kBACL7tH,EAAKzzD,GAAG2kB,YAAe8uC,EAAKt0D,GAAG,cAAa,KAAK62D,EAAK9zD,KAAI,IAAIuxD,EAAKt0D,GAAG,kBAKlFg6N,iCACIvsO,KAAKkd,2DA7IJpd,WAQAwvB,UACAopO,sCA4BJhpE,YAASvuL,MAACw3P,kBACVjpE,YAASvuL,MAAC67K,OAFFuvD,qUAA0B3hM,KANtC8kJ,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,yBACVC,SCnCW,47EDsCFs1N,IAAmC1qO,ufE9BhDupC,2EAEA,OAFoByyI,QAEpB0uD,EAFA,CAAoBhrO,qBAgBhB,WAAYslE,EAA8BC,GAA1C,MACI0lK,YAAM3lK,EAAG,yCAA0CtlE,KAAsB6pC,KAAMprC,KADzC,sCAHhCqpE,qBAAqB,IAAIqmH,iBAQhB,OAXqC7R,QAWrC0uD,kCAAnB,SAAyC1lK,GAAzC,WACI,MAAO,CAAC,CACJ3rC,KAAMl7B,KAAKuS,GAAG,wBACdgI,SAAS,EACT4gB,QAAS,WAAM,SAAK6P,oBAAoB67B,OAIhD0lK,4CAAuB1lK,SACnB7mE,KAAK+/B,mBAAmBve,KAAuB,QAAlBslD,OAAK5xC,KAAKC,gBAAQ,eAAEuiO,wBAGrDnrB,yCAAoB1lK,GACV,MAAoBA,EAAQptD,KAA1B4vD,EAAIvC,OAAEC,EAAOD,UACrB9mE,KAAK8Z,SAAS,CAAC,yBAA0B,CAAEwgB,aAAcysC,EAAS/4D,KAAMq7D,8CAxCvEvpE,WAGAwvB,sDAaJogK,sBACAA,YAASvuL,MAAC,oCACVuuL,kCACAA,WAJQ68C,qUAAsCqsB,KANlDlpE,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,uCACVC,SCfW,olEDkBFs1N,IAA+Cwc,geEF5D8P,0EAEI,sBAAyC,KAG7C,OAL2Bj7E,QAK3B2uD,EALA,CAA2BhrO,qBAiBvB,WAAYslE,EACAC,EACAuC,GAFZ,MAGImjK,YAAM3lK,EAAG,qCAAsCtlE,KAAsBs3P,KAAM74P,KAFnE,sCACA+mE,+BAIO,OAViC62G,QAUjC2uD,4BAAnB,sBACIvsO,KAAKkrD,YACLlrD,KAAKkd,iBACLld,KAAKvE,GAAGuE,KAAK+3P,yBAAyBC,6BAA6B,EAAO,SAAClxL,GACvED,EAAK91D,MAAMknP,uBAAyBnxL,EAASxxD,OAEjDtV,KAAKvE,GAAGuE,KAAK0oP,2BAA2BC,uBAAuB,EAAO,SAAC7hL,GACnED,EAAK91D,MAAM+mP,gBAAkBhxL,EAASrxD,YAIrC82N,iCAAT,iBACI,MAAO,CACHlwN,eAAe,EACfq9B,eAAe,EACfE,aAAuB,QAATitB,OAAK3xC,YAAI,eAAEtzB,IAId2qO,0BAAnB,WACIvsO,KAAKkd,kBAGUqvN,0BAAnB,WACIvsO,KAAK+Q,MAAM4+L,oBAAiB,EAC5B3vM,KAAKkd,kBAGDqvN,2BAAR,wBACUljK,EAAU,IAAI9nE,KACpB8nE,EAAQsmI,eAAiB3vM,KAAK+Q,MAAM4+L,eACpC3vM,KAAKke,YAAY23O,YAAiB,IAAI3zO,MAAuB,SAAC6kD,GAC1D,OAAOF,EAAKkxL,yBAAyBe,4BAA4BzvL,KAG/C,QAAtBvC,OAAKvoD,GAAGs3O,mBAAc,SAAEr3O,UAG5B+tN,wCAAmB1lK,GACf7mE,KAAK+Q,MAAM8xE,aAAehc,GAG9B0lK,0DACIvsO,KAAKs3J,OAAOh0I,gBAAgB,SAACwjD,GACjB,MAAiEA,EAAI0wL,2BAAzCzwL,EAAqCD,EAAIyxL,WAA7BvxL,EAAyBF,EAAIiyL,qBACvE3vL,EAAS,IAAI7nE,KACnB6nE,EAAOgf,SAAWrhB,EAClBqC,EAAO44H,eAAiB34H,EACxBD,EAAOovL,uBAAyB3xL,EAAK91D,MAAM8xE,aAC3CzZ,EAAO4vL,mBAAqBhyL,EAC5BH,EAAKprE,GAAGorE,EAAKkxL,yBAAyBkB,kBAAkB7vL,IAAS,EAAO,SAAClC,WAGrE,GAFAL,EAAK6tH,kBACL7tH,EAAKzzD,GAAG2kB,YAAe8uC,EAAKt0D,GAAG,cAAa,KAAK20D,GAAK5xD,KAAI,IAAIuxD,EAAKt0D,GAAG,aACxB,KAAb,QAA7B00D,KAAOuxL,8BAAsB,iBAAE5oP,QAAc,CAC7C,IAAMw3D,GAAQgC,EAAOovL,uBAAuB,GAC5C3xL,EAAK/sD,SAAS,CAAC,yBAA0B,CAAEwgB,aAAc8sC,GAAMz6D,QAAUqB,KAAMo5D,GAAMp5D,sDA5FhGlO,WAQAwvB,UACAopO,sCAmBJhpE,YAASvuL,MAACw3P,kBACVjpE,YAASvuL,MAACmqC,OAFFihM,qUAAkC2sB,KAN9CxpE,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,kCACVC,SC1BW,ypCD6BFs1N,IAA2C1qO,8eEpBpD,WAAYglE,UACR2lK,YAAM,aAAc3lK,IAAI7mE,KAGrB,OAN6BurC,QAM7BghM,sBAAP,WACI,OAAOvsO,KAAKQ,IAAIC,iBAAiBT,KAAKU,eAAgB,cAGnD6rO,6BAAP,SAAwB1lK,GACpB,OAAO7mE,KAAKQ,IAAIS,kBAAkBjB,KAAKU,eAAgB,mBAAoBmmE,IAGxE0lK,0BAAP,SAAqB1lK,GACjB,OAAO7mE,KAAKQ,IAAIS,kBAAkBjB,KAAKU,eAAgB,gBAAiBmmE,6CApBvEpvD,QAKI80N,qUAAkB9gM,KAD9BikJ,iBACY68C,IAA2Bn9M,geCGxC0c,2EAEA,OAF2BoG,QAE3Bq6L,EAFA,CAA2BhrO,qBAYvB,WAAYslE,EAA8BC,GAA1C,MACI0lK,YAAM3lK,EAAG,wBAAyBtlE,KAAsBuqC,KAAM9rC,KADxB,gCAIvB,OAPoBkyC,QAOpBq6L,4BAAnB,WACIvsO,KAAKkrD,YACLlrD,KAAKkd,kBAGDqvN,2BAAR,sBACIvsO,KAAKvE,GAAGuE,KAAKm5P,mBAAmBC,aAAa,EAAO,SAACtyL,GAAQ,SAAK/1D,MAAMsoP,MAAQvyL,EAAIrxD,YAGxF82N,mDACIvsO,KAAK40B,WAAY,EACjB50B,KAAKvE,GAAGuE,KAAKm5P,mBAAmBG,iBAAiB,CAAED,MAAOr5P,KAAK+Q,MAAMsoP,SAAU,EAAM,YACjFxyL,EAAK91D,MAAMsoP,MAAQvyL,EAAIrxD,SACvBoxD,EAAKjyC,WAAY,KAIzB23M,gDACIvsO,KAAK40B,WAAY,EACjB50B,KAAKvE,GAAGuE,KAAKm5P,mBAAmBI,cAAc,CAAEF,MAAOr5P,KAAK+Q,MAAMsoP,SAAU,EAAM,YAC9ExyL,EAAK91D,MAAMsoP,MAAQvyL,EAAIrxD,SACvBoxD,EAAKjyC,WAAY,8CA7CpB90B,WAIA8rC,sCAcJ8jJ,YAASvuL,MAACw3P,OADFpsB,qUAAqBtgM,KALjCyjJ,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,qBACVC,SCjBW,yrBDmBFs1N,IAA8B1qO,0fEVvC,WAAYglE,UACR2lK,YAAM,uBAAwB3lK,IAAI7mE,KAG/B,OALuCuwC,QAKvCg8L,4CAAP,SAAuC1lK,EAAwCC,GAC3E,OAAO9mE,KAAKQ,IAAIS,kBAAkBjB,KAAKU,eAAgB,kCAAmCmmE,EAAe,MAAPC,OAAO,EAAPA,EAASjmE,mBAGxG0rO,qCAAP,SAAgC1lK,GAC5B,OAAO7mE,KAAKQ,IAAIS,kBAAkBjB,KAAKU,eAAgB,2BAA4BmmE,IAG/E0lK,mCAAR,SAA+B1lK,GACjC,OAAO7mE,KAAKQ,IAAIS,kBAAkBjB,KAAKU,eAAgB,8BAA0B,EAAY,CAAE84P,uBAAwB3yL,8CAnBhHpvD,QAKI80N,qUAA4BktB,KADxC/pE,iBACY68C,IAAqCxtN,geCQlDqzB,0EACI,oBAAuC,GAEvCy0B,8BAAqC,GAKrCA,4BAAoC,IACxC,OAT2B10B,QAS3Bo6L,EATA,CAA2BhrO,qBAuBvB,WACIslE,EACQC,EACDuC,EACCtC,GAJZ,MAKIylK,YAAM3lK,EAAG,gCAAiCtlE,KAAsB6wC,GAAO20B,EAAU7mE,cAA4BF,KAHrG,wCACDgnE,cACCA,eARZ,OAF+C70B,QAE/CrmC,sBAAIygO,yBAAU,KAAd,iBACI,OAAoB,QAAX1lK,OAAK50D,cAAM,eAAEuyC,SAAUtkD,4CAWjBqsO,4BAAnB,WACIvsO,KAAKw6E,4BACLx6E,KAAK05P,uBAGUntB,wBAAnB,WACIvsO,KAAKiS,OAAOuyC,OAAStkD,WACrBF,KAAKiS,OAAOm3B,YAAc,IAAIr9B,MAIlCwgO,kDAA6B1lK,GAA7B,WACOA,EAAEr0D,MACDxS,KAAKue,GAAG,yBAAyBsqD,UAAUhC,EAAEr0D,OAAOV,UAAU,SAACu3D,GAC3DvC,EAAK/1D,MAAMg2F,qBAAuB19B,EAElCvC,EAAK/1D,MAAM4oP,yBAA2BtwL,EAAK/0D,KAAKglC,WAAW,gCACpDwtB,EAAK70D,OAAO2nP,gBAAkB15P,WAErC4mE,EAAK/1D,MAAMomP,KAAOrwL,EAAK+yL,mBACvB/yL,EAAK/1D,MAAM+oP,QAAUzwL,EAAKywL,UAG9B95P,KAAK+Q,MAAMg2F,0BAAuB,GAI1CwlI,4CAAuB1lK,SACnB7mE,KAAK+Q,MAAMomP,KAAOn3P,KAAK65P,mBAEpBhzL,EAAEr0D,OAAStS,WACVF,KAAK+Q,MAAM+oP,aAAU,EACd95P,KAAK+Q,MAAM+oP,UAClB95P,KAAK+Q,MAAM+oP,QAAyC,QAA/BhzL,OAAK/1D,MAAMg2F,4BAAoB,eAAE+yJ,UAI9DvtB,qDAAgC1lK,GAC5B,GAAKA,EAEL,OAAUA,EAAKvyD,KAAI,IAAIuyD,EAAKuhB,UAGhCmkJ,kDAA6B1lK,GACzB7mE,KAAK+Q,MAAMgpP,WAAalzL,GAG5B0lK,8DACSvsO,KAAK6nJ,WAIV7nJ,KAAK2rH,wBAAwB3rH,KAAKg4B,iBAAiBrD,KAAK,SAACmyC,GACrD,GAAIA,EAAS,CACT,IAAMuC,EAAS,IAAI9nE,KACnB8nE,EAAOuwL,eAAiB/yL,EAAK50D,OAAO2nP,eACpCvwL,EAAOa,uBAAyBrD,EAAK50D,OAAOi4D,uBAC5Cb,EAAO/0D,KAAOuyD,EAAK50D,OAAOqC,KAC1B+0D,EAAOukB,YAAc/mB,EAAK50D,OAAO27E,YACjCvkB,EAAOywL,QAAUjzL,EAAK91D,MAAM+oP,QAC5BzwL,EAAO8tL,KAAOtwL,EAAK91D,MAAMomP,KACzB9tL,EAAO2wL,OAASnzL,EAAK91D,MAAMipP,OAC3B3wL,EAAOswL,yBAA2B9yL,EAAK91D,MAAM4oP,yBAE7CtwL,EAAO4wL,aAAepzL,EAAK91D,MAAMgpP,WAAW3jO,IAAI,YAAK,SAAEzpB,UAEvDk6D,EAAKprE,GACDorE,EAAK1mD,SAAS+5O,yBAAyB7wL,IACvC,EACA,SAACtC,GACGF,EAAKzzD,GAAG2kB,YAAYgvC,EAASzzD,iBAC7BuzD,EAAK3zD,kBAAkB6zD,EAAS90D,OAAQ1Q,MACxCslE,EAAKtxC,aAET,SAACwxC,GACGF,EAAKzzD,GAAGC,YAAY0zD,EAASzzD,iBAEU,mBAApCyzD,EAASxqC,0BACRsqC,EAAK3zD,kBAAkB6zD,EAAS90D,OAAQ1Q,MACxCslE,EAAKtxC,mBAQ7Bg3M,sCACI,OAAOvsO,KAAKiS,OAAOuyC,aACVtkD,UACD,MAAO,kBACNA,aACD,MAAO,gBACNA,aACD,MAAO,wBACNA,WACD,MAAO,YAIXqsO,oBAAR,iBACI,SAAyB,QAArB1lK,OAAK91D,MAAMgpP,kBAAU,eAAEnqP,UACvB5P,KAAKoT,GAAGC,YAAYrT,KAAKuS,GAAG,2BACrB,IAMPg6N,gCAAR,wBACIvsO,KAAK+Q,MAAMwyM,4BAA8BvjN,KAAKqkB,KAAK,uCAC9C3I,OAAO,YACJ,OAAQ2tD,EAAE/2C,YACDpyB,WACD,OAAO2mE,EAAKyvH,iBAAiBp2L,4CAC5BA,SACD,OAAO2mE,EAAKyvH,iBAAiBp2L,0CAC5BA,cACD,OAAO2mE,EAAKyvH,iBAAiBp2L,+CAC5BA,iBACD,OAAO,UAEP,OAAO,KAIvBF,KAAKiS,OAAO2nP,eAA0D,QAAzC9yL,OAAK/1D,MAAMwyM,4BAA4B,UAAE,eAAEjxL,OAGpEi6M,sCAAR,sBACIvsO,KAAKke,YAAYosD,sBAA2B,IAAIpoD,MAAuB,SAAC4kD,GACpE,SAAK8T,6BAA6B4zC,QAAQ1nD,MAI1CylK,6BAAR,uBACI,GAAGvsO,KAAK+Q,MAAM4oP,yBACV,MAAO,GAGX,OAAQ35P,KAAKiS,OAAO2nP,qBACX15P,WACD,OAAsC,QAA/B2mE,OAAK91D,MAAMg2F,4BAAoB,eAAEj6B,cACvC5sE,iBACD,OAAsC,QAA/B4mE,OAAK/1D,MAAMg2F,4BAAoB,eAAEspJ,qBACvCnwP,cACD,OAAsC,QAA/BmpE,OAAKt4D,MAAMg2F,4BAAoB,eAAEwpJ,kBACvCrwP,SACD,OAAsC,QAA/B6mE,OAAKh2D,MAAMg2F,4BAAoB,eAAEupJ,gBAExC,kDAnMPxwP,WASAoqB,UAGAvxB,aAJA01C,MAuBIk+L,qUAA6B97L,KANzCi/I,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,4BACVC,SC9BW,21LDiCFs1N,IAAsCvxO,4eEjBnD05C,0EAIW,kBAAuC,GAIvCmyB,kBAA8C,KACzD,OAT2BlxB,QAS3B42L,EATA,CAA2BhrO,qBAoBvB,WAAYslE,EACAC,EACAuC,GAFZ,MAGImjK,YAAM3lK,EAAG,oCAAqCtlE,KAAYmzC,KAAM10C,KAFxD,gCACA+mE,mCAIO,OATgCpxB,QAShC42L,4BAAnB,WACIvsO,KAAKkd,kBAGAqvN,8BAAT,sBACIvsO,KAAKvE,GAAGuE,KAAKspP,qBAAqBvkB,6BAA6B,EAAO,SAACj+J,GACnED,EAAK91D,MAAM8S,UAAYijD,EAASrxD,WAGpCzV,KAAKm6P,uBAGU5tB,kCAAnB,SAAyC1lK,EACrCC,EAA0CuC,GAEtCvC,IAAuBvlE,MACvBvB,KAAKkd,kBAIJqvN,iCAAT,sBACI,MAAO,CACHlwN,eAAe,EACfq9B,eAAe,EACfE,aAAc,iBAAM,OAA6B,QAA7BktB,IAAKszL,gCAAwB,eAAEx4P,KAIlD2qO,0BAAT,WACIvsO,KAAKkd,kBAGAqvN,0BAAT,WACIvsO,KAAK+Q,MAAM6R,SAAW5iB,KAAK+Q,MAAM84O,UAAY7pP,KAAK+Q,MAAM07D,gBAAa,EACrEzsE,KAAK+Q,MAAM09D,SAAW,GACtBzuE,KAAKkd,kBAGTqvN,iDACUzlK,EAAS,IAAIvlE,KACnBulE,EAAOlkD,SAAW5iB,KAAK+Q,MAAM6R,SAC7BkkD,EAAO+iL,UAAY7pP,KAAK+Q,MAAM84O,UAC9B/iL,EAAO8yL,eAAiB55P,KAAK+Q,MAAM6oP,eACnC9yL,EAAO2H,SAAWzuE,KAAK+Q,MAAM09D,SAC7B3H,EAAO2F,WAAazsE,KAAK+Q,MAAM07D,WAE/BzsE,KAAKke,YAAYm8O,uBAA4B,IAAIn4O,MAAuB,SAACmnD,GACrE,SAAKixL,6BAA6BC,gCAAgCzzL,EAAQuC,MAG1EkjK,gCAAR,sBACIvsO,KAAK+Q,MAAMypP,oCAAsCx6P,KAAKqkB,KAAK,uCACtD08C,KAAK,SAAC+F,EAAGuC,GAAM,SAAEvsB,UAAYusB,EAAEvsB,UAAY,GAAI,IAC/CphC,OAAO,YACJ,OAAQorD,EAAEx0C,YACDpyB,WACD,OAAO2mE,EAAKyvH,iBAAiBp2L,4CAC5BA,SACD,OAAO2mE,EAAKyvH,iBAAiBp2L,0CAC5BA,cACD,OAAO2mE,EAAKyvH,iBAAiBp2L,+CAC5BA,iBACD,OAAO,UAEP,OAAO,+CAvGtBJ,WAOA6vB,UADA0e,wDAyBJqhJ,YAASvuL,MAAC,+BADForO,qUAAiCz5L,KAN7C48I,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,iCACVC,SC9BW,koGDiCFs1N,IAA0C1qO,0fExBnD,WAAYglE,UACR2lK,YAAM,MAAO3lK,IAAI7mE,KAGd,OALsB+rC,QAKtBwgM,mBAAP,SAAc1lK,EAAmBC,GAC7B,OAAO9mE,KAAKQ,IAAIS,kBAAkBjB,KAAKU,eAAgB,SAAUmmE,EAAe,MAAPC,OAAO,EAAPA,EAASjmE,mBAG/E0rO,2BAAP,WACI,OAAOvsO,KAAKQ,IAAIC,iBAAiBT,KAAKU,eAAgB,4DAdrD+W,QAII80N,qUAAW75L,KADvBg9I,iBACY68C,IAAoBxtN,geCEjC04B,2EAOA,OAPoBgjN,QAOpBluB,EAPA,CAAoBhrO,qBAgBhB,WAAYslE,EACAC,GADZ,MAEI0lK,YAAM3lK,EAAG,gBAAiBtlE,KAAYk2C,KAAMz3C,KADpC,yBAIO,OAPYy6P,QAOZluB,4BAAnB,WACIvsO,KAAK+Q,MAAMolG,WAAan2G,KAAKiR,YAAYklG,WACrCn2G,KAAKiR,YAAYypP,WACjB16P,KAAK+Q,MAAM2pP,UAAY16P,KAAKiR,YAAYypP,UAE5C16P,KAAKqS,oBACLrS,KAAK26P,kBACL36P,KAAK46P,oBAGOruB,qBAAhB,WACI,IAAI1lK,EAAQ7mE,KAAKuS,GAAG,WAEpB,OAAIvS,KAAK+Q,MAAMolG,aACXtvC,EAAWA,EAAK,KAAK7mE,KAAK+Q,MAAMolG,YAGhCn2G,KAAK+Q,MAAM2pP,WACX7zL,EAAWA,EAAK,MAAM7mE,KAAK+Q,MAAM2pP,UAG9B7zL,GAGJ0lK,wBAAP,SAAmB1lK,GACf7mE,KAAK+Q,MAAMomP,KAAU,MAAHtwL,OAAG,EAAHA,EAAKswL,MAGpB5qB,oBAAP,WACIvsO,KAAK26P,mBAGDpuB,4BAAR,sBACUzlK,EAAS,IAAIvlE,KACnBulE,EAAO+tF,gBAAkBx9J,GAAC6J,UAAclB,KAAK+Q,MAAM2pP,eAAmC,GAAtB16P,KAAK+Q,MAAM2pP,SAC3E5zL,EAAO+zL,kBAAoB76P,KAAK+Q,MAAMolG,WACtCrvC,EAAO9tD,MAAQhZ,KAAK+Q,MAAMiI,MAAQhZ,KAAK+Q,MAAMiI,MAAQ9Y,aAErDF,KAAKke,YAAY48O,KAAU,IAAI54O,MAAwB,SAACmnD,GACpD,SAAK0xL,YAAYz8O,OAAOwoD,EAAQuC,SAAU,OAAW,GAAW,IAGhEkjK,6BAAR,sBACIvsO,KAAKvE,GAAGuE,KAAK+6P,YAAYC,kBAAkB,EAAO,SAACl0L,GAC/CD,EAAK91D,MAAMkqP,YAAcn0L,EAASxxD,iDAzErCxV,WAEAmjL,MAoBIspD,qUAAa2uB,KANzBxrE,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,WACVC,SCrBW,igFDwBFs1N,IAAsB1qO,wFEsC7B21C,GAAiB,CAEnB,CACIy4I,KAAM,OAAQ/1K,UAAW6R,GACzBqzL,SAAU,CACN,CAAEnvB,KAAM,UAAW/1K,UAAWuR,IAC9B,CAAEwkK,KAAM,UAAW/1K,UAAWoS,IAC9B,CAAE2jK,KAAM,UAAW/1K,UAAWwS,IAC9B,CAAEujK,KAAM,aAAc/1K,UAAWkoB,IACjC,CAAE6tJ,KAAM,WAAY/1K,UAAW8S,IAC/B,CAAEijK,KAAM,QAAS/1K,UAAWmT,IAC5B,CAAE4iK,KAAM,OAAQ/1K,UAAWmX,IAC3B,CAAE4+J,KAAM,QAAS/1K,UAAWglB,IAC5B,CAAE+wJ,KAAM,gBAAiB/1K,UAAW6kB,IACpC,CAAEkxJ,KAAM,gCAAiC/1K,UAAW0kB,IACpD,CAAEqxJ,KAAM,+BAAgC/1K,UAAWilB,IACnD,CAAE8wJ,KAAM,WAAY/1K,UAAWihP,IAC/B,CAAElrE,KAAM,gBAAiB/1K,UAAWgd,IACpC,CAAE+4J,KAAM,UAAW/1K,UAAW4lK,IAC9B,CAAEmQ,KAAM,QAAS/1K,UAAW+nB,MAIpC,CACIguJ,KAAM,SAAU/1K,UAAWmF,GAC3B+/L,SAAU,CACN,CAAEnvB,KAAM,QAAS/1K,UAAWiU,IAC5B,CAAE8hK,KAAM,cAAe/1K,UAAWmU,IAClC,CAAE4hK,KAAM,YAAa/1K,UAAW8O,IAChC,CAAEinK,KAAM,SAAU/1K,UAAW0U,IAC7B,CAAEqhK,KAAM,iBAAkB/1K,UAAW6U,IACrC,CAAEkhK,KAAM,YAAa/1K,UAAW0E,IAChC,CAAEqxK,KAAM,aAAc/1K,UAAWwK,IACjC,CAAEurK,KAAM,iBAAkB/1K,UAAWgL,GAAyBwpL,YAAa,CAAChmL,OAC5E,CAAEunK,KAAM,wBAAyB/1K,UAAWsL,IAC5C,CAAEyqK,KAAM,mBAAoB/1K,UAAW4L,IACvC,CAAEmqK,KAAM,kBAAmB/1K,UAAWkM,IACtC,CAAE6pK,KAAM,WAAY/1K,UAAWiR,IAC/B,CAAE8kK,KAAM,UAAW/1K,UAAWuR,MAGtC,CACIwkK,KAAM,QAAS/1K,UAAWwF,GAC1B0/L,SAAU7nK,kBAEHj9C,OAAc,CACb,CAAE21L,KAAM,iBAAkB/1K,UAAWwM,GAAyBgoL,YAAa,CAAChmL,MAAawnK,OAAQ,UACjG,CAAED,KAAM,OAAQ/1K,UAAWmiK,GAAyB5iK,KAAM,CAAE02K,KAAM,QAAUue,YAAa,CAAChmL,UAAe,CAC7G,CACIunK,KAAM,UACNmvB,YAAU9kN,OAAc,CACpB,CACI21L,KAAM,8BACN/1K,UAAWuV,GACXhW,KAAM,CAAE02K,KAAM,+BAAiCue,YAAa,CAAChmL,OAEjE,CACIunK,KAAM,uBACN/1K,UAAWwc,GACXjd,KAAM,CAAE02K,KAAM,wBAA0Bue,YAAa,CAAChmL,OAE1D,CACIunK,KAAM,4BACN/1K,UAAWwW,GACXjX,KAAM,CAAE02K,KAAM,oBAAsBue,YAAa,CAAChmL,MAAawnK,OAAQ,UAE3E,CACID,KAAM,uBACN/1K,UAAWuP,GACXhQ,KAAM,CAAE02K,KAAM,wBAA0Bue,YAAa,CAAChmL,OAE1D,CACIunK,KAAM,+BACN/1K,UAAW2P,GACXpQ,KAAM,CAAE02K,KAAM,uBAAyBue,YAAa,CAAChmL,MAAawnK,OAAQ,UAE9E,CACID,KAAM,yBACN/1K,UAAWmQ,GACX5Q,KAAM,CAAE02K,KAAM,0BAA4Bue,YAAa,CAAChmL,OAE5D,CACIunK,KAAM,iCACN/1K,UAAW6Q,GACXtR,KAAM,CAAE02K,KAAM,yBAA2Bue,YAAa,CAAChmL,MAAawnK,OAAQ,UAEhF,CACID,KAAM,0BACN/1K,UAAWo9B,GACX79B,KAAM,CAAE02K,KAAM,2BAA6Bue,YAAa,CAAChmL,OAE7D,CACIunK,KAAM,iCACN/1K,UAAWo0B,GACX70B,KAAM,CAAE02K,KAAM,yBAA2Bue,YAAa,CAAChmL,MAAawnK,OAAQ,UAEhF,CACID,KAAM,iBACN/1K,UAAWniB,GACX0hB,KAAM,CAAE02K,KAAM,kBAAoBue,YAAa,CAAChmL,OAEpD,CACIunK,KAAM,2BACN/1K,UAAWkhP,GACX3hP,KAAM,CAAE02K,KAAM,4BAA8Bue,YAAa,CAAChmL,OAE9D,CACIunK,KAAM,mBACN/1K,UAAWgpB,GACXzpB,KAAM,CAAE02K,KAAM,mBAAqBue,YAAa,CAAChmL,OAErD,CACIunK,KAAM,2BAA4B/1K,UAAW4qB,GAAyB4pK,YAAa,CAAChmL,MAAawnK,OAAQ,UAE7G,CACID,KAAM,cACN/1K,UAAW+W,GACXxX,KAAM,CAAE02K,KAAM,eAAiBue,YAAa,CAAChmL,OAEjD,CACIunK,KAAM,qBACN/1K,UAAW2wB,GACXpxB,KAAM,CAAE02K,KAAM,sBAAwBue,YAAa,CAAChmL,OAExD,CACIunK,KAAM,uBACN/1K,UAAWmhP,GACX5hP,KAAM,CAAE02K,KAAM,wBAA0Bue,YAAa,CAAChmL,OAE1D,CACIunK,KAAM,aACN/1K,UAAWsX,GACX/X,KAAM,CAAE02K,KAAM,cAAgBue,YAAa,CAAChmL,OAEhD,CAAEunK,KAAM,OAAQ/1K,UAAW29B,GAAe62J,YAAa,CAAChmL,aAI7D,SAActxB,kBAA8Bg3M,mBAE5C,SAAch3M,kBAA8Bi3M,mBAIvD,CACIpe,KAAM,QAAS/1K,UAAWmF,GAC1B+/L,UAAU,SAAchoN,kBAA8B+2M,wBAG1D,CACIle,KAAM,GACNqrE,WAAYlkQ,kBAA8B82M,oBACpC,UAAS,SAAc,CAAC,CAAEje,KAAM74L,kBAA8B82M,uBAAwB,GAAGje,KACzF,eACNsrE,UAAW,QAEf,CACItrE,KAAM,KACN/1K,UAAW0E,GACXnF,KAAM,CACF4kO,YAAa,kDAYZ,4UAAgBpmM,KAP5By3I,YAAS,CACNk7D,QAAS,CAACzzO,cAAqBqgC,GAAQ,CACnCgkN,oBAAqB,SACrBC,uBAAwB,YAE5BrvB,QAAS,CAACj1N,UAEDq1N,8CC/NT,wCAAYD,GAER,IAAI1lK,EAAY,IAAItlE,KACpBslE,EAAU/wC,QAAUy2M,EAAM/4H,SAAW+4H,EAAMxxM,WAC3C8rC,EAAU74D,KAAOu+N,EAAMtzM,KACvB4tC,EAAU60L,WAAanvB,EAAM4T,MAI7B,IAAIr5K,EAAQpnB,SAASw6J,YAAY,SAQjC,GAPApzI,EAAM60L,aAAkB90L,EAAU/wC,QAClCgxC,EAAMqzI,UAAU,gBAAgB,GAAM,GACtCz6J,SAAS06J,cAActzI,GAEvByiH,mBAA2B1iH,GAGtBiwH,aACD,cAAQt3I,MAAM+sL,GACPA,EAIXxqM,QAAQyd,MAAM+sL,GAGd,IAAIljK,EAAWjrE,SAAgBrF,OAC/B8tE,EAAU+0L,OAASvyL,EAASi2K,OAC5Bz4K,EAAUg1L,WAAexyL,EAASuqI,WAAoBvqI,EAASuqI,WAAa,IAAM,IAAnC,IAC/C/sI,EAAUi1L,QAAUzyL,EAASg2K,QAC7Bx4K,EAAUk1L,eAAiB1yL,EAAS2yL,gBACpCn1L,EAAU2W,GAAKnU,EAAS7/C,GACxBq9C,EAAUo1L,UAAY5yL,EAAS6yL,WAGrB99P,SAAgBqZ,MACtBxW,kBAAkB,SAAU,qBAAsB4lE,GAAW/0D,UAAU,YACvD1T,SAAgB9D,OACtBwf,SAAS,CAAC,sBACpBqiP,QAAQC,aAAa,KAAM,KAAM,wBAxChC5vB,qUAAgB5zL,KAD5B82I,iBACY88C,MCDAryL,GAAc,IAAIu1I,iBAA4B,yHCD9C1vL,WAAgB,yCAAxB0vL,WADQ88C,qUAAelyL,KAL3Bo1I,aAAU,CACP14K,SAAU,aACVC,SCJW,gKDOFu1N,4CE+CT,WAAmBD,iBAxBVvsO,sBAA2B,EAC3BA,qBAA0B,EAC1BA,0BAA+B,EAC/BA,wBAA6B,EAI5BA,yBAAsB,IAAI0vL,eAC1B1vL,iBAAc,IAAI0vL,eAClB1vL,2BAAwB,IAAI0vL,eAY9B1vL,eAAW,EApCnB,6BAAawsO,4BAAa,KAM1B,WACI,OAAOxsO,KAAKq8P,oBAPhB,SAA2B9vB,GACnBl1O,aAAck1O,KAElBvsO,KAAKq8P,eAAiB9vB,EACtBvsO,KAAKs8P,oBAAoB96O,KAAK+qN,qCAMlCzgO,sBAAa0gO,sBAAO,KAApB,SAAqBD,GACjBvsO,KAAKu8P,SAAWhwB,EAChBvsO,KAAKw8P,iDAiBT1wP,sBAAI0gO,uBAAQ,KAAZ,WACI,IAAMD,EAAYvsO,KAAK+4B,MAAQ/4B,KAAK+4B,KAAK5D,UAAcn1B,KAAKy8P,WAAaz8P,KAAKy8P,UAAUtnO,SACxF,OAAIo3M,IAAaA,EAASoW,qBAAwBpW,EAASqW,0BACpDrW,mCASXC,kDACI/uM,WAAW,WACP8uM,EAAK50L,eAAgB,GACtB,KACH33C,KAAKy8P,WAAaz8P,KAAKy8P,UAAUtnO,SAASunO,mBAC1C18P,KAAKw8P,gBACLx8P,KAAKg7B,UAAYh7B,KAAKg7B,SAASC,UAC/Bj7B,KAAK28P,kBAAoB38P,KAAKwuK,eAGlCg+D,iCAAYD,GACRvsO,KAAK48P,YAAYp7O,KAAK+qN,GACtBvsO,KAAKs8P,oBAAoB96O,KAAK+qN,EAAMjuM,WAChCiuM,EAAMjuM,WAAat+B,KAAK28P,oBACxB38P,KAAKy8P,WAAaz8P,KAAKy8P,UAAUtnO,SAAS8F,UAC1Cj7B,KAAK28P,kBAAoBpwB,EAAMjuM,YAIvCkuM,yCAAoBD,EAAO1lK,GACnB0lK,GAAOA,EAAM55J,kBACjB3yE,KAAK68P,sBAAsBr7O,KAAKqlD,IAGpC2lK,qCACQxsO,KAAK+4B,KAAM/4B,KAAK+4B,KAAKxe,QAAUva,KAAKu8P,SAC/Bv8P,KAAKy8P,YAAWz8P,KAAKy8P,UAAUliP,QAAUva,KAAKu8P,WAG3D/vB,+CACIxsO,KAAK+4B,KAAK5D,SAASugB,OAAO,gBAAiB,GAC3C11C,KAAKg7B,UAAYh7B,KAAKg7B,SAASC,oDAtF9B98B,uCAWJuxL,+BAGAA,yBAUAA,iCAKAA,gCACAA,qCACAA,mCACAA,kCACAA,kCACAA,qCAEAA,8BACAA,wCACAA,uBAEAA,YAASvuL,MAAC,2BACVuuL,YAASvuL,MAAC,gBAhCFqrO,qUAAa5xL,KALzB80I,aAAU,CACP14K,SAAU,WACVC,SCPW,i3DDUFu1N,gCEgBT,WAAmBD,EACP1lK,EACAC,EACDuC,GAHQrpE,wBACPA,wBACAA,uBACDA,cAVXA,oBAAsC,GAEtCA,0BAAsB,EAGdA,oBAAiC,GAQzC,kDACIA,KAAKmiP,gBAAkBniP,KAAK+5M,iBAAiBnQ,UAAUi5C,gBACvD7iP,KAAK8sC,eAAej3B,KAChB7V,KAAKykP,gBAAgBwC,UAAUn1O,UAAU,YAAY,OAACy6N,EAAKnkJ,SAAWvhB,IAAappC,WAAW,WAAM,SAAKq/N,gBAE7G98P,KAAKgjP,eAAiBhjP,KAAK+5M,iBAAiBkpC,oBAExCjjP,KAAKi6O,OAAOn8M,YACZ99B,KAAK+8P,WAAa,UACf/8P,KAASi6O,OAAOpkC,WACnB71M,KAAK+8P,WAAa,SACX/8P,KAAKi6O,OAAOl8M,aACnB/9B,KAAK+8P,WAAa,UAGtB/8P,KAAKmjO,YAAcnjO,KAAKi6O,OAAO9W,cAC/BnjO,KAAKi6O,OAAO+iB,iBAGhBxwB,wCAAmBD,GACfA,GAAKA,EAAE55J,iBAAmB45J,EAAE55J,kBAC5B3yE,KAAKi9P,qBAAuBj9P,KAAKi9P,qBAG7BzwB,qBAAR,WACQxsO,KAAKi6O,OAAOt+L,SAII+D,SAASm/I,iBAAiB,+BAClClmL,QAAQ,YAAK,SAAEY,UAAUmjC,OAAO,aAGhD8vL,uCAAkBD,GACdvsO,KAAKykP,gBAAgBC,YAAY1kP,KAAKooF,WAG1CokJ,mCACI,IAAMD,EAAavsO,KAAKw6M,qBACxB,OAAOx6M,KAAKmjC,iBAAiB5wB,GAAG,2BAA4Bg6N,IAGhEC,yCACI,IAAMD,EAAavsO,KAAKw6M,qBACxB,OAAOx6M,KAAKmjC,iBAAiB5wB,GAAG,+BAAgCg6N,IAGpEC,0CAEI,OADoBxsO,KAAK+5M,iBAAiBlc,UAAUz6J,WAAWqY,MAAM,KAClD,IAGvB+wL,uCAGI,MAFa,iBACIxsO,KAAKooF,SAAS1I,cAAgB,SAInD8sJ,mCACIxsO,KAAK8sC,eAAen0B,QAAQ,YAAK,SAAErG,0DA1FlCvX,aACA3D,YAEA2oB,UACa5hB,2CASjBuxL,iCACAA,WAFQ88C,qUAAkBzxL,KAL9B20I,aAAU,CACP14K,SAAU,iBACVC,SCVW,o4FDaFu1N,gCEuBT,WAAmBD,iBAxBVvsO,UAAsC,UAMtCA,cAAU,EAQTA,aAA6B,IAAI0vL,eAK3C,6BAAI88C,iBAAE,KAAN,WACI,OAAKxsO,KAAKk9P,MAAKl9P,KAAKk9P,IAAM,OAAS9wP,KAAK40B,SAASjG,SAAS,IAAItD,QAAQ,KAAM,KACrEz3B,KAAKk9P,qCAMhB1wB,gCACI,OAAUxsO,KAAKmvK,OAAS,IAAE,KAAInvK,KAAK0sC,KAAQ,OAAS1sC,KAAK0sC,KAAQ,IAAE,KAAI1sC,KAAKm9P,QAAU,aAAe,IAAE,aAAan9P,KAAKiuP,KAAI,KAAIjuP,KAAKo9P,yBAA2B,iCAAmC,KAGxM5wB,+BACI,OAAOxsO,KAAKi6O,OAAOl8M,YAAc/9B,KAAKq9P,mBAAqB,GAAKr9P,KAAK8jC,MAGzE0oM,sCACI,OAAQxsO,KAAK0sC,UACJ,kBACA,OACD,MAAO,eACN,QACD,MAAO,gBACN,YACA,OACD,MAAO,SAInB8/L,2BAAMD,GACFvsO,KAAKu0J,QAAQ/yI,KAAK+qN,EAAEhpL,QAGxBipL,+BACIxsO,KAAKguO,KAAOhuO,KAAKguO,IAAI74M,UAAYn1B,KAAKguO,IAAI74M,SAAS8F,WAGvDuxM,sCAAiBD,eACmC,QAAhDxlK,EAAqC,QAArCsC,EAAsB,QAAtBvC,EAAW,QAAXD,IAAE3sD,iBAAS,eAAEojP,iBAAS,eAAE1kE,qBAAa,eAAEr/K,iBAAS,SAAEC,IAAI,4DApErDrb,sCASJuxL,sBACAA,sBACAA,sBACAA,0BACAA,sBACAA,sBACAA,uBACAA,yBACAA,mCACAA,0BACAA,yBACAA,6BACAA,oCACAA,2BACAA,0CACAA,yBACAA,sBAEAA,YAASvuL,MAAC,UAnBFqrO,qUAAe+wB,KAL3B7tE,aAAU,CACP14K,SAAU,aACVC,SCNW,+xCDSFu1N,0fEQT,WAAY3lK,GAAZ,MACI2lK,YAAM3lK,EAAG,wCAAyCtlE,KAA0BA,OAAUvB,KAHhF,mBAAY,IAAI0vL,eA8B1B5oH,qBAAqB,SAACuC,GAClBA,EAAEnoD,eAAeC,MAAMC,QAAQ,CAC3BC,SAAU,QACV2e,OAAQ,WACR1e,UAAU,EACV1gB,QAAS,CACLuvE,KAAM,UACNh1C,QAAS,WACL2rC,EAAKgiL,UAAUtnO,cAhC/B,OARuDi9B,QAQvD8tL,6CAAwB1lK,GACpB,OAAO42G,wBAAgC52G,EAAqC4wL,aAAa,IAG1ElrB,kCAAnB,SAAyC1lK,GAAzC,WACI,MAAO,CAAC,CACJ3rC,KAAMl7B,KAAKuS,GAAG,uBACdgI,SAAS,EACT4gB,QAAS,WAAM,SAAKqiO,mBAAmB32L,KACxC,CACC3rC,KAAMl7B,KAAKuS,GAAG,0BACdgI,SAAS,EACT4gB,QAAS,WAAM,SAAKsiO,sBAAsB52L,OAI1C0lK,+BAAR,SAA2B1lK,GACvB7mE,KAAK8Z,SAAS,CAAC,0CAA2C,CAAEwgB,aAAcusC,EAAQptD,KAAK6gB,gBAGnFiyM,kCAAR,SAA8B1lK,GAC1B7mE,KAAK8Z,SAAS,CAAC,kCAAmC,CAAEwgB,aAAcusC,EAAQptD,KAAK6gB,yDAxC9Ex6B,gDAYJ4vL,2BACAA,YAFQ68C,qUAAqCxuL,KANjD2xI,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,oCACVC,SCVW,+3CDaFs1N,IAA8Cwc,gCEKvD,WAAoBxc,EAAgC1lK,GAAhC7mE,kBAAgCA,gBAR3CA,UAA0B,QAK1BA,WAAgB,UACfA,aAA6B,IAAI0vL,eAK3C,uCACI1vL,KAAK09P,oBAGTlxB,wCACI,IAEM1lK,EAAuB,UAAd9mE,KAAKiuP,KADG,OADA,OAGvBjuP,KAAK++C,SAAS4+M,YAAY39P,KAAK49O,WAAWv3J,cAAe,QAAS,gBAAgBrmF,KAAKu5D,MAAK,mBAAmBuN,IAGnH0lK,2BAAMD,GACFvsO,KAAKu0J,QAAQ/yI,KAAK+qN,6CAjCN78C,oBAAyCA,6CAUxDA,sBACAA,sBACAA,sBACAA,yBACAA,uBACAA,yBACAA,YAPQ88C,qUAAYoxB,KALxBluE,aAAU,CACP14K,SAAU,UACVC,SCNW,gjBDSFu1N,4CEcT,WAAoBD,EACR1lK,EACAC,EACAuC,EACAtC,EACAC,GALQhnE,sBACRA,wBACAA,wBACAA,4BACAA,sBACAA,sBAPJA,2BAAgC,EAUxC,kDACIA,KAAK69P,0BAA4B79P,KAAKujC,eAAeo9M,qBAChD7uO,UAAU,aACH+0D,IAAU05K,oBAA+B15K,IAAU05K,eACnDhU,EAAKuxB,kBAAkBj3L,MAKvC2lK,mCACIxsO,KAAK69P,2BAA6B79P,KAAK69P,0BAA0BvrP,eAGrEk6N,uCAAkBD,GAAlB,WACUzlK,EAAa,SAACuC,EAAOtC,EAAQC,GAC/BH,EAAK24D,cAAcxxH,KAAO9N,YAC1BqsO,IAAcgU,mBACV15K,EAAK24D,cAAchQ,QAAU,CACzB,CAAE1rF,KAAM+iC,EAAK1jC,iBAAiB5wB,GAAG,aAAcmkF,SAAU,GACzD,CAAE5yD,KAAM+iC,EAAK1jC,iBAAiB5wB,GAAG,oBAAqBmkF,SAAU,IAG/D61I,IAAUgU,eACf15K,EAAK24D,cAAchQ,QAAU,CACzB,CAAE1rF,KAAM+iC,EAAK1jC,iBAAiB5wB,GAAG,mBAAoBmkF,SAAU,KAGvE7vB,EAAK24D,cAAc/iG,MAAQ4sC,EAC3BxC,EAAK24D,cAAc9iG,OAASqqC,EAC5BF,EAAK24D,cAAcl8G,gBAAgB0jD,IAGnCulK,IAAUgU,oBACVvgP,KAAKqvI,qBAAqBkjD,yBAAyBryL,qCACnD4mE,EACI9mE,KAAKmjC,iBAAiB5wB,GAAG,gCACzBvS,KAAKmjC,iBAAiB5wB,GAAG,iCAAkC,YAC7C,IAAN82D,GACAxC,EAAKogF,eAAeuhG,gBACpB3hL,EAAKtqD,iBAAiBzC,SAAS,CAAC,oBACnB,IAANuvD,GACPxC,EAAKwzI,eAAe0jD,YAAYjsP,UAAU,iBAKtDy6N,IAAUgU,cACVvgP,KAAKqvI,qBAAqBkjD,yBAAyBryL,+BACnD4mE,EAAW9mE,KAAKmjC,iBAAiB5wB,GAAG,0BAA2BvS,KAAKmjC,iBAAiB5wB,GAAG,2BAA4B,WAIhHs0D,EAAKm3L,sBAAuB,EAE5BvgO,WAAW,WACPopC,EAAKogF,eAAeuhG,gBACpB3hL,EAAKtqD,iBAAiBzC,SAAS,CAAC,kBAChC+sD,EAAKm3L,sBAAuB,GAC7B,iDAtFVzd,YADAxlP,aADAT,aAIAwqD,YAIA1mC,YACAY,+CAQJ0wK,YAASvuL,MAACxJ,OADF60O,qUAAuB3tL,KALnC6wI,aAAU,CACP14K,SAAU,sBACVC,SCdW,2GDiBFu1N,sHEVA,4UAA4BtrL,KALxCwuI,aAAU,CACP14K,SAAU,0BACVC,SCJW,yTDOFu1N,kEEYT,WAAoBD,mBAVZvsO,gBAAuB,GAI/B,6BAAawsO,oBAAK,KAAlB,SAAmBD,GACfvsO,KAAKi+P,WAAa1xB,EAAQA,EAAM9wL,MAAM,MAAQ,oCASlD+wL,uCACIxsO,KAAKk+P,wBAGF1xB,iCAAP,WACIxsO,KAAK++C,SAASo/M,SAASn+P,KAAKo+P,UAAU/3K,cAAe,WACrDrmF,KAAK++C,SAASo/M,SAASn+P,KAAKo+P,UAAU/3K,cAAe,2BAErDrmF,KAASq+P,WACDr+P,KAAKq+P,UAAUjyM,SAAS,QACxBpsD,KAAK++C,SAASo/M,SAASn+P,KAAKo+P,UAAU/3K,cAAe,OAGzDrmF,KAAK++C,SAASo/M,SAASn+P,KAAKo+P,UAAU/3K,cAAermF,KAAKq+P,aAE1Dr+P,KAAK++C,SAASo/M,SAASn+P,KAAKo+P,UAAU/3K,cAAe,OACrDrmF,KAAK++C,SAASo/M,SAASn+P,KAAKo+P,UAAU/3K,cAAe,oBAGrDrmF,KAAKs+P,UACLt+P,KAAK++C,SAASw/M,SAASv+P,KAAKo+P,UAAU/3K,cAAe,QAASrmF,KAAKs+P,WAIvEt+P,KAAK++C,SAASo/M,SAASn+P,KAAKo+P,UAAU/3K,cAAe,gEA/CRqpG,kDAWhDA,2BACAA,uBACAA,2BAIAA,YAASvuL,MAAC,kBAVFqrO,qUAAgBgyB,KAL5B9uE,aAAU,CACP14K,SAAU,cACVC,SCJW,kaDOFu1N,uyBEHb7vD,cAQI,WAAY4vD,EAAoC1lK,GALvC7mE,cAAU,EAMfA,KAAKy+P,kBAAoBlyB,EACzBvsO,KAAK0+P,0BAA4B73L,EAGrC,uCACI7mE,KAAK2+P,cAGTnyB,iCAAYD,GACJA,EAAQjsH,SAAWisH,EAAQjsH,QAAQs+I,eAAiBryB,EAAQjsH,QAAQj8D,eACpErkD,KAAK2+P,aAELpyB,EAAQlgF,OAASkgF,EAAQlgF,MAAMuyG,eAAiBryB,EAAQlgF,MAAMhoG,eAC1DrkD,KAAK6+P,oBAAoB7+P,KAAK6+P,kBAAkB1pO,SAASk3H,MAAQrsJ,KAAKqsJ,QAIlFmgF,kCACI,GAAIxsO,KAAKsgH,QAAS,CAId,GAHKtgH,KAAKy+P,kBAAkB/gO,QAAQ2oD,cAAc9sE,UAAU6qO,SAAS,iBACjEpkP,KAAKy+P,kBAAkB/gO,QAAQ2oD,cAAc9sE,UAAUC,IAAI,gBAE1DxZ,KAAK6+P,kBAKN7+P,KAAKy+P,kBAAkBz+D,OAAOhgM,KAAK6+P,kBAAkBC,cAL5B,CACzB,IAAMvyB,EAAmBvsO,KAAK0+P,0BAA0BnhI,wBAAwBr4E,IAChFllD,KAAK6+P,kBAAoB7+P,KAAKy+P,kBAAkBhhI,gBAAgB8uG,GAKpEvsO,KAAK6+P,kBAAkB1pO,SAASk3H,MAAQrsJ,KAAKqsJ,WAGzCrsJ,KAAKy+P,kBAAkB/gO,QAAQ2oD,cAAc9sE,UAAU6qO,SAAS,iBAChEpkP,KAAKy+P,kBAAkB/gO,QAAQ2oD,cAAc9sE,UAAUmjC,OAAO,gBAE9D18C,KAAK6+P,mBACL7+P,KAAKy+P,kBAAkBM,OAAO/+P,KAAKy+P,kBAAkB9iP,QAAQ3b,KAAK6+P,kBAAkBC,2CA3C/FpvE,yBACAA,WA8CL88C,EAjDA,kBAuDI,WAAoB3lK,EAA4CC,GAAhE,MACI0lK,YAAM3lK,EAAkBC,IAAyB9mE,KADjC,4BAA4CqpE,sCADrB7jB,iDA1DqDkqI,0BAA5FA,8BA0DK68C,EAAyBtnL,OAHrCyqI,aAAU,CACP14K,SAAU,sCAEDu1N,IAAkC5vD,mBAW3C,WAAoB91G,EAAqCC,EAA4CuC,GAArG,MACImjK,YAAM1lK,EAAkBuC,IAAyBrpE,KADjC,mBAAqC+mE,qBAA4CA,+BAI5F,OANyCvhB,QAMzC+mL,uBAAT,sBACIC,YAAMmyB,WAAUvgO,WAChBp+B,KAASsgH,SACAtgH,KAAKmsJ,QAAQ29C,UACd9pM,KAAKmsJ,QAAQ29C,QAAU,SAGyC,IAAhE9pM,KAAKmsJ,QAAQ29C,QAAQ93K,KAAK,SAAC80C,GAAW,MAAW,YAAXA,EAAE7tC,SACxCj5B,KAAKmsJ,QAAQ29C,QAAQj0L,KAAK,CACtBojB,KAAM,UACN5X,SAAU,QACVzgB,QAAS,CACLoqM,mBAAmB,EACnBjU,YAAa,CAACC,MAAO,iCAG7Bv5J,WAAW,WAAM,SAAK0uH,QAAQh3H,SAAS8F,cAIvCj7B,KAAKmsJ,QAAQ29C,UACb9pM,KAAKmsJ,QAAQ29C,QAAU9pM,KAAKmsJ,QAAQ29C,QAAQpuL,OAAO,SAACorD,GAAW,MAAW,YAAXA,EAAE7tC,OACjEwE,WAAW,WAAM,SAAK0uH,QAAQh3H,SAAS8F,uDA7F/Cx8B,YAF4FixL,0BAA5FA,8BAmEK68C,EAAgCtnL,OAH5CyqI,aAAU,CACP14K,SAAU,gCAEDu1N,IAAyC5vD,kBC3DlD,WAAoB4vD,kBAGpB,kDACU1lK,EAAS,CACX5tC,KAAM,eACN5X,SAAU,QACVzgB,QAAS,CACLuvE,KAAM,sBACN4mH,YAAa,CAAEC,MAAO,mCAAoCrqI,MAAO,aACjEvK,KAAM,SACNjnB,QAAS,SAAC2rC,GACNylK,EAAKpgF,QAAQ65C,KAA6B,SAAtBumC,EAAKpgF,QAAQ65C,KAAkB,WAAa,OAChE,IAAM38H,EAA6B,SAAtBkjK,EAAKpgF,QAAQ65C,KAAkB,wBAA0B,sBACtEl/H,EAAE5sD,UAAUw7B,OAAO,OAAQ2zB,MAIlCrpE,KAAKmsJ,QAAQ29C,UACd9pM,KAAKmsJ,QAAQ29C,QAAU,IAE3B9pM,KAAKmsJ,QAAQ29C,QAAQ1oL,QAAQylD,6CA5B5BpoE,QAKI+tO,qUAA8B9mL,KAH1CgqI,aAAU,CACP14K,SAAU,gCAEDw1N,wfCCbxmL,2EAEA,OAFoBg5M,QAEpBzyB,EAFA,CAAoBhrO,qBAchB,WAAYslE,EACAC,GADZ,MAEI0lK,YAAM3lK,EAAG,4BAA6B7gB,KAAMhmD,KADpC,iCAIO,OATwBg/P,QASxBzyB,4BAAnB,sBACIvsO,KAAKi/P,cAAgBj/P,KAAKmkO,oBAAoB+6B,oBACzCptP,UAAU,SAACg1D,GAAgB,SAAK/1D,MAAMouP,YAAcr4L,KAG1CylK,+BAAnB,WACGvsO,KAAKi/P,eAAiBj/P,KAAKi/P,cAAc3sP,wDA/BvCxS,WAGAs/P,QAaI7yB,qUAAyBtmL,KANrCypI,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,yBACVC,SCdW,iMDiBFs1N,IAAkCnrO,0fEJ3C,WAAYylE,UACR2lK,YAAM3lK,EAAG,kCAAmCtlE,KAAoBA,OAAUvB,KAG9E,OANiD88K,QAMjDyvD,gCAAW1lK,GACP7mE,KAAK8Z,SAAS,CAAC,qCAAsC+sD,EAAEptD,KAAK9M,oDAhB3D7M,OASIysO,qUAA+B8yB,KAN3C3vE,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,+BACVC,SCRW,85CDWFs1N,IAAwCwc,0fECjD,WAAYliL,UACR2lK,YAAM3lK,EAAG,oCAAqCtlE,KAAsBA,OAAUvB,KAGlF,OALmD8nD,QAKnDykL,gCAAW1lK,GACP7mE,KAAK8Z,SAAS,CAAC,uCAAwC+sD,EAAEptD,KAAK9M,oDAf7D7M,OASIysO,qUAAiCxvD,KAN7C2S,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,iCACVC,SCRW,ixCDWFs1N,IAA0Cwc,qgBEOnD,WAAYliL,EACAC,GADZ,MAEI0lK,YAAM3lK,EAAG,oCAAqCtlE,KAAsBA,OAAUvB,KADtE,0CAIO,OARgCspD,QAQhCijL,kCAAnB,SAAyC1lK,GAAzC,aACI,MAAO,CACH,CACI3rC,KAAMl7B,KAAKuS,GAAG,0BACdgI,QAAsB,QAAb8uD,EAAO,MAAPxC,OAAO,EAAPA,EAASptD,YAAI,eAAE6lP,UACxBnkO,QAAS,WAAM,SAAKokO,0BAA0B14L,OAKlD0lK,sCAAR,SAAkC1lK,GAAlC,iBACqB,QAAbwC,EAAO,MAAPxC,OAAO,EAAPA,EAASptD,YAAI,eAAEmgP,mBAAgC,QAAb7yL,EAAO,MAAPF,OAAO,EAAPA,EAASptD,YAAI,eAAE9M,WAIrD3M,KAAKw/H,cAAcxxH,KAAO9N,WAC1BF,KAAKw/H,cAAc9iG,OAAS18B,KAAKuS,GAAG,gCAEpCvS,KAAKw/H,cAAcl8G,gBAAgB,WAC/BwjD,EAAKrrE,GACDqrE,EAAKwzL,6BAA6BkF,uBAAuB34L,EAAQptD,KAAK9M,UACtE,EACA,WACIm6D,EAAK5zD,uBAAkB,EAAW3R,qDA3C7CzB,WAEAuuC,6CAWJqhJ,YAASvuL,MAAC,oBADForO,qUAAiCrtD,KAN7CwQ,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,iCACVC,SCZW,soDDeFs1N,IAA0Cwc,2eEDvD0W,0EAGI,sBAAyC,GAGzC54L,gBAAkC,EAClCA,wBAA0C,EAC1CA,mBAAqC,EACrCA,oBAAyC,KAE7C,OAX2Bs4G,QAW3BotD,EAXA,CAA2BhrO,qBA2BvB,WAAYslE,EACAC,EACAuC,GAFZ,MAGImjK,YAAM3lK,EAAG,0CAA2CtlE,KAAYk+P,KAAMz/P,KAF9D,sCACA+mE,6BATFA,qBAAqB,IAAI2oH,iBAGnC,OAJyDvQ,QAIzDrzK,sBAAIygO,gCAAiB,KAArB,WACI,OAAQvsO,KAAK+Q,MAAM6mP,kDASJrrB,4BAAnB,sBACIvsO,KAAK0/P,wBAEL1/P,KAAKvE,GAAGuE,KAAK0oP,2BAA2BC,uBAAuB,EAAO,SAAC7hL,GACnED,EAAK91D,MAAM+mP,gBAAkBhxL,EAASrxD,WAG1CzV,KAAKvE,GAAGuE,KAAK+3P,yBAAyBC,6BAA6B,EAAO,SAAClxL,GACvED,EAAK91D,MAAMknP,uBAAyBnxL,EAASxxD,OAGjDtV,KAAKvE,GACDuE,KAAK+3P,yBAAyBG,iCAC9B,EACA,SAACpxL,SACGD,EAAK91D,MAAMonP,kBAAqC,QAAjB9uL,IAAS5zD,gBAAQ,QAAI,MAKhE82N,iDACkD,QAA9CljK,EAA6B,QAA7BvC,EAAmB,QAAnBD,OAAK3xC,KAAKtzB,EAAE02C,eAAO,eAAEnjB,gBAAQ,eAAEojK,uBAAe,SAAEE,SAAS,CAAE70F,IAAK,IAChE5jG,KAAK0/P,yBAGTnzB,mDAA8B1lK,GAC1B7mE,KAAK+/B,mBAAmBve,KAAKqlD,IAGzB0lK,kCAAR,wBACIvsO,KAAKke,YAAYk6O,kBAAuB,IAAIl2O,MAAuB,SAACmnD,GAChE,IAAMtC,EAAU,IAAIxlE,KACpB,SAAQouM,eAAiB9oI,EAAK91D,MAAM4+L,eACpC5oI,EAAQzsC,aAAeusC,EAAK91D,MAAMupB,aAClCysC,EAAQxyD,SAAWsyD,EAAK84L,mBAAmB94L,EAAK91D,MAAMwD,UACtDwyD,EAAQolL,iBAAmBtlL,EAAK84L,mBAAmB94L,EAAK91D,MAAMo7O,kBAC9DplL,EAAQwlL,YAAc1lL,EAAK84L,mBAAmB94L,EAAK91D,MAAMw7O,aACzDxlL,EAAQ6wL,iBAAmB/wL,EAAK91D,MAAM6mP,iBAC/B/wL,EAAKkxL,yBAAyBM,sBAAsBtxL,EAASsC,SACrE,OAAW,GAAYrpE,KAAKs4P,mBAEH,QAA5BxxL,OAAKvoD,GAAG65O,yBAAoB,SAAE55O,UAG1B+tN,+BAAR,SAA2B1lK,GACvB,GAAGA,EACC,OAAOA,IAAU3mE,mDA3FpBJ,WAKAwvB,UACAopO,kDA0BJhpE,uBACAA,YAASvuL,MAAC67K,OAFFuvD,qUAAuCqzB,KANnDlwE,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,uCACVC,SC9BW,y6EDiCFs1N,IAAgD1qO,+dExB7DwoD,0EACI,mBAAiC,KACrC,OAF2Bc,QAE3BohL,EAFA,CAA2BhrO,qBAavB,WAAYslE,EACAC,GADZ,MAEI0lK,YAAM3lK,EAAG,6CAA8Cxc,KAAMrqD,KADrD,kCAIH,OATmDmrD,QASnDohL,4BAAT,sBACIvsO,KAAKvE,GAAGuE,KAAKspP,qBAAqBvkB,6BAA6B,EAAO,SAAC17J,GACnExC,EAAK91D,MAAM8S,UAAYwlD,EAAS5zD,WAGpC,IAAMqxD,EAAS,IAAIvlE,KACnBulE,EAAO0yL,uBAAyBx5P,KAAKw5P,uBAErCx5P,KAAKke,YAAY+rO,cACb,IAAI/nO,MAAuB,SAACmnD,GAA6B,SAAKigL,qBAAqBY,uBAAuBpjL,EAAQuC,SAC9G,OAAW,GAAW,6CApC7BvpE,WAIA6vB,sDAcJ+/J,oDACAA,WAFQ68C,qUAA0CjiL,KALtDolI,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,0CACVC,SChBW,ygCDkBFs1N,IAAmDnrO,qgBEe5D,WAAYylE,EACAC,EACAuC,GAFZ,MAGImjK,YAAM3lK,EAAG,uBAAwBtlE,OAAUvB,KAFnC,+BACA+mE,qCANFA,qBAAqB,IAAI2oH,iBARnC,OAHsCmwE,QAGtC/zP,sBAAaygO,2BAAY,KAKzB,WAAqB,OAAOvsO,KAAK8/P,mBALjC,SAA0Bj5L,IACjBA,IACL7mE,KAAK8/P,cAAgBj5L,EACrB7mE,KAAK+/P,oBAAsB//P,KAAKggQ,iCAAiCC,WAAWp5L,qCAehF0lK,+CACSvsO,KAAK8+O,cAAgB9+O,KAAK8+O,aAAaohB,SAE5ClgQ,KAAK8+O,aAAaohB,QAAS,EAC3BziO,WAAW,WAAM,SAAKhiC,GAAGorE,EAAK64I,oBAAoBygD,qBAAqBt5L,EAAKi4K,aAAanyO,UAAU,EAC/F,SAACm6D,GAA2B,SAAShyC,WAAa+xC,EAAKu5L,mBAAmB5+O,UAAS,OAG3F+qN,mDACI,OAAOvsO,KAAK+/P,qBAAuB//P,KAAK+/P,oBAAoBnwP,QAAU5P,KAAK+/P,oBAAoBlwP,KAAK,YAAK,SAAEywG,oDA9CtFxgH,WAGpBsiB,YACAi+O,8CAeJ3wE,oCAOAA,oCACAA,YAXQ68C,qUAAoB+zB,KANhC5wE,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,mBACVC,SCfW,w1BDkBFs1N,IAA6BnrO,qgBEKtC,WAAYylE,EACAC,EACAuC,GAFZ,MAGImjK,YAAM3lK,EAAG,6BAA8BtlE,OAAUvB,KAFzC,+BACA+mE,mBANZA,gBAAgC,KAUb,OAbyBrb,QAazB6gL,4BAAnB,sBACIvsO,KAAKugQ,0BAA4BvgQ,KAAKmkO,oBAAoBq8B,eACrD1uP,UAAU,SAACg1D,GACRD,EAAKojL,cAAgBnjL,EAErB,IAAMuC,EAAWxC,EAAKojL,cAAc7zN,IAAI,YAAK,SAAKqqO,iBAAiB15L,KACnEF,EAAK65L,WAAWr3L,MAIpBkjK,6BAAR,SAAyB1lK,GACrB,MAAO,CACH7hD,GAAI6hD,EAAel6D,QACnByN,IAAK,KACLumP,KAAM,KACNC,UAAU,EACVC,WAAY,qBACZpnP,KAAMotD,IAIN0lK,uBAAR,SAAmB1lK,GAAnB,WACIppC,WAAW,WAAM,SAAKqjO,eAAeC,OAAOl6L,IAAW,MAG3D0lK,wCAAmB1lK,GACf,IAAMC,EAAuB9mE,KAAKghQ,MAAMC,SAASxsM,UAAU,YAAK,SAAEzvC,KAAO6hD,EAAal6D,UAChF08D,EAAkBrpE,KAAKghQ,MAAMC,SAASjvO,KAAK,YAAK,SAAEhN,KAAO6hD,EAAal6D,UAC5E3M,KAAKghQ,MAAME,eAAe,CAAEznO,MAAOqtC,EAAsB0sC,QAASnqC,KAGnDkjK,+BAAnB,WACIvsO,KAAKugQ,2BAA6BvgQ,KAAKugQ,0BAA0BjuP,wDA3D5CxS,WAEpBs/P,YAGS7zM,wCAcbmkI,YAASvuL,MAAC,YALForO,qUAA0B9gL,KANtCikI,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,0BACVC,SCbW,kVDgBFs1N,IAAmCnrO,2eENhD+/P,2EAGA,OAHoBr1M,QAGpBygL,EAHA,CAAoBhrO,qBAgBhB,WAAYslE,EACDC,EACCuC,GAFZ,MAGImjK,YAAM3lK,EAAG,4BAA6Bs6L,KAAMnhQ,KAFrC,qBACC+mE,mBAIO,OAXwBjb,QAWxBygL,oCAAnB,sBACIvsO,KAAKohQ,iBAEL3jO,WAAW,WACPopC,EAAK91D,MAAMswP,YAAcx6L,EAAK0uK,UAAU+rB,wBAAwBz6L,EAAK50D,OAAOklP,SAIpF5qB,mDACIvsO,KAAKvE,GAAGuE,KAAK0xP,aAAajgP,QAAQzR,KAAKiS,OAAOsvP,eAAe,IAAO,EAAO,YACvE,GAAKz6L,EAAShyC,UAId,IAFA+xC,EAAK91D,MAAMywP,SAAW16L,EAAS70D,OAEM,QAAjC40D,EAAK91D,MAAMywP,SAASp/H,UAGpB,OAFAv7D,EAAK46L,eAAeC,QAAUrqQ,qBAAsBwvE,EAAK91D,MAAMywP,SAAStQ,eACxErqL,EAAK46L,eAAen+O,gBAAgB,cAIxC,IAAM+lD,EAAO,IAAI9nE,KACjB8nE,EAAK+4D,UAAYv7D,EAAK91D,MAAMywP,SAASp/H,UACrC/4D,EAAK/0D,KAAOuyD,EAAK91D,MAAMywP,SAASltP,KAChCjd,oBAAqBgyE,EAAMhyE,qBAAsBwvE,EAAK91D,MAAMywP,SAAStQ,UAAWrqL,EAAK91D,MAAMywP,SAAS5P,iBAIpGrlB,2BAAR,uBACSvsO,KAAKiS,OAAOsvP,eACjBvhQ,KAAKvE,GAAGuE,KAAK0xP,aAAajgP,QAAQzR,KAAKiS,OAAOsvP,eAAe,IAAQ,EAAO,YAAY,SAAKxwP,MAAMywP,SAAW16L,EAAS70D,mDA3DlGnS,WAGpBnH,aACA+xB,sCAiBJglK,gCACAA,YAASvuL,MAAChF,SAHFowO,qUAAyBj+K,KANrCohI,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,yBACVC,SClBW,kkFDqBFs1N,IAAkCnrO,0fEN3C,WAAYylE,UACR2lK,YAAM3lK,EAAG,kCAAmCtlE,OAAUvB,YAJT2hQ,iDAVxB7hQ,uCAWxB4vL,WADQ68C,qUAA+Bh+K,KAN3CmhI,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,gCACVC,SCTW,uoEDYFs1N,IAAwCnrO,0fEGjD,WAAYylE,UACR2lK,YAAM3lK,EAAG,0BAA2BtlE,OAAUvB,YAJTs/K,iDAVhBx/K,uCAWxB4vL,WADQ68C,qUAAuBq1B,KANnClyE,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,uBACVC,SCTW,sxCDYFs1N,IAAgCnrO,yfECzC,WAAYylE,UACR2lK,YAAM3lK,EAAG,8BAA4B7mE,KAGhC,OANkCyvD,QAMlC88K,uBAAT,SAAoB1lK,GAChB7mE,KAAK8Z,SAAS,CAAC,kCAAmC+sD,EAAEptD,KAAK9M,SAAU,CAAEw9O,YAAajqP,6DAjB7DJ,OAUhBysO,qUAAyBt9K,KANrCygI,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,yBACVC,SCRW,yuDDWFs1N,IAAkCr8M,yfEC3C,WAAY22C,UACR2lK,YAAM3lK,EAAG,4BAA0B7mE,YAHE2vD,iDAThB7vD,OAShBysO,qUAAuBz8K,KANnC4/H,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,uBACVC,SCPW,ysCDUFs1N,IAAgCr8M,yfEEzC,WAAY22C,UACR2lK,YAAM3lK,EAAG,oCAAkC7mE,YAHE6hQ,iDATxB/hQ,OAShBysO,qUAA+B96K,KAN3Ci+H,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,gCACVC,SCPW,o/CDUFs1N,IAAwCr8M,kgBECrDmjC,2EAIA,OAJ2B+pH,QAI3BmvD,EAJA,CAA2BhrO,qBAoBvB,WAAYslE,GAAZ,MACI2lK,YAAM3lK,EAAG,kCAAmCtlE,KAAY8xD,GAAOnzD,YAA6BA,gBAA+BF,KAL/H,2BAAyB,mBAEzB8mE,oBAAoBA,EAAKziD,KAAK,qBAAqB3I,OAAO,YAAK,SAAE4W,QAAUpyB,qBAMxD,OAZ8Bk9K,QAY9BmvD,wBAAnB,WACIvsO,KAAK+Q,MAAMixL,eAAiB9hM,YAGhCqsO,8CACIvsO,KAAK+Q,MAAM++O,iBAAc,EACrB9vP,KAAK+Q,MAAMixL,iBAAmB9hM,WAAwCF,KAAK+Q,MAAM++O,cAC7E9vP,KAAKqkN,sBAAwBnkN,YAC7BF,KAAK+Q,MAAM++O,YAAc9vP,KAAKuS,GAAG,kCAE5BvS,KAAKqkN,sBAAwBnkN,eAClCF,KAAK+Q,MAAM++O,YAAc9vP,KAAKuS,GAAG,8EA5CxCzS,oDAuBJ4vL,WAFQ68C,qUAA+Bu1B,KAN3CpyE,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,+BACVC,SCpBW,utGDuBFs1N,IAAwC1qO,2eEhBrDs7K,2EAEA,OAFoB/nH,QAEpBm3K,EAFA,CAAoBhrO,qBAehB,WAAYslE,EACAC,GADZ,MAEI0lK,YAAM3lK,EAAG,qCAAsCtlE,KAAY47K,GAAOj9K,YAA6BA,gBAA+BF,KADtH,uBALZ,OAFoDo1D,QAEpDtpD,sBAAaygO,uBAAQ,KAArB,SAAsB1lK,GACdA,IAAS7mE,KAAK+Q,MAAMgxP,SAAW/hQ,KAAKu1O,UAAU+rB,wBAAwBz6L,8EAhBrD/mE,WAFpBnH,2CAiBJ+2L,WAFQ68C,qUAAkCh5K,KAN9Cm8H,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,kCACVC,SCbW,wrBDgBFs1N,IAA2C1qO,2eELxD0zD,0EACI,qBAAiC,KAErC,OAHoBF,QAGpBk3K,EAHA,CAAoBhrO,qBAgBhB,WAAYslE,EACAC,EACAuC,EACAtC,GAHZ,MAIIylK,YAAM3lK,EAAG,kBAAmBtR,KAAMv1D,KAH1B,0BACAgnE,oBACAA,wBALJA,iBAAiC,KAStB,OAZc3R,QAYdk3K,4BAAnB,sBACIvsO,KAAKgiQ,cAAgBhiQ,KAAKwB,EAAEsxL,iBAAiB+K,UAAUsR,iBAAiBnvM,KAAKujC,eAAeuuJ,cAC5F9xL,KAAK8sC,eAAej3B,KAAK7V,KAAKgiQ,cAAclwP,UAAU,YAClDg1D,EAAMnuD,QAAQ,YAAQ,SAAK6qO,eAAen6K,KAC1CxC,EAAK91D,MAAMkxP,YAAcn7L,KAE7B9mE,KAAK8sC,eAAej3B,MAChB,QAAc,CAAC7V,KAAKgiQ,cAAehiQ,KAAKwB,EAAEm/B,UAAUyiN,gBAAgBtxO,UAAU,SAACg1D,OAACuC,EAAWvC,KAAEC,EAAaD,KACtGD,EAAK91D,MAAMy9J,cAAgBznG,EAAgBsC,EAAY5U,UAAU,YAAK,SAAE+6I,OAASzoI,SAAiB,MAK9GwlK,iCAAY1lK,GACR,GAAIA,GAAO7mE,KAAK+Q,MAAMy9J,cAEtB,KAAM1nG,EAAO9mE,KAAK+Q,MAAMkxP,YAAYp7L,GAEpC7mE,KAAK8gK,oBAAoBza,eAEzB,IAAMh9E,EAAevC,EAAK4lI,WAAa1sM,KAAKujC,eAAeuuJ,aAAahrH,EAAK4lI,YAAc1sM,KAAKujC,eAAe2oK,UAAU,GACnHnlI,EAAiBD,EAAKm9K,YAAcn9K,EAAKm9K,WAAW56K,IAAiB,GAC3EtC,EAAe3lD,QAAQ0lD,EAAKmpH,MAE5BjwL,KAAKwB,EAAEy8B,UAAUnkB,SAASitD,EAAgBD,EAAK+2I,aAAe,QAG1D0uB,2BAAR,SAAuB1lK,GACnBA,EAAK3rC,KAAOl7B,KAAKkiQ,mBAAmBr7L,GACpCA,EAAKtsD,QAAUva,KAAKmiQ,eAAet7L,IAG/B0lK,+BAAR,SAA2B1lK,GACvB,IAAMC,EAAoBD,EAAK2oI,KAAKpyK,UAAUypC,EAAK2oI,KAAK7zL,QAAQ,KAAO,EAAGkrD,EAAK2oI,KAAK5/L,QACpF,OAAOi3D,EAAK3rC,MAAQl7B,KAAK4wM,gBAAgBr+L,GAAG,WAAWu0D,EAAqBD,EAAK6lI,aAG7E6/B,2BAAR,SAAuB1lK,GACnB,IAAMC,EAAeD,EAAK6lI,YAAc1sM,KAAKujC,eAAeuuJ,aAAajrH,EAAK6lI,YACxErjI,IAAmBhyE,aAAcwvE,EAAKk4K,aAEtCj4K,GAAgBA,EAAakqD,eAAenqD,EAAKk4K,aAAej4K,EAAaD,EAAKk4K,YAClFh4K,IAA2B1vE,aAAcwvE,EAAK88K,qBAE9C98K,EAAK88K,mBAAmB78K,GAE9B,QAASuC,GAAoBtC,GAGdwlK,+BAAnB,WACIvsO,KAAK8sC,eAAen0B,QAAQ,YAAK,SAAErG,0DAjFlCxS,WAIAygP,YAFAxlP,aACA+kB,QAgBIysN,qUAAe/2K,KAN3Bk6H,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,cACVC,SCnBW,8bDsBFs1N,IAAwBnrO,6gBEhBrC40D,2EAEA,OAFoBL,QAEpB42K,EAFA,CAAoBhrO,qBAiBhB,WAAYslE,EACAC,GADZ,MAEI0lK,YAAM3lK,EAAG,gCAAiC7Q,KAAMh2D,KADxC,+BALFqpE,gBAAgB,IAAIqmH,eAO1B3tJ,QAAQC,IAAI,6FAGhB,OAb+C2zB,QAa/C42K,qCAAgB1lK,GACG,YAAXA,EAAE5tC,MAAoBj5B,KAAKoiQ,cAAc5gP,KAAKqlD,EAAEr0D,QAGxD+5N,4CAAuB1lK,GACnB7mE,KAAK+Q,MAAMm0O,uBAAyBr+K,GAGxC0lK,gCACIvsO,KAAK+Q,MAAMm0O,wBAAyB,4CAnCnCplP,WAFAsiB,yCAiBJstK,+BACAA,iCAEAA,WALQ68C,qUAA6B9zK,KANzCi3H,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,8BACVC,SCbW,olBDgBFs1N,IAAsCnrO,sgBEE/C,WAAYylE,EACAC,GADZ,MAEI0lK,YAAM3lK,EAAG,sBAAuBtlE,OAAUvB,KADlC,0BAJHqpE,gBAAe,IAQxB,OATqCg5L,QASrC91B,mCACQvsO,KAAKsiQ,eACTtiQ,KAAKwB,EAAEm/B,UAAUuU,kBAAkBh1C,YACnCF,KAAKinJ,eAAekrD,KAAK,WACzBnyM,KAAK87K,SAAW97K,KAAK87K,QAAQ73J,2BAGjCsoN,mCACIvsO,KAAKwB,EAAEm/B,UAAUuU,kBAAkBh1C,YACnCF,KAAKinJ,eAAekrD,KAAK,WACzBnyM,KAAK87K,SAAW97K,KAAK87K,QAAQ73J,0BAGjCsoN,gCAAW1lK,GACP,OAAOA,GAAWA,EAAQ8oK,kBAAoB,4CAnCzB7vO,WAEpBkf,8CAWJ0wK,yBACAA,WAFQ68C,qUAAmBt2K,KAN/By5H,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,kBACVC,SCXW,inDDcFs1N,IAA4BnrO,ufEHzC63D,0EAEI,0BAA0B,KAC9B,OAHoBD,QAGpBuzK,EAHA,CAAoBhrO,qBAmBhB,WAAYslE,EACDC,EACCuC,EACAtC,EACAC,GAJZ,MAKIwlK,YAAM3lK,EAAG,8BAA+B5N,KAAMj5D,KAJvC,mBACCopE,aACAA,mBACAA,uBANJA,iBAAiC,KAUtB,OAhB0BpQ,QAgB1BuzK,4BAAnB,sBACIvsO,KAAK8sC,eAAej3B,KAAK7V,KAAKwB,EAAEm/B,UAAUsnG,QAAQn2H,UAAU,SAACg1D,IACpDA,GACDD,EAAKgzH,oBAAsB/yH,EAAgB+yH,oBAC3ChzH,EAAK91D,MAAM8mJ,gBAAkB/wF,EAC7BD,EAAK07L,4BAKjBh2B,4CACI,IAAM1lK,EAAmB7mE,KAAK+Q,MAAM8mJ,gBAAgB+kC,wBACpD58L,KAAK+Q,MAAMyxP,iBAAmB37L,EAAiBzwC,IAAI,YAC/C,MAAO,CACHzE,MAAOm1C,EAAE5rC,KACTi1C,KAAMrJ,EAAEqJ,KACR51D,QAASusD,EAAEvsD,QACX2hC,QAAS4qB,EAAE3rC,QACXsnO,UAAY37L,EAAU27L,cAKlCl2B,+CACI,OAAOvsO,KAAKwB,EAAEsxL,iBAAiB+K,UAAUnxJ,OAASxsC,eAC3CF,KAAK+Q,MAAMyxP,kBAAoBxiQ,KAAK+Q,MAAMyxP,iBAAiB5yP,QAGtE28N,kCACI,GAAIvsO,KAAKwB,EAAEq8B,OAAOE,WAAY,CAC1B,IAAM8oC,EAAgB,IAAIxtE,MAC1BwtE,EAAcvyD,KAAO,UACrBuyD,EAAcpqC,MAAQz8B,KAAKuS,GAAG,cAC9Bs0D,EAAcsoG,MAAQ,iBACtBtoG,EAAcwvF,QAAUr2J,KAAK0iQ,kBAC7B1iQ,KAAKyxK,mBAAmBvqB,KAAKrgF,GAAe,OACzC,CACH,IAAIC,EAAY,oBAAmB9mE,KAAK+Q,MAAM8mJ,gBAAgB8qG,sBAAwB,IACtF3iQ,KAAKinJ,eAAeC,KAAK,UAAWlnJ,KAAKuS,GAAG,cAAevS,KAAK0iQ,kBAC5D1iQ,KAAK+Q,MAAM8mJ,gBAAgB+qG,iBAAkB,KAAM,KAAM97L,KAIrEylK,mCACI,IAAM1lK,EAAe7mE,KAAK6iQ,mBAC1Bh8L,GAAgBA,EAAam5B,eAGjCusI,2BAAM1lK,SACF,GAA8B,QAA1BC,OAAK/1D,MAAM8mJ,uBAAe,eAAEirG,mBAC5B9iQ,KAAK+Q,MAAM8mJ,gBAAgBirG,mBAAmBj8L,OAC3C,CACH,IAAMwC,EAAerpE,KAAK6iQ,mBAC1Bx5L,EAAeA,EAAa05L,QAAU9gN,OAAOikC,UAIrDqmJ,2BAAM1lK,UAC4B,QAA1BC,OAAK/1D,MAAM8mJ,uBAAe,eAAEslC,qBAC5Bn9L,KAAK+Q,MAAM8mJ,gBAAgBslC,mBAAmBt2H,IAI9C0lK,6BAAR,qBACI,MAA2D,mBAAnB,QAA1B1lK,OAAK91D,MAAM8mJ,uBAAe,eAAEj+G,cAAwD,QAA1BktB,OAAK/1D,MAAM8mJ,uBAAe,eAAEj+G,eAA2C,QAA1ByvB,OAAKt4D,MAAM8mJ,uBAAe,eAAEj+G,cAGrJ2yL,uCAAkB1lK,EAAOC,WAIrB,GAHAD,EAAMnjB,iBACNmjB,EAAM8L,kBAEF3yE,KAAKwB,EAAEq8B,OAAOE,cAAyC,QAA1BsrC,OAAKt4D,MAAM8mJ,uBAAe,eAAEsiB,gCAAgC,CACzF,IAAMnzG,GAAkC,QAA1BD,OAAKh2D,MAAM8mJ,uBAAe,eAAEilC,mBAAoB98L,KAAKuS,GAAG,qBAChE62D,EAAa,IAAI/vE,MAIvB,OAHA+vE,EAAW3sC,MAAQuqC,EACnBoC,EAAWnR,MAAQj4D,KAAK+Q,MAAMyxP,sBAC9BxiQ,KAAKyxK,mBAAmBo+D,gBAAgBzmK,GAI5C,SAAGm+J,KAAK1gK,IACD,GAGX0lK,yCACIvsO,KAAKuiQ,uBAEL,IAAM17L,EAAmB7mE,KAAK+Q,MAAM8mJ,iBAAmB73J,KAAK+Q,MAAM8mJ,gBAAgBilC,iBAClF,GAAKj2H,EAEL,KAAMC,EAA0B,2BAEhC,IAD8BpnB,SAASy3H,eAAerwG,GAC1B,CACxB,IAAMC,EAA6B/mE,KAAK++C,SAASI,cAAc,OAC/Dn/C,KAAK++C,SAAS4+M,YAAY52L,EAA4B,KAAMD,GAC5D9mE,KAAK++C,SAAS4+M,YAAY52L,EAA4B,YAAaF,GACnE7mE,KAAK++C,SAASikN,aAAatjN,SAASgqJ,cAAc,sBAAuB3iI,EAA4BrnB,SAASgqJ,cAAc,2CAIpI6iC,iCAAY1lK,EAAGC,GAAf,WACI9mE,KAAK+Q,MAAM8mJ,gBAAgBn6B,KAAK33F,aAAaj0B,UAAU,YAC9Ci1D,GAA6B,GAAlBA,EAAQn3D,QAIxBy5D,EAAK45L,kBAAkBxtP,SAAWsxD,EAClCsC,EAAK45L,kBAAkB3/O,qBAAgB,IAJnC+lD,EAAKj2D,GAAGC,YAAYg2D,EAAK92D,GAAG,0BAQrBg6N,+BAAnB,WACIvsO,KAAK8sC,eAAen0B,QAAQ,YAAK,SAAErG,0DAnJdxS,WAHT4vL,oBAA2BA,mBAMtC1wK,YADwD3lB,oDAkB5Dq2L,mCACAA,mCAEAA,YAASvuL,MAAC,kBAJForO,qUAA2B9yK,KANvCi2H,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,2BACVC,SCnBW,83EDsBFs1N,IAAoCnrO,yDEfpC,4UAAmBs4D,KAL/Bg2H,aAAU,CACP14K,SAAU,kBACVC,SCJW,gZDOFu1N,wfEAbxuK,0EACI,eAAoB,KACxB,OAFoBnE,QAEpB0yK,EAFA,CAAoBhrO,qBAWhB,WAAYslE,EAA6BC,GAAzC,MACI0lK,YAAM3lK,EAAG,sBAAuB7I,KAAMh+D,KADD,oBAIhC,OAN4B65D,QAM5B0yK,4BAAT,WACIvsO,KAAK+Q,MAAMovM,MAAQngN,KAAKkjQ,YAGrB32B,2BAAP,SAAsB1lK,GAClB7mE,KAAK8Z,SAAS,CAAC+sD,KAGX0lK,qBAAR,WACI,MAAO,CACH,CAAEzoM,KAAM,UAAWq+L,IAAK,iBACxB,CAAEr+L,KAAM,UAAWq+L,IAAK,iBACxB,CAAEr+L,KAAM,UAAWq+L,IAAK,iBACxB,CAAEr+L,KAAM,aAAcq+L,IAAK,oBAC3B,CAAEr+L,KAAM,WAAYq+L,IAAK,kBACzB,CAAEr+L,KAAM,QAASq+L,IAAK,eACtB,CAAEr+L,KAAM,OAAQq+L,IAAK,cACrB,CAAEr+L,KAAM,QAASq+L,IAAK,eACtB,CAAEr+L,KAAM,QAASq+L,IAAK,uBACtB,CAAEr+L,KAAM,WAAYq+L,IAAK,kBACzB,CAAEr+L,KAAM,gBAAiBq+L,IAAK,uBAC9B,CAAEr+L,KAAM,UAAWq+L,IAAK,iBACxB,CAAEr+L,KAAM,QAASq+L,IAAK,0DAxC1BriO,WAHC3B,QAeIouO,qUAAmBtyK,KAL/By1H,aAAU,CACP14K,SAAU,kBACVC,SCbW,iUDgBFs1N,IAA4BnrO,8eEErC,WAAYylE,GAAZ,MACI2lK,YAAM3lK,EAAG,oBAAqBtlE,KAAYA,OAAUvB,KAL/C,gBAAiC,GACjC8mE,SAAiC,GACjCA,SAAgB,KAMhB,OAV0B5M,QAU1BqyK,kCAAT,SAA+B1lK,GAC3B,MAAO,CAAC,CACJ3rC,KAAMl7B,KAAKuS,GAAG,wBACd4oB,QAAS,WAAM,eAAQ6G,IAAI6kC,OAInC0lK,mCAAc1lK,GACV9kC,QAAQC,IAAI6kC,6CA7BZ/mE,uCAaH4vL,wBACAA,wBACAA,WAJQ68C,qUAAiBnyK,KAJ7Bs1H,aAAU,CACP14K,SAAU,gBACVC,SCVW,m0BDYFs1N,IAA0Bwc,4eELvCoa,2EAEA,OAFoB9oM,QAEpBkyK,EAFA,CAAoBhrO,qBAchB,WAAYslE,EACAC,GADZ,MAEI0lK,YAAM3lK,EAAG,sBAAuBs8L,KAAMnjQ,KAD9B,+BAHJqpE,iBAAiC,KAOtB,OATkBhP,QASlBkyK,4BAAnB,sBACIvsO,KAAK8sC,eAAej3B,KAAK7V,KAAK8gK,oBAAoBsiG,cAActxP,UAAU,YACtE+0D,EAAK91D,MAAMsyP,uFAAUtkF,IAAKj4G,MAE9B9mE,KAAKwB,EAAEm/B,UAAU2iO,sBAAqB,IAG1C/2B,iCAAY1lK,GACR7mE,KAAK8gK,oBAAoByiG,oBAAoB18L,IAGjD0lK,8BACIvsO,KAAK8gK,oBAAoBkzB,UAGVu4C,+BAAnB,WACIvsO,KAAK8sC,eAAen0B,QAAQ,YAAK,SAAErG,0DAxClCxS,WAEaggB,QAaTysN,qUAAmB1xK,KAN/B60H,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,iBACVC,SCdW,ssCDiBFs1N,IAA4BnrO,ufEPzC+5D,2EAGA,OAHoBqoM,QAGpBj3B,EAHA,CAAoBhrO,qBA0BhB,WAAYslE,EAA8BC,GAA1C,MACI0lK,YAAM3lK,EAAG,qBAAsB1L,KAAMn7D,KADC,2BAJhCqpE,mBAAmB,IAAIqmH,iBARjC,OAHoC8zE,QAGpC13P,sBAAaygO,sBAAO,KAApB,SAAqB1lK,GACG,iBAAVA,IAAoBA,EAAQxvE,mBAAoBwvE,EAAO,oBACjE7mE,KAAK+Q,MAAM2wP,QAAU76L,EACjB7mE,KAAK+Q,MAAM2wP,UACX1hQ,KAAK+Q,MAAM0yP,eAAgB,EAC3BzjQ,KAAK0jQ,8CAWMn3B,4BAAnB,sBACI9uM,WAAW,WAAM,OAACopC,EAAK91D,MAAM2wP,UAAY76L,EAAK91D,MAAM0yP,eAAgB,IAAQ,MAGtEl3B,oCAAV,WACIvsO,KAAK0jQ,aAGUn3B,wBAAnB,WACIvsO,KAAK+Q,MAAM0yP,eAAiBzjQ,KAAK+Q,MAAM2wP,SAG3Cn1B,iCACI,OAAOvsO,KAAKykP,gBAAgBkf,eAGhCp3B,oCAAe1lK,GACX7mE,KAAK4jQ,iBAAiBpiP,KAAKqlD,IAGvB0lK,sBAAR,sBACI9uM,WAAW,qBACDupC,EAAqD,QAApCD,EAAqB,QAArBsC,EAAa,QAAbvC,IAAK3xC,gBAAQ,eAAE0uO,cAAM,eAAEx9K,qBAAa,eAAEy9K,gBAC7D,GAAK98L,EAEL,KAAMoC,EAAQpC,EAAe7nB,cAAc,SAa3CiqB,EAAM3pB,YAAYunB,EAAe+8L,eAXX,qHAYlBl9L,EAAKrlE,EAAEq8B,OAAOE,YAAYqrC,EAAM3pB,YAAYunB,EAAe+8L,eAPtC,wHASzB/8L,EAAeg9L,MAAQh9L,EAAeg9L,KAAKvkN,YAAY2pB,KACxD,+CAhFFtpE,WAMAigB,wCAeJ2vK,yBACAA,kCAQAA,2BAEAA,YAASvuL,MAACrI,SAbFyzO,qUAAkB03B,KAN9Bv0E,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,iBACVC,SClBW,srBDqBFs1N,IAA2BnrO,ufEXxC86D,2EAIA,OAJoBb,QAIpBkxK,EAJA,CAAoBhrO,qBAiBhB,WAAYslE,EACAC,GADZ,MAEI0lK,YAAM3lK,EAAG,6BAA8BtlE,KAAY26D,GAAOh8D,YAA6BA,gBAA+BF,KAD9G,2BAIH,OAVmCq7D,QAUnCkxK,wBAAT,sBACIvsO,KAAK+Q,MAAMq3E,SAAWmhG,cACtBvpL,KAAK+Q,MAAM8+L,gBAAkB7vM,KAAKqkB,KAAK,+BAA+B3I,OAAO,YACzE,OAAQorD,EAAEx0C,YACDpyB,WACD,OAAO2mE,EAAKyvH,iBAAiBp2L,wCAAuD2mE,EAAKmlL,eAAevkK,WACvGvnF,SACD,OAAO2mE,EAAKyvH,iBAAiBp2L,sCAAqD2mE,EAAKmlL,eAAen2F,WACrG31J,cACD,OAAO2mE,EAAKyvH,iBAAiBp2L,2CAA0D2mE,EAAKmlL,eAAen2F,MAInH,OAAO,IAEP71J,KAAK+Q,MAAM8+L,gBAAgBjgM,OAAS,IAAG5P,KAAK+Q,MAAMixL,eAAiBhiM,KAAK+Q,MAAM8+L,gBAAgB,GAAGv9K,QAGzGi6M,8CACUzlK,EAAU9mE,KAAK+Q,MAAMixL,gBAAkB9hM,WACzCF,KAAKgsP,eAAevkK,MAAQznF,KAAKgsP,eAAen2F,MACpD71J,KAAKvE,GAAGuE,KAAK2kP,cAAcuf,aAAalkQ,KAAKs6B,aAAct6B,KAAK+Q,MAAMixL,eAAgBl7H,EAAS9mE,KAAK+Q,MAAMq3E,WAAW,EAAM,WACvHvhB,EAAK5iD,qEApDRnkB,WAEA+kP,8CAoBJn1D,gCACAA,WAHQ68C,qUAA0B/wK,KANtCk0H,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,0BACVC,SCnBW,89BDsBFs1N,IAAmC1qO,0fET5C,WAAYglE,UACR2lK,YAAM3lK,EAAG,2BAA4BtlE,KAAYA,OAAUvB,YAHrBm8D,iDATrCr8D,OASIysO,qUAAwB5wK,KANpC+zH,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,uBACVC,SCRW,0pCDWFs1N,IAAiCwc,0CET9CvpE,4BAEkB,6BAAd,SAAkC+sD,GAI9B,OAHoBA,EAASnvM,UAAU,GACZk/K,MAAM,WAC5BlmL,IAAI,SAASizC,GAAO,OAAOr4D,SAASq4D,EAAK,MAChCtwB,QAGJyzL,WAAd,SAAuBD,GACnB,IAAM1lK,EAAc0lK,EAASnvM,UAAU,GACvC,OAAkC,UAA1BpsB,SAAS61D,EAAa,KAGpB2lK,WAAd,SAAuBD,GACnB,MAAO,KAAgB,SAATA,GAAqBxxM,SAAS,IAAIi+C,SAAS,EAAG,MAEpEwzJ,EAjBA,4eC4BI,WAAY3lK,GAAZ,MACI2lK,YAAM3lK,EAAG,4BAA6BtlE,OAAUvB,KAZ3C,uBAAwB,EAGxB8mE,YAAuC,SAEvCA,eAAc,EAIbA,UAA8B,IAAI4oH,eAIxC5oH,EAAKq9L,YAAc,cAAiB/3P,KAAKmqH,MAAsB,IAAhBnqH,KAAK40B,UAAqBjG,aAG1D,OAvBwBqpO,QAuBxB73B,4BAAnB,WACIvsO,KAAKqkQ,iBAAmBrkQ,KAAKu0J,QAAQ+yC,UAGzCilC,mCAAc1lK,GACV,OAAO7mE,KAAKqkQ,kBAGhB93B,iCAAY1lK,GACR7mE,KAAKskQ,aAAetkQ,KAAKu0J,QAAQ/yI,KAAKqlD,IAG1C0lK,yCACI,IAAKvsO,KAAKu5D,MAAO,MAAO,GAExB,IAAMsN,EAAM24G,uBAA8Bx/K,KAAKu5D,OAC/C,OAAKsN,EAEE,mBAAmBA,EAAG,SAFZ,IAKrB0lK,8CACI,IAAKvsO,KAAKu5D,MAAO,MAAO,GAExB,IAAMsN,EAAM24G,uBAA8Bx/K,KAAKu5D,OAC/C,OAAKsN,EAEE,QAAQA,EAAG,UAFD,6CA1DI/mE,yCAYxB4vL,uBACAA,wBACAA,sBACAA,uBACAA,8BACAA,gCACAA,oCACAA,2BACAA,yBACAA,6BACAA,yBAIAA,YAhBQ68C,qUAAyBg4B,KANrC70E,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,oBACVC,SCTW,q/DDYFs1N,IAAkCnrO,4CEHlCpB,UAAe,GAGxB,6BAAgCwsO,oBAAK,KAArC,WACI,OAAUxsO,KAAKiuP,KAAI,sCAEvBniP,sBAAiC0gO,qBAAM,KAAvC,WACI,OAAUxsO,KAAKiuP,KAAI,sCAEvBniP,sBAAsC0gO,yBAAU,KAAhD,WACI,OAAUxsO,KAAKiuP,KAAI,sCAEvBniP,sBAAoC0gO,uBAAQ,KAA5C,WACI,OAAUxsO,KAAKiuP,KAAI,sCAEvBniP,sBAA0C0gO,6BAAc,KAAxD,WACI,OAAUxsO,KAAKiuP,KAAI,MAAMjuP,KAAKiuP,KAAI,sCAGtCniP,sBAAI0gO,qBAAM,KAAV,WACI,MAAO,KAAK/oL,KAAKzjD,KAAKsU,qEArBzBo7K,sBACAA,qBACAA,uBAEAA,cAAWvuL,MAAC,+BAGZuuL,cAAWvuL,MAAC,oCAGZuuL,cAAWvuL,MAAC,uCAGZuuL,cAAWvuL,MAAC,2CAGZuuL,cAAWvuL,MAAC,4BAjBJqrO,qUAAa7vK,KALzB+yH,aAAU,CACP14K,SAAU,WACVC,SCJW,sJDOFu1N,2eEAbnvK,2EAEA,OAFoBN,QAEpBwvK,EAFA,CAAoBhrO,qBAchB,WAAYslE,EAA8BC,GAA1C,MACI0lK,YAAM3lK,EAAG,wBAAyBtlE,KAAsB87D,KAAMr9D,KADxB,sCAFhCqpE,qBAAqB,IAAIqmH,iBAOnC,OAVuC3yH,QAUvCwvK,4CAAuB1lK,SACnB7mE,KAAK+/B,mBAAmBve,KAAuB,QAAlBslD,OAAK5xC,KAAKC,gBAAQ,eAAEuiO,iEAzBhD53P,WAGAwvB,qCAYJogK,sBACAA,YAASvuL,MAAC,oCACVuuL,YAHQ68C,qUAAqBtvK,KALjCyyH,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,qBACVC,SCdW,i/BDgBFs1N,IAA8Bwc,4CEVvC,WAAoBxc,oBAGpB,6BAAaC,wBAAS,KAAtB,SAAuBD,GACnBvsO,KAAK42C,KAAK21L,oCAGJC,iBAAV,SAAeD,GACX,GAAiB,MAAbA,GAA4C,MAAlBvsO,KAAKwkQ,UAEnC,KAAM39L,EAAe7mE,KAAKwkQ,UAAUv9D,aACpCjnM,KAAKwkQ,UAAUv9D,aAAe,CAC1BC,YACgB,MAAZrgI,OAAY,EAAZA,EAAcqgI,aAAiBqlC,EAAU1sH,mBAAkB,+DAjBlEniD,2CAOJgyH,WAJQ88C,qUAA2BppK,GADvC,eAAU,CAAEpsD,SAAU,uBACVw1N,2fCQT,WAAY3lK,GAAZ,MACI2lK,YAAM3lK,EAAG,eAAgBtlE,OAAUvB,KAO7B,qBAAc,IAAI0vL,eACnB5oH,YAAoB,QACpBA,cAAsB,OAE/BA,SAAS,KACT,OAd8BhJ,QAc9BhyD,sBACIygO,oBAAK,KAMT,WACI,OAAOvsO,KAAKusI,YARhB,SACU1lE,GAIN7mE,KAAKusI,OAAS1lE,mCAMlB0lK,wBAAG1lK,GACC,MAAO,qBAAuBA,GAGzB0lK,oCAAT,sBACI9uM,WAAW,WACP,IAAMqpC,EAAQD,EAAKw6E,OAAOrvH,KAAK,YAAQ,SAAKq0D,cAAci7D,UAC1Dz6E,EAAK06E,WAAWz6E,EAAMuf,gBACvB,MAGPkmJ,8BAAS1lK,OAAEC,EAAMD,SACb7mE,KAAKutC,YAAY/rB,KAAKslD,EAAOt0D,OAC7BxS,KAAKuhJ,WAAWz6E,IAGpBylK,gCAAW1lK,GACP,GAAKA,EAEL,KAAMC,EAAQD,EAAO26E,OAAO,GAC5B,GAAK16E,EACL,MAAK26E,OAAOp7D,cAAc15B,MAAM45B,MAAQzf,EAAM46E,YAAc,KAE5D,IAAIr4E,EAAQrpE,KAAKwB,EAAEq8B,OAAO8d,QAAUmrB,EAAM46E,YAAc56E,EAAM66E,WAAa76E,EAAM86E,aAAaF,YAAc56E,EAAM66E,WAClH3hJ,KAAKyhJ,OAAOp7D,cAAc15B,MAAMk1F,UAAY,cAAcx4E,EAAK,kDA3D9DvpE,uCAeJ4vL,YAASvuL,MAAC,0BACVuuL,eAAYvuL,MAAC,wBAEbuuL,6BACAA,4BACAA,6BACAA,uBAGAA,WAdQ68C,qUAAYlpK,KANxBqsH,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,oBACVC,SCTW,ioBDYFs1N,IAAqBnrO,0fEM9B,WAAYylE,EAA8BC,EAC9BuC,GADZ,MAEImjK,YAAM3lK,EAAG,gCAA8B7mE,KAFD,yBAC9B+mE,iBAIZA,mBAAmB,SAACC,GAChB,IAAMoC,EAA8BpC,EAAE9pB,IAAIzjC,MAErC2vD,EAAam4L,eAElBx6L,EAAKtrE,GAAGsrE,EAAK2qL,aAAajgP,QAAQ23D,EAAam4L,eAAe,IAAO,EAAO,cACnEr6L,GAASpyC,YACdiyC,EAAK06L,eAAeC,QAAUrqQ,qBAAsB6vE,GAASj1D,OAAOi/O,UACpEnqL,EAAK06L,eAAen+O,gBAAgB,2BAjBCmhP,iDAbpB3kQ,WAEpB4kQ,YAEAh6O,8CAWJglK,YAASvuL,MAAChF,SAFFowO,qUAA2BjpK,KALvCosH,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,2BACVC,SCZW,ohCDcFs1N,IAAoCr8M,0eERjDy0O,2EAEA,OAFoBC,QAEpBr4B,EAFA,CAAoBhrO,qBAahB,WAAYslE,GAAZ,MACI2lK,YAAM3lK,EAAG,mBAAoBtlE,KAAKojQ,KAAM3kQ,KAHlC,oBAAgC,IAAI0vL,iBAMvC,OAR2Bk1E,QAQ3Br4B,yBAAP,SAAoB1lK,GAChB7mE,KAAK25E,WAAWn4D,KAAKqlD,EAAEptD,MACnBotD,EAAEptD,OACFzZ,KAAK+Q,MAAM8zP,YAAc,CAACh+L,EAAEptD,KAAK9M,WAIlC4/N,2BAAP,SAAsB1lK,GAClB,OAAOA,EAAI7tD,YACF9Y,WACD,MAAO,gBACNA,aACD,MAAO,aACNA,UACD,MAAO,qDAnCdJ,2CAeJ4vL,YAFQ68C,qUAAgBu4B,KAN5Bp1E,aAAU,CACP34K,UAAWjX,IACXkX,SAAU,eACVC,SCZW,ioCDeFs1N,IAAyBwc,yFEsQzBjkL,GAAkBlB,aAGvBtsD,KACArY,KACA8lQ,KACAC,KACAhmQ,KAGAvF,GACAI,GACAmuB,GACA9sB,GACAf,GACA8mD,GACAzmD,GACAI,GACAmsB,GACAM,GACAM,GACAU,GACAkqB,GACA0yN,GACAC,GACApmN,GACAoG,IACGp5C,OAAO6lE,OAAO96E,IAAa,CAG9B4F,GACAjB,KACA7D,GACAwE,KACAkB,GACAJ,GACAK,KACApB,GACAX,GACAgmC,GACAxjC,GACA29D,GACAmB,KACA87L,GACA96L,KAGAsnM,GACAjsQ,GACAksQ,KAGAlnQ,GACA4Y,GACA7G,GACApC,GACAmC,GACAzE,GACAC,GACAqL,GACA3G,GACAC,GACAsG,GACAxJ,GACAE,GACAP,GACA2J,GACAzJ,GACAqL,KACA9K,KACAiJ,EAGA1W,GACAC,GACA2C,GACAF,GACAC,GACAqJ,GACAy5P,GACA55P,EACAc,GACAE,GACAC,GACA8J,GACA7K,GAGAkG,GACAsG,KACA1Y,GACAC,GACAC,GACAkN,GACAy4P,GACAC,GACAx/M,GACA/4C,GACAD,GACA8D,GACA2D,GACAopD,KAGG9xD,OAAO6lE,OAAOvkE,KAAM,CACvBA,oBACAA,YACAA,gBACAA,gBACAA,WACAA,+BACA8sC,KAEAn7C,GACA9H,GACA+K,EACAR,EACAq0D,KACAqI,KACA1E,GACAI,GACA4rM,GACApqM,GACAsB,GACA8F,KAGKwC,GACT,CACIvnB,GACAtvB,GACAE,GACAO,GACAG,GACA7J,GACAM,GACAM,GACAM,GACAxH,GACA8F,GACAhF,GACAL,GACAoF,GACAxC,GACAxB,GACAglP,GACAppF,GACA5sJ,GACAivB,GACAhoB,GACAhG,GACAR,GACAkvJ,GACA1vH,GACA8T,GACAxT,GACAltC,GACAizC,GACA5P,GACAmF,GACAK,GACA+5M,GACApQ,GACAqQ,GACAryM,GACAxE,GACAE,GACAtoC,GACAsC,GACAP,GACA+xB,GACA3wB,GACAJ,GACAm8O,GACAv7O,GACAw7O,GACA96O,GACAujB,GACAgJ,GACAwuN,GACA37M,GACAK,GACAlyD,GACAP,GACAozB,GACA+qC,KACAumH,GACAx+G,KACAm9L,GACA/4N,GACAa,GACAwB,GACAI,GACA7T,GACAsuJ,GACA10I,GACAmyI,GACAq+E,GACA/vN,GACA9Z,GACA2xC,GACAtrB,GACA6rB,IAGFC,GACF,CACIkhL,KACAjtO,KACAwG,KACAuR,GACArG,GACAY,GACAmkB,GACAjsB,KACAkN,GACAmT,GACAK,GACAprB,GACAk0B,GACA8sN,GACAt8O,KACAsoP,KACAh6O,GACAu4J,IAIFx9G,GACF,CACI/8C,KACAyvB,KACA7nC,KACAiwO,KACA9oO,KACAF,KACAvZ,KACAkC,KACAnF,MACA+E,IACAiY,GACAzd,MACAwd,KACA3Z,KACAoqB,KACAnxB,KACAumL,KACAljI,MACA1hD,MACA+rD,KACAs6M,KACAiB,KACAtkP,KACAwvC,MACAmK,MACAr8D,MACA2lB,KACAe,GACApiB,KACAmiB,KACAimP,KACAptQ,MACA2G,GACAkhP,KACAthO,KACA,CAAE2wK,QAASp3L,MAAmBq3L,SAAUj0K,GAAuBmqP,OAAO,GACtE,CAAEn2E,QAASH,kBAAiBu2E,WAAYjoQ,KAAuBgoQ,OAAO,IAIxE/gM,GACF,CACItsE,MACAH,MACAE,MACA0F,KACA3F,MACAG,MACAgsB,GACA9rB,KACAD,KACA8tB,KACAsB,KACA64B,KACAolN,MACAhnN,KACAU,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","names":["U","mt","O","Dt","Ot","At","Tt","Lt","yt","lt","q","K","ut","ht","ft","it","Et","M","pt","dt","wt","ne","Ft","Y","st","ot","Ht","Bt","ie","Yt","ce","Ve","ye","ve","xe","Zt","ir","be","Z","J","oe","Fe","De","Le","Ze","he","Vn","xa","$e","to","Pn","xt","Xe","Wo","Yr","Bl","ae","mn","qt","sn","An","Oe","fe","Qt","Re","eo","Se","ko","Nl","Co","hn","gn","Gn","Io","wo","Hn","Do","Ko","Sn","_i","kl","le","To","Ye","un","Mo","no","_o","We","yn","bn","Ml","fa","jn","qo","zn","Cn","Un","$n","Wn","an","on","fo","Ee","Rn","Nt","Qo","Jo","Oo","Ce","Ne","je","Fn","Vl","Kn","Ke","mo","Xo","Ie","yr","Oi","qn","Zr","In","cn","Gl","qe","de","ar","oo","ro","Ei","ma","ti","we","wn","Yo","ha","lr","Pe","Ln","Hl","Fr","br","jl","I","i","this","TypeName","v","e","S","t","n","L","api","ExecuteGetAction","ControllerName","isShowOnlyAccessible","options","GetLoadOptions","LoadActive","OrganizationID","ChildType","ExecutePostAction","c","args","E","T","N","b","A","CategoryID","CompanyID","k","G","P","z","j","$","Q","BankTypes","AccountID","TransactionID","at","Bu","Pi","Zo","EnumSystemOptionsZ","EnumCredentialTypes","EnumDownloadTaskStatuses","EnumDownloadStatuses","EnumDownloadRequestStatuses","EnumDownloadStepStatuses","EnumJobStatuses","EnumBatchStatuses","EnumUploadStatuses","EnumSnapthotsStatuses","EnumReplicationStatuses","EnumBankGroups","EnumBanks","EnumBalanceDetailsSortType","EnumBookingAccountSubtypes","EnumBookingAccountStockTypes","EnumBookingAccountDepositTypes","EnumAccountingSoftwares","EnumUploaderType","EnumUserNotificationMethods","EnumTransactionTypes","EnumBankChargeType","EnumOrganizationChildEntityTypes","EnumCompanyChildEntityTypes","EnumDashboardGroupBy","EnumBalanceNotificationGrouping","EnumEntityTypes","EnumBankPassCredentialValidity","EnumClassificarionRuleFieldType","EnumClassificarionRuleMatchType","EnumMatchingRelationship","EnumBalanceHistoryReportMode","EnumForecastSystemSource","EnumAccountingDocumentType","EnumPeriodType","EnumIncreaseType","EnumSide","EnumLoanSide","EnumSource","EnumForecastDateRelevance","EnumSummaryLevel","EnumFutureForecastGroupBy","EnumCashflowSummarizedAggregationLevel","EnumUserAuthorizationType","EnumNotificationRequestStatuses","EnumShowInCurrencyOptions","EnumExportType","EnumPositiveNegative","EnumNotificationTemplateSectionFields","EnumNotificationTemplateSectionType","EnumYesNo","EnumDownloadFailureReviewStatus","EnumUploadRequestStatuses","EnumBankTypes","EnumUploadResult","EnumReplicationObjectTypes","EnumPaymentMeansTypes","EnumInterestType","EnumAmortizationType","EnumLoanStatus","EnumLoanPaymentFrequencyType","EnumRecommendationPeriodType","EnumLoanInterestPeriodCalculationType","EnumDocumentType","EnumJournalEntryDocumentType","EnumPredefinedNotificationTemplates","EnumVisibilitySetting","EnumCustomFieldsetFieldInputType","EnumExpenseStatus","EnumSecurityType","EnumSecurityStatus","EnumLoanPostPaymentRecalculationOptions","EnumFinancialReportDateType","EnumFinancialReportType","EnumFinancialReportCurrencyType","EnumFinancialReportRangeType","EnumFinancialReportNodeEntityType","EnumFinancialReportRootNodesTypes","EnumDataExportType","EnumLedgerAccountType","EnumJournalEntryCurrencyTypes","EnumExportTransactionsMethod","EnumChequeTypes","EnumFutureChequeStatus","EnumCCProcessingCompanies","EnumCCBrands","EnumCCInvoiceStatuses","EnumCCTransferStatuses","EnumCCInvoiceParseResults","EnumPDFDocumnetType","EnumApplyToBookingAccountsTypes","EnumNoteFieldTypes","EnumNoteMatchTypes","EnumNotesExportAdjustments","EnumAccountFullNameDisplayType","EnumJournalEntryUploadLevel","EnumJournalEntrySources","EnumFileImportEncodings","EnumFileImportTypes","EnumFileImportRowDelimiters","EnumFileImportAccountMappingTypes","EnumGenerationTypeJournalEntry","EnumFileImportColumns","EnumFileImportCurrencyDenominations","EnumFileImportRowsSortOrders","EnumAdminActivityRecordType","EnumAdminAccessRequestStatus","EnumAdminAccessRequestDurationType","EnumJournalEntryStatuses","EnumBookingAccountSelectionMethods","EnumBillingContractViewSubmodules","EnumBankPassTwoFactorMethod","EnumOtpProcessingState","EnumNotificationBalanceSummaryType","EnumLanguage","EnumLoanPaymentInterestPrincipalType","EnumFilterRelateEntities","EnumUserAllowOptions","EnumPostingTemplateBookingAccountTypes","EnumExecutionMode","EnumDownloadRetryStatus","EnumRelevantFilteringTypes","EnumReplicationRequestStatus","EnumBillingContractsReportModule","EnumIncomingPaymentStatus","EnumIncomingPaymentInvoiceLineTypes","EnumIncomingPaymentDocumentType","EnumIncomingPaymentUploadLevel","EnumConsentStatuses","EnumPlaidAvailableProducts","EnumPlaidProducts","EnumBankPassAccessTypes","EnumBankPassAutoDiscoverModes","EnumPeriod","EnumJournalExportType","EnumUploadType","EnumSumSide","EnumLoanHandlingType","EnumExportSFTPGroupingMode","EnumCategoryClassificationFieldType","EnumCategoryType","EnumExternalAccountMappingStatus","Qn","ho","V","_organizationID","Dn","Nu","ReloadMenuItems","Object","Date","getFullYear","getMonth","getDate","Yesterday","Math","floor","BeginningOfYear","ef","transactionId","nf","of","EntryID","rf","io","af","ao","lf","Lr","zl","sf","dr","uf","ku","cf","lo","pf","Vo","sr","Go","xf","UserInfo","Info","Type","IsAdmin","IsSuperAdmin","IsAllow","IsAllowSettings","IsAllowReports","IsOrganizationLicensedForAdvancedReports","IsAllowCCProcessing","IsOrganizationLicensedForCreditCardProcessing","IsAllowAccountingReports","IsOrganizationLicensedForAccountingSync","IsAllowCashflow","IsOrganizationLicensedForCashflow","IsAllowLoans","IsOrganizationLicensedForLoans","IsAllowExpenseManagement","IsOrganizationLicensedForExpenseManagement","IsOrganizationLicensedForeignBanks","IsAllowSyncLogs","IsUser","AuthorizationType","IsOrganizationLicensedForJournalEntries","IsOrganizationAvailableForManualDataExport","IsOrganizationLicensedForTransactionsUpload","IsOrganizationLicensedForLedgerAccountsSync","IsAllowIncomingPaymentProcessing","IsAllowJournalEntryReport","IsOrganizationLicensedForIncomingPaymentProcessing","length","some","o","r","ff","ga","mf","hf","Mu","gf","Xn","bf","Vu","l","s","g","m","gt","w","State","parseInt","QueryParams","CategoryName","NewCategoryName","OldCategory","NewCategory","TemplateOnly","InitCategory","transactionEndpoint","GetView","accountEndpoint","GetByTransactionID","_subscriptionInit","df","subscribe","Category","Transaction","Entity","Account","SetIsAddPostingTemplate","InitClassificationRule","NotifyReloadTitle","unsubscribe","RC","value","Template","CreateNewPostingTemplate","AppropriateTemplate","VisibleLoadPanel","IsOneTime","oneTimeSetupCategory","setupJournalEntryGeneration","TransactionCategoryID","SetupCategory","NotifyEntitySaved","NavigateBack","UI","StopMessage","ResponseMessage","CreateandSetupCategory","ClassificationRule","SetupJournalEntryGeneration","accessService","IsAllowJournalEntryPosting","RegenarateJournalEntries","Recategorize","ValidFromDate","GetDateOnly","ValidUntilDate","IsAddPostingTemplate","InitTemplate","transactionCategoryEndpoint","Get","pipe","Name","IsActive","Bn","MatchingRelationship","IsDebit","IsCredit","IsApplyToSubTypeCurrent","IsApplyToSubTypeCredit","Lines","MatchData","Notes1","MatchType","FieldType","classificationRuleEndpoint","GetNextPossiblePriority","Priority","Data","postingTemplateEndpoint","GetActualTemplates","Entities","BookingAccounts","BookingAccountID","ApplyToBookingAccounts","push","IsShowSelectionTemplate","DateFrom","BookingAccountType","TransactionCategoryName","CategoryType","organizationEndpoint","TransactionCategories","PostingTemplates","F","ln","pn","Ai","X","R","_","Wt","yf","providers","selector","template","Vt","Br","iCompanyID","vf","If","wf","Te","so","vr","Df","Tf","Gu","Ul","_f","Of","Hu","Af","Wl","ReportColumns","Columns","TotalColumn","InitColumns","Report","tree","AdditionalRows","forEach","RemoveAdditionalNode","Node","Nodes","IsLeaf","Level","NodeID","AddAdditionalNode","expandedRowKeys","AdditionalNodeID","rowType","rowElement","classList","add","data","PeriodIndex","EntityType","Names","Periods","Navigate","EntityEntryID","DateTo","IsOpen","component","getNodeByKey","key","dataField","allowSorting","visible","sortIndex","sortOrder","CreateColumn","headerCellTemplate","cssClass","columnIndex","cellTemplate","Children","columns","alignment","caption","Index","format","NumberSum","Jt","ColumnsData","TotalData","NewNode","filter","indexOf","splice","Ef","Pf","Ut","Jn","Rf","Lf","Kl","Ct","IsAllowFilter","ReportType","navigatorService","GetCustomRouteData","RangeType","DateType","CurrencyType","CurrentLevel","Vendors","Customers","IsIncludeZeroNodes","FolderTypes","AddDefaultPeriod","LoadDataSource","LoadCompanies","MainFoldersSource","LoadVendors","LoadCustomers","LoadMainFolders","reportTree","CollapseAll","OnInitState","itemData","BusinessPartners","concat","financialReportEndpoint","GetReport","ReportLevels","MaxLevel","DataSources","Companies","vt","companyEndpoint","ListEx","DS","Reload","GetMainFolders","IncomeExpenseSides","businessPartnerEndpoint","ya","Be","Ri","Nn","Ho","Ff","ju","PaymentID","Bf","Ql","ql","kf","Mf","Vf","Uu","Rt","ze","zf","jo","Nr","kr","Jl","Organizations","endpoint","ListGridViews","IsShowOnlyAccessible","GetActiveOrganizationsCount","ActiveOrganizationsCount","Uf","Wf","Kf","qf","$u","Xv","IsHasAccess","OrganizationName","adminAccessRequestEndpoint","Cancel","toolbarOptions","items","unshift","location","isCustom","IsShowOnlyAccessibleChange","emit","OnIsShowOnlyAccessibleChanged","Fi","Qf","Yf","BankPassID","ContractID","DownloadRequestID","JobID","Zf","ke","em","va","SubType","ResetDate","Amount","Notes","ReloadDate","JECreationDate","BookingAccountId","FromDate","Ku","Sa","nm","Tn","qu","rm","Qu","GenerationType","ProcessBookingAccounts","ShowDialogShort","InitComponent","bookingAccountEndpoint","IsCCPostingAccountExist","IsCCPostingAutoGenerate","Accounts","Categories","Templates","GetCategorizationEndpoint","GetCategorizationEntryIDField","EntityID","CloseDialogWithSuccess","InitCategories","InitTemplates","GenerationTypes","LIST","LoadGlobal","transactioncategoryEndpoint","xn","om","Ju","am","nd","od","rd","Da","id","ad","Ta","ld","dd","_a","sd","ud","Oa","cd","pd","Ea","xd","fd","Pa","md","hd","Aa","gd","yd","Ra","bd","vd","Fa","Sd","La","Ba","Mi","Cd","Id","wd","Dd","Td","_d","Na","Od","Vi","Ed","Gi","Pd","ka","Ad","Rd","Fd","Ld","Bd","Nd","kd","Md","Vd","Gd","Hd","jd","zd","Ud","Ma","$d","Wd","Qe","Kd","qd","Va","Qd","Jd","Ga","Xd","Yd","Zd","ts","es","Gr","ns","os","Ha","rs","is","as","ja","ls","ds","ss","us","ii","cs","ps","za","xs","fs","ms","hs","ai","Ua","gs","ys","bs","$a","vs","Ss","Cs","Wa","Is","vn","Ka","ws","Ds","li","qa","Ts","Qa","_s","Os","Ja","Es","Ps","As","Xa","Rs","Fs","Ya","di","si","Ls","Za","Bs","Ns","tl","ks","Hi","el","Ms","en","Vs","Gs","Dr","Yn","Ao","nl","fn","Yu","Xu","Organization","Company","GetReconciliationEndpoint","GetReconciliationEntryIDField","Reconciliation","lm","Cr","Li","dm","Eo","um","Mr","cm","Zl","pm","Ia","Zu","wa","xm","td","fm","Bi","mm","ed","Vr","hm","ur","cr","tc","Ir","gm","Ni","ec","CategoryTpe","vm","nc","Cm","fr","oi","Im","wm","Dm","Tm","oc","_m","Om","rc","Em","dataExportTypes","DeploymentID","Pm","ki","Am","ic","organizationID","activeOnly","ac","Hs","co","Tr","Ae","Rm","Ro","label","IsExternalAccountsMapping","AccountBank","Currency","CompaniesItems","find","BankPassesItems","AccountGroupsItems","AccountGroupID","PageNumber","SelectedCompany","Value","Bank","TextShort","AccountNumber","CreationMode","LoadBankPasses","LoadData","DownloadStartDate","IsDownloadConfirm","BookingAccountsItems","LoadCompaniesDeploymentsBillingContracts","LoadAccountGroups","LoadUsers","SaveData","OnStart","DeploymentsItems","deploymentEndpoint","BillingContractItems","billingContractEndpoint","BillingContractID","accountGroupEndpoint","IsActiveOnly","IsTemporary","IsConfirmedReadOnly","AccessType","AutoDiscoverMode","bankPassEndpoint","userEndpoint","UsersItems","IsSyncAccounting","IsSyncCashflow","LoadDeployments","LoadBillingContracts","SetNextPageNumber","GetSaveparams","currentPage","Validate","then","IsLoading","ValidateCompanyFromCreationWizard","IsSuccess","OnFailedResponse","ValidateAccountFromCreationWizard","bookingAccountsList","grid","instance","saveEditData","ValidateBookingAccountsFromCreationWizard","MAX_PAGE_NUMBER","ClosePage","SaveDataFromCreationWizard","SelectedBankPass","SelectedAccountGroup","DownloadRequest","otpInputDialog","downloadRequest","Message","AcceptChanges","SetPrevPageNumber","AccountGroup","BankPass","BookingAccountsEntities","map","CCPayDay","ExternalAccountMappingParams","ResponseCode","UnexpectedMessage","xr","Po","wr","zo","ri","lc","dc","Lm","uc","js","Nm","zs","ClearState","InvalidBookingAccounts","SaveInvalid","Save","replace","It","DateFormatShort","IsCheckDate","uploadRequestEndpoint","CreateUploadRequest","InfoMessage","validationGroup","reset","sc","Bm","ol","km","Mm","Vm","_r","Gm","Hm","cc","replicationRequestEndpoint","Create","OrganizationGroupingTabs","tabs","IsAllowOrganizationLevelEntities","name","RemoveEmptyGroupTabs","DisplayMode","IsAddMode","CountActualTabIndexesInSelector","InitStateFromQuery","ReloadTabsBadges","ActualIndexOfTabInSelector","index","CurrentTabIndex","CurrentTabIndexInGroup","CurrentAdditionalSettingsTabIndex","entries","P_TabIndex","JobPriority","IsLicensedForTransactionsUpload","DefaultCurrency","IsRemoveHistoricalData","HistoricalDataRetentionPeriod","GetLastBillingContractEntryId","GetLastDeploymentEntryId","CredentialID","ReturnUrl","ReturnUrlParams","JSON","stringify","IsNewOrganization","IsSupportHistory","GetChildObjectsCount","badge","toString","Instance","repaint","text","onClick","OnDownloadRequestedData","bind","IsHasAutomaticDeployment","OnUpload","OnGoToTransactions","OnGoToBalances","OnGoToSyncStatus","OnRecategorize","OnShowDialogRecioncile","IsLicensedForJournalEntries","OnShowDialogRegenarateJournalEntries","IsLicensedForAccountingSync","IsLicensedForCashflow","IsLicensedForLedgerAccountsSync","SyncNow","uploadDialog","OpenDialog","downloadRequestEndpoint","DownloadOrganizationUpdatedData","ResponseExtendedMessage","messageBoxDialog","Title","Prompt","recategorizeDialog","RecategorizeByOrganization","reconciliationDialog","ReconcileOrganization","generateJournalEntryDialog","RegenarateJournalEntriesByOrganization","InternalNotes","Framework","CompanyInfo","substring","TimeFormatShort","Session","DisplayUserName","endsWith","setTimeout","element","getElementsByClassName","selectionStart","Screen","IsDesktop","IsMobile","wizardDialog","Navigator","EntityOriginal","OnSave","call","SelectedGroupIndex","itemIndex","cdr","detectChanges","ResetSelectedAndRepaint","ee","uo","ji","ni","Ca","Hr","Yl","pr","ui","pc","me","zm","fc","OnUpdateCount","ShowAsWindow","mc","yc","gc","ShowActiveOnly","OnLoadActive","IsSelectionMode","OnSelectionChanged","widget","onValueChanged","$m","zi","qm","Qm","Jm","Ym","$s","GenerateID","subscribtionOnNavigate","SysEvents","OnNavigate","RefreshStatus","LoadSyncStatus","ID","random","substr","isReadyToRefresh","ShowFailedOnly","syncStatusAccountEndpoint","IsError","TooltipVisible","pi","Xm","mr","vc","th","Sc","LoadAccounts","AccountGroups","console","log","Cc","nh","Ic","wc","Tc","Dc","rh","lh","il","SelectedAccountID","_c","ch","uh","qs","ph","Ec","xh","Pc","resourcesService","ModuleName","GetAllowedBanks","GetBanksByType","sessionService","GetLocalBanks","GetExternalCreditBanks","GetForeignBanks","GetExternalLoanersBanks","GetCCProcessors","et","Text","IsLocalBank","IsExternalCreditBank","IsForeignBank","IsExternalLoanersBank","IsCCProcessor","H","BankType","Uo","store","er","group","jr","Ui","fh","hh","Qs","$i","BindHandler","BankPasses","IsExternalLoanerBank","LoadCreditLimits","LoadOrganization","CheckPlaidMappings","entityLoaded$","CompanyFullName","CopyBookingAccounts","CopyFromAccountID","IncludeTransactionInfo","BookingAccountCode","bookingAccounts","AddRange","Endpoint","GetHistory","BookingAccountSubtype","NavBack","AccountFullName","OnCopyFromAccount","OnAddSimpleBookingAccountsTemplate","OnAddNormalBookingAccountsTemplate","OnAddExtendedBookingAccountsTemplate","IsBookingAccountsAdded","IsAnyBookingAccountDownloadDateChanged","IsManualBalancesEntry","OnShowAccountMappings","OnDelete","AddSimpleTemplate","AddNormalTemplate","AddExtendedTemplate","RecategorizeByAccount","ReconcileAccount","IsCCPostingAccountIDVisible","CCPostingAccountID","RegenarateJournalEntriesByAccount","IsUIEvent","Branch","InitBankType","creditLimitEndpoint","CreditLimits","OnDownloadStartDateChanged","next","IsBalancesExists","DefaultDownloadStartDate","Array","ValidateGrid","creditLimits","Promise","all","BookingAccountEntities","DeleteBookingAccountEntryIDs","DeletedBookingAccountEntryIDs","CreditLimitEntities","DeleteCreditLimitEntryIDs","DeletedCreditLimitEntryIDs","SaveAccountDetails","al","RefreshEntityOriginal","SubscribeOnEntityChanges","ReloadGrid","ReflectEntitySaved","BankGroup","DownloadAccountUpdatedData","accountActionDialog","StartNewEntity","CopyAccount","CreatedBy","CreatedDate","UserName","FullName","Banks","banksListService","GetGroupedDSFromList","SetDirty","bankPassSelectBox","sl","disabled","HasPlaidBookingAccounts","ll","xi","mh","yh","Fc","Embedded","gh","Ch","Lc","_companyID","ShowAccountGroupColumn","Sh","Wi","Ih","Nc","wh","Dh","OnManageCredentials","GetLinkParams","fi","Th","Oh","ShowActiveChanged","kc","Rh","Ah","Gc","_organizationChangedSubject","asObservable","Hc","providedIn","Me","ct","Fo","jc","Lo","resolve","Settings","IsVisible","DefineMode","IsOnlyDefaultDataSource","DataSource","GetDefaultDataSource","Mode","Independent","CanBeLoaded","InitDataSource","_subscriptions","FilterSettings","DataSource$","FilterMajor","LoadStatus$","Loaded","IsLoaded","IsDefaultLoaded","CastValue","ValueChange","ValueChanged","Params","IsMultiple","isArray","Error","SetDataSource","finally","ShouldHandleDefault","Default","IsMinor","FilterMinor","DataSourceLoaded","_companyChangedSubject","pl","zc","ClearSubscriptions","_isAdminUser","_components","Subscriptions","IsReadySubject","IsReady$","InitSubjects","AddRules","keys","CompanyItems$","GetSource","TransactionCategoryItems$","AccountItems$","BookingAccountItems$","ScenarioItems$","CashflowCategories$","CashflowDataSources$","ProbabilityLevelItems$","UpdateFilterData","LoadStatusSubject","InitItemData","BookingAccount","CurrencyFilter","Scenario","ProbabilityLevel","TransactionCategory","ForecastMapper","BusinessPartner","CashflowCategory","CashflowDataSource","ValueSubject","DataSourceSubject","Fh","Value$","kn","AddRuleOrganizationChanged","AddRuleCompanyChanged","AddRuleAccountGroupChanged","AddRuleBookingAccountSubtypeChanged","AddRuleBankChanged","AddRuleCurrencyChanged","AddRuleAccountChanged","AddRuleCanBeLoadedTransactionCategory","AddRuleCanBeLoadedForecastMapper","AddRuleCanBeLoadedCashflowCategory","AddRuleCanBeLoadedCashflowDataSource","AddRuleCanBeLoadedBusinessPartner","AddRuleCanBeLoadedAccount","AddRuleCanBeLoadedBookingAccount","AddIsReadyRule","organizationService","Organization$","companyGlobalService","Company$","IsEqualCompanyID","GlobalCompanyID","nt","GetIsLoadedItem","flat","$o","Or","Lh","Bh","zr","se","op","Ge","Nh","Proxy","set","emmiter","Uc","FilterStateChange","FilterValues","InitSelectGlobalOrganization","InitSelectGlobalCompany","InitChangeIsReady","FilterPanel","zt","filterService","Clear","Component","ComponentName","ReadQueryParams","kt","re","GetArray","Xt","He","BookingAccountsSubtypes","Ue","Boolean","IsActiveCashFlow","IsLoadActiveCashflow","jt","Subtypes","CurrenciesFilter","ue","te","qi","rt","Gt","_t","bt","Mt","GetValue","FiltersReady","FilterPanelAction","FilterValuesChange","SetEmpty","ReloadSource","FilterCompanyChange","IsReady","IsTimeVisible","setHours","option","pe","AmountFrom","AmountTo","IsForceGeneralSectionVisible","IsCustomGeneralSettingsOnly","IsDateVisible","IsDatesVisible","IsAmountsVisible","IsCustomOptionsSettings","Side","IsForceOptionsSectionVisible","Destroy","GlobalOrganizationID","OnOrganzationChanged","OnFilterValuesChanged","OnFiltersReady","OnCompanyChanged","Init","GetQueryParams","IsCurrentRouteWindow","ChangeOrganization","_isReadParams","CompanyIDs","ReadParam","BookingAccountSubtypes","Cast","Ki","$c","Ji","Vh","qc","InitFilterService","IsInitialized","IsReadyComponent","Qi","FilterValuesChanged","FilterCompaniesChanged","InitQuickFilter","Mh","Je","Qc","nn","reportGrid","gridAny","OnGetFilterSettings","QuickFilterSettings","OnGetQuickFilterSettings","OnResetFilterValues","MaxReportDate","mi","OnGetCustomFilterSettings","OnGetCustomQuickFilterSettings","join","OnBeforeLoadData","OnLoadData","OnAfterLoadData","OnRefreshGrid","collapseAll","expandAll","startsWith","IsFlatMode","DisplayCurrency","IsWindowMode","IsAllowExport","IsAllowPrint","GridExtender","GetParam","ForecastMappers","Scenarios","ProbabilityLevels","Sides","jh","Jc","Admins","Hh","Ur","hi","Zc","Uh","tp","ep","np","bo","Wh","rp","gridCell","excelCell","column","GetFormatWithCurrency","numFmt","note","LISTITEMX","Symbol","GetCurrencySymbol","split","screenService","IsRTL","GroupByCompany","GroupByBookingAccountSubtype","GroupByCurrency","columnOption","Subtype","TransactionsDateFrom","command","_subTypesForDetailsLoadedData","DetailsLoans","DetailsStocks","DetailsDepos","DetailsGuarantees","cellElement","childNodes","remove","groupIndex","summaryProcess","totalValue","SortOrder","summaryItems","valueFormat","displayValue","row","GetDrillDownText","IsRelevantSubtype","OnDrillDown","BalanceType","BalanceAmount","BalanceNominalAmount","$h","Jh","BalanceID","LineID","Xh","Zh","ip","IsFromDashboard","GetParams","IsLoadDetails","IsHideZeroBalances","Balances","balanceEndpoint","ListForBalanceReport","CreditLimitSum","HasCreditLimits","On","Yh","ng","og","rg","ig","renderer","createRenderer","plaidScriptLoaded","tu","createElement","src","onload","complete","onerror","error","appendChild","document","body","lg","plaidScriptLoader","LoadPlaidScript","plaidEndpoint","GetLinkTokenInRefreshMode","GetLinkToken","InitPlaid","plaidHandler","Plaid","create","token","onSuccess","Event","PublicToken","Metadata","onExit","OpenPlaidLink","open","ap","lp","dg","ug","sg","pg","sp","NewPassword","BankPassAccessTypes","apply","IsLicensedForForeignBanks","Users","BankPredefined","IsFromEmail","IsUsernameReadOnly","OnStartNewConsent","OnStartAutoDiscover","ExecuteAccountsMapping","PlaidRemap","window","addEventListener","origin","type","callbackResponse","close","consentsEndpoint","StartNewConcent","FormatCallbackUrl","href","IsDirty","OnDoSave","DownloadBankPassUpdatedData","IsDefineAvailabilityWindow","NavigateDefault","LoginByVoiceMsg","SeparatePhoneNumber","SeparatePhoneUserName","CredentialValidity","TwoFactorMethod","BankClientCode","IsConfirmedReadonly","event","ctrlKey","test","preventDefault","trim","FetchLinkTokenAndSave","FinancialInstitutionID","PlaidMetadata","institution","institution_id","FinancialInstitutionName","PlaidPublicToken","SaveWithConsent","ShowAccoutsMappingMessage","previousValue","IsPrivate","CheckConsentStatus","Status","ShowBankConnectionHasErrorsMessage","FetchLinkTokenAndInitializePlaid","plaidService","eu","encodeURIComponent","Xi","dp","cg","cp","ou","ShowProblemsOnly","RaiseToolbarFilterChanged","OnGridToolbarFilterChanged","loadActive","showProblemsOnly","up","yg","xp","_isLoadGlobal","ProblemsOnly","IsLoadGlobal","IsShowProblemsOnly","gg","mp","vg","Cg","hp","GetRouteParams","isNaN","parseFloat","GetBankPass","LoadBookingAccounts","GetAccountsMappings","AccountMappings","GetExternalAccountMappingParams","updatedRow","consentsEndpoin","UpdateExternalAccountMapping","refresh","OnInitDataSources","externalAccountData","account","ExpectedBookingAccontSubtype","ExternalAccountCode","Mask","AccountsItems","BookingAccountFullName","ConsentID","ExternalAccountID","ExternalAccountHash","IBAN","Iban","Sg","Tg","yp","Map","BookingAccountName","IsAcceptMappingDisabled","_accountStatusMap","BookingAccountsItemsOptions","AccountItemsOptions","ShouldConfirmMapping","FindBookingAccount","Kt","OnMappingChanged","OpenWizard","HandleChange","setValue","HandleBookingAccountChange","GetAccountsItems","GetBookingAccountsItems","AccountMappingStatus","get","OnAddNewEntity","cellValue","rowIndex","Dg","Pg","vp","_valueField","SetTotalCount","_dataSource","valueText","argumentText","TotalCount","reduce","ValueField","Eg","Fg","Lg","kg","Mg","Gg","Vg","jg","Cp","LoadBillingReport","billingReportEndpoint","ReportData","TopReportData","slice","SetFilterDates","Quarter","QuarterYear","setYear","InitState","iu","Hg","Wg","$g","wp","Kg","au","qg","Qg","billingContractID","Jg","Dp","ShouldLockCells","ReportModule","allowEditing","cancel","editorOptions","includes","HideMasterDetailExpandButton","HideAndPaintDiffCells","HideOnlyBaseModuleFields","CompaniesDiff","UsersDiff","AccountsDiff","style","visibility","SummaryTotalExtra","PaintDiffCell","BlockUndefinedCell","changes","CreateUpdatedBillingContractViews","promise","SaveChanges","BillingBaseAccountsQuantity","BillingBaseUsersQuantity","BillingQuantity","BillingSum","assign","billingContractsReportEndpoint","editRowKey","billingGrid","collapseRow","ActualAccountQuantity","ActualUsersQuantity","ContractBaseAccountsQuantity","ContractBaseUsersQuantity","max","ActualCompanyQuantity","ContractQuantity","ActualSum","Yi","Xg","oy","PaintDiffCells","AlternativeDiff","Submodule","IsSubgridMode","cells","className","ry","uy","sy","py","Tp","SetDefaultBillingMonthValue","BillingMonth","IsAlternativeGridView","ShowDifferencesOnly","BillingContractViews","ChildEntities","cy","Ep","Op","ActionTitle","JEDate","my","Sy","Pp","_Bank","SetData","GetRowCount","IsDeposits","IsStocks","IsLoans","IsGuarantee","IsCreditCard","GetColumn","IsForCreationWizard","IsCurrent","ShowAddButton","BookingAccountAdded","BookingAccountRemoved","JournalEntryPostingStartDate","ChangeJEPostingStartDate","oldData","newData","GetLastBalance","resetActionDialog","BalanceActual","ResetBalance","reloadActionDialog","IsShowJEDate","by","IsHasReconciliationsWithActiveCashFlow","DateFormatLong","ReloadBalance","AfterReloadDataFromBank","DownloadBookingAccountUpdatedData","IsBalanceExists","IsDeletable","deleteRow","catch","parentType","IsTransactionsExist","DownloadDateChangedIds","BookingAccountDownloadDateChanged","RecategorizeByBookingAccount","RegenarateJournalEntriesByBookingAccount","Deployment","DataExportType","BookingAccountsChanged","OnUploadeRequestCreate","OnReload","OnReset","OnRegenarateJournalEntries","vy","IsActiveDownload","IsActiveUpload","DepositType","StockType","Iy","wy","Dy","Bp","_allowedSubtypes","TabSubtypes","SetTabsBadges","CC4Digits","DisplaySubTypesTabs","ChangeCurrentType","_currentType","LoadDeployment","subtypesTabs","FilterBySubType","GetSubtypesCount","CurrentType","SubtypesFilter","OnAfterLoad","FocusedBookingAccountID","SetGridFilter","findIndex","selectedIndex","bookingAccountTemplateService","GetSimpleBookingAccountsTemplate","GetNormalBookingAccountsTemplate","GetExtendedBookingAccountsTemplate","BookingAccountChanged","GetSubtypesForGrid","CurrentTypeChange","Refresh","Lp","Np","kp","Ey","Zi","Py","Ry","Mp","Gp","Vp","xl","Fy","By","Ly","Vy","jp","AccountingSoftware","CompanyTabs","UseAutomaticReconciliation","UpdateTabsCounts","CheckForecastMapperCount","Tab","Subtab","CurrentSubTabIndex","fromEntries","IsForecastMappersExist","SetCashflowInitMenuVisibility","ShowInitCashflowMenu","IsCashflowActive","InitDeployments","InitBillingContracts","OnDeploymentChanged","UpdateDownloadUpdatedButtonVisibility","IsDownloadUpdatedDataBtnVisible","OnInitCashflow","IsSyncLedgerAccounts","OnRemoveSynchedData","InitCashflow","forecastMapperList","DownloadCompanyUpdatedData","RecategorizeByCompany","ReconcileCompany","RegenarateJournalEntriesByCompany","IncomingPaymentUploadLevel","IncomingPaymentTolerance","Deployments","Items","IsDbNameHidden","DBName","RemoveSynchedData","LoadEntity","BillingContracts","HasNonManualBalanceAccountOrCCContract","RepaintToolbar","Hp","Ny","jy","GetCurrencyText","DashboardState","percent","NumberPercent","zp","zy","OpenGridView","target","LISTITEM","pointName","color","Color","Uy","fl","Ky","OpenChartView","qy","Wp","IsShowCurrentOnly","GroupBy","IsSetBankColorToAccount","Xy","tb","Icon","eb","Qp","_data","InitSeries","GetTimelineSeriesField","BalanceOriginal","Series","valueField","seriesName","rb","db","GoToBalancesReport","Palette","argument","sb","cb","pb","Zp","RateDate","CurrentCurrency","mb","gb","hb","bb","tx","GetDefaultTitle","LoadCurrencyHistory","currencyRateEndpoint","GetCurrencyHistory","CurrencyHistory","ml","yb","Cb","NavigateCurrencyHistory","isRatesHidden","sidebarOpened","Ib","ta","Tb","ox","_b","du","Ob","hr","Eb","Pb","LoanID","recalculationType","LoanPaymentID","Ab","Rb","organizationId","companyIds","dynamicOnly","Fb","$r","Lb","kb","rx","qp","Kp","Up","$p","Yp","Jp","shareInformationDialog","localStorageService","Er","InitStateFromLocalStorage","LoansKpi","LoadAllBalances","LoadRates","FetchTotalCashflow","companyService","LoadLoansKpi","LastTransactionsDateCount","SetItem","GetSettingName","LoadLastTransactions","LastTransactionsCategoryGroupsDateCount","LoadLastTransactionsCategoryGroups","DebitLastTransactionsCategoryGroups","Debit","CreditLastTransactionsCategoryGroups","Credit","RepaintCharts","GetItem","localStorage","getItem","GetBalanceDashboardTitle","IsHideClearButton","SetTimelinePeriod","CurrentTimelineText","IsSetBankColorToAccountTemporary","LoadBalances","LoadBalancesGroupingPerCurrency","LoadAccountBalances","LoadBalancesPerCurrency","LoadAssets","LoadLiabilities","GetTransactionsParams","LastTransactions","ShowDate","valueOf","DateFromLastTransactionsCategoryGroups","DateToLastTransactionsCategoryGroups","GetLastTransactionsGroupedByCategory","sort","reverse","LoadDashBoardBalances","AccountBalances","GetCommonDashboardParams","ListForDashboardByAccount","ListForDashboardByAccountAndCurrency","BalancesGroupingPerCurrency","BalancesPerCurrency","AssetsBalances","LiabilitiesBalances","loanPaymentEndpoint","GetLoansKpi","CurrencyRates","RepaintChartsColor","gridChartBalances","RefreshChart","accounts","companies","accountGroups","banks","OnSetBankColorToAccountChanged","GetBalancesAmount","GetFirstBalanceNotes","OnClearFilters","Nb","balancePerCurrencyChart","balanceAssetsChart","balanceLiabilitiesChart","IsActiveCashflow","cashflowReportEndpoint","CashflowBalanceView","CalculationDate","GetCashflowBalance","TotalCashflow","LastDateStr","nr","or","Bb","Gb","_OrganizationID","Hb","$b","Ub","Kb","gr","Otp","OtpTimerExpired","downloadStateSubscription","CheckDownloadState","checkStateStatusSubscription","otpTimeroutSubscription","GetDownloadSmsStatus","Job","DownloadId","DownloadID","OtpTimerStarted","StartOtpTimeoutError","GetResultJob","CheckStateStatus","CloseDialogWithCancel","CloseWithError","SetOTP","hl","MarkDownloadRequestAsFailed","Wb","lx","OnInitComponent","MenuPositon","OnApplyFilter","OnClearFilter","downloadRequestDialog","OnSyncNow","su","uu","qb","Mb","Jb","selectedKeys","OnInitComponentFinished","columnHidingEnabled","OnFocusChanged","CCContractID","DownloadContractUpdatedData","Enums","Success","Failure","NoData","Pending","BrowserStartFailure","LoginFailure","IsOpenBankPassVisible","OnOpenBankPass","Xb","a","u","p","y","St","Pt","_e","$t","En","dn","yo","Bo","BankGroups","BankPassIDs","LoadContracts","LoadDownloads","Custom","IsDisableDefaultFilterGarantee","RefreshDownloadTasks","BankPassSource","Contracts","contractsEndpoint","Downloads","downloadEndpoint","RefreshFocusedRows","CurrentDownload","AvailableSubtypes","DownloadTasks","Tasks","RefreshBookingAccountSubtypes","ShowFailedTasksOnly","OnDownloadTaskFocusChanged","FindAsync","CurrentDownloadTask","CurrentDownloadTaskID","DownloadSteps","Steps","TaskLineID","downloadGrid","D","x","rn","q_","Exception","Q_","Z_","OnGoToBookingAccount","OnGoToContract","tO","oO","rO","dO","predefinedTemplate","NotificationTemplateID","sO","vo","uO","NotificationTemplates","PredefinedTemplate","cu","cO","yO","eS","OnShareInformation","OnDuplicate","InitTabs","pageSize","Number","MAX_SAFE_INTEGER","BookingAccountsDeposits","BookingAccountsStocks","BookingAccountsLoans","BookingAccountsTransactions","BookingAccountsLoanPayments","SectionsDictionary","SetEntity","GetPredefinedTemplate","OnEntityLoaded","CustomSubject","IsIncludeSyncStatus","BalanceSummaryType","IsIncludeLoginLink","Sections","Yb","Filters","FilterField","Values","SectionType","Groupings","ExportType","IsFilterByAmount","Duplicate","TemplateID","OnEntityValidate","OnEntityPrepareForSave","GetFilledTemplate","previewDialog","HTMLBody","hO","accordionBalances","OnAddSectionClick","accordionTransactions","accordionBalanceDetails","accordionLoans","NotificationTemplatesTabs","gO","SO","GetColor","IsInCard","StatusesListName","NavigateToReport","CO","TO","_O","EO","oS","LoadSyncStatusDownloads","LoadOrganizations","rS","IsDownloadOnly","syncStatusEndpoint","ListForDownloads","Rows","SyncStatusDownloads","Statuses","Count","DownloadStatus","sx","OO","FO","aS","LoadSyncStatusUploads","SyncStatusUploads","IsUploadOnly","ListForUploads","ListForJournalEntryUploads","ListForIncomingPaymentUploads","GetFailedCount","UploadStatus","VisibleTooltips","RO","sS","dS","MO","GO","cS","Reference","GetBookingAccounts","StartDate","BankReferenceNumber","icon","LoadTransactionCategories","HiddenColumns","UpdateColumnsVisibility","organizationSubscription","_SubscribeGridEvents","size","groupDialog","AccountName","Fields","isFinite","GoToAddRecurringForecast","showTransactionsByDialog","EnableNotes1","EnableNotes2","Notes2","EnableReferene","SetColumnVisibility","currencies","Set","eventType","GetCurrentLevelCaption","OnRowHoverChanged","chequeDialog","values","IsChequesExist","IsExpense","ReconciliationID","ListCategories","OnGoToCreateLoan","OnGoToAccount","OnGoToReconciliations","OnReconcile","innerHTML","RegExp","CategoryGroupIndex","collapsedItems","every","title","append","stopPropagation","getVisibleColumns","GetGroupedColumns","onContentReady","onOptionChanged","fullName","static","uS","VO","UO","$O","KO","pS","IsTransactionBookingAccountsSubtypes","BankChargeDateFrom","BankChargeDateTo","IsDebitOnly","IsCreditOnly","Transactions","GridCaption","CurrentLevelCaption","clearFilter","InitSortOrder","Action","OpenCheque","GetSortOrderSettingName","DetectChanges","OnReadyFilter","gl","Zb","WO","ev","JO","YO","XO","xS","ZO","t0","FileExported","Initiated","DataSent","BalanceMismatch","BalanceNotExistsForDate","CompanyNotFound","AccountNotFound","e0","i0","a0","d0","l0","s0","u0","p0","c0","f0","x0","m0","h0","y0","hS","LoadUploads","LoadJournalEntryUploads","LoadIncomingPaymentsUploads","SetFilterSettings","BatchID","Uploads","uploadEndpoint","JEUploads","journalEntryUploadEndpoint","IncomingPaymentsUploads","incomingPaymentUploadEndpoint","ResetCustomFilters","ReloadToolbar","nv","fS","mS","g0","S0","yS","v0","T0","bS","D0","ux","P0","A0","R0","F0","L0","V0","vS","daysOfMonthSource","from","buildDaysHierarchy","ScheduleType","DaysOfMonth","MapDaysOfMonth","DaysOfYear","stringToIds","DaysOfWeek","RowIndex","padStart","getSelectedDatesAsString","daysHierarchy","parentId","monthNumber","isMonth","dayNumber","String","updateSelection","treeView","unselectAll","selectItem","getSelectedNodeKeys","k0","M0","H0","j0","CS","z0","DateFormatFull","isTemplateRequired","NotificationScheduledDay","LineChanges","UserNotificationMethods","LoadNotificationTemplates","LoadAlertTemplates","IsDeleted","NotificationMethodBankPass","notificationTemplateEndpoint","alertTemplateEndpoint","AlertTemplates","NotificationMethod","NotificationLanguage","AllowedCompaniesKeys","AllowedCompanies","AllowedAccountsKeys","AllowedAccounts","NotificationScheduledTime","AlertTemplateID","companyGrid","GetSelectedRowKeys","accountGrid","loginService","ImpersonateLogin","ActivityType","adminActivityRecordEndpoint","lookup","calculateCellValue","textContent","messageBox","xx","UpdateEntity","scheduleDialog","isNewRow","getVisibleRows","px","E0","cx","SS","G0","U0","$0","TS","K0","q0","J0","X0","Z0","IsShowIsLoadGlobalCheckox","IsShowIsLoadActiveOnlyCheckox","tE","iE","OS","Tabs","IsInitiatedEntity","SetDefaultIcon","LoadCompany","_defaultIconFileName","IsGlobal","rE","lE","_isLoadActiveOnly","IsLoadActiveOnly","firstLoad","dE","cE","pE","mE","fE","hE","ClassificationRules","gE","SE","AS","OnInitNewPriotity","vE","FS","IE","ClassificationRuleID","NewPriority","toIndex","MovePriority","wE","GridName","IsShowIsActiveOnlyCheckbox","OnShowGlobalChanges","toLowerCase","searchText","DE","OE","_isActiveOnly","EE","RE","IsShowActiveOnlyCheckbox","FE","kE","LS","IsInitedEntity","RegenarateJournaleEntriesByPostingTemplate","NE","VE","JournalExportType","GE","pu","NS","kS","HE","zE","MS","ReferenceDateFrom","ReferenceDateTo","CreatedDateFrom","CreatedDateTo","PostingDateFrom","PostingDateTo","IsNotExportedOnly","Sources","OnGetToolbarSettings","JournalEntries","OnOrganizationChanged","SelectedJournalEntriesIDs","GetMoveInFile","URL","createObjectURL","download","click","GetMoveInConfig","MarkAsIsExportedManually","TransactionCategoriesDataSource","OnLoadMoveInDat","rv","jE","KE","GS","currentSelectedRowKeys","GetItemItems","getDataSource","SelectedRows","currentDeselectedRowKeys","SelectedJournalEntries","SelectionChanged","Posted","PostedInJournalVoucher","PostedAndReconcilled","ExportedManually","SkippedAlreadyReconcilled","Draft","OnExportMoveInDat","ExportMoveInDat","WE","XE","JE","ZE","HS","IsExported","IsReadOnly","YE","oP","zS","IsShowOriginalAmount","ListForPeriods","BalancesByPeriods","nP","lP","$S","_isClearingGrouping","state","customLoad","GetCurrentPeriodBalance","PeriodDateFrom","PeriodDateTo","PeriodTitle","BalanceAmountNominal","BalanceAmountdDifference","BalanceAmountdDifferenceNominal","TotalSum","aP","cP","pP","fP","KS","LoadCheques","LoadedChequeID","Cheques","LoadCheque","imagesEndpoint","Image1","Image2","write","focus","print","WS","img1","nativeElement","height","width","addImage","img2","save","bi","xP","yP","gP","bP","vP","QS","CP","LoadTemplates","SelectTemplates","templateEndpoint","ShareWith","Myself","GetPendingNotificationRequest","Email","CurrentUserID","Emails","requestEndpoint","SaveBatch","ReceiverUserId","OnGridClick","qS","SP","wP","Properties","Language","AccountingSoftwares","BankCode","DepositTypes","StockTypes","Currencies","BookingAccountSubTypes","OrganizationTabs","DashboardTabs","RecurringForecastTabs","BankPassProblemNotificationMethods","DownloadStatuses","DownloadTaskStatuses","DownloadStepStatuses","CCTransferStatuses","UploadStatuses","HistoryDateRanges","CreditCardsDateRanges","ReportDateRanges","LoanTransactionFilterDateRanges","BalanceReportDates","FinancialReportDates","BalanceSheetReportDates","ForecastSources","CashflowReportDates","ReconciliationDates","RecurringPeriods","LoanStatuses","InvoiceStatuses","SecurityTypes","SecurityStatuses","AmortizationTypes","InterestTypes","RecurringIncreaseTypes","DashboardGroupBy","Quarters","BankPassCredentialValidity","ClassificarionRuleFieldTypes","ClassificarionRuleMatchTypes","CashflowTabs","LoanTabs","BalanceHistoryReportDateRanges","BalanceHistoryReportMode","LoanSides","LoanPaymentFrequencyTypes","UnitType","LoanInterestPeriodCalculationTypes","UserAuthorizationTypes","ShareInformationWith","SummaryLevels","CashflowSummarizedAggregationLevels","ShowInCurrencyOptions","PredefinedNotificationTemplatesMenuItems","YesNo","MatchingRelationships","BillingReportTabs","ReplicationStatuses","ReplicationObjectTypes","PaymentMeansTypes","TransactionCategoryIcons","DocumentTypes","BusinessPartnerTabs","BusinessPartnerTypes","LedgerIsOpenStatuses","ExpenseManagementTabs","VisibilitySettings","CustomFieldsetFieldInputTypes","ExpenseStatuses","LoanPostPaymentRecalculationOptions","PostPaymentActions","Linkage","FinancialReportDateTypes","FinancialReportCurrencyTypes","FinancialReportRangeTypes","LastTransactionsDateOptions","DataExportTypes","ExportTransactionsMethods","LedgerAccountTypes","JournalEntryCurrencyTypes","ChequesReportTabs","ProcessingCompanies","Brands","UploadHistoryTabs","ApplyToBookingAccountsTypes","NoteFieldTypes","SortIndex","NoteMatchTypes","NotesExportAdjustments","Description","AccountFullNameDisplayType","SyncStatusTabs","BillingContractsReportTabs","JournalEntryUploadLevels","TransationJEInfoTabs","FileEncodings","FileTypes","FileRowDelimiters","FileRowsSortOrders","OrganizationAccountMappingTypes","AccountMappingTypes","FileColumns","CurrencyDenominations","ExportTypes","PositiveNegatives","JournalEntrySources","ActivityTypes","AdminAccessRequestStatuses","AdminAccessRequestDurationTypes","TransactionCategoryTabs","ParentCategoryTabs","CCContractTabs","JournalEntryStatuses","BookingAccountSelectionMethods","BankPassTwoFactorMethods","LoanPaymentInterestPrincipalType","FutureChequeStatuses","NotificationBalanceSummaryTypes","Days","WeekDays","NotificationLanguages","BookingAccountTypes","DateRelevance","SystemSource","RecommendationPeriodTypes","CashflowChartTabs","FutureForecastGroupBy","GlobalDownloadStatuses","GenerationJETypes","TransactionViews","BillingContractsReportModules","MobileDashboardTabs","TransactionsGroupOptions","BalanceDetailsSortTypes","RelevantFilteringTypes","TransactionPeriodTypes","IncomingPaymentStatuses","IncomingPaymentDocumentTypes","IncomingPaymentDocumentType","IncomingPaymentProcessingActions","IncomingPaymentMarkIrrelevantAction","JournalExportTypes","CashflowStaticCategories","UploadTypes","SumSides","LoanHandlingTypes","ExportSFTPGroupingModes","CategoryClassificationFieldTypes","BalanceTypes","BankPassAutoDiscoverModes","ExternalAccountMappingStatus","ScheduleTypes","DeploymentTabs","DP","TP","OP","EP","AP","JS","scenarioEndpoint","Wr","PP","BP","XS","LP","VP","YS","IsDefault","MP","GP","HP","UP","tC","Kr","zP","KP","nC","WP","XP","oC","probabilityEndpoint","JP","eA","rC","LoadScenaries","LoadProbabilityLevels","Scenaries","probabilitylevelEndpoint","DatasourceName","SyncStartDate","ForecastMapperID","tA","rA","aC","oA","iv","lA","dA","OnItemClicked","sA","xA","fA","_contextUser","_pivotView","_summaryLevel","_aggregationLevel","_currentTabIndex","_dateTo","_dateFrom","RemoveItem","mA","yA","ForecastOperationID","bA","yl","newExpense","newIncome","duplicate","onItemClick","editCategory","vA","dC","SA","CA","IA","sC","wA","DA","TA","PA","uC","ButtonID","CurrencySymbol","NotReconciledSum","transactionChequeListDialog","SourceEntryId","futureChequeImageEndpoint","currentChequeImages","chequeViewDialog","ChequeNumber","currentChequeImageIndex","ImageSource","DataItems","ForecastCategoriesItems","isExpanded","summaryCells","IsExcluded","BalanceWarning","forecastOperationEndpoint","UpdateForecastOperations","reload","ForecastOperations","reccuringBoxDialog","AllRecurrings","Delete","Exclude","Include","UpdateAllReccuringOrOne","ActualDate","accountingForecastEndpoint","Update","DelayDate","IsAllowInlineEditing","GridHasChanges","HasEditData","dataSource","GetForecastCategories","av","Si","_casflowReportEndpoint","collectGridChanges","getController","validate","reject","CancelEditData","TrailedDaysCount","oneOrRecurringAction","RecurringForecastID","OpenEditForecastOperationModal","SelectedRowsData","selectedRowsData","ScenarioID","ProbabilityLevelID","IsEditable","DeleteForecastOperation","OnExcludAccountingForecast","OnExcludeForecastOperation","setDate","onDelayAccountingForecast","onDelayForecastOperation","dateInputDialog","MinDate","contextMenuItems","vi","mx","hx","_A","BA","LA","Ci","NA","pC","cC","bl","kA","VA","MA","zA","xC","SelectedRowKeys","GroupedBalancesByDate","toISOString","BalanceToDateMap","ManualBalances","has","CurrentSelectedGroupKey","selectedRowKeys","dataGrid","selectRows","jA","WA","OnValueChanged","KA","XA","ListDataSources","vl","Group","GetGroup","GetPregroupedSources","YA","eR","hC","DataSourceSelector","LoadBalance","ErrorInBalances","cashflowService","LoadDetailedData","LoadSummarizedData","ChartName","LoadFutureForecastOperations","TransactionCategoriesItems","ScenariosItems","ProbabilityLevelsItems","LoadReportData","IgnorePastUnreconcilledTransactions","DoNotShowEmptyCategoriesInSplit","BalanceNotes","CurrentBalance","CurrentCreditBalance","AggrigationLevels","InitFilterValues","tR","SetCashflowDataSourceFilter","GetAggrigationLevels","CashflowCategories","DetailedGridData","SummarizedGroups","SummarizedGridData","AggregationLevel","ListCashflowReportTransactions","CashflowReportParams","LastDateBalance","Balance","FirstDateBalance","FirstDateStr","CreditBalance","CalculationDateStr","GetNextDayFromDate","BalancesError","FutureForecastOperations","HandleError","SummaryLevel","ListCashflowReportSummarizedTransactions","DatePeriodTitle","ListFutureForecastOperations","GetSingleOrDefaultFilterValue","GetForecastOperationParams","ClearDates","UpdateDataSources","gx","ParentCategories","ExportExcel","CreditCardExpence","CreditCardIncome","Deposits","LoanPayment","FutureCheques","ListForDate","ShowBalancesErrorDialog","errorBalancesDialog","fx","mC","fC","ZA","iR","vC","NominalBalance","CanDrillDown","NormalizeAmount","AccountGroupName","rR","SC","sR","cR","CC","GroupByBank","ListForAssetsVsLiabilitiesReport","ReportView","uR","hR","wC","_params","LoadForecastOperations","GridData","SelectionType","LoadCategories","LoadScenarios","probabilityLevelEndpoint","transactionCategoriesEndpoint","mR","yR","TC","cashflowDetailedList","DC","gR","CR","OC","chart","render","_balancesData","CreditLimitBalance","BalanceSeries","_creditDebitsData","OnChartChange","ResizeChart","hostRef","getBoundingClientRect","getComputedStyle","paddingBottom","paddingTop","innerHeight","top","ChartHeight","GroupKey","CreditLimit","GroupTitle","CreditDebitSeries","SR","yx","wR","TR","PC","DR","OR","onRowClick","searchPanel","CreditLimitsChanged","ER","FR","ReloadBookingAccountsDataSources","ignoreCompanyChange","ignoreAccountChange","toPromise","RR","lv","NR","bx","kR","MR","companyID","VR","zR","NC","fieldValidators","LoadBusinessPartners","LoadParentCategories","BusinessPartnerID","SelectedTransactionCategory","TransactionCategoriesSource","ParentCategoryId","selectedItem","parentCategoryEndpoint","paginate","IsSaving","na","GR","WR","vx","qR","KR","JR","MC","NotificationTemplate","GroupingFields","BalanceDetailsSubtypeList","SectionsType","BalanceSignType","BalanceDetailsSortType","TransactionsPeriodType","AdjustSortOrders","IncludeCreaditLimits","QR","tF","VC","Section","UpdateFilterFields","RemoveMismatchedFilterFields","FilterFields","BalanceDetailsType","GetBalanceFilterFields","GetTransactionFilterFields","GetBalanceDetailsFilterFields","GetLoansFilterFields","TransactionSubTypes","All","CategoryItems","IsEnumFilterField","ZR","rF","iF","lF","aF","GC","dF","dv","sF","cF","HC","SelectedForecastOperations","SelectedTransactions","ForecastsSum","TransactionsSum","NumberPrice","DifferenceSum","LoadForecasts","LoadTransactions","IsNotReconcilationed","UpdateDialogButtons","reconciliationConfirmationMsg","abs","toFixed","MatchForecastOperations","MessageButtons","MarkAsFullyReconciled","reconcilationEndpoint","MatchForecastOperationsAndTransactions","forecastOperationsGrid","NavigateToForecastCreate","Sx","uF","pF","xF","gF","hF","Sl","DateRange","vF","SetFromDate","SetDateTo","OnDateRangeChanged","OnDateChange","DateRangeChanged","SF","wF","zC","Reconciliations","MatchDateRange","OperationDateRange","LoadGridData","ShowBankSideReconciliation","OperationDateFrom","OperationDateTo","Reconcilations","reconciliationEndpoint","ListReconcilationItems","reconciliationGrid","IF","OF","_F","PF","$C","vertical","wrapText","_column","enpdoint","CompanyName","EF","getDescription","toDateString","LF","DateSort","BF","GF","WC","SelectedForecasts","BusinessPartnerName","GetMenuItems","sv","AccoutID","VF","UF","recurringForecastID","$F","KF","WF","XF","KC","PeriodType","EditOnlyFutureForecasts","LoadForecastCategories","IncreaseType","IsFixForEOM","PeriodMultiple","RecalculateNumberOfRecurrences","RepeatTimes","EndDate","IsScheduledDaysType","GetDatesCount","count","realLastDate","GetEndDate","getDay","ValidateEntity","SaveCustom","PeriodSize","fu","qF","eL","tL","oL","nL","iL","QC","PostingDateRange","LoadRecurringForecasts","LoadAccountingForecasts","recurringForecastEnpoint","RecurringForecasts","accountingForecastEnpoint","AccountingForecasts","IsOneTimeOnly","rL","sL","XC","GetRelatedOperations","ConfirmDialogMessage","DeleteBatch","updateDialog","handled","OnEditForecast","dL","fL","xL","hL","YC","Recommendations","mL","bL","tI","RecommendationItem","_subs","recommendationDetailDialog","FieldName","FieldValue","LastTransaction","OnInitTitle","RecurringAmount","yL","wL","eI","GetAPIURL","session","SessionID","Files","getFileNamePart","IsFileUploaded","RegisterSubscription","fileUploader","isValid","upload","IsSendRefreshEvent","Errors","FileComponentValid","isFileComponentValid","UploadingFileProgress","UploadingFileInProgress","IsUploadedWithError","FileStatusMessageEl","getFileStatusElement","bytesLoaded","parse","request","response","message","updateStatusWithTimeout","pop","getFileComponent","$statusMessage","_files","File","lastIndexOf","IL","_L","AL","RL","BL","NL","VL","GL","zL","UL","KL","qL","YL","ReplicationID","bIsShowOnlyFailed","ZL","e4","rI","IsOnlyLast","ReplicationStatus","SetReplication","InitSummaryResults","InitEntityErrors","SnapshotID","ReplicationObjectTypeId","Replications","replicationEndpoint","Replication","SummaryResults","EntityErrors","GetSummaryResults","ShowFailedObjectOnly","GetEntityErrors","EntityErrorsFiltered","SelectedReplications","ObjectType","oI","t4","r4","SelectReplication","i4","s4","u4","m4","aI","ListForReplications","SyncStatusReplications","f4","g4","dI","h4","wx","b4","hu","v4","Dx","S4","Cl","sI","C4","I4","uv","w4","D4","categoryEndpoint","gu","T4","mu","E4","RecycleLoanID","CreateClosinJE","countOfPayments","resetPayments","IsMarked","P4","Tx","A4","Il","uI","R4","F4","L4","InterestRate","BalanceNominal","UniqueLoanID","NumberOfPayments","LoanByUniqueId","OnGoToExistLoan","IsAllowAdvancedReports","IsSchedulePaymentsExist","OnGoToPaymentsSchedule","ShowCurrentBalance","BalancePopupVisible","qr","yu","B4","Qr","M4","V4","G4","oa","H4","Ii","cI","j4","bu","z4","vu","W4","wl","pI","K4","q4","Q4","Su","J4","No","tB","xI","Dl","eB","oB","fI","LoadClosedDocuments","LoadMeansTypes","DocumentNumber","IncomeExpenseSide","IsPaymentToLedgerAccount","LedgerAccountID","paymentEndpoint","GetClosedDocuments","ClosedDocuments","GetPaymentMeansTypes","Sr","ra","nB","lB","hI","setMonth","InitPaymentMeansTypesSource","Payments","PaymentMeansTypesSource","aB","pv","uB","pB","gI","FilterChanged","ChartClick","cB","hB","DocumentID","gB","SB","CB","yI","EB","TransactionView","MonthsList","Months","GridItems","_B","AmountKey","OB","TB","RB","RefreshGridHeight","FB","bI","MB","series","aggregationInfo","_transactions","xv","kB","showCredit","View","OnClickMonth","isVisible","marker","fill","NB","jB","OrganizationChange","LogOrganizationViewed","Zn","zB","WB","_flatModeStateName","ComponentStateName","GetComponentFlatModeState","IsFlatModeChange","SaveComponentFlatModeState","KB","YB","vI","Grid","_grid","Visible","ExpandLevel","clearGrouping","_UnsubscribeEvents","_subscribers","ColumnsToDropdownItems","XB","nN","SI","onPush","AddEventListener","_x","GetBalanceReportParams","eN","lN","CI","UpdateGroupings","_subTypesForDetails","aN","cN","pN","wI","II","xN","fN","Cu","mN","bN","TI","InitDocument","LoadLines","InitPayments","Document","documentEndpoint","GetLines","yN","IN","DiscountPercent","wN","TN","AccountingJournalEntryID","_N","PN","_I","AN","RN","JournalNumber","fv","FN","kN","NN","MN","VN","HN","PI","InitAccountingJournalEntry","AccountingJournalEntry","OriginalDocumentNumber","IsPayment","OriginalDocumentType","accountingJournalEntryEndpoint","LoadCompanyMetadata","companyMetadataEndpoint","GetByCompany","CompanyMetadata","EI","GN","$N","JournalEntry","DebitSystem","IsLocalCurrency","DebitLocal","DebitForeign","CreditSystem","CreditLocal","CreditForeign","SystemCurrency","LocalCurrency","getTime","WN","AI","JN","YN","XN","RI","ZN","t1","e1","hv","n1","r1","FI","InitDocuments","InitLedger","AccountingCode","documentChartDialog","paymentChartDialog","ledgerChartDialog","Documents","DocumentsChart","PaymentsChart","Ledger","ledgerEndpoing","mv","o1","l1","d1","u1","s1","c1","p1","f1","x1","h1","kI","LoadBusinessPartnerGroups","LoadSalesPerson","Groups","SalesPersons","BusinessPartnerGroups","businessPartnerGroupEndpoint","GroupsList","salesPersonEndpoint","SalesPersonsList","BI","NI","m1","b1","v1","D1","MI","w1","E1","P1","R1","A1","L1","F1","N1","VI","DefaultDateFrom","DefaultDateTo","DefaultIsOpen","LoadLedger","yv","B1","G1","HI","DocumentEntryID","JournalEntryDocumentType","JournalEntryID","OnFilterChanged","V1","$1","jI","U1","q1","Q1","Z1","tk","ok","rk","lk","dk","sk","uk","po","ck","ia","pk","fk","Store","load","InterestLinkageIndexID","InterestLines","framework","Rate","NumberRate","LastValueInterestIndex","UpdateLoanAccounts","OnDestroyComponent","ValidateValidationGroup","ChangeTab","IsManualEdited","LoadPayments","loanPaymentsGrid","securityList","FetchDataSources","InterestType","SigningDate","FundingDate","FirstPaymentDate","InterestLinkageFrequency","PaymentFrequencyType","AmortizationType","PeriodicCommisionFeeAmount","SetupComissionFeeAmount","InterestPeriodCalculationType","ConsiderNoneBusinessDays","UseKnownIndex","GetBookingAccount","GetAccount","GetRecyclingLoan","RecycledLoanID","ApplyOrganizationID","LinkageIndexID","WarningMessage","LoadIndexes","indexEndpoint","LinkageIndex","IndexLines","Year","Month","LastValueLinkageIndex","UpdateLinkageBase","GetNextDate","UpdateLastPaymentDate","GetFrequencyType","GetFrequencyUnitType","GetNumbersCount","ceil","LastPaymentDate","LinkageBasePeriod","LinkageBaseIndexValue","InterestIndexes","interestEndpoint","GetList","LinkageIndexes","LoanName","OnDeleteEntity","OnDuplicateEntity","OnCancel","OnRecycle","OnPostPayment","OnMarkPastPayments","OnEndLoan","HasPaidPaymets","OnCancelLastPayment","ReloadLoan","NoNeedRecalculate","Fund","DeleteEntity","Buttons","Recycle","EndLoan","GetLastOpenPayment","markPastPaymentsDialog","MarkPastPayments","CancelLastPayment","LoanPayments","PaymentsEditMode","cancelGridChanges","UntilMaxNumberPayment","NumberLastOpenPayment","PaymentNumber","updatePrincipalDialog","FromPayment","UntilPayment","DuePrincipal","PrincipalAmount","PaymentsChanges","OpeningPrincipalBalance","saveGridChanges","InterestSuprlusPercent","indexDialog","interestDialog","hasOwnProperty","Di","wi","Ox","xk","yk","WI","ApplyBookingAccountSubtypesToActiveAccounts","GetCompanyParams","GetAccountParams","GetBookingAccountParams","vv","LoadBanks","gk","Loans","GetLoans","hk","Ck","qI","Source","BalanceDetailsPayments","BalanceLineID","MarkLoan","loanEndpoint","Mark","Sk","Ek","QI","EditMode","PaymentType","backgroundColor","_changes","AdjustedDate","LateInterest","totalCount","Loan","ShowLateInterest","BasicInterest","IsJournalEntryLinkVisible","OnGoToJournalEntry","Tk","Ex","JI","Fk","XI","Indexes","Rk","Bk","Nk","Vk","tw","Mk","Px","nw","jk","ow","Interests","Hk","Uk","$k","Qk","iw","qk","Jk","Xk","Ax","Zk","eM","lw","Cv","tM","rM","sw","Holidays","oM","aM","lM","cw","cM","mM","pw","Iv","DueInterest","RemainingTotal","InitDuePrincipal","IsLinkage","ReculculateInterest","round","PaidTotal","toLocaleDateString","PostPayment","RecalculationType","TransactionId","ShowAll","DueComission","PrincipalLinkageSurplus","InterestLinkageSurplus","RecalculateRemainingTotal","Today","ListLoansTransactions","pM","Du","gM","yM","bM","vM","_loanID","Securities","Tu","SM","wM","DM","EM","fw","OM","RM","hw","AM","BM","NM","GM","VM","jM","yw","ValidFromFrom","ValidFromTo","GetSecurities","HM","UM","DeploymentItems","customItem","companySelectBox","$M","qM","SelectedBankChange","accountGroupSelectBox","QM","ZM","vw","YM","nV","oV","dV","Sw","TransactionClicked","lV","xV","Cw","FundingDateFrom","FundingDateTo","AdjustedDateFrom","AdjustedDateTo","GroupLevelItems","ShowFuturePayments","ShowPastPayments","ListLoanPaymentReportItems","Principal","Interest","Total","DueTotal","IsExpandCollapseVisible","CreateJournalEntries","PostPaymentBatch","clearSelection","pV","gV","hV","ww","yV","vV","Dw","OnGoToPostPayment","toLocaleString","month","OnGroupingChange","getGroupedColumns","gridInst","SelectedRowsChanged","InterestYearlyRate","TotalInterest","bV","IV","BelongToCompanyID","AccountOrCCContract","IsBelongToCompany","wV","OV","wv","NotesMaxWidth","offsetWidth","_V","FV","isChartView","_groupBy","updateView","viewContainer","viewContainerRef","clear","componentFactoryResolver","resolveComponentFactory","ChartComponent","createComponent","Page","GridComponent","RV","LV","MV","VV","jV","BankChargeDate","IsBankCharge","zV","_w","KV","QV","Ow","TransactionParams","CalendarOptions","maxZoomLevel","minZoomLevel","qV","ZV","Pw","BankChargeDateGroupIndex","IsBookingAccountCCPostingAutoGenerate","IsJEGenerationAvalable","GenerateJE","UpdateSortings","MessageBoxButtons","currency","OriginalCurrency","DateUntil","messageDialog","YV","rG","Aw","CategoriesItems","SearchCategory","AddSearchCategory","RemoveSearchCategory","IsManual","CreateAndSetupCategory","IncomingPaymentID","oG","sG","Rw","LoadAdditionalData","GetAdditionalData","dG","fG","Fw","SetFieldTypeCellValue","DateFromChanged","DateToChanged","xG","bG","Lw","BookingAccountyIDs","_postingTemplate","PostingTemplate","addedItems","removedItems","CompanyChanged","BookingAccountSelectionMethod","AdditionalTransactionCategory","IsShowBookingAccountType","IsReadonly","OnDeleteTemplate","yG","TG","Bw","ExportTypesList","SaveAndGenerateFile","OnAfterUpload","ExportedFileData","ExportedFileName","Extension","ExportedFileExtension","IsSelectedTransactions","DG","OG","kw","ExportMethod","SubtypesList","IsShowOnlyNotAutomatic","fileExportTransactions","LoadActiveUpload","IsOnlyNotAutomaticUpload","ListBookingAccountsForUploadsExport","ClosingDate","ClearSelection","Nw","_G","RG","Gw","RadioButtonListDefault","RadioButtonListFromDateOnly","DownloadTaskStatus","Reviewed","NotSynched","Vw","UpdateSelectedRows","OnGoToTransactionReportGrid","OnGoToDownload","OnGoToUpload","AG","NG","kG","GG","HG","$G","Hw","UG","qG","QG","YG","ZG","rH","jw","NotesExportAdjustmentCreditAccounts","NotesExportAdjustmentCurrentAccounts","IsEnabledNotesRules","WizCloudSubDomain","IsAutoExportSFTP","ActiveCompaniesCheckMessage","GetNoteAdjustItemKey","_tooltips","HasActiveCompanies","ShowCompaniesDbNameWillBeClearedMessage","IsHideCancel","WizCloud","Comax","SAPByDesign","oH","lH","Uw","aH","cH","$w","uH","hH","Kw","LoadActualQuantities","LockControls","IsActualInformationSectionVisible","ToggleIsActiveCheckboxReadonly","ContractBaseSum","ContractBaseCompaniesQuantity","ContractJournalEntriesSum","ContractJournalEntriesCompaniesQuantity","ContractCashflowSum","ContractCashflowCompaniesQuantity","ContractLoansSum","ContractLoansCompaniesQuantity","GetBillingContractViewsByContractID","ActualUsersCount","ActualAccountsCount","ActualBaseCompaniesCount","ActualJournalEntriesCompaniesCount","ActualCashflowCompaniesCount","ActualLoansCompaniesCount","IsBillingContractConnectedToAnyEntity","IsActivityCheckboxReadonly","Ww","mH","bH","vH","wH","Qw","Toolbar","FromMinNumberPayment","_fromMinNumberPayment","_untilMaxNumberPayment","IH","OH","_H","PH","EH","Jw","AH","FH","Xw","ShowDepositedCheques","ChequeType","ShowFutureCheques","FutureChequeParams","DepositedChequeParams","chequeEndpoint","ListForReport","RH","MH","Zw","ChequesType","ChequeImageID","chequeImageEndpoint","CurrentChequeImageID","ChequeImage1","ChequeImage2","totalDeposited","totalFuture","CheckSum","TransactionDate","getImageDimensions","Image","min","BH","_u","Dv","jH","tD","CCContracts","HH","WH","eD","$H","JH","QH","nD","TransfersMapLines","Brand","InvoicesMapLines","ReloadCCData","OnReloadDataFromCC","ProcessingCompany","CCContract","SaveContractDetails","CurrentRowBookingAccounts","GetCurrentRowBookingAcctounts","transfersMapGrid","repaintRows","XH","tj","ZH","Ou","ej","oj","rD","IsSumColumnVisible","IsHistory","_items","aggregates","OnSelectInvoces","nj","aj","CCInvoiceID","CCInvoicesIds","lj","Tv","dj","uj","iD","LoadCCContracts","Invoices","ccinvoiceEndpoint","cccontractEndpoint","CCContractsList","SelectedInvoiceIds","PostInvoices","Eu","sj","xj","fj","hj","mj","toPrecision","Jx","dD","Ov","isDisabled","Tl","SumTransfer","IsTransferSumEquals","GetSumTransferErrorMessage","CalculateSumTransfer","GetSumForField","Transfers","sum","IsTransfersSumEqualsInvoiceSum","SumGross","bj","sD","validator","SumVat","SumCommission","InvoiceNumber","systemOptionsService","getSystemOption","vatFee","yj","enable","disable","CreateRequest","Rx","Invoice","DeleteTransfersIds","RequestIfValid","PostInvoice","OnRemove","GetGridInstance","GetColumns","groupCellTemplate","Remove","IsSummaryPreviewVisible","HidePreview","IsDetailPreviewVisible","imageEndpoint","ImageDetail","ShowPreview","ImageSummary","_v","lD","gj","cD","Sj","Dj","pD","RemoveCurrentRow","Cj","Ej","xD","Oj","Pj","Aj","Lj","hD","PastInvoices","FutureInvoices","cctransferEndpoint","mD","Fj","kj","yD","ContractName","ContractMerchantNumber","IsInvoiceLinkVisible","OnGoToInvoice","TransferDate","year","Nj","jj","Hj","zj","OnGoToCompany","Uj","qj","Qj","Xj","Jj","Rv","Yj","t2","bD","NoteFieldType","ExportNoteRules","exportNoteRuleEndpoint","Av","Zj","r2","SD","o2","d2","l2","p2","x2","h2","g2","Fv","y2","v2","wD","IsShowGlobal","FileImportTemplates","GetByOrganizationID","GetGlobal","Fx","b2","I2","IsShowGlobalChange","OnIsShowGlobalChanged","IsShowGlobalCheckbox","w2","_2","O2","R2","TD","getOwnPropertyNames","FileEncoding","RowsSortOrder","RowDelimiter","DateFormatSpecification","IsHasBalances","NumberOfHeaders","CurrencyDenomination","ViewMode","GoToTransactionsImport","AccountMappingType","bookingAccountSelector","SetOrganizationID","BookingAccountColumn","BookingAccountPosition","BookingAccountLength","AccountNumberColumn","AccountNumberPosition","AccountNumberLength","CurrencyColumn","CurrencyPosition","CurrencyLength","BalanceColumn","BalancePosition","BalanceLength","FileImportTemplateID","A2","N2","B2","Lx","k2","GetGoToDownloadParams","downloadFailureReviewDialog","LatestDownloadException","LatestDownloadError","LatestDownloadID","downloadFailureReviewEndpoint","DownloadFailureReviewID","G2","LatestDownloadStatus","IsBankPassGlobal","LatestDownloadBankPassID","IsOpenBankPassButtonVisible","OpenBankPass","OnGoToJEUpload","IsReviewButtonVisible","MarkAsReviewed","IsCancelReviewButtonVisible","CancelReview","IsDownloadRequestDataButtonVisible","handleDownloadData","xu","H2","j2","GetGridRowContextMenu","z2","OD","$2","W2","RD","q2","AD","UploadStatusesSource","ExtraFilterValues","JEUploadStatus","JEUploadStatuses","IsShowOnlyAutomatic","deploynmentEndpoint","LoadSyncStatusContract","LoadSyncStatusAccount","JournalEntryUploadStatuses","IsOnlyAutomaticUpload","SyncStatusAccount","SyncStatusContract","syncStatusContractEndpoint","ov","ED","PD","K2","J2","ReviewConclusion","MarkAsPermanentFailure","X2","t3","e3","BD","LoansSchedule","ListBalanceLoansData","_l","o3","a3","kD","i3","u3","MD","BalanceDetails","IsLoansMode","GetSubtypes","GuarantEndDateTo","ListDepos","FillBalanceDetails","ListStocks","ListLoans","ListGuarant","BalancesDetails","s3","f3","VD","DialogText","IsFullyReconcilled","Sum","ContextMenu","AllowRowSelection","x3","y3","b3","GD","v3","C3","HD","LoadAccountingForecastCategories","categoriesEndpoint","AccountingForecastCategories","Bx","S3","D3","jD","RecurringForecast","w3","zD","Lv","UD","E3","days","P3","A3","months","InitDataOnSumarizedGroups","_FutureForecastOperations","InitDataOnForecastOperations","ChartSize","getValueFields","Ti","factor","visualFactor","O3","F3","$D","Ol","AggregateValuesBySeries","groups","R3","Nx","N3","k3","H3","WD","El","G3","W3","KD","K3","q3","qD","instances","getAllSeries","getAllPoints","Legends","point","Percent","Credits","palette","totalTitle","total","TotalCredit","totalColor","Debits","TotalDebit","Key","OnViewChange","IsOther","hover","showTooltip","clearHover","hideTooltip","getColor","$3","X3","inputs","checked","MoveSlider","labels","slider","clientWidth","offsetLeft","offsetParent","transform","Y3","kx","nz","QD","oz","flatMap","GroupBalance","GroupCreditLimit","iz","rowSpan","display","Mx","DatePeriodOnly","FilterCurrency","rz","innerText","sz","getGroupKeyByColumnIndex","Vx","uz","mz","JD","XD","YD","hz","BalanceRow","CreditDebitRow","PrepareRows","ParentCategoryID","ParentCategoryName","SortingOrder","ParentCategoryAndSide","Mn","Rr","Lu","Jr","minWidth","fixed","fixedPosition","DebitCredit","ua","ca","ShowParentCategories","Pl","fz","Sz","ZD","Au","tT","Cz","rr","So","Xr","pa","Jv","vz","Tz","eT","InitializeState","CalculatePastPostPayments","ShowLoansEndedBeforeRevaluationDate","ListLoanPaymentsTillDate","Dz","Pz","oT","Ez","Lz","OpenCheques","LoadDataForTransactionsReport","DbName","RouteHistoryService","ClearHistory","ChequeID","Bz","Mz","Vz","Hz","Gz","zz","jz","$z","lT","FileImportTemplate","sidebarService","Show","importTemplate","ClearResponse","OnOpenImportTemplateClicked","Response","FilesErrors","NewFile","AttachedFiles","transactionsImportEndpoint","Parse","SelectedBookingAccounts","IsValid","Close","Import","fileImportTemplateEndpoint","OnFileImportTemplateSelected","DestroySidebar","aT","kz","iT","Uz","qz","Kz","Jz","sT","AdminID","adminActionsGrid","adminEndpoint","AdminActivityRecords","Qz","Yz","Zz","oU","cT","LoadAdmins","nU","xT","iU","lU","aU","sU","dU","cU","fT","AdminAccessRequests","PostParams","SelectedRequests","RequestIDs","BulkApprove","adminAccessRequestGrid","AdminAccessRequestID","IsApprove","Review","uU","fU","OnApproveClicked","OnDenyClicked","IsBoldRequested","mU","vU","bU","SU","CU","TU","DU","_U","OU","FU","RU","MU","gT","InitOrganization","LoadLedgerAccounts","isRequired","validationRules","HasCache","GetCache","codeChange","code","field","GetEditorControl","textBox","selectBox","Label","SetCache","IsLoadLedgerAccounts","IsLoadBusinessPartners","organization","CurrentCode","hT","ledgerAccountEndpoint","customCache","GetKeyCache","LU","BU","NU","kU","jU","SetCountDateRanges","DateFromChange","DateToChange","ModeChange","CountDateRanges","SetDateFrom","CountDateRangesChange","zU","qU","yT","CompanyValue","AccountValue","AccountSettings","BookingAccountValue","CompanySettings","BookingAccountSettings","GetWidth","minwidth","InitCompany","InitAccount","InitBookingAccount","ChangeGlobalCompany","LoadCompanyItems","IsHide","Change","LoadAccountItems","LoadBookingAccountItems","CompanyCanBeLoaded","CompanyItems","SetOnceCompany","CompanyLoaded","IsEmptyOgranization","SetCompanyItems","IsEmpty","AccountItems","SetParentCompany","AccountCanBeLoaded","SetOnceAccount","AccountLoaded","SetAccountItems","BookingAccountItems","SetParentAccount","BookingAccountCanBeLoaded","SetOnceBookingAccount","BookingAccountLoaded","SetBookingAccountItems","IsVertical","InheritParentWidth","IsShowCompany","IdToEntity","EmitChange","KU","YU","ZU","r$","bT","GetRelevantBanks","IsOneItem","o$","s$","vT","GetAllowedSubtypes","GetRelevantBookingAccountSubtypes","GetSubtypesItems","d$","f$","ST","IsLoadRelevantCurrencies","GetRelevantCurrencies","x$","y$","b$","I$","w$","O$","CT","GetFirstItems","GetLastItems","forecastMapperEndpoint","ListExByParams","AccountingEssense","E$","F$","L$","M$","V$","z$","U$","q$","Q$","t5","IT","IsAccountingOffice","ChangeCompany","Bv","AddAllCompniesItem","Z$","Vv","Gx","GroupCellTemplate","sortingMethod","_initialOptions","calculateGroupValue","CalculateGroupValue","kv","CalculateDisplayValue","day","Nv","Mv","a5","l5","Hx","s5","AddAdminAccessRequestButtons","AddBusinessAlertButtons","OnClick","NotificationTemplateName","OnAlertTemplateClick","ExternalReferenceID","GetNavigationFilters","UpdateAdminAccessRequest","RelatedObjectID","resources","sysEventsService","u5","wT","p5","x5","v5","S5","I5","C5","D5","_T","SystemOption","PortalSite","OurSite","Phone","Whatsapp","LoadSubjectDataSource","NavigateWhatsApp","NavigatePhone","NavigateEmail","SubjectID","Comment","Content","contactUsEndpoint","SaveComment","IsConfirmationMessage","GetSubjects","SubjectDataSource","TT","w5","_5","T5","O5","contactUsDialog","OT","E5","A5","R5","F5","dialog","Gv","L5","k5","AT","DownloadRetryEndpoint","DownloadData","ToolbarSettings","ShowBackButton","N5","G5","H5","jx","j5","z5","ExternalApiKeys","Hv","U5","K5","q5","Z5","RT","Y5","jv","zx","nW","rW","LT","iW","CategoriesStore","TransactionLimits","RelevantFilteringType","EndingDepositsDaysAhead","IsEndingDepositsSendEmail","IsEndingDepositsSendSMS","IsEndingDepositsSendPushNotification","LoanPaymentDaysAhead","IsLoanPaymentSendEmail","IsLoanPaymentSendSMS","IsLoanPaymentSendPushNotification","IsNewLoanSendEmail","IsNewLoanSendSMS","IsNewLoanSendPushNotification","ExpiringGuaranteesDaysAhead","IsExpiringGuaranteesSendEmail","IsExpiringGuaranteesSendSMS","IsExpiringGuaranteesSendPushNotification","NegativeCashflowDaysAhead","IsNegativeCashflowSendEmail","IsNegativeCashflowSendSMS","IsNegativeCashflowSendPushNotification","IsEndingDepositsActive","IsLoanPaymentActive","IsNewLoanActive","IsExpiringGuaranteesActive","IsNegativeCashflowActive","IsTransactionLimitsActive","SendTestAlertTemplate","Ux","AmountLimit","FilterCategories","oW","lW","dW","cW","pW","$x","NT","gW","kT","StaticCategories","TransactionCategoryCompanyId","RelatedTransactionCategoriesKeys","RelatedForecastCategoriesKeys","AccountingForecastCategoryID","RelatedStaticCategoriesKeys","CashflowStaticCategory","GetStaticParentCategories","ParentName","CompanyId","GetNextPossibleSortingOrder","hW","bW","vW","CW","IW","_W","TW","NewOrder","Reorder","OW","EW","GT","RW","FW","LW","kW","AccountForecastCategories","MW","jW","zW","jT","HT","Ru","UW","WW","$W","TransactionPaymentProcessingViews","CurrentIdx","postedDocuments","HasUpdatedRecords","transactionDocumentOpenSum","latestDocOpenSum","IncomingPaymentView","GetIncomingPaymentWithDocsFiltered","SelectedSum","OpenSum","KW","XW","zT","CreateRule","UseNotes1","UseNotes2","ValidateCheckboxes","MarkIrrelevant","notes1Validation","notes2Validation","JW","ZW","YW","e6","$T","n6","ValidateBusinessPartner","BusinessPartnerControlTouched","SelectedDocuments","incomingPaymentProcessingService","NumberOfRecords","CurrentRecordNo","BookingDocumentNumber","GetCurrentIncomingPaymentProcessingView","OnTransactionPaymentProcessingViewLoaded","incomingPaymentProcessingEndpoint","GetTransactionPaymentProcessing","ShowCurrency","BusinessPartnerCurrency","SelectDocuments","InitBusinessPartnerFromState","LoadAllowedActions","ReflectEntityLoaded","InitStateTransactionData","LoadBusinessPartnersDataSource","routeHistoryService","TransactionSum","DocumentDate","incomingPaymentDocsGrid","UpdateGridSelection","ExecuteAction","LoadDocumentsForBusinessPartner","IsBusinessPartnerMandatory","PreferableAction","NavigateToPrevEntity","NavigateToNextEntity","JournalNotes","MaxDocumentDate","HandleManually","SaveAndPost","MoveNext","SaveForLaterProcessing","MarkAsIrrelevent","businessPartnerValidator","markAsIrrelevandDialog","CreateIrrelevantRule","MarkIncomingPaymentsIrrelevantByNotes","NavigateToNextOrClose","condition","HasBeenProcessedPreviously","ShowConditionalMessagesYesNoDialog","SaveIncomingPayment","UpdateCurrentIncomingPayment","AddPostedIncomingPaymentDocuments","SelectedDocumentsIDs","GetBusinessPartnerIncomingPaymentDocuments","ActionsMenu","PreferableActionText","GetNextIncomingPyamnetProcessinView","NavigateToEntity","GetPrevIncomingPyamnetProcessinView","IsVirtual","OnGetEntityNew","zv","Wx","UT","t6","a6","i6","d6","WT","GetDefaultStatuses","IsShowForTreatmentOnly","ShowAllCategories","ShowForTreatmentOnly","TransactionsPaymentProcessing","GetTransactionsPaymentProcessing","InitTransactionPaymentProcessingViews","ResetState","ProcessRecords","ProcessTransactionPaymentProcessingViews","l6","c6","u6","x6","qT","SelectIncomingPaymentProcessingView","deselectRows","MatchFull","MatchNone","MatchBusinessPartner","Saved","Irellevant","p6","y6","g6","v6","QT","OnCalculateSummary","Disabled","toUpperCase","TransactionCurrency","DocumentType","isRowSelected","IsDocumentSelectable","OnGoToDocumentEvent","IncomingPaymentPostingDate","b6","D6","w6","_6","T6","O6","E6","L6","F6","M6","JT","ResetDateFrom","k6","G6","V6","j6","YT","UpdatedBalances","ResetBalancesState","ListForBalanceManualEdit","UpdatedBalancesMap","resetBalances","BalanceDate","SaveManualBalances","ResetFromDate","ResetManualBalance","XT","H6","W6","$6","q6","t_","BalanceResetClick","Editable","BalanceUpdated","K6","X6","OnRowClick","IsShowGlobalCheckox","IsLoadGlobalChange","ShowActiveOnlyChange","Y6","n9","e_","e9","r9","ActiveOnly","DepositCategories","i9","l9","d9","s9","Kx","u9","qx","x9","f9","DepositClassificationRules","m9","y9","i_","g9","v9","StockCategories","S9","w9","d_","I9","T9","LoanCategories","_9","P9","c_","E9","R9","GuaranteeCategories","F9","N9","f_","B9","M9","V9","G9","StockClassificationRules","$v","H9","z9","U9","$9","LoanClassificationRules","Wv","W9","q9","Q9","J9","GuaranteeClassificationRules","Kv","X9","t7","b_","Z9","o7","S_","n7","a7","I_","i7","u7","D_","RecordName","s7","f7","x7","h7","T_","AccessCode","ExchangeAccessCode","postMessage","m7","b7","OnLinkClicked","I7","_7","Ll","ItemID","expandRow","Depth","HasNoItems","RightIcon","LabelType","A7","la","O_","OnGetGroupBalances","OnGetListHeader","BalancesFiltered","SelectedIndex","ExpandListContainingOnlyOneItem","toLocaleLowerCase","Xx","SelectCompany","OnBeforeProcessData","GetGroupedItems","OnAfterProcessData","treeList","TreeList","TransactionHistoryParams","Class","historyChart","B7","N7","IsSearchDisabled","frameworkService","GetClassForAmount","NextExitDate","resourseService","DepType","AdditionalCurrencySymbol","CurrencyRate","ChangePercent","Quantity","NumberQuantity","AveragePurchasePrice","LastPrice","GroupType","NextPaymentDate","BalancePrincipal","NextPaymentSum","LinkageType","GuarantDetails","k7","V7","E_","SelectedTransaction","ItemDetailsHeaderText","ItemDetailsHeaderIcon","GetBankIcon","ItemDetails","baseReportService","GetDetailsDeposProperties","GetDetailsStocksProperties","GetDetailsLoansProperties","GetDetailsGuaranteesProperties","GetTransactionProperties","detailsViewInfo","bottomSheetService","HistoryChartTypes","ProcessData","TotalBalanceAmount","GetBaseFilterSettings","PrepareLeafData","subTypeDetails","GetLeafsData","Al","formatDatePipe","AdditionalAmount","ListChequesWithImages","ChequeDetails","ShowChequeDialog","AvailableHistoryChartTypes","ShowHistoryChart","historyChartOptions","GetHistoryChartParams","sa","qv","M7","da","z7","A_","Rl","RenderNotes","j7","stylingMode","dateBox","SelectedDateChange","W7","dateRangeBox","SelectedRangeChange","J7","e8","R_","Yx","SelectedDateRange","t8","i8","L_","GetDefaultTimeframe","FilteredCheques","Fl","GetChequeIcon","BookingAccountBank","SearchText","ReverseImage","r8","u8","d8","IsReversed","IsVisibleChange","SelectedCheque","BankDisplayValue","s8","encapsulation","m8","N_","Ar","MonthAndyear","CurrencySortOrder","PrepareCards","SelectedCard","Simple","CCBrand","ReportItems","FilteredReportItems","GetItemHeader","Cards","TitleIcon","List","Labels","FooterLabel","FooterIcon","sortBy","groupBy","GetCreditCardTransactionProperties","OnSearch","f8","SelectedItem","touches","originalEvent","GetTouches","X_Down","clientX","Y_Down","clientY","SwipeToPreviousItem","SwipeToNextItem","getElementById","scrollIntoView","behavior","block","inline","SelectedItemChange","OnItemSelection","y8","I8","M_","ChartData","GetChartData","FilteredTransactions","SelectedChartMonth","Zx","MonthAndYear","getSeriesByPos","select","isSelected","C8","O8","V_","BalanceFilterBy","TransactionsGroupedFilterBy","TransactionsDatePeriod","TransactionsGroupedDatePeriod","LoadBalanceData","LoadAssetsData","LoadLiabilitiesData","LoadGroupedTransactionsData","LoadTransactionsData","GetGeneralDashboardParams","ProcessBalanceData","xo","CurrencyRateFormatted","GetArrowIcon","BankName","Assets","Liabilities","GetGeneralTransactionsParams","ProcessGroupedTransactionData","TransactionsGrouped","TransactionsGroupedList","AreTransactionsGroupedByCredit","TransactionsList","GetCashflowReportParams","NumberGeneral","GetCurrency","ShowContextMenuAsUsualOnMobile","BalanceAmountFilteredByNotCurrency","BalanceAmountFilteredByCurrency","_8","j_","R8","H_","SyncGroupOptions","SyncGroup","IsGroupByAccount","SetCompanies","StatusesByCompany","ContractStatuses","ContractStatusesByCompany","JournalEntryUploadStatus","A8","N8","U_","IsClosed","B8","H8","$_","SelectBox","IsMultiSelection","ValueExpr","DisplayExpr","OnCompleted","Context","OnCanceled","ListParams","G8","W_","Qv","Xl","Wu","Us","Um","Wm","lu","bg","pp","nu","zI","gp","_g","Js","bh","Rc","Ty","Fp","hy","_0","C0","ih","rl","Ks","Xc","Mc","Xs","Pr","dx","eO","J_","gS","n0","$j","iS","lS","IO","lI","tv","HO","Zs","Kh","dh","gi","ib","FL","Ip","Ag","Sp","_p","ty","ly","ex","nx","nS","XR","eF","pO","iO","Ws","_S","eE","ES","sE","PS","yE","RS","TE","RP","NP","ZS","qP","YP","eC","iC","iA","PE","LE","BS","VS","qE","jS","US","dP","uA","mP","lC","bC","_C","AA","EC","jC","UC","AF","NF","HF","uL","JC","ZC","vL","nI","AC","PR","BC","kC","qC","IP","aR","IC","OL","Wc","MG","kL","$L","QL","HL","iI","a4","Gf","c4","_4","N4","U4","X4","mI","cv","xB","yB","IB","ek","PB","VB","LB","UB","qB","ZB","oN","dN","Pk","DI","vN","DN","T1","bv","J1","OI","jN","KN","LI","gv","S1","GI","H1","SH","$I","KI","Ik","Sv","YI","ew","rw","Wk","aw","dw","uw","dM","xw","CM","TM","mw","gw","kM","bw","sV","Iw","SV","WM","JM","tV","rV","Tw","ba","EV","BV","GV","UV","Ew","tG","Mw","FG","jG","WG","JG","tH","zw","dH","pH","qw","DH","Yw","VH","zH","KH","oD","aD","rj","Tj","uD","fD","Mj","gD","iG","ge","uG","mG","vG","vD","CD","s2","f2","S2","D2","DD","_D","dT","uT","tU","pT","mT","hU","EU","IU","VU","Gh","UU","QU","t$","i$","u$","m$","v$","D$","P$","B$","G$","$$","J$","e5","LD","d5","ET","PT","M5","$5","Q5","FT","ZT","Q6","__","R7","w7","O7","v7","K7","X7","P_","Fu","F_","B_","c8","k_","b8","w8","G_","z_","k8","j8","sW","xW","BT","CF","MT","PW","wW","VT","BW","VW","Uv","KT","f6","S6","P6","n_","o_","Z6","c9","r_","a_","l_","s_","u_","p_","x_","m_","h_","g_","y_","v_","C_","w_","c7","C","B","DT","provide","useClass","W0","c5","path","outlet","Menu","FD","Pu","nT","ND","m5","rT","IsAllowMyOrganizationForUser","IsAllowDashboard","IsAllowAccountingPosting","IsAllowManualExport","IsAllowUploads","IsAllowReplications","Route","AllowedBanks","GetUserAllowedBanks","LocalBanks","ExternalCreditCardBanks","ForeignBanks","ExternalLoanersBanks","CCProcessors","jf","AllowedSubtypes","SelectorOrganizations","ListAccessible","ContactUsSubjects","f5","UserInfoDict","z8","columnResizingMode","TargetModuleName","TargetComponentType","ButtonText","ButtonIcon","ComponentType","IsVisibleButton","getSystemOptionAsBoolean","SystemOptions","ContactUsEnabled","U8","Hf","$8","tt","AppConfigService","getModuleNameByInstance","StateType","FocusOnMe_V","FocusOnMe_C","Sections_V","Sections_C","OnGetCustomComponentStateName","LoadState","DoValidatorReset","validationGroups","ChangeDetector","destroyed","SysEnums","ResourcesService","IsCustomBuild","IsNeedSaveState","SaveState","GoBack","OnInputPropertiesChanged","OnPropertiesChanged","subscribtionOnEntitySaved","OnEntitySaved","OnExternalEntitySaved","subscribtionOnEntityLoaded","OnExternalEntityLoaded","subscribtionOnReloadComponent","OnReloadComponent","ReloadComponent","RunDestroyCycle","RunInitStartCycle","RunInitFinishCycle","RunInitStartCycleInternal","RunInitFinishCycleInternal","RunDestroyCycleInternal","UnsubscribeRegisteredSubscriptions","OnStartInitCycleInternal","OnStartInitCycle","SubscribeEvents","OnInitComponentInternal","ExecuteInitComponentHandler","InitFocus","OnInitComponentFinishedInternal","IsUseFinishCycleChangeDetection","OnInitComponentFinishedAfterDetectInternal","CustomizeComponentsVisibility","CustomizationService","SetComponentCustomizations","Grids","toArray","UnsubscribeEvents","OnDestroyComponentInternal","FocusOnMe","IsAutoFocusEnabled","ResetValidation","AcceptGridChanges","SystemOptionFlag","EntityService","SetLastSavedEntity","status","brokenRules","registeredSubscriptions","registeredInitComponentHandlers","closed","W","elementAttr","class","CreateContextMenuComponent","_showAddButton","_gridToolbarComponent","_addButtonText","AddButtonText","_title","_addButtonNavParams","AddButtonNavParams","SetLoadPanelState","_isUpdateScrollPosition","SetScrollPosition","AfterInit","CreateGridToolbarComponent","visibleIndex","showInColumnChooser","GridRowContextMenu","search","enabled","allowResizing","allowReordering","containerRef","IsAutoHeight","getScrollable","scrollWidth","scrollTo","StartExtraButtonsTemplate","EndExtraButtonsTemplate","parentElement","previousSibling","tagName","AddButtonNavPath","before","_gridToolbarRef","destroy","read","Fields_V","Fields_C","SetFieldDefaultValues","SetDefaultFieldsLabels","IsDuplicateMode","IsDuplicate","OnIsAllowDuplicate","ContextMenuDefault","OnDuplicateInternal","PageComponentName","Share","GetRenderedTemplate","InitEntity","OnGetEndpoint","EntityValidations","NotifyEntityLoaded","OnEntityDeleted","OnEntityConfirmSave","ReflectEntityDeleted","OnEntityNew","OnEntityDuplicated","OnSetDefaults","GetEntityObjectName","OnEntityInitObjectName","GetDefaultEntityObjectName","TargetDocEntry","IsValidEntity","GetCurrentRouteWithoutParams","_fieldsCount","_fieldsNames","ShowAsWindowOnMobile","_showAsWindowOnMobile","OnShowAsWindowOnMobile","OnIsDirtyDisabled","_isDirtyEntity","_isDirtyCustom","IsRunCycle","pageHistory$Subscription","PageHistory$","GetTitle","UpdateHistoryItem","onFilterPanel$Subscription","m_IsDialogVisible","m_IsDialogRendered","onScreenSizeChanged$Subscription","onEntityChange$Subscription","InitToolbarSettings","EntityMode","OnInitEntity","OnInitSubtitle","OnInitContextMenus","OnInitViewModes","OnInitDefaultViewModeID","SetToolbarTitle","SetToolbarButtonsVisibility","BackButtonClick","OnGetContextMenuItems","GetContextMenus","ContextMenuTitle","OnGetContextMenuTitle","ViewModes","GetViewModes","CloseButtonClick","OnShareButtonClick","ShareService","OpenShareDialog","OnGetRenderedTemplate","OnShare","GetDefaultOnGetRenderedTemplate","Subtitle","GetSubtitle","SetHistoryItemTitle","ShowMenuButton","AppConfig","ShowBreadcrumb","IsShowAsFullScreen","HistoryLength","HasHistoryForWindow","ShowCloseButton","IsAllowNotifications","_showDialogAsBottomSheet","m_DialogCompletedHandler","m_DialogCanceledHandler","InitDialog","ShowDialog","HideDialog","OnClose","CloseWindow","GetLastPageBodyElement","querySelectorAll","SetPagePreviewState","OnGetHistoryCustom","OnGetHistoryInternal","decorators","m_DataSource","isLoaded","m_DataStore","byKey","m_store","loadMode","ImplementLoad","ImplementByKey","ImplementTotalCount","ShapeResponse","GetByValue","update","ImplementUpdate","ImplementRemove","insert","ImplementInsert","customLoadAction","__rawData","IsRaw","onLoaded","ActionName","customGetAction","searchValue","Search","SearchFields","searchExpr","ComplexFilter","Filter","Sort","IsSortDescending","desc","DistinctField","skip","Skip","take","Take","DLOSearch","DLOSearchFields","DLOSort","DLOIsSortDescending","DLOSkip","DLOTake","DLOComplexFilter","DLODistinctField","ExecuteDeleteAction","EntryIDs","DeliveryOption","Resolve","Reject","gridEl","gridParent","AllowCustomization","AllowAdvancedFilters","KeepSorting","EntityTypeName","currentRowIndex","_entityTypeName","IsColumnExists","IsRowExists","hasEditData","cancelEditData","getSelectedRowKeys","rowData","editCell","export","customizeExcelCell","onAfterExporting","beginUpdate","endUpdate","onExporting","selectedRowsOnly","addWorksheet","worksheet","customizeCell","dataType","xlsx","writeBuffer","Blob","texts","exportTo","IsRowDeletable","IsNewRowCreatable","addRow","getCellElement","MapEventsEdit","BeforeEdit","AfterEdit","AfterEditPromise","AfterEditAsync","setCellValue","ColumnEditHandler","MapEventsOptions","that","QueryEditCell","QueryShowCell","editing","form","customizeItem","ColumnCustomizeItemHandler","GetData","defaultSetCellValue","RaiseDependantEvents","allowAdding","Function","IsRowEditableOrUpdatable","allowUpdating","allowDeleting","IsRowEditable","editRow","getRowIndexByKey","mode","readOnly","tabIndex","newColumnIndex","prevColumnIndex","newRowIndex","prevRowIndex","rows","SetColumnsCaption","columnCount","formItem","InitGridGeneral","InitGridEditable","InitGridReport","InitGridLines","allowColumnReordering","allowColumnResizing","stateStoring","storageKey","keepSorting","subscribtions","onInitialized","observed","focusedRowEnabled","SetColumnCaption","CurrentEntityTypeName","_resourceService","orientation","putOnlyUsedFonts","addFont","setTextColor","GetPrintHeaderInfo","setFontSize","setFont","GetTextWidth","internal","scaleFactor","ReverseHebrewText","GetPrintLogoPath","jsPDFDocument","topLeft","textColor","borderColor","borderWidth","drawLeftBorder","drawRightBorder","font","groupSummaryItems","parseValue","customizePdfCell","pdfCell","output","OnGetPrintTitle","OnGetFilterDescription","fontSize","fontWeight","position","whiteSpace","querySelector","removeChild","M4UConfig","customBuild","buttons","sorting","paging","onEditingStart","OnEditingStart","onInitNewRow","OnInitNewRow","onEditorPreparing","OnEditorPreparing","onFocusedCellChanging","OnFocusCellChanging","onCellPrepared","OnCellPrepared","OnOptionChanged","onRowPrepared","OnRowPrepared","onRowValidating","OnRowValidating","hoverStateEnabled","visibleWidth","_popup","IsRowsExists","CreateNewRow","loadOptions","getCombinedFilter","_Component","InitExtender","_Mode","_AllowCustomization","_KeepSorting","_AllowAdvancedFilters","_Name","InitGrid","DestroyGrid","vcRef","componentView","UserInfos","Components","Endpoints","Services","useValue","loadM4UConfig","_m4uConfig","projects","moduleName","build","builds","major","minor","Resources","_resources","CustomResources","_customResources","deploymentPort","GetDeploymentPort","deploymentLocation","GetDeploymentLocation","IsDevelopmentPort","protocol","port","hostname","GetDeploymentLocationAPIURL","_appConfig","h","appConfig","ProjectName","loadResources","mergeConfigs","OnGetHomePagePath","RoutesWithEmptyLayout","RoutesAnonymous","RoutesProtected","IsHomePage","EntryComponents","getRoutes","canDeactivate","canActivate","SupportLegacyDisplaySizes","OnInitApplicationAsync","OnLogoutApplicationAsync","OnGetGlobalDataSources","OnGetDefaultRouteParams","OnGetAppLoginExtensionLinks","setMenuModuleName","OnGetMenu","OnGetNavbarItems","GetLists","GetInjectableComponentOptions","OnLoginPage","ShareableEntities","menu","cordova","DataSourceName","CredentialType","ReturnURL","DeliveryOptions","Address","credentialID","_notificationReadSubject","ignoreLoadingBar","notificationID","MID","CreateBottomSheetInstance","ContentPortal","ResolveContent","ContentParams","Height","ShowBottomSheet","MenuItems","ViewContainerRef","resourceService","OpenMessageBox","sysEvents","CloseMessageBoxSubject","GetComponentCustomizations","GetSeparatedGridCustomizations","HideGridColumns","IsNeedToHideElement","ComponentsCustomizations","FilterCustomizations","GetRelevantCustomizations","Logic","DefaultValue","HideValues","ReadOnly","Required","ValidationFunction","validationCallback","OnFieldValidation","ValidationMessage","rule","FieldsCustomizations","User","Hide","HideOnDesktop","HideOnMobile","columnAutoWidth","dateSerializationFormat","showBorders","showRowLines","renderAsync","savingTimeout","customSave","selectionFilter","filterType","filterValues","filterValue","columnChooser","headerFilter","container","scrolling","preloadEnabled","useNative","excelFilterEnabled","remoteOperations","filtering","useIcons","selectTextOnEditStart","isMobile","colCountByScreen","onToolbarPreparing","totalItems","getView","_popupContainer","_initializePopupContainer","offset","onRowExpanded","customizeColumns","allowFiltering","valueExpr","displayExpr","allowGrouping","onContextMenuPreparing","allowHiding","showColumnChooser","showHeaderFilterMenu","fields","area","SetFloatingButtonsDefault","valueChangeEvent","inputAttr","autocomplete","onFocusIn","OnFocusIn","onKeyDown","OnChangeInputDirection","validationMessageMode","autoResizeEnabled","step","stopImmediatePropagation","pickerType","IsTablet","displayFormat","useMaskBehavior","calendarOptions","showTodayButton","dropDownOptions","onOpened","GetDateBoxTodayButton","SetTodaysDate","OnCloseDateBox","onClosed","removeEventListener","placeholder","searchTimeout","ShowBottomSheetList","noDataText","showSelectionControls","multiline","maxDisplayedTags","applyValueMode","pageLoadMode","activeStateEnabled","layout","showTitle","showCloseButton","dragEnabled","hideOnOutsideClick","animation","duration","resolveLabelOverlapping","legend","weight","tooltip","horizontalAlignment","argumentAxis","overlappingBehavior","rotationAngle","_options","showIndicator","showPane","shading","shadingColor","showArrowIcon","floatingActionButtonConfig","dir","_popupContentId","getHours","getMinutes","isDesktop","showAsBottomSheet","IsSearchEnabled","SearchExpr","_saveValueChangeEvent","ShowList","_isEnabled","_field","_savedEntity","Field","Deactivate","Yes","Done","Loading","Select","Back","OK","CheckState","appConfigService","m_CompanyInfoDict","m_bIsFrameworkInitialized","createEvent","initEvent","dispatchEvent","systemEndpoint","GetCompanyInfo","GetSystemOptions","GetFirstModuleName","DecimalSeparator","ThousandsSeparator","InitCompanyInfoDictinary","setOptions","InitLanguage","InitializeDevExpress","InitializeInjectableComponentsOptions","devExpress","defaultLanguage","rtlEnabled","forceIsoDateParsing","InitDictionaries","navigator","InitializeFramework","_localStoragePrefix","apiGatewayService","MigrateOldStorage","GetPrefixedKey","setItem","removeItem","IsLoggedIn","getParams","url","GetSessionID","SecureKey","SecureKeyType","DoLogin","NavigateByUrl","goToLoginPage","match","ClientFingerprint","clientFingerprintService","GetClientFingerprint","LoginEndpoint","Login","CheckResult","OnLoginSuccess","CheckResultMessage","OnLoginBySessionFailed","IsFrameworkInitialized","SessionService","SaveSessionCredentials","ClearSessionCredentials","SetSession","StartSaveHistory","Logout","GetUrl","NavigateExternal","pathname","activatedRoute","snapshot","parent","queryParams","getParamValue","GetQueryParamsInternal","GetQueryParamsWithoutPrefixes","GetQueryParamsPrefix","params","FixDeploymentLocation","RefreshExpiredSessionTimeout","GetUrlTree","router","navigateByUrl","GetCleanRoutes","config","getParam","shift","GetPagesPrefix","GetCurrentRoute","routerState","root","firstChild","createUrlTree","outlets","primary","children","serializeUrl","_notificationUnreadSubject","_notificationsSubject","LoadPushMessagesUnread","_notificationReadSubscription","pushMessageEndpoint","NotificationRead$","_notificationUnReadSubscription","GetPushMessagesUnread","Item1","Item2","_timerId","setInterval","clearInterval","Pages","login","logout","credentials_activity_status","notificationshistory","notification_dispatches","notification_servers","notification_templates","notifications","system_options","credential_login_history","request_history","credentials_report","credentials_creation","data_views","remote_request_history","NotificationViewComponent","PrintBoxDialogComponent","SignBoxDialogComponent","ImageBoxDialogComponent","PhotoBoxDialogComponent","PasswordManageComponent","CredentialsActivityStatusComponent","NotificationsHistoryComponent","PreviewDialogComponent","NotificationDispatchComponent","NotificationDispatchListComponent","NotificationServerComponent","NotificationServerListComponent","NotificationTemplateListComponent","NotificationTemplateComponent","HtmlBoxDialogComponent","NotificationTestDialogComponent","NotificationPreviewDialogComponent","SystemOptionsComponent","AddSystemOptionDialogComponent","BarcodeBoxDialogComponent","CredentialLoginHistoryComponent","RequestHistoryListComponent","RequestHistoryComponent","RemoteRequestHistoryListComponent","RemoteRequestHistoryComponent","WelcomeUserDialogComponent","HistoryViewComponent","SystemCredentialsComponent","SystemCredentialsCreationComponent","WelcomeMessageConfigDialogComponent","DataViewListComponent","MenuButtonListComponent","ShareDialogComponent","Lists","Languages","NotificationDeliveryOptions","NotificationDispatchDeliveryOptions","NotificationTemplateEditingModes","UserCreationOptions","WelcomeDeliveryOptions","NotificationTypes","NotificationStatuses","NotificationPredefinedSmtpServers","SMTPServer","SMTPPort","SMTPUseSSL","NotificationPredefinedSmsServers","SMSEndpoint","SMSToken","SMSEndPointIsInforU","MFAMethods","ExportMenuItems","PopupShowStatuses","InfoUTypes","DataType","SectionName","UserLoginStatuses","IsSuccessStatuses","HistoryEventTypesEnum","PageTypes","LogLevels","Translations","lblLanguage","lblUserName","lblPassword","titleLogin","btnLogin","btnLogout","btnChangePassword","btnContactUs","btnRecoverPassword","lblSaveCredentials","titleLogout","titleLogoutLong","titleLogoutLast","titleSessionExpiredTitle","titleSessionExpired","titleChangePasswordTitle","titleChangePassword","titleChangePasswordTitle2","titleException","titleExceptionLong","titleComingSoonTitle","titlePasswordChanged","titleIdentification","titlePasswordEntry","titleRecoverPasswordTitle","titleWelcomePasswordTitle","titleRecoverPassword1","titleRecoverPassword2","titleRecoverPassword3","titleRecoverPassword4","titleWelcomePassword2","titleWelcomePassword3","btnReEntry","genOK","genYes","genNo","genCancel","genNoData","genPrint","genSign","genReset","genTakePhoto","genSavePhotos","genDownload","msgSignHere","msgSignatureRequired","msgPasswordsDontMatch","errorNetwork","errorSessionExpired","errorUserInvalid","errorNotInitialized","errorUnexpected","errorUnauthorized","errorPasswordExpired","msgFinishEditing","errorUserNameNotFound","errorIsNotExistsPhoneAndEmail","errorSessionIsFrozen","lblDay1","lblDay2","lblDay3","lblDay4","lblDay5","lblDay6","lblDay7","lblDay1s","lblDay2s","lblDay3s","lblDay4s","lblDay5s","lblDay6s","lblDay7s","msgSuccess","msgNotPerformed","lblTimes","lblUser","btnCancelDocument","lblBy","titleCreatedBy","titleCreated","titleCreatedAt","titleAgo","lblAgo","lblSearch","lblCloseSearch","lblColumnChooser","lblColumnHiding","lblShowGridFilter","lblHideGridFilter","lblExcel","lblPdf","lblViewList","lblViewGrid","lblDisplayUserName","lblLastUseDate","lblLastUseBefore","progressIndicator","lblUpdated","lblNoSorting","lblVersion","lblDateIsNull","lblDateApproximate","f702","f703","f704","f705","f706","f707","f709","f710","f711","f712","f713","f714","f715","f716","f717","f718","f720","f721","f722","f723","f724","f725","lblOldPassword","lblNewPassword1","lblNewPassword2","lblRecoveryType","lblRecoveryPhone","lblRecoveryEmail","btnSendNotificationDispatch","btnSendRecoveryCode","btnCheckUserName","btnBackToLogin","lblRecoveryToken","btnResend","btnSaveChanges","btnGeneratePassword","btnCreateCredentials","btnUnlockUser","lblDisplayUsername","lblDisplayUserDescription","lblCredentialsNotExist","lblPendingWelcome","titleUserInformation","errorMaxSizeUploadError","msgFileSizeRestriction","btnSelectFiles","btnMakePhoto","lblAttachFileSize","lblFilters","lblAt","lblObjectName","lblIsOverride","lblValidation","lblDViewsDBDuration","lblXViewsDBDuration","lblCheckPerformance","lblValidateViews","lblViewError","lblLoginOTPSendMethod","lblLoginOTPEmail","lblLoginOTPPhone","lblLoginOTPOTP","lnkLoginByOTP","msgNotificationSent","btnLoginOtpSendOtp","lnkLoginByPassword","lblApply","lblTaxNumber","lblIsActive","lblEmail","lblPhone","lblIsPendingWelcome","lblIsOnline","lblIsLockedOut","lblCreateCredentials","lblCredentialFilter","msgRouteNotFound","btnReload","lblHideColumn","lblShowHiddenColumns","lblName","lblDescription","msgLoading","lblSentDate","lblSentBy","lblEntryID","lblFromAddress","lblFromDisplayAddress","lblAddress","lblSubject","lblMailBody","lblDeliveryOption","lblSendNotificationBy","lblUsernameCreationOption","lblStatus","lblToAddress","lblCCAddress","lblBccAddress","lblFailureDescription","lblNotificationTemplate","lblFrom","lblUntil","lblAdd","lblClear","lblCompactMode","lblSessionAlmostExpiredTitle","lblSessionAlmostExpiredPrompt","lblSessionExpiredTitle","lblFirstDate","lblLastDate","lblSessionExpiredPrompt","lblNotificationContent","lblGeneral","lblOptions","lblCustom","lblMFACode","titleMFACodeOnEmailSent","titleMFACodeOnPhoneSent","lblMFAMethod","Month_1","Month_2","Month_3","Month_4","Month_5","Month_6","Month_7","Month_8","Month_9","Month_10","Month_11","Month_12","lblExport","lblCredentialType","lblIsRestrictByIP","lblIsExcludeFromMFA","lblIPRangeStart","lblIPRangeEnd","lblIPErrorMessage","msgIPRangesIsEmpty","msgIPRangeIsEmpty","msgPasswordMinLength","msgPasswordMinCountDigits","msgPasswordMinCountLetters","msgPasswordComplexityRequirement","errorOnlyImageAllowed","btnClose","lblPhoto","lblDragAndDrop","errorRequiredMessage","titleDuplicate","lblAllNotifications","lblSMTPServer","lblSMTPPort","lblSMTPUserName","lblSMTPPassword","lblSMTPUseSSL","lblSMSEndpoint","lblSMSUserName","lblSMSPassword","lblSMSToken","lblSMSEndPointIsInforU","titleTemplateInformation","titleEmailInformation","lblFromEmail","lblFromEmailDisplay","titlePhoneInformation","lblNotificationServer","lblFromPhone","lblSMSBody","titlePushMessagesInformation","lblPushMessageBody","lblHTMLBody","btnSave","titleDelete","lblUseDefault","lblNoUnreadMessages","lblTo","lblPushMessageContent","lblSmsMessageContent","lblIsAutomatic","lblSystem","lblPopupShowStatus","lblEmailContent","btnShowInEditor","titleLeavePageConfirmation","btnLogOff","btnStayConnected","btnGoToHomePage","lblReadDate","msgDeleteNotificationTemplateQuestion","lblNotificationServerWrong","msgInvalidEmail","btnTestServer","lblMIDIsMissing","lblEnterMID","btnShowPreview","lblIsServer","lblIsClient","lblModuleName","lblLogin","lblFramework","lblOption","lblValue","lblSectionName","lblAddOption","msgOptionAlreadyExists","msgOptionEmpty","lblBadLogin","msgRemoveOption","titleEmailConfiguration","titleSMSConfiguration","msgDeleteNotificationServerQuestion","msgNoData","lblEmailHeader","lblConfigure","lblDefaultFromAddressForInforU","lblDefaultFromAddressForUnicel","lblInforUFromPhoneValidationTooltip","lblNotifications","lblMinimize","lblShowMore","titleWhatsAppInformation","lblWhatsAppBody","lblWhatsAppApiKey","lblWhatsAppEndpoint","titleWhatsAppConfiguration","titleNotificationDispatchList","titleNotificationServerList","titleNotificationTemplateList","lblPoweredBy","titleChooseOption","titleWebAPIAllowedIPs","lblIpAddress","lblLoginDate","lblPrint","lblDateFrom","lblDateTo","lblDate","msgCouldNotStartVideoError","msgCameraPermissionDenied","lblCameraModeVideo","lblCameraModePhoto","titlePreview","msgLogoutQuestion","lblGroupPanel","lblExpandAll","lblMultiEmailError","msgPhotoMinCountError","msgPhotoMaxCountError","lblRestoreDefaultView","lblStartDate","lblDuration","lblController","lblAction","lblMethod","lblStatusCode","lblRequestData","lblQueryString","lblBody","lblResponse","msgTextCopied","lblCopy","btnGoToLoginHistory","btnGoToRequestsHistory","btnManageCredentials","btnGoToCredentialsReport","btnWelcomeUser","lblTestFromPhone","lblHistory","lblNewValue","lblOldValue","lblFieldCaption","lblDocumentCaption","lblHistoryLineAdded","lblHistoryLineRemoved","lblHistoryLineNumber","lblHistoryNotFound","lblHistoryChangeAdded","lblHistoryChangeRemoved","msgLoadingPDF","lblImpersonatedBy","lblIsUserCustomTemplate","msgIsUserCustomTemplateEnable","btnEnableEditable","btnDisableEditable","msgScreenSizeChangedRefresh","msgOrientationChangedRefresh","lblDeliveryMethod","lblNotificationDispatch","lblRecipients","lblPreview","msgRecipientsAreEmpty","lblCreatedBy","btnCancelNotifications","lblCancelNotificationsPrompt","lblNotificationMessage","lblIsDeleted","lblShareMethodEmail","lblShareMethodSms","lblShareMethodWhatsapp","lblShareMethodPrint","lblShare","lblEntityType","lblPageName","btnSend","lblChooseTemplate","lblShareMethodDownload","lblShareMethodShare","lblUploadCrystalTemplate","lblNotificationTemplateEditingMode","msgShareNotificationTemplateNotFoundError","btnShare","msgNotificationTemplatePrefixNotFoundError","lblPrefixBody","lblIsSharePdf","lblFileNameFormat","lblEntityBindingPageType","titleEntityBindingInformation","msgNotificationTemplateFileMissingError","lblSharedFile","msgNotificationTemplateEmptyError","lblIsSupportEmail","lblIsSupportSMS","lblIsSupportWhatsapp","lblIsSupportPush","lblIsSupportSharing","lblIsShareByEntities","ttlLogs","lblObjectType","lblObjectID","lblLevel","lblNotAssigned","msgNotificationSentTo","lblHeader","m_Dictionaries","m_CustomDictionaries","m_Lists","OverrideModuleName","LoadFieldCustomizations","LoadComponentCustomizations","GetEntitiesResources","SelectedLanguages","GetLanguagesList","EnsureInitialized","getResourceValue","StringMap","Old","New","tryGetValueFromDictionaries","GetValueFromPath","sortListfunc","localeCompare","languages","_pageHistorySubject","_historyItemsSubject","navigationId","_history","OnNavigateDefault","onPopState","OnBrowserButtonClick","events","GetCurrentRouteWithUrl","getCurrentNavigation","Url","IsWindow","SaveHistoryItem","ShareHistory","GoBackFromWindow","NavigateItem","ClearPagesState","ClearPageState","route","GetScreenSize","onScreenSizeChanged","showRefreshMessage","showMessageHandler","clearTimeout","uiService","_currentOrientation","Orientation","breakpointObserver","observe","processRefreshMessage","_currentScreenSize","isMatched","deviceType","matchMedia","matches","sessionStateChangedSubject","m_Session","DisplayUserDescription","m_UserInfoDict","m_DataSources","initAppSubscription","SetDataSources","notificationService","Start","Started","Ended","logoutAppSubscription","Stop","sessionExpiredTimeoutHandler","sessionAlmostExpiredTimeoutHandler","AlmostExpired","AutoEndSession","Expired","shareEndpoint","GetNotificationsTemplates","_notificationTemplates","GetNotificationTemplatesByPageAndEntity","CreateInstance","PageName","ShareEntityType","_sidebarSubject","_sidebars","CreateSidebarInstance","Width","SidebarComponentOptions","Position","SidebarState","SidebarPinned","SidebarName","_onEntitySavedSubject","_toolbarReloadSubject","_selectedRouteChangedSubject","_reloadMenuItemsSubject","_menuPositonSubject","_filterPanelSubject","_pageSidePanelStateSubject","_pagePreviewStateSubject","_openMessageBoxSubject","_closeMessageBoxSubject","_breadcrumbSubject","_defaultNavigationSubject","_loadPanelSubject","_loadingSubject","_dialogShownSubject","pageComponentName","fileName","systemOptions","CloseMessageBox","ShowMessage","GetNotifyOptions","closeOnClick","closeOnSwipe","GetNotificationTop","contentTemplate","show","hide","ExecuteGetRequest","ExecutePostRequest","ExecuteDeleteRequest","http","post","delete","PrepareQueryParams","headers","GetHeaders","reportProgress","context","responseType","PrepareQueryParamsInternal","ConvertToServerDate","UTC","getSeconds","standaloneApplicationApiUrl","prototype","ToDate","IsToday","Time","GetDateApproximateInternal","IsSameDate","IsHasTime","_disposed","GetGridHeightRelativeToPage","offsetHeight","offsetTop","bottom","defaultView","getPropertyValue","MapObject","GetNewInstance","CloneObject","charCodeAt","imul","atob","Uint16Array","Uint8Array","byteLength","fromCharCode","btoa","buffer","TextEncoder","encode","fromCodePoint","ConvertToBase64","exec","FileReader","onloadend","result","Buffer","readAsArrayBuffer","ConvertToBlob","DownloadFile","revokeObjectURL","IsObject","StringifyObject","readAsDataURL","XMLHttpRequest","overrideMimeType","send","responseText","deep","dateParser","IsArray","DeepProxy","deleteProperty","SearchTree","getResponseHeader","readyState","_reISO","_reMsAjax","FilterTree","declarations","exports","production","version","d","f","CreateSections","OptionName","CurrentOption","InOut","GetElementID","getElementsByTagName","attributes","DeleteOption","SectionInfo","SectionIndex","IsGeneral","animations","ModulesDataSource","IsServer","IsClient","IsWideScreen","OKButtonText","CancelButtonText","ExtraButtons","OKButtonTabIndex","TabIndex","pageButtons","okBtnRef","btn","CloseButtonHidden","DefaultIsClient","InitModulesDataSource","InitSystemOptions","addGeneralOptionDialog","AddGeneralOption","AddCustomOption","systemOptionsList","ShowOption","GeneralOptions","ValueBoolean","ValueNumber","CustomOptions","systemOptionsEndpoint","SaveOptions","GetOptions","GeneralOptionSettings","CustomSections","IsShowPasswordTooltip","PasswordComplexityLen","PasswordComplexityMinChars","PasswordComplexityMinDigits","TextBox","OnShowPasswordTooltip","expandedCard","IsOpened","childElementCount","ShowAsUsualOnMobile","ShowContextMenu","overflow","opacity","IsGridEditable","WindowPath","WindowParams","CustomCloseAction","CloseBottomSheet","ValidationGroup","OnOK","OnOkValidationFailed","IsPageShowAsFullScreen","AutoCloseBottomSheet","handler","fileLoader","files","ReturnDataType","ResetInput","srcElement","readAsText","_mediaItems","SetPreview","StartVideo","IsCameraStarted","StopVideo","VideoStream","PreviewMediaItem","IsPreview","video","pause","srcObject","getVideoTracks","stop","permissions","query","CanUseCamera","PreviewWidth","GetClientWidth","PreviewHeight","GetClientHeight","mediaDevices","getUserMedia","facingMode","ideal","MaxWidthPx","MaxHeightPx","audio","VideoAspectRatio","getSettings","aspectRatio","VideoWidth","VideoHeight","play","TakePhoto","MediaItems","IsAutoSavePhotoAfterTake","OnSavePhotos","Recording","RecordInterval","RecordTimeSeconds","RecordTimeString","StartRecording","GetVideoBlob","VideoDataUrl","GetSafeUrlFromBlob","VideoBytes","MediaRecorder","IsVideoRecording","IsDialogVisible","preview","ImageBase64","thumbs","OnClosePreview","MinCount","MaxCount","IsVideoMode","getContext","drawImage","canvas","toDataURL","_imageMimeType","ImageQuality","ea","AddPhoto","GetNewMediaItemEntryID","GetVideoCover","ImageBytes","ondataavailable","start","onstop","sanitizer","bypassSecurityTrustUrl","setAttribute","currentTime","videoWidth","videoHeight","toBlob","GetClientBodyElementRect","IsDrawing","pad","isEmpty","_clientHeight","ResizePad","_clientWidth","SignatureData","LoadSignature","OnTouchMove","passive","Options","penColor","maxWidth","SignatureReadOnly","ClientWidth","ClientHeight","MaxSignatureHeight","_areaAroundSize","fromDataURL","ratio","off","signBox","OkButtonText","OkText","SetClientSizes","ClearSignature","GetCanvasWidth","fps","qrbox","QrBoxFunction","useBarCodeDetectorIfSupported","rememberLastUsedCamera","showTorchButtonIfSupported","formatsToSupport","showZoomSliderIfSupported","defaultZoomValueIfSupported","OnTextDecoded","OnResultDecoded","IsInititialized","DeviceIDs","StartHtmlQrCode","StopHtml5QrCode","html5QrCode","isScanning","deviceId","GetSavedDeviceID","Config","QrCodeSuccessCallback","ReaderElement","CurrentDeviceIndex","SaveDeviceID","_lastUsedCameraStorageName","Reverse","hasView","createEmbeddedView","templateRef","elRef","onShow","_contextMenus","onHide","subscribtion","inputmode","isShowZero","ignoreEmptyValue","_Currency","IsHideLabel","screen","ReverseValue","UseColumnCaption","TrueColor","_defaultActiveColor","FalseColor","getHtmlContent","list","focusStateEnabled","_disabled","NavPath","NavEntryID","NavParams","onclick","contextMenuService","addContextMenu","searchEnabled","searchMode","SetItemTemplate","_DataMode","minSearchLength","openOnFieldClick","_ShowExtra","SetDisplayExpression","_ShowValue","_ItemCssClass","itemTemplate","PrepareItemTemplate","_DisplayExpr","ExtraField","TextField","ShowValue","ShowExtra","_TextField","_ValueField","_ExtraField","GetHighlightedString","ItemCssClass","calculateFilterExpression","getCalculateFilterExpression","CustomFilterType","RelatedToAtLeastOneFilterExpressionBuilder","tn","commands","LinkQueryParams","Enabled","_Enabled","m_bInitComplete","IsColumn","InitColumnRules","InitNormalRules","DoNotShowRequiredMsg","RequiredMessage","_getOption","_setOption","ngAfterViewInit","eventsQueue","eventUnsubscribeFunction","listen","elementRef","EventName","IgnoreNavigationKeys","keyCode","ignoreKeyCodes","OnEvent","subscription","DebounceTime","ThrottledEvent","MessageCode","applicationPath","IsSupported","swPush","notificationClicks","OnNotificationClicked","notification","action","NavigateCallback","Notification","permission","requestPermission","serviceWorker","getRegistration","showNotification","deviceDetector","browser","device","IsIphone","clone","method","detectContentTypeHeader","AddHeaders","GetTrackProgressHeader","FormatFields","handle","HandleEvent","GetErrorResponse","EndSession","statusText","stack","HandleTrackProgressEvent","loaded","dateRegex","go","$l","Sizes","getInitialRoute","sessionStateChanged$","handleRoutes","LoadPanel","loadPanelVisible","Loading$","isLoading","baseUrl","shareService","bottomSheetContainerRef","getSelectedMenuItem","menuItems","ChangeSelectedRoute","shouldGetInitialURL","initialURL","GetCurrentUrl","handleNavigationEnd","IsExternal","OpenMessageBoxSubject","OpenMessageBoxDialog","SetMenuPositon","MenuOpened","_languageSubject","IsSelectedLanguageLoaded","$f","IsMultiLanguage","SwitchLanguage","OnOpenContactUs","OnChangePassword","OnLogout","_menuOpened","MenuInstance","ExpandParentItems","_contentReadyAction","_initContentReadyAction","isMultiLanguage","InitMenuItems","InitializeItems","ModulesVersion","getModulesVersion","UserMenuItems","GetUserMenuItems","SelectedRoute","_selectedItem","BaseAction","containerViewChild","InitializeItem","GetMenuTranslation","InitMenuItem","permissionFunction","isVisibleOnMobile","selected","GetParentMenus","expandItem","node","pathParams","MenuTooltip","Target","contains","GetMenuIconElement","ServerVersion","ClientVersion","toggle","languageService","SetLanguage","loginEndpoint","ChangeLanguage","tr","currentPath","HomeMenu","LoadPushMessages","_sidebarStateSubscription","IsLoadAllNotifications","PushMessages","GetPushMessages","Repaint","OnAllNotificationsLoad","ei","viewModesMenu","HideBreadcrumbs","InitInjectedComponents","Breadcrumb","IsBreadcrumbVisible","TargetComponentName","InjectedComponents","TargetAppName","OnInitInjectableComponent","ShowInToolbarOnMobile","Hint","Click","ToolbarButtons","ButtonSettings","IsStandardApplicationMode","OnTitleClick","IsShowViewModesButton","OnShowViewModes","callback","im","OnSubmit","IsSupportedLoginByOTP","IsUseSessionCredentials","DisplayName","Stage","Language$","ReloadApplication","ShowPasswordRecoveryLink","GetUserName","LoadExtension","PrepareEntity","IsSaveCredentials","OnAfterInit","ClearSavedSessionState","MFACodeSent","LoginExtensionLinks","Link","MFACode","Password","sm","iss","decodeURIComponent","OnDoLogin","OnRedirectToAuthority","OnAfterLogin","GetOAuthRedirectURL","Yv","DoLogout","ClearSidebars","credentialActivityGrid","credentialActivityEndpoint","ListCredentialTypes","CredentialsInfo","ListActivity","OnRefresh","_n","CurrentDeliveryOption","emailGrid","smsGrid","pushMessageGrid","whatsAppGrid","sharingAppGrid","notificationEndpoint","GetRelevantDeliveryOptions","RelevantNotificationTypes","IsDeliveryOptionAvailable","IsTabsVisible","IsNoData","SearchAddress","UntilDate","SearchUntilDate","SearchFromDate","SearchTemplate","Notifications","GetNotificationsReport","WindowWidth","GetGridExtender","scrollHeight","HistoryChanges","getChangeLabel","GetEntityChangeLabel","HistoryLineChanges","GetLineChangeLabel","EntityLineID","imports","OldPassword","NewPassword1","ChangePassword","NewPassword2","VerifyPasswordComplexity","AdditionalTitle","ChangePasswordExpired","GoToLogin","RecoverPassword","CheckUserName","UserNameCheckResponse","IsExists","HasEmail","HasPhone","Token","VerifyRecoveryToken","ChangePasswordByToken","LoadCredentials","LoadCredentialsInfo","CredentialInfo","GetCredentialInfo","Credential","IsPendingWelcome","MFAMethod","IsRestrictByIP","IsExcludeFromMFA","IsLockedOut","IsSupportedUserWelcome","WebAPIAllowedIPs","OnGenerateRandomPassword","GetExternalInfo","OnInitMFAMethodsList","GenerateRandomPassword","SaveCredentials","IPRangeEnd","IPRangeStart","UnlockCredentials","welcomeUserDialog","MFAMethodList","captchaKey","OnResolved","ExtendFileInfo","AllowDownload","DownloadItem","DeleteItem","FilesChanged","fileBoxDialog","OnChangeUpload","Accept","AllowOnlyImages","IsImage","MaxFileSize","Size","IconStyle","IsDisplayedAsImage","NotImageErrorErrorMessage","MaxFileSizeErrorMessage","fileSizePipe","PreventDefault","DragOverCount","dataTransfer","photoBoxDialog","ConvertBase64ToImageJpeg","GetIconStyle","GetStringDateNow","FormatDatePart","imageDialog","MinSymbols","loadComponents","service","GetComponents","Destination","IsSupportedLoginByPassword","IsRequireTaxNumberForOTP","OnSendOtp","OnLogin","SendOtp","LoginExtensionLinks$","NotificationServers","notificationServerEndpoint","NotificationServerID","FromAddress","TestNotificationServer","GetListViews","uid","loadFile","entryID","IsBodyFilled","PushMessageBody","SMSBody","WhatsAppBody","LoadNotificationServers","SetShareableEntities","SetPages","EntityBindingPageType","IsUserCustomTemplate","IsUserCustomTemplateOriginal","CrystalTemplateFileView","IsSharePdf","EditingMode","CrystalTemplateFileID","FileData","PageComponents","injector","TypeDictionary","LabelDictionary","PageType","PageComponent","htmlEditorDialog","fileEndpoint","GetViewByID","ContentType","htmlBody","phone","UpdateIsUserCustomTemplate","inputBoxDialog","StoreMID","SelectOptions","GetSelectOptions","RadioGroupItems","GetRadioGroupItems","ButtonGroupOptions","GetButtonGroupOptions","SelectGroupedOptions","GetSelectGroupOptions","SelectedDataItems","Types","Styles","WithTitleAndIcon","WithCustomIcon","SelectedType","SelectedStyle","IsCollapsable","WithShadow","Zv","GetPageTabs","IsShowOnlyTabs","IsShowOnlyAccordion","IsShowStepNumbers","IsShowCustomButtonText","IsShowCustomButtonIcon","BrandID","ModelID","Models","InitData","Colors","GetColors","AttachColumnEditHandler","Phones","IsAvailable","Price","CalculateTotalSum","ListItems","GetListItems","GetContextMenu","bottomListSubscription","back","ci","Km","bypassSecurityTrustResourceUrl","GetSelectBoxDialogOptions","simpleDialog","barcodeBoxDialog","htmlBoxDialog","imageBoxDialog","FieldLabel","selectBoxDialog","signBoxDialog","hc","bc","eh","ah","UserLogins","CurrentCredentialID","ListLogins","ReadQuery","Credentials","webAPICredentialEndpoint","InitControllers","InitActions","InitModules","Module","Controller","Requests","webAPIRequestEndpoint","GetPossibleControllers","Controllers","GetPossibleActions","Actions","GetPossibleModules","Modules","OnCredentialChanged","Ac","InitBody","InitResponse","InitQueryString","clipboard","writeText","Body","QueryString","dl","vh","ShowUserCreationOption","NotificationDeliveryOption","LastUseDate","getSelectedRowsData","Bc","CredentialFilter","GetParamsFromQuery","CredentialTypes","systemCredentialEndpoint","GetAdditionalInfoMetadata","AdditionalInfoMetadata","GetAvailableCredentialFilters","CredentialFilters","SystemCredentials","ListSystemCredentials","IsAllowPagination","LanguageID","CredentialsForCreation","SendWelcomeUserMessage","ul","cl","_h","Ph","ListCredentialsForCreations","UserCreationOptionID","UserCreationOption","CreateCredentials","Eh","dataEditorEndpoint","ListViews","Views","CheckPerformance","CheckValidity","NotificationDispatchID","Ys","InitDeliveryOptions","IsSimplifiedHtmlBodyEdit","DeliveryMethod","NotificationBody","Subject","Recipients","Header","RecipientIDs","SendNotificationDispatch","LoadDeliveryOptions","notificationDispatchGrid","NotificationDispatches","notificationDispatchEndpoint","GetNotificationDispatchesReport","RelevantNotificationDeliveryOptions","Kc","ObjectID","_initDataSource","_initObjectTypes","RelatedObjectType","Logs","logEndpoint","GetObjectTypes","ObjectTypes","kh","xc","Oc","Vc","redirectTo","pathMatch","onSameUrlNavigation","relativeLinkResolution","StackTrace","errorMessage","Device","DeviceType","Browser","BrowserVersion","browser_version","OSVersion","os_version","history","replaceState","_selectedIndex","SelectedIndexChange","_visible","SetVisibility","accordion","updateDimensions","_currentItemIndex","OnItemClick","OnCustomButtonClicked","delteRtl","ScreenMode","LogDeviceInfo","IsScreenModeVisible","_id","IsRound","DoNotUseIconColorForText","IsHideTextOnMobile","content","qh","OnGoToLoginHistory","OnGoToRequestsHistory","SetElementStyles","setProperty","tg","sessionState$Subscription","ShowExpiredDialog","KeepAlive","isMessageDialogInDOM","LabelLines","InitTooltipContainer","addClass","tooltipEl","IconClass","IconColor","setStyle","fg","_viewContainerRef","_componentFactoryResolver","SetVisible","currentValue","_tooltipComponent","hostView","detach","fp","_subscription","NotificationUnread$","UnreadCount","ru","Ig","CanCancel","OnCancelPushNotifications","CancelPushNotification","Ng","LoadSystemCredentials","ToRequestBoolParam","Bg","zg","_notification","NotificationButtons","notificationConfigurationService","GetButtons","IsRead","ReadPushNotification","OnNotificationRead","bp","Ug","notificationsSubscription","Notifications$","ConvertToMessage","ShowToasts","life","closable","styleClass","messageService","addAll","toast","messages","onMessageClose","Yg","LoadAttachment","PreviewBody","bypassSecurityTrustHtml","SharedFileUID","FileView","printBoxDialog","PDFData","ny","dy","yy","Cy","HtmlBody","_navbarItems$","NavbarItems","GetItemTranslation","GetItemVisible","VisibleChange","My","DisableApply","InitContextMenuItems","ContextMenuItems","separator","FilterTemplateRef","CustomFilterCssClass","FilterPanelWidth","GetGridExternder","OnPrintButtonClick","Print","insertBefore","historyViewDialog","GetPages","ab","HistoryItems$","History","SetBreadCrumbVisible","NavigateHistoryItem","Xp","ShowLoadPanel","SetStyles","GetLanguage","OnDocumentLoaded","iframe","contentDocument","createTextNode","head","ub","WelcomeUser","TooltipUIID","wb","_onClickObserved","EnableClick","Db","pivotGrid","Vb","Yc","zb","ix","SelectedIDs","ax","Cf","Sf","Qh","eg","zu","Jf","tf","mg","hg","lb","Ay","Zg","_y","wg","Og","Rg","Sb","multi","useFactory","ag","Ap","vb","Yy","yi","Gy","apiKey","googleMapsApiKey","language","region","isRegisterServiceWorker","isDemoEnabled","entryComponents","defaultLocale","latencyThreshold","reCAPTCHAv3Key","bootstrap","schemas","bootstrapModule","CompleteSelection","selectedItemKeys","FilteredDataSource","pageLayout","popup","$implicit","ShowLargeWindow","WindowHeight","DoPrint","OnCustomPrint","observers","pdfViewer","contentWindow","SelectedTemplates","SelectedTemplate","PageTemplates","IsReportAndEntity","IsSupportEmail","IsSupportSharing","IsSupportSMS","IsSupportWhatsapp","SelectedTemplateID","SharingInformation","FilterTemplates","SetRenderedTemplate","ShareBase","share","NotificationTempalteID","Download","OnSend","ShareOnMobile","IsShareByEntities","CcAddress","BccAddress","IsEmail","IsPreviewMode","pure","warn","DateFormatCompact","bypassSecurityTrustStyle","bypassSecurityTrustScript","changeDetection","_Label","SetPlaceHolder","m_bEventAttached","IsFocused","DetachEvents","customizationService","SetFieldDefaultValue","SetFieldCustomizations","Controls","first","ctlSelectBoxes","ctlTextBoxes","ctlTextAreas","ctlNumberBoxes","ctlDateBoxes","ctlCheckBoxes","ctlTagBoxes","ctlRadioGroup","ctlDropDownBoxes","IsContentHidden","subscriptionOnSetDefaults","SetDefaultValues","SetCustomizations","validationError","validationErrors","validationStatus","grids","editableGrids","ctlSliders","ctlButtons","ctlSwitches","fields1","fields2","fields3","fields4","OnSectionToggle","Style","IsHeaderLink","OnHeaderClick","ToggleSection","descendants","host","EscPressed","GetPopupElement","HidePageBreadcrumb","_pageToolbarSettings","ButtonsPosition","_isPageButtonsVisible","PageSidePanelState","IsPageSidePanelVisible","PagePreviewState","PreviewPDFData","PreviewFileName","OnGetPreviewTitle","IsQuickFiltersEmpty","HasContent","pageHeader","IsMobileTitleVisible","QuickFilters","HeaderButtonsBefore","HeaderButtonsAfter","GetPageLoadingClass","GetPopupWidthClass","GetCustomClass","ShowDialogAsBottomSheet","GetPopupSize","GetBottomSheetHeight","ShowDialogAsWindow","GetPopupPosition","GetPreviewSize","direction","IsNoBodyScroll","IsNoToolbar","IsAllowNavbar","SetPageSidePanelState","DialogShown","OnStateChanged"],"sources":["./$_lazy_route_resources|lazy|groupOptions: {}|namespace object","./projects/kraken/pages/transaction-report/transaction-categorization-setup/transaction-categorization-setup.component.html","./projects/kraken/_proxy/enums.ts","./projects/kraken/_proxy/entities/transaction.entity.ts","./projects/kraken/_proxy/endpoints/organization.endpoint.ts","./projects/kraken/_proxy/endpoints/postingtemplate.endpoint.ts","./projects/kraken/_proxy/entities/bookingaccount.entity.ts","./projects/kraken/_proxy/entities/postingtemplate.entity.ts","./projects/kraken/_proxy/endpoints/account.endpoint.ts","./projects/kraken/services/access.service.ts","./projects/kraken/_globals.ts","./projects/kraken/_proxy/endpoints/transaction.endpoint.ts","./projects/kraken/_proxy/endpoints/transactioncategory.endpoint.ts","./projects/kraken/_proxy/entities/company.entity.ts","./projects/kraken/_proxy/entities/transactioncategory.entity.ts","./projects/kraken/_proxy/entities/transactionclassificationrule.entity.ts","./projects/kraken/_proxy/params/setupjournalentrygeneration.param.ts","./projects/kraken/_proxy/params/createandsetupcategory.param.ts","./projects/kraken/_proxy/params/recategorize.param.ts","./projects/kraken/_proxy/params/regenaratejournalentries.param.ts","./projects/kraken/pages/transaction-report/transaction-categorization-setup/transaction-categorization-setup.component.ts","./projects/kraken/_proxy/endpoints/transactionclassificationrule.endpoint.ts","./projects/kraken/_proxy/params/setupcategory.param.ts","./projects/kraken/dialogs/reconciliation-dialog/reconciliation-dialog.component.ts","./projects/kraken/_proxy/endpoints/financialreport.endpoint.ts","./projects/kraken/_proxy/endpoints/businesspartner.endpoint.ts","./projects/kraken/_proxy/entities/baseparamsfilter.entity.ts","./projects/kraken/_proxy/params/businesspartnerlist.param.ts","./projects/kraken/_proxy/endpoints/company.endpoint.ts","./projects/kraken/_proxy/params/financialreport.param.ts","./projects/kraken/_proxy/views/financialreportperiod.view.ts","./projects/kraken/pages/financial-report/financial-report-tree/financial-report-tree.component.ts","./projects/kraken/pages/financial-report/financial-report-tree/financial-report-tree.component.html","./projects/kraken/_proxy/params/companylist.param.ts","./projects/kraken/pages/financial-report/financial-report.component.ts","./projects/kraken/pages/financial-report/financial-report.component.html","./projects/kraken/_proxy/endpoints/payment.endpoint.ts","./projects/kraken/_proxy/entities/replication.entity.ts","./projects/kraken/pages/replication/replication-summary-result-history-grid/replication-summary-result-history-grid.component.ts","./projects/kraken/pages/replication/replication-summary-result-history-grid/replication-summary-result-history-grid.component.html","./projects/kraken/_proxy/entities/organization.entity.ts","./projects/kraken/_proxy/entities/adminaccessrequest.entity.ts","./projects/kraken/pages/organization/list/organization-list.component.ts","./projects/kraken/pages/organization/list/organization-list.component.html","./projects/kraken/_proxy/endpoints/adminaccessrequest.endpoint.ts","./projects/kraken/_proxy/params/adminaccessrequestcancel.param.ts","./projects/kraken/pages/organization/list/organization-grid.component.ts","./projects/kraken/pages/organization/list/organization-grid.component.html","./projects/kraken/_proxy/endpoints/downloadrequest.endpoint.ts","./projects/kraken/_proxy/params/listtransactioncategories.param.ts","./projects/kraken/_proxy/endpoints/bookingaccount.endpoint.ts","./projects/kraken/_proxy/params/postingtemplatelist.param.ts","./projects/kraken/_proxy/params/bookingaccountlist.param.ts","./projects/kraken/dialogs/generate-journal-entry-dialog/generate-journal-entry-dialog.component.ts","./projects/kraken/dialogs/generate-journal-entry-dialog/generate-journal-entry-dialog.component.html","./projects/kraken/_proxy/params/reconcile.param.ts","../Kraken/Angular/ClientApp/_proxy/enums.ts","./projects/kraken/dialogs/reconciliation-dialog/reconciliation-dialog.component.html","./projects/kraken/_proxy/entities/user.entity.ts","./projects/kraken/_proxy/entities/account.entity.ts","./projects/kraken/_proxy/entities/accountgroup.entity.ts","./projects/kraken/_proxy/entities/notificationtemplate.entity.ts","./projects/kraken/_proxy/entities/scenario.entity.ts","./projects/kraken/_proxy/entities/probabilitylevel.entity.ts","./projects/kraken/_proxy/params/organizationwrap.param.ts","./projects/kraken/_proxy/entities/deployment.entity.ts","./projects/kraken/_proxy/entities/download.entity.ts","./projects/kraken/_proxy/entities/bankpass.entity.ts","./projects/kraken/_proxy/views/bankpass.view.ts","./projects/kraken/dialogs/recategorize-dialog/recategorize-dialog.component.ts","./projects/kraken/dialogs/recategorize-dialog/recategorize-dialog.component.html","./projects/kraken/_proxy/endpoints/accountgroup.endpoint.ts","./projects/kraken/_proxy/params/bankpasslist.param.ts","./projects/kraken/_proxy/endpoints/bankpass.endpoint.ts","./projects/kraken/_proxy/endpoints/user.endpoint.ts","./projects/kraken/_proxy/params/updateexternalaccountmapping.param.ts","./projects/kraken/_proxy/params/creationwizardsave.param.ts","./projects/kraken/_proxy/endpoints/deployment.endpoint.ts","./projects/kraken/_proxy/params/accountgrouplist.param.ts","./projects/kraken/_proxy/endpoints/billingcontract.endpoint.ts","./projects/kraken/pages/company-creation-wizard/company-creation-wizard.component.ts","./projects/kraken/components/selectors/base-selector.component.ts","./projects/kraken/pages/company-creation-wizard/company-creation-wizard.component.html","./projects/kraken/_proxy/endpoints/uploadrequest.endpoint.ts","./projects/kraken/_proxy/params/uploadrequest.param.ts","./projects/kraken/dialogs/upload-dialog/upload-dialog.component.ts","./projects/kraken/dialogs/upload-dialog/upload-dialog.component.html","./projects/kraken/_proxy/views/notificationtemplate.view.ts","./projects/kraken/_proxy/endpoints/replicationrequest.endpoint.ts","./projects/kraken/_proxy/entities/billingcontract.entity.ts","./projects/kraken/pages/organization/organization.component.ts","./projects/kraken/pages/organization/organization.component.html","./projects/kraken/pages/company/list/company-list.component.ts","./projects/kraken/pages/company/list/company-list.component.html","./projects/kraken/pages/company/list/company-grid.component.ts","./projects/kraken/pages/company/list/company-grid.component.html","./projects/kraken/_proxy/params/syncstatuslist.param.ts","./projects/kraken/_proxy/endpoints/syncstatusaccount.endpoint.ts","./projects/kraken/components/problem-indicator/problem-indicator.component.ts","./projects/kraken/components/problem-indicator/problem-indicator.component.html","./projects/kraken/_proxy/params/accountlist.param.ts","./projects/kraken/pages/account-group/account-group.component.ts","./projects/kraken/pages/account-group/account-group.component.html","./projects/kraken/pages/account-group/list/account-group-grid.component.ts","./projects/kraken/pages/account-group/list/account-group-grid.component.html","./projects/kraken/pages/account-group/list/account-group-list.component.ts","./projects/kraken/pages/account-group/list/account-group-list.component.html","./projects/kraken/pages/account/account-action-dialog.component.ts","./projects/kraken/pages/account/account-action-dialog.component.html","./projects/kraken/_proxy/params/accountsave.param.ts","./projects/kraken/_proxy/endpoints/creditlimit.endpoint.ts","./projects/kraken/_proxy/params/creditlimits.param.ts","./projects/kraken/services/banks-list.service.ts","./projects/kraken/pages/account/account.component.ts","./projects/kraken/pages/account/account.component.html","./projects/kraken/pages/account/list/account-grid.component.ts","./projects/kraken/pages/account/list/account-grid.component.html","./projects/kraken/pages/account/list/account-list.component.ts","./projects/kraken/pages/account/list/account-list.component.html","./projects/kraken/_proxy/entities/admin.entity.ts","./projects/kraken/_proxy/endpoints/admin.endpoint.ts","./projects/kraken/pages/admin/admin.component.ts","./projects/kraken/pages/admin/admin.component.html","./projects/kraken/pages/admin/list/admin-grid.component.ts","./projects/kraken/pages/admin/list/admin-grid.component.html","./projects/kraken/_proxy/params/forecastmapperlist.param.ts","./projects/kraken/services/organization.service.ts","./projects/kraken/components/filter/filter.component.ts","./projects/kraken/services/company-global.service.ts","./projects/kraken/services/filter.service.ts","./projects/kraken/_client.enums.ts","./projects/kraken/components/filter/filter.component.html","./projects/kraken/components/quick-filter/quick-filter.component.ts","./projects/kraken/components/quick-filter/quick-filter.component.html","./projects/kraken/pages/base-report/base-report.component.ts","./projects/kraken/pages/admin/list/admin-list.component.ts","./projects/kraken/pages/admin/list/admin-list.component.html","./projects/kraken/_proxy/entities/balance.entity.ts","./projects/kraken/pages/notification-template/list/notification-template-list.component.ts","./projects/kraken/pages/balance-report/balance-report-grid.component.ts","./projects/kraken/pages/balance-report/balance-report-grid.component.html","./projects/kraken/_proxy/endpoints/balance.endpoint.ts","./projects/kraken/pages/balance-report/balance-report.component.ts","./projects/kraken/pages/balance-report/balance-report.component.html","./projects/kraken/_proxy/endpoints/consents.endpoint.ts","./projects/kraken/_proxy/endpoints/plaid.endpoint.ts","./projects/kraken/services/plaid-script-loader.service.ts","./projects/kraken/services/plaid.service.ts","./projects/kraken/_proxy/params/savebankpass.param.ts","./projects/kraken/pages/bankpass/bankpass.component.ts","./projects/kraken/pages/bankpass/bankpass.component.html","./projects/kraken/pages/bankpass/list/bankpass-grid.component.ts","./projects/kraken/pages/bankpass/list/bankpass-grid.component.html","./projects/kraken/pages/bankpass/list/bankpass-list.component.ts","./projects/kraken/pages/bankpass/list/bankpass-list.component.html","./projects/kraken/_proxy/views/externalaccountmapping.view.ts","./projects/kraken/pages/account-mapping/account-mapping-list/account-mapping-list.component.ts","./projects/kraken/pages/account-mapping/account-mapping-list/account-mapping-list.component.html","./projects/kraken/pages/account-mapping/account-mapping-grid/account-mapping-grid.component.ts","./projects/kraken/pages/account-mapping/account-mapping-grid/account-mapping-grid.component.html","./projects/kraken/pages/billing-report/billing-report-chart.component.ts","./projects/kraken/pages/billing-report/billing-report-chart.component.html","./projects/kraken/pages/billing-report/billing-report-grid.component.ts","./projects/kraken/pages/billing-report/billing-report-grid.component.html","./projects/kraken/_proxy/endpoints/billingreport.endpoint.ts","./projects/kraken/_proxy/params/billingreport.param.ts","./projects/kraken/pages/billing-report/billing-report.component.ts","./projects/kraken/pages/billing-report/billing-report.component.html","../Kraken/Angular/ClientApp/_proxy/entities/organization.entity.ts","../Kraken/Angular/ClientApp/_proxy/entities/billingcontract.entity.ts","../Kraken/Angular/ClientApp/_proxy/views/billingcontract.view.ts","./projects/kraken/_proxy/endpoints/billingcontractsreport.endpoint.ts","./projects/kraken/pages/billing-contracts-report/billing-contracts-report-summary-grid/billing-contracts-report-grid.component.ts","./projects/kraken/pages/billing-contracts-report/billing-contracts-report-summary-grid/billing-contracts-report-grid.component.html","./projects/kraken/pages/billing-contracts-report/billing-contracts-report-billing-grid/billing-contracts-report-billing-grid.component.ts","./projects/kraken/pages/billing-contracts-report/billing-contracts-report-billing-grid/billing-contracts-report-billing-grid.component.html","./projects/kraken/_proxy/params/billingcontractreport.param.ts","./projects/kraken/pages/billing-contracts-report/billing-contracts-report.component.ts","./projects/kraken/pages/billing-contracts-report/billing-contracts-report.component.html","./projects/kraken/pages/booking-account/booking-account-action-dialog.component.ts","./projects/kraken/pages/booking-account/booking-account-action-dialog.component.html","./projects/kraken/pages/booking-account/list/booking-account-grid.component.ts","./projects/kraken/pages/booking-account/list/booking-account-grid.component.html","./projects/kraken/services/booking-account-template.service.ts","./projects/kraken/pages/booking-account/list/booking-account-list.component.ts","./projects/kraken/pages/booking-account/list/booking-account-list.component.html","./projects/kraken/_proxy/params/initcashflow.param.ts","./projects/kraken/_proxy/entities/forecastmapper.entity.ts","./projects/kraken/_proxy/endpoints/forecastmapper.endpoint.ts","./projects/kraken/pages/forecast-mapper/list/forecast-mapper-list.component.ts","./projects/kraken/pages/forecast-mapper/list/forecast-mapper-list.component.html","./projects/kraken/_proxy/params/companywrap.param.ts","./projects/kraken/pages/company/company.component.ts","./projects/kraken/pages/company/company.component.html","./projects/kraken/pages/dashboard/base-dashboard-chart/base-dashboard-chart.ts","./projects/kraken/pages/dashboard/assets-liabilities-dashboard/assets-liabilities-dashboard-chart.component.ts","./projects/kraken/pages/dashboard/assets-liabilities-dashboard/assets-liabilities-dashboard-chart.component.html","./projects/kraken/pages/dashboard/assets-liabilities-dashboard/assets-liabilities-dashboard-grid.component.ts","./projects/kraken/pages/dashboard/assets-liabilities-dashboard/assets-liabilities-dashboard-grid.component.html","./projects/kraken/pages/dashboard/balance-dashboard/balance-dashboard-chart.component.ts","./projects/kraken/pages/dashboard/balance-dashboard/balance-dashboard-chart.component.html","./projects/kraken/pages/dashboard/balance-dashboard/balance-dashboard-grid.component.ts","./projects/kraken/pages/dashboard/balance-dashboard/balance-dashboard-grid.component.html","./projects/kraken/pages/dashboard/balance-grouping-per-currency-dashboard/balance-grouping-per-currency-dashboard-chart.component.ts","./projects/kraken/pages/dashboard/balance-grouping-per-currency-dashboard/balance-grouping-per-currency-dashboard-chart.component.html","./projects/kraken/pages/dashboard/balance-per-currency-dashboard/balance-per-currency-dashboard-chart.component.ts","./projects/kraken/pages/dashboard/balance-per-currency-dashboard/balance-per-currency-dashboard-chart.component.html","./projects/kraken/pages/dashboard/balance-per-currency-dashboard/balance-per-currency-dashboard-grid.component.ts","./projects/kraken/pages/dashboard/balance-per-currency-dashboard/balance-per-currency-dashboard-grid.component.html","./projects/kraken/_proxy/endpoints/currencyrate.endpoint.ts","./projects/kraken/_proxy/entities/currencyrate.entity.ts","./projects/kraken/pages/dashboard/currency-rate-dashboard/currency-rate-dashboard-chart.component.ts","./projects/kraken/pages/dashboard/currency-rate-dashboard/currency-rate-dashboard-chart.component.html","./projects/kraken/pages/dashboard/dashboard-footer/dashboard-footer.component.ts","./projects/kraken/pages/dashboard/dashboard-footer/dashboard-footer.component.html","./projects/kraken/_proxy/params/balancereport.param.ts","./projects/kraken/_proxy/params/dashboard.param.ts","./projects/kraken/_proxy/views/balance.view.ts","./projects/kraken/_proxy/params/transactionreport.param.ts","./projects/kraken/_proxy/endpoints/loanpayment.endpoint.ts","./projects/kraken/_proxy/endpoints/cashflowreport.endpoint.ts","./projects/kraken/_proxy/params/cashflowreport.param.ts","./projects/kraken/pages/dashboard/base/base-dashboard.component.ts","./projects/kraken/pages/dashboard/download-request-dialog/download-request-dialog.component.ts","./projects/kraken/pages/dashboard/download-request-dialog/download-request-dialog.component.html","./projects/kraken/_proxy/params/setotp.param.ts","./projects/kraken/components/otp-input-dialog/otp-input-dialog.component.ts","./projects/kraken/components/otp-input-dialog/otp-input-dialog.component.html","./projects/kraken/pages/dashboard/dashboard.component.ts","./projects/kraken/pages/dashboard/dashboard.component.html","./projects/kraken/pages/download/download-history-grid.component.ts","./projects/kraken/pages/download/download-history-grid.component.html","./projects/kraken/_proxy/endpoints/cccontract.endpoint.ts","./projects/kraken/_proxy/endpoints/download.endpoint.ts","./projects/kraken/_proxy/params/cccontracts.param.ts","./projects/kraken/_proxy/params/downloadlist.param.ts","./projects/kraken/_proxy/views/download.view.ts","./projects/kraken/pages/download/download-history.component.ts","./projects/kraken/pages/download/download-history.component.html","./projects/kraken/pages/download/download-step-history-grid.component.ts","./projects/kraken/pages/download/download-step-history-grid.component.html","./projects/kraken/pages/download/download-task-history-grid.component.ts","./projects/kraken/pages/download/download-task-history-grid.component.html","./projects/kraken/pages/notification-template/list/notification-template-grid.component.ts","./projects/kraken/pages/notification-template/list/notification-template-grid.component.html","./projects/kraken/_proxy/endpoints/notificationtemplate.endpoint.ts","./projects/kraken/dialogs/share-information-dialog/share-information-dialog.component.ts","./projects/kraken/pages/notification-template/list/notification-template-list.component.html","./projects/kraken/pages/notification-template/notification-template.component.ts","./projects/kraken/pages/notification-template/notification-template.component.html","./projects/kraken/pages/sync-status-chart/sync-status-chart.component.ts","./projects/kraken/pages/sync-status-chart/sync-status-chart.component.html","./projects/kraken/_proxy/endpoints/syncstatus.endpoint.ts","./projects/kraken/pages/sync-status-downloads/sync-status-downloads.component.ts","./projects/kraken/pages/sync-status-downloads/sync-status-downloads.component.html","./projects/kraken/pages/sync-status-uploads/sync-status-uploads.component.ts","./projects/kraken/pages/sync-status-uploads/sync-status-uploads.component.html","./projects/kraken/pages/transaction-report/show-transactions-by-dialog/show-transactions-by-dialog.component.ts","./projects/kraken/pages/transaction-report/show-transactions-by-dialog/show-transactions-by-dialog.component.html","./projects/kraken/pages/transaction-report/transaction-report-grid.component.ts","./projects/kraken/pages/transaction-report/transaction-report-grid.component.html","./projects/kraken/_proxy/endpoints/chequeimage.endpoint.ts","./projects/kraken/pages/transaction-report/transaction-report.component.ts","./projects/kraken/pages/transaction-report/transaction-report.component.html","./projects/kraken/_proxy/entities/baseupload.entity.ts","./projects/kraken/_proxy/entities/upload.entity.ts","./projects/kraken/_proxy/views/upload.view.ts","./projects/kraken/pages/upload/upload-history-grid.component.ts","./projects/kraken/pages/upload/upload-history-grid.component.html","./projects/kraken/_proxy/endpoints/upload.endpoint.ts","./projects/kraken/_proxy/params/uploadlist.param.ts","./projects/kraken/_proxy/endpoints/journalentryupload.endpoint.ts","./projects/kraken/_proxy/params/journalentryuploadlist.param.ts","./projects/kraken/_proxy/params/incomingpaymentuploadlist.param.ts","./projects/kraken/_proxy/endpoints/incomingpaymentupload.endpoint.ts","./projects/kraken/pages/upload/upload-history.component.ts","./projects/kraken/pages/upload/upload-history.component.html","./projects/kraken/pages/user/list/user-grid.component.ts","./projects/kraken/pages/user/list/user-grid.component.html","./projects/kraken/pages/user/list/user-list.component.ts","./projects/kraken/pages/user/list/user-list.component.html","./projects/kraken/_proxy/entities/adminactivityrecord.entity.ts","./projects/kraken/_proxy/endpoints/adminactivityrecord.endpoint.ts","./projects/kraken/_proxy/endpoints/alerttemplate.endpoint.ts","./projects/kraken/dialogs/schedule-dialog/schedule-dialog.component.ts","./projects/kraken/dialogs/schedule-dialog/schedule-dialog.component.html","./projects/kraken/pages/user/user.component.ts","./projects/kraken/pages/user/user.component.html","./projects/kraken/services/injected-components.service.ts","./projects/kraken/_proxy/endpoints/syncstatuscontract.endpoint.ts","./projects/kraken/pages/transaction-category/list/transaction-category-list-page.component.ts","./projects/kraken/pages/transaction-category/list/transaction-category-list-page.component.html","./projects/kraken/pages/transaction-category/list/transaction-category-grid.component.ts","./projects/kraken/pages/transaction-category/list/transaction-category-grid.component.html","./projects/kraken/pages/transaction-category/transaction-category.component.ts","./projects/kraken/pages/transaction-category/transaction-category.component.html","./projects/kraken/pages/transaction-category/list/transaction-category-list.component.ts","./projects/kraken/pages/transaction-category/list/transaction-category-list.component.html","./projects/kraken/pages/transaction-classification-rule/list/classification-rule-list-page.component.ts","./projects/kraken/pages/transaction-classification-rule/list/classification-rule-list-page.component.html","./projects/kraken/_proxy/params/classificationrule.param.ts","./projects/kraken/pages/transaction-classification-rule/list/classification-rule-list.component.ts","./projects/kraken/pages/transaction-classification-rule/list/classification-rule-list.component.html","./projects/kraken/pages/transaction-classification-rule/classification-rule.component.ts","./projects/kraken/pages/transaction-classification-rule/classification-rule.component.html","./projects/kraken/_proxy/params/classificationrulemovepriority.param.ts","./projects/kraken/pages/transaction-classification-rule/list/classification-rule-grid.component.ts","./projects/kraken/pages/transaction-classification-rule/list/classification-rule-grid.component.html","./projects/kraken/pages/posting-template/list/posting-template-list.component.ts","./projects/kraken/pages/posting-template/list/posting-template-list.component.html","./projects/kraken/pages/posting-template/list/posting-template-grid.component.ts","./projects/kraken/pages/posting-template/list/posting-template-grid.component.html","./projects/kraken/pages/posting-template/posting-template.component.ts","./projects/kraken/pages/posting-template/posting-template.component.html","./projects/kraken/_proxy/endpoints/journalentry.endpoint.ts","./projects/kraken/_proxy/entities/journalentry.entity.ts","./projects/kraken/_proxy/views/journalentry.view.ts","./projects/kraken/pages/journal-entry/list/journal-entry-list.component.ts","./projects/kraken/pages/journal-entry/list/journal-entry-list.component.html","./projects/kraken/pages/journal-entry/list/journal-entry-grid.component.ts","./projects/kraken/pages/journal-entry/list/journal-entry-grid.component.html","./projects/kraken/_proxy/params/journalentryreport.param.ts","./projects/kraken/pages/journal-entry/journal-entry.component.ts","./projects/kraken/pages/journal-entry/journal-entry.component.html","./projects/kraken/pages/balance-history-report/balance-history-report.component.ts","./projects/kraken/pages/balance-history-report/balance-history-report.component.html","./projects/kraken/pages/balance-history-report/balance-history-report-grid/balance-history-report-grid.component.ts","./projects/kraken/pages/balance-history-report/balance-history-report-grid/balance-history-report-grid.component.html","./projects/kraken/_proxy/endpoints/cheque.endpoint.ts","./projects/kraken/dialogs/cheque-dialog/list/cheque-list-dialog.component.ts","./projects/kraken/dialogs/cheque-dialog/list/cheque-list-dialog.component.html","./projects/kraken/_proxy/entities/notificationrequest.entity.ts","./projects/kraken/_proxy/endpoints/notificationrequest.endpoint.ts","./projects/kraken/dialogs/share-information-dialog/share-information-dialog.component.html","./projects/kraken/_resources/LISTS_EN.ts","./projects/kraken/_resources/LISTS_HE.ts","./projects/kraken/_resources/LISTS_ES.ts","./projects/kraken/_proxy/endpoints/scenario.endpoint.ts","./projects/kraken/pages/scenario/list/scenario-list.component.ts","./projects/kraken/pages/scenario/list/scenario-list.component.html","./projects/kraken/pages/scenario/grid/scenario-grid.component.ts","./projects/kraken/pages/scenario/grid/scenario-grid.component.html","./projects/kraken/pages/scenario/scenario.component.ts","./projects/kraken/pages/scenario/scenario.component.html","./projects/kraken/_proxy/endpoints/probabilitylevel.endpoint.ts","./projects/kraken/pages/probability-level/probability-level.component.ts","./projects/kraken/pages/probability-level/probability-level.component.html","./projects/kraken/pages/probability-level/grid/probability-level-grid.component.ts","./projects/kraken/pages/probability-level/grid/probability-level-grid.component.html","./projects/kraken/pages/probability-level/list/probability-level-list.component.ts","./projects/kraken/pages/probability-level/list/probability-level-list.component.html","./projects/kraken/pages/forecast-mapper/forecast-mapper.component.ts","./projects/kraken/pages/forecast-mapper/forecast-mapper.component.html","./projects/kraken/pages/forecast-mapper/grid/forecast-mapper-grid.component.ts","./projects/kraken/pages/forecast-mapper/grid/forecast-mapper-grid.component.html","./projects/kraken/_proxy/entities/cheque.entity.ts","./projects/kraken/dialogs/cheque-dialog/list/cheque-grid.component.ts","./projects/kraken/dialogs/cheque-dialog/list/cheque-grid.component.html","./projects/kraken/dialogs/cheque-dialog/list/cheque-mobile-list.component.ts","./projects/kraken/dialogs/cheque-dialog/list/cheque-mobile-list.component.html","./projects/kraken/services/cashflow.service.ts","./projects/kraken/_proxy/endpoints/forecastoperation.endpoint.ts","./projects/kraken/pages/base-cashflow-grid/base-cashflow-grid.component.ts","./projects/kraken/_proxy/views/updateforecastoperations.view.ts","./projects/kraken/_proxy/endpoints/accountingforecast.endpoint.ts","./projects/kraken/_proxy/params/updateaccountingforecast.param.ts","./projects/kraken/_proxy/endpoints/futurechequeimage.endpoint.ts","./projects/kraken/pages/cashflow-report/detailed-view/grid/cashflow-detailed-grid.component.ts","./projects/kraken/pages/cashflow-report/detailed-view/grid/cashflow-detailed-grid.component.html","./projects/kraken/_proxy/params/cashflowsummarized.param.ts","./projects/kraken/_proxy/entities/recurringforecast.entity.ts","./projects/kraken/_proxy/entities/forecastoperation.entity.ts","./projects/kraken/_proxy/views/forecastoperation.view.ts","./projects/kraken/_proxy/params/cashflowfutureforecastoperation.param.ts","./projects/kraken/pages/cashflow-report/cashflow-balances-error-dialog/cashflow-balances-error-dialog.component.ts","./projects/kraken/pages/cashflow-report/cashflow-balances-error-dialog/cashflow-balances-error-dialog.component.html","./projects/kraken/components/selectors/cashflow-category-selector/cashflow-category-selector.component.ts","./projects/kraken/components/selectors/cashflow-category-selector/cashflow-category-selector.component.html","./projects/kraken/components/selectors/cashflow-datasource-selector/cashflow-datasource-selector.component.ts","./projects/kraken/components/selectors/cashflow-datasource-selector/cashflow-datasource-selector.component.html","./projects/kraken/pages/cashflow-report/cashflow-report.component.ts","./projects/kraken/pages/cashflow-report/cashflow-report.component.html","./projects/kraken/pages/assets-liabilities-report/assets-liabilities-report-grid.component.ts","./projects/kraken/pages/assets-liabilities-report/assets-liabilities-report-grid.component.html","./projects/kraken/_proxy/views/assetsliabilitiesreport.view.ts","./projects/kraken/pages/assets-liabilities-report/assets-liabilities-report.component.ts","./projects/kraken/pages/assets-liabilities-report/assets-liabilities-report.component.html","./projects/kraken/pages/cashflow-report/detailed-view/list/cashflow-detailed-list.component.ts","./projects/kraken/pages/cashflow-report/detailed-view/list/cashflow-detailed-list.component.html","./projects/kraken/pages/cashflow-report/detailed-view/cashflow-report-detailed.component.ts","./projects/kraken/pages/cashflow-report/detailed-view/cashflow-report-detailed.component.html","./projects/kraken/pages/cashflow-report/chart-view/cashflow-chart-view.component.ts","./projects/kraken/pages/cashflow-report/chart-view/cashflow-chart-view.component.html","./projects/kraken/_proxy/entities/creditlimit.entity.ts","./projects/kraken/pages/credit-limit/list/credit-limit-list.component.ts","./projects/kraken/pages/credit-limit/list/credit-limit-list.component.html","./projects/kraken/pages/credit-limit/grid/credit-limit-grid.component.ts","./projects/kraken/pages/credit-limit/grid/credit-limit-grid.component.html","./projects/kraken/pages/credit-limit/credit-limit.component.ts","./projects/kraken/pages/credit-limit/credit-limit.component.html","./projects/kraken/_proxy/views/transactioncategory.view.ts","./projects/kraken/_proxy/params/parentcategorylist.param.ts","./projects/kraken/_proxy/endpoints/parentcategory.endpoint.ts","./projects/kraken/pages/forecast-operation/forecast-operation.component.ts","./projects/kraken/pages/forecast-operation/forecast-operation.component.html","./projects/kraken/_proxy/entities/notificationtemplatesection.entity.ts","./projects/kraken/_proxy/views/notificationtemplatesection.view.ts","./projects/kraken/pages/notification-template/notification-template-accordion.component.ts","./projects/kraken/pages/notification-template/notification-template-accordion.component.html","./projects/kraken/pages/notification-template/notification-template-section-filters-grid.component.ts","./projects/kraken/pages/notification-template/notification-template-section-filters-grid.component.html","./projects/kraken/_proxy/endpoints/reconciliation.endpoint.ts","./projects/kraken/_proxy/params/matchforecastoperations.param.ts","./projects/kraken/_proxy/views/transaction.view.ts","./projects/kraken/_proxy/params/forecastoperation.param.ts","./projects/kraken/pages/reconciliation/reconciliation-form/reconciliation-form.component.ts","./projects/kraken/pages/reconciliation/reconciliation-form/reconciliation-form.component.html","./projects/kraken/_proxy/endpoints/downloadfailurereview.endpoint.ts","./projects/kraken/_proxy/params/reconciliation.param.ts","./projects/kraken/components/date-range/date-range.component.ts","./projects/kraken/components/date-range/date-range.component.html","./projects/kraken/pages/reconciliation/reconciliation-view.component.ts","./projects/kraken/pages/reconciliation/reconciliation-view.component.html","./projects/kraken/_proxy/entities/reconciliation.entity.ts","./projects/kraken/pages/reconciliation/reconciliation-grid/reconciliation-grid.component.ts","./projects/kraken/pages/reconciliation/reconciliation-grid/reconciliation-grid.component.html","./projects/kraken/pages/reconciliation/transaction-grid/transaction-grid.component.ts","./projects/kraken/pages/reconciliation/transaction-grid/transaction-grid.component.html","./projects/kraken/pages/reconciliation/forecast-operation-grid/forecast-operation-grid.component.ts","./projects/kraken/pages/reconciliation/forecast-operation-grid/forecast-operation-grid.component.html","./projects/kraken/_proxy/endpoints/recurringforecast.endpoint.ts","./projects/kraken/_proxy/entities/recurringforecastsave.entity.ts","./projects/kraken/pages/recurring-forecast/recurring-forecast.component.ts","./projects/kraken/pages/recurring-forecast/recurring-forecast.component.html","./projects/kraken/_proxy/params/recurringforecast.param.ts","./projects/kraken/_proxy/params/accountingforecast.param.ts","./projects/kraken/pages/recurring-forecast/recurring-forecast-list/recurring-forecast-list.component.ts","./projects/kraken/pages/recurring-forecast/recurring-forecast-list/recurring-forecast-list.component.html","./projects/kraken/pages/recurring-forecast/recurring-forecast-grid/recurring-forecast-grid.component.ts","./projects/kraken/pages/recurring-forecast/recurring-forecast-grid/recurring-forecast-grid.component.html","./projects/kraken/_proxy/params/recurringforecastrecommendation.param.ts","./projects/kraken/pages/recurring-forecast-recommendation/recurring-forecast-recommendation.component.ts","./projects/kraken/pages/recurring-forecast-recommendation/recurring-forecast-recommendation.component.html","./projects/kraken/pages/recurring-forecast-recommendation/grid/recurring-forecast-recommendation-grid.component.ts","./projects/kraken/pages/recurring-forecast-recommendation/grid/recurring-forecast-recommendation-grid.component.html","./projects/kraken/pages/recurring-forecast/import-forecasts/import-forecasts.component.ts","./projects/kraken/pages/recurring-forecast/import-forecasts/import-forecasts.component.html","./projects/kraken/components/currency-icon/currency-icon.component.ts","./projects/kraken/components/currency-icon/currency-icon.component.html","./projects/kraken/pages/dashboard/dashboard-total-cards/dashboard-total-cards.component.ts","./projects/kraken/pages/dashboard/dashboard-total-cards/dashboard-total-cards.component.html","./projects/kraken/pages/balance-report/balance-report-details/balance-report-deposits-details.component.ts","./projects/kraken/pages/balance-report/balance-report-details/balance-report-deposits-details.component.html","./projects/kraken/pages/balance-report/balance-report-details/balance-report-guarantee-details.component.ts","./projects/kraken/pages/balance-report/balance-report-details/balance-report-guarantee-details.component.html","./projects/kraken/pages/balance-report/balance-report-details/balance-report-loans-details.component.ts","./projects/kraken/pages/balance-report/balance-report-details/balance-report-loans-details.component.html","./projects/kraken/pages/balance-report/balance-report-details/balance-report-stocks-details.component.ts","./projects/kraken/pages/balance-report/balance-report-details/balance-report-stocks-details.component.html","./projects/kraken/_proxy/endpoints/replication.endpoint.ts","./projects/kraken/pages/replication/replication-history/replication-history.component.ts","./projects/kraken/pages/replication/replication-history/replication-history.component.html","./projects/kraken/pages/replication/replication-history-grid/replication-history-grid.component.ts","./projects/kraken/pages/replication/replication-history-grid/replication-history-grid.component.html","./projects/kraken/pages/replication/replication-entity-error-history-grid/replication-entity-error-history-grid.component.ts","./projects/kraken/pages/replication/replication-entity-error-history-grid/replication-entity-error-history-grid.component.html","./projects/kraken/pages/sync-status-replication/sync-status-replication.component.ts","./projects/kraken/pages/sync-status-replication/sync-status-replication.component.html","./projects/kraken/pages/balance-details-report/grid/balance-details-report-grid-base.ts","./projects/kraken/_proxy/entities/baseclassificationrule.entity.ts","./projects/kraken/_proxy/entities/stockcategory.entity.ts","./projects/kraken/_proxy/entities/baseclassificationruleline.entity.ts","./projects/kraken/_proxy/entities/stockclassificationrule.entity.ts","./projects/kraken/_proxy/endpoints/stockcategory.endpoint.ts","./projects/kraken/_proxy/params/basecategorylist.param.ts","./projects/kraken/pages/balance-details-report/grid/balance-stocks-report-grid.component.ts","./projects/kraken/pages/balance-details-report/grid/balance-stocks-report-grid.component.html","./projects/kraken/_proxy/endpoints/loan.endpoint.ts","./projects/kraken/_proxy/entities/loancategory.entity.ts","./projects/kraken/_proxy/entities/loanclassificationrule.entity.ts","./projects/kraken/_proxy/endpoints/loancategory.endpoint.ts","./projects/kraken/pages/balance-details-report/grid/balance-loans-report-grid.component.ts","./projects/kraken/pages/balance-details-report/grid/balance-loans-report-grid.component.html","./projects/kraken/_proxy/params/depositcategorylist.param.ts","./projects/kraken/_proxy/endpoints/depositcategory.endpoint.ts","./projects/kraken/_proxy/entities/depositcategory.entity.ts","./projects/kraken/_proxy/entities/depositclassificationrule.entity.ts","./projects/kraken/pages/balance-details-report/grid/balance-deposits-report-grid.component.ts","./projects/kraken/pages/balance-details-report/grid/balance-deposits-report-grid.component.html","./projects/kraken/_proxy/entities/guaranteecategory.entity.ts","./projects/kraken/_proxy/entities/guaranteeclassificationrule.entity.ts","./projects/kraken/_proxy/endpoints/guaranteecategory.endpoint.ts","./projects/kraken/pages/balance-details-report/grid/balance-guarantees-report-grid.component.ts","./projects/kraken/pages/balance-details-report/grid/balance-guarantees-report-grid.component.html","./projects/kraken/_proxy/entities/baseentityreplication.entity.ts","./projects/kraken/_proxy/entities/payment.entity.ts","./projects/kraken/pages/payment/payment.component.ts","./projects/kraken/pages/payment/payment.component.html","./projects/kraken/pages/payment/payment-list/payment-list.component.ts","./projects/kraken/pages/payment/payment-list/payment-list.component.html","./projects/kraken/_proxy/params/paymentlist.param.ts","./projects/kraken/pages/payment/payment-grid/payment-grid.component.ts","./projects/kraken/pages/payment/payment-grid/payment-grid.component.html","./projects/kraken/pages/payment/payment-closed-document-grid/payment-closed-document-grid.component.ts","./projects/kraken/pages/payment/payment-closed-document-grid/payment-closed-document-grid.component.html","./projects/kraken/pages/payment/payment-mean-grid/payment-mean-grid.component.ts","./projects/kraken/pages/payment/payment-mean-grid/payment-mean-grid.component.html","./projects/kraken/pages/transaction-drill-view/transaction-group-view-dialog.component.ts","./projects/kraken/pages/transaction-drill-view/transaction-group-view-dialog.component.html","./projects/kraken/pages/transaction-drill-view/group-grid/transaction-group-grid.component.ts","./projects/kraken/pages/transaction-drill-view/group-grid/transaction-group-grid.component.html","./projects/kraken/pages/transaction-drill-view/group-chart/transaction-group-chart.component.ts","./projects/kraken/pages/transaction-drill-view/group-chart/transaction-group-chart.component.html","./projects/kraken/components/organization-selector/organization-selector.component.ts","./projects/kraken/components/organization-selector/organization-selector.component.html","./projects/kraken/components/flat-mode-button/flat-mode-button.component.ts","./projects/kraken/components/flat-mode-button/flat-mode-button.component.html","./projects/kraken/components/expand-collapse-button/expand-collapse-button.component.ts","./projects/kraken/components/expand-collapse-button/expand-collapse-button.component.html","./projects/kraken/pages/account-rebalance/account-rebalance-view.component.ts","./projects/kraken/pages/account-rebalance/account-rebalance-view.component.html","./projects/kraken/pages/account-rebalance/grid/account-rebalance-grid.component.ts","./projects/kraken/pages/account-rebalance/grid/account-rebalance-grid.component.html","./projects/kraken/_proxy/endpoints/document.endpoint.ts","./projects/kraken/_proxy/entities/document.entity.ts","./projects/kraken/pages/document/document.component.ts","./projects/kraken/pages/document/document.component.html","./projects/kraken/pages/document/document-details/document-details.component.ts","./projects/kraken/pages/document/document-details/document-details.component.html","./projects/kraken/pages/document/document-lines-grid/document-lines-grid.component.ts","./projects/kraken/pages/document/document-lines-grid/document-lines-grid.component.html","./projects/kraken/_proxy/endpoints/accountingjournalentry.endpoint.ts","./projects/kraken/_proxy/entities/accountingjournalentry.entity.ts","./projects/kraken/pages/accounting-journal-entry/accounting-journal-entry.component.ts","./projects/kraken/pages/accounting-journal-entry/accounting-journal-entry.component.html","./projects/kraken/_proxy/params/companymeta.data.ts","./projects/kraken/_proxy/endpoints/companymetadata.endpoint.ts","./projects/kraken/pages/accounting-journal-entry/accounting-journal-entry-details/accounting-journal-entry-details.component.ts","./projects/kraken/pages/accounting-journal-entry/accounting-journal-entry-details/accounting-journal-entry-details.component.html","./projects/kraken/pages/accounting-journal-entry/accounting-journal-entry-lines-grid/accounting-journal-entry-lines-grid.component.ts","./projects/kraken/pages/accounting-journal-entry/accounting-journal-entry-lines-grid/accounting-journal-entry-lines-grid.component.html","./projects/kraken/_proxy/entities/businesspartner.entity.ts","./projects/kraken/_proxy/views/businesspartner.view.ts","./projects/kraken/_proxy/params/documentlist.param.ts","./projects/kraken/_proxy/endpoints/ledger.endpoint.ts","./projects/kraken/_proxy/params/ledgerlist.param.ts","./projects/kraken/pages/business-partner/business-partner.component.ts","./projects/kraken/pages/business-partner/business-partner.component.html","./projects/kraken/_proxy/endpoints/businesspartnergroup.endpoint.ts","./projects/kraken/_proxy/params/businesspartnergrouplist.param.ts","./projects/kraken/_proxy/endpoints/salesperson.endpoint.ts","./projects/kraken/_proxy/params/salespersonlist.param.ts","./projects/kraken/pages/business-partner/business-partner-list/business-partner-list.component.ts","./projects/kraken/pages/business-partner/business-partner-list/business-partner-list.component.html","./projects/kraken/pages/business-partner/business-partner-grid/business-partner-grid.component.ts","./projects/kraken/pages/business-partner/business-partner-grid/business-partner-grid.component.html","./projects/kraken/pages/document/document-grid/document-grid.component.ts","./projects/kraken/pages/document/document-grid/document-grid.component.html","./projects/kraken/_proxy/endpoints/ledgeraccount.endpoint.ts","./projects/kraken/_proxy/entities/ledgeraccount.entity.ts","./projects/kraken/_proxy/views/ledgeraccount.view.ts","./projects/kraken/pages/ledger-account/ledger-account.component.ts","./projects/kraken/pages/ledger-account/ledger-account.component.html","./projects/kraken/pages/ledger/ledger-grid/ledger-grid.component.ts","./projects/kraken/pages/ledger/ledger-grid/ledger-grid.component.html","./projects/kraken/pages/document/document-list/document-list.component.ts","./projects/kraken/pages/document/document-list/document-list.component.html","./projects/kraken/pages/document/document-chart-dialog/document-chart-dialog.component.ts","./projects/kraken/pages/document/document-chart-dialog/document-chart-dialog.component.html","./projects/kraken/pages/payment/payment-chart-dialog/payment-chart-dialog.component.ts","./projects/kraken/pages/payment/payment-chart-dialog/payment-chart-dialog.component.html","./projects/kraken/pages/bankpass/list/bankpass-list-page.component.ts","./projects/kraken/pages/bankpass/list/bankpass-list-page.component.html","./projects/kraken/_proxy/endpoints/interest.endpoint.ts","./projects/kraken/_proxy/endpoints/index.endpoint.ts","./projects/kraken/_proxy/entities/loan.entity.ts","./projects/kraken/_proxy/entities/loanpayment.entity.ts","./projects/kraken/pages/loan/loan.component.ts","./projects/kraken/pages/loan/loan.component.html","./projects/kraken/pages/loan/list/loan-list.component.ts","./projects/kraken/pages/loan/list/loan-list.component.html","./projects/kraken/pages/loan/grid/loan-grid.component.ts","./projects/kraken/pages/loan/grid/loan-grid.component.html","./projects/kraken/pages/loan/loan-payments/grid/loan-payments-grid.component.ts","./projects/kraken/pages/loan/loan-payments/grid/loan-payments-grid.component.html","./projects/kraken/_proxy/entities/index.entity.ts","./projects/kraken/pages/index/list/index-list.component.ts","./projects/kraken/pages/index/list/index-list.component.html","./projects/kraken/pages/index/grid/index-grid.component.ts","./projects/kraken/pages/index/grid/index-grid.component.html","./projects/kraken/pages/index/index.component.ts","./projects/kraken/pages/index/index.component.html","./projects/kraken/_proxy/entities/interest.entity.ts","./projects/kraken/pages/interest/list/interest-list.component.ts","./projects/kraken/pages/interest/list/interest-list.component.html","./projects/kraken/pages/interest/grid/interest-grid.component.ts","./projects/kraken/pages/interest/grid/interest-grid.component.html","./projects/kraken/pages/interest/interest.component.ts","./projects/kraken/pages/interest/interest.component.html","./projects/kraken/_proxy/endpoints/holiday.endpoint.ts","./projects/kraken/_proxy/entities/holiday.entity.ts","./projects/kraken/pages/holiday/holiday.component.ts","./projects/kraken/pages/holiday/holiday.component.html","./projects/kraken/pages/holiday/list/holiday-list.component.ts","./projects/kraken/pages/holiday/list/holiday-list.component.html","./projects/kraken/pages/holiday/grid/holiday-grid.component.ts","./projects/kraken/pages/holiday/grid/holiday-grid.component.html","./projects/kraken/_proxy/params/loantransactionreport.param.ts","./projects/kraken/pages/post-payment/post-payment.component.ts","./projects/kraken/pages/post-payment/post-payment.component.html","./projects/kraken/_proxy/entities/security.entity.ts","./projects/kraken/_proxy/endpoints/security.endpoint.ts","./projects/kraken/pages/security/list/security-list.component.ts","./projects/kraken/pages/security/list/security-list.component.html","./projects/kraken/pages/security/grid/security-grid.component.ts","./projects/kraken/pages/security/grid/security-grid.component.html","./projects/kraken/pages/security/security.component.ts","./projects/kraken/pages/security/security.component.html","./projects/kraken/pages/security-report/security-report.component.ts","./projects/kraken/pages/security-report/security-report.component.html","./projects/kraken/pages/security-report/grid/security-report-grid.component.ts","./projects/kraken/pages/security-report/grid/security-report-grid.component.html","./projects/kraken/_proxy/params/security.param.ts","./projects/kraken/pages/security-report/list/security-report-list.component.ts","./projects/kraken/pages/security-report/list/security-report-list.component.html","./projects/kraken/pages/company-creation-wizard/pages/company-creation-page-company.component.ts","./projects/kraken/pages/company-creation-wizard/pages/company-creation-page-company.component.html","./projects/kraken/pages/company-creation-wizard/pages/company-creation-page-account.component.ts","./projects/kraken/pages/company-creation-wizard/pages/company-creation-page-account.component.html","./projects/kraken/pages/company-creation-wizard/pages/company-creation-page-bookingaccounts.component.ts","./projects/kraken/pages/company-creation-wizard/pages/company-creation-page-bookingaccounts.component.html","./projects/kraken/pages/company-creation-wizard/pages/company-creation-page-finished.component.ts","./projects/kraken/pages/company-creation-wizard/pages/company-creation-page-finished.component.html","./projects/kraken/pages/post-payment/transactions-grid/loan-transactions-grid.component.ts","./projects/kraken/pages/post-payment/transactions-grid/loan-transactions-grid.component.html","./projects/kraken/pages/loan-payments-report/list/loan-payments-report-list.component.ts","./projects/kraken/pages/loan-payments-report/list/loan-payments-report-list.component.html","./projects/kraken/_proxy/views/loan.view.ts","./projects/kraken/_proxy/entities/loanpaymentreportitem.entity.ts","./projects/kraken/pages/loan-payments-report/grid/loan-payments-reprort-grid.component.ts","./projects/kraken/pages/loan-payments-report/grid/loan-payments-report-grid.component.html","./projects/kraken/components/new-bankpass-inline/new-bankpass-inline.component.ts","./projects/kraken/components/new-bankpass-inline/new-bankpass-inline.component.html","./projects/kraken/pages/dashboard/last-transactions/grid/last-transactions-grid.component.ts","./projects/kraken/pages/dashboard/last-transactions/grid/last-transactions-grid.component.html","./projects/kraken/pages/dashboard/grid-chart/grid-chart.component.ts","./projects/kraken/pages/dashboard/grid-chart/grid-chart.component.html","./projects/kraken/pages/dashboard/last-transactions-category-groups/last-transactions-category-groups-grid.component.ts","./projects/kraken/pages/dashboard/last-transactions-category-groups/last-transactions-category-groups-grid.component.html","./projects/kraken/pages/balance-report/balance-report-details/transactions/balance-report-transactions-details.component.ts","./projects/kraken/pages/balance-report/balance-report-details/transactions/balance-report-transactions-details.component.html","./projects/kraken/_proxy/params/uploadsaveandgeneratefile.param.ts","./projects/kraken/pages/credit-cards-report/credit-cards-report.component.ts","./projects/kraken/pages/credit-cards-report/credit-cards-report.component.html","./projects/kraken/pages/credit-cards-report/grid/credit-cards-report-grid.component.ts","./projects/kraken/pages/credit-cards-report/grid/credit-cards-report-grid.component.html","./projects/kraken/pages/transaction-report/transaction-category-selector/transaction-category-selector.component.ts","./projects/kraken/pages/transaction-report/transaction-category-selector/transaction-category-selector.component.html","./projects/kraken/pages/transaction-category/transaction-category-form/transaction-category-form.component.ts","./projects/kraken/pages/transaction-category/transaction-category-form/transaction-category-form.component.html","./projects/kraken/pages/transaction-classification-rule/classification-rule-form/classification-rule-form.component.ts","./projects/kraken/pages/transaction-classification-rule/classification-rule-form/classification-rule-form.component.html","./projects/kraken/pages/posting-template/posting-template-form/posting-template-form.component.ts","./projects/kraken/pages/posting-template/posting-template-form/posting-template-form.component.html","./projects/kraken/components/file-export-transactions/file-export-transactions.component.ts","./projects/kraken/components/file-export-transactions/file-export-transactions.component.html","./projects/kraken/pages/transactions-export/transactions-export.component.ts","./projects/kraken/pages/transactions-export/transactions-export.component.html","./projects/kraken/pages/transactions-export/transactions-export-grid.component.ts","./projects/kraken/pages/transactions-export/transactions-export-grid.component.html","./projects/kraken/components/filter-description/filter-description.component.ts","./projects/kraken/components/filter-description/filter-description.component.html","./projects/kraken/pages/credit-cards-report/transactions/credit-card-transactions-detail.component.ts","./projects/kraken/pages/credit-cards-report/transactions/credit-card-transactions-detail.component.html","./projects/kraken/pages/credit-cards-report/transactions/credit-card-transactions-grid.component.ts","./projects/kraken/pages/credit-cards-report/transactions/credit-card-transactions-grid.component.html","./projects/kraken/pages/deployment/list/deployment-list.component.ts","./projects/kraken/pages/deployment/list/deployment-list.component.html","./projects/kraken/pages/deployment/list/deployment-grid.component.ts","./projects/kraken/pages/deployment/list/deployment-grid.component.html","./projects/kraken/pages/deployment/deployment.component.ts","./projects/kraken/pages/deployment/deployment.component.html","./projects/kraken/pages/billing-contract/list/billing-contract-list.component.ts","./projects/kraken/pages/billing-contract/list/billing-contract-list.component.html","./projects/kraken/pages/billing-contract/list/billing-contract-grid.component.ts","./projects/kraken/pages/billing-contract/list/billing-contract-grid.component.html","./projects/kraken/pages/billing-contract/billing-contract.component.ts","./projects/kraken/pages/billing-contract/billing-contract.component.html","./projects/kraken/pages/ledger/ledger-chart-dialog/ledger-chart-dialog.component.ts","./projects/kraken/pages/ledger/ledger-chart-dialog/ledger-chart-dialog.component.html","./projects/kraken/pages/loan/update-principal-dialog/update-principal-dialog.component.ts","./projects/kraken/pages/loan/update-principal-dialog/update-principal-dialog.component.html","./projects/kraken/_proxy/params/futurechequelist.param.ts","./projects/kraken/_proxy/params/depositedchequelist.param.ts","./projects/kraken/_proxy/params/chequelist.param.ts","./projects/kraken/pages/cheques-report/cheques-report.component.ts","./projects/kraken/pages/cheques-report/cheques-report.component.html","./projects/kraken/pages/cheques-report/cheques-report-grid.component.ts","./projects/kraken/pages/cheques-report/cheques-report-grid.component.html","./projects/kraken/_proxy/entities/cccontract.entity.ts","./projects/kraken/pages/cccontract/list/cccontract-list.component.ts","./projects/kraken/pages/cccontract/list/cccontract-list.component.html","./projects/kraken/pages/cccontract/list/cccontract-grid.component.ts","./projects/kraken/pages/cccontract/list/cccontract-grid.component.html","./projects/kraken/_proxy/params/cccontractssavedetail.param.ts","./projects/kraken/pages/cccontract/cccontract.component.ts","./projects/kraken/pages/cccontract/cccontract.component.html","./projects/kraken/_proxy/entities/ccinvoiceimage.entity.ts","./projects/kraken/_proxy/entities/ccinvoice.entity.ts","./projects/kraken/pages/cc-invoices-processing/cc-invoices-processing-grid.component.ts","./projects/kraken/pages/cc-invoices-processing/cc-invoices-processing-grid.component.html","./projects/kraken/_proxy/endpoints/ccinvoice.endpoint.ts","./projects/kraken/_proxy/views/ccinvoice.view.ts","./projects/kraken/pages/cc-invoices-processing/cc-invoices-processing-list.component.ts","./projects/kraken/pages/cc-invoices-processing/cc-invoices-processing-list.component.html","./projects/kraken/_proxy/endpoints/ccinvoiceimage.endpoint.ts","./projects/kraken/_proxy/params/ccinvoicepostrequest.param.ts","./projects/kraken/pages/cc-invoices-processing/Validator.ts","./projects/kraken/mobile/common/models.ts","./projects/kraken/pages/cc-invoices-processing/cc-invoice.component.ts","./projects/kraken/pages/cc-invoices-processing/cc-invoice.component.html","./projects/kraken/_proxy/entities/cctransfer.entity.ts","./projects/kraken/pages/cc-invoices-processing/cc-invoice-transfers-grid.component.ts","./projects/kraken/pages/cc-invoices-processing/cc-invoice-transfers-grid.component.html","./projects/kraken/pages/cc-invoices-history/cc-invoices-history-list.component.ts","./projects/kraken/pages/cc-invoices-history/cc-invoices-history-list.component.html","./projects/kraken/_proxy/endpoints/cctransfer.endpoint.ts","./projects/kraken/pages/cc-transfers-report/cctransfers-report.component.ts","./projects/kraken/pages/cc-transfers-report/cctransfers-report.component.html","./projects/kraken/pages/cc-transfers-report/grid/cctransfers-report-grid.component.ts","./projects/kraken/pages/cc-transfers-report/grid/cctransfers-report-grid.component.html","./projects/kraken/_proxy/entities/journalentryupload.entity.ts","./projects/kraken/pages/upload/upload-journal-entry-history-grid.component.ts","./projects/kraken/pages/upload/upload-journal-entry-history-grid.component.html","./projects/kraken/_proxy/endpoints/exportnoterule.endpoint.ts","./projects/kraken/_proxy/params/exportnoterulelist.param.ts","./projects/kraken/_proxy/entities/exportnoterule.entity.ts","./projects/kraken/pages/export-note-rule/list/export-note-rule-list.component.ts","./projects/kraken/pages/export-note-rule/list/export-note-rule-list.component.html","./projects/kraken/pages/export-note-rule/export-note-rule.component.ts","./projects/kraken/pages/export-note-rule/export-note-rule.component.html","./projects/kraken/pages/export-note-rule/list/export-note-rule-grid.component.ts","./projects/kraken/pages/export-note-rule/list/export-note-rule-grid.component.html","./projects/kraken/pages/journal-entry/journal-entry-form/journal-entry-form.component.ts","./projects/kraken/pages/journal-entry/journal-entry-form/journal-entry-form.component.html","./projects/kraken/_proxy/endpoints/fileimporttemplate.endpoint.ts","./projects/kraken/_proxy/entities/fileimporttemplate.entity.ts","./projects/kraken/pages/file-import-template/list/file-import-template-list.component.ts","./projects/kraken/pages/file-import-template/list/file-import-template-list.component.html","./projects/kraken/pages/file-import-template/list/file-import-template-grid.component.ts","./projects/kraken/pages/file-import-template/list/file-import-template-grid.component.html","./projects/kraken/pages/file-import-template/list/file-import-template-list-page.component.ts","./projects/kraken/pages/file-import-template/list/file-import-template-list-page.component.html","./projects/kraken/pages/file-import-template/file-import-template.component.ts","./projects/kraken/pages/file-import-template/file-import-template.component.html","./projects/kraken/_proxy/params/syncstatuscontractlist.param.ts","./projects/kraken/_proxy/views/downloadfailurere.view.ts","./projects/kraken/pages/sync-status/sync-status-base-grid/sync-status-grid.component.ts","./projects/kraken/pages/sync-status/sync-status-account-grid/sync-status-grid.component.ts","./projects/kraken/pages/sync-status/sync-status-account-grid/sync-status-grid.component.html","./projects/kraken/pages/sync-status/sync-status-contract-grid/sync-status-grid.component.ts","./projects/kraken/pages/sync-status/sync-status-contract-grid/sync-status-grid.component.html","./projects/kraken/pages/sync-status/sync-status.component.ts","./projects/kraken/pages/sync-status/sync-status.component.html","./projects/kraken/pages/sync-status/download-failure-review-dialog/download-failure-review-dialog.component.ts","./projects/kraken/pages/sync-status/download-failure-review-dialog/download-failure-review-dialog.component.html","./projects/kraken/pages/index/dialog/index-dialog.component.ts","./projects/kraken/pages/index/dialog/index-dialog.component.html","./projects/kraken/pages/balance-details-report/loans-payments-schedule/loans-payments-schedule.component.ts","./projects/kraken/pages/balance-details-report/loans-payments-schedule/loans-payments-schedule.component.html","./projects/kraken/pages/balance-details-report/loans-payments-schedule/loan-payments-schedule-grid/loan-payments-schedule-grid.component.ts","./projects/kraken/pages/balance-details-report/loans-payments-schedule/loan-payments-schedule-grid/loan-payments-schedule-grid.component.html","./projects/kraken/pages/balance-details-report/balance-details-report.component.ts","./projects/kraken/pages/balance-details-report/balance-details-report.component.html","./projects/kraken/pages/recurring-forecast/forecast-operations-grid/forecast-operations-grid.component.ts","./projects/kraken/pages/recurring-forecast/forecast-operations-grid/forecast-operations-grid.component.html","./projects/kraken/_proxy/endpoints/accountingforecastcategory.endpoint.ts","./projects/kraken/_proxy/params/accountingforecastcategory.param.ts","./projects/kraken/pages/recurring-forecast/account-forecasts-grid/account-forecasts-grid.component.ts","./projects/kraken/pages/recurring-forecast/account-forecasts-grid/account-forecasts-grid.component.html","./projects/kraken/pages/recurring-forecast/recurring-forecast-grid/detail-forecast-operations.ts","./projects/kraken/pages/cashflow-report/chart-view/spline-chart.html","./projects/kraken/pages/cashflow-report/chart-view/base-cashflow-chart.ts","./projects/kraken/pages/cashflow-report/chart-view/income-expences/income-expences-chart.component.ts","./projects/kraken/pages/cashflow-report/chart-view/tooltip.ts","./projects/kraken/pages/cashflow-report/chart-view/balance-growth/balance-growth-chart.component.ts","./projects/kraken/pages/cashflow-report/chart-view/forecast-operations/forecast-operations-chart.component.ts","./projects/kraken/pages/cashflow-report/chart-view/forecast-operations/forecast-operations-chart.component.html","./projects/kraken/pages/cashflow-report/m4u-switch.ts","./projects/kraken/_proxy/entities/cashflowreportsummarizedgroup.entity.ts","./projects/kraken/pages/cashflow-report/pivot-view/cashflow-pivot-grid.component.ts","./projects/kraken/pages/cashflow-report/pivot-view/cashflow-pivot-grid.component.html","./projects/kraken/pages/cashflow-report/summarized-view/cashflow-summarized-grid.component.ts","./projects/kraken/pages/cashflow-report/summarized-view/cashflow-summarized-grid.component.html","./projects/kraken/pages/cashflow-report/category-view/cashflow-category-grid.component.ts","./projects/kraken/pages/cashflow-report/category-view/cashflow-category-grid.component.html","./projects/kraken/pages/cashflow-report/category-view-new/cashflow-category-grid-new.component.ts","./projects/kraken/pages/cashflow-report/category-view-new/cashflow-category-grid-new.component.html","./projects/kraken/pages/loan-revaluation-report/loan-revaluation-report.component.ts","./projects/kraken/pages/loan-revaluation-report/loan-revaluation-report.component.html","./projects/kraken/pages/loan-revaluation-report/grid/loan-revaluation-report-grid.component.ts","./projects/kraken/pages/loan-revaluation-report/grid/loan-revaluation-report-grid.component.html","./projects/kraken/pages/external-link/external-link.component.ts","./projects/kraken/pages/external-link/external-link.component.html","./projects/kraken/_proxy/endpoints/importtransactions.endpoint.ts","./projects/kraken/_proxy/params/importfiles.param.ts","./projects/kraken/_proxy/params/importtransactions.param.ts","./projects/kraken/pages/transactions-import/transactions-import.component.ts","./projects/kraken/pages/transactions-import/transactions-import.component.html","./projects/kraken/_proxy/params/adminactivityrecord.param.ts","./projects/kraken/pages/admin-actions/admin-actions.component.ts","./projects/kraken/pages/admin-actions/admin-actions.component.html","./projects/kraken/pages/admin-actions/grid/admin-actions-grid.component.ts","./projects/kraken/pages/admin-actions/grid/admin-actions-grid.component.html","./projects/kraken/pages/admin-access-request/admin-access-request.component.ts","./projects/kraken/pages/admin-access-request/admin-access-request.component.html","./projects/kraken/_proxy/params/adminaccessrequestreview.param.ts","./projects/kraken/_proxy/params/adminaccessrequest.param.ts","./projects/kraken/_proxy/params/adminaccessrequestbulkapprove.param.ts","./projects/kraken/pages/admin-access-request/list/admin-access-request-list.component.ts","./projects/kraken/pages/admin-access-request/list/admin-access-request-list.component.html","./projects/kraken/pages/admin-access-request/list/admin-access-request-grid.component.ts","./projects/kraken/pages/admin-access-request/list/admin-access-request-grid.component.html","./projects/kraken/_proxy/entities/importfilebookingaccounttransactions.entity.ts","./projects/kraken/pages/transactions-import/list/transactions-import-grid.component.ts","./projects/kraken/pages/transactions-import/list/transactions-import-grid.component.html","./projects/kraken/_proxy/entities/importfileerrors.entity.ts","./projects/kraken/pages/transactions-import/list/transactions-import-errors-grid.component.ts","./projects/kraken/pages/transactions-import/list/transactions-import-errors-grid.component.html","./projects/kraken/_proxy/params/ledgeraccountlist.param.ts","./projects/kraken/components/booking-account-code-box/booking-account-code-box.component.ts","./projects/kraken/components/booking-account-code-box/booking-account-code-box.component.html","./projects/kraken/pages/balance-history-report/balance-history-date-range/balance-history-date-range.component.ts","./projects/kraken/pages/balance-history-report/balance-history-date-range/balance-history-date-range.component.html","./projects/kraken/components/selectors/booking-account-selector/booking-account-selector.component.ts","./projects/kraken/components/selectors/booking-account-selector/booking-account-selector.component.html","./projects/kraken/components/selectors/filter-item-selector/filter-item-selector.component.ts","./projects/kraken/components/selectors/filter-item-selector/filter-item-selector.component.html","./projects/kraken/components/selectors/bank-selector/bank-selector.component.ts","./projects/kraken/components/selectors/bank-selector/bank-selector.component.html","./projects/kraken/components/selectors/booking-account-subtype-selector/booking-account-subtype-selector.component.ts","./projects/kraken/components/selectors/booking-account-subtype-selector/booking-account-subtype-selector.component.html","./projects/kraken/components/selectors/currency-selector/currency-selector.component.ts","./projects/kraken/components/selectors/currency-selector/currency-selector.component.html","./projects/kraken/components/selectors/account-group-selector/account-group-selector.component.ts","./projects/kraken/components/selectors/account-group-selector/account-group-selector.component.html","./projects/kraken/components/selectors/category-selector/category-selector.component.ts","./projects/kraken/components/selectors/category-selector/category-selector.component.html","./projects/kraken/components/selectors/forecast-mapper-selector/forecast-mapper-selector.component.ts","./projects/kraken/components/selectors/forecast-mapper-selector/forecast-mapper-selector.component.html","./projects/kraken/components/selectors/scenario-selector/scenario-selector.component.ts","./projects/kraken/components/selectors/scenario-selector/scenario-selector.component.html","./projects/kraken/components/selectors/probability-level-selector/probability-level-selector.component.ts","./projects/kraken/components/selectors/probability-level-selector/probability-level-selector.component.html","./projects/kraken/components/selectors/side-selector/side-selector.component.ts","./projects/kraken/components/selectors/side-selector/side-selector.component.html","./projects/kraken/components/selectors/business-partner-selector/business-partner-selector.component.ts","./projects/kraken/components/selectors/business-partner-selector/business-partner-selector.component.html","./projects/kraken/components/selectors/company-global-selector/company-global-selector.component.ts","./projects/kraken/components/selectors/company-global-selector/company-global-selector.component.html","./projects/kraken/directives/DateGroupColumns.directive.ts","./projects/kraken/pages/interest/dialog/interest-dialog.component.ts","./projects/kraken/pages/interest/dialog/interest-dialog.component.html","./projects/kraken/services/notification-configuration.service.ts","./projects/kraken/_proxy/endpoints/contactussubject.endpoint.ts","./projects/kraken/_proxy/endpoints/contactus.endpoint.ts","./projects/kraken/_proxy/params/contactus.param.ts","./projects/kraken/dialogs/contact-us-dialog/contact-us-dialog.component.ts","./projects/kraken/dialogs/contact-us-dialog/contact-us-dialog.component.html","./src/base/component/BaseInjectableComponent.ts","./projects/kraken/components/contact-us-injectable/contact-us-injectable.component.ts","./projects/kraken/components/contact-us-injectable/contact-us-injectable.component.html","./projects/kraken/_proxy/endpoints/downloadretry.endpoint.ts","./projects/kraken/pages/global-download-retry/global-download-retry.component.ts","./projects/kraken/pages/global-download-retry/global-download-retry.component.html","./projects/kraken/pages/global-download-retry/global-download-dialog.component.ts","./projects/kraken/pages/global-download-retry/global-download-dialog.component.html","./projects/kraken/_proxy/endpoints/externalapikey.endpoint.ts","./projects/kraken/_proxy/entities/externalapikey.entity.ts","./projects/kraken/pages/external-api-key/list/external-api-key-list.component.ts","./projects/kraken/pages/external-api-key/list/external-api-key-list.component.html","./projects/kraken/pages/external-api-key/list/external-api-key-grid.component.ts","./projects/kraken/pages/external-api-key/list/external-api-key-grid.component.html","./projects/kraken/pages/external-api-key/external-api-key.component.ts","./projects/kraken/pages/external-api-key/external-api-key.component.html","./projects/kraken/_proxy/entities/alerttemplate.entity.ts","./projects/kraken/pages/alert-template/alert-template.component.ts","./projects/kraken/pages/alert-template/alert-template.component.html","./projects/kraken/pages/alert-template/list/alert-template-list.component.ts","./projects/kraken/pages/alert-template/list/alert-template-list.component.html","./projects/kraken/pages/alert-template/list/alert-template-grid.component.ts","./projects/kraken/pages/alert-template/list/alert-template-grid.component.html","./projects/kraken/_proxy/entities/parentcategory.entity.ts","./projects/kraken/pages/parent-category/parent-category.component.ts","./projects/kraken/pages/parent-category/parent-category.component.html","./projects/kraken/pages/parent-category/list/parent-category-list-page.component.ts","./projects/kraken/pages/parent-category/list/parent-category-list-page.component.html","./projects/kraken/pages/parent-category/list/parent-category-list.component.ts","./projects/kraken/pages/parent-category/list/parent-category-list.component.html","./projects/kraken/_proxy/params/parentcategoryreordering.param.ts","./projects/kraken/pages/parent-category/list/parent-category-grid.component.ts","./projects/kraken/pages/parent-category/list/parent-category-grid.component.html","./projects/kraken/_proxy/entities/accountingforecastcategory.entity.ts","./projects/kraken/pages/account-forecast-category/account-forecast-category-grid.component.ts","./projects/kraken/pages/account-forecast-category/account-forecast-category-grid.component.html","./projects/kraken/pages/account-forecast-category/account-forecast-category-list.component.ts","./projects/kraken/pages/account-forecast-category/account-forecast-category-list.component.html","./projects/kraken/_proxy/endpoints/incomingpaymentprocessing.endpoint.ts","./projects/kraken/_proxy/entities/incomingpayment.entity.ts","./projects/kraken/_proxy/views/incomingpayment.view.ts","./projects/kraken/_proxy/params/incomingpaymentprocessingsave.param.ts","./projects/kraken/services/incoming-payment-processing.service.ts","./projects/kraken/pages/incoming-payment-processing/mark-as-irrelevant-dialog/mark-as-irrelevant-dialog.component.ts","./projects/kraken/pages/incoming-payment-processing/mark-as-irrelevant-dialog/mark-as-irrelevant-dialog.component.html","./projects/kraken/_proxy/entities/incomingpaymenttransactionirrelevantrule.entity.ts","./projects/kraken/pages/incoming-payment-processing/incoming-payment-processing.component.ts","./projects/kraken/pages/incoming-payment-processing/incoming-payment-processing.component.html","./projects/kraken/_proxy/params/processtransactionsincomingpayments.param.ts","./projects/kraken/pages/incoming-payment-processing/incoming-payment-processing-list/incoming-payment-processing-list.component.ts","./projects/kraken/pages/incoming-payment-processing/incoming-payment-processing-list/incoming-payment-processing-list.component.html","./projects/kraken/_proxy/views/transactionpaymentprocessing.view.ts","./projects/kraken/pages/incoming-payment-processing/incoming-payment-processing-grid/incoming-payment-processing-grid.component.ts","./projects/kraken/pages/incoming-payment-processing/incoming-payment-processing-grid/incoming-payment-processing-grid.component.html","./projects/kraken/_proxy/views/documentpaymentprocessing.view.ts","./projects/kraken/pages/incoming-payment-processing/incoming-payment-documents-grid/incoming-payment-documents-grid.component.ts","./projects/kraken/pages/incoming-payment-processing/incoming-payment-documents-grid/incoming-payment-documents-grid.component.html","./projects/kraken/_proxy/entities/incomingpaymentupload.entity.ts","./projects/kraken/_proxy/views/incomingpaymentupload.view.ts","./projects/kraken/pages/upload/upload-incoming-payment-history-grid/upload-incoming-payment-history-grid.component.ts","./projects/kraken/pages/upload/upload-incoming-payment-history-grid/upload-incoming-payment-history-grid.component.html","./projects/kraken/_proxy/params/balancemanualeditsave.param.ts","./projects/kraken/pages/manual-balances-entry/reset-balances-dialog/reset-balances-dialog.component.ts","./projects/kraken/pages/manual-balances-entry/reset-balances-dialog/reset-balances-dialog.component.html","./projects/kraken/_proxy/params/resetmanualbalanceentry.param.ts","./projects/kraken/pages/manual-balances-entry/manual-balances-entry.component.ts","./projects/kraken/pages/manual-balances-entry/manual-balances-entry.component.html","./projects/kraken/_proxy/views/balancemanualedit.view.ts","./projects/kraken/pages/manual-balances-entry/manual-balances-entry-grid/manual-balances-entry-grid.component.ts","./projects/kraken/pages/manual-balances-entry/manual-balances-entry-grid/manual-balances-entry-grid.component.html","./projects/kraken/pages/categories/list/base-category-grid.component.ts","./projects/kraken/pages/categories/list/base-category-grid.component.html","./projects/kraken/pages/categories/deposit-category.component.ts","./projects/kraken/pages/categories/deposit-category.component.html","./projects/kraken/pages/categories/list/deposit-category-list.component.ts","./projects/kraken/pages/categories/list/deposit-category-list.component.html","./projects/kraken/_proxy/endpoints/depositclassificationrule.endpoint.ts","./projects/kraken/pages/category-classification-rules/list/base-classification-rule-grid.component.ts","./projects/kraken/pages/category-classification-rules/list/base-classification-rule-grid.component.html","./projects/kraken/_proxy/params/baseclassificationrulelist.param.ts","./projects/kraken/pages/category-classification-rules/list/deposit-classification-rule-list.component.ts","./projects/kraken/pages/category-classification-rules/list/deposit-classification-rule-list.component.html","./projects/kraken/pages/category-classification-rules/deposit-category-classification-rule.component.ts","./projects/kraken/pages/category-classification-rules/deposit-category-classification-rule.component.html","./projects/kraken/pages/categories/list/stock-category-list.component.ts","./projects/kraken/pages/categories/list/stock-category-list.component.html","./projects/kraken/pages/categories/stock-category.component.ts","./projects/kraken/pages/categories/stock-category.component.html","./projects/kraken/pages/categories/list/loan-category-list.component.ts","./projects/kraken/pages/categories/list/loan-category-list.component.html","./projects/kraken/pages/categories/loan-category.component.ts","./projects/kraken/pages/categories/loan-category.component.html","./projects/kraken/pages/categories/list/guarantee-category-list.component.ts","./projects/kraken/pages/categories/list/guarantee-category-list.component.html","./projects/kraken/pages/categories/guarantee-category.component.ts","./projects/kraken/pages/categories/guarantee-category.component.html","./projects/kraken/_proxy/endpoints/stockclassificationrule.endpoint.ts","./projects/kraken/pages/category-classification-rules/list/stock-classification-rule-list.component.ts","./projects/kraken/pages/category-classification-rules/list/stock-classification-rule-list.component.html","./projects/kraken/_proxy/endpoints/loanclassificationrule.endpoint.ts","./projects/kraken/pages/category-classification-rules/list/loan-classification-rule-list.component.ts","./projects/kraken/pages/category-classification-rules/list/loan-classification-rule-list.component.html","./projects/kraken/_proxy/endpoints/guaranteeclassificationrule.endpoint.ts","./projects/kraken/pages/category-classification-rules/list/guarantee-classification-rule-list.component.ts","./projects/kraken/pages/category-classification-rules/list/guarantee-classification-rule-list.component.html","./projects/kraken/pages/category-classification-rules/loan-category-classification-rule.component.ts","./projects/kraken/pages/category-classification-rules/loan-category-classification-rule.component.html","./projects/kraken/pages/category-classification-rules/stock-category-classification-rule.component.ts","./projects/kraken/pages/category-classification-rules/stock-category-classification-rule.component.html","./projects/kraken/pages/category-classification-rules/guarantee-category-classification-rule.component.ts","./projects/kraken/pages/category-classification-rules/guarantee-category-classification-rule.component.html","./projects/kraken/pages/categories/balance-category-selector/balance-category-selector.component.ts","./projects/kraken/pages/categories/balance-category-selector/balance-category-selector.component.html","./projects/kraken/_proxy/params/exchangeaccesscode.param.ts","./projects/kraken/pages/callback/callback.component.ts","./projects/kraken/pages/callback/callback.component.html","./projects/kraken/mobile/common/mobile-content-header/mobile-content-header.component.ts","./projects/kraken/mobile/common/mobile-content-header/mobile-content-header.component.html","./projects/kraken/mobile/common/mobile-total-balance/mobile-total-balance.component.ts","./projects/kraken/mobile/common/mobile-total-balance/mobile-total-balance.component.html","./projects/kraken/mobile/common/mobile-item-details/mobile-item-details.component.ts","./projects/kraken/mobile/common/mobile-item-details/mobile-item-details.component.html","./projects/kraken/mobile/pages/mobile-cc-report/mobile-cc-report.component.ts","./projects/kraken/mobile/common/report-nested-list/report-nested-list.component.ts","./projects/kraken/mobile/common/report-nested-list/report-nested-list.component.html","./projects/kraken/mobile/common/base-report/base-mobile-report.ts","./projects/kraken/mobile/services/base-report.service.ts","./projects/kraken/mobile/pages/mobile-balance-report/mobile-balance-report.component.ts","./projects/kraken/mobile/pages/mobile-balance-report/mobile-balance-report.component.html","./projects/kraken/mobile/pages/mobile-balance-details-report/mobile-balance-details-report.component.ts","./projects/kraken/mobile/pages/mobile-balance-details-report/mobile-balance-details-report.component.html","./projects/kraken/mobile/common/mobile-date-picker/mobile-date-picker.component.ts","./projects/kraken/mobile/common/mobile-date-picker/mobile-date-picker.component.html","./projects/kraken/mobile/common/mobile-date-range-picker/mobile-date-range-picker.component.ts","./projects/kraken/mobile/common/mobile-date-range-picker/mobile-date-range-picker.component.html","./projects/kraken/mobile/pages/mobile-transactions-report/mobile-transactions-report.component.ts","./projects/kraken/mobile/pages/mobile-transactions-report/mobile-transactions-report.component.html","./projects/kraken/mobile/pages/mobile-cheques-report/mobile-cheques-report.component.ts","./projects/kraken/mobile/pages/mobile-cheques-report/mobile-cheques-report.component.html","./projects/kraken/mobile/common/mobile-cheque-dialog/mobile-cheque-dialog.component.ts","./projects/kraken/mobile/common/mobile-cheque-dialog/mobile-cheque-dialog.component.html","./projects/kraken/mobile/pages/mobile-cc-report/mobile-cc-report.component.html","./projects/kraken/mobile/common/mobile-carousel/mobile-carousel.component.ts","./projects/kraken/mobile/common/mobile-carousel/mobile-carousel.component.html","./projects/kraken/mobile/common/mobile-history-chart/mobile-history-chart.component.ts","./projects/kraken/mobile/common/mobile-history-chart/mobile-history-chart.component.html","./projects/kraken/mobile/pages/mobile-dashboard/mobile-dashboard.component.ts","./projects/kraken/mobile/pages/mobile-dashboard/mobile-dashboard.component.html","./projects/kraken/mobile/pages/mobile-sync-status/mobile-sync-status.component.ts","./projects/kraken/mobile/pages/mobile-sync-status/mobile-sync-status.component.html","./projects/kraken/mobile/common/mobile-sync-error/mobile-sync-error.component.ts","./projects/kraken/mobile/common/mobile-sync-error/mobile-sync-error.component.html","./projects/kraken/components/organization-selector/organization-selector-bottom-sheet/organization-selector-bottom-sheet.component.ts","./projects/kraken/components/organization-selector/organization-selector-bottom-sheet/organization-selector-bottom-sheet.component.html","./projects/kraken/_app.config.ts","./src/base/classes/BaseClasses.ts","./src/base/component/BaseComponent.ts","./src/base/component/BaseGridComponent.ts","./src/base/component/BasePageCRUDComponent.ts","./src/base/component/BasePageComponent.ts","./src/base/component/ServiceBag.ts","./src/base/datalayer/BaseDataSourceAbstract.ts","./src/base/datalayer/BaseDataStoreCRUD.ts","./src/base/datalayer/BaseDataSources.ts","./src/base/datalayer/BaseDataStoreAbstract.ts","./src/base/datalayer/BaseDataStoreCRUDServer.ts","./src/base/datalayer/BaseDataStoreReadOnly.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/genericlist.endpoint.ts","./src/core/endpoints/login.endpoint.ts","./src/core/endpoints/push-message.endpoint.ts","./src/core/endpoints/share.endpoint.ts","./src/core/endpoints/system-options.endpoint.ts","./src/core/endpoints/system.endpoint.ts","./src/core/framework/bottom-sheet.service.ts","./src/core/framework/client-fingerprint.service.ts","./src/core/framework/confirm-cancel.guard.ts","./src/core/framework/customization-service.ts","./src/core/framework/devexpress.service.ts","./src/base/grid/Grid.defaults.ts","./src/base/pivotgrid/PivotGrid.defaults.ts","./src/core/framework/entity.service.ts","./src/common/Cities.ts","./src/_resources/DEVX.he.ts","./src/_resources/DEVX.es.ts","./src/core/framework/framework.service.ts","./src/core/framework/injected-components-base.service.ts","./src/core/framework/local-storage.service.ts","./src/core/framework/login.guard.ts","./src/core/framework/login.service.ts","./src/core/framework/navigator.service.ts","./src/core/framework/notification-configuration-base.service.ts","./src/core/framework/notification.service.ts","./src/_resources/EN.ts","./src/_resources/HE.ts","./src/_resources/ES.ts","./src/core/framework/resources.service.ts","./src/core/framework/route-history.service.ts","./src/core/framework/screen.service.ts","./src/core/framework/session.service.ts","./src/core/framework/share.service.ts","./src/core/framework/sidebar.service.ts","./src/core/framework/sysenums.enum.ts","./src/core/framework/sysevents.service.ts","./src/core/framework/sysglobals.ts","./src/core/framework/system-options.service.ts","./src/core/framework/ui.service.ts","./src/core/gateway/APIGateway.service.ts","./src/core/helpers/DateExtensions.ts","./src/core/helpers/DateHelpers.ts","./src/core/helpers/GridHelper.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/dialogs/messagebox-dialog/messageboxdialog.component.ts","./src/ui/dialogs/messagebox-dialog/messageboxdialog.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/layouts/componentlayouts/page-buttons/pagebuttons.component.ts","./src/ui/layouts/componentlayouts/page-buttons/pagebuttons.component.html","./src/ui/dialogs/filebox-dialog/fileboxdialog.component.ts","./src/ui/dialogs/filebox-dialog/fileboxdialog.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/signbox/signbox.component.ts","./src/ui/dialogs/signbox-dialog/signbox/signbox.component.html","./src/ui/dialogs/signbox-dialog/signboxdialog.component.ts","./src/ui/dialogs/signbox-dialog/signboxdialog.component.html","./src/ui/dialogs/barcodebox-dialog/barcodeboxdialog.component.ts","./src/ui/dialogs/barcodebox-dialog/barcodeboxdialog.component.html","./src/ui/directives/CustomBuild.ts","./src/ui/components/status-column/status-column.component.ts","./src/ui/components/status-column/status-column.component.html","./src/core/framework/context-menu.service.ts","./src/ui/directives/Directives.ts","./src/ui/directives/FormatSearch.directive.ts","./src/ui/directives/CustomServerSideFilter.directive.ts","./src/ui/directives/Link.directive.ts","./src/ui/directives/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/components/general/menu-button-list/menu-button-list.component.ts","./src/ui/components/general/menu-button-list/menu-button-list.component.html","./src/ui/layouts/layout/progress-panel/progresspanel.component.ts","./src/ui/layouts/layout/progress-panel/progresspanel.component.html","./src/ui/notifications/push-message-list/push-message-list.component.ts","./src/ui/notifications/push-message-list/push-message-list.component.html","./src/ui/layouts/layout/toolbar/toolbar.component.ts","./src/ui/layouts/layout/toolbar/toolbar.component.html","./src/ui/components/login/coming-soon/comingsoon.component.ts","./src/ui/components/login/coming-soon/comingsoon.component.html","./src/ui/components/login/login/login.component.ts","./src/ui/components/login/login/login.component.html","./src/ui/components/login/login-oauth/login-oauth.component.ts","./src/ui/components/login/login-oauth/login-oauth.component.html","./src/ui/components/login/logout/logout.component.ts","./src/ui/components/login/logout/logout.component.html","./src/ui/components/login/session-expire/sessionexpire.component.ts","./src/ui/components/login/session-expire/sessionexpire.component.html","./src/core/endpoints/credential-activity.endpoint.ts","./src/ui/components/general/credential-activity-status/credentials-activity-status.component.ts","./src/ui/components/general/credential-activity-status/credentials-activity-status.component.html","./src/core/endpoints/notification.endpoint.ts","./src/ui/notifications/notifications-history/notification-grid/notificationgrid.component.ts","./src/ui/notifications/notifications-history/notification-grid/notificationgrid.component.html","./src/ui/notifications/notifications-history/notificationshistory.component.ts","./src/ui/notifications/notifications-history/notificationshistory.component.html","./src/ui/notifications/notifications-history/notification-view/notificationview.component.ts","./src/ui/notifications/notifications-history/notification-view/notificationview.component.html","./src/ui/components/general/history-view/historyview.component.ts","./src/ui/components/general/history-view/historyview.component.html","./src/_modules/devexpress.module.ts","./src/ui/components/password/password-change/passwordchange.component.ts","./src/ui/components/password/password-change/passwordchange.component.html","./src/ui/components/password/password-change-expired/passwordchangeexpired.component.ts","./src/ui/components/password/password-change-expired/passwordchangeexpired.component.html","./src/ui/components/password/password-recovery/passwordrecovery.component.ts","./src/ui/components/password/password-recovery/passwordrecovery.component.html","./src/ui/components/password/password-welcome/passwordwelcome.component.ts","./src/ui/components/password/password-welcome/passwordwelcome.component.html","./src/ui/components/password/password-manage/passwordmanage.component.ts","./src/ui/components/password/password-manage/passwordmanage.component.html","./src/ui/layouts/componentlayouts/captcha/captcha.component.ts","./src/ui/layouts/componentlayouts/captcha/captcha.component.html","./src/ui/layouts/componentlayouts/attached-files/attached-files.component.ts","./src/ui/layouts/componentlayouts/attached-files/attached-files.component.html","./src/ui/layouts/componentlayouts/attached-files/file-card/file-card.component.ts","./src/ui/layouts/componentlayouts/attached-files/file-card/file-card.component.html","./src/ui/layouts/componentlayouts/search/search.component.ts","./src/ui/layouts/componentlayouts/search/search.component.html","./src/ui/layouts/componentlayouts/loading-animation/loading-animation.component.ts","./src/ui/layouts/componentlayouts/loading-animation/loading-animation.component.html","./src/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/core/endpoints/notification-template.endpoint.ts","./src/ui/notifications/notification-template/notification-template-list/notification-template-list.component.ts","./src/ui/notifications/notification-template/notification-template-list/notification-template-list.component.html","./src/core/endpoints/file.endpoint.ts","./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-grid/system-credentials-creation-grid.component.ts","./src/ui/components/general/system-credentials-creation/system-credentials-creation-grid/system-credentials-creation-grid.component.html","./src/ui/components/general/system-credentials-creation/system-credentials-creation.component.ts","./src/ui/components/general/system-credentials-creation/system-credentials-creation.component.html","./src/core/endpoints/data-editor.endpoint.ts","./src/ui/components/general/data-views/data-view-list.component.ts","./src/ui/components/general/data-views/data-view-list.component.html","./src/core/endpoints/notification-dispatch.endpoint.ts","./src/ui/notifications/notification-dispatch/notification-dispatch.component.ts","./src/ui/notifications/notification-dispatch/notification-dispatch.component.html","./src/ui/notifications/notification-dispatch/notification-dispatch-list/notification-dispatch-list.component.ts","./src/ui/notifications/notification-dispatch/notification-dispatch-list/notification-dispatch-list.component.html","./src/core/endpoints/log.endpoint.ts","./src/ui/components/logs/logs.component.ts","./src/ui/components/logs/logs.component.html","./src/_modules/app-routing.module.ts","./src/core/exceptions/exception.handler.ts","./src/environment/environment.model.ts","./src/ui/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/ui/notifications/notification-dispatch/notification-dispatch-grid/notification-dispatch-grid.component.ts","./src/ui/notifications/notification-dispatch/notification-dispatch-grid/notification-dispatch-grid.component.html","./src/ui/notifications/notification-dispatch/notification-dispatch-recipients/notification-dispatch-recipients.component.ts","./src/ui/notifications/notification-dispatch/notification-dispatch-recipients/notification-dispatch-recipients.component.html","./src/ui/notifications/notification-dispatch/notification-dispatch-notifications/notification-dispatch-notifications.component.ts","./src/ui/notifications/notification-dispatch/notification-dispatch-notifications/notification-dispatch-notifications.component.html","./src/ui/notifications/push-message/push-message.component.ts","./src/ui/notifications/push-message/push-message.component.html","./src/ui/notifications/push-message-toasts/push-message-toasts.component.ts","./src/ui/notifications/push-message-toasts/push-message-toasts.component.html","./src/ui/notifications/notifications-history/email-history-item/email-history-item.component.ts","./src/ui/notifications/notifications-history/email-history-item/email-history-item.component.html","./src/ui/notifications/notifications-history/push-message-history-item/push-message-history-item.component.ts","./src/ui/notifications/notifications-history/push-message-history-item/push-message-history-item.component.html","./src/ui/notifications/notifications-history/sms-history-item/sms-history-item.component.ts","./src/ui/notifications/notifications-history/sms-history-item/sms-history-item.component.html","./src/ui/notifications/notifications-history/notification-grid/email-history-grid/email-history-grid.component.ts","./src/ui/notifications/notifications-history/notification-grid/email-history-grid/email-history-grid.component.html","./src/ui/notifications/notifications-history/notification-grid/sms-history-grid/sms-history-grid.component.ts","./src/ui/notifications/notifications-history/notification-grid/sms-history-grid/sms-history-grid.component.html","./src/ui/notifications/notifications-history/notification-grid/push-message-history-grid/push-message-history-grid.component.ts","./src/ui/notifications/notifications-history/notification-grid/push-message-history-grid/push-message-history-grid.component.html","./src/ui/notifications/notification-test-dialog/notification-test-dialog.component.ts","./src/ui/notifications/notification-test-dialog/notification-test-dialog.component.html","./src/ui/notifications/notification-preview-dialog/notification-preview-dialog.component.ts","./src/ui/notifications/notification-preview-dialog/notification-preview-dialog.component.html","./src/ui/layouts/layout/nav-bar/nav-bar.component.ts","./src/ui/layouts/layout/nav-bar/nav-bar.component.html","./src/ui/notifications/push-message-list-popup/push-message-list-popup.component.ts","./src/ui/notifications/push-message-list-popup/push-message-list-popup.component.html","./src/ui/layouts/layout/page-filter/page-filter.component.ts","./src/ui/layouts/layout/page-filter/page-filter.component.html","./src/ui/layouts/componentlayouts/page-toolbar-buttons/page-toolbar-buttons.component.ts","./src/ui/layouts/componentlayouts/page-toolbar-buttons/page-toolbar-buttons.component.html","./src/ui/components/spin-loader/spin-loader.component.ts","./src/ui/components/spin-loader/spin-loader.component.html","./src/ui/demo/layouts/demo-navbar/demo-navbar.component.ts","./src/ui/demo/layouts/demo-navbar/demo-navbar.component.html","./src/ui/demo/components/grids/grid/demo-grid.component.ts","./src/ui/demo/components/grids/grid/demo-grid.component.html","./src/ui/components/breadcrumb/breadcrumb.component.ts","./src/ui/components/breadcrumb/breadcrumb.component.html","./src/ui/components/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/data-views/data-views-grid/data-view-grid.component.ts","./src/ui/components/general/data-views/data-views-grid/data-view-grid.component.html","./src/base/pivotgrid/PivotGrid.directive.ts","./src/ui/components/switch-button/switch-button.component.ts","./src/ui/components/switch-button/switch-button.component.html","./src/ui/notifications/notifications-history/notification-grid/sharing-history-grid/sharing-history-grid.component.ts","./src/ui/notifications/notifications-history/notification-grid/sharing-history-grid/sharing-history-grid.component.html","./src/ui/components/logs/log-grid/log-grid.component.ts","./src/ui/components/logs/log-grid/log-grid.component.html","./src/_modules/m4uangular.module.ts","./src/main.ts","./src/ui/components/bottom-sheet-context-menu/bottom-sheet-context-menu.component.html","./src/ui/components/bottom-sheet-context-menu/bottom-sheet-context-menu.component.ts","./src/ui/components/bottom-sheet-list/bottom-sheet-list.component.html","./src/ui/components/bottom-sheet-list/bottom-sheet-list.component.ts","./src/ui/components/general/commonsettings/commonsetting.component.html","./src/ui/components/general/commonsettings/commonsetting.component.ts","./src/ui/dialogs/bottom-sheet-dialog/bottom-sheet-dialog.component.html","./src/ui/dialogs/bottom-sheet-dialog/bottom-sheet-dialog.component.ts","./src/ui/dialogs/imagebox-dialog/imageboxdialog.component.html","./src/ui/dialogs/imagebox-dialog/imageboxdialog.component.ts","./src/ui/dialogs/inputbox-dialog/inputboxdialog.component.html","./src/ui/dialogs/inputbox-dialog/inputboxdialog.component.ts","./src/ui/dialogs/printbox-dialog/printboxdialog.component.html","./src/ui/dialogs/printbox-dialog/printboxdialog.component.ts","./src/ui/dialogs/share-dialog/share-dialog.component.html","./src/ui/dialogs/share-dialog/share-dialog.component.ts","./src/ui/directives/Pipes.ts","./src/ui/directives/ViewContainer.directive.ts","./src/ui/layouts/componentlayouts/grid-toolbar/grid-toolbar.component.html","./src/ui/layouts/componentlayouts/grid-toolbar/grid-toolbar.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\nexport enum EnumSystemOptionsZ\r\n{ \r\n\tJobExecutionTime1 = \"JobExecutionTime1\",\r\n\tJobExecutionTime2 = \"JobExecutionTime2\",\r\n\tJobExecutionTime3 = \"JobExecutionTime3\",\r\n\tJobExecutionTime4 = \"JobExecutionTime4\",\r\n\tJobExecutionTime5 = \"JobExecutionTime5\",\r\n\tJobExecutionTimeForNewAccounts = \"JobExecutionTimeForNewAccounts\",\r\n\tJobExecutionInterval = \"JobExecutionInterval\",\r\n\tJobsInParallel = \"JobsInParallel\",\r\n\tJobExecutionMT940 = \"JobExecutionMT940\",\r\n\tJobExecutionTimeForRates = \"JobExecutionTimeForRates\",\r\n\tCreditCardLateArrivalDays = \"CreditCardLateArrivalDays\",\r\n\tMaxLastTransactionRefetchDays = \"MaxLastTransactionRefetchDays\",\r\n\tTakeScreenshotOnSuccess = \"TakeScreenshotOnSuccess\",\r\n\tTakeScreenshotOnFailure = \"TakeScreenshotOnFailure\",\r\n\tTakeScreenshotOnException = \"TakeScreenshotOnException\",\r\n\tSMSServiceURL = \"SMSServiceURL\",\r\n\tSMSServiceUsername = \"SMSServiceUsername\",\r\n\tSMSServicePassword = \"SMSServicePassword\",\r\n\tMailServiceAccount = \"MailServiceAccount\",\r\n\tMailServicePassword = \"MailServicePassword\",\r\n\tMailClientID = \"MailClientID\",\r\n\tMailClientSecret = \"MailClientSecret\",\r\n\tMailTenant = \"MailTenant\",\r\n\tBalanceSyncNotificationTime = \"BalanceSyncNotificationTime\",\r\n\tDemoOrganisationId = \"DemoOrganisationId\",\r\n\tMT940FilesDirectory = \"MT940FilesDirectory\",\r\n\tCityBankFilesAttachments = \"CityBankFilesAttachments\",\r\n\tChequeImagesDirectory = \"ChequeImagesDirectory\",\r\n\tChequeImagesDirectoryDemo = \"ChequeImagesDirectoryDemo\",\r\n\tUploaderSAPByDesignIntervalSeconds = \"UploaderSAPByDesignIntervalSeconds\",\r\n\tJobExecutionTimeForUploaderNetSuite = \"JobExecutionTimeForUploaderNetSuite\",\r\n\tBAI2Folder = \"BAI2Folder\",\r\n\tUploaderSyncIntervalSeconds = \"UploaderSyncIntervalSeconds\",\r\n\tReplicatorSyncIntervalSeconds = \"ReplicatorSyncIntervalSeconds\",\r\n\tUploadSyncExpiredHours = \"UploadSyncExpiredHours\",\r\n\tRemoveHistoricalDataExecutionTime = \"RemoveHistoricalDataExecutionTime\",\r\n\tNotifyAboutBankPassProblemsExecutionTime = \"NotifyAboutBankPassProblemsExecutionTime\",\r\n\tVatValue = \"VatValue\",\r\n\tTransactionCategoryCheque = \"TransactionCategoryCheque\",\r\n\tTransactionCategoryChequeReturn = \"TransactionCategoryChequeReturn\",\r\n\tAsposeLicensePath = \"AsposeLicensePath\",\r\n\tLeumiMaxWhiteImage = \"LeumiMaxWhiteImage\",\r\n\tLoanTransactionCategoryID = \"LoanTransactionCategoryID\",\r\n\tContactUsEnabled = \"ContactUsEnabled\",\r\n\tSFTPRootFolder = \"SFTPRootFolder\",\r\n\tExecutionLoanAutoPosting = \"ExecutionLoanAutoPosting\",\r\n\tIncomingPaymentCategoryIDs = \"IncomingPaymentCategoryIDs\",\r\n\tDemoTransDirectory = \"DemoTransDirectory\",\r\n\tUploaderComaxIntervalSeconds = \"UploaderComaxIntervalSeconds\",\r\n\tUploaderPriorityIntervalSeconds = \"UploaderPriorityIntervalSeconds\"\r\n\r\n\r\n}\r\nexport enum EnumCredentialTypes\r\n{ \r\n\tAdmin = \"Admin\",\r\n\tUser = \"User\",\r\n\tDeployment = \"Deployment\",\r\n\tAPI = \"API\"\r\n\r\n\r\n}\r\nexport enum EnumDownloadTaskStatuses\r\n{ \r\n\tPending = \"Pending\",\r\n\tNoData = \"NoData\",\r\n\tFailure = \"Failure\",\r\n\tSuccess = \"Success\",\r\n\tNotSynched = \"NotSynched\",\r\n\tReviewed = \"Reviewed\"\r\n\r\n\r\n}\r\nexport enum EnumDownloadStatuses\r\n{ \r\n\tPending = \"Pending\",\r\n\tNoData = \"NoData\",\r\n\tFailure = \"Failure\",\r\n\tSuccess = \"Success\",\r\n\tBrowserStartFailure = \"BrowserStartFailure\",\r\n\tLoginFailure = \"LoginFailure\",\r\n\tFileImported = \"FileImported\"\r\n\r\n\r\n}\r\nexport enum EnumDownloadRequestStatuses\r\n{ \r\n\tPending = \"Pending\",\r\n\tNoData = \"NoData\",\r\n\tFailure = \"Failure\",\r\n\tFinished = \"Finished\"\r\n\r\n\r\n}\r\nexport enum EnumDownloadStepStatuses\r\n{ \r\n\tPending = \"Pending\",\r\n\tException = \"Exception\",\r\n\tFailure = \"Failure\",\r\n\tSuccess = \"Success\"\r\n\r\n\r\n}\r\nexport enum EnumJobStatuses\r\n{ \r\n\tExecuting = \"Executing\",\r\n\tNoData = \"NoData\",\r\n\tFailure = \"Failure\",\r\n\tSuccess = \"Success\"\r\n\r\n\r\n}\r\nexport enum EnumBatchStatuses\r\n{ \r\n\tInitiated = \"Initiated\",\r\n\tNoData = \"NoData\",\r\n\tFailure = \"Failure\",\r\n\tSuccess = \"Success\"\r\n\r\n\r\n}\r\nexport enum EnumUploadStatuses\r\n{ \r\n\tInitiated = \"Initiated\",\r\n\tNoData = \"NoData\",\r\n\tException = \"Exception\",\r\n\tSuccess = \"Success\",\r\n\tDataSent = \"DataSent\",\r\n\tBalanceMismatch = \"BalanceMismatch\",\r\n\tBalanceNotExistsForDate = \"BalanceNotExistsForDate\",\r\n\tCompanyNotFound = \"CompanyNotFound\",\r\n\tAccountNotFound = \"AccountNotFound\",\r\n\tJournalEntryCreationError = \"JournalEntryCreationError\",\r\n\tNotSynched = \"NotSynched\",\r\n\tFileExported = \"FileExported\",\r\n\tNoClosingDate = \"NoClosingDate\"\r\n\r\n\r\n}\r\nexport enum EnumSnapthotsStatuses\r\n{ \r\n\tInitiated = \"Initiated\",\r\n\tNoData = \"NoData\",\r\n\tFailure = \"Failure\",\r\n\tSuccess = \"Success\"\r\n\r\n\r\n}\r\nexport enum EnumReplicationStatuses\r\n{ \r\n\tInitiated = \"Initiated\",\r\n\tNoData = \"NoData\",\r\n\tException = \"Exception\",\r\n\tSuccess = \"Success\",\r\n\tCompanyNotFound = \"CompanyNotFound\"\r\n\r\n\r\n}\r\nexport enum EnumBankGroups\r\n{ \r\n\tPoalim = \"Poalim\",\r\n\tLeumi = \"Leumi\",\r\n\tDiscount = \"Discount\",\r\n\tMizrahi = \"Mizrahi\",\r\n\tBenLeumi = \"BenLeumi\",\r\n\tCityBank = \"CityBank\",\r\n\tExternalCreditCards = \"ExternalCreditCards\",\r\n\tForeignBankGroup1 = \"ForeignBankGroup1\",\r\n\tForeignBankGroup2 = \"ForeignBankGroup2\",\r\n\tDoar = \"Doar\",\r\n\tJerusalem = \"Jerusalem\",\r\n\tExternalLoaners = \"ExternalLoaners\",\r\n\tHSBC = \"HSBC\",\r\n\tCCProcessors = \"CCProcessors\",\r\n\tAll = \"All\"\r\n\r\n\r\n}\r\nexport enum EnumBanks\r\n{ \r\n\tYahav = \"Yahav\",\r\n\tLeumi = \"Leumi\",\r\n\tDiscount = \"Discount\",\r\n\tPoalim = \"Poalim\",\r\n\tMerkantil = \"Merkantil\",\r\n\tOneZero = \"OneZero\",\r\n\tMizrahi = \"Mizrahi\",\r\n\tCityBank = \"CityBank\",\r\n\tHSBC = \"HSBC\",\r\n\tBenLeumi = \"BenLeumi\",\r\n\tMasad = \"Masad\",\r\n\tUbank = \"Ubank\",\r\n\tOtsarHaHayal = \"OtsarHaHayal\",\r\n\tPagi = \"Pagi\",\r\n\tEgud = \"Egud\",\r\n\tDoar = \"Doar\",\r\n\tJerusalem = \"Jerusalem\",\r\n\tIsracard = \"Isracard\",\r\n\tVisaCal = \"VisaCal\",\r\n\tLeumiMax = \"LeumiMax\",\r\n\tAmex = \"Amex\",\r\n\tForeignPlaceholder1 = \"ForeignPlaceholder1\",\r\n\tForeignPlaceholder2 = \"ForeignPlaceholder2\",\r\n\tForeignPlaceholder3 = \"ForeignPlaceholder3\",\r\n\tPlaid = \"Plaid\",\r\n\tExternalLoanerMisc = \"ExternalLoanerMisc\",\r\n\tExternalLoanerVisa = \"ExternalLoanerVisa\",\r\n\tExternalLoanerIsracard = \"ExternalLoanerIsracard\",\r\n\tExternalLoanerLeumiMax = \"ExternalLoanerLeumiMax\",\r\n\tExternalLoanerMimunYashir = \"ExternalLoanerMimunYashir\",\r\n\tExternalLoanerHarel = \"ExternalLoanerHarel\",\r\n\tExternalLoanerMigdal = \"ExternalLoanerMigdal\",\r\n\tExternalLoanerAltshuler = \"ExternalLoanerAltshuler\",\r\n\tExternalLoanerFenix = \"ExternalLoanerFenix\",\r\n\tExternalLoanerMeitav = \"ExternalLoanerMeitav\",\r\n\tCCIsracard = \"CCIsracard\",\r\n\tCCVisaCal = \"CCVisaCal\",\r\n\tCCLeumiMax = \"CCLeumiMax\",\r\n\tUnknown = \"Unknown\"\r\n\r\n\r\n}\r\nexport enum EnumBalanceDetailsSortType\r\n{ \r\n\tSortBySum = \"SortBySum\",\r\n\tSortByName = \"SortByName\",\r\n\tNone = \"None\"\r\n\r\n\r\n}\r\nexport enum EnumBookingAccountSubtypes\r\n{ \r\n\tCurrent = \"Current\",\r\n\tDeposits = \"Deposits\",\r\n\tStocks = \"Stocks\",\r\n\tCreditCard = \"CreditCard\",\r\n\tLoans = \"Loans\",\r\n\tGuarantee = \"Guarantee\",\r\n\tUnknown = \"Unknown\"\r\n\r\n\r\n}\r\nexport enum EnumBookingAccountStockTypes\r\n{ \r\n\tAll = \"All\",\r\n\tOther = \"Other\",\r\n\tStocks = \"Stocks\",\r\n\tCorporateBonds = \"CorporateBonds\",\r\n\tGovermentBonds = \"GovermentBonds\",\r\n\tGovermentBondsMakam = \"GovermentBondsMakam\",\r\n\tETFs = \"ETFs\",\r\n\tTrustFunds = \"TrustFunds\",\r\n\tCommodities = \"Commodities\",\r\n\tOptions = \"Options\",\r\n\tConverters = \"Converters\",\r\n\tUnknown = \"Unknown\"\r\n\r\n\r\n}\r\nexport enum EnumBookingAccountDepositTypes\r\n{ \r\n\tAll = \"All\",\r\n\tRegular = \"Regular\",\r\n\tDaily = \"Daily\",\r\n\tUnknown = \"Unknown\"\r\n\r\n\r\n}\r\nexport enum EnumAccountingSoftwares\r\n{ \r\n\tUnknown = \"Unknown\",\r\n\tSBO = \"SBO\",\r\n\tPriority = \"Priority\",\r\n\tHashavshevet = \"Hashavshevet\",\r\n\tStandalone = \"Standalone\",\r\n\tSAPByDesign = \"SAPByDesign\",\r\n\tNetSuite = \"NetSuite\",\r\n\tWizCloud = \"WizCloud\",\r\n\tArdani = \"Ardani\",\r\n\tRivhit = \"Rivhit\",\r\n\tRivhit8 = \"Rivhit8\",\r\n\tComax = \"Comax\",\r\n\tIntentia = \"Intentia\"\r\n\r\n\r\n}\r\nexport enum EnumUploaderType\r\n{ \r\n\tSftp = \"Sftp\",\r\n\tSAPByDesign = \"SAPByDesign\",\r\n\tWizCloud = \"WizCloud\",\r\n\tComax = \"Comax\",\r\n\tPriority = \"Priority\"\r\n\r\n\r\n}\r\nexport enum EnumUserNotificationMethods\r\n{ \r\n\tEmail = \"Email\",\r\n\tPhone = \"Phone\",\r\n\tNone = \"None\",\r\n\tEmailAndPhone = \"EmailAndPhone\"\r\n\r\n\r\n}\r\nexport enum EnumTransactionTypes\r\n{ \r\n\tNormal = \"Normal\",\r\n\tOpeningBalance = \"OpeningBalance\",\r\n\tImplicit = \"Implicit\"\r\n\r\n\r\n}\r\nexport enum EnumBankChargeType\r\n{ \r\n\tNone = \"None\",\r\n\tMonthly = \"Monthly\",\r\n\tImmidiate = \"Immidiate\"\r\n\r\n\r\n}\r\nexport enum EnumOrganizationChildEntityTypes\r\n{ \r\n\tCompany = \"Company\",\r\n\tUser = \"User\",\r\n\tDeployment = \"Deployment\",\r\n\tBillingContract = \"BillingContract\",\r\n\tBankPass = \"BankPass\",\r\n\tAccount = \"Account\",\r\n\tAccountGroup = \"AccountGroup\",\r\n\tNotificationTemplate = \"NotificationTemplate\",\r\n\tAlertTemplate = \"AlertTemplate\",\r\n\tScenario = \"Scenario\",\r\n\tProbabilityLevel = \"ProbabilityLevel\",\r\n\tFileImportTemplate = \"FileImportTemplate\",\r\n\tExternalAPIKey = \"ExternalAPIKey\",\r\n\tDepositCategory = \"DepositCategory\",\r\n\tDepositClassificationRule = \"DepositClassificationRule\",\r\n\tLoanCategory = \"LoanCategory\",\r\n\tLoanClassificationRule = \"LoanClassificationRule\",\r\n\tStockCategory = \"StockCategory\",\r\n\tStockClassificationRule = \"StockClassificationRule\",\r\n\tGuaranteeCategory = \"GuaranteeCategory\",\r\n\tGuaratneeClassificationRule = \"GuaratneeClassificationRule\"\r\n\r\n\r\n}\r\nexport enum EnumCompanyChildEntityTypes\r\n{ \r\n\tAccount = \"Account\",\r\n\tPostingTemplate = \"PostingTemplate\",\r\n\tForecastMapper = \"ForecastMapper\",\r\n\tCCContract = \"CCContract\",\r\n\tCategory = \"Category\",\r\n\tClassificationRule = \"ClassificationRule\",\r\n\tParentCategory = \"ParentCategory\"\r\n\r\n\r\n}\r\nexport enum EnumDashboardGroupBy\r\n{ \r\n\tBank = \"Bank\",\r\n\tAccount = \"Account\",\r\n\tCompany = \"Company\",\r\n\tAccountGroup = \"AccountGroup\",\r\n\tCurrency = \"Currency\",\r\n\tBookingAccountAssetsSubtype = \"BookingAccountAssetsSubtype\",\r\n\tBookingAccountLiabilitiesSubtype = \"BookingAccountLiabilitiesSubtype\"\r\n\r\n\r\n}\r\nexport enum EnumBalanceNotificationGrouping\r\n{ \r\n\tBank = \"Bank\",\r\n\tAccount = \"Account\",\r\n\tCompany = \"Company\",\r\n\tAccountGroup = \"AccountGroup\"\r\n\r\n\r\n}\r\nexport enum EnumEntityTypes\r\n{ \r\n\tOrganization = \"Organization\",\r\n\tCompany = \"Company\",\r\n\tBankPass = \"BankPass\",\r\n\tAccount = \"Account\",\r\n\tBookingAccount = \"BookingAccount\",\r\n\tUser = \"User\",\r\n\tAccountGroup = \"AccountGroup\",\r\n\tAdmin = \"Admin\",\r\n\tNotificationTemplate = \"NotificationTemplate\",\r\n\tCategory = \"Category\",\r\n\tClassificationRule = \"ClassificationRule\",\r\n\tPostingTemplate = \"PostingTemplate\",\r\n\tJournalEntry = \"JournalEntry\"\r\n\r\n\r\n}\r\nexport enum EnumBankPassCredentialValidity\r\n{ \r\n\tUnknown = \"Unknown\",\r\n\tValid = \"Valid\",\r\n\tInvalid = \"Invalid\"\r\n\r\n\r\n}\r\nexport enum EnumClassificarionRuleFieldType\r\n{ \r\n\tNotes1 = \"Notes1\",\r\n\tNotes2 = \"Notes2\",\r\n\tReference = \"Reference\"\r\n\r\n\r\n}\r\nexport enum EnumClassificarionRuleMatchType\r\n{ \r\n\tEqual = \"Equal\",\r\n\tStartWith = \"StartWith\",\r\n\tContains = \"Contains\",\r\n\tMatchRegex = \"MatchRegex\",\r\n\tNotEqual = \"NotEqual\",\r\n\tNotStartWith = \"NotStartWith\",\r\n\tNotContains = \"NotContains\",\r\n\tNotMatchRegex = \"NotMatchRegex\"\r\n\r\n\r\n}\r\nexport enum EnumMatchingRelationship\r\n{ \r\n\tAnd = \"And\",\r\n\tOr = \"Or\"\r\n\r\n\r\n}\r\nexport enum EnumBalanceHistoryReportMode\r\n{ \r\n\tMonthly = \"Monthly\",\r\n\tWeekly = \"Weekly\",\r\n\tDaily = \"Daily\"\r\n\r\n\r\n}\r\nexport enum EnumForecastSystemSource\r\n{ \r\n\tTransactions = \"Transactions\",\r\n\tAccountingForecast = \"AccountingForecast\",\r\n\tForecastOperation = \"ForecastOperation\",\r\n\tCCExpense = \"CCExpense\",\r\n\tCCIncome = \"CCIncome\",\r\n\tLoans = \"Loans\",\r\n\tDeposits = \"Deposits\",\r\n\tFutureCheques = \"FutureCheques\"\r\n\r\n\r\n}\r\nexport enum EnumAccountingDocumentType\r\n{ \r\n\tInvoice = \"Invoice\",\r\n\tRefund = \"Refund\",\r\n\tPurchaseInvoice = \"PurchaseInvoice\",\r\n\tPurchaseRefund = \"PurchaseRefund\",\r\n\tOrder = \"Order\",\r\n\tPurchaseOrder = \"PurchaseOrder\",\r\n\tIncomingPayment = \"IncomingPayment\",\r\n\tOutgoingPayment = \"OutgoingPayment\",\r\n\tJournalEntry = \"JournalEntry\",\r\n\tPaymentRequest = \"PaymentRequest\",\r\n\tUnknown = \"Unknown\"\r\n\r\n\r\n}\r\nexport enum EnumPeriodType\r\n{ \r\n\tDaily = \"Daily\",\r\n\tWeekly = \"Weekly\",\r\n\tBiWeekly = \"BiWeekly\",\r\n\tMonthly = \"Monthly\",\r\n\tBiMonthly = \"BiMonthly\",\r\n\tQuarterly = \"Quarterly\",\r\n\tScheduledDays = \"ScheduledDays\"\r\n\r\n\r\n}\r\nexport enum EnumIncreaseType\r\n{ \r\n\tNone = \"None\",\r\n\tPercent = \"Percent\",\r\n\tFixedAmount = \"FixedAmount\"\r\n\r\n\r\n}\r\nexport enum EnumSide\r\n{ \r\n\tIncome = \"Income\",\r\n\tExpense = \"Expense\",\r\n\tUnknown = \"Unknown\"\r\n\r\n\r\n}\r\nexport enum EnumLoanSide\r\n{ \r\n\tIncoming = \"Incoming\",\r\n\tOutgoing = \"Outgoing\"\r\n\r\n\r\n}\r\nexport enum EnumSource\r\n{ \r\n\tAutomatic = \"Automatic\",\r\n\tManual = \"Manual\"\r\n\r\n\r\n}\r\nexport enum EnumForecastDateRelevance\r\n{ \r\n\tPast = \"Past\",\r\n\tNotReconcilledAccounting = \"NotReconcilledAccounting\",\r\n\tNotReconcilledForecast = \"NotReconcilledForecast\",\r\n\tFuture = \"Future\"\r\n\r\n\r\n}\r\nexport enum EnumSummaryLevel\r\n{ \r\n\tDay = \"Day\",\r\n\tWeek = \"Week\",\r\n\tMonth = \"Month\"\r\n\r\n\r\n}\r\nexport enum EnumFutureForecastGroupBy\r\n{ \r\n\tParentCategory = \"ParentCategory\",\r\n\tCategory = \"Category\",\r\n\tDataSource = \"DataSource\"\r\n\r\n\r\n}\r\nexport enum EnumCashflowSummarizedAggregationLevel\r\n{ \r\n\tCompany = \"Company\",\r\n\tBank = \"Bank\",\r\n\tAccountGroup = \"AccountGroup\",\r\n\tBookingAccount = \"BookingAccount\",\r\n\tAccount = \"Account\",\r\n\tBankGroup = \"BankGroup\",\r\n\tCurrency = \"Currency\",\r\n\tCategory = \"Category\"\r\n\r\n\r\n}\r\nexport enum EnumUserAuthorizationType\r\n{ \r\n\tAll = \"All\",\r\n\tCompanies = \"Companies\",\r\n\tAccounts = \"Accounts\"\r\n\r\n\r\n}\r\nexport enum EnumNotificationRequestStatuses\r\n{ \r\n\tPending = \"Pending\",\r\n\tSent = \"Sent\"\r\n\r\n\r\n}\r\nexport enum EnumShowInCurrencyOptions\r\n{ \r\n\tOriginal = \"Original\",\r\n\tILS = \"ILS\",\r\n\tBoth = \"Both\",\r\n\tDefault = \"Default\",\r\n\tOriginalAndDefault = \"OriginalAndDefault\",\r\n\tOriginalAndDollar = \"OriginalAndDollar\",\r\n\tTE = \"TE\"\r\n\r\n\r\n}\r\nexport enum EnumExportType\r\n{ \r\n\tInEmail = \"InEmail\",\r\n\tExcel = \"Excel\",\r\n\tBoth = \"Both\"\r\n\r\n\r\n}\r\nexport enum EnumPositiveNegative\r\n{ \r\n\tPositive = \"Positive\",\r\n\tNegative = \"Negative\",\r\n\tBoth = \"Both\",\r\n\tBothWithoutZero = \"BothWithoutZero\"\r\n\r\n\r\n}\r\nexport enum EnumNotificationTemplateSectionFields\r\n{ \r\n\tBookingAccountType = \"BookingAccountType\",\r\n\tCompany = \"Company\",\r\n\tAccountGroup = \"AccountGroup\",\r\n\tBankGroup = \"BankGroup\",\r\n\tBank = \"Bank\",\r\n\tBankAccount = \"BankAccount\",\r\n\tBookingAccount = \"BookingAccount\",\r\n\tCurrency = \"Currency\",\r\n\tHasCheques = \"HasCheques\",\r\n\tCategory = \"Category\",\r\n\tDepositTypes = \"DepositTypes\",\r\n\tStockTypes = \"StockTypes\",\r\n\tAmortizationType = \"AmortizationType\",\r\n\tInterestType = \"InterestType\",\r\n\tNextDays = \"NextDays\",\r\n\tNextWeeks = \"NextWeeks\",\r\n\tNextMonths = \"NextMonths\",\r\n\tSumSide = \"SumSide\"\r\n\r\n\r\n}\r\nexport enum EnumNotificationTemplateSectionType\r\n{ \r\n\tBalances = \"Balances\",\r\n\tTransactions = \"Transactions\",\r\n\tBalanceDetails = \"BalanceDetails\",\r\n\tLoanPayments = \"LoanPayments\"\r\n\r\n\r\n}\r\nexport enum EnumYesNo\r\n{ \r\n\tNo = \"No\",\r\n\tYes = \"Yes\"\r\n\r\n\r\n}\r\nexport enum EnumDownloadFailureReviewStatus\r\n{ \r\n\tOnetime = \"Onetime\",\r\n\tPermanent = \"Permanent\",\r\n\tExceptionChanged = \"ExceptionChanged\",\r\n\tCancelled = \"Cancelled\"\r\n\r\n\r\n}\r\nexport enum EnumUploadRequestStatuses\r\n{ \r\n\tPending = \"Pending\",\r\n\tNoData = \"NoData\",\r\n\tFailure = \"Failure\",\r\n\tFinished = \"Finished\"\r\n\r\n\r\n}\r\nexport enum EnumBankTypes\r\n{ \r\n\tLocal = \"Local\",\r\n\tExternalCreditCard = \"ExternalCreditCard\",\r\n\tForeign = \"Foreign\",\r\n\tExternalLoaner = \"ExternalLoaner\",\r\n\tCCProcessor = \"CCProcessor\"\r\n\r\n\r\n}\r\nexport enum EnumUploadResult\r\n{ \r\n\tSuccess = \"Success\",\r\n\tFailure = \"Failure\",\r\n\tNoData = \"NoData\"\r\n\r\n\r\n}\r\nexport enum EnumReplicationObjectTypes\r\n{ \r\n\tBusinessPartner = \"BusinessPartner\",\r\n\tBusinessPartnerGroup = \"BusinessPartnerGroup\",\r\n\tItem = \"Item\",\r\n\tItemGroup = \"ItemGroup\",\r\n\tAccountingJournalEntry = \"AccountingJournalEntry\",\r\n\tDocument = \"Document\",\r\n\tPayment = \"Payment\",\r\n\tLedgerAccount = \"LedgerAccount\",\r\n\tLedgerAccountGroup = \"LedgerAccountGroup\",\r\n\tProject = \"Project\",\r\n\tSalesPerson = \"SalesPerson\",\r\n\tDimensionCode1 = \"DimensionCode1\",\r\n\tDimensionCode2 = \"DimensionCode2\",\r\n\tDimensionCode3 = \"DimensionCode3\",\r\n\tDimensionCode4 = \"DimensionCode4\",\r\n\tDimensionCode5 = \"DimensionCode5\",\r\n\tAccountingForecastCategory = \"AccountingForecastCategory\",\r\n\tAccountingForecast = \"AccountingForecast\",\r\n\tPaymentGroup = \"PaymentGroup\",\r\n\tCompanyMetadata = \"CompanyMetadata\"\r\n\r\n\r\n}\r\nexport enum EnumPaymentMeansTypes\r\n{ \r\n\tCach = \"Cach\",\r\n\tCheque = \"Cheque\",\r\n\tCreditCard = \"CreditCard\",\r\n\tWireTransfer = \"WireTransfer\",\r\n\tMultiple = \"Multiple\",\r\n\tUnknown = \"Unknown\"\r\n\r\n\r\n}\r\nexport enum EnumInterestType\r\n{ \r\n\tFlat = \"Flat\",\r\n\tLinked = \"Linked\",\r\n\tUnknown = \"Unknown\"\r\n\r\n\r\n}\r\nexport enum EnumAmortizationType\r\n{ \r\n\tStraightLine = \"StraightLine\",\r\n\tAnnuityShpizer = \"AnnuityShpizer\",\r\n\tBaloon = \"Baloon\",\r\n\tOnCall = \"OnCall\",\r\n\tUnknown = \"Unknown\"\r\n\r\n\r\n}\r\nexport enum EnumLoanStatus\r\n{ \r\n\tDraft = \"Draft\",\r\n\tFunded = \"Funded\",\r\n\tCanceled = \"Canceled\",\r\n\tRecycled = \"Recycled\",\r\n\tFinished = \"Finished\"\r\n\r\n\r\n}\r\nexport enum EnumLoanPaymentFrequencyType\r\n{ \r\n\tWeekly = \"Weekly\",\r\n\tBiWeekly = \"BiWeekly\",\r\n\tMonthly = \"Monthly\",\r\n\tBiMonthly = \"BiMonthly\",\r\n\tQuorterly = \"Quorterly\",\r\n\tSemiAnnual = \"SemiAnnual\",\r\n\tAnnual = \"Annual\",\r\n\tOneTimePayment = \"OneTimePayment\"\r\n\r\n\r\n}\r\nexport enum EnumRecommendationPeriodType\r\n{ \r\n\tDaily = \"Daily\",\r\n\tWeekly = \"Weekly\",\r\n\tBiWeekly = \"BiWeekly\",\r\n\tMonthly = \"Monthly\",\r\n\tBiMonthly = \"BiMonthly\",\r\n\tQuarterly = \"Quarterly\",\r\n\tVariable = \"Variable\"\r\n\r\n\r\n}\r\nexport enum EnumLoanInterestPeriodCalculationType\r\n{ \r\n\tDaily = \"Daily\",\r\n\tMonthly = \"Monthly\"\r\n\r\n\r\n}\r\nexport enum EnumDocumentType\r\n{ \r\n\tInvoice = \"Invoice\",\r\n\tRefund = \"Refund\",\r\n\tPurchaseInvoice = \"PurchaseInvoice\",\r\n\tPurchaseReservationInvoice = \"PurchaseReservationInvoice\"\r\n\r\n\r\n}\r\nexport enum EnumJournalEntryDocumentType\r\n{ \r\n\tDocument = \"Document\",\r\n\tPayment = \"Payment\",\r\n\tJournalEntry = \"JournalEntry\"\r\n\r\n\r\n}\r\nexport enum EnumPredefinedNotificationTemplates\r\n{ \r\n\tGeneral = \"General\",\r\n\tDetailed = \"Detailed\",\r\n\tTotalBalance = \"TotalBalance\",\r\n\tEmpty = \"Empty\"\r\n\r\n\r\n}\r\nexport enum EnumVisibilitySetting\r\n{ \r\n\tHide = \"Hide\",\r\n\tShow = \"Show\",\r\n\tMandatory = \"Mandatory\"\r\n\r\n\r\n}\r\nexport enum EnumCustomFieldsetFieldInputType\r\n{ \r\n\tText = \"Text\",\r\n\tNumber = \"Number\",\r\n\tMemo = \"Memo\",\r\n\tDropdown = \"Dropdown\",\r\n\tCheckbox = \"Checkbox\"\r\n\r\n\r\n}\r\nexport enum EnumExpenseStatus\r\n{ \r\n\tSubmitted = \"Submitted\",\r\n\tApproved = \"Approved\",\r\n\tRejected = \"Rejected\",\r\n\tPosted = \"Posted\",\r\n\tCanceled = \"Canceled\",\r\n\tUnknown = \"Unknown\"\r\n\r\n\r\n}\r\nexport enum EnumSecurityType\r\n{ \r\n\tBankGuarantee = \"BankGuarantee\",\r\n\tCash = \"Cash\",\r\n\tInsurancePolicy = \"InsurancePolicy\",\r\n\tMortgage = \"Mortgage\"\r\n\r\n\r\n}\r\nexport enum EnumSecurityStatus\r\n{ \r\n\tRequested = \"Requested\",\r\n\tReceived = \"Received\",\r\n\tCancelled = \"Cancelled\"\r\n\r\n\r\n}\r\nexport enum EnumLoanPostPaymentRecalculationOptions\r\n{ \r\n\tPayment = \"Payment\",\r\n\tLoan = \"Loan\"\r\n\r\n\r\n}\r\nexport enum EnumFinancialReportDateType\r\n{ \r\n\tPostingDate = \"PostingDate\",\r\n\tDueDate = \"DueDate\",\r\n\tTaxDate = \"TaxDate\",\r\n\tUnknown = \"Unknown\"\r\n\r\n\r\n}\r\nexport enum EnumFinancialReportType\r\n{ \r\n\tPnL = \"PnL\",\r\n\tBalanceSheet = \"BalanceSheet\",\r\n\tTrialBalance = \"TrialBalance\",\r\n\tUnknown = \"Unknown\"\r\n\r\n\r\n}\r\nexport enum EnumFinancialReportCurrencyType\r\n{ \r\n\tLocal = \"Local\",\r\n\tSystem = \"System\",\r\n\tUnknown = \"Unknown\"\r\n\r\n\r\n}\r\nexport enum EnumFinancialReportRangeType\r\n{ \r\n\tAll = \"All\",\r\n\tYear = \"Year\",\r\n\tQuarter = \"Quarter\",\r\n\tMonth = \"Month\",\r\n\tUnknown = \"Unknown\"\r\n\r\n\r\n}\r\nexport enum EnumFinancialReportNodeEntityType\r\n{ \r\n\tLedgerAccountGroup = \"LedgerAccountGroup\",\r\n\tLedgerAccount = \"LedgerAccount\",\r\n\tBusinessPartnerGroup = \"BusinessPartnerGroup\",\r\n\tBusinessPartner = \"BusinessPartner\",\r\n\tVirtual = \"Virtual\"\r\n\r\n\r\n}\r\nexport enum EnumFinancialReportRootNodesTypes\r\n{ \r\n\tAssets = \"Assets\",\r\n\tLiabilities = \"Liabilities\",\r\n\tEquity = \"Equity\",\r\n\tRevenues = \"Revenues\",\r\n\tCostOfSales = \"CostOfSales\",\r\n\tExpenses = \"Expenses\",\r\n\tFinancing = \"Financing\",\r\n\tOtherRevenuesAndExpenses = \"OtherRevenuesAndExpenses\",\r\n\tGrossProfit = \"GrossProfit\",\r\n\tOperatingProfit = \"OperatingProfit\",\r\n\tProfitAfterFinancingExpenses = \"ProfitAfterFinancingExpenses\",\r\n\tProfitPeriod = \"ProfitPeriod\",\r\n\tCustomers = \"Customers\",\r\n\tVendors = \"Vendors\"\r\n\r\n\r\n}\r\nexport enum EnumDataExportType\r\n{ \r\n\tAutomatic = \"Automatic\",\r\n\tBAI2File = \"BAI2File\",\r\n\tExcelFile = \"ExcelFile\",\r\n\tBezeqZahav14File = \"BezeqZahav14File\",\r\n\tBezeqZahav48File = \"BezeqZahav48File\",\r\n\tBezeqZahav24File = \"BezeqZahav24File\",\r\n\tMT940File = \"MT940File\",\r\n\tIntentiaFile = \"IntentiaFile\"\r\n\r\n\r\n}\r\nexport enum EnumLedgerAccountType\r\n{ \r\n\tIncome = \"Income\",\r\n\tExpense = \"Expense\",\r\n\tOther = \"Other\"\r\n\r\n\r\n}\r\nexport enum EnumJournalEntryCurrencyTypes\r\n{ \r\n\tLocal = \"Local\",\r\n\tSystem = \"System\",\r\n\tForeign = \"Foreign\"\r\n\r\n\r\n}\r\nexport enum EnumExportTransactionsMethod\r\n{ \r\n\tExportNewTransactions = \"ExportNewTransactions\",\r\n\tExportTransactionsFromDate = \"ExportTransactionsFromDate\"\r\n\r\n\r\n}\r\nexport enum EnumChequeTypes\r\n{ \r\n\tUnknown = \"Unknown\",\r\n\tIncoming = \"Incoming\",\r\n\tOutgoing = \"Outgoing\"\r\n\r\n\r\n}\r\nexport enum EnumFutureChequeStatus\r\n{ \r\n\tFuture = \"Future\",\r\n\tDeposited = \"Deposited\"\r\n\r\n\r\n}\r\nexport enum EnumCCProcessingCompanies\r\n{ \r\n\tUnknown = \"Unknown\",\r\n\tIsracard = \"Isracard\",\r\n\tVisaCal = \"VisaCal\",\r\n\tLeumiMax = \"LeumiMax\"\r\n\r\n\r\n}\r\nexport enum EnumCCBrands\r\n{ \r\n\tAll = \"All\",\r\n\tMasterCard = \"MasterCard\",\r\n\tVisa = \"Visa\",\r\n\tAmex = \"Amex\",\r\n\tDiners = \"Diners\",\r\n\tIsracard = \"Isracard\",\r\n\tUnknown = \"Unknown\"\r\n\r\n\r\n}\r\nexport enum EnumCCInvoiceStatuses\r\n{ \r\n\tDraft = \"Draft\",\r\n\tPosted = \"Posted\",\r\n\tRemoved = \"Removed\"\r\n\r\n\r\n}\r\nexport enum EnumCCTransferStatuses\r\n{ \r\n\tFuture = \"Future\",\r\n\tActual = \"Actual\",\r\n\tInvoiced = \"Invoiced\"\r\n\r\n\r\n}\r\nexport enum EnumCCInvoiceParseResults\r\n{ \r\n\tFileOnly = \"FileOnly\",\r\n\tPartialFailure = \"PartialFailure\",\r\n\tFullFailure = \"FullFailure\",\r\n\tSuccess = \"Success\"\r\n\r\n\r\n}\r\nexport enum EnumPDFDocumnetType\r\n{ \r\n\tInvoice = \"Invoice\",\r\n\tDetails = \"Details\"\r\n\r\n\r\n}\r\nexport enum EnumApplyToBookingAccountsTypes\r\n{ \r\n\tAll = \"All\",\r\n\tSpecificCurrency = \"SpecificCurrency\",\r\n\tSpecific = \"Specific\"\r\n\r\n\r\n}\r\nexport enum EnumNoteFieldTypes\r\n{ \r\n\tNote1 = \"Note1\",\r\n\tNote2 = \"Note2\",\r\n\tUnknown = \"Unknown\"\r\n\r\n\r\n}\r\nexport enum EnumNoteMatchTypes\r\n{ \r\n\tEqual = \"Equal\",\r\n\tStartWith = \"StartWith\",\r\n\tEndsWith = \"EndsWith\",\r\n\tContains = \"Contains\"\r\n\r\n\r\n}\r\nexport enum EnumNotesExportAdjustments\r\n{ \r\n\tNone = \"None\",\r\n\tNotes2Override = \"Notes2Override\",\r\n\tNotes2Append = \"Notes2Append\",\r\n\tNotes2Prepend = \"Notes2Prepend\"\r\n\r\n\r\n}\r\nexport enum EnumAccountFullNameDisplayType\r\n{ \r\n\tNumberOnly = \"NumberOnly\",\r\n\tNumberAndBranch = \"NumberAndBranch\",\r\n\tFull = \"Full\",\r\n\tBankAndNumber = \"BankAndNumber\"\r\n\r\n\r\n}\r\nexport enum EnumJournalEntryUploadLevel\r\n{ \r\n\tNone = \"None\",\r\n\tJournalVoucher = \"JournalVoucher\",\r\n\tJournalEntry = \"JournalEntry\",\r\n\tJournalEntryAndReconciliation = \"JournalEntryAndReconciliation\"\r\n\r\n\r\n}\r\nexport enum EnumJournalEntrySources\r\n{ \r\n\tTransactionAutoPosting = \"TransactionAutoPosting\",\r\n\tLoans = \"Loans\",\r\n\tCC = \"CC\",\r\n\tCCAutoPosting = \"CCAutoPosting\"\r\n\r\n\r\n}\r\nexport enum EnumFileImportEncodings\r\n{ \r\n\tWindows1255 = \"Windows1255\",\r\n\tOEM862 = \"OEM862\",\r\n\tISO88598 = \"ISO88598\",\r\n\tUTF8 = \"UTF8\",\r\n\tANSI = \"ANSI\"\r\n\r\n\r\n}\r\nexport enum EnumFileImportTypes\r\n{ \r\n\tExcel = \"Excel\",\r\n\tCsv = \"Csv\",\r\n\tTab = \"Tab\",\r\n\tFixedWidth = \"FixedWidth\",\r\n\tCustom = \"Custom\",\r\n\tBAI2 = \"BAI2\"\r\n\r\n\r\n}\r\nexport enum EnumFileImportRowDelimiters\r\n{ \r\n\tVbCr = \"VbCr\",\r\n\tVbCrLf = \"VbCrLf\",\r\n\tVbLf = \"VbLf\"\r\n\r\n\r\n}\r\nexport enum EnumFileImportAccountMappingTypes\r\n{ \r\n\tByBookingAccount = \"ByBookingAccount\",\r\n\tByAccountNumber = \"ByAccountNumber\",\r\n\tByAccountAndCurrency = \"ByAccountAndCurrency\",\r\n\tFixedBookingAccount = \"FixedBookingAccount\",\r\n\tAskEveryTime = \"AskEveryTime\"\r\n\r\n\r\n}\r\nexport enum EnumGenerationTypeJournalEntry\r\n{ \r\n\tTransactionsAutoPosting = \"TransactionsAutoPosting\",\r\n\tCCAutoPosting = \"CCAutoPosting\"\r\n\r\n\r\n}\r\nexport enum EnumFileImportColumns\r\n{ \r\n\tUndefined = \"Undefined\",\r\n\tA = \"A\",\r\n\tB = \"B\",\r\n\tC = \"C\",\r\n\tD = \"D\",\r\n\tE = \"E\",\r\n\tF = \"F\",\r\n\tG = \"G\",\r\n\tH = \"H\",\r\n\tI = \"I\",\r\n\tJ = \"J\",\r\n\tK = \"K\",\r\n\tL = \"L\",\r\n\tM = \"M\",\r\n\tN = \"N\",\r\n\tO = \"O\",\r\n\tP = \"P\",\r\n\tQ = \"Q\",\r\n\tR = \"R\",\r\n\tS = \"S\",\r\n\tT = \"T\",\r\n\tU = \"U\",\r\n\tV = \"V\",\r\n\tW = \"W\",\r\n\tX = \"X\",\r\n\tY = \"Y\",\r\n\tZ = \"Z\"\r\n\r\n\r\n}\r\nexport enum EnumFileImportCurrencyDenominations\r\n{ \r\n\tDollar = \"Dollar\",\r\n\tCent = \"Cent\"\r\n\r\n\r\n}\r\nexport enum EnumFileImportRowsSortOrders\r\n{ \r\n\tAscending = \"Ascending\",\r\n\tDescending = \"Descending\"\r\n\r\n\r\n}\r\nexport enum EnumAdminActivityRecordType\r\n{ \r\n\tViewOrganization = \"ViewOrganization\",\r\n\tLoginImpersonation = \"LoginImpersonation\",\r\n\tUndefined = \"Undefined\"\r\n\r\n\r\n}\r\nexport enum EnumAdminAccessRequestStatus\r\n{ \r\n\tRequested = \"Requested\",\r\n\tApproved = \"Approved\",\r\n\tDenied = \"Denied\",\r\n\tExpired = \"Expired\",\r\n\tCanceled = \"Canceled\",\r\n\tUndefined = \"Undefined\"\r\n\r\n\r\n}\r\nexport enum EnumAdminAccessRequestDurationType\r\n{ \r\n\tMinutes30 = \"Minutes30\",\r\n\tHours2 = \"Hours2\",\r\n\tHours4 = \"Hours4\",\r\n\tHours12 = \"Hours12\",\r\n\tHours24 = \"Hours24\",\r\n\tDays7 = \"Days7\",\r\n\tDays30 = \"Days30\"\r\n\r\n\r\n}\r\nexport enum EnumJournalEntryStatuses\r\n{ \r\n\tDraft = \"Draft\",\r\n\tSkippedAlreadyReconcilled = \"SkippedAlreadyReconcilled\",\r\n\tException = \"Exception\",\r\n\tPosted = \"Posted\",\r\n\tPostedInJournalVoucher = \"PostedInJournalVoucher\",\r\n\tPostedAndReconcilled = \"PostedAndReconcilled\",\r\n\tExportedManually = \"ExportedManually\"\r\n\r\n\r\n}\r\nexport enum EnumBookingAccountSelectionMethods\r\n{ \r\n\tTextInput = \"TextInput\",\r\n\tListRecommend = \"ListRecommend\",\r\n\tListValidate = \"ListValidate\"\r\n\r\n\r\n}\r\nexport enum EnumBillingContractViewSubmodules\r\n{ \r\n\tCompanies = \"Companies\",\r\n\tAccounts = \"Accounts\",\r\n\tUsers = \"Users\"\r\n\r\n\r\n}\r\nexport enum EnumBankPassTwoFactorMethod\r\n{ \r\n\tNone = \"None\",\r\n\tDedicatedPhone = \"DedicatedPhone\",\r\n\tCustomerManualEntry = \"CustomerManualEntry\"\r\n\r\n\r\n}\r\nexport enum EnumOtpProcessingState\r\n{ \r\n\tInitializing = \"Initializing\",\r\n\tWaitingForSMS = \"WaitingForSMS\",\r\n\tNoSMSRequired = \"NoSMSRequired\"\r\n\r\n\r\n}\r\nexport enum EnumNotificationBalanceSummaryType\r\n{ \r\n\tNone = \"None\",\r\n\tTotal = \"Total\",\r\n\tCurrentOnly = \"CurrentOnly\"\r\n\r\n\r\n}\r\nexport enum EnumLanguage\r\n{ \r\n\tHebrew = \"Hebrew\",\r\n\tEnglish = \"English\"\r\n\r\n\r\n}\r\nexport enum EnumLoanPaymentInterestPrincipalType\r\n{ \r\n\tInterestPrincipal = \"InterestPrincipal\",\r\n\tInterest = \"Interest\",\r\n\tPrincipal = \"Principal\",\r\n\tPrincipalAcumulation = \"PrincipalAcumulation\"\r\n\r\n\r\n}\r\nexport enum EnumFilterRelateEntities\r\n{ \r\n\tOrganization = \"Organization\",\r\n\tCompany = \"Company\",\r\n\tAccount = \"Account\",\r\n\tBookingAccount = \"BookingAccount\",\r\n\tCustomField = \"CustomField\",\r\n\tNone = \"None\"\r\n\r\n\r\n}\r\nexport enum EnumUserAllowOptions\r\n{ \r\n\tReports = \"Reports\",\r\n\tSettings = \"Settings\",\r\n\tLoans = \"Loans\",\r\n\tCCProcessing = \"CCProcessing\",\r\n\tSyncLogs = \"SyncLogs\",\r\n\tAccountingReports = \"AccountingReports\",\r\n\tCashflow = \"Cashflow\",\r\n\tNone = \"None\"\r\n\r\n\r\n}\r\nexport enum EnumPostingTemplateBookingAccountTypes\r\n{ \r\n\tCustom = \"Custom\",\r\n\tLedgerAccount = \"LedgerAccount\",\r\n\tBusinessPartner = \"BusinessPartner\"\r\n\r\n\r\n}\r\nexport enum EnumExecutionMode\r\n{ \r\n\tNormal = \"Normal\",\r\n\tRecovery = \"Recovery\",\r\n\tDownloadRequest = \"DownloadRequest\",\r\n\tDownloadRequestByPass = \"DownloadRequestByPass\",\r\n\tCityBank = \"CityBank\",\r\n\tCategorize = \"Categorize\",\r\n\tRates = \"Rates\",\r\n\tNotifyBalanceSync = \"NotifyBalanceSync\",\r\n\tNotifyBalanceSyncReq = \"NotifyBalanceSyncReq\",\r\n\tNotifyBankPassProblem = \"NotifyBankPassProblem\",\r\n\tNotifyBankPassWrong = \"NotifyBankPassWrong\",\r\n\tUploadSftp = \"UploadSftp\",\r\n\tRemoveData = \"RemoveData\",\r\n\tStoreKey = \"StoreKey\",\r\n\tAutoPostPayment = \"AutoPostPayment\",\r\n\tUploadRequests = \"UploadRequests\"\r\n\r\n\r\n}\r\nexport enum EnumDownloadRetryStatus\r\n{ \r\n\tNew = \"New\",\r\n\tDone = \"Done\"\r\n\r\n\r\n}\r\nexport enum EnumRelevantFilteringTypes\r\n{ \r\n\tNone = \"None\",\r\n\tCompanies = \"Companies\",\r\n\tAccounts = \"Accounts\"\r\n\r\n\r\n}\r\nexport enum EnumReplicationRequestStatus\r\n{ \r\n\tPending = \"Pending\",\r\n\tInProcess = \"InProcess\",\r\n\tFailed = \"Failed\",\r\n\tSuccess = \"Success\"\r\n\r\n\r\n}\r\nexport enum EnumBillingContractsReportModule\r\n{ \r\n\tBase = \"Base\",\r\n\tJournalEntries = \"JournalEntries\",\r\n\tCashflow = \"Cashflow\",\r\n\tLoans = \"Loans\"\r\n\r\n\r\n}\r\nexport enum EnumIncomingPaymentStatus\r\n{ \r\n\tMatchNone = \"MatchNone\",\r\n\tMatchBusinessPartner = \"MatchBusinessPartner\",\r\n\tMatchFull = \"MatchFull\",\r\n\tPending = \"Pending\",\r\n\tPosted = \"Posted\",\r\n\tHandleManually = \"HandleManually\",\r\n\tException = \"Exception\",\r\n\tSaved = \"Saved\",\r\n\tIrrelevant = \"Irrelevant\",\r\n\tUndefined = \"Undefined\"\r\n\r\n\r\n}\r\nexport enum EnumIncomingPaymentInvoiceLineTypes\r\n{ \r\n\tDocument = \"Document\",\r\n\tAccountingJournalEntry = \"AccountingJournalEntry\"\r\n\r\n\r\n}\r\nexport enum EnumIncomingPaymentDocumentType\r\n{ \r\n\tInvoice = \"Invoice\",\r\n\tRefund = \"Refund\",\r\n\tJournalEntry = \"JournalEntry\"\r\n\r\n\r\n}\r\nexport enum EnumIncomingPaymentUploadLevel\r\n{ \r\n\tNone = \"None\",\r\n\tIncomingPayment = \"IncomingPayment\",\r\n\tIncomingPaymentAndReconcilliation = \"IncomingPaymentAndReconcilliation\"\r\n\r\n\r\n}\r\nexport enum EnumConsentStatuses\r\n{ \r\n\tInitialized = \"Initialized\",\r\n\tRequested = \"Requested\",\r\n\tErrorObtaining = \"ErrorObtaining\",\r\n\tGrantedAuthorization = \"GrantedAuthorization\",\r\n\tGrantedAccess = \"GrantedAccess\",\r\n\tErrorInRefresh = \"ErrorInRefresh\",\r\n\tReplacedByNewer = \"ReplacedByNewer\",\r\n\tLoginRequired = \"LoginRequired\",\r\n\tLocked = \"Locked\",\r\n\tNotReady = \"NotReady\",\r\n\tInstitutionError = \"InstitutionError\",\r\n\tErrorChecking = \"ErrorChecking\",\r\n\tNotSupported = \"NotSupported\",\r\n\tGenericError = \"GenericError\",\r\n\tRevoked = \"Revoked\",\r\n\tInvalidToken = \"InvalidToken\",\r\n\tInvalidApiKeys = \"InvalidApiKeys\",\r\n\tExpired = \"Expired\"\r\n\r\n\r\n}\r\nexport enum EnumPlaidAvailableProducts\r\n{ \r\n\tassets = \"assets\",\r\n\tauth = \"auth\",\r\n\tbalance = \"balance\",\r\n\tsignal = \"signal\",\r\n\tidentity = \"identity\",\r\n\tidentity_match = \"identity_match\",\r\n\tincome_verification = \"income_verification\",\r\n\tinvestments = \"investments\",\r\n\tinvestments_auth = \"investments_auth\",\r\n\tliabilities = \"liabilities\",\r\n\trecurring_transactions = \"recurring_transactions\",\r\n\tstatements = \"statements\",\r\n\ttransfer = \"transfer\"\r\n\r\n\r\n}\r\nexport enum EnumPlaidProducts\r\n{ \r\n\ttransactions = \"transactions\"\r\n\r\n\r\n}\r\nexport enum EnumBankPassAccessTypes\r\n{ \r\n\tScrapping = \"Scrapping\",\r\n\tFileImport = \"FileImport\",\r\n\tPSD = \"PSD\",\r\n\tPlaid = \"Plaid\"\r\n\r\n\r\n}\r\nexport enum EnumBankPassAutoDiscoverModes\r\n{ \r\n\tNone = \"None\",\r\n\tOnDemand = \"OnDemand\",\r\n\tAutomatic = \"Automatic\"\r\n\r\n\r\n}\r\nexport enum EnumPeriod\r\n{ \r\n\tDay = \"Day\",\r\n\tMonth = \"Month\"\r\n\r\n\r\n}\r\nexport enum EnumJournalExportType\r\n{ \r\n\tAutomatic = \"Automatic\",\r\n\tMovein1 = \"Movein1\",\r\n\tMovein2 = \"Movein2\"\r\n\r\n\r\n}\r\nexport enum EnumUploadType\r\n{ \r\n\tNew = \"New\",\r\n\tDates = \"Dates\"\r\n\r\n\r\n}\r\nexport enum EnumSumSide\r\n{ \r\n\tDebit = \"Debit\",\r\n\tCredit = \"Credit\",\r\n\tUnknown = \"Unknown\"\r\n\r\n\r\n}\r\nexport enum EnumLoanHandlingType\r\n{ \r\n\tLoansModule = \"LoansModule\",\r\n\tBankInformation = \"BankInformation\",\r\n\tCombine = \"Combine\",\r\n\tUnknown = \"Unknown\"\r\n\r\n\r\n}\r\nexport enum EnumExportSFTPGroupingMode\r\n{ \r\n\tSingle = \"Single\",\r\n\tPerBookingAccount = \"PerBookingAccount\",\r\n\tPerAccountSubtype = \"PerAccountSubtype\",\r\n\tPerCompany = \"PerCompany\",\r\n\tUnknown = \"Unknown\"\r\n\r\n\r\n}\r\nexport enum EnumCategoryClassificationFieldType\r\n{ \r\n\tName = \"Name\",\r\n\tType = \"Type\",\r\n\tLinkageType = \"LinkageType\"\r\n\r\n\r\n}\r\nexport enum EnumCategoryType\r\n{ \r\n\tTransaction = \"Transaction\",\r\n\tDeposit = \"Deposit\",\r\n\tLoan = \"Loan\",\r\n\tStock = \"Stock\",\r\n\tGuarantee = \"Guarantee\"\r\n\r\n\r\n}\r\nexport enum EnumExternalAccountMappingStatus\r\n{ \r\n\tMapped = \"Mapped\",\r\n\tNotMapped = \"NotMapped\",\r\n\tMappedInAnother = \"MappedInAnother\"\r\n\r\n\r\n}\r\n \r\n\r\nexport const Enums = {\r\n \tEnumSystemOptionsZ: EnumSystemOptionsZ,\r\n\tEnumCredentialTypes: EnumCredentialTypes,\r\n\tEnumDownloadTaskStatuses: EnumDownloadTaskStatuses,\r\n\tEnumDownloadStatuses: EnumDownloadStatuses,\r\n\tEnumDownloadRequestStatuses: EnumDownloadRequestStatuses,\r\n\tEnumDownloadStepStatuses: EnumDownloadStepStatuses,\r\n\tEnumJobStatuses: EnumJobStatuses,\r\n\tEnumBatchStatuses: EnumBatchStatuses,\r\n\tEnumUploadStatuses: EnumUploadStatuses,\r\n\tEnumSnapthotsStatuses: EnumSnapthotsStatuses,\r\n\tEnumReplicationStatuses: EnumReplicationStatuses,\r\n\tEnumBankGroups: EnumBankGroups,\r\n\tEnumBanks: EnumBanks,\r\n\tEnumBalanceDetailsSortType: EnumBalanceDetailsSortType,\r\n\tEnumBookingAccountSubtypes: EnumBookingAccountSubtypes,\r\n\tEnumBookingAccountStockTypes: EnumBookingAccountStockTypes,\r\n\tEnumBookingAccountDepositTypes: EnumBookingAccountDepositTypes,\r\n\tEnumAccountingSoftwares: EnumAccountingSoftwares,\r\n\tEnumUploaderType: EnumUploaderType,\r\n\tEnumUserNotificationMethods: EnumUserNotificationMethods,\r\n\tEnumTransactionTypes: EnumTransactionTypes,\r\n\tEnumBankChargeType: EnumBankChargeType,\r\n\tEnumOrganizationChildEntityTypes: EnumOrganizationChildEntityTypes,\r\n\tEnumCompanyChildEntityTypes: EnumCompanyChildEntityTypes,\r\n\tEnumDashboardGroupBy: EnumDashboardGroupBy,\r\n\tEnumBalanceNotificationGrouping: EnumBalanceNotificationGrouping,\r\n\tEnumEntityTypes: EnumEntityTypes,\r\n\tEnumBankPassCredentialValidity: EnumBankPassCredentialValidity,\r\n\tEnumClassificarionRuleFieldType: EnumClassificarionRuleFieldType,\r\n\tEnumClassificarionRuleMatchType: EnumClassificarionRuleMatchType,\r\n\tEnumMatchingRelationship: EnumMatchingRelationship,\r\n\tEnumBalanceHistoryReportMode: EnumBalanceHistoryReportMode,\r\n\tEnumForecastSystemSource: EnumForecastSystemSource,\r\n\tEnumAccountingDocumentType: EnumAccountingDocumentType,\r\n\tEnumPeriodType: EnumPeriodType,\r\n\tEnumIncreaseType: EnumIncreaseType,\r\n\tEnumSide: EnumSide,\r\n\tEnumLoanSide: EnumLoanSide,\r\n\tEnumSource: EnumSource,\r\n\tEnumForecastDateRelevance: EnumForecastDateRelevance,\r\n\tEnumSummaryLevel: EnumSummaryLevel,\r\n\tEnumFutureForecastGroupBy: EnumFutureForecastGroupBy,\r\n\tEnumCashflowSummarizedAggregationLevel: EnumCashflowSummarizedAggregationLevel,\r\n\tEnumUserAuthorizationType: EnumUserAuthorizationType,\r\n\tEnumNotificationRequestStatuses: EnumNotificationRequestStatuses,\r\n\tEnumShowInCurrencyOptions: EnumShowInCurrencyOptions,\r\n\tEnumExportType: EnumExportType,\r\n\tEnumPositiveNegative: EnumPositiveNegative,\r\n\tEnumNotificationTemplateSectionFields: EnumNotificationTemplateSectionFields,\r\n\tEnumNotificationTemplateSectionType: EnumNotificationTemplateSectionType,\r\n\tEnumYesNo: EnumYesNo,\r\n\tEnumDownloadFailureReviewStatus: EnumDownloadFailureReviewStatus,\r\n\tEnumUploadRequestStatuses: EnumUploadRequestStatuses,\r\n\tEnumBankTypes: EnumBankTypes,\r\n\tEnumUploadResult: EnumUploadResult,\r\n\tEnumReplicationObjectTypes: EnumReplicationObjectTypes,\r\n\tEnumPaymentMeansTypes: EnumPaymentMeansTypes,\r\n\tEnumInterestType: EnumInterestType,\r\n\tEnumAmortizationType: EnumAmortizationType,\r\n\tEnumLoanStatus: EnumLoanStatus,\r\n\tEnumLoanPaymentFrequencyType: EnumLoanPaymentFrequencyType,\r\n\tEnumRecommendationPeriodType: EnumRecommendationPeriodType,\r\n\tEnumLoanInterestPeriodCalculationType: EnumLoanInterestPeriodCalculationType,\r\n\tEnumDocumentType: EnumDocumentType,\r\n\tEnumJournalEntryDocumentType: EnumJournalEntryDocumentType,\r\n\tEnumPredefinedNotificationTemplates: EnumPredefinedNotificationTemplates,\r\n\tEnumVisibilitySetting: EnumVisibilitySetting,\r\n\tEnumCustomFieldsetFieldInputType: EnumCustomFieldsetFieldInputType,\r\n\tEnumExpenseStatus: EnumExpenseStatus,\r\n\tEnumSecurityType: EnumSecurityType,\r\n\tEnumSecurityStatus: EnumSecurityStatus,\r\n\tEnumLoanPostPaymentRecalculationOptions: EnumLoanPostPaymentRecalculationOptions,\r\n\tEnumFinancialReportDateType: EnumFinancialReportDateType,\r\n\tEnumFinancialReportType: EnumFinancialReportType,\r\n\tEnumFinancialReportCurrencyType: EnumFinancialReportCurrencyType,\r\n\tEnumFinancialReportRangeType: EnumFinancialReportRangeType,\r\n\tEnumFinancialReportNodeEntityType: EnumFinancialReportNodeEntityType,\r\n\tEnumFinancialReportRootNodesTypes: EnumFinancialReportRootNodesTypes,\r\n\tEnumDataExportType: EnumDataExportType,\r\n\tEnumLedgerAccountType: EnumLedgerAccountType,\r\n\tEnumJournalEntryCurrencyTypes: EnumJournalEntryCurrencyTypes,\r\n\tEnumExportTransactionsMethod: EnumExportTransactionsMethod,\r\n\tEnumChequeTypes: EnumChequeTypes,\r\n\tEnumFutureChequeStatus: EnumFutureChequeStatus,\r\n\tEnumCCProcessingCompanies: EnumCCProcessingCompanies,\r\n\tEnumCCBrands: EnumCCBrands,\r\n\tEnumCCInvoiceStatuses: EnumCCInvoiceStatuses,\r\n\tEnumCCTransferStatuses: EnumCCTransferStatuses,\r\n\tEnumCCInvoiceParseResults: EnumCCInvoiceParseResults,\r\n\tEnumPDFDocumnetType: EnumPDFDocumnetType,\r\n\tEnumApplyToBookingAccountsTypes: EnumApplyToBookingAccountsTypes,\r\n\tEnumNoteFieldTypes: EnumNoteFieldTypes,\r\n\tEnumNoteMatchTypes: EnumNoteMatchTypes,\r\n\tEnumNotesExportAdjustments: EnumNotesExportAdjustments,\r\n\tEnumAccountFullNameDisplayType: EnumAccountFullNameDisplayType,\r\n\tEnumJournalEntryUploadLevel: EnumJournalEntryUploadLevel,\r\n\tEnumJournalEntrySources: EnumJournalEntrySources,\r\n\tEnumFileImportEncodings: EnumFileImportEncodings,\r\n\tEnumFileImportTypes: EnumFileImportTypes,\r\n\tEnumFileImportRowDelimiters: EnumFileImportRowDelimiters,\r\n\tEnumFileImportAccountMappingTypes: EnumFileImportAccountMappingTypes,\r\n\tEnumGenerationTypeJournalEntry: EnumGenerationTypeJournalEntry,\r\n\tEnumFileImportColumns: EnumFileImportColumns,\r\n\tEnumFileImportCurrencyDenominations: EnumFileImportCurrencyDenominations,\r\n\tEnumFileImportRowsSortOrders: EnumFileImportRowsSortOrders,\r\n\tEnumAdminActivityRecordType: EnumAdminActivityRecordType,\r\n\tEnumAdminAccessRequestStatus: EnumAdminAccessRequestStatus,\r\n\tEnumAdminAccessRequestDurationType: EnumAdminAccessRequestDurationType,\r\n\tEnumJournalEntryStatuses: EnumJournalEntryStatuses,\r\n\tEnumBookingAccountSelectionMethods: EnumBookingAccountSelectionMethods,\r\n\tEnumBillingContractViewSubmodules: EnumBillingContractViewSubmodules,\r\n\tEnumBankPassTwoFactorMethod: EnumBankPassTwoFactorMethod,\r\n\tEnumOtpProcessingState: EnumOtpProcessingState,\r\n\tEnumNotificationBalanceSummaryType: EnumNotificationBalanceSummaryType,\r\n\tEnumLanguage: EnumLanguage,\r\n\tEnumLoanPaymentInterestPrincipalType: EnumLoanPaymentInterestPrincipalType,\r\n\tEnumFilterRelateEntities: EnumFilterRelateEntities,\r\n\tEnumUserAllowOptions: EnumUserAllowOptions,\r\n\tEnumPostingTemplateBookingAccountTypes: EnumPostingTemplateBookingAccountTypes,\r\n\tEnumExecutionMode: EnumExecutionMode,\r\n\tEnumDownloadRetryStatus: EnumDownloadRetryStatus,\r\n\tEnumRelevantFilteringTypes: EnumRelevantFilteringTypes,\r\n\tEnumReplicationRequestStatus: EnumReplicationRequestStatus,\r\n\tEnumBillingContractsReportModule: EnumBillingContractsReportModule,\r\n\tEnumIncomingPaymentStatus: EnumIncomingPaymentStatus,\r\n\tEnumIncomingPaymentInvoiceLineTypes: EnumIncomingPaymentInvoiceLineTypes,\r\n\tEnumIncomingPaymentDocumentType: EnumIncomingPaymentDocumentType,\r\n\tEnumIncomingPaymentUploadLevel: EnumIncomingPaymentUploadLevel,\r\n\tEnumConsentStatuses: EnumConsentStatuses,\r\n\tEnumPlaidAvailableProducts: EnumPlaidAvailableProducts,\r\n\tEnumPlaidProducts: EnumPlaidProducts,\r\n\tEnumBankPassAccessTypes: EnumBankPassAccessTypes,\r\n\tEnumBankPassAutoDiscoverModes: EnumBankPassAutoDiscoverModes,\r\n\tEnumPeriod: EnumPeriod,\r\n\tEnumJournalExportType: EnumJournalExportType,\r\n\tEnumUploadType: EnumUploadType,\r\n\tEnumSumSide: EnumSumSide,\r\n\tEnumLoanHandlingType: EnumLoanHandlingType,\r\n\tEnumExportSFTPGroupingMode: EnumExportSFTPGroupingMode,\r\n\tEnumCategoryClassificationFieldType: EnumCategoryClassificationFieldType,\r\n\tEnumCategoryType: EnumCategoryType,\r\n\tEnumExternalAccountMappingStatus: EnumExternalAccountMappingStatus,\r\n};\r\n\r\n\r\nexport enum EnumDetailsResponseStatus\r\n{ \r\n\tBalanceOK = \"BalanceOK\",\r\n\tBalanceImplicit = \"BalanceImplicit\",\r\n\tZeroBalance = \"ZeroBalance\",\r\n\tNoBalanceInfo = \"NoBalanceInfo\"\r\n\r\n\r\n}\r\nexport enum EnumNotificationScheduleType\r\n{ \r\n\tDailyWeekly = \"DailyWeekly\",\r\n\tMonthly = \"Monthly\",\r\n\tYearly = \"Yearly\"\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 { EnumTransactionTypes } from './../enums';\r\nimport { EnumBankChargeType } from './../enums';\r\nexport class Transaction extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'Transaction';\r\n }\r\n \r\n public BookingAccountID: number; \r\n public DownloadID: number; \r\n public TransactionCategoryID: number; \r\n public UploadID: number; \r\n public Debit: number; \r\n public Credit: number; \r\n public Balance: number; \r\n public Date: Date; \r\n public Reference: string; \r\n public Notes1: string; \r\n public Notes2: string; \r\n public OriginalCurrency: string; \r\n public OriginalSum: number; \r\n public OriginDate: Date; \r\n public JournalEntryID: number; \r\n public IsChequesExist: boolean; \r\n public IsMultiPayment: number; \r\n public BankChargeDate: Date; \r\n public TransactionType: EnumTransactionTypes; \r\n public BalanceID: number; \r\n public ReconciliationID: number; \r\n public BankChargeType: EnumBankChargeType; \r\n public IsTransactionCategoryManual: boolean; \r\n public RecurringForecastID: number; \r\n public IncomingPaymentID: number; \r\n public TempChequeId: number; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { Organization } from './../entities/organization.entity';\r\nimport { OrganizationGridView } from './../views/organizationgrid.view';\r\nimport { EnumBanks } from './../enums';\r\nimport { EnumBookingAccountSubtypes } from './../enums';\r\nimport { EnumDataExportType } from './../enums';\r\nimport { EnumOrganizationChildEntityTypes } from './../enums';\r\nimport { RecategorizeParams } from './../params/recategorize.param';\r\nimport { RegenarateJournalEntriesParams } from './../params/regenaratejournalentries.param';\r\nimport { ReconcileParams } from './../params/reconcile.param';\r\nimport { OrganizationWrapParams } from './../params/organizationwrap.param';\r\n@Injectable()\r\nexport class OrganizationEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"Organization\", api);}\r\n\t\r\n\r\n public ListGridViews(isShowOnlyAccessible: boolean, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'ListGridViews', {isShowOnlyAccessible: isShowOnlyAccessible, options:options?.GetLoadOptions()} );\r\n }\r\n\r\n public ListAccessible(options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'ListAccessible', options?.GetLoadOptions() );\r\n }\r\n\r\n public ListEx(LoadActive: boolean, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'ListEx', {LoadActive: LoadActive, options:options?.GetLoadOptions()} );\r\n }\r\n\r\n public GetChildObjectsCount(OrganizationID: number, ChildType: EnumOrganizationChildEntityTypes) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetChildObjectsCount', {OrganizationID: OrganizationID, ChildType: ChildType} );\r\n }\r\n\r\n public Recategorize(Params: RecategorizeParams) : Observable\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'Recategorize', Params, undefined );\r\n }\r\n\r\n public RegenarateJournalEntries(Params: RegenarateJournalEntriesParams) : Observable\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'RegenarateJournalEntries', Params, undefined );\r\n }\r\n\r\n public Reconciliation(Params: ReconcileParams) : Observable\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'Reconciliation', Params, undefined );\r\n }\r\n\r\n public GetAllowedBanks(OrganizationID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetAllowedBanks', {OrganizationID: OrganizationID} );\r\n }\r\n\r\n public GetRelevantBanks(OrganizationID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetRelevantBanks', {OrganizationID: OrganizationID} );\r\n }\r\n\r\n public GetRelevantBookingAccountSubtypes(OrganizationID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetRelevantBookingAccountSubtypes', {OrganizationID: OrganizationID} );\r\n }\r\n\r\n public GetRelevantCurrencies(OrganizationID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetRelevantCurrencies', {OrganizationID: OrganizationID} );\r\n }\r\n\r\n public GetRelevantExportTypes(OrganizationID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetRelevantExportTypes', {OrganizationID: OrganizationID} );\r\n }\r\n\r\n public RequestImmadiatelyReplication(Params: OrganizationWrapParams) : Observable\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'RequestImmadiatelyReplication', Params, undefined );\r\n }\r\n\r\n public GetActiveOrganizationsCount() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetActiveOrganizationsCount', undefined );\r\n }\r\n\r\n public GetLastDeploymentEntryId(OrganizationID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetLastDeploymentEntryId', {OrganizationID: OrganizationID} );\r\n }\r\n\r\n public GetLastBillingContractEntryId(OrganizationID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetLastBillingContractEntryId', {OrganizationID: OrganizationID} );\r\n }\r\n}\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { PostingTemplate } from './../entities/postingtemplate.entity';\r\nimport { PostingTemplateListParams } from './../params/postingtemplatelist.param';\r\n@Injectable()\r\nexport class PostingTemplateEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(api: APIGatewayService) {super(\"PostingTemplate\", api);}\r\n\t\r\n\r\n public ListEx(Params: PostingTemplateListParams, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListEx', Params, options?.GetLoadOptions() );\r\n }\r\n\r\n public GetActualTemplates(CategoryID: number, CompanyID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetActualTemplates', {CategoryID: CategoryID, CompanyID: CompanyID} );\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 { EnumBookingAccountSubtypes } from './../enums';\r\nimport { EnumBookingAccountStockTypes } from './../enums';\r\nimport { EnumBookingAccountDepositTypes } from './../enums';\r\nimport { EnumCCBrands } from './../enums';\r\nimport { EnumLoanHandlingType } from './../enums';\r\nexport class BookingAccount extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'BookingAccount';\r\n }\r\n \r\n public AccountID: number; \r\n public Subtype: EnumBookingAccountSubtypes; \r\n public ChildAccountNumber: string; \r\n public Currency: string; \r\n public BookingAccountCode: string; \r\n public DownloadStartDate: Date; \r\n public IsActiveDownload: boolean; \r\n public IsActiveUpload: boolean; \r\n public IsActiveCashFlow: boolean; \r\n public IsCCPostingAutoGenerate: boolean; \r\n public LoanBookingAccountCodePrincipal: string; \r\n public LoanBookingAccountCodePrincipalLinkage: string; \r\n public LoanBookingAccountCodeInterest: string; \r\n public LoanBookingAccountCodeInterestLinkage: string; \r\n public LoanBookingAccountCodeCommissions: string; \r\n public StockType: EnumBookingAccountStockTypes; \r\n public DepositType: EnumBookingAccountDepositTypes; \r\n public CC4Digits: string; \r\n public CCPayDay: number; \r\n public CCBrand: EnumCCBrands; \r\n public CCName: string; \r\n public ExportCode: string; \r\n public IsCCShowSplitInCashflow: boolean; \r\n public JournalEntryPostingStartDate: Date; \r\n public LoanHandlingType: EnumLoanHandlingType; \r\n public DisableSplitBankChargeByYear: boolean; \r\n public HasExternalAccountMapping: boolean; \r\n public BookingAccountName: string; \r\n public BookingAccountFullName: string; \r\n public AccountName: string; \r\n public CompanyName: string; \r\n public OrganizationID: number; \r\n public CompanyID: number; \r\n\tpublic CreatedBy: number;\r\n\tpublic CreatedDate: Date;\r\n}\r\n\r\n\r\n\r\n","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumPostingTemplateBookingAccountTypes } from './../enums';\r\nimport { EnumApplyToBookingAccountsTypes } from './../enums';\r\nimport { BookingAccount } from './../entities/bookingaccount.entity';\r\nexport class PostingTemplate extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'PostingTemplate';\r\n }\r\n \r\n public CompanyID: number; \r\n public Name: string; \r\n public Description: string; \r\n public BookingAccountCode: string; \r\n public BookingAccountType: EnumPostingTemplateBookingAccountTypes; \r\n public IsActive: boolean; \r\n public ValidFromDate: Date; \r\n public ValidUntilDate: Date; \r\n public TransactionCategoryID: number; \r\n public ApplyToBookingAccounts: EnumApplyToBookingAccountsTypes; \r\n public ApplyToBookingAccountsInCurrency: string; \r\n public NameWithCompany: string; \r\n public TransactionCategoryName: string; \r\n public OrganizationID: number; \r\n public BookingAccounts: PostingTemplateBookingAccount[] = []; \r\n\tpublic CreatedBy: number;\r\n\tpublic CreatedDate: Date;\r\n}\r\n\r\nexport class PostingTemplateBookingAccount extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'PostingTemplateBookingAccount';\r\n }\r\n \r\n public BookingAccountID: number; \r\n public BookingAccount: BookingAccount = new BookingAccount; \r\n public LineID: number;\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\nimport { EnumBanks } from './../enums';\r\nimport { AccountListParams } from './../params/accountlist.param';\r\nimport { EnumBankTypes } from './../enums';\r\nimport { AccountSaveParams } from './../params/accountsave.param';\r\nimport { RecategorizeParams } from './../params/recategorize.param';\r\nimport { RegenarateJournalEntriesParams } from './../params/regenaratejournalentries.param';\r\nimport { ReconcileParams } from './../params/reconcile.param';\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 public ListEx(Params: AccountListParams, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListEx', Params, options?.GetLoadOptions() );\r\n }\r\n\r\n public GetBanksByType(BankTypes: EnumBankTypes[]) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetBanksByType', {BankTypes: BankTypes} );\r\n }\r\n\r\n public IsBalancesExists(AccountID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'IsBalancesExists', {AccountID: AccountID} );\r\n }\r\n\r\n public HasPlaidBookingAccounts(AccountID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'HasPlaidBookingAccounts', {AccountID: AccountID} );\r\n }\r\n\r\n public SaveAccountDetails(Params: AccountSaveParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'SaveAccountDetails', Params, undefined );\r\n }\r\n\r\n public Recategorize(Params: RecategorizeParams) : Observable\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'Recategorize', Params, undefined );\r\n }\r\n\r\n public RegenarateJournalEntries(Params: RegenarateJournalEntriesParams) : Observable\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'RegenarateJournalEntries', Params, undefined );\r\n }\r\n\r\n public Reconciliation(Params: ReconcileParams) : Observable\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'Reconciliation', Params, undefined );\r\n }\r\n\r\n public GetByTransactionID(TransactionID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetByTransactionID', {TransactionID: TransactionID} );\r\n }\r\n}\r\n\r\n","import {Injectable} from '@angular/core';\r\nimport { EnumCredentialTypes, EnumUserAuthorizationType } from '@kraken/_proxy/enums';\r\nimport { UserInfo } from '@kraken/_proxy/entities/userinfo.entity';\r\nimport { BaseService } from '@m4u-angular/base/service/BaseService';\r\n\r\nenum EnumUserAccessFields {\r\n IsAllowSettings = 'IsAllowSettings',\r\n\tIsAllowReports = 'IsAllowReports',\r\n\tIsAllowSyncLogs = 'IsAllowSyncLogs',\r\n\tIsAllowLoans = 'IsAllowLoans',\r\n\tIsAllowCCProcessing = 'IsAllowCCProcessing',\r\n\tIsAllowCashflow = 'IsAllowCashflow',\r\n\tIsAllowExpenseManagement = 'IsAllowExpenseManagement',\r\n\tIsAllowAccountingReports = 'IsAllowAccountingReports'\r\n}\r\n\r\nenum EnumOrganizationLicenseFields {\r\n\tIsOrganizationLicensedForTransactionsUpload = 'IsOrganizationLicensedForTransactionsUpload',\r\n\tIsOrganizationLicensedForJournalEntries = 'IsOrganizationLicensedForJournalEntries',\r\n\tIsOrganizationLicensedForCashflow = 'IsOrganizationLicensedForCashflow',\r\n\tIsOrganizationLicensedForeignBanks = 'IsOrganizationLicensedForeignBanks', \r\n\tIsOrganizationLicensedForAccountingSync = 'IsOrganizationLicensedForAccountingSync',\r\n\tIsOrganizationLicensedForAdvancedReports = 'IsOrganizationLicensedForAdvancedReports',\r\n\tIsOrganizationLicensedForExpenseManagement = 'IsOrganizationLicensedForExpenseManagement',\r\n\tIsOrganizationLicensedForLoans = 'IsOrganizationLicensedForLoans',\r\n\tIsOrganizationLicensedForCreditCardProcessing = 'IsOrganizationLicensedForCreditCardProcessing',\r\n IsOrganizationAvailableForManualDataExport = 'IsOrganizationAvailableForManualDataExport',\r\n IsOrganizationLicensedForLedgerAccountsSync = 'IsOrganizationLicensedForLedgerAccountsSync',\r\n IsOrganizationLicensedForIncomingPaymentProcessing = 'IsOrganizationLicensedForIncomingPaymentProcessing',\r\n}\r\n\r\n@Injectable()\r\nexport class AccessService extends BaseService {\r\n constructor() {\r\n super();\r\n }\r\n\r\n get Info(): UserInfo {\r\n return this.UserInfo;\r\n }\r\n\r\n //#region Type\r\n\r\n public IsAdmin() {\r\n return this.Info?.Type === EnumCredentialTypes.Admin;\r\n }\r\n\r\n public IsUser() {\r\n return this.Info?.Type === EnumCredentialTypes.User;\r\n }\r\n\r\n public IsSuperAdmin() {\r\n return this.IsAdmin() && this.Info.IsSuperAdmin;\r\n }\r\n\r\n //#endregion\r\n\r\n //#region General\r\n\r\n public IsAllowSettings() {\r\n return this.IsAllow([EnumUserAccessFields.IsAllowSettings]);\r\n }\r\n\r\n public IsAllowReports() {\r\n return this.IsAllow([EnumUserAccessFields.IsAllowReports]);\r\n }\r\n\r\n public IsAllowAdvancedReports() {\r\n return this.IsAllow([EnumUserAccessFields.IsAllowReports],\r\n [EnumOrganizationLicenseFields.IsOrganizationLicensedForAdvancedReports]);\r\n }\r\n\r\n public IsAllowCCProcessing() {\r\n return this.IsAllow([EnumUserAccessFields.IsAllowReports, EnumUserAccessFields.IsAllowCCProcessing],\r\n [EnumOrganizationLicenseFields.IsOrganizationLicensedForCreditCardProcessing]);\r\n }\r\n\r\n public IsAllowAccountingReports() {\r\n return this.IsAllow([EnumUserAccessFields.IsAllowAccountingReports],\r\n [EnumOrganizationLicenseFields.IsOrganizationLicensedForAccountingSync]);\r\n }\r\n\r\n public IsAllowCashflow() {\r\n return this.IsAllow([EnumUserAccessFields.IsAllowCashflow],\r\n [EnumOrganizationLicenseFields.IsOrganizationLicensedForCashflow]);\r\n }\r\n\r\n public IsAllowLoans() {\r\n return this.IsAllow([EnumUserAccessFields.IsAllowLoans],\r\n [EnumOrganizationLicenseFields.IsOrganizationLicensedForLoans]);\r\n }\r\n\r\n public IsAllowExpenseManagement() {\r\n return this.IsAllow([EnumUserAccessFields.IsAllowExpenseManagement],\r\n [EnumOrganizationLicenseFields.IsOrganizationLicensedForExpenseManagement]);\r\n }\r\n\r\n public IsAllowForeignBanks() {\r\n return this.IsAllow([],\r\n [EnumOrganizationLicenseFields.IsOrganizationLicensedForeignBanks]);\r\n }\r\n\r\n public IsAllowSyncLogs() {\r\n return this.IsAllow([EnumUserAccessFields.IsAllowSyncLogs]);\r\n }\r\n\r\n public IsAllowOrganizationLevelEntities() {\r\n return !this.IsUser() || this.UserInfo.AuthorizationType === EnumUserAuthorizationType.All;\r\n }\r\n\r\n //#endregion\r\n\r\n //#region Custom\r\n\r\n public IsAllowDashboard() {\r\n return this.IsAllow();\r\n }\r\n\r\n public IsAllowJournalEntryReport() {\r\n if (this.IsAdmin()) return true;\r\n if (!this.IsUser()) return false;\r\n\r\n return this.Info.IsOrganizationLicensedForJournalEntries ||\r\n this.Info.IsOrganizationLicensedForLoans ||\r\n this.Info.IsOrganizationLicensedForCreditCardProcessing;\r\n }\r\n\r\n public IsAllowManualExport() {\r\n return this.IsAllow([EnumUserAccessFields.IsAllowSyncLogs],\r\n [EnumOrganizationLicenseFields.IsOrganizationAvailableForManualDataExport]);\r\n }\r\n\r\n public IsAllowUploads() {\r\n return this.IsAllow([EnumUserAccessFields.IsAllowSyncLogs],\r\n [EnumOrganizationLicenseFields.IsOrganizationLicensedForTransactionsUpload]);\r\n }\r\n\r\n public IsAllowReplications() {\r\n if (this.IsAdmin()) { \r\n return true; \r\n }\r\n\r\n const isAllow = this.IsAllow([EnumUserAccessFields.IsAllowSyncLogs]);\r\n if (!isAllow) { \r\n return false; \r\n }\r\n\r\n return this.Info.IsOrganizationLicensedForCashflow ||\r\n this.Info.IsOrganizationLicensedForAccountingSync ||\r\n this.Info.IsOrganizationLicensedForLedgerAccountsSync;\r\n }\r\n\r\n public IsAllowMyOrganizationForUser() {\r\n return this.IsUser() && this.Info.IsAllowSettings;\r\n }\r\n\r\n public IsAllowJournalEntryPosting() {\r\n return this.IsAllow(undefined, [EnumOrganizationLicenseFields.IsOrganizationLicensedForJournalEntries]);\r\n }\r\n\r\n public IsAllowAccountingPosting() : boolean {\r\n return this.IsAllowIncomingPaymentProcessing() || this.IsAllowJournalEntryReport();\r\n }\r\n\r\n public IsAllowIncomingPaymentProcessing() {\r\n return this.IsAllow(undefined, [EnumOrganizationLicenseFields.IsOrganizationLicensedForIncomingPaymentProcessing]);\r\n }\r\n\r\n public IsAllowEditFileImport(organizationID: number) {\r\n if (this.IsAdmin()) return true;\r\n\r\n return this.IsAllowSettings() && this.Info.OrganizationID === organizationID;\r\n }\r\n\r\n //#endregion\r\n\r\n IsAllowCreditCardProcessing() {\r\n return this.Info?.Type === EnumCredentialTypes.Admin \r\n || (this.Info?.IsOrganizationLicensedForCreditCardProcessing && this.Info.IsAllowCCProcessing);\r\n }\r\n\r\n private IsAllow(isAllowUserFields: EnumUserAccessFields[] = null, \r\n isLicensedOrganizationFields: EnumOrganizationLicenseFields[] = null) {\r\n if (this.IsAdmin()) return true;\r\n if (!this.IsUser()) return false;\r\n\r\n if (isAllowUserFields?.length > 0) {\r\n if (isAllowUserFields.some(x => !this.Info[x])) return false;\r\n }\r\n\r\n if (isLicensedOrganizationFields?.length > 0) {\r\n if (isLicensedOrganizationFields.some(x => !this.Info[x])) return false;\r\n }\r\n\r\n return true;\r\n }\r\n}","import { SysEventsService } from '@m4u-angular/core/framework/sysevents.service';\r\nimport { AppInjector } from '@m4u-angular/core/injector/injector.module';\r\n\r\nclass GlobalValues {\r\n\r\n private _organizationID: number;\r\n set OrganizationID(value: number) {\r\n if (this._organizationID === value) return;\r\n this._organizationID = value;\r\n const sysEvents = AppInjector.get(SysEventsService);\r\n sysEvents.ReloadMenuItems();\r\n }\r\n get OrganizationID() { return this._organizationID; }\r\n OrganizationDefaultCurrency: string;\r\n\r\n CompanyID: number = undefined;\r\n\r\n get Today(): Date { return new Date() };\r\n get Yesterday(): Date { return new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate() - 1) };\r\n get Tomorrow(): Date { return new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate() + 1) };\r\n get DayBeforeYesterday(): Date { return new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate() - 2) };\r\n get SevenDaysAgoDate(): Date { return new Date(this.Yesterday.getFullYear(), this.Yesterday.getMonth(), this.Yesterday.getDate() - 7) };\r\n get SevenDaysAfterDate(): Date { return new Date(this.Yesterday.getFullYear(), this.Yesterday.getMonth(), this.Yesterday.getDate() + 7) };\r\n get ThirtyDaysAgoDate(): Date { return new Date(this.Yesterday.getFullYear(), this.Yesterday.getMonth(), this.Yesterday.getDate() - 30) };\r\n get ThirtyDaysAfterDate(): Date { return new Date(this.Yesterday.getFullYear(), this.Yesterday.getMonth(), this.Yesterday.getDate() + 30) };\r\n get NinetyDaysAgoDate(): Date { return new Date(this.Yesterday.getFullYear(), this.Yesterday.getMonth(), this.Yesterday.getDate() - 90) };\r\n get NinetyDaysAfterDate(): Date { return new Date(this.Yesterday.getFullYear(), this.Yesterday.getMonth(), this.Yesterday.getDate() + 90) };\r\n get ThisMonthFirstDate(): Date { return new Date(new Date().getFullYear(), new Date().getMonth(), 1) };\r\n get ThisMonthLastDate(): Date { return new Date(new Date().getFullYear(), new Date().getMonth() + 1, 0) };\r\n get LastMonthFirstDate(): Date { return new Date(new Date().getFullYear(), new Date().getMonth() - 1, 1) };\r\n get LastMonthLastDate(): Date { return new Date(new Date().getFullYear(), new Date().getMonth(), 0) };\r\n get BeginningOfQuater(): Date { return new Date(new Date().getFullYear(), Math.floor(new Date().getMonth() / 3) * 3, 1) };\r\n get BeginningOfYear(): Date { return new Date(new Date().getFullYear(), 0, 1) };\r\n get BeginningOfLastYear(): Date { return new Date(new Date().getFullYear() - 1, 0, 1) };\r\n get ThisYearLastDate(): Date { return new Date(new Date().getFullYear(), 11, 31) };\r\n get LastQuarterLastDate(): Date { return new Date(new Date().getFullYear(), Math.floor(new Date().getMonth() / 3) * 3, 0) };\r\n get LastQuarterFirstDate(): Date { return new Date(new Date().getFullYear(), Math.floor(new Date().getMonth() / 3) * 3 - 3, 1) };\r\n get LastYearLastDate(): Date { return new Date(new Date().getFullYear(), 0, 0) };\r\n get LastYearFirstDate(): Date { return new Date(new Date().getFullYear() - 1, 0, 1) };\r\n get FirstQuarterFromDate(): Date { return this.BeginningOfYear };\r\n get FirstQuarterToDate(): Date { return new Date(new Date().getFullYear(), 2, 31) };\r\n get ThisQuarterLastDate(): Date { return new Date(new Date().getFullYear(), Math.floor(new Date().getMonth() / 3) * 3 + 3, 0) };\r\n get SecondQuarterFromDate(): Date { return new Date(new Date().getFullYear(), 3, 1) };\r\n get SecondQuarterToDate(): Date { return new Date(new Date().getFullYear(), 5, 30) };\r\n get ThirdQuarterFromDate(): Date { return new Date(new Date().getFullYear(), 6, 1) };\r\n get ThirdQuarterToDate(): Date { return new Date(new Date().getFullYear(), 8, 30) };\r\n get FourthQuarterFromDate(): Date { return new Date(new Date().getFullYear(), 9, 1) };\r\n get FourthQuarterToDate(): Date { return new Date(new Date().getFullYear(), 11, 31) };\r\n get DashboardPalette(): string[] { return ['#3B00ED', '#9C27B0', '#D81B60', '#FF9800', '#C0CA33', '#585A70', '#D81B60', '#7545C9', '#2196F3', '#00BCD5', '#009788', '#4CB050', '#8CC24A', '#CDDC39', '#F44236', '#795549', '#393939', '#767676'] };\r\n get ReportCreditColor(): string { return '#0E7B2C' };\r\n get ReportDebitColor(): string { return '#D1143E' };\r\n}\r\n\r\nexport var Globals = new GlobalValues();\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 { Transaction } from './../entities/transaction.entity';\r\nimport { TransactionView } from './../views/transaction.view';\r\nimport { TransactionGroupedView } from './../views/transactiongrouped.view';\r\nimport { CreditCardReportView } from './../views/creditcardreport.view';\r\nimport { TransactionSummaryGroupView } from './../views/transactionsummarygroup.view';\r\nimport { SetupJournalEntryGenerationParams } from './../params/setupjournalentrygeneration.param';\r\nimport { TransactionReportParams } from './../params/transactionreport.param';\r\nimport { LoanTransactionReportParams } from './../params/loantransactionreport.param';\r\nimport { SetupCategoryParams } from './../params/setupcategory.param';\r\nimport { CreateAndSetupCategoryParams } from './../params/createandsetupcategory.param';\r\n@Injectable()\r\nexport class TransactionEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"Transaction\", api);}\r\n\t\r\n\r\n public GetView(TransactionID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetView', {TransactionID: TransactionID} );\r\n }\r\n\r\n public ListEx(Params: TransactionReportParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListEx', Params, undefined );\r\n }\r\n\r\n public ListLoansTransactions(Params: LoanTransactionReportParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListLoansTransactions', Params, undefined );\r\n }\r\n\r\n public GetGroupedTransactions(Params: TransactionReportParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'GetGroupedTransactions', Params, undefined );\r\n }\r\n\r\n public GeCreditCardReportItems(Params: TransactionReportParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'GeCreditCardReportItems', Params, undefined );\r\n }\r\n\r\n public GetLastTransactionsGroupedByCategory(Params: TransactionReportParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'GetLastTransactionsGroupedByCategory', Params, undefined );\r\n }\r\n\r\n public SetupJournalEntryGeneration(Params: SetupJournalEntryGenerationParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'SetupJournalEntryGeneration', Params, undefined );\r\n }\r\n\r\n public GetNavigationFilters(transactionId: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetNavigationFilters', {transactionId: transactionId} );\r\n }\r\n\r\n public SetupCategory(Params: SetupCategoryParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'SetupCategory', Params, undefined );\r\n }\r\n\r\n public CreateandSetupCategory(Params: CreateAndSetupCategoryParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'CreateandSetupCategory', 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 { TransactionCategoryView } from './../views/transactioncategory.view';\r\nimport { ListTransactionCategoriesParams } from './../params/listtransactioncategories.param';\r\n@Injectable()\r\nexport class TransactionCategoryEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"TransactionCategory\", api);}\r\n\t\r\n\r\n public ListEx(Params: ListTransactionCategoriesParams, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListEx', Params, options?.GetLoadOptions() );\r\n }\r\n\r\n public ListCategories(Params: ListTransactionCategoriesParams, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListCategories', Params, options?.GetLoadOptions() );\r\n }\r\n\r\n public GetAdditionalData(EntryID: number, CompanyID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetAdditionalData', {EntryID: EntryID, CompanyID: CompanyID} );\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 { EnumJournalEntryUploadLevel } from './../enums';\r\nimport { EnumIncomingPaymentUploadLevel } from './../enums';\r\nimport { EnumAccountingSoftwares } from './../enums';\r\nexport class Company extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'Company';\r\n }\r\n \r\n public OrganizationID: number; \r\n public DeploymentID: number; \r\n public Name: string; \r\n public Nickname: string; \r\n public TaxRegistrationNumber: string; \r\n public DBName: string; \r\n public IsActive: boolean; \r\n public BookingAccountCodeVat: string; \r\n public BookingAccountCodeWorker: string; \r\n public IsSyncCashflow: boolean; \r\n public IsSyncAccounting: boolean; \r\n public IsSyncLedgerAccounts: boolean; \r\n public UseAutomaticReconciliation: boolean; \r\n public BillingContractID: number; \r\n public JournalEntryUploadLevel: EnumJournalEntryUploadLevel; \r\n public IncomingPaymentUploadLevel: EnumIncomingPaymentUploadLevel; \r\n public IncomingPaymentTolerance: number; \r\n public IsCashflowSourceCCIncomesActive: boolean; \r\n public IsCashflowSourceCCExpensesActive: boolean; \r\n public IsCashflowSourceLoansActive: boolean; \r\n public IsCashflowSourceDepositsActive: boolean; \r\n public IsCashflowSourceFutureChequesActive: boolean; \r\n public AccountingSoftware: EnumAccountingSoftwares; \r\n public IsHasAutomaticDeployment: boolean; \r\n public DeploymentName: string; \r\n public CompanyFullName: string; \r\n\tpublic CreatedBy: number;\r\n\tpublic CreatedDate: Date;\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Company } from './../entities/company.entity';\r\nexport class TransactionCategory extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'TransactionCategory';\r\n }\r\n \r\n public CompanyID: number; \r\n public Name: string; \r\n public Description: string; \r\n public IsActive: boolean; \r\n public Icon: string; \r\n public Company: Company = new Company; \r\n\tpublic CreatedBy: number;\r\n\tpublic CreatedDate: Date;\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumBankGroups } from './../enums';\r\nimport { EnumMatchingRelationship } from './../enums';\r\nimport { Company } from './../entities/company.entity';\r\nimport { TransactionCategory } from './../entities/transactioncategory.entity';\r\nimport { EnumClassificarionRuleFieldType } from './../enums';\r\nimport { EnumClassificarionRuleMatchType } from './../enums';\r\nexport class TransactionClassificationRule extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'TransactionClassificationRule';\r\n }\r\n \r\n public CompanyID: number; \r\n public Name: string; \r\n public Description: string; \r\n public Priority: number; \r\n public BankGroup: EnumBankGroups; \r\n public MaxSum: number; \r\n public MinSum: number; \r\n public TransactionCategoryID: number; \r\n public IsActive: boolean; \r\n public MatchingRelationship: EnumMatchingRelationship; \r\n public DateFrom: Date; \r\n public DateTo: Date; \r\n public IsDebit: boolean; \r\n public IsCredit: boolean; \r\n public IsApplyToSubTypeCurrent: boolean; \r\n public IsApplyToSubTypeCredit: boolean; \r\n public Company: Company = new Company; \r\n public TransactionCategory: TransactionCategory = new TransactionCategory; \r\n public Lines: ClassificationRuleLine[] = []; \r\n\tpublic CreatedBy: number;\r\n\tpublic CreatedDate: Date;\r\n}\r\n\r\nexport class ClassificationRuleLine extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ClassificationRuleLine';\r\n }\r\n \r\n public MatchData: string; \r\n public FieldType: EnumClassificarionRuleFieldType; \r\n public MatchType: EnumClassificarionRuleMatchType; \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 { TransactionCategory } from './../entities/transactioncategory.entity';\r\nimport { TransactionClassificationRule } from './../entities/transactionclassificationrule.entity';\r\nimport { PostingTemplate } from './../entities/postingtemplate.entity';\r\nexport class SetupJournalEntryGenerationParams extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'SetupJournalEntryGenerationParams';\r\n }\r\n \r\n public Category: TransactionCategory = new TransactionCategory; \r\n public ClassificationRule: TransactionClassificationRule = new TransactionClassificationRule; \r\n public Template: PostingTemplate = new PostingTemplate; \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 { TransactionCategory } from './../entities/transactioncategory.entity';\r\nexport class CreateAndSetupCategoryParams extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'CreateAndSetupCategoryParams';\r\n }\r\n \r\n public Category: TransactionCategory = new TransactionCategory; \r\n public TransactionID: 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 { EnumCategoryType } from './../enums';\r\nexport class RecategorizeParams extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'RecategorizeParams';\r\n }\r\n \r\n public OrganizationID: number; \r\n public CompanyID: number; \r\n public AccountID: number; \r\n public BookingAccountID: number; \r\n public CategoryType: EnumCategoryType; \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 { EnumGenerationTypeJournalEntry } from './../enums';\r\nexport class RegenarateJournalEntriesParams extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'RegenarateJournalEntriesParams';\r\n }\r\n \r\n public OrganizationID: number; \r\n public CompanyID: number; \r\n public AccountID: number; \r\n public BookingAccountID: number; \r\n public DateFrom: Date; \r\n public DateUntil: Date; \r\n public TransactionCategories: number[]; \r\n public PostingTemplates: number[]; \r\n public GenerationType: EnumGenerationTypeJournalEntry; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { Transaction } from '@kraken/_proxy/entities/transaction.entity';\r\nimport { OrganizationEndpoint } from '@kraken/_proxy/endpoints/organization.endpoint';\r\nimport { PostingTemplateEndpoint } from '@kraken/_proxy/endpoints/postingtemplate.endpoint';\r\nimport { PostingTemplate, PostingTemplateBookingAccount } from '@kraken/_proxy/entities/postingtemplate.entity';\r\nimport { AccountEndpoint } from '@kraken/_proxy/endpoints/account.endpoint';\r\nimport { Account } from '@kraken/_proxy/entities/account.entity';\r\nimport { EnumApplyToBookingAccountsTypes, EnumCategoryType, EnumClassificarionRuleFieldType, EnumClassificarionRuleMatchType, \r\n EnumMatchingRelationship, EnumPostingTemplateBookingAccountTypes, EnumYesNo } from './../../../_proxy/enums';\r\nimport { Globals } from '@kraken/_globals';\r\nimport { TransactionEndpoint } from '@kraken/_proxy/endpoints/transaction.endpoint';\r\nimport { TransactionView } from '@kraken/_proxy/views/transaction.view';\r\nimport { TransactionCategoryEndpoint } from '@kraken/_proxy/endpoints/transactioncategory.endpoint';\r\nimport { TransactionCategory } from '@kraken/_proxy/entities/transactioncategory.entity';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState, BaseEntity, BaseResponse, BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { Component } from '@angular/core';\r\nimport { of, zip, Subscription, map } from 'rxjs';\r\nimport { SetupJournalEntryGenerationParams } from '@kraken/_proxy/params/setupjournalentrygeneration.param';\r\nimport { CreateAndSetupCategoryParams } from '@kraken/_proxy/params/createandsetupcategory.param';\r\nimport { RecategorizeParams } from '@kraken/_proxy/params/recategorize.param';\r\nimport { RegenarateJournalEntriesParams } from '@kraken/_proxy/params/regenaratejournalentries.param';\r\nimport { AccessService } from '@kraken/services/access.service';\r\nimport { ClassificationRuleLine, TransactionClassificationRule } from '@kraken/_proxy/entities/transactionclassificationrule.entity';\r\nimport { TransactionClassificationRuleEndpoint } from '@kraken/_proxy/endpoints/transactionclassificationrule.endpoint';\r\nimport { SetupCategoryParams } from '@kraken/_proxy/params/setupcategory.param';\r\n\r\nenum EnumCategorizationType {\r\n NewCategory,\r\n OldCategory,\r\n TemplateOnly\r\n}\r\nclass State extends BaseState {\r\n CompanyID: number;\r\n TransactionID: number;\r\n CategoryID: number;\r\n CategoryName: string;\r\n\r\n Type: EnumCategorizationType;\r\n EnumCategorizationTypes = EnumCategorizationType;\r\n IsAddPostingTemplate: boolean;\r\n\r\n Transaction: TransactionView;\r\n Category: TransactionCategory;\r\n ClassificationRule: TransactionClassificationRule;\r\n Template: PostingTemplate;\r\n Account: Account;\r\n AppropriateTemplate: PostingTemplate;\r\n\r\n IsShowSelectionTemplate: boolean;\r\n VisibleLoadPanel: boolean;\r\n\r\n IsPastTransactions = true;\r\n IsFutureTransactions = true;\r\n IsOneTime = false;\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-transaction-categorization-setup',\r\n templateUrl: './transaction-categorization-setup.component.html',\r\n styleUrls: ['./transaction-categorization-setup.component.scss']\r\n})\r\nexport class TransactionCategorizationSetupComponent extends BasePageComponent {\r\n\r\n private _subscriptionInit: Subscription;\r\n\r\n public get OrganizationID() { return Globals.OrganizationID; }\r\n\r\n constructor(A: ServiceBagService,\r\n private transactionCategoryEndpoint: TransactionCategoryEndpoint,\r\n private transactionEndpoint: TransactionEndpoint,\r\n private classificationRuleEndpoint: TransactionClassificationRuleEndpoint,\r\n private accountEndpoint: AccountEndpoint,\r\n private postingTemplateEndpoint: PostingTemplateEndpoint,\r\n private organizationEndpoint: OrganizationEndpoint,\r\n public accessService: AccessService) {\r\n super(A, 'TransactionCategorizationSetupComponent', BaseEntity, State, EnumPageDisplayModes.Window);\r\n }\r\n\r\n protected override InitState(): void {\r\n // Set company ID\r\n this.State.CompanyID = parseInt(this.QueryParams.CompanyID);\r\n\r\n // Read params\r\n this.State.CategoryID = parseInt(this.QueryParams.CategoryID);\r\n this.State.CategoryName = this.QueryParams.NewCategoryName;\r\n this.State.TransactionID = parseInt(this.QueryParams.TransactionID);\r\n\r\n // Init Type\r\n if (this.State.CategoryID) { this.State.Type = EnumCategorizationType.OldCategory; }\r\n else if (this.State.CategoryName) { this.State.Type = EnumCategorizationType.NewCategory; }\r\n else { this.State.Type = EnumCategorizationType.TemplateOnly; }\r\n }\r\n\r\n // The process initializes split into two phases.\r\n // 1) Initialize a transaction, an account, a category.\r\n // 2) Initialize a booking template or initialize a classification rule\r\n protected override OnInitComponent() {\r\n const category$ = this.InitCategory();\r\n const transaction$ = this.transactionEndpoint.GetView(this.State.TransactionID);\r\n const account$ = this.accountEndpoint.GetByTransactionID(this.State.TransactionID);\r\n\r\n this._subscriptionInit = zip(category$, transaction$, account$).subscribe((result) => {\r\n this.State.Category = result[0];\r\n this.State.Transaction = result[1].Entity;\r\n this.State.Account = result[2].Entity;\r\n\r\n if (this.State.Type === EnumCategorizationType.TemplateOnly) {\r\n // Init template\r\n this.SetIsAddPostingTemplate(true);\r\n } else {\r\n this.SetIsAddPostingTemplate(false);\r\n // Init classification rule\r\n this.InitClassificationRule();\r\n }\r\n\r\n this.NotifyReloadTitle();\r\n });\r\n }\r\n\r\n protected override OnDestroyComponent() {\r\n if (this._subscriptionInit) { this._subscriptionInit.unsubscribe(); }\r\n }\r\n\r\n protected override OnInitTitle(): string {\r\n var titlePart = this.State.Category ? `${this.RC('lblCategory')}` : `${this.RC('lblPostingTemplate')}`\r\n return `${this.RC('lblCategorizationSetup')} - ${titlePart}`;\r\n }\r\n\r\n OnSelectedPostingTemplateChanged(e) {\r\n if (e.value === EnumYesNo.No) {\r\n this.State.Template = this.CreateNewPostingTemplate();\r\n } else {\r\n this.State.Template = this.State.AppropriateTemplate;\r\n }\r\n }\r\n\r\n // Saving a category, a classification rule and a posting template. (or only setting up a category if oneTime)\r\n // After saving we run recategorization and generation journal entries\r\n // Then we notify to reload transaction report and come back to the previous page.\r\n OnSave() {\r\n this.State.VisibleLoadPanel = true;\r\n\r\n if (this.State.IsOneTime) {\r\n this.oneTimeSetupCategory();\r\n } else {\r\n this.setupJournalEntryGeneration();\r\n }\r\n }\r\n\r\n private oneTimeSetupCategory() {\r\n if (this.State.CategoryID) {\r\n const setupParams = new SetupCategoryParams();\r\n setupParams.TransactionID = this.State.TransactionID;\r\n setupParams.TransactionCategoryID = this.State.CategoryID;\r\n\r\n this.Do(this.transactionEndpoint.SetupCategory(setupParams), false, (response) => {\r\n this.NotifyEntitySaved(response.Entity, Transaction);\r\n this.State.VisibleLoadPanel = false;\r\n this.NavigateBack();\r\n }, (response) => {\r\n this.UI.StopMessage(response.ResponseMessage);\r\n this.State.VisibleLoadPanel = false;\r\n });\r\n } else {\r\n const params = new CreateAndSetupCategoryParams();\r\n params.TransactionID = this.State.TransactionID;\r\n params.Category = this.State.Category;\r\n\r\n this.Do(this.transactionEndpoint.CreateandSetupCategory(params), false, (response) => {\r\n this.NotifyEntitySaved(response.Entity, Transaction);\r\n this.State.VisibleLoadPanel = false;\r\n this.NavigateBack();\r\n }, (response) => {\r\n this.UI.StopMessage(response.ResponseMessage);\r\n this.State.VisibleLoadPanel = false;\r\n });\r\n }\r\n }\r\n\r\n private setupJournalEntryGeneration() {\r\n const params = new SetupJournalEntryGenerationParams();\r\n params.Category = this.State.Category;\r\n params.ClassificationRule = this.State.ClassificationRule;\r\n params.Template = this.State.Template;\r\n\r\n this.Do(this.transactionEndpoint.SetupJournalEntryGeneration(params), false, (response: BaseEntityResponse) => {\r\n this.State.Category = response.Entity.Category;\r\n if (response.Entity.Template) {\r\n this.State.Template.EntryID = response.Entity.Template.EntryID;\r\n this.State.Template.TransactionCategoryID = response.Entity.Template.TransactionCategoryID;\r\n }\r\n\r\n if (this.accessService.IsAllowJournalEntryPosting() && this.State.Type === EnumCategorizationType.TemplateOnly) {\r\n this.RegenarateJournalEntries();\r\n } else {\r\n this.Recategorize();\r\n }\r\n }, (response: BaseResponse) => {\r\n this.State.VisibleLoadPanel = false;\r\n this.UI.StopMessage(response.ResponseMessage);\r\n });\r\n }\r\n\r\n OnDateFromChanged(date: Date) {\r\n if (this.State.Template) { this.State.Template.ValidFromDate = this.GetDateOnly(date); }\r\n }\r\n\r\n OnDateToChanged(date: Date) {\r\n if (this.State.Template) { this.State.Template.ValidUntilDate = this.GetDateOnly(date); }\r\n }\r\n\r\n private SetIsAddPostingTemplate(value: boolean) {\r\n if (this.accessService.IsAllowJournalEntryPosting() && this.State.IsAddPostingTemplate !== value) {\r\n this.State.IsAddPostingTemplate = value;\r\n\r\n if (value && !this.State.Template) { this.InitTemplate(); }\r\n else if (!value) { this.State.Template = null; }\r\n }\r\n }\r\n\r\n // Load category by the category ID or create new by the category name\r\n private InitCategory() {\r\n if (this.State.CategoryID) { return this.transactionCategoryEndpoint.Get(this.State.CategoryID).pipe(map((x => x.Entity))); }\r\n\r\n if (this.State.CategoryName) {\r\n const category = new TransactionCategory();\r\n category.Name = this.State.CategoryName;\r\n category.IsActive = true;\r\n category.CompanyID = this.State.CompanyID;\r\n\r\n return of(category);\r\n }\r\n\r\n return of(null);\r\n }\r\n\r\n // Create new classification rule by category and transaction info\r\n private InitClassificationRule() {\r\n this.State.ClassificationRule = new TransactionClassificationRule();\r\n this.State.ClassificationRule.TransactionCategoryID = this.State.CategoryID;\r\n this.State.ClassificationRule.IsActive = true;\r\n this.State.ClassificationRule.MatchingRelationship = EnumMatchingRelationship.And;\r\n this.State.ClassificationRule.Name = this.State.Category.Name;\r\n this.State.ClassificationRule.IsDebit = true;\r\n this.State.ClassificationRule.IsCredit = true;\r\n this.State.ClassificationRule.IsApplyToSubTypeCurrent = true;\r\n this.State.ClassificationRule.IsApplyToSubTypeCredit = true;\r\n this.State.ClassificationRule.CompanyID = this.State.CompanyID;\r\n\r\n this.State.ClassificationRule.Lines = [null];\r\n this.State.ClassificationRule.Lines[0] = new ClassificationRuleLine();\r\n this.State.ClassificationRule.Lines[0].MatchData = this.State.Transaction.Notes1;\r\n this.State.ClassificationRule.Lines[0].MatchType = EnumClassificarionRuleMatchType.Equal;\r\n this.State.ClassificationRule.Lines[0].FieldType = EnumClassificarionRuleFieldType.Notes1;\r\n\r\n // Set priority\r\n this.Do(this.classificationRuleEndpoint.GetNextPossiblePriority(this.State.CompanyID), false, (response) => {\r\n this.State.ClassificationRule.Priority = response.Data;\r\n })\r\n }\r\n\r\n OnCreatePostingTemplate() {\r\n this.State.Template = this.CreateNewPostingTemplate();\r\n }\r\n\r\n // Load the list active posting templates for a category and a company.\r\n // If there are no one templates - we create new template\r\n // In another case we try to find existing template for current account.\r\n // If we have not found a template for an account, and in the list only one template, we set the template like an appropriate template and add an account in this template if need\r\n private InitTemplate() {\r\n if (!this.accessService.IsAllowJournalEntryPosting()) return;\r\n\r\n // If create new category then create new template\r\n if (this.State.Type === EnumCategorizationType.NewCategory) {\r\n this.State.Template = this.CreateNewPostingTemplate();\r\n return;\r\n }\r\n\r\n const categoryID = this.State.Type === EnumCategorizationType.TemplateOnly ? this.State.Transaction.TransactionCategoryID : this.State.Category.EntryID;\r\n this.Do(this.postingTemplateEndpoint.GetActualTemplates(categoryID, this.State.Account.CompanyID), false, (response) => {\r\n if (response.Entities.length > 0) {\r\n for (let i = 0; i < response.Entities.length; i++) {\r\n for (var k = 0; k < response.Entities[i].BookingAccounts.length; k++) {\r\n if (response.Entities[i].BookingAccounts[k].BookingAccountID === this.State.Transaction.BookingAccountID) {\r\n this.State.AppropriateTemplate = response.Entities[i];\r\n }\r\n }\r\n }\r\n\r\n if (!this.State.AppropriateTemplate && response.Entities.length === 1) {\r\n this.State.AppropriateTemplate = response.Entities[0];\r\n\r\n if (this.State.AppropriateTemplate.ApplyToBookingAccounts === EnumApplyToBookingAccountsTypes.Specific) {\r\n const templateBookingAccount = new PostingTemplateBookingAccount();\r\n templateBookingAccount.BookingAccountID = this.State.Transaction.BookingAccountID;\r\n this.State.AppropriateTemplate.BookingAccounts.push(templateBookingAccount);\r\n }\r\n\r\n this.State.IsShowSelectionTemplate = true;\r\n }\r\n\r\n this.State.Template = this.State.AppropriateTemplate;\r\n }\r\n\r\n if (!this.State.Template) { this.State.Template = this.CreateNewPostingTemplate(); }\r\n });\r\n }\r\n\r\n // Create new posting template by category and transaction info\r\n private CreateNewPostingTemplate() {\r\n if (!this.accessService.IsAllowJournalEntryPosting()) return;\r\n\r\n const template = new PostingTemplate();\r\n template.IsActive = true;\r\n template.CompanyID = this.State.Account.CompanyID;\r\n template.ApplyToBookingAccounts = EnumApplyToBookingAccountsTypes.Specific;\r\n template.BookingAccounts = [null];\r\n template.BookingAccounts[0] = new PostingTemplateBookingAccount();\r\n template.BookingAccounts[0].BookingAccountID = this.State.Transaction.BookingAccountID;\r\n template.ValidFromDate = this.GetDateOnly(this.State.ClassificationRule ? this.State.ClassificationRule.DateFrom : this.State.Transaction.Date);\r\n template.BookingAccountType = EnumPostingTemplateBookingAccountTypes.Custom;\r\n\r\n if (this.State.Type !== EnumCategorizationType.TemplateOnly) {\r\n template.Name = this.State.Category.Name;\r\n template.TransactionCategoryID = this.State.Category.EntryID;\r\n } else {\r\n template.Name = this.State.Transaction.TransactionCategoryName;\r\n template.TransactionCategoryID = this.State.Transaction.TransactionCategoryID;\r\n }\r\n\r\n return template;\r\n }\r\n\r\n private Recategorize() {\r\n const params = new RecategorizeParams();\r\n params.OrganizationID = Globals.OrganizationID;\r\n params.CategoryType = EnumCategoryType.Transaction;\r\n this.Do(this.organizationEndpoint.Recategorize(params), false, () => {\r\n if (this.accessService.IsAllowJournalEntryPosting() && this.State.Template) {\r\n this.RegenarateJournalEntries();\r\n } else {\r\n this.State.VisibleLoadPanel = true;\r\n this.NotifyEntitySaved(this.State.Transaction, Transaction);\r\n this.NavigateBack();\r\n }\r\n }, (response) => {\r\n this.UI.StopMessage(response.ResponseMessage);\r\n this.State.VisibleLoadPanel = true;\r\n });\r\n }\r\n\r\n private RegenarateJournalEntries() {\r\n const params = new RegenarateJournalEntriesParams();\r\n params.OrganizationID = Globals.OrganizationID;\r\n params.TransactionCategories = [this.State.Template.TransactionCategoryID];\r\n params.PostingTemplates = [this.State.Template.EntryID];\r\n\r\n this.Do(this.organizationEndpoint.RegenarateJournalEntries(params), false, () => {\r\n this.NotifyEntitySaved(this.State.Transaction, Transaction);\r\n this.NavigateBack();\r\n\r\n this.State.VisibleLoadPanel = true;\r\n }, (response) => {\r\n this.UI.StopMessage(response.ResponseMessage);\r\n this.State.VisibleLoadPanel = true;\r\n });\r\n }\r\n\r\n private GetDateOnly(dateTime: Date) {\r\n if (!dateTime) return dateTime;\r\n\r\n return new Date(dateTime.getFullYear(), dateTime.getMonth(), dateTime.getDate());\r\n }\r\n\r\n OnDeleteTemplate() {\r\n this.State.Template = null;\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 { TransactionClassificationRule } from './../entities/transactionclassificationrule.entity';\r\nimport { ClassificationRuleParams } from './../params/classificationrule.param';\r\nimport { ClassificationRuleMovePriorityParams } from './../params/classificationrulemovepriority.param';\r\n@Injectable()\r\nexport class TransactionClassificationRuleEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"TransactionClassificationRule\", api);}\r\n\t\r\n\r\n public ListEx(Params: ClassificationRuleParams, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListEx', Params, options?.GetLoadOptions() );\r\n }\r\n\r\n public GetNextPossiblePriority(CompanyID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetNextPossiblePriority', {CompanyID: CompanyID} );\r\n }\r\n\r\n public MovePriority(Params: ClassificationRuleMovePriorityParams) : Observable\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'MovePriority', 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 SetupCategoryParams extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'SetupCategoryParams';\r\n }\r\n \r\n public TransactionCategoryID: number; \r\n public TransactionID: number; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { AccountEndpoint } from './../../_proxy/endpoints/account.endpoint';\r\nimport { CompanyEndpoint } from './../../_proxy/endpoints/company.endpoint';\r\nimport { OrganizationEndpoint } from './../../_proxy/endpoints/organization.endpoint';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { Component } from '@angular/core';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ReconcileParams } from '../../_proxy/params/reconcile.param';\r\n\r\nenum EnumReconciliatonEntityType {\r\n Organization,\r\n Company,\r\n Account\r\n}\r\nclass State extends BaseState {\r\n EntityID: number;\r\n EntityType: EnumReconciliatonEntityType;\r\n OrganizationID: number;\r\n DateFrom: Date;\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-reconciliation-dialog',\r\n templateUrl: './reconciliation-dialog.component.html'\r\n})\r\nexport class ReconciliationDialogComponent extends BasePageComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private organizationEndpoint: OrganizationEndpoint,\r\n private companyEndpoint: CompanyEndpoint,\r\n private accountEndpoint: AccountEndpoint\r\n ) {\r\n super(A, 'ReconciliationDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog);\r\n }\r\n\r\n //#region Life hooks\r\n\r\n override GetTitle() {\r\n return this.RC('lblReconcile')\r\n }\r\n\r\n //#endregion\r\n\r\n ReconcileOrganization(OrganizationID: number) {\r\n this.InitComponent(OrganizationID, EnumReconciliatonEntityType.Organization);\r\n }\r\n\r\n ReconcileCompany(CompanyID: number) {\r\n this.InitComponent(CompanyID, EnumReconciliatonEntityType.Company);\r\n }\r\n\r\n ReconcileAccount(AccountID: number) {\r\n this.InitComponent(AccountID, EnumReconciliatonEntityType.Account);\r\n }\r\n\r\n Reconcile() {\r\n const endpoint = this.GetReconciliationEndpoint();\r\n const EntryIDField = this.GetReconciliationEntryIDField();\r\n const params = new ReconcileParams();\r\n params[EntryIDField] = this.State.EntityID;\r\n params.DateFrom = this.State.DateFrom;\r\n\r\n this.Do(endpoint.Reconciliation(params), true, () => {\r\n this.CloseDialogWithSuccess();\r\n });\r\n }\r\n\r\n private InitComponent(EntryID: number, EntityType: EnumReconciliatonEntityType) {\r\n this.ShowDialogShort(undefined);\r\n\r\n // Fill state\r\n this.State.EntityID = EntryID;\r\n this.State.EntityType = EntityType;\r\n }\r\n\r\n private GetReconciliationEndpoint() {\r\n switch (this.State.EntityType) {\r\n case (EnumReconciliatonEntityType.Organization): return this.organizationEndpoint;\r\n case (EnumReconciliatonEntityType.Company): return this.companyEndpoint;\r\n case (EnumReconciliatonEntityType.Account): return this.accountEndpoint;\r\n }\r\n }\r\n\r\n private GetReconciliationEntryIDField() {\r\n switch (this.State.EntityType) {\r\n case (EnumReconciliatonEntityType.Organization): return 'OrganizationID';\r\n case (EnumReconciliatonEntityType.Company): return 'CompanyID';\r\n case (EnumReconciliatonEntityType.Account): return 'AccountID';\r\n }\r\n }\r\n}\r\n","\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { FinancialReportView } from './../views/financialreport.view';\r\nimport { FinancialReportNodeView } from './../views/financialreportnode.view';\r\nimport { FinancialReportParams } from './../params/financialreport.param';\r\n@Injectable()\r\nexport class FinancialReportEndpoint extends BaseEndpoint\r\n{\r\n constructor(api: APIGatewayService) {super(\"FinancialReport\", api);}\r\n \r\n public GetReport(Params: FinancialReportParams) : Observable>\r\n {\r\n return this.api.ExecutePostAction(this.ControllerName, 'GetReport', Params, undefined );\r\n }\r\n public GetMainFolders(iCompanyID: number) : Observable>\r\n {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetMainFolders', {iCompanyID: iCompanyID} );\r\n }\r\n}\r\n","\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { BusinessPartnerView } from './../views/businesspartner.view';\r\nimport { BusinessPartnerListParams } from './../params/businesspartnerlist.param';\r\n@Injectable()\r\nexport class BusinessPartnerEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(api: APIGatewayService) {super(\"BusinessPartner\", api);}\r\n\t\r\n\r\n public ListEx(Params: BusinessPartnerListParams, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListEx', Params, options?.GetLoadOptions() );\r\n }\r\n}\r\n\r\n","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumBankGroups } from './../enums';\r\nimport { EnumBanks } from './../enums';\r\nimport { EnumBookingAccountSubtypes } from './../enums';\r\nimport { EnumSide } from './../enums';\r\nexport class BaseParamsFilter extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'BaseParamsFilter';\r\n }\r\n \r\n public OrganizationID: number; \r\n public Companies: number[]; \r\n public Accounts: number[]; \r\n public BookingAccounts: number[]; \r\n public AccountGroups: number[]; \r\n public BankGroups: EnumBankGroups[]; \r\n public Banks: EnumBanks[]; \r\n public CurrenciesFilter: string[]; \r\n public BookingAccountSubtypes: EnumBookingAccountSubtypes[]; \r\n public LoadActive: boolean; \r\n public Categories: number[]; \r\n public ForecastCategories: number[]; \r\n public ForecastMappers: number[]; \r\n public Scenarios: number[]; \r\n public ProbabilityLevels: number[]; \r\n public Sides: EnumSide[]; \r\n public BusinessPartners: number[]; \r\n public Currency: string; \r\n public Date: Date; \r\n public DateFrom: Date; \r\n public DateTo: Date; \r\n public AmountFrom: number; \r\n public AmountTo: number; \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 { BaseParamsFilter } from './../entities/baseparamsfilter.entity';\r\nimport { EnumSide } from './../enums';\r\nexport class BusinessPartnerListParams extends BaseParamsFilter {\r\n constructor() {\r\n super();\r\n this.TypeName = 'BusinessPartnerListParams';\r\n }\r\n \r\n public BusinessPartnerGroups: number[]; \r\n public SalesPersons: number[]; \r\n public IncomeExpenseSides: EnumSide[]; \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 { Company } from './../entities/company.entity';\r\nimport { DownloadRequest } from './../entities/downloadrequest.entity';\r\nimport { CompanyListParams } from './../params/companylist.param';\r\nimport { EnumCompanyChildEntityTypes } from './../enums';\r\nimport { ReconcileParams } from './../params/reconcile.param';\r\nimport { RecategorizeParams } from './../params/recategorize.param';\r\nimport { RegenarateJournalEntriesParams } from './../params/regenaratejournalentries.param';\r\nimport { InitCashflowParams } from './../params/initcashflow.param';\r\nimport { CreationWizardSaveParams } from './../params/creationwizardsave.param';\r\nimport { CompanyWrapParams } from './../params/companywrap.param';\r\n@Injectable()\r\nexport class CompanyEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"Company\", api);}\r\n\t\r\n\r\n public ListEx(Params: CompanyListParams, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListEx', Params, options?.GetLoadOptions() );\r\n }\r\n\r\n public GetChildObjectsCount(CompanyID: number, ChildType: EnumCompanyChildEntityTypes) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetChildObjectsCount', {CompanyID: CompanyID, ChildType: ChildType} );\r\n }\r\n\r\n public Reconciliation(Params: ReconcileParams) : Observable\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'Reconciliation', Params, undefined );\r\n }\r\n\r\n public Recategorize(Params: RecategorizeParams) : Observable\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'Recategorize', Params, undefined );\r\n }\r\n\r\n public RegenarateJournalEntries(Params: RegenarateJournalEntriesParams) : Observable\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'RegenarateJournalEntries', Params, undefined );\r\n }\r\n\r\n public InitCashflow(Params: InitCashflowParams) : Observable\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'InitCashflow', Params, undefined );\r\n }\r\n\r\n public SaveDataFromCreationWizard(Params: CreationWizardSaveParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'SaveDataFromCreationWizard', Params, undefined );\r\n }\r\n\r\n public ValidateCompanyFromCreationWizard(Params: CreationWizardSaveParams) : Observable\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ValidateCompanyFromCreationWizard', Params, undefined );\r\n }\r\n\r\n public ValidateAccountFromCreationWizard(Params: CreationWizardSaveParams) : Observable\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ValidateAccountFromCreationWizard', Params, undefined );\r\n }\r\n\r\n public ValidateBookingAccountsFromCreationWizard(Params: CreationWizardSaveParams) : Observable\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ValidateBookingAccountsFromCreationWizard', Params, undefined );\r\n }\r\n\r\n public RemoveSynchedData(Params: CompanyWrapParams) : Observable\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'RemoveSynchedData', Params, undefined );\r\n }\r\n\r\n public HasNonManualBalanceAccountOrCCContract(CompanyID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'HasNonManualBalanceAccountOrCCContract', {CompanyID: CompanyID} );\r\n }\r\n}\r\n\r\n","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumFinancialReportType } from './../enums';\r\nimport { EnumFinancialReportDateType } from './../enums';\r\nimport { EnumFinancialReportRangeType } from './../enums';\r\nimport { EnumFinancialReportCurrencyType } from './../enums';\r\nimport { FinancialReportPeriodView } from './../views/financialreportperiod.view';\r\nexport class FinancialReportParams extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'FinancialReportParams';\r\n }\r\n \r\n public CompanyID: number; \r\n public Type: EnumFinancialReportType; \r\n public DateType: EnumFinancialReportDateType; \r\n public RangeType: EnumFinancialReportRangeType; \r\n public CurrencyType: EnumFinancialReportCurrencyType; \r\n public IsIncludeZeroNodes: boolean; \r\n public FolderTypes: number[]; \r\n public BusinessPartners: number[]; \r\n public Periods: FinancialReportPeriodView[] = []; \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 FinancialReportPeriodView extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'FinancialReportPeriodView';\r\n }\r\n \r\n public DateFrom: Date; \r\n public DateTo: Date; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { FinancialReportNodeView } from './../../../_proxy/views/financialreportnode.view';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { Component, Input, ViewChild } from '@angular/core';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { FinancialReportView } from '../../../_proxy/views/financialreport.view';\r\nimport { FinancialReportColumnInfoView } from './../../../_proxy/views/financialreportcolumninfo.view';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { EnumFinancialReportNodeEntityType } from './../../../_proxy/enums';\r\nimport { DxTreeListComponent } from 'devextreme-angular';\r\n\r\nclass State extends BaseState {\r\n Report: FinancialReportView;\r\n ReportColumns: FinancialReportColumnInfoView[];\r\n TotalColumn: FinancialReportColumnInfoView;\r\n Columns: any[];\r\n\r\n AdditionalNodeID: number;\r\n AdditionalRows: any[];\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-financial-report-tree',\r\n templateUrl: './financial-report-tree.component.html',\r\n styleUrls: ['./financial-report-tree.component.scss']\r\n})\r\nexport class FinancialReportTreeComponent extends BaseComponent {\r\n\r\n @ViewChild(DxTreeListComponent) tree: DxTreeListComponent;\r\n\r\n @Input() IsLocalCurrency: boolean;\r\n @Input() set Report(value: FinancialReportView) {\r\n if (value !== undefined) {\r\n this.State.ReportColumns = value.Columns;\r\n this.State.TotalColumn = value.TotalColumn;\r\n this.InitColumns(value.Columns, value.TotalColumn);\r\n this.State.Report = value;\r\n }\r\n }\r\n\r\n @Input() set LevelExpanded(value: number) {\r\n if (this.tree != null) {\r\n this.State.AdditionalRows.forEach(additionalRow => {\r\n this.RemoveAdditionalNode(additionalRow.Node);\r\n });\r\n\r\n const expandedKeys = [];\r\n\r\n this.State.Report.Nodes.forEach(node => {\r\n if (!node.IsLeaf && node.Level < value) {\r\n expandedKeys.push(node.NodeID);\r\n this.AddAdditionalNode(node);\r\n }\r\n });\r\n\r\n this.tree.expandedRowKeys = expandedKeys;\r\n }\r\n }\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'FinancialReportTreeComponent', State);\r\n }\r\n\r\n override OnInitState() {\r\n this.State.AdditionalNodeID = 1000000;\r\n this.State.AdditionalRows = [];\r\n }\r\n\r\n OnRowPrepared(e) {\r\n if (e && e.rowType === 'data') {\r\n const element = (e.rowElement as Element);\r\n element.classList.add(`row-period-${e.data.PeriodIndex}`);\r\n\r\n if (e.data.EntityType === EnumFinancialReportNodeEntityType.Virtual) {\r\n element.classList.add('virtual-node');\r\n }\r\n }\r\n }\r\n\r\n GetNames(index: number) {\r\n if (index >= this.State.ReportColumns.length) { return this.State.TotalColumn.Names; }\r\n return this.State.ReportColumns[index].Names;\r\n }\r\n\r\n GetHeader(columnIndex: number, periodIndex: number) {\r\n return this.State.ReportColumns[columnIndex].Names[periodIndex];\r\n }\r\n\r\n OnLedgerAccountDataClick(node: FinancialReportNodeView, columnIndex: number) {\r\n const dates = columnIndex >= this.State.ReportColumns.length ? this.State.TotalColumn.Periods[node.PeriodIndex] : this.State.ReportColumns[columnIndex].Periods[node.PeriodIndex];\r\n this.Navigate(['/pages/ledger-account', node.EntityEntryID], { DateFrom: dates.DateFrom, DateTo: dates.DateTo, IsOpen: false });\r\n }\r\n\r\n OnRowExpanding(e) {\r\n const node = e.component.getNodeByKey(e.key).data;\r\n\r\n this.AddAdditionalNode(node);\r\n }\r\n\r\n OnRowCollapsing(e) {\r\n const node = e.component.getNodeByKey(e.key).data;\r\n this.RemoveAdditionalNode(node);\r\n }\r\n\r\n CollapseAll() {\r\n this.State.AdditionalRows = [];\r\n this.tree.expandedRowKeys = [];\r\n }\r\n\r\n private InitColumns(reportColumns: FinancialReportColumnInfoView[], totalColumn: FinancialReportColumnInfoView) {\r\n this.State.Columns = [\r\n { dataField: 'Name', allowSorting: false },\r\n { dataField: 'SortOrder', visible: false, sortIndex: 0, sortOrder: 'asc' },\r\n { dataField: 'PeriodIndex', visible: false, sortIndex: 1, sortOrder: 'asc' }\r\n ];\r\n\r\n for (let i = 0; i < reportColumns.length; i++) {\r\n this.State.Columns.push(this.CreateColumn(reportColumns[i], i));\r\n }\r\n\r\n if (totalColumn !== null && totalColumn !== undefined) {\r\n this.State.Columns.push(this.CreateColumn(totalColumn, reportColumns.length, true));\r\n }\r\n }\r\n\r\n private CreateColumn(reportColumn: FinancialReportColumnInfoView, index: number, isTotal = false) {\r\n const fieldDataName = isTotal ? 'TotalData' : 'ColumnsData';\r\n const column: any = { headerCellTemplate: 'headerTemplate', cssClass: 'cell-data', columnIndex: index, allowSorting: false, cellTemplate: 'cellDataTemplate' };\r\n\r\n if (reportColumn.Children && reportColumn.Children.length > 0) {\r\n column.columns = [];\r\n column.alignment = 'center';\r\n\r\n for (let k = 0; k < reportColumn.Children.length; k++) {\r\n column.columns.push(\r\n { caption: reportColumn.Children[k].Names[0], dataField: `${fieldDataName}[${ reportColumn.Children[k].Index }]`, format: this.F.NumberSum, allowSorting: false, columnIndex: index, cellTemplate: 'cellDataTemplate' }\r\n );\r\n }\r\n } else {\r\n column.dataField = `${fieldDataName}[${ reportColumn.Index }]`;\r\n column.format = this.F.NumberSum;\r\n }\r\n\r\n return column;\r\n }\r\n\r\n private AddAdditionalNode(node: FinancialReportNodeView) {\r\n this.State.AdditionalNodeID++;\r\n\r\n // create new node\r\n const newNode = Utils.CloneObject(node) as FinancialReportNodeView;\r\n newNode.Name = `${this.RC('lblTotal')} ${newNode.Name}`;\r\n newNode.NodeID = this.State.AdditionalNodeID;\r\n newNode.EntityType = EnumFinancialReportNodeEntityType.Virtual;\r\n\r\n // Clear old node\r\n node.ColumnsData = [];\r\n node.TotalData = [];\r\n\r\n // Add new node\r\n this.State.Report.Nodes.push(newNode);\r\n this.State.AdditionalRows.push({\r\n NodeID: node.NodeID,\r\n Node: node,\r\n NewNode: newNode\r\n });\r\n }\r\n\r\n private RemoveAdditionalNode(node: FinancialReportNodeView) {\r\n const additionalRow = this.State.AdditionalRows.filter(x => x.NodeID === node.NodeID);\r\n\r\n if (additionalRow.length === 1) {\r\n additionalRow[0].Node.ColumnsData = additionalRow[0].NewNode.ColumnsData;\r\n additionalRow[0].Node.TotalData = additionalRow[0].NewNode.TotalData;\r\n\r\n let index = this.State.Report.Nodes.indexOf(additionalRow[0].NewNode);\r\n\r\n if (index >= 0) { this.State.Report.Nodes.splice(index, 1); }\r\n\r\n index = this.State.AdditionalRows.indexOf(additionalRow[0]);\r\n this.State.AdditionalRows.splice(index, 1);\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 {{name}}\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
{{cell.displayValue | formatNumberSum}} {{'ILS' | LookupList:LIST('Currencies'):'Symbol' }}
\\r\\n
{{ cell.displayValue | formatNumberSum}} {{'ILS' | LookupList:LIST('Currencies'):'Symbol' }}
\\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 { BaseParamsFilter } from './../entities/baseparamsfilter.entity';\r\nexport class CompanyListParams extends BaseParamsFilter {\r\n constructor() {\r\n super();\r\n this.TypeName = 'CompanyListParams';\r\n }\r\n \r\n public IsActiveCashFlow: boolean; \r\n public DbName: string; \r\n public IsManualBalancesEntry: boolean; \r\n public ApplyBookingAccountSubtypesToActiveAccounts: boolean; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { FinancialReportNodeView } from './../../_proxy/views/financialreportnode.view';\r\nimport { BusinessPartnerEndpoint } from './../../_proxy/endpoints/businesspartner.endpoint';\r\nimport { BusinessPartnerListParams } from './../../_proxy/params/businesspartnerlist.param';\r\nimport { CompanyEndpoint } from './../../_proxy/endpoints/company.endpoint';\r\nimport { FinancialReportView } from './../../_proxy/views/financialreport.view';\r\nimport { FinancialReportEndpoint } from './../../_proxy/endpoints/financialreport.endpoint';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { Component, ViewChild } from '@angular/core';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { FinancialReportParams } from '../../_proxy/params/financialreport.param';\r\nimport { EnumFinancialReportCurrencyType, EnumFinancialReportDateType, EnumFinancialReportRangeType, EnumFinancialReportType, EnumSide } from '../../_proxy/enums';\r\nimport { Globals } from '../../_globals';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { NavigatorService } from '@m4u-angular/core/framework/navigator.service';\r\nimport { FinancialReportPeriodView } from '../../_proxy/views/financialreportperiod.view';\r\nimport { FinancialReportTreeComponent } from './financial-report-tree/financial-report-tree.component';\r\nimport { CompanyListParams } from '@kraken/_proxy/params/companylist.param';\r\n\r\nclass State extends BaseState {\r\n Report: FinancialReportView;\r\n MainFoldersSource: FinancialReportNodeView[];\r\n\r\n ReportType: EnumFinancialReportType;\r\n CompanyID: number;\r\n DateType: EnumFinancialReportDateType;\r\n IsIncludeZeroNodes: boolean;\r\n RangeType: EnumFinancialReportRangeType;\r\n CurrencyType: EnumFinancialReportCurrencyType;\r\n FolderTypes: number[];\r\n Vendors: number[];\r\n Customers: number[];\r\n\r\n Periods: FinancialReportPeriodView[];\r\n ReportLevels: number[];\r\n CurrentLevel: number;\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-financial-report',\r\n templateUrl: './financial-report.component.html',\r\n styleUrls: ['./financial-report.component.scss']\r\n})\r\nexport class FinancialReportComponent extends BasePageComponent {\r\n\r\n @ViewChild(FinancialReportTreeComponent) reportTree: FinancialReportTreeComponent;\r\n\r\n constructor(A: ServiceBagService,\r\n private financialReportEndpoint: FinancialReportEndpoint,\r\n private companyEndpoint: CompanyEndpoint,\r\n private navigatorService: NavigatorService,\r\n private businessPartnerEndpoint: BusinessPartnerEndpoint) {\r\n super(A, 'FinancialReportComponent', BaseEntity, State);\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n const settings = new ToolbarSettings;\r\n settings.IsAllowFilter = true;\r\n\r\n return settings;\r\n }\r\n\r\n override OnInitState() {\r\n this.State.ReportType = this.navigatorService.GetCustomRouteData().ReportType;\r\n this.State.RangeType = this.State.ReportType !== EnumFinancialReportType.BalanceSheet ? EnumFinancialReportRangeType.Year : EnumFinancialReportRangeType.All;\r\n this.State.DateType = EnumFinancialReportDateType.PostingDate;\r\n this.State.CurrencyType = EnumFinancialReportCurrencyType.Local;\r\n this.State.CurrentLevel = 1;\r\n this.State.Vendors = [];\r\n this.State.Customers = [];\r\n this.State.Periods = [];\r\n this.State.IsIncludeZeroNodes = false;\r\n this.State.CompanyID = null;\r\n this.State.FolderTypes = [];\r\n\r\n this.AddDefaultPeriod();\r\n }\r\n\r\n override OnInitComponent() {\r\n this.LoadDataSource();\r\n this.LoadCompanies();\r\n }\r\n\r\n override GetTitle() {\r\n let result;\r\n\r\n switch (this.State.ReportType) {\r\n case EnumFinancialReportType.PnL: {\r\n result = this.RC('ttlPnL');\r\n break;\r\n }\r\n case EnumFinancialReportType.BalanceSheet: {\r\n result = this.RC('ttlBalanceSheet');\r\n break;\r\n }\r\n case EnumFinancialReportType.TrialBalance: {\r\n result = this.RC('ttlTrialBalance');\r\n break;\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n OnOrganizationChanged() {\r\n this.State.CompanyID = null;\r\n this.State.Vendors = [];\r\n this.State.Customers = [];\r\n this.State.MainFoldersSource = [];\r\n this.LoadCompanies();\r\n this.LoadVendors();\r\n this.LoadCustomers();\r\n this.LoadMainFolders();\r\n }\r\n\r\n OnCompanyChanged() {\r\n this.State.Vendors = [];\r\n this.State.Customers = [];\r\n this.State.MainFoldersSource = [];\r\n this.LoadVendors();\r\n this.LoadCustomers();\r\n this.LoadMainFolders();\r\n }\r\n\r\n override OnApplyFilter() {\r\n this.LoadDataSource();\r\n this.reportTree.CollapseAll();\r\n }\r\n\r\n protected override OnClearFilter(): void {\r\n this.OnInitState();\r\n this.LoadDataSource();\r\n this.reportTree.CollapseAll();\r\n }\r\n\r\n OnAddPeriodClick() {\r\n this.AddDefaultPeriod();\r\n }\r\n\r\n OnRemovePeriodClick(index: number) {\r\n this.State.Periods.splice(index, 1);\r\n }\r\n\r\n OnDateRangeSelected(e, index: number) {\r\n if (!e.itemData) { return; }\r\n this.State.Periods[index].DateFrom = e.itemData.DateFrom;\r\n this.State.Periods[index].DateTo = e.itemData.DateTo;\r\n }\r\n\r\n OnDateSelected(e, index: number) {\r\n if (!e.itemData) { return; }\r\n this.State.Periods[index].DateTo = e.itemData.Date;\r\n }\r\n\r\n OnExpandCollapseChanged(e) {\r\n this.State.CurrentLevel = e;\r\n }\r\n\r\n private LoadDataSource() {\r\n // Clear nodes if company is empty\r\n if (!this.State.CompanyID) {\r\n if (this.State.Report) {\r\n this.State.Report.Nodes = [];\r\n }\r\n\r\n return;\r\n }\r\n\r\n const params = new FinancialReportParams();\r\n\r\n params.Type = this.State.ReportType;\r\n params.CompanyID = this.State.CompanyID;\r\n params.DateType = this.State.DateType;\r\n params.RangeType = this.State.RangeType;\r\n params.IsIncludeZeroNodes = this.State.IsIncludeZeroNodes;\r\n params.CurrencyType = this.State.CurrencyType;\r\n params.Periods = this.State.Periods;\r\n params.FolderTypes = this.State.FolderTypes;\r\n params.BusinessPartners = this.State.Customers.concat(this.State.Vendors);\r\n\r\n this.Do(this.financialReportEndpoint.GetReport(params), false, (response) => {\r\n this.State.Report = response.Entity;\r\n\r\n this.State.ReportLevels = [];\r\n for (let i = 0; i < response.Entity.MaxLevel; i++) {\r\n this.State.ReportLevels.push(i + 1);\r\n }\r\n });\r\n }\r\n\r\n private LoadCompanies() {\r\n if (!Globals.OrganizationID) {\r\n this.DataSources['Companies'] = null;\r\n return;\r\n }\r\n\r\n const params = new CompanyListParams();\r\n params.OrganizationID = Globals.OrganizationID;\r\n params.LoadActive = true;\r\n\r\n this.DataSources['Companies'] = new DataSourceCustomAction(((options: DataLoadOptions) => this.companyEndpoint.ListEx(params, null)));\r\n this.DS('Companies').Reload();\r\n }\r\n\r\n private LoadMainFolders() {\r\n if (this.State.ReportType !== EnumFinancialReportType.TrialBalance) { return; }\r\n\r\n if (!Globals.OrganizationID || !this.State.CompanyID) {\r\n this.State.MainFoldersSource = [];\r\n return;\r\n }\r\n\r\n this.Do(this.financialReportEndpoint.GetMainFolders(this.State.CompanyID), false, (response) => {\r\n this.State.MainFoldersSource = response.Entities;\r\n });\r\n }\r\n\r\n private LoadVendors() {\r\n if (!Globals.OrganizationID || !this.State.CompanyID) {\r\n this.DataSources['Vendors'] = undefined;\r\n return;\r\n }\r\n\r\n const params = new BusinessPartnerListParams();\r\n params.OrganizationID = Globals.OrganizationID;\r\n params.Companies = this.State.CompanyID ? [this.State.CompanyID] : [];\r\n params.IncomeExpenseSides = [EnumSide.Expense];\r\n\r\n this.DataSources['Vendors'] = new DataSourceCustomAction((options: DataLoadOptions) => this.businessPartnerEndpoint.ListEx(params, options), undefined, undefined, false);\r\n }\r\n\r\n private LoadCustomers() {\r\n if (!Globals.OrganizationID || !this.State.CompanyID) {\r\n this.DataSources['Customers'] = undefined;\r\n return;\r\n }\r\n\r\n const params = new BusinessPartnerListParams();\r\n params.OrganizationID = Globals.OrganizationID;\r\n params.Companies = this.State.CompanyID ? [this.State.CompanyID] : [];\r\n params.IncomeExpenseSides = [EnumSide.Income];\r\n\r\n this.DataSources['Customers'] = new DataSourceCustomAction((options: DataLoadOptions) => this.businessPartnerEndpoint.ListEx(params, options), undefined, undefined, false);\r\n }\r\n\r\n private AddDefaultPeriod() {\r\n // Set the last Year\r\n const period = new FinancialReportPeriodView();\r\n\r\n if (this.State.ReportType !== EnumFinancialReportType.BalanceSheet) {\r\n period.DateTo = Globals.ThisYearLastDate;\r\n period.DateFrom = Globals.BeginningOfYear;\r\n } else {\r\n period.DateTo = Globals.Today;\r\n }\r\n\r\n this.State.Periods.push(period);\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\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\\\" class=\\\"small\\\">\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\";","\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { PaymentView } from './../views/payment.view';\r\nimport { PaymentClosedDocumentView } from './../views/paymentcloseddocument.view';\r\nimport { PaymentMeansTypeView } from './../views/paymentmeanstype.view';\r\nimport { PaymentListParams } from './../params/paymentlist.param';\r\n@Injectable()\r\nexport class PaymentEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(api: APIGatewayService) {super(\"Payment\", api);}\r\n\t\r\n\r\n public ListEx(Params: PaymentListParams, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListEx', Params, options?.GetLoadOptions() );\r\n }\r\n\r\n public GetClosedDocuments(PaymentID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetClosedDocuments', {PaymentID: PaymentID} );\r\n }\r\n\r\n public GetPaymentMeansTypes(PaymentID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetPaymentMeansTypes', {PaymentID: PaymentID} );\r\n }\r\n}\r\n\r\n","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumReplicationStatuses } from './../enums';\r\nimport { EnumReplicationObjectTypes } from './../enums';\r\nexport class Replication extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'Replication';\r\n }\r\n \r\n public SnapshotID: number; \r\n public CompanyID: number; \r\n public StartDate: Date; \r\n public EndDate: Date; \r\n public Status: EnumReplicationStatuses; \r\n public Exception: string; \r\n public SuccessQuantity: number; \r\n public FailQuantity: number; \r\n\t\r\n}\r\n\r\nexport class ReplicationEntityError extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ReplicationEntityError';\r\n }\r\n \r\n public ObjectType: EnumReplicationObjectTypes; \r\n public OriginEntryID: number; \r\n public PublishIdentifier: string; \r\n public Exception: string; \r\n public LineID: number;\r\n}\r\nexport class ReplicationSummaryResult extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ReplicationSummaryResult';\r\n }\r\n \r\n public ObjectType: EnumReplicationObjectTypes; \r\n public SuccessQuantity: number; \r\n public FailQuantity: 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 { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { Component } from '@angular/core';\r\nimport { ReplicationSummaryResult } from '@kraken/_proxy/entities/replication.entity';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-replication-summary-result-history-grid',\r\n templateUrl: './replication-summary-result-history-grid.component.html',\r\n styleUrls: ['./replication-summary-result-history-grid.component.scss']\r\n})\r\nexport class ReplicationSummaryResultHistoryGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'ReplicationSummaryResultHistoryGridComponent', ReplicationSummaryResult, 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 \\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 { EnumAccountFullNameDisplayType } from './../enums';\r\nimport { EnumBookingAccountSelectionMethods } from './../enums';\r\nexport class Organization extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'Organization';\r\n }\r\n \r\n public Name: string; \r\n public Notes: string; \r\n public JobPriority: number; \r\n public IsActive: boolean; \r\n public InternalNotes: string; \r\n public DefaultCurrency: string; \r\n public IsLicensedForTransactionsUpload: boolean; \r\n public IsLicensedForJournalEntries: boolean; \r\n public IsLicensedForCashflow: boolean; \r\n public IsLicensedForForeignBanks: boolean; \r\n public IsLicensedForAccountingSync: boolean; \r\n public IsLicensedForLedgerAccountsSync: boolean; \r\n public IsLicensedForLoans: boolean; \r\n public IsLicensedForAdvancedReports: boolean; \r\n public IsLicensedForCreditCardProcessing: boolean; \r\n public IsRemoveHistoricalData: boolean; \r\n public HistoricalDataRetentionPeriod: number; \r\n public RequestImmediatelyReplication: Date; \r\n public AccountFullNameDisplayType: EnumAccountFullNameDisplayType; \r\n public BookingAccountSelectionMethod: EnumBookingAccountSelectionMethods; \r\n public IsAccountingOffice: boolean; \r\n public IsLicensedForIncomingPaymentsProcessing: boolean; \r\n public IsDownloadBalances: boolean; \r\n public IsDownloadLoansData: boolean; \r\n public IsHasAutomaticDeployment: boolean; \r\n\tpublic CreatedBy: number;\r\n\tpublic CreatedDate: Date;\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumAdminAccessRequestStatus } from './../enums';\r\nimport { EnumAdminAccessRequestDurationType } from './../enums';\r\nexport class AdminAccessRequest extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'AdminAccessRequest';\r\n }\r\n \r\n public OrganizationID: number; \r\n public Status: EnumAdminAccessRequestStatus; \r\n public DurationType: EnumAdminAccessRequestDurationType; \r\n public TicketNumber: number; \r\n public AccessReason: string; \r\n public ReviewedBy: number; \r\n public ReviewedDate: Date; \r\n public StringTicketNumber: string; \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 { BaseDataResponse, BaseEntity, BaseState } 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 { OrganizationEndpoint } from '../../../_proxy/endpoints/organization.endpoint';\r\nimport { Organization } from '../../../_proxy/entities/organization.entity';\r\nimport { DataSourceCustomAction } from \"../../../../../src/base/datalayer/BaseDataSources\";\r\nimport { DataLoadOptions } from \"../../../../../src/base/datalayer/DataLoadOptions\";\r\nimport { AdminAccessRequest } from \"../../../_proxy/entities/adminaccessrequest.entity\";\r\nimport { AccessService } from '@kraken/services/access.service';\r\n\r\nexport class State extends BaseState {\r\n IsShowOnlyAccessible: boolean = false;\r\n ActiveOrganizationsCount: number = 0;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n templateUrl: './organization-list.component.html'\r\n})\r\nexport class OrganizationListComponent extends BasePageComponent\r\n{\r\n constructor(A: ServiceBagService,\r\n public accessService: AccessService,\r\n private endpoint: OrganizationEndpoint) {\r\n super(A, 'OrganizationListComponent', Organization, State);\r\n }\r\n\r\n override OnInitComponent() {\r\n if (this.accessService.IsUser()) {\r\n this.Navigate(['/pages/dashboard']);\r\n return;\r\n }\r\n\r\n this.LoadDataSource();\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n if (ExternalEntityType == Organization || ExternalEntityType == AdminAccessRequest) {\r\n this.LoadDataSource();\r\n this.DS('SelectorOrganizations').Reload();\r\n }\r\n }\r\n\r\n public LoadDataSource() {\r\n this.DataSources['Organizations'] = new DataSourceCustomAction((options: DataLoadOptions) => this.endpoint.ListGridViews(this.State.IsShowOnlyAccessible, options));\r\n this.DS('Organizations').Reload();\r\n this.Do(this.endpoint.GetActiveOrganizationsCount(), false, (response: BaseDataResponse) => { this.State.ActiveOrganizationsCount = response.Data; });\r\n }\r\n\r\n public OnIsShowOnlyAccessibleChanged() {\r\n this.LoadDataSource();\r\n }\r\n}\r\n\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { AdminAccessRequest } from './../entities/adminaccessrequest.entity';\r\nimport { AdminAccessRequestView } from './../views/adminaccessrequest.view';\r\nimport { AdminAccessRequestParams } from './../params/adminaccessrequest.param';\r\nimport { AdminAccessRequestReviewParams } from './../params/adminaccessrequestreview.param';\r\nimport { AdminAccessRequestBulkApproveParams } from './../params/adminaccessrequestbulkapprove.param';\r\nimport { AdminAccessRequestCancelParams } from './../params/adminaccessrequestcancel.param';\r\n@Injectable()\r\nexport class AdminAccessRequestEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(api: APIGatewayService) {super(\"AdminAccessRequest\", api);}\r\n\t\r\n\r\n public ListEx(Params: AdminAccessRequestParams, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListEx', Params, options?.GetLoadOptions() );\r\n }\r\n\r\n public Review(Params: AdminAccessRequestReviewParams) : Observable\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'Review', Params, undefined );\r\n }\r\n\r\n public BulkApprove(Params: AdminAccessRequestBulkApproveParams) : Observable\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'BulkApprove', Params, undefined );\r\n }\r\n\r\n public Cancel(Params: AdminAccessRequestCancelParams) : Observable\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'Cancel', Params, undefined );\r\n }\r\n\r\n public override Get(EntryID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'Get', {EntryID: EntryID} );\r\n }\r\n}\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { AdminAccessRequest } from './../entities/adminaccessrequest.entity';\r\nexport class AdminAccessRequestCancelParams extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'AdminAccessRequestCancelParams';\r\n }\r\n \r\n public OrganizationID: number; \r\n public AdminAccessRequest: AdminAccessRequest = new AdminAccessRequest; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import {Component, EventEmitter, Input, Output} 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 { Organization } from '../../../_proxy/entities/organization.entity';\r\nimport { AccessService } from \"@kraken/services/access.service\";\r\nimport { OrganizationView } from \"@kraken/_proxy/views/organization.view\";\r\nimport { OrganizationGridView } from \"@kraken/_proxy/views/organizationgrid.view\";\r\nimport { AdminAccessRequestEndpoint } from \"@kraken/_proxy/endpoints/adminaccessrequest.endpoint\";\r\nimport { AdminAccessRequestCancelParams } from \"@kraken/_proxy/params/adminaccessrequestcancel.param\";\r\nimport { EnumCRUDActions } from \"@m4u-angular/core/framework/sysenums.enum\";\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-organization-grid',\r\n templateUrl: './organization-grid.component.html'\r\n})\r\nexport class OrganizationGridComponent extends BaseGridComponent\r\n{\r\n @Input() IsShowOnlyAccessible: boolean;\r\n @Output() IsShowOnlyAccessibleChange: EventEmitter = new EventEmitter();\r\n @Output() OnIsShowOnlyAccessibleChanged: EventEmitter = new EventEmitter();\r\n \r\n constructor(A: ServiceBagService,\r\n public accessService: AccessService,\r\n private adminAccessRequestEndpoint: AdminAccessRequestEndpoint) {\r\n super(A, 'OrganizationGridComponent', Organization, BaseState);\r\n }\r\n\r\n OnNavigate(e) {\r\n if (e.data.IsHasAccess) {\r\n this.Navigate([\"/pages/organization\", e.data.EntryID]);\r\n }\r\n }\r\n\r\n OnCreateRequest(organization: OrganizationGridView) {\r\n this.Navigate([\"/pages/admin-access-request/new\"], { OrganizationID: organization.EntryID, OrganizationName: organization.Name});\r\n }\r\n\r\n OnCancelRequest(organization: OrganizationGridView) {\r\n const params = new AdminAccessRequestCancelParams();\r\n params.OrganizationID = organization.EntryID;\r\n\r\n this.Do(this.adminAccessRequestEndpoint.Cancel(params), true, (response) => {\r\n this.NotifyEntitySaved(organization, Organization, EnumCRUDActions.Update);\r\n });\r\n }\r\n\r\n public OnSearchToolbarPreparing(event: any) {\r\n if (!this.UserInfo?.IsSuperAdmin) {\r\n event.toolbarOptions.items.unshift({\r\n location: 'after',\r\n template: 'searchTemplate',\r\n isCustom: true\r\n });\r\n }\r\n }\r\n \r\n public IsShowOnlyAccessibleChanged(event: any) {\r\n this.IsShowOnlyAccessibleChange.emit(event.value);\r\n this.OnIsShowOnlyAccessibleChanged.emit();\r\n }\r\n}","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\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 { DownloadRequest } from './../entities/downloadrequest.entity';\r\nimport { Job } from './../entities/job.entity';\r\nimport { SmsStatusView } from './../views/smsstatus.view';\r\nimport { SetOtpParams } from './../params/setotp.param';\r\n@Injectable()\r\nexport class DownloadRequestEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"DownloadRequest\", api);}\r\n\t\r\n\r\n public DownloadOrganizationUpdatedData(OrganizationID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'DownloadOrganizationUpdatedData', {OrganizationID: OrganizationID} );\r\n }\r\n\r\n public DownloadCompanyUpdatedData(CompanyID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'DownloadCompanyUpdatedData', {CompanyID: CompanyID} );\r\n }\r\n\r\n public DownloadBankPassUpdatedData(BankPassID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'DownloadBankPassUpdatedData', {BankPassID: BankPassID} );\r\n }\r\n\r\n public DownloadBookingAccountUpdatedData(AccountID: number, BookingAccountID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'DownloadBookingAccountUpdatedData', {AccountID: AccountID, BookingAccountID: BookingAccountID} );\r\n }\r\n\r\n public DownloadAccountUpdatedData(AccountID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'DownloadAccountUpdatedData', {AccountID: AccountID} );\r\n }\r\n\r\n public DownloadContractUpdatedData(ContractID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'DownloadContractUpdatedData', {ContractID: ContractID} );\r\n }\r\n\r\n public SetOTP(Params: SetOtpParams) : Observable\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'SetOTP', Params, undefined );\r\n }\r\n\r\n public GetResultJob(DownloadRequestID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetResultJob', {DownloadRequestID: DownloadRequestID} );\r\n }\r\n\r\n public GetDownloadSmsStatus(JobID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetDownloadSmsStatus', {JobID: JobID} );\r\n }\r\n}\r\n\r\n","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseParamsFilter } from './../entities/baseparamsfilter.entity';\r\nexport class ListTransactionCategoriesParams extends BaseParamsFilter {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ListTransactionCategoriesParams';\r\n }\r\n \r\n public LoadGlobal: boolean; \r\n public PostingTemplates: number[]; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { BookingAccountView } from './../views/bookingaccount.view';\r\nimport { BookingAccount } from './../entities/bookingaccount.entity';\r\nimport { Balance } from './../entities/balance.entity';\r\nimport { BookingAccountUploadView } from './../views/bookingaccountupload.view';\r\nimport { BookingAccountListParams } from './../params/bookingaccountlist.param';\r\nimport { EnumBookingAccountSubtypes } from './../enums';\r\nimport { RecategorizeParams } from './../params/recategorize.param';\r\nimport { RegenarateJournalEntriesParams } from './../params/regenaratejournalentries.param';\r\n@Injectable()\r\nexport class BookingAccountEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"BookingAccount\", api);}\r\n\t\r\n\r\n public IsBalanceExists(BookingAccountID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'IsBalanceExists', {BookingAccountID: BookingAccountID} );\r\n }\r\n\r\n public ListEx(Params: BookingAccountListParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListEx', Params, undefined );\r\n }\r\n\r\n public GetSubtypesCount(AccountID: number, SubType: EnumBookingAccountSubtypes) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetSubtypesCount', {AccountID: AccountID, SubType: SubType} );\r\n }\r\n\r\n public GetBookingAccounts(AccountID: number, SubType: EnumBookingAccountSubtypes) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetBookingAccounts', {AccountID: AccountID, SubType: SubType} );\r\n }\r\n\r\n public GetLastBalance(BookingAccountID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetLastBalance', {BookingAccountID: BookingAccountID} );\r\n }\r\n\r\n public ResetBalance(BookingAccountID: number, ResetDate: Date, Amount: number, Notes: string) : Observable\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'ResetBalance', {BookingAccountID: BookingAccountID, ResetDate: ResetDate, Amount: Amount, Notes: Notes} );\r\n }\r\n\r\n public ReloadBalance(BookingAccountID: number, ReloadDate: Date, JECreationDate: Date) : Observable\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'ReloadBalance', {BookingAccountID: BookingAccountID, ReloadDate: ReloadDate, JECreationDate: JECreationDate} );\r\n }\r\n\r\n public Recategorize(Params: RecategorizeParams) : Observable\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'Recategorize', Params, undefined );\r\n }\r\n\r\n public RegenarateJournalEntries(Params: RegenarateJournalEntriesParams) : Observable\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'RegenarateJournalEntries', Params, undefined );\r\n }\r\n\r\n public ListBookingAccountsForUploadsExport(Params: BookingAccountListParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListBookingAccountsForUploadsExport', Params, undefined );\r\n }\r\n\r\n public IsHasReconciliationsWithActiveCashFlow(BookingAccountId: number, FromDate: Date) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'IsHasReconciliationsWithActiveCashFlow', {BookingAccountId: BookingAccountId, FromDate: FromDate} );\r\n }\r\n}\r\n\r\n","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseParamsFilter } from './../entities/baseparamsfilter.entity';\r\nexport class PostingTemplateListParams extends BaseParamsFilter {\r\n constructor() {\r\n super();\r\n this.TypeName = 'PostingTemplateListParams';\r\n }\r\n \r\n public BookingAccountID: number; \r\n public Categories: 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 { BaseParamsFilter } from './../entities/baseparamsfilter.entity';\r\nimport { EnumDownloadTaskStatuses } from './../enums';\r\nexport class BookingAccountListParams extends BaseParamsFilter {\r\n constructor() {\r\n super();\r\n this.TypeName = 'BookingAccountListParams';\r\n }\r\n \r\n public WithTransactionsFrom: Date; \r\n public WithTransactionsTo: Date; \r\n public IsActiveCashFlow: boolean; \r\n public BookingAccountCode: string; \r\n public IncludeTransactionInfo: boolean; \r\n public LoadActiveUpload: boolean; \r\n public Deployments: number[]; \r\n public IsOnlyNotAutomaticUpload: boolean; \r\n public IsOnlyLoanModule: boolean; \r\n public DownloadTaskStatuses: EnumDownloadTaskStatuses[]; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { ListTransactionCategoriesParams } from '../../_proxy/params/listtransactioncategories.param';\r\nimport { BookingAccountEndpoint } from '../../_proxy/endpoints/bookingaccount.endpoint';\r\nimport { AccountEndpoint } from '../../_proxy/endpoints/account.endpoint';\r\nimport { CompanyEndpoint } from '../../_proxy/endpoints/company.endpoint';\r\nimport { OrganizationEndpoint } from '../../_proxy/endpoints/organization.endpoint';\r\nimport { PostingTemplateEndpoint } from '../../_proxy/endpoints/postingtemplate.endpoint';\r\nimport { TransactionCategoryEndpoint } from '../../_proxy/endpoints/transactioncategory.endpoint';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseState, GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { Component } from '@angular/core';\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 { PostingTemplateListParams } from '../../_proxy/params/postingtemplatelist.param';\r\nimport { EnumEntityTypes, EnumGenerationTypeJournalEntry, EnumJournalEntrySources } from '@kraken/_proxy/enums';\r\nimport { RegenarateJournalEntriesParams } from '@kraken/_proxy/params/regenaratejournalentries.param';\r\nimport { BookingAccountListParams } from '@kraken/_proxy/params/bookingaccountlist.param';\r\nimport { BookingAccountView } from '@kraken/_proxy/views/bookingaccount.view';\r\nimport { some } from 'lodash';\r\n\r\nclass State extends BaseState {\r\n EntityID: number;\r\n EntityType: EnumEntityTypes;\r\n IsCreateJournalEntry: boolean;\r\n OrganizationID: number;\r\n CompanyID: number;\r\n AccountID: number;\r\n BookingAccountID: number;\r\n GenerationTypes: GenericListEntity[];\r\n GenerationType: EnumGenerationTypeJournalEntry;\r\n DateFrom: Date;\r\n Categories: number[] = [];\r\n Templates: number[] = [];\r\n IsSkipFilledTransactions = true;\r\n VisibleLoadPanel: boolean;\r\n IsCCPostingAccountExist: boolean = false;\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-generate-journal-entry-dialog',\r\n templateUrl: './generate-journal-entry-dialog.component.html',\r\n styleUrls: ['./generate-journal-entry-dialog.component.scss']\r\n})\r\nexport class GenerateJournalEntryDialogComponent extends BasePageComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private transactioncategoryEndpoint: TransactionCategoryEndpoint,\r\n private postingTemplateEndpoint: PostingTemplateEndpoint,\r\n private organizationEndpoint: OrganizationEndpoint,\r\n private companyEndpoint: CompanyEndpoint,\r\n private accountEndpoint: AccountEndpoint,\r\n private bookingAccountEndpoint: BookingAccountEndpoint\r\n ) {\r\n super(A, 'GenerateJournalEntryDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog);\r\n }\r\n\r\n get IsCategoriesVisible() {\r\n return this.State.GenerationType !== EnumGenerationTypeJournalEntry.CCAutoPosting;\r\n }\r\n\r\n get IsTemplatesVisible() {\r\n return this.State.GenerationType !== EnumGenerationTypeJournalEntry.CCAutoPosting;\r\n }\r\n\r\n RegenarateJournalEntriesByOrganization(OrganizationID: number, onSuccess: () => void = undefined, onCancel: () => void = undefined) {\r\n const params = new BookingAccountListParams();\r\n params.OrganizationID = OrganizationID;\r\n this.ProcessBookingAccounts(params, () => {\r\n this.ShowDialogShort(onSuccess, onCancel);\r\n this.InitComponent(OrganizationID, OrganizationID, EnumEntityTypes.Organization);\r\n });\r\n }\r\n\r\n RegenarateJournalEntriesByCompany(CompanyID: number, OrganizationID: number, onSuccess: () => void = undefined, onCancel: () => void = undefined) {\r\n const params = new BookingAccountListParams();\r\n params.Companies = [CompanyID];\r\n this.ProcessBookingAccounts(params, () => {\r\n this.ShowDialogShort(onSuccess, onCancel);\r\n this.State.CompanyID = CompanyID;\r\n this.InitComponent(CompanyID, OrganizationID, EnumEntityTypes.Company);\r\n });\r\n }\r\n\r\n ProcessBookingAccounts(params: BookingAccountListParams, callback: () => void = undefined) {\r\n this.Do(this.bookingAccountEndpoint.ListEx(params), false, (response) => {\r\n this.State.IsCCPostingAccountExist = some(response.Entities as BookingAccountView[], item => item.IsCCPostingAutoGenerate);\r\n if (!this.State.IsCCPostingAccountExist) {\r\n this.State.GenerationType = EnumGenerationTypeJournalEntry.TransactionsAutoPosting;\r\n }\r\n callback();\r\n });\r\n }\r\n\r\n RegenarateJournalEntriesByAccount(AccountID: number, OrganizationID: number, onSuccess: () => void = undefined, onCancel: () => void = undefined) {\r\n const params = new BookingAccountListParams();\r\n params.Accounts = [AccountID];\r\n this.ProcessBookingAccounts(params, () => {\r\n this.ShowDialogShort(onSuccess, onCancel);\r\n this.State.AccountID = AccountID;\r\n this.InitComponent(AccountID, OrganizationID, EnumEntityTypes.Account)\r\n });\r\n }\r\n\r\n RegenarateJournalEntriesByBookingAccount(BookingAccountID: number, OrganizationID: number, onSuccess: () => void = undefined, onCancel: () => void = undefined) {\r\n const params = new BookingAccountListParams();\r\n params.BookingAccounts = [BookingAccountID];\r\n this.ProcessBookingAccounts(params, () => { \r\n this.ShowDialogShort(onSuccess, onCancel);\r\n this.State.BookingAccountID = BookingAccountID;\r\n this.InitComponent(BookingAccountID, OrganizationID, EnumEntityTypes.BookingAccount);\r\n });\r\n }\r\n\r\n RegenarateJournaleEntriesByPostingTemplate(PostingTemplateID: number, CategoryID: number, DateFrom: Date, OrganizationID: number, onSuccess: () => void = undefined, onCancel: () => void = undefined) {\r\n this.ShowDialogShort(onSuccess, onCancel);\r\n this.State.Categories.push(CategoryID);\r\n this.State.Templates.push(PostingTemplateID);\r\n if (DateFrom) this.State.DateFrom = DateFrom;\r\n this.InitComponent(OrganizationID, OrganizationID, EnumEntityTypes.Organization);\r\n }\r\n\r\n RegenarateJournalEntries() {\r\n const endpoint = this.GetCategorizationEndpoint();\r\n const EntryIDField = this.GetCategorizationEntryIDField();\r\n const params = new RegenarateJournalEntriesParams();\r\n params[EntryIDField] = this.State.EntityID;\r\n params.DateFrom = this.State.DateFrom;\r\n params.TransactionCategories = this.State.Categories;\r\n params.PostingTemplates = this.State.Templates;\r\n params.GenerationType = this.State.GenerationType;\r\n \r\n this.State.VisibleLoadPanel = true;\r\n\r\n this.Do(endpoint.RegenarateJournalEntries(params), true, () => {\r\n this.State.VisibleLoadPanel = false;\r\n this.CloseDialogWithSuccess();\r\n }, () => { this.State.VisibleLoadPanel = false; });\r\n }\r\n\r\n IsShowCompanyTemplate() {\r\n return this.State.EntityType == EnumEntityTypes.Organization;\r\n }\r\n\r\n OnTemplatesChanged() {\r\n this.InitCategories();\r\n }\r\n\r\n OnCategoriesChanged() {\r\n this.InitTemplates();\r\n }\r\n\r\n OnSourceChanged({ value }) {\r\n if (value === EnumGenerationTypeJournalEntry.CCAutoPosting) {\r\n this.State.Categories = [];\r\n this.State.Templates = [];\r\n }\r\n }\r\n\r\n private InitComponent(EntryID: number, OrganizationID: number, EntityType: EnumEntityTypes) {\r\n // Fill state\r\n this.State.OrganizationID = OrganizationID;\r\n this.State.EntityID = EntryID;\r\n this.State.EntityType = EntityType;\r\n\r\n // Change the title\r\n this.NotifyReloadTitle();\r\n\r\n // Init data sources\r\n this.InitCategories();\r\n this.InitTemplates();\r\n }\r\n\r\n protected override OnInitState(): void {\r\n this.State.GenerationType = EnumGenerationTypeJournalEntry.TransactionsAutoPosting;\r\n this.State.GenerationTypes = this.LIST('GenerationJETypes');\r\n }\r\n\r\n private InitCategories() {\r\n let params = new ListTransactionCategoriesParams();\r\n params.OrganizationID = this.State.OrganizationID;\r\n params.LoadActive = true;\r\n params.LoadGlobal = true;\r\n params.PostingTemplates = this.State.Templates;\r\n\r\n this.DataSources['Categories'] = new DataSourceCustomAction((options: DataLoadOptions) => this.transactioncategoryEndpoint.ListEx(params, options));\r\n }\r\n\r\n private InitTemplates() {\r\n const params = new PostingTemplateListParams();\r\n params.LoadActive = true;\r\n params.OrganizationID = this.State.OrganizationID;\r\n params.Companies = this.State.CompanyID ? [this.State.CompanyID] : [];\r\n params.Accounts = this.State.AccountID ? [this.State.AccountID] : [];\r\n params.BookingAccountID = this.State.BookingAccountID;\r\n params.Categories = this.State.Categories;\r\n\r\n this.DataSources['Templates'] = new DataSourceCustomAction((options: DataLoadOptions) => this.postingTemplateEndpoint.ListEx(params, options));\r\n }\r\n\r\n private GetCategorizationEndpoint() {\r\n switch (this.State.EntityType) {\r\n case (EnumEntityTypes.Organization): return this.organizationEndpoint;\r\n case (EnumEntityTypes.Company): return this.companyEndpoint;\r\n case (EnumEntityTypes.Account): return this.accountEndpoint;\r\n case (EnumEntityTypes.BookingAccount): return this.bookingAccountEndpoint;\r\n }\r\n }\r\n\r\n private GetCategorizationEntryIDField() {\r\n switch (this.State.EntityType) {\r\n case (EnumEntityTypes.Organization): return 'OrganizationID';\r\n case (EnumEntityTypes.Company): return 'CompanyID';\r\n case (EnumEntityTypes.Account): return 'AccountID';\r\n case (EnumEntityTypes.BookingAccount): return 'BookingAccountID';\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\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class ReconcileParams extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ReconcileParams';\r\n }\r\n \r\n public OrganizationID: number; \r\n public AccountID: number; \r\n public CompanyID: number; \r\n public DateFrom: Date; \r\n\t\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\tJobExecutionTime1 = \"JobExecutionTime1\",\r\n\tJobExecutionTime2 = \"JobExecutionTime2\",\r\n\tJobExecutionTime3 = \"JobExecutionTime3\",\r\n\tJobExecutionTime4 = \"JobExecutionTime4\",\r\n\tJobExecutionTime5 = \"JobExecutionTime5\",\r\n\tJobExecutionTimeForNewAccounts = \"JobExecutionTimeForNewAccounts\",\r\n\tJobExecutionInterval = \"JobExecutionInterval\",\r\n\tJobsInParallel = \"JobsInParallel\",\r\n\tJobExecutionMT940 = \"JobExecutionMT940\",\r\n\tJobExecutionTimeForRates = \"JobExecutionTimeForRates\",\r\n\tCreditCardLateArrivalDays = \"CreditCardLateArrivalDays\",\r\n\tMaxLastTransactionRefetchDays = \"MaxLastTransactionRefetchDays\",\r\n\tTakeScreenshotOnSuccess = \"TakeScreenshotOnSuccess\",\r\n\tTakeScreenshotOnFailure = \"TakeScreenshotOnFailure\",\r\n\tTakeScreenshotOnException = \"TakeScreenshotOnException\",\r\n\tSMSServiceURL = \"SMSServiceURL\",\r\n\tSMSServiceUsername = \"SMSServiceUsername\",\r\n\tSMSServicePassword = \"SMSServicePassword\",\r\n\tMailServiceAccount = \"MailServiceAccount\",\r\n\tMailServicePassword = \"MailServicePassword\",\r\n\tMailClientID = \"MailClientID\",\r\n\tMailClientSecret = \"MailClientSecret\",\r\n\tMailTenant = \"MailTenant\",\r\n\tBalanceSyncNotificationTime = \"BalanceSyncNotificationTime\",\r\n\tDemoOrganisationId = \"DemoOrganisationId\",\r\n\tMT940FilesDirectory = \"MT940FilesDirectory\",\r\n\tCityBankFilesAttachments = \"CityBankFilesAttachments\",\r\n\tChequeImagesDirectory = \"ChequeImagesDirectory\",\r\n\tChequeImagesDirectoryDemo = \"ChequeImagesDirectoryDemo\",\r\n\tUploaderSAPByDesignIntervalSeconds = \"UploaderSAPByDesignIntervalSeconds\",\r\n\tJobExecutionTimeForUploaderNetSuite = \"JobExecutionTimeForUploaderNetSuite\",\r\n\tBAI2Folder = \"BAI2Folder\",\r\n\tUploaderSyncIntervalSeconds = \"UploaderSyncIntervalSeconds\",\r\n\tReplicatorSyncIntervalSeconds = \"ReplicatorSyncIntervalSeconds\",\r\n\tUploadSyncExpiredHours = \"UploadSyncExpiredHours\",\r\n\tRemoveHistoricalDataExecutionTime = \"RemoveHistoricalDataExecutionTime\",\r\n\tNotifyAboutBankPassProblemsExecutionTime = \"NotifyAboutBankPassProblemsExecutionTime\",\r\n\tVatValue = \"VatValue\",\r\n\tTransactionCategoryCheque = \"TransactionCategoryCheque\",\r\n\tTransactionCategoryChequeReturn = \"TransactionCategoryChequeReturn\",\r\n\tAsposeLicensePath = \"AsposeLicensePath\",\r\n\tLeumiMaxWhiteImage = \"LeumiMaxWhiteImage\",\r\n\tLoanTransactionCategoryID = \"LoanTransactionCategoryID\",\r\n\tContactUsEnabled = \"ContactUsEnabled\",\r\n\tSFTPRootFolder = \"SFTPRootFolder\",\r\n\tExecutionLoanAutoPosting = \"ExecutionLoanAutoPosting\",\r\n\tIncomingPaymentCategoryIDs = \"IncomingPaymentCategoryIDs\",\r\n\tDemoTransDirectory = \"DemoTransDirectory\",\r\n\tUploaderComaxIntervalSeconds = \"UploaderComaxIntervalSeconds\",\r\n\tUploaderPriorityIntervalSeconds = \"UploaderPriorityIntervalSeconds\"\r\n\r\n\r\n}\r\nexport enum EnumCredentialTypes\r\n{ \r\n\tAdmin = \"Admin\",\r\n\tUser = \"User\",\r\n\tDeployment = \"Deployment\",\r\n\tAPI = \"API\"\r\n\r\n\r\n}\r\nexport enum EnumDownloadTaskStatuses\r\n{ \r\n\tPending = \"Pending\",\r\n\tNoData = \"NoData\",\r\n\tFailure = \"Failure\",\r\n\tSuccess = \"Success\",\r\n\tNotSynched = \"NotSynched\",\r\n\tReviewed = \"Reviewed\"\r\n\r\n\r\n}\r\nexport enum EnumDownloadStatuses\r\n{ \r\n\tPending = \"Pending\",\r\n\tNoData = \"NoData\",\r\n\tFailure = \"Failure\",\r\n\tSuccess = \"Success\",\r\n\tBrowserStartFailure = \"BrowserStartFailure\",\r\n\tLoginFailure = \"LoginFailure\",\r\n\tFileImported = \"FileImported\"\r\n\r\n\r\n}\r\nexport enum EnumDownloadRequestStatuses\r\n{ \r\n\tPending = \"Pending\",\r\n\tNoData = \"NoData\",\r\n\tFailure = \"Failure\",\r\n\tFinished = \"Finished\"\r\n\r\n\r\n}\r\nexport enum EnumDownloadStepStatuses\r\n{ \r\n\tPending = \"Pending\",\r\n\tException = \"Exception\",\r\n\tFailure = \"Failure\",\r\n\tSuccess = \"Success\"\r\n\r\n\r\n}\r\nexport enum EnumJobStatuses\r\n{ \r\n\tExecuting = \"Executing\",\r\n\tNoData = \"NoData\",\r\n\tFailure = \"Failure\",\r\n\tSuccess = \"Success\"\r\n\r\n\r\n}\r\nexport enum EnumBatchStatuses\r\n{ \r\n\tInitiated = \"Initiated\",\r\n\tNoData = \"NoData\",\r\n\tFailure = \"Failure\",\r\n\tSuccess = \"Success\"\r\n\r\n\r\n}\r\nexport enum EnumUploadStatuses\r\n{ \r\n\tInitiated = \"Initiated\",\r\n\tNoData = \"NoData\",\r\n\tException = \"Exception\",\r\n\tSuccess = \"Success\",\r\n\tDataSent = \"DataSent\",\r\n\tBalanceMismatch = \"BalanceMismatch\",\r\n\tBalanceNotExistsForDate = \"BalanceNotExistsForDate\",\r\n\tCompanyNotFound = \"CompanyNotFound\",\r\n\tAccountNotFound = \"AccountNotFound\",\r\n\tJournalEntryCreationError = \"JournalEntryCreationError\",\r\n\tNotSynched = \"NotSynched\",\r\n\tFileExported = \"FileExported\",\r\n\tNoClosingDate = \"NoClosingDate\"\r\n\r\n\r\n}\r\nexport enum EnumSnapthotsStatuses\r\n{ \r\n\tInitiated = \"Initiated\",\r\n\tNoData = \"NoData\",\r\n\tFailure = \"Failure\",\r\n\tSuccess = \"Success\"\r\n\r\n\r\n}\r\nexport enum EnumReplicationStatuses\r\n{ \r\n\tInitiated = \"Initiated\",\r\n\tNoData = \"NoData\",\r\n\tException = \"Exception\",\r\n\tSuccess = \"Success\",\r\n\tCompanyNotFound = \"CompanyNotFound\"\r\n\r\n\r\n}\r\nexport enum EnumBankGroups\r\n{ \r\n\tPoalim = \"Poalim\",\r\n\tLeumi = \"Leumi\",\r\n\tDiscount = \"Discount\",\r\n\tMizrahi = \"Mizrahi\",\r\n\tBenLeumi = \"BenLeumi\",\r\n\tCityBank = \"CityBank\",\r\n\tExternalCreditCards = \"ExternalCreditCards\",\r\n\tForeignBankGroup1 = \"ForeignBankGroup1\",\r\n\tForeignBankGroup2 = \"ForeignBankGroup2\",\r\n\tDoar = \"Doar\",\r\n\tJerusalem = \"Jerusalem\",\r\n\tExternalLoaners = \"ExternalLoaners\",\r\n\tHSBC = \"HSBC\",\r\n\tCCProcessors = \"CCProcessors\",\r\n\tAll = \"All\"\r\n\r\n\r\n}\r\nexport enum EnumBanks\r\n{ \r\n\tYahav = \"Yahav\",\r\n\tLeumi = \"Leumi\",\r\n\tDiscount = \"Discount\",\r\n\tPoalim = \"Poalim\",\r\n\tMerkantil = \"Merkantil\",\r\n\tOneZero = \"OneZero\",\r\n\tMizrahi = \"Mizrahi\",\r\n\tCityBank = \"CityBank\",\r\n\tHSBC = \"HSBC\",\r\n\tBenLeumi = \"BenLeumi\",\r\n\tMasad = \"Masad\",\r\n\tUbank = \"Ubank\",\r\n\tOtsarHaHayal = \"OtsarHaHayal\",\r\n\tPagi = \"Pagi\",\r\n\tEgud = \"Egud\",\r\n\tDoar = \"Doar\",\r\n\tJerusalem = \"Jerusalem\",\r\n\tIsracard = \"Isracard\",\r\n\tVisaCal = \"VisaCal\",\r\n\tLeumiMax = \"LeumiMax\",\r\n\tAmex = \"Amex\",\r\n\tForeignPlaceholder1 = \"ForeignPlaceholder1\",\r\n\tForeignPlaceholder2 = \"ForeignPlaceholder2\",\r\n\tForeignPlaceholder3 = \"ForeignPlaceholder3\",\r\n\tPlaid = \"Plaid\",\r\n\tExternalLoanerMisc = \"ExternalLoanerMisc\",\r\n\tExternalLoanerVisa = \"ExternalLoanerVisa\",\r\n\tExternalLoanerIsracard = \"ExternalLoanerIsracard\",\r\n\tExternalLoanerLeumiMax = \"ExternalLoanerLeumiMax\",\r\n\tExternalLoanerMimunYashir = \"ExternalLoanerMimunYashir\",\r\n\tExternalLoanerHarel = \"ExternalLoanerHarel\",\r\n\tExternalLoanerMigdal = \"ExternalLoanerMigdal\",\r\n\tExternalLoanerAltshuler = \"ExternalLoanerAltshuler\",\r\n\tExternalLoanerFenix = \"ExternalLoanerFenix\",\r\n\tExternalLoanerMeitav = \"ExternalLoanerMeitav\",\r\n\tCCIsracard = \"CCIsracard\",\r\n\tCCVisaCal = \"CCVisaCal\",\r\n\tCCLeumiMax = \"CCLeumiMax\",\r\n\tUnknown = \"Unknown\"\r\n\r\n\r\n}\r\nexport enum EnumBalanceDetailsSortType\r\n{ \r\n\tSortBySum = \"SortBySum\",\r\n\tSortByName = \"SortByName\",\r\n\tNone = \"None\"\r\n\r\n\r\n}\r\nexport enum EnumBookingAccountSubtypes\r\n{ \r\n\tCurrent = \"Current\",\r\n\tDeposits = \"Deposits\",\r\n\tStocks = \"Stocks\",\r\n\tCreditCard = \"CreditCard\",\r\n\tLoans = \"Loans\",\r\n\tGuarantee = \"Guarantee\",\r\n\tUnknown = \"Unknown\"\r\n\r\n\r\n}\r\nexport enum EnumBookingAccountStockTypes\r\n{ \r\n\tAll = \"All\",\r\n\tOther = \"Other\",\r\n\tStocks = \"Stocks\",\r\n\tCorporateBonds = \"CorporateBonds\",\r\n\tGovermentBonds = \"GovermentBonds\",\r\n\tGovermentBondsMakam = \"GovermentBondsMakam\",\r\n\tETFs = \"ETFs\",\r\n\tTrustFunds = \"TrustFunds\",\r\n\tCommodities = \"Commodities\",\r\n\tOptions = \"Options\",\r\n\tConverters = \"Converters\",\r\n\tUnknown = \"Unknown\"\r\n\r\n\r\n}\r\nexport enum EnumBookingAccountDepositTypes\r\n{ \r\n\tAll = \"All\",\r\n\tRegular = \"Regular\",\r\n\tDaily = \"Daily\",\r\n\tUnknown = \"Unknown\"\r\n\r\n\r\n}\r\nexport enum EnumAccountingSoftwares\r\n{ \r\n\tUnknown = \"Unknown\",\r\n\tSBO = \"SBO\",\r\n\tPriority = \"Priority\",\r\n\tHashavshevet = \"Hashavshevet\",\r\n\tStandalone = \"Standalone\",\r\n\tSAPByDesign = \"SAPByDesign\",\r\n\tNetSuite = \"NetSuite\",\r\n\tWizCloud = \"WizCloud\",\r\n\tArdani = \"Ardani\",\r\n\tRivhit = \"Rivhit\",\r\n\tRivhit8 = \"Rivhit8\",\r\n\tComax = \"Comax\",\r\n\tIntentia = \"Intentia\"\r\n\r\n\r\n}\r\nexport enum EnumUploaderType\r\n{ \r\n\tSftp = \"Sftp\",\r\n\tSAPByDesign = \"SAPByDesign\",\r\n\tWizCloud = \"WizCloud\",\r\n\tComax = \"Comax\",\r\n\tPriority = \"Priority\"\r\n\r\n\r\n}\r\nexport enum EnumUserNotificationMethods\r\n{ \r\n\tEmail = \"Email\",\r\n\tPhone = \"Phone\",\r\n\tNone = \"None\",\r\n\tEmailAndPhone = \"EmailAndPhone\"\r\n\r\n\r\n}\r\nexport enum EnumTransactionTypes\r\n{ \r\n\tNormal = \"Normal\",\r\n\tOpeningBalance = \"OpeningBalance\",\r\n\tImplicit = \"Implicit\"\r\n\r\n\r\n}\r\nexport enum EnumBankChargeType\r\n{ \r\n\tNone = \"None\",\r\n\tMonthly = \"Monthly\",\r\n\tImmidiate = \"Immidiate\"\r\n\r\n\r\n}\r\nexport enum EnumOrganizationChildEntityTypes\r\n{ \r\n\tCompany = \"Company\",\r\n\tUser = \"User\",\r\n\tDeployment = \"Deployment\",\r\n\tBillingContract = \"BillingContract\",\r\n\tBankPass = \"BankPass\",\r\n\tAccount = \"Account\",\r\n\tAccountGroup = \"AccountGroup\",\r\n\tNotificationTemplate = \"NotificationTemplate\",\r\n\tAlertTemplate = \"AlertTemplate\",\r\n\tScenario = \"Scenario\",\r\n\tProbabilityLevel = \"ProbabilityLevel\",\r\n\tFileImportTemplate = \"FileImportTemplate\",\r\n\tExternalAPIKey = \"ExternalAPIKey\",\r\n\tDepositCategory = \"DepositCategory\",\r\n\tDepositClassificationRule = \"DepositClassificationRule\",\r\n\tLoanCategory = \"LoanCategory\",\r\n\tLoanClassificationRule = \"LoanClassificationRule\",\r\n\tStockCategory = \"StockCategory\",\r\n\tStockClassificationRule = \"StockClassificationRule\",\r\n\tGuaranteeCategory = \"GuaranteeCategory\",\r\n\tGuaratneeClassificationRule = \"GuaratneeClassificationRule\"\r\n\r\n\r\n}\r\nexport enum EnumCompanyChildEntityTypes\r\n{ \r\n\tAccount = \"Account\",\r\n\tPostingTemplate = \"PostingTemplate\",\r\n\tForecastMapper = \"ForecastMapper\",\r\n\tCCContract = \"CCContract\",\r\n\tCategory = \"Category\",\r\n\tClassificationRule = \"ClassificationRule\",\r\n\tParentCategory = \"ParentCategory\"\r\n\r\n\r\n}\r\nexport enum EnumDashboardGroupBy\r\n{ \r\n\tBank = \"Bank\",\r\n\tAccount = \"Account\",\r\n\tCompany = \"Company\",\r\n\tAccountGroup = \"AccountGroup\",\r\n\tCurrency = \"Currency\",\r\n\tBookingAccountAssetsSubtype = \"BookingAccountAssetsSubtype\",\r\n\tBookingAccountLiabilitiesSubtype = \"BookingAccountLiabilitiesSubtype\"\r\n\r\n\r\n}\r\nexport enum EnumBalanceNotificationGrouping\r\n{ \r\n\tBank = \"Bank\",\r\n\tAccount = \"Account\",\r\n\tCompany = \"Company\",\r\n\tAccountGroup = \"AccountGroup\"\r\n\r\n\r\n}\r\nexport enum EnumEntityTypes\r\n{ \r\n\tOrganization = \"Organization\",\r\n\tCompany = \"Company\",\r\n\tBankPass = \"BankPass\",\r\n\tAccount = \"Account\",\r\n\tBookingAccount = \"BookingAccount\",\r\n\tUser = \"User\",\r\n\tAccountGroup = \"AccountGroup\",\r\n\tAdmin = \"Admin\",\r\n\tNotificationTemplate = \"NotificationTemplate\",\r\n\tCategory = \"Category\",\r\n\tClassificationRule = \"ClassificationRule\",\r\n\tPostingTemplate = \"PostingTemplate\",\r\n\tJournalEntry = \"JournalEntry\"\r\n\r\n\r\n}\r\nexport enum EnumBankPassCredentialValidity\r\n{ \r\n\tUnknown = \"Unknown\",\r\n\tValid = \"Valid\",\r\n\tInvalid = \"Invalid\"\r\n\r\n\r\n}\r\nexport enum EnumClassificarionRuleFieldType\r\n{ \r\n\tNotes1 = \"Notes1\",\r\n\tNotes2 = \"Notes2\",\r\n\tReference = \"Reference\"\r\n\r\n\r\n}\r\nexport enum EnumClassificarionRuleMatchType\r\n{ \r\n\tEqual = \"Equal\",\r\n\tStartWith = \"StartWith\",\r\n\tContains = \"Contains\",\r\n\tMatchRegex = \"MatchRegex\",\r\n\tNotEqual = \"NotEqual\",\r\n\tNotStartWith = \"NotStartWith\",\r\n\tNotContains = \"NotContains\",\r\n\tNotMatchRegex = \"NotMatchRegex\"\r\n\r\n\r\n}\r\nexport enum EnumMatchingRelationship\r\n{ \r\n\tAnd = \"And\",\r\n\tOr = \"Or\"\r\n\r\n\r\n}\r\nexport enum EnumBalanceHistoryReportMode\r\n{ \r\n\tMonthly = \"Monthly\",\r\n\tWeekly = \"Weekly\",\r\n\tDaily = \"Daily\"\r\n\r\n\r\n}\r\nexport enum EnumForecastSystemSource\r\n{ \r\n\tTransactions = \"Transactions\",\r\n\tAccountingForecast = \"AccountingForecast\",\r\n\tForecastOperation = \"ForecastOperation\",\r\n\tCCExpense = \"CCExpense\",\r\n\tCCIncome = \"CCIncome\",\r\n\tLoans = \"Loans\",\r\n\tDeposits = \"Deposits\",\r\n\tFutureCheques = \"FutureCheques\"\r\n\r\n\r\n}\r\nexport enum EnumAccountingDocumentType\r\n{ \r\n\tInvoice = \"Invoice\",\r\n\tRefund = \"Refund\",\r\n\tPurchaseInvoice = \"PurchaseInvoice\",\r\n\tPurchaseRefund = \"PurchaseRefund\",\r\n\tOrder = \"Order\",\r\n\tPurchaseOrder = \"PurchaseOrder\",\r\n\tIncomingPayment = \"IncomingPayment\",\r\n\tOutgoingPayment = \"OutgoingPayment\",\r\n\tJournalEntry = \"JournalEntry\",\r\n\tPaymentRequest = \"PaymentRequest\",\r\n\tUnknown = \"Unknown\"\r\n\r\n\r\n}\r\nexport enum EnumPeriodType\r\n{ \r\n\tDaily = \"Daily\",\r\n\tWeekly = \"Weekly\",\r\n\tBiWeekly = \"BiWeekly\",\r\n\tMonthly = \"Monthly\",\r\n\tBiMonthly = \"BiMonthly\",\r\n\tQuarterly = \"Quarterly\",\r\n\tScheduledDays = \"ScheduledDays\"\r\n\r\n\r\n}\r\nexport enum EnumIncreaseType\r\n{ \r\n\tNone = \"None\",\r\n\tPercent = \"Percent\",\r\n\tFixedAmount = \"FixedAmount\"\r\n\r\n\r\n}\r\nexport enum EnumSide\r\n{ \r\n\tIncome = \"Income\",\r\n\tExpense = \"Expense\",\r\n\tUnknown = \"Unknown\"\r\n\r\n\r\n}\r\nexport enum EnumLoanSide\r\n{ \r\n\tIncoming = \"Incoming\",\r\n\tOutgoing = \"Outgoing\"\r\n\r\n\r\n}\r\nexport enum EnumSource\r\n{ \r\n\tAutomatic = \"Automatic\",\r\n\tManual = \"Manual\"\r\n\r\n\r\n}\r\nexport enum EnumForecastDateRelevance\r\n{ \r\n\tPast = \"Past\",\r\n\tNotReconcilledAccounting = \"NotReconcilledAccounting\",\r\n\tNotReconcilledForecast = \"NotReconcilledForecast\",\r\n\tFuture = \"Future\"\r\n\r\n\r\n}\r\nexport enum EnumSummaryLevel\r\n{ \r\n\tDay = \"Day\",\r\n\tWeek = \"Week\",\r\n\tMonth = \"Month\"\r\n\r\n\r\n}\r\nexport enum EnumFutureForecastGroupBy\r\n{ \r\n\tParentCategory = \"ParentCategory\",\r\n\tCategory = \"Category\",\r\n\tDataSource = \"DataSource\"\r\n\r\n\r\n}\r\nexport enum EnumCashflowSummarizedAggregationLevel\r\n{ \r\n\tCompany = \"Company\",\r\n\tBank = \"Bank\",\r\n\tAccountGroup = \"AccountGroup\",\r\n\tBookingAccount = \"BookingAccount\",\r\n\tAccount = \"Account\",\r\n\tBankGroup = \"BankGroup\",\r\n\tCurrency = \"Currency\",\r\n\tCategory = \"Category\"\r\n\r\n\r\n}\r\nexport enum EnumUserAuthorizationType\r\n{ \r\n\tAll = \"All\",\r\n\tCompanies = \"Companies\",\r\n\tAccounts = \"Accounts\"\r\n\r\n\r\n}\r\nexport enum EnumNotificationRequestStatuses\r\n{ \r\n\tPending = \"Pending\",\r\n\tSent = \"Sent\"\r\n\r\n\r\n}\r\nexport enum EnumShowInCurrencyOptions\r\n{ \r\n\tOriginal = \"Original\",\r\n\tILS = \"ILS\",\r\n\tBoth = \"Both\",\r\n\tDefault = \"Default\",\r\n\tOriginalAndDefault = \"OriginalAndDefault\",\r\n\tOriginalAndDollar = \"OriginalAndDollar\",\r\n\tTE = \"TE\"\r\n\r\n\r\n}\r\nexport enum EnumExportType\r\n{ \r\n\tInEmail = \"InEmail\",\r\n\tExcel = \"Excel\",\r\n\tBoth = \"Both\"\r\n\r\n\r\n}\r\nexport enum EnumPositiveNegative\r\n{ \r\n\tPositive = \"Positive\",\r\n\tNegative = \"Negative\",\r\n\tBoth = \"Both\",\r\n\tBothWithoutZero = \"BothWithoutZero\"\r\n\r\n\r\n}\r\nexport enum EnumNotificationTemplateSectionFields\r\n{ \r\n\tBookingAccountType = \"BookingAccountType\",\r\n\tCompany = \"Company\",\r\n\tAccountGroup = \"AccountGroup\",\r\n\tBankGroup = \"BankGroup\",\r\n\tBank = \"Bank\",\r\n\tBankAccount = \"BankAccount\",\r\n\tBookingAccount = \"BookingAccount\",\r\n\tCurrency = \"Currency\",\r\n\tHasCheques = \"HasCheques\",\r\n\tCategory = \"Category\",\r\n\tDepositTypes = \"DepositTypes\",\r\n\tStockTypes = \"StockTypes\",\r\n\tAmortizationType = \"AmortizationType\",\r\n\tInterestType = \"InterestType\",\r\n\tNextDays = \"NextDays\",\r\n\tNextWeeks = \"NextWeeks\",\r\n\tNextMonths = \"NextMonths\",\r\n\tSumSide = \"SumSide\"\r\n\r\n\r\n}\r\nexport enum EnumNotificationTemplateSectionType\r\n{ \r\n\tBalances = \"Balances\",\r\n\tTransactions = \"Transactions\",\r\n\tBalanceDetails = \"BalanceDetails\",\r\n\tLoanPayments = \"LoanPayments\"\r\n\r\n\r\n}\r\nexport enum EnumYesNo\r\n{ \r\n\tNo = \"No\",\r\n\tYes = \"Yes\"\r\n\r\n\r\n}\r\nexport enum EnumDownloadFailureReviewStatus\r\n{ \r\n\tOnetime = \"Onetime\",\r\n\tPermanent = \"Permanent\",\r\n\tExceptionChanged = \"ExceptionChanged\",\r\n\tCancelled = \"Cancelled\"\r\n\r\n\r\n}\r\nexport enum EnumUploadRequestStatuses\r\n{ \r\n\tPending = \"Pending\",\r\n\tNoData = \"NoData\",\r\n\tFailure = \"Failure\",\r\n\tFinished = \"Finished\"\r\n\r\n\r\n}\r\nexport enum EnumBankTypes\r\n{ \r\n\tLocal = \"Local\",\r\n\tExternalCreditCard = \"ExternalCreditCard\",\r\n\tForeign = \"Foreign\",\r\n\tExternalLoaner = \"ExternalLoaner\",\r\n\tCCProcessor = \"CCProcessor\"\r\n\r\n\r\n}\r\nexport enum EnumUploadResult\r\n{ \r\n\tSuccess = \"Success\",\r\n\tFailure = \"Failure\",\r\n\tNoData = \"NoData\"\r\n\r\n\r\n}\r\nexport enum EnumReplicationObjectTypes\r\n{ \r\n\tBusinessPartner = \"BusinessPartner\",\r\n\tBusinessPartnerGroup = \"BusinessPartnerGroup\",\r\n\tItem = \"Item\",\r\n\tItemGroup = \"ItemGroup\",\r\n\tAccountingJournalEntry = \"AccountingJournalEntry\",\r\n\tDocument = \"Document\",\r\n\tPayment = \"Payment\",\r\n\tLedgerAccount = \"LedgerAccount\",\r\n\tLedgerAccountGroup = \"LedgerAccountGroup\",\r\n\tProject = \"Project\",\r\n\tSalesPerson = \"SalesPerson\",\r\n\tDimensionCode1 = \"DimensionCode1\",\r\n\tDimensionCode2 = \"DimensionCode2\",\r\n\tDimensionCode3 = \"DimensionCode3\",\r\n\tDimensionCode4 = \"DimensionCode4\",\r\n\tDimensionCode5 = \"DimensionCode5\",\r\n\tAccountingForecastCategory = \"AccountingForecastCategory\",\r\n\tAccountingForecast = \"AccountingForecast\",\r\n\tPaymentGroup = \"PaymentGroup\",\r\n\tCompanyMetadata = \"CompanyMetadata\"\r\n\r\n\r\n}\r\nexport enum EnumPaymentMeansTypes\r\n{ \r\n\tCach = \"Cach\",\r\n\tCheque = \"Cheque\",\r\n\tCreditCard = \"CreditCard\",\r\n\tWireTransfer = \"WireTransfer\",\r\n\tMultiple = \"Multiple\",\r\n\tUnknown = \"Unknown\"\r\n\r\n\r\n}\r\nexport enum EnumInterestType\r\n{ \r\n\tFlat = \"Flat\",\r\n\tLinked = \"Linked\",\r\n\tUnknown = \"Unknown\"\r\n\r\n\r\n}\r\nexport enum EnumAmortizationType\r\n{ \r\n\tStraightLine = \"StraightLine\",\r\n\tAnnuityShpizer = \"AnnuityShpizer\",\r\n\tBaloon = \"Baloon\",\r\n\tOnCall = \"OnCall\",\r\n\tUnknown = \"Unknown\"\r\n\r\n\r\n}\r\nexport enum EnumLoanStatus\r\n{ \r\n\tDraft = \"Draft\",\r\n\tFunded = \"Funded\",\r\n\tCanceled = \"Canceled\",\r\n\tRecycled = \"Recycled\",\r\n\tFinished = \"Finished\"\r\n\r\n\r\n}\r\nexport enum EnumLoanPaymentFrequencyType\r\n{ \r\n\tWeekly = \"Weekly\",\r\n\tBiWeekly = \"BiWeekly\",\r\n\tMonthly = \"Monthly\",\r\n\tBiMonthly = \"BiMonthly\",\r\n\tQuorterly = \"Quorterly\",\r\n\tSemiAnnual = \"SemiAnnual\",\r\n\tAnnual = \"Annual\",\r\n\tOneTimePayment = \"OneTimePayment\"\r\n\r\n\r\n}\r\nexport enum EnumRecommendationPeriodType\r\n{ \r\n\tDaily = \"Daily\",\r\n\tWeekly = \"Weekly\",\r\n\tBiWeekly = \"BiWeekly\",\r\n\tMonthly = \"Monthly\",\r\n\tBiMonthly = \"BiMonthly\",\r\n\tQuarterly = \"Quarterly\",\r\n\tVariable = \"Variable\"\r\n\r\n\r\n}\r\nexport enum EnumLoanInterestPeriodCalculationType\r\n{ \r\n\tDaily = \"Daily\",\r\n\tMonthly = \"Monthly\"\r\n\r\n\r\n}\r\nexport enum EnumDocumentType\r\n{ \r\n\tInvoice = \"Invoice\",\r\n\tRefund = \"Refund\",\r\n\tPurchaseInvoice = \"PurchaseInvoice\",\r\n\tPurchaseReservationInvoice = \"PurchaseReservationInvoice\"\r\n\r\n\r\n}\r\nexport enum EnumJournalEntryDocumentType\r\n{ \r\n\tDocument = \"Document\",\r\n\tPayment = \"Payment\",\r\n\tJournalEntry = \"JournalEntry\"\r\n\r\n\r\n}\r\nexport enum EnumPredefinedNotificationTemplates\r\n{ \r\n\tGeneral = \"General\",\r\n\tDetailed = \"Detailed\",\r\n\tTotalBalance = \"TotalBalance\",\r\n\tEmpty = \"Empty\"\r\n\r\n\r\n}\r\nexport enum EnumVisibilitySetting\r\n{ \r\n\tHide = \"Hide\",\r\n\tShow = \"Show\",\r\n\tMandatory = \"Mandatory\"\r\n\r\n\r\n}\r\nexport enum EnumCustomFieldsetFieldInputType\r\n{ \r\n\tText = \"Text\",\r\n\tNumber = \"Number\",\r\n\tMemo = \"Memo\",\r\n\tDropdown = \"Dropdown\",\r\n\tCheckbox = \"Checkbox\"\r\n\r\n\r\n}\r\nexport enum EnumExpenseStatus\r\n{ \r\n\tSubmitted = \"Submitted\",\r\n\tApproved = \"Approved\",\r\n\tRejected = \"Rejected\",\r\n\tPosted = \"Posted\",\r\n\tCanceled = \"Canceled\",\r\n\tUnknown = \"Unknown\"\r\n\r\n\r\n}\r\nexport enum EnumSecurityType\r\n{ \r\n\tBankGuarantee = \"BankGuarantee\",\r\n\tCash = \"Cash\",\r\n\tInsurancePolicy = \"InsurancePolicy\",\r\n\tMortgage = \"Mortgage\"\r\n\r\n\r\n}\r\nexport enum EnumSecurityStatus\r\n{ \r\n\tRequested = \"Requested\",\r\n\tReceived = \"Received\",\r\n\tCancelled = \"Cancelled\"\r\n\r\n\r\n}\r\nexport enum EnumLoanPostPaymentRecalculationOptions\r\n{ \r\n\tPayment = \"Payment\",\r\n\tLoan = \"Loan\"\r\n\r\n\r\n}\r\nexport enum EnumFinancialReportDateType\r\n{ \r\n\tPostingDate = \"PostingDate\",\r\n\tDueDate = \"DueDate\",\r\n\tTaxDate = \"TaxDate\",\r\n\tUnknown = \"Unknown\"\r\n\r\n\r\n}\r\nexport enum EnumFinancialReportType\r\n{ \r\n\tPnL = \"PnL\",\r\n\tBalanceSheet = \"BalanceSheet\",\r\n\tTrialBalance = \"TrialBalance\",\r\n\tUnknown = \"Unknown\"\r\n\r\n\r\n}\r\nexport enum EnumFinancialReportCurrencyType\r\n{ \r\n\tLocal = \"Local\",\r\n\tSystem = \"System\",\r\n\tUnknown = \"Unknown\"\r\n\r\n\r\n}\r\nexport enum EnumFinancialReportRangeType\r\n{ \r\n\tAll = \"All\",\r\n\tYear = \"Year\",\r\n\tQuarter = \"Quarter\",\r\n\tMonth = \"Month\",\r\n\tUnknown = \"Unknown\"\r\n\r\n\r\n}\r\nexport enum EnumFinancialReportNodeEntityType\r\n{ \r\n\tLedgerAccountGroup = \"LedgerAccountGroup\",\r\n\tLedgerAccount = \"LedgerAccount\",\r\n\tBusinessPartnerGroup = \"BusinessPartnerGroup\",\r\n\tBusinessPartner = \"BusinessPartner\",\r\n\tVirtual = \"Virtual\"\r\n\r\n\r\n}\r\nexport enum EnumFinancialReportRootNodesTypes\r\n{ \r\n\tAssets = \"Assets\",\r\n\tLiabilities = \"Liabilities\",\r\n\tEquity = \"Equity\",\r\n\tRevenues = \"Revenues\",\r\n\tCostOfSales = \"CostOfSales\",\r\n\tExpenses = \"Expenses\",\r\n\tFinancing = \"Financing\",\r\n\tOtherRevenuesAndExpenses = \"OtherRevenuesAndExpenses\",\r\n\tGrossProfit = \"GrossProfit\",\r\n\tOperatingProfit = \"OperatingProfit\",\r\n\tProfitAfterFinancingExpenses = \"ProfitAfterFinancingExpenses\",\r\n\tProfitPeriod = \"ProfitPeriod\",\r\n\tCustomers = \"Customers\",\r\n\tVendors = \"Vendors\"\r\n\r\n\r\n}\r\nexport enum EnumDataExportType\r\n{ \r\n\tAutomatic = \"Automatic\",\r\n\tBAI2File = \"BAI2File\",\r\n\tExcelFile = \"ExcelFile\",\r\n\tBezeqZahav14File = \"BezeqZahav14File\",\r\n\tBezeqZahav48File = \"BezeqZahav48File\",\r\n\tBezeqZahav24File = \"BezeqZahav24File\",\r\n\tMT940File = \"MT940File\",\r\n\tIntentiaFile = \"IntentiaFile\"\r\n\r\n\r\n}\r\nexport enum EnumLedgerAccountType\r\n{ \r\n\tIncome = \"Income\",\r\n\tExpense = \"Expense\",\r\n\tOther = \"Other\"\r\n\r\n\r\n}\r\nexport enum EnumJournalEntryCurrencyTypes\r\n{ \r\n\tLocal = \"Local\",\r\n\tSystem = \"System\",\r\n\tForeign = \"Foreign\"\r\n\r\n\r\n}\r\nexport enum EnumExportTransactionsMethod\r\n{ \r\n\tExportNewTransactions = \"ExportNewTransactions\",\r\n\tExportTransactionsFromDate = \"ExportTransactionsFromDate\"\r\n\r\n\r\n}\r\nexport enum EnumChequeTypes\r\n{ \r\n\tUnknown = \"Unknown\",\r\n\tIncoming = \"Incoming\",\r\n\tOutgoing = \"Outgoing\"\r\n\r\n\r\n}\r\nexport enum EnumFutureChequeStatus\r\n{ \r\n\tFuture = \"Future\",\r\n\tDeposited = \"Deposited\"\r\n\r\n\r\n}\r\nexport enum EnumCCProcessingCompanies\r\n{ \r\n\tUnknown = \"Unknown\",\r\n\tIsracard = \"Isracard\",\r\n\tVisaCal = \"VisaCal\",\r\n\tLeumiMax = \"LeumiMax\"\r\n\r\n\r\n}\r\nexport enum EnumCCBrands\r\n{ \r\n\tAll = \"All\",\r\n\tMasterCard = \"MasterCard\",\r\n\tVisa = \"Visa\",\r\n\tAmex = \"Amex\",\r\n\tDiners = \"Diners\",\r\n\tIsracard = \"Isracard\",\r\n\tUnknown = \"Unknown\"\r\n\r\n\r\n}\r\nexport enum EnumCCInvoiceStatuses\r\n{ \r\n\tDraft = \"Draft\",\r\n\tPosted = \"Posted\",\r\n\tRemoved = \"Removed\"\r\n\r\n\r\n}\r\nexport enum EnumCCTransferStatuses\r\n{ \r\n\tFuture = \"Future\",\r\n\tActual = \"Actual\",\r\n\tInvoiced = \"Invoiced\"\r\n\r\n\r\n}\r\nexport enum EnumCCInvoiceParseResults\r\n{ \r\n\tFileOnly = \"FileOnly\",\r\n\tPartialFailure = \"PartialFailure\",\r\n\tFullFailure = \"FullFailure\",\r\n\tSuccess = \"Success\"\r\n\r\n\r\n}\r\nexport enum EnumPDFDocumnetType\r\n{ \r\n\tInvoice = \"Invoice\",\r\n\tDetails = \"Details\"\r\n\r\n\r\n}\r\nexport enum EnumApplyToBookingAccountsTypes\r\n{ \r\n\tAll = \"All\",\r\n\tSpecificCurrency = \"SpecificCurrency\",\r\n\tSpecific = \"Specific\"\r\n\r\n\r\n}\r\nexport enum EnumNoteFieldTypes\r\n{ \r\n\tNote1 = \"Note1\",\r\n\tNote2 = \"Note2\",\r\n\tUnknown = \"Unknown\"\r\n\r\n\r\n}\r\nexport enum EnumNoteMatchTypes\r\n{ \r\n\tEqual = \"Equal\",\r\n\tStartWith = \"StartWith\",\r\n\tEndsWith = \"EndsWith\",\r\n\tContains = \"Contains\"\r\n\r\n\r\n}\r\nexport enum EnumNotesExportAdjustments\r\n{ \r\n\tNone = \"None\",\r\n\tNotes2Override = \"Notes2Override\",\r\n\tNotes2Append = \"Notes2Append\",\r\n\tNotes2Prepend = \"Notes2Prepend\"\r\n\r\n\r\n}\r\nexport enum EnumAccountFullNameDisplayType\r\n{ \r\n\tNumberOnly = \"NumberOnly\",\r\n\tNumberAndBranch = \"NumberAndBranch\",\r\n\tFull = \"Full\",\r\n\tBankAndNumber = \"BankAndNumber\"\r\n\r\n\r\n}\r\nexport enum EnumJournalEntryUploadLevel\r\n{ \r\n\tNone = \"None\",\r\n\tJournalVoucher = \"JournalVoucher\",\r\n\tJournalEntry = \"JournalEntry\",\r\n\tJournalEntryAndReconciliation = \"JournalEntryAndReconciliation\"\r\n\r\n\r\n}\r\nexport enum EnumJournalEntrySources\r\n{ \r\n\tTransactionAutoPosting = \"TransactionAutoPosting\",\r\n\tLoans = \"Loans\",\r\n\tCC = \"CC\",\r\n\tCCAutoPosting = \"CCAutoPosting\"\r\n\r\n\r\n}\r\nexport enum EnumFileImportEncodings\r\n{ \r\n\tWindows1255 = \"Windows1255\",\r\n\tOEM862 = \"OEM862\",\r\n\tISO88598 = \"ISO88598\",\r\n\tUTF8 = \"UTF8\",\r\n\tANSI = \"ANSI\"\r\n\r\n\r\n}\r\nexport enum EnumFileImportTypes\r\n{ \r\n\tExcel = \"Excel\",\r\n\tCsv = \"Csv\",\r\n\tTab = \"Tab\",\r\n\tFixedWidth = \"FixedWidth\",\r\n\tCustom = \"Custom\",\r\n\tBAI2 = \"BAI2\"\r\n\r\n\r\n}\r\nexport enum EnumFileImportRowDelimiters\r\n{ \r\n\tVbCr = \"VbCr\",\r\n\tVbCrLf = \"VbCrLf\",\r\n\tVbLf = \"VbLf\"\r\n\r\n\r\n}\r\nexport enum EnumFileImportAccountMappingTypes\r\n{ \r\n\tByBookingAccount = \"ByBookingAccount\",\r\n\tByAccountNumber = \"ByAccountNumber\",\r\n\tByAccountAndCurrency = \"ByAccountAndCurrency\",\r\n\tFixedBookingAccount = \"FixedBookingAccount\",\r\n\tAskEveryTime = \"AskEveryTime\"\r\n\r\n\r\n}\r\nexport enum EnumGenerationTypeJournalEntry\r\n{ \r\n\tTransactionsAutoPosting = \"TransactionsAutoPosting\",\r\n\tCCAutoPosting = \"CCAutoPosting\"\r\n\r\n\r\n}\r\nexport enum EnumFileImportColumns\r\n{ \r\n\tUndefined = \"Undefined\",\r\n\tA = \"A\",\r\n\tB = \"B\",\r\n\tC = \"C\",\r\n\tD = \"D\",\r\n\tE = \"E\",\r\n\tF = \"F\",\r\n\tG = \"G\",\r\n\tH = \"H\",\r\n\tI = \"I\",\r\n\tJ = \"J\",\r\n\tK = \"K\",\r\n\tL = \"L\",\r\n\tM = \"M\",\r\n\tN = \"N\",\r\n\tO = \"O\",\r\n\tP = \"P\",\r\n\tQ = \"Q\",\r\n\tR = \"R\",\r\n\tS = \"S\",\r\n\tT = \"T\",\r\n\tU = \"U\",\r\n\tV = \"V\",\r\n\tW = \"W\",\r\n\tX = \"X\",\r\n\tY = \"Y\",\r\n\tZ = \"Z\"\r\n\r\n\r\n}\r\nexport enum EnumFileImportCurrencyDenominations\r\n{ \r\n\tDollar = \"Dollar\",\r\n\tCent = \"Cent\"\r\n\r\n\r\n}\r\nexport enum EnumFileImportRowsSortOrders\r\n{ \r\n\tAscending = \"Ascending\",\r\n\tDescending = \"Descending\"\r\n\r\n\r\n}\r\nexport enum EnumAdminActivityRecordType\r\n{ \r\n\tViewOrganization = \"ViewOrganization\",\r\n\tLoginImpersonation = \"LoginImpersonation\",\r\n\tUndefined = \"Undefined\"\r\n\r\n\r\n}\r\nexport enum EnumAdminAccessRequestStatus\r\n{ \r\n\tRequested = \"Requested\",\r\n\tApproved = \"Approved\",\r\n\tDenied = \"Denied\",\r\n\tExpired = \"Expired\",\r\n\tCanceled = \"Canceled\",\r\n\tUndefined = \"Undefined\"\r\n\r\n\r\n}\r\nexport enum EnumAdminAccessRequestDurationType\r\n{ \r\n\tMinutes30 = \"Minutes30\",\r\n\tHours2 = \"Hours2\",\r\n\tHours4 = \"Hours4\",\r\n\tHours12 = \"Hours12\",\r\n\tHours24 = \"Hours24\",\r\n\tDays7 = \"Days7\",\r\n\tDays30 = \"Days30\"\r\n\r\n\r\n}\r\nexport enum EnumJournalEntryStatuses\r\n{ \r\n\tDraft = \"Draft\",\r\n\tSkippedAlreadyReconcilled = \"SkippedAlreadyReconcilled\",\r\n\tException = \"Exception\",\r\n\tPosted = \"Posted\",\r\n\tPostedInJournalVoucher = \"PostedInJournalVoucher\",\r\n\tPostedAndReconcilled = \"PostedAndReconcilled\",\r\n\tExportedManually = \"ExportedManually\"\r\n\r\n\r\n}\r\nexport enum EnumBookingAccountSelectionMethods\r\n{ \r\n\tTextInput = \"TextInput\",\r\n\tListRecommend = \"ListRecommend\",\r\n\tListValidate = \"ListValidate\"\r\n\r\n\r\n}\r\nexport enum EnumBillingContractViewSubmodules\r\n{ \r\n\tCompanies = \"Companies\",\r\n\tAccounts = \"Accounts\",\r\n\tUsers = \"Users\"\r\n\r\n\r\n}\r\nexport enum EnumBankPassTwoFactorMethod\r\n{ \r\n\tNone = \"None\",\r\n\tDedicatedPhone = \"DedicatedPhone\",\r\n\tCustomerManualEntry = \"CustomerManualEntry\"\r\n\r\n\r\n}\r\nexport enum EnumOtpProcessingState\r\n{ \r\n\tInitializing = \"Initializing\",\r\n\tWaitingForSMS = \"WaitingForSMS\",\r\n\tNoSMSRequired = \"NoSMSRequired\"\r\n\r\n\r\n}\r\nexport enum EnumNotificationBalanceSummaryType\r\n{ \r\n\tNone = \"None\",\r\n\tTotal = \"Total\",\r\n\tCurrentOnly = \"CurrentOnly\"\r\n\r\n\r\n}\r\nexport enum EnumLanguage\r\n{ \r\n\tHebrew = \"Hebrew\",\r\n\tEnglish = \"English\"\r\n\r\n\r\n}\r\nexport enum EnumLoanPaymentInterestPrincipalType\r\n{ \r\n\tInterestPrincipal = \"InterestPrincipal\",\r\n\tInterest = \"Interest\",\r\n\tPrincipal = \"Principal\",\r\n\tPrincipalAcumulation = \"PrincipalAcumulation\"\r\n\r\n\r\n}\r\nexport enum EnumFilterRelateEntities\r\n{ \r\n\tOrganization = \"Organization\",\r\n\tCompany = \"Company\",\r\n\tAccount = \"Account\",\r\n\tBookingAccount = \"BookingAccount\",\r\n\tCustomField = \"CustomField\",\r\n\tNone = \"None\"\r\n\r\n\r\n}\r\nexport enum EnumUserAllowOptions\r\n{ \r\n\tReports = \"Reports\",\r\n\tSettings = \"Settings\",\r\n\tLoans = \"Loans\",\r\n\tCCProcessing = \"CCProcessing\",\r\n\tSyncLogs = \"SyncLogs\",\r\n\tAccountingReports = \"AccountingReports\",\r\n\tCashflow = \"Cashflow\",\r\n\tNone = \"None\"\r\n\r\n\r\n}\r\nexport enum EnumPostingTemplateBookingAccountTypes\r\n{ \r\n\tCustom = \"Custom\",\r\n\tLedgerAccount = \"LedgerAccount\",\r\n\tBusinessPartner = \"BusinessPartner\"\r\n\r\n\r\n}\r\nexport enum EnumExecutionMode\r\n{ \r\n\tNormal = \"Normal\",\r\n\tRecovery = \"Recovery\",\r\n\tDownloadRequest = \"DownloadRequest\",\r\n\tDownloadRequestByPass = \"DownloadRequestByPass\",\r\n\tCityBank = \"CityBank\",\r\n\tCategorize = \"Categorize\",\r\n\tRates = \"Rates\",\r\n\tNotifyBalanceSync = \"NotifyBalanceSync\",\r\n\tNotifyBalanceSyncReq = \"NotifyBalanceSyncReq\",\r\n\tNotifyBankPassProblem = \"NotifyBankPassProblem\",\r\n\tNotifyBankPassWrong = \"NotifyBankPassWrong\",\r\n\tUploadSftp = \"UploadSftp\",\r\n\tRemoveData = \"RemoveData\",\r\n\tStoreKey = \"StoreKey\",\r\n\tAutoPostPayment = \"AutoPostPayment\",\r\n\tUploadRequests = \"UploadRequests\"\r\n\r\n\r\n}\r\nexport enum EnumDownloadRetryStatus\r\n{ \r\n\tNew = \"New\",\r\n\tDone = \"Done\"\r\n\r\n\r\n}\r\nexport enum EnumRelevantFilteringTypes\r\n{ \r\n\tNone = \"None\",\r\n\tCompanies = \"Companies\",\r\n\tAccounts = \"Accounts\"\r\n\r\n\r\n}\r\nexport enum EnumReplicationRequestStatus\r\n{ \r\n\tPending = \"Pending\",\r\n\tInProcess = \"InProcess\",\r\n\tFailed = \"Failed\",\r\n\tSuccess = \"Success\"\r\n\r\n\r\n}\r\nexport enum EnumBillingContractsReportModule\r\n{ \r\n\tBase = \"Base\",\r\n\tJournalEntries = \"JournalEntries\",\r\n\tCashflow = \"Cashflow\",\r\n\tLoans = \"Loans\"\r\n\r\n\r\n}\r\nexport enum EnumIncomingPaymentStatus\r\n{ \r\n\tMatchNone = \"MatchNone\",\r\n\tMatchBusinessPartner = \"MatchBusinessPartner\",\r\n\tMatchFull = \"MatchFull\",\r\n\tPending = \"Pending\",\r\n\tPosted = \"Posted\",\r\n\tHandleManually = \"HandleManually\",\r\n\tException = \"Exception\",\r\n\tSaved = \"Saved\",\r\n\tIrrelevant = \"Irrelevant\",\r\n\tUndefined = \"Undefined\"\r\n\r\n\r\n}\r\nexport enum EnumIncomingPaymentInvoiceLineTypes\r\n{ \r\n\tDocument = \"Document\",\r\n\tAccountingJournalEntry = \"AccountingJournalEntry\"\r\n\r\n\r\n}\r\nexport enum EnumIncomingPaymentDocumentType\r\n{ \r\n\tInvoice = \"Invoice\",\r\n\tRefund = \"Refund\",\r\n\tJournalEntry = \"JournalEntry\"\r\n\r\n\r\n}\r\nexport enum EnumIncomingPaymentUploadLevel\r\n{ \r\n\tNone = \"None\",\r\n\tIncomingPayment = \"IncomingPayment\",\r\n\tIncomingPaymentAndReconcilliation = \"IncomingPaymentAndReconcilliation\"\r\n\r\n\r\n}\r\nexport enum EnumConsentStatuses\r\n{ \r\n\tInitialized = \"Initialized\",\r\n\tRequested = \"Requested\",\r\n\tErrorObtaining = \"ErrorObtaining\",\r\n\tGrantedAuthorization = \"GrantedAuthorization\",\r\n\tGrantedAccess = \"GrantedAccess\",\r\n\tErrorInRefresh = \"ErrorInRefresh\",\r\n\tReplacedByNewer = \"ReplacedByNewer\",\r\n\tLoginRequired = \"LoginRequired\",\r\n\tLocked = \"Locked\",\r\n\tNotReady = \"NotReady\",\r\n\tInstitutionError = \"InstitutionError\",\r\n\tErrorChecking = \"ErrorChecking\",\r\n\tNotSupported = \"NotSupported\",\r\n\tGenericError = \"GenericError\",\r\n\tRevoked = \"Revoked\",\r\n\tInvalidToken = \"InvalidToken\",\r\n\tInvalidApiKeys = \"InvalidApiKeys\",\r\n\tExpired = \"Expired\"\r\n\r\n\r\n}\r\nexport enum EnumPlaidAvailableProducts\r\n{ \r\n\tassets = \"assets\",\r\n\tauth = \"auth\",\r\n\tbalance = \"balance\",\r\n\tsignal = \"signal\",\r\n\tidentity = \"identity\",\r\n\tidentity_match = \"identity_match\",\r\n\tincome_verification = \"income_verification\",\r\n\tinvestments = \"investments\",\r\n\tinvestments_auth = \"investments_auth\",\r\n\tliabilities = \"liabilities\",\r\n\trecurring_transactions = \"recurring_transactions\",\r\n\tstatements = \"statements\",\r\n\ttransfer = \"transfer\"\r\n\r\n\r\n}\r\nexport enum EnumPlaidProducts\r\n{ \r\n\ttransactions = \"transactions\"\r\n\r\n\r\n}\r\nexport enum EnumBankPassAccessTypes\r\n{ \r\n\tScrapping = \"Scrapping\",\r\n\tFileImport = \"FileImport\",\r\n\tPSD = \"PSD\",\r\n\tPlaid = \"Plaid\"\r\n\r\n\r\n}\r\nexport enum EnumBankPassAutoDiscoverModes\r\n{ \r\n\tNone = \"None\",\r\n\tOnDemand = \"OnDemand\",\r\n\tAutomatic = \"Automatic\"\r\n\r\n\r\n}\r\nexport enum EnumPeriod\r\n{ \r\n\tDay = \"Day\",\r\n\tMonth = \"Month\"\r\n\r\n\r\n}\r\nexport enum EnumJournalExportType\r\n{ \r\n\tAutomatic = \"Automatic\",\r\n\tMovein1 = \"Movein1\",\r\n\tMovein2 = \"Movein2\"\r\n\r\n\r\n}\r\nexport enum EnumUploadType\r\n{ \r\n\tNew = \"New\",\r\n\tDates = \"Dates\"\r\n\r\n\r\n}\r\nexport enum EnumSumSide\r\n{ \r\n\tDebit = \"Debit\",\r\n\tCredit = \"Credit\",\r\n\tUnknown = \"Unknown\"\r\n\r\n\r\n}\r\nexport enum EnumLoanHandlingType\r\n{ \r\n\tLoansModule = \"LoansModule\",\r\n\tBankInformation = \"BankInformation\",\r\n\tCombine = \"Combine\",\r\n\tUnknown = \"Unknown\"\r\n\r\n\r\n}\r\nexport enum EnumExportSFTPGroupingMode\r\n{ \r\n\tSingle = \"Single\",\r\n\tPerBookingAccount = \"PerBookingAccount\",\r\n\tPerAccountSubtype = \"PerAccountSubtype\",\r\n\tPerCompany = \"PerCompany\",\r\n\tUnknown = \"Unknown\"\r\n\r\n\r\n}\r\nexport enum EnumCategoryClassificationFieldType\r\n{ \r\n\tName = \"Name\",\r\n\tType = \"Type\",\r\n\tLinkageType = \"LinkageType\"\r\n\r\n\r\n}\r\nexport enum EnumCategoryType\r\n{ \r\n\tTransaction = \"Transaction\",\r\n\tDeposit = \"Deposit\",\r\n\tLoan = \"Loan\",\r\n\tStock = \"Stock\",\r\n\tGuarantee = \"Guarantee\"\r\n\r\n\r\n}\r\nexport enum EnumExternalAccountMappingStatus\r\n{ \r\n\tMapped = \"Mapped\",\r\n\tNotMapped = \"NotMapped\",\r\n\tMappedInAnother = \"MappedInAnother\"\r\n\r\n\r\n}\r\n \r\n\r\nexport const Enums = {\r\n \tEnumSystemOptionsZ: EnumSystemOptionsZ,\r\n\tEnumCredentialTypes: EnumCredentialTypes,\r\n\tEnumDownloadTaskStatuses: EnumDownloadTaskStatuses,\r\n\tEnumDownloadStatuses: EnumDownloadStatuses,\r\n\tEnumDownloadRequestStatuses: EnumDownloadRequestStatuses,\r\n\tEnumDownloadStepStatuses: EnumDownloadStepStatuses,\r\n\tEnumJobStatuses: EnumJobStatuses,\r\n\tEnumBatchStatuses: EnumBatchStatuses,\r\n\tEnumUploadStatuses: EnumUploadStatuses,\r\n\tEnumSnapthotsStatuses: EnumSnapthotsStatuses,\r\n\tEnumReplicationStatuses: EnumReplicationStatuses,\r\n\tEnumBankGroups: EnumBankGroups,\r\n\tEnumBanks: EnumBanks,\r\n\tEnumBalanceDetailsSortType: EnumBalanceDetailsSortType,\r\n\tEnumBookingAccountSubtypes: EnumBookingAccountSubtypes,\r\n\tEnumBookingAccountStockTypes: EnumBookingAccountStockTypes,\r\n\tEnumBookingAccountDepositTypes: EnumBookingAccountDepositTypes,\r\n\tEnumAccountingSoftwares: EnumAccountingSoftwares,\r\n\tEnumUploaderType: EnumUploaderType,\r\n\tEnumUserNotificationMethods: EnumUserNotificationMethods,\r\n\tEnumTransactionTypes: EnumTransactionTypes,\r\n\tEnumBankChargeType: EnumBankChargeType,\r\n\tEnumOrganizationChildEntityTypes: EnumOrganizationChildEntityTypes,\r\n\tEnumCompanyChildEntityTypes: EnumCompanyChildEntityTypes,\r\n\tEnumDashboardGroupBy: EnumDashboardGroupBy,\r\n\tEnumBalanceNotificationGrouping: EnumBalanceNotificationGrouping,\r\n\tEnumEntityTypes: EnumEntityTypes,\r\n\tEnumBankPassCredentialValidity: EnumBankPassCredentialValidity,\r\n\tEnumClassificarionRuleFieldType: EnumClassificarionRuleFieldType,\r\n\tEnumClassificarionRuleMatchType: EnumClassificarionRuleMatchType,\r\n\tEnumMatchingRelationship: EnumMatchingRelationship,\r\n\tEnumBalanceHistoryReportMode: EnumBalanceHistoryReportMode,\r\n\tEnumForecastSystemSource: EnumForecastSystemSource,\r\n\tEnumAccountingDocumentType: EnumAccountingDocumentType,\r\n\tEnumPeriodType: EnumPeriodType,\r\n\tEnumIncreaseType: EnumIncreaseType,\r\n\tEnumSide: EnumSide,\r\n\tEnumLoanSide: EnumLoanSide,\r\n\tEnumSource: EnumSource,\r\n\tEnumForecastDateRelevance: EnumForecastDateRelevance,\r\n\tEnumSummaryLevel: EnumSummaryLevel,\r\n\tEnumFutureForecastGroupBy: EnumFutureForecastGroupBy,\r\n\tEnumCashflowSummarizedAggregationLevel: EnumCashflowSummarizedAggregationLevel,\r\n\tEnumUserAuthorizationType: EnumUserAuthorizationType,\r\n\tEnumNotificationRequestStatuses: EnumNotificationRequestStatuses,\r\n\tEnumShowInCurrencyOptions: EnumShowInCurrencyOptions,\r\n\tEnumExportType: EnumExportType,\r\n\tEnumPositiveNegative: EnumPositiveNegative,\r\n\tEnumNotificationTemplateSectionFields: EnumNotificationTemplateSectionFields,\r\n\tEnumNotificationTemplateSectionType: EnumNotificationTemplateSectionType,\r\n\tEnumYesNo: EnumYesNo,\r\n\tEnumDownloadFailureReviewStatus: EnumDownloadFailureReviewStatus,\r\n\tEnumUploadRequestStatuses: EnumUploadRequestStatuses,\r\n\tEnumBankTypes: EnumBankTypes,\r\n\tEnumUploadResult: EnumUploadResult,\r\n\tEnumReplicationObjectTypes: EnumReplicationObjectTypes,\r\n\tEnumPaymentMeansTypes: EnumPaymentMeansTypes,\r\n\tEnumInterestType: EnumInterestType,\r\n\tEnumAmortizationType: EnumAmortizationType,\r\n\tEnumLoanStatus: EnumLoanStatus,\r\n\tEnumLoanPaymentFrequencyType: EnumLoanPaymentFrequencyType,\r\n\tEnumRecommendationPeriodType: EnumRecommendationPeriodType,\r\n\tEnumLoanInterestPeriodCalculationType: EnumLoanInterestPeriodCalculationType,\r\n\tEnumDocumentType: EnumDocumentType,\r\n\tEnumJournalEntryDocumentType: EnumJournalEntryDocumentType,\r\n\tEnumPredefinedNotificationTemplates: EnumPredefinedNotificationTemplates,\r\n\tEnumVisibilitySetting: EnumVisibilitySetting,\r\n\tEnumCustomFieldsetFieldInputType: EnumCustomFieldsetFieldInputType,\r\n\tEnumExpenseStatus: EnumExpenseStatus,\r\n\tEnumSecurityType: EnumSecurityType,\r\n\tEnumSecurityStatus: EnumSecurityStatus,\r\n\tEnumLoanPostPaymentRecalculationOptions: EnumLoanPostPaymentRecalculationOptions,\r\n\tEnumFinancialReportDateType: EnumFinancialReportDateType,\r\n\tEnumFinancialReportType: EnumFinancialReportType,\r\n\tEnumFinancialReportCurrencyType: EnumFinancialReportCurrencyType,\r\n\tEnumFinancialReportRangeType: EnumFinancialReportRangeType,\r\n\tEnumFinancialReportNodeEntityType: EnumFinancialReportNodeEntityType,\r\n\tEnumFinancialReportRootNodesTypes: EnumFinancialReportRootNodesTypes,\r\n\tEnumDataExportType: EnumDataExportType,\r\n\tEnumLedgerAccountType: EnumLedgerAccountType,\r\n\tEnumJournalEntryCurrencyTypes: EnumJournalEntryCurrencyTypes,\r\n\tEnumExportTransactionsMethod: EnumExportTransactionsMethod,\r\n\tEnumChequeTypes: EnumChequeTypes,\r\n\tEnumFutureChequeStatus: EnumFutureChequeStatus,\r\n\tEnumCCProcessingCompanies: EnumCCProcessingCompanies,\r\n\tEnumCCBrands: EnumCCBrands,\r\n\tEnumCCInvoiceStatuses: EnumCCInvoiceStatuses,\r\n\tEnumCCTransferStatuses: EnumCCTransferStatuses,\r\n\tEnumCCInvoiceParseResults: EnumCCInvoiceParseResults,\r\n\tEnumPDFDocumnetType: EnumPDFDocumnetType,\r\n\tEnumApplyToBookingAccountsTypes: EnumApplyToBookingAccountsTypes,\r\n\tEnumNoteFieldTypes: EnumNoteFieldTypes,\r\n\tEnumNoteMatchTypes: EnumNoteMatchTypes,\r\n\tEnumNotesExportAdjustments: EnumNotesExportAdjustments,\r\n\tEnumAccountFullNameDisplayType: EnumAccountFullNameDisplayType,\r\n\tEnumJournalEntryUploadLevel: EnumJournalEntryUploadLevel,\r\n\tEnumJournalEntrySources: EnumJournalEntrySources,\r\n\tEnumFileImportEncodings: EnumFileImportEncodings,\r\n\tEnumFileImportTypes: EnumFileImportTypes,\r\n\tEnumFileImportRowDelimiters: EnumFileImportRowDelimiters,\r\n\tEnumFileImportAccountMappingTypes: EnumFileImportAccountMappingTypes,\r\n\tEnumGenerationTypeJournalEntry: EnumGenerationTypeJournalEntry,\r\n\tEnumFileImportColumns: EnumFileImportColumns,\r\n\tEnumFileImportCurrencyDenominations: EnumFileImportCurrencyDenominations,\r\n\tEnumFileImportRowsSortOrders: EnumFileImportRowsSortOrders,\r\n\tEnumAdminActivityRecordType: EnumAdminActivityRecordType,\r\n\tEnumAdminAccessRequestStatus: EnumAdminAccessRequestStatus,\r\n\tEnumAdminAccessRequestDurationType: EnumAdminAccessRequestDurationType,\r\n\tEnumJournalEntryStatuses: EnumJournalEntryStatuses,\r\n\tEnumBookingAccountSelectionMethods: EnumBookingAccountSelectionMethods,\r\n\tEnumBillingContractViewSubmodules: EnumBillingContractViewSubmodules,\r\n\tEnumBankPassTwoFactorMethod: EnumBankPassTwoFactorMethod,\r\n\tEnumOtpProcessingState: EnumOtpProcessingState,\r\n\tEnumNotificationBalanceSummaryType: EnumNotificationBalanceSummaryType,\r\n\tEnumLanguage: EnumLanguage,\r\n\tEnumLoanPaymentInterestPrincipalType: EnumLoanPaymentInterestPrincipalType,\r\n\tEnumFilterRelateEntities: EnumFilterRelateEntities,\r\n\tEnumUserAllowOptions: EnumUserAllowOptions,\r\n\tEnumPostingTemplateBookingAccountTypes: EnumPostingTemplateBookingAccountTypes,\r\n\tEnumExecutionMode: EnumExecutionMode,\r\n\tEnumDownloadRetryStatus: EnumDownloadRetryStatus,\r\n\tEnumRelevantFilteringTypes: EnumRelevantFilteringTypes,\r\n\tEnumReplicationRequestStatus: EnumReplicationRequestStatus,\r\n\tEnumBillingContractsReportModule: EnumBillingContractsReportModule,\r\n\tEnumIncomingPaymentStatus: EnumIncomingPaymentStatus,\r\n\tEnumIncomingPaymentInvoiceLineTypes: EnumIncomingPaymentInvoiceLineTypes,\r\n\tEnumIncomingPaymentDocumentType: EnumIncomingPaymentDocumentType,\r\n\tEnumIncomingPaymentUploadLevel: EnumIncomingPaymentUploadLevel,\r\n\tEnumConsentStatuses: EnumConsentStatuses,\r\n\tEnumPlaidAvailableProducts: EnumPlaidAvailableProducts,\r\n\tEnumPlaidProducts: EnumPlaidProducts,\r\n\tEnumBankPassAccessTypes: EnumBankPassAccessTypes,\r\n\tEnumBankPassAutoDiscoverModes: EnumBankPassAutoDiscoverModes,\r\n\tEnumPeriod: EnumPeriod,\r\n\tEnumJournalExportType: EnumJournalExportType,\r\n\tEnumUploadType: EnumUploadType,\r\n\tEnumSumSide: EnumSumSide,\r\n\tEnumLoanHandlingType: EnumLoanHandlingType,\r\n\tEnumExportSFTPGroupingMode: EnumExportSFTPGroupingMode,\r\n\tEnumCategoryClassificationFieldType: EnumCategoryClassificationFieldType,\r\n\tEnumCategoryType: EnumCategoryType,\r\n\tEnumExternalAccountMappingStatus: EnumExternalAccountMappingStatus,\r\n};\r\n\r\n\r\nexport enum EnumDetailsResponseStatus\r\n{ \r\n\tBalanceOK = \"BalanceOK\",\r\n\tBalanceImplicit = \"BalanceImplicit\",\r\n\tZeroBalance = \"ZeroBalance\",\r\n\tNoBalanceInfo = \"NoBalanceInfo\"\r\n\r\n\r\n}\r\nexport enum EnumNotificationScheduleType\r\n{ \r\n\tDailyWeekly = \"DailyWeekly\",\r\n\tMonthly = \"Monthly\",\r\n\tYearly = \"Yearly\"\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\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumUserNotificationMethods } from './../enums';\r\nimport { EnumUserAuthorizationType } from './../enums';\r\nimport { EnumLanguage } from './../enums';\r\nimport { Organization } from './../entities/organization.entity';\r\nimport { EnumNotificationScheduleType } from './../enums';\r\nexport class User extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'User';\r\n }\r\n \r\n public OrganizationID: number; \r\n public Name: string; \r\n public Position: string; \r\n public Email: string; \r\n public Phone: string; \r\n public IsAllowSettings: boolean; \r\n public IsAllowReports: boolean; \r\n public IsAllowSyncLogs: boolean; \r\n public IsAllowLoans: boolean; \r\n public IsAllowCCProcessing: boolean; \r\n public IsAllowCashflow: boolean; \r\n public IsAllowAccountingReports: boolean; \r\n public IsCustomerUser: boolean; \r\n public BillingContractID: number; \r\n public IsOnlyAssociatedBankPass: boolean; \r\n public NotificationMethod: EnumUserNotificationMethods; \r\n public NotificationMethodBankPass: EnumUserNotificationMethods; \r\n public AuthorizationType: EnumUserAuthorizationType; \r\n public IsDeleted: boolean; \r\n public NotificationLanguage: EnumLanguage; \r\n public Organization: Organization = new Organization; \r\n public IsActive: boolean; \r\n public Lines: UserNotificationTemplate[] = []; \r\n public AllowedCompanies: UserAllowedCompany[] = []; \r\n public AllowedAccounts: UserAllowedAccount[] = []; \r\n\tpublic CreatedBy: number;\r\n\tpublic CreatedDate: Date;\r\n}\r\n\r\nexport class UserNotificationTemplate extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'UserNotificationTemplate';\r\n }\r\n \r\n public NotificationTemplateID: number; \r\n public AlertTemplateID: number; \r\n public ScheduleType: EnumNotificationScheduleType; \r\n public DaysOfMonth: string; \r\n public DaysOfYear: string; \r\n public NotificationScheduledTime: Date; \r\n public IsNotificationScheduledDay1: boolean; \r\n public IsNotificationScheduledDay2: boolean; \r\n public IsNotificationScheduledDay3: boolean; \r\n public IsNotificationScheduledDay4: boolean; \r\n public IsNotificationScheduledDay5: boolean; \r\n public IsNotificationScheduledDay6: boolean; \r\n public LineID: number;\r\n}\r\nexport class UserAllowedCompany extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'UserAllowedCompany';\r\n }\r\n \r\n public CompanyID: number; \r\n public LineID: number;\r\n}\r\nexport class UserAllowedAccount extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'UserAllowedAccount';\r\n }\r\n \r\n public AccountID: 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 { EnumBanks } from './../enums';\r\nimport { EnumBankTypes } from './../enums';\r\nimport { EnumBankGroups } from './../enums';\r\nexport class Account extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'Account';\r\n }\r\n \r\n public CompanyID: number; \r\n public Bank: EnumBanks; \r\n public Branch: number; \r\n public AccountNumber: string; \r\n public BankPassID: number; \r\n public DownloadStartDate: Date; \r\n public IsActive: boolean; \r\n public Name: string; \r\n public BankType: EnumBankTypes; \r\n public CCPostingAccountID: number; \r\n public IsManualBalancesEntry: boolean; \r\n public AccountGroupID: number; \r\n public IsHasAutomaticDeployment: boolean; \r\n public AccountFullName: string; \r\n public BankPassName: string; \r\n public CompanyName: string; \r\n public BankGroup: EnumBankGroups; \r\n public AccountGroupName: string; \r\n\tpublic CreatedBy: number;\r\n\tpublic CreatedDate: Date;\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 AccountGroup extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'AccountGroup';\r\n }\r\n \r\n public OrganizationID: number; \r\n public Name: string; \r\n public IsActive: boolean; \r\n\tpublic CreatedBy: number;\r\n\tpublic CreatedDate: Date;\r\n}\r\n\r\n\r\n\r\n","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumNotificationBalanceSummaryType } from './../enums';\r\nexport class NotificationTemplate extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'NotificationTemplate';\r\n }\r\n \r\n public Name: string; \r\n public Description: string; \r\n public OrganizationID: number; \r\n public IsIncludeSyncStatus: boolean; \r\n public IsIncludeLoginLink: boolean; \r\n public IsSetCustomSubject: boolean; \r\n public CustomSubject: string; \r\n public BalanceSummaryType: EnumNotificationBalanceSummaryType; \r\n\tpublic CreatedBy: number;\r\n\tpublic CreatedDate: Date;\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 Scenario extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'Scenario';\r\n }\r\n \r\n public OrganizationID: number; \r\n public Name: string; \r\n public Description: string; \r\n public IsActive: boolean; \r\n public IsDefault: boolean; \r\n\tpublic CreatedBy: number;\r\n\tpublic CreatedDate: Date;\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 ProbabilityLevel extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ProbabilityLevel';\r\n }\r\n \r\n public OrganizationID: number; \r\n public Name: string; \r\n public Description: string; \r\n public IsActive: boolean; \r\n public IsDefault: boolean; \r\n public ProbabilityPercent: number; \r\n\tpublic CreatedBy: number;\r\n\tpublic CreatedDate: Date;\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 OrganizationWrapParams extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'OrganizationWrapParams';\r\n }\r\n \r\n public OrganizationID: 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 { EnumAccountingSoftwares } from './../enums';\r\nimport { EnumDataExportType } from './../enums';\r\nimport { EnumNotesExportAdjustments } from './../enums';\r\nimport { EnumJournalExportType } from './../enums';\r\nimport { EnumExportSFTPGroupingMode } from './../enums';\r\nexport class Deployment extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'Deployment';\r\n }\r\n \r\n public OrganizationID: number; \r\n public Name: string; \r\n public Description: string; \r\n public AccountingSoftware: EnumAccountingSoftwares; \r\n public DataExportType: EnumDataExportType; \r\n public SBDInstallationKey: string; \r\n public SBDUsername: string; \r\n public SBDPassword: string; \r\n public WizCloudApiToken: string; \r\n public WizCloudSubDomain: string; \r\n public NotesExportAdjustmentCurrentAccounts: EnumNotesExportAdjustments; \r\n public NotesExportAdjustmentCreditAccounts: EnumNotesExportAdjustments; \r\n public NotesExportIsAddOriginalSum: boolean; \r\n public IsEnabledNotesRules: boolean; \r\n public BezeqZahavDateGroupingEnabled: boolean; \r\n public IsReplaceOriginalDate: boolean; \r\n public IsExportBankChargeDate: boolean; \r\n public IsAutoExportSFTP: boolean; \r\n public JournalExportType: EnumJournalExportType; \r\n public ExportSFTPGroupingMode: EnumExportSFTPGroupingMode; \r\n public ComaxUserName: string; \r\n public ComaxPassword: string; \r\n public ShowOriginalDateJEForCC: boolean; \r\n public ExportFileNameTemplate: string; \r\n public PriorityUrl: string; \r\n public PriorityUserName: string; \r\n public PriorityPassword: string; \r\n public ExportChargeDateToDueDateCCJE: boolean; \r\n public ExportChargeDateInRefCC: boolean; \r\n public ExportCCTransactionDateToDueDateColumn: boolean; \r\n public IsHasAutomaticDeployment: boolean; \r\n\tpublic CreatedBy: number;\r\n\tpublic CreatedDate: Date;\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumDownloadStatuses } from './../enums';\r\nimport { EnumDownloadStepStatuses } from './../enums';\r\nimport { EnumDownloadTaskStatuses } from './../enums';\r\nimport { EnumBookingAccountSubtypes } from './../enums';\r\nexport class Download extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'Download';\r\n }\r\n \r\n public JobID: number; \r\n public AccountID: number; \r\n public SpecificBookingAccountID: number; \r\n public BankPassID: number; \r\n public CCContractID: number; \r\n public StartDate: Date; \r\n public EndDate: Date; \r\n public ServerID: number; \r\n public Status: EnumDownloadStatuses; \r\n public IsAccountBased: boolean; \r\n public IsContractBased: boolean; \r\n public Steps: DownloadStep[] = []; \r\n public Tasks: DownloadTask[] = []; \r\n\t\r\n}\r\n\r\nexport class DownloadStep extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'DownloadStep';\r\n }\r\n \r\n public TaskLineID: number; \r\n public StepName: string; \r\n public Date: Date; \r\n public Exception: string; \r\n public Status: EnumDownloadStepStatuses; \r\n public Duration: number; \r\n public LineID: number;\r\n}\r\nexport class DownloadTask extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'DownloadTask';\r\n }\r\n \r\n public BookingAccountID: number; \r\n public RangeStartDate: Date; \r\n public RangeEndDate: Date; \r\n public Status: EnumDownloadTaskStatuses; \r\n public DownloadFailureReviewID: number; \r\n public BookingAccountName: string; \r\n public BookingAccountSubtype: EnumBookingAccountSubtypes; \r\n public AccountID: number; \r\n public CompanyID: number; \r\n public TransactionsCount: number; \r\n public CCContractID: 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 { EnumBanks } from './../enums';\r\nimport { EnumBankPassAccessTypes } from './../enums';\r\nimport { EnumBankPassCredentialValidity } from './../enums';\r\nimport { EnumBankPassAutoDiscoverModes } from './../enums';\r\nimport { EnumBankPassTwoFactorMethod } from './../enums';\r\nimport { Download } from './../entities/download.entity';\r\nexport class BankPass extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'BankPass';\r\n }\r\n \r\n public OrganizationID: number; \r\n public UserName: string; \r\n public BankClientCode: string; \r\n public Bank: EnumBanks; \r\n public IsActive: boolean; \r\n public IsPrivate: boolean; \r\n public AccessType: EnumBankPassAccessTypes; \r\n public CredentialValidity: EnumBankPassCredentialValidity; \r\n public AutoDiscoverMode: EnumBankPassAutoDiscoverModes; \r\n public IsTemporary: boolean; \r\n public Notes: string; \r\n public BelongToUserID: number; \r\n public BelongToCompanyID: number; \r\n public TwoFactorMethod: EnumBankPassTwoFactorMethod; \r\n public LoginByVoiceMsg: boolean; \r\n public SeparatePhoneNumber: string; \r\n public SeparatePhoneUserName: string; \r\n public Thread: number; \r\n public IsDefineAvailabilityWindow: boolean; \r\n public AvailabilityWindowStartTime: Date; \r\n public AvailabilityWindowEndTime: Date; \r\n public ServerID: number; \r\n public IsDownloadFromSFTP: boolean; \r\n public FinancialInstitutionID: string; \r\n public FinancialInstitutionName: string; \r\n public PersonalIdentifier: string; \r\n public LastDownload: Download = new Download; \r\n public IsAccountBased: boolean; \r\n public IsContractBased: boolean; \r\n public IsForAPIModeDownload: boolean; \r\n public IsForDemoModeDownload: boolean; \r\n public PasswordSecure: string; //WRITE ONLY (IgnoreDataMemberRead)\r\n public PassForPrivateSecure: string; //WRITE ONLY (IgnoreDataMemberRead)\r\n public SeparatePhonePasswordSecure: string; //WRITE ONLY (IgnoreDataMemberRead)\r\n public FullName: string; \r\n\tpublic CreatedBy: number;\r\n\tpublic CreatedDate: Date;\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BankPass } from './../entities/bankpass.entity';\r\nexport class BankPassView extends BankPass {\r\n constructor() {\r\n super();\r\n this.TypeName = 'BankPassView';\r\n }\r\n \r\n public IsConfirmedReadOnly: boolean; \r\n public NewPassword: string; \r\n public NewPassForPrivate: string; \r\n public NewSeparatePhonePassword: string; \r\n public ServerID: number; \r\n public IsHasAutomaticDeployment: boolean; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { Component } from '@angular/core';\r\nimport { AccountEndpoint } from '@kraken/_proxy/endpoints/account.endpoint';\r\nimport { BookingAccountEndpoint } from '@kraken/_proxy/endpoints/bookingaccount.endpoint';\r\nimport { CompanyEndpoint } from '@kraken/_proxy/endpoints/company.endpoint';\r\nimport { OrganizationEndpoint } from '@kraken/_proxy/endpoints/organization.endpoint';\r\nimport { EnumCategoryType, EnumEntityTypes } from '@kraken/_proxy/enums';\r\nimport { RecategorizeParams } from '@kraken/_proxy/params/recategorize.param';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\nclass State extends BaseState {\r\n EntityID: number;\r\n EntityType: EnumEntityTypes;\r\n CategoryTpe: EnumCategoryType;\r\n VisibleLoadPanel: boolean;\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-recategorize-dialog',\r\n templateUrl: './recategorize-dialog.component.html',\r\n styleUrls: ['./recategorize-dialog.component.scss']\r\n})\r\nexport class RecategorizeDialogComponent extends BasePageComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private organizationEndpoint: OrganizationEndpoint,\r\n private companyEndpoint: CompanyEndpoint,\r\n private accountEndpoint: AccountEndpoint,\r\n private bookingAccountEndpoint: BookingAccountEndpoint) {\r\n super(A, 'RecategorizeDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog);\r\n }\r\n\r\n RecategorizeByOrganization(organizationID: number, onSuccess: () => void = undefined, onCancel: () => void = undefined) {\r\n this.InitComponent(organizationID, onSuccess, onCancel, EnumEntityTypes.Organization);\r\n }\r\n\r\n RecategorizeByOrganizationByType(organizationID: number, categoryTye: EnumCategoryType,\r\n onSuccess: () => void = undefined, onCancel: () => void = undefined) {\r\n this.State.CategoryTpe = categoryTye;\r\n this.InitComponent(organizationID, onSuccess, onCancel, EnumEntityTypes.Organization);\r\n }\r\n\r\n RecategorizeByCompany(companyID: number, onSuccess: () => void = undefined, onCancel: () => void = undefined) {\r\n this.InitComponent(companyID, onSuccess, onCancel, EnumEntityTypes.Company);\r\n }\r\n\r\n RecategorizeByAccount(accountID: number, onSuccess: () => void = undefined, onCancel: () => void = undefined) {\r\n this.InitComponent(accountID, onSuccess, onCancel, EnumEntityTypes.Account);\r\n }\r\n\r\n RecategorizeByBookingAccount(bookingAccountID: number, onSuccess: () => void = undefined, onCancel: () => void = undefined) {\r\n this.InitComponent(bookingAccountID, onSuccess, onCancel, EnumEntityTypes.BookingAccount);\r\n }\r\n\r\n Recategorize() {\r\n const endpoint = this.GetCategorizationEndpoint();\r\n const EntryIDField = this.GetCategorizationEntryIDField();\r\n const params = new RecategorizeParams();\r\n params[EntryIDField] = this.State.EntityID;\r\n params.CategoryType = this.State.CategoryTpe;\r\n\r\n\r\n this.State.VisibleLoadPanel = true;\r\n\r\n this.Do(endpoint.Recategorize(params), true, () => {\r\n this.State.VisibleLoadPanel = false;\r\n this.CloseDialogWithSuccess();\r\n }, () => { this.State.VisibleLoadPanel = false; });\r\n }\r\n\r\n private InitComponent(EntryID: number, onSuccess: () => void, onCancel: () => void = undefined, EntityType: EnumEntityTypes) {\r\n this.ShowDialogShort(onSuccess, onCancel);\r\n\r\n // Fill state\r\n this.State.EntityID = EntryID;\r\n this.State.EntityType = EntityType;\r\n }\r\n\r\n private GetCategorizationEndpoint() {\r\n switch (this.State.EntityType) {\r\n case (EnumEntityTypes.Organization): return this.organizationEndpoint;\r\n case (EnumEntityTypes.Company): return this.companyEndpoint;\r\n case (EnumEntityTypes.Account): return this.accountEndpoint;\r\n case (EnumEntityTypes.BookingAccount): return this.bookingAccountEndpoint;\r\n }\r\n }\r\n\r\n private GetCategorizationEntryIDField() {\r\n switch (this.State.EntityType) {\r\n case (EnumEntityTypes.Organization): return 'OrganizationID';\r\n case (EnumEntityTypes.Company): return 'CompanyID';\r\n case (EnumEntityTypes.Account): return 'AccountID';\r\n case (EnumEntityTypes.BookingAccount): return 'BookingAccountID';\r\n }\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { AccountGroup } from './../entities/accountgroup.entity';\r\nimport { AccountGroupListParams } from './../params/accountgrouplist.param';\r\n@Injectable()\r\nexport class AccountGroupEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(api: APIGatewayService) {super(\"AccountGroup\", api);}\r\n\t\r\n\r\n public ListEx(Params: AccountGroupListParams, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListEx', Params, options?.GetLoadOptions() );\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 { EnumBanks } from './../enums';\r\nimport { EnumCCProcessingCompanies } from './../enums';\r\nexport class BankPassListParams extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'BankPassListParams';\r\n }\r\n \r\n public OrganizationID: number; \r\n public CompanyID: number; \r\n public IsActiveOnly: boolean; \r\n public Bank: EnumBanks; \r\n public ProcessingCompany: EnumCCProcessingCompanies; \r\n public LoadGlobal: boolean; \r\n public IsShowProblemsOnly: 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 { BankPassView } from './../views/bankpass.view';\r\nimport { Consent } from './../entities/consent.entity';\r\nimport { ExternalAccountMappingView } from './../views/externalaccountmapping.view';\r\nimport { SaveBankPassParams } from './../params/savebankpass.param';\r\nimport { BankPassListParams } from './../params/bankpasslist.param';\r\n@Injectable()\r\nexport class BankPassEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"BankPass\", api);}\r\n\t\r\n\r\n public SaveWithConsent(Params: SaveBankPassParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'SaveWithConsent', Params, undefined );\r\n }\r\n\r\n public ListEx(Params: BankPassListParams, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListEx', Params, options?.GetLoadOptions() );\r\n }\r\n\r\n public CheckConsentStatus(BankPassID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'CheckConsentStatus', {BankPassID: BankPassID} );\r\n }\r\n\r\n public GetAccountsMappings(BankPassID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetAccountsMappings', {BankPassID: BankPassID} );\r\n }\r\n}\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { User } from './../entities/user.entity';\r\n@Injectable()\r\nexport class UserEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(api: APIGatewayService) {super(\"User\", api);}\r\n\t\r\n\r\n public ListEx(OrganizationID: number, LoadActive: boolean, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'ListEx', {OrganizationID: OrganizationID, LoadActive: LoadActive, options:options?.GetLoadOptions()} );\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 UpdateExternalAccountMappingParams extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'UpdateExternalAccountMappingParams';\r\n }\r\n \r\n public ConsentID: number; \r\n public BookingAccountID: number; \r\n public ExternalAccountID: string; \r\n public ExternalAccountHash: string; \r\n public IBAN: 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 { Company } from './../entities/company.entity';\r\nimport { Account } from './../entities/account.entity';\r\nimport { AccountGroup } from './../entities/accountgroup.entity';\r\nimport { BankPass } from './../entities/bankpass.entity';\r\nimport { BookingAccount } from './../entities/bookingaccount.entity';\r\nimport { UpdateExternalAccountMappingParams } from './../params/updateexternalaccountmapping.param';\r\nexport class CreationWizardSaveParams extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'CreationWizardSaveParams';\r\n }\r\n \r\n public OrganizationID: number; \r\n public Company: Company = new Company; \r\n public Account: Account = new Account; \r\n public AccountGroup: AccountGroup = new AccountGroup; \r\n public BankPass: BankPass = new BankPass; \r\n public BookingAccountsEntities: BookingAccount[] = []; \r\n public IsDownloadConfirm: boolean; \r\n public ExternalAccountMappingParams: UpdateExternalAccountMappingParams = new UpdateExternalAccountMappingParams; \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 { Deployment } from './../entities/deployment.entity';\r\nimport { EnumDataExportType } from './../enums';\r\n@Injectable()\r\nexport class DeploymentEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"Deployment\", api);}\r\n\t\r\n\r\n public override Save(Entity: Deployment) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'Save', Entity, undefined );\r\n }\r\n\r\n public ListEx(OrganizationID: number, dataExportTypes: EnumDataExportType[], options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'ListEx', {OrganizationID: OrganizationID, dataExportTypes: dataExportTypes, options:options?.GetLoadOptions()} );\r\n }\r\n\r\n public HasActiveCompanies(DeploymentID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'HasActiveCompanies', {DeploymentID: DeploymentID} );\r\n }\r\n}\r\n\r\n","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseParamsFilter } from './../entities/baseparamsfilter.entity';\r\nexport class AccountGroupListParams extends BaseParamsFilter {\r\n constructor() {\r\n super();\r\n this.TypeName = 'AccountGroupListParams';\r\n }\r\n \r\n\t\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 { BillingContract } from './../entities/billingcontract.entity';\r\n@Injectable()\r\nexport class BillingContractEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"BillingContract\", api);}\r\n\t\r\n\r\n public ListEx(organizationID: number, activeOnly: boolean, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'ListEx', {organizationID: organizationID, activeOnly: activeOnly, options:options?.GetLoadOptions()} );\r\n }\r\n}\r\n\r\n","/* eslint-disable max-len */\r\n\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { BaseEntity, BaseResponse, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Component, Input, ViewChild } from '@angular/core';\r\nimport { CompanyEndpoint } from '../../_proxy/endpoints/company.endpoint';\r\nimport { Company } from '../../_proxy/entities/company.entity';\r\nimport { Account } from '../../_proxy/entities/account.entity';\r\nimport { AccountGroup } from '../../_proxy/entities/accountgroup.entity';\r\nimport { AccountGroupEndpoint } from '../../_proxy/endpoints/accountgroup.endpoint';\r\nimport { BankPassListParams } from '../../_proxy/params/bankpasslist.param';\r\nimport { BankPassEndpoint } from '../../_proxy/endpoints/bankpass.endpoint';\r\nimport { UserEndpoint } from '../../_proxy/endpoints/user.endpoint';\r\nimport { User } from '../../_proxy/entities/user.entity';\r\nimport { BookingAccount } from '../../_proxy/entities/bookingaccount.entity';\r\nimport { CreationWizardSaveParams } from '../../_proxy/params/creationwizardsave.param';\r\nimport { OtpInputDialogComponent } from '../../components/otp-input-dialog/otp-input-dialog.component';\r\nimport { MenuItem } from 'primeng/api';\r\nimport { BankPassView } from '../../_proxy/views/bankpass.view';\r\nimport { BankPass } from '../../_proxy/entities/bankpass.entity';\r\nimport { Globals } from '../../_globals';\r\nimport { Deployment } from '../../_proxy/entities/deployment.entity';\r\nimport { DeploymentEndpoint } from '../../_proxy/endpoints/deployment.endpoint';\r\nimport { CompanyListParams } from '@kraken/_proxy/params/companylist.param';\r\nimport { AccountGroupListParams } from '@kraken/_proxy/params/accountgrouplist.param';\r\nimport { BillingContract } from '@kraken/_proxy/entities/billingcontract.entity';\r\nimport { BillingContractEndpoint } from '@kraken/_proxy/endpoints/billingcontract.endpoint';\r\nimport { EnumBankPassAccessTypes } from '../../../../../../Kraken/Angular/ClientApp/_proxy/enums';\r\nimport { EnumBankPassAutoDiscoverModes, EnumBanks, EnumBookingAccountSubtypes } from '@kraken/_proxy/enums';\r\nimport { UpdateExternalAccountMappingParams } from '@kraken/_proxy/params/updateexternalaccountmapping.param';\r\n\r\nenum EnumCreationMode {\r\n Company,\r\n Account\r\n}\r\n\r\nclass State extends BaseState {\r\n CreationMode: EnumCreationMode;\r\n\r\n PageNumber: number;\r\n OrganizationID: number;\r\n // for account creation mode\r\n CompanyID: number;\r\n\r\n Account: Account = new Account();\r\n\r\n BankPassesItems: BankPassView[] = [];\r\n DeploymentsItems: Deployment[] = [];\r\n BillingContractItems: BillingContract[] = [];\r\n CompaniesItems: Company[] = [];\r\n AccountGroupsItems: AccountGroup[] = [];\r\n BookingAccountsItems: BookingAccount[] = [];\r\n UsersItems: User[] = [];\r\n\r\n IsDownloadConfirm = false;\r\n IsExternalAccountsMapping = false;\r\n AccountBank: EnumBanks;\r\n BankPassID: number;\r\n Currency: string;\r\n BookingAccountType: EnumBookingAccountSubtypes;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-company-creation-wizard',\r\n templateUrl: './company-creation-wizard.component.html',\r\n styleUrls: ['./company-creation-wizard.component.scss']\r\n})\r\nexport class CompanyCreationWizardComponent extends BasePageComponent {\r\n\r\n @ViewChild('currentPage') currentPage;\r\n @ViewChild('otpInputDialog') otpInputDialog: OtpInputDialogComponent;\r\n\r\n @Input() set OrganizationID(value: number) {\r\n if (!value) return;\r\n\r\n this.State.OrganizationID = value;\r\n }\r\n @Input() set CompanyID(value: number) {\r\n if (!value) return;\r\n\r\n this.State.CompanyID = value;\r\n }\r\n\r\n @Input() set IsExternalAccountsMapping(value: boolean) {\r\n this.State.IsExternalAccountsMapping = value;\r\n }\r\n\r\n @Input() set Account(value: Account) {\r\n this.State.Account = value;\r\n }\r\n\r\n @Input() set AccountBank (value: EnumBanks) {\r\n this.State.AccountBank = value;\r\n }\r\n\r\n @Input() set BankPassID (value: number) {\r\n this.State.BankPassID = value;\r\n }\r\n\r\n @Input() set Currency (value: string) {\r\n this.State.Currency = value;\r\n }\r\n\r\n @Input() set BookingAccountType (value: EnumBookingAccountSubtypes) {\r\n this.State.BookingAccountType = value;\r\n }\r\n\r\n @Input() ExternalAccountMappingParams: UpdateExternalAccountMappingParams;\r\n @Input() ExternalAccountCode: string;\r\n\r\n readonly MAX_PAGE_NUMBER = 3;\r\n\r\n stepsItems: MenuItem[] = [\r\n { label: this.RC('ttlCompanyPage') },\r\n { label: this.RC('ttlAccountPage') },\r\n { label: this.RC('ttlBookingAccountsPage') },\r\n { label: this.RC('ttlFinishedPage') }\r\n ];\r\n\r\n get SelectedCompany(): Company {\r\n return this.State.CompaniesItems.find(c => c.EntryID === this.State.Account.CompanyID); \r\n }\r\n private get SelectedBankPass(): BankPassView {\r\n return this.State.BankPassesItems.find(bp => bp.EntryID === this.State.Account.BankPassID); \r\n }\r\n private get SelectedAccountGroup(): AccountGroup {\r\n return this.State.AccountGroupsItems.find(bp => bp.EntryID === this.State.Account.AccountGroupID); \r\n }\r\n\r\n constructor(A: ServiceBagService, private accountGroupEndpoint: AccountGroupEndpoint, private bankPassEndpoint: BankPassEndpoint,\r\n private userEndpoint: UserEndpoint, private companyEndpoint: CompanyEndpoint, private deploymentEndpoint: DeploymentEndpoint, private billingContractEndpoint: BillingContractEndpoint) {\r\n super(A, 'CompanyCreationWizardComponent', BaseEntity, State, EnumPageDisplayModes.Dialog);\r\n }\r\n\r\n protected override OnInitTitle(): string {\r\n switch (this.State.PageNumber) {\r\n case 0: return this.RC('ttlCompanyPage');\r\n case 1: return `${this.SelectedCompany?.Name} - ${this.RC('ttlAccountPage')}`;\r\n case 2: return `${this.RC('ttlBookingAccountsPage')} - ${(this.LIST('Banks').find(b => b.Value === this.State.Account.Bank) as any).TextShort} ${this.State.Account.AccountNumber}`;\r\n case 3: return `${this.SelectedCompany?.Name} - ${this.RC('ttlFinishedPage')}`;\r\n }\r\n }\r\n\r\n protected override OnInitComponentFinished() {\r\n if(this.State.Account?.EntryID > 0 && this.State.CompanyID > 0) {\r\n\r\n this.State.CreationMode = EnumCreationMode.Account;\r\n this.State.Account.CompanyID = this.State.CompanyID;\r\n this.State.PageNumber = 2;\r\n } else if (this.State.CompanyID) {\r\n this.State.CreationMode = EnumCreationMode.Account;\r\n this.State.Account.CompanyID = this.State.CompanyID;\r\n this.State.PageNumber = 1;\r\n } else {\r\n this.State.CreationMode = EnumCreationMode.Company;\r\n this.State.Account.CompanyID = -1;\r\n this.State.PageNumber = 0;\r\n }\r\n\r\n if(this.State.IsExternalAccountsMapping) {\r\n this.LoadBankPasses();\r\n }\r\n\r\n this.LoadData();\r\n }\r\n\r\n protected override OnInitState() {\r\n if(this.State.Account?.EntryID > 0) {\r\n this.State.CreationMode = EnumCreationMode.Account;\r\n this.State.PageNumber = 2;\r\n \r\n return;\r\n }\r\n\r\n this.State.Account = new Account();\r\n this.State.Account.EntryID = -1;\r\n this.State.Account.IsActive = true;\r\n this.State.Account.DownloadStartDate = Globals.ThisMonthFirstDate;\r\n\r\n if(this.State.IsExternalAccountsMapping) {\r\n this.State.Account.Bank = this.State.AccountBank;\r\n this.State.Account.BankPassID = this.State.BankPassID;\r\n }\r\n\r\n if (this.State.CreationMode === EnumCreationMode.Account) {\r\n this.State.PageNumber = 1;\r\n this.State.Account.CompanyID = this.State.CompanyID;\r\n } else if (this.State.CreationMode === EnumCreationMode.Company) {\r\n this.State.PageNumber = 0;\r\n this.State.Account.CompanyID = -1;\r\n }\r\n\r\n this.State.IsDownloadConfirm = true;\r\n this.State.BookingAccountsItems = [];\r\n }\r\n\r\n private LoadData() {\r\n this.LoadCompaniesDeploymentsBillingContracts();\r\n this.LoadAccountGroups();\r\n this.LoadUsers();\r\n }\r\n\r\n OnSelectedBankChanged() {\r\n this.LoadBankPasses(); \r\n }\r\n\r\n OnAddNewAccountCompany() {\r\n this.SaveData(() => {\r\n this.OnStart();\r\n });\r\n }\r\n\r\n private OnStart() {\r\n this.OnInitState();\r\n this.NotifyReloadTitle();\r\n this.LoadData();\r\n }\r\n\r\n private LoadDeployments() {\r\n this.State.DeploymentsItems = [];\r\n\r\n this.Do(this.deploymentEndpoint.ListEx(this.State.OrganizationID, null, null), false, (response) => {\r\n this.State.DeploymentsItems = response.Entities;\r\n\r\n if (this.State.DeploymentsItems.length === 1) {\r\n this.SelectedCompany.DeploymentID = this.State.DeploymentsItems[0].EntryID;\r\n }\r\n });\r\n }\r\n\r\n private LoadBillingContracts() {\r\n this.State.BillingContractItems = [];\r\n\r\n this.Do(this.billingContractEndpoint.ListEx(this.State.OrganizationID, true, null), false, (response) => {\r\n this.State.BillingContractItems = response.Entities;\r\n if (this.State.BillingContractItems.length === 1) {\r\n this.SelectedCompany.BillingContractID = this.State.BillingContractItems[0].EntryID;\r\n }\r\n });\r\n }\r\n\r\n private LoadAccountGroups() {\r\n\r\n this.State.AccountGroupsItems = [];\r\n\r\n const newAccountGroup = new AccountGroup();\r\n newAccountGroup.EntryID = -1;\r\n newAccountGroup.OrganizationID = this.State.OrganizationID;\r\n newAccountGroup.Name = '';\r\n newAccountGroup.IsActive = true;\r\n this.State.AccountGroupsItems.push(newAccountGroup);\r\n\r\n const params = new AccountGroupListParams();\r\n params.OrganizationID = this.State.OrganizationID;\r\n params.LoadActive = true;\r\n\r\n this.Do(this.accountGroupEndpoint.ListEx(params, null), false, (response) => {\r\n this.State.AccountGroupsItems = this.State.AccountGroupsItems.concat(response.Entities);\r\n });\r\n }\r\n\r\n private LoadBankPasses() {\r\n this.State.BankPassesItems = [];\r\n\r\n if (!this.State.Account.Bank) {\r\n return; \r\n }\r\n const params = new BankPassListParams();\r\n params.OrganizationID = this.State.OrganizationID;\r\n params.CompanyID = this.SelectedCompany?.EntryID;\r\n params.Bank = this.State.Account.Bank;\r\n params.IsActiveOnly = true;\r\n params.LoadGlobal = true;\r\n\r\n const newBankPass = new BankPassView();\r\n newBankPass.EntryID = -1;\r\n newBankPass.OrganizationID = this.State.OrganizationID;\r\n newBankPass.Bank = this.State.Account.Bank;\r\n newBankPass.IsActive = true;\r\n newBankPass.IsTemporary = false;\r\n newBankPass.IsConfirmedReadOnly = false;\r\n newBankPass.AccessType = EnumBankPassAccessTypes.Scrapping;\r\n newBankPass.AutoDiscoverMode = EnumBankPassAutoDiscoverModes.None;\r\n this.State.BankPassesItems.push(newBankPass);\r\n\r\n this.Do(this.bankPassEndpoint.ListEx(params, null), false, (response) => {\r\n this.State.BankPassesItems = this.State.BankPassesItems.concat(response.Entities);\r\n\r\n });\r\n }\r\n\r\n private LoadUsers() {\r\n\r\n this.Do(this.userEndpoint.ListEx(this.State.OrganizationID, true, null), false, (response) => {\r\n this.State.UsersItems = response.Entities;\r\n });\r\n }\r\n\r\n private LoadCompaniesDeploymentsBillingContracts() {\r\n\r\n this.State.CompaniesItems = [];\r\n\r\n const newCompany = new Company();\r\n newCompany.EntryID = -1;\r\n newCompany.OrganizationID = this.State.OrganizationID;\r\n newCompany.Name = '';\r\n newCompany.IsActive = true;\r\n newCompany.IsSyncAccounting = true;\r\n newCompany.IsSyncCashflow = true;\r\n this.State.CompaniesItems.push(newCompany);\r\n\r\n const params = new CompanyListParams();\r\n params.OrganizationID = this.State.OrganizationID;\r\n params.LoadActive = true;\r\n\r\n this.Do(this.companyEndpoint.ListEx(params, null), false, (response) => {\r\n this.State.CompaniesItems = this.State.CompaniesItems.concat(response.Entities);\r\n this.NotifyReloadTitle();\r\n this.LoadDeployments();\r\n this.LoadBillingContracts();\r\n });\r\n }\r\n\r\n OnNextToOtpPage() {\r\n this.SetNextPageNumber(); this.NotifyReloadTitle();\r\n }\r\n\r\n OnNextPage() {\r\n let params = this.GetSaveparams();\r\n this.currentPage.Validate().then((res) => {\r\n if (!res) {\r\n return; \r\n }\r\n this.IsLoading = true;\r\n // validate Company on backend\r\n if (this.State.PageNumber === 0) {\r\n this.Do(this.companyEndpoint.ValidateCompanyFromCreationWizard(params), false, (response) => {\r\n if (response.IsSuccess) {\r\n this.SetNextPageNumber();\r\n this.NotifyReloadTitle();\r\n }\r\n this.IsLoading = false;\r\n },\r\n (response) => {\r\n this.OnFailedResponse(response);\r\n }\r\n );\r\n }\r\n // validate Account on backend\r\n else if (this.State.PageNumber === 1) {\r\n this.Do(this.companyEndpoint.ValidateAccountFromCreationWizard(params), false, (response) => {\r\n if (response.IsSuccess) {\r\n this.SetNextPageNumber();\r\n this.NotifyReloadTitle();\r\n }\r\n this.IsLoading = false;\r\n },\r\n (response) => {\r\n this.OnFailedResponse(response);\r\n });\r\n }\r\n // validate BookingAccounts on backend\r\n else if (this.State.PageNumber === 2) {\r\n this.currentPage.bookingAccountsList.grid.grid.instance.saveEditData().then(() => {\r\n params = this.GetSaveparams();\r\n this.Do(this.companyEndpoint.ValidateBookingAccountsFromCreationWizard(params), false, (response) => {\r\n if (response.IsSuccess) {\r\n this.SetNextPageNumber();\r\n this.NotifyReloadTitle();\r\n }\r\n this.IsLoading = false;\r\n },\r\n (response) => {\r\n this.OnFailedResponse(response);\r\n });\r\n });\r\n }\r\n // save all data\r\n else if (this.State.PageNumber === this.MAX_PAGE_NUMBER) {\r\n this.SaveData(() => {\r\n if(this.State.IsExternalAccountsMapping) {\r\n this.CloseDialogWithSuccess();\r\n } else {\r\n this.ClosePage();\r\n }\r\n });\r\n } else {\r\n this.SetNextPageNumber();\r\n this.NotifyReloadTitle();\r\n }\r\n });\r\n }\r\n\r\n\r\n private SaveData(after: () => void) {\r\n const params = this.GetSaveparams();\r\n this.IsLoading = true;\r\n\r\n this.Do(this.companyEndpoint.SaveDataFromCreationWizard(params), true, (response) => {\r\n if (response.IsSuccess) {\r\n if (this.SelectedCompany.EntryID === -1) {\r\n this.NotifyEntitySaved(this.SelectedCompany, Company); \r\n }\r\n if (this.SelectedBankPass?.EntryID === -1) {\r\n this.NotifyEntitySaved(this.SelectedBankPass, BankPass); \r\n }\r\n if (this.SelectedAccountGroup?.EntryID === -1) {\r\n this.NotifyEntitySaved(this.SelectedAccountGroup, AccountGroup); \r\n }\r\n this.NotifyEntitySaved(this.State.Account, Account);\r\n\r\n this.currentPage.DownloadRequest = response.Entity;\r\n\r\n if (response.Entity) {\r\n this.otpInputDialog.downloadRequest = response.Entity;\r\n this.otpInputDialog.Message = response.ResponseMessage;\r\n \r\n this.otpInputDialog.ShowDialogShort(\r\n () => {\r\n if (after) { \r\n after(); \r\n }\r\n },\r\n () => {\r\n if (after) { \r\n after(); \r\n }\r\n }\r\n );\r\n } else {\r\n if (after) after();\r\n }\r\n }\r\n\r\n this.IsLoading = false;\r\n },\r\n (response) => {\r\n this.OnFailedResponse(response);\r\n });\r\n }\r\n\r\n GetNextButtonText(): string {\r\n return this.State.PageNumber === this.MAX_PAGE_NUMBER ? this.RC('btnFinish') : this.RC('btnNext');\r\n }\r\n\r\n\r\n IsNextDisabled() {\r\n if(this.IsLoading) {\r\n return true;\r\n }\r\n\r\n if (this.State.PageNumber !== 1) {\r\n return false;\r\n }\r\n\r\n if (!this.SelectedBankPass || this.SelectedBankPass.EntryID >= 0) {\r\n return false;\r\n }\r\n\r\n if (this.SelectedBankPass.IsConfirmedReadOnly ||\r\n !this.SelectedBankPass.IsActive ||\r\n this.SelectedBankPass.IsTemporary ||\r\n this.SelectedBankPass.AccessType !== EnumBankPassAccessTypes.Scrapping) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n OnPrevPage() {\r\n if (this.State.PageNumber === 2) {\r\n this.currentPage.bookingAccountsList.grid.G.AcceptChanges();\r\n }\r\n this.SetPrevPageNumber();\r\n this.NotifyReloadTitle();\r\n }\r\n\r\n IsPrevVisible() {\r\n return !(this.State.PageNumber === 0 || this.State.PageNumber === 4 || this.State.PageNumber === 5);\r\n }\r\n\r\n private SetNextPageNumber() {\r\n\r\n if (this.State.PageNumber < this.MAX_PAGE_NUMBER) this.State.PageNumber++;\r\n\r\n }\r\n\r\n private SetPrevPageNumber() {\r\n\r\n if (this.State.PageNumber > 0) this.State.PageNumber--;\r\n\r\n }\r\n\r\n private GetSaveparams(): CreationWizardSaveParams {\r\n const params = new CreationWizardSaveParams();\r\n params.OrganizationID = this.State.OrganizationID;\r\n params.Company = this.SelectedCompany;\r\n params.Account = this.State.Account;\r\n params.AccountGroup = this.SelectedAccountGroup;\r\n params.BankPass = this.SelectedBankPass;\r\n params.BookingAccountsEntities = this.State.BookingAccountsItems.map(item => {\r\n if (!item.CCPayDay) {\r\n delete item.CCPayDay; \r\n } \r\n return item;\r\n });\r\n params.IsDownloadConfirm = this.State.IsDownloadConfirm;\r\n if (this.State.IsExternalAccountsMapping) {\r\n params.ExternalAccountMappingParams = this.ExternalAccountMappingParams;\r\n } else {\r\n params.ExternalAccountMappingParams = null;\r\n }\r\n return params;\r\n }\r\n\r\n private OnFailedResponse(rsponse: BaseResponse) {\r\n if (rsponse.ResponseCode == 999) {\r\n this.UI.UnexpectedMessage(rsponse.ResponseMessage);\r\n } else {\r\n this.UI.StopMessage(rsponse.ResponseMessage);\r\n }\r\n\r\n this.IsLoading = false;\r\n }\r\n\r\n}\r\n","import { ServiceBagService } 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 { EventEmitter } from '@angular/core';\r\nimport { Observable, Subscription } from 'rxjs';\r\nimport { Globals } from '@kraken/_globals';\r\n\r\nexport class SelectorSettings {\r\n IsVisible?: boolean;\r\n IsMultiple?: boolean;\r\n Params?: (() => TParams) | TParams;\r\n Default: (() => any) | any;\r\n IsHideClearButton: boolean;\r\n DropDownOptions: any;\r\n IsSearchDisabled: boolean;\r\n ReadOnly: boolean = false;\r\n\r\n FilterSettings: {\r\n Loaded: () => void;\r\n ValueChanged: (value: any) => void;\r\n DataSourceLoaded: (value: any) => void;\r\n LoadStatus$: Observable<{ IsLoaded: boolean, CanBeLoaded: boolean }>;\r\n DataSource$: Observable\r\n };\r\n Custom: any;\r\n}\r\nexport enum EnumSelectorModes {\r\n Independent = 'Independent',\r\n FilterMajor = 'FilterMajor',\r\n FilterMinor = 'FilterMinor',\r\n}\r\n\r\nexport class BaseSelectorState extends BaseState {\r\n OrganizationID: number;\r\n CanBeLoaded: boolean;\r\n Loaded: boolean = true;\r\n Mode: EnumSelectorModes;\r\n DataSource: TDataSource;\r\n}\r\nexport abstract class BaseSelectorComponent, TValue, TParams, TDataSource> extends BaseComponent {\r\n\r\n abstract Settings: SelectorSettings;\r\n abstract Value: TValue | TValue[];\r\n abstract ValueChange: EventEmitter;\r\n\r\n ShouldHandleDefault = true;\r\n IsMinor = false;\r\n\r\n protected IsOnlyDefaultDataSource() { return true; }\r\n protected LoadDataSource(): Promise { return Promise.resolve(); }\r\n protected abstract GetDefaultDataSource(): TDataSource;\r\n\r\n protected _subscriptions: Subscription[] = [];\r\n\r\n private IsDefaultLoaded: boolean;\r\n\r\n constructor(A: ServiceBagService, ComponentName: string, StateType: (new () => TState)) {\r\n super(A, ComponentName, StateType);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n if (!this.Settings.IsVisible) { return; }\r\n this.DefineMode();\r\n\r\n if (!this.IsOnlyDefaultDataSource()) {\r\n this.State.DataSource = this.GetDefaultDataSource();\r\n return;\r\n }\r\n\r\n if (this.State.Mode === EnumSelectorModes.Independent) {\r\n this.State.CanBeLoaded = true;\r\n this.InitDataSource();\r\n } else {\r\n this._subscriptions.push(this.Settings.FilterSettings.DataSource$.subscribe((data) => {\r\n this.State.DataSource = data;\r\n }));\r\n\r\n if (this.State.Mode === EnumSelectorModes.FilterMajor) {\r\n this._subscriptions.push(this.Settings.FilterSettings.LoadStatus$.subscribe((status) => {\r\n this.State.Loaded = status.IsLoaded;\r\n this.State.CanBeLoaded = status.CanBeLoaded;\r\n\r\n if ((!this.State.Loaded) && this.IsDefaultLoaded) { this.IsDefaultLoaded = false; }\r\n\r\n this.InitDataSource();\r\n }));\r\n }\r\n }\r\n }\r\n\r\n protected override OnDestroyComponent() {\r\n this._subscriptions.forEach(x => x.unsubscribe());\r\n this._subscriptions = [];\r\n }\r\n\r\n OnValueChanged(value: TValue | TValue[]) {\r\n value = this.CastValue(value);\r\n\r\n if (this.Value != value) {\r\n this.Value = value;\r\n this.ValueChange.emit(value);\r\n if (this.Settings.FilterSettings?.ValueChanged) { this.Settings.FilterSettings.ValueChanged(value); }\r\n }\r\n }\r\n\r\n protected GetParams() {\r\n if (!this.Settings?.Params) { return {} as TParams; }\r\n if (typeof (this.Settings?.Params) === 'function') { return (this.Settings as any).Params() }\r\n\r\n return this.Settings.Params as TParams;\r\n }\r\n\r\n private CastValue(value: TValue | TValue[]) {\r\n if (!this.Settings || !value) { return value; }\r\n\r\n if (this.Settings.IsMultiple) {\r\n if (Array.isArray(value)) { return value; }\r\n else { return [value]; }\r\n } else {\r\n if (Array.isArray(value)) { throw new Error('You can not set array of items for item variable') }\r\n return value;\r\n }\r\n }\r\n\r\n private InitDataSource() {\r\n if (this.State.Loaded && !this.IsDefaultLoaded) { return; }\r\n\r\n // this.SetDefaultValue();\r\n\r\n this.State.OrganizationID = Globals.OrganizationID;\r\n if (!this.State.OrganizationID || !this.State.CanBeLoaded) {\r\n if (!this.IsDefaultLoaded) {\r\n this.SetDataSource(this.GetDefaultDataSource());\r\n this.IsDefaultLoaded = true;\r\n this.Loaded();\r\n }\r\n } else {\r\n const promise = this.LoadDataSource();\r\n if (promise) {\r\n promise.\r\n then((dataSource) => { this.SetDataSource(dataSource); }).\r\n finally(() => {\r\n this.IsDefaultLoaded = false;\r\n this.Loaded();\r\n })\r\n }\r\n }\r\n }\r\n\r\n private SetDefaultValue() {\r\n if (this.ShouldHandleDefault) {\r\n let defaultValue = this.Settings.IsMultiple ? [] : undefined;\r\n if (this.Settings.Default) {\r\n defaultValue = typeof this.Settings.Default === 'function' ? this.Settings.Default() : this.Settings.Default;\r\n }\r\n\r\n this.Value = defaultValue;\r\n this.ValueChange.emit(this.Value);\r\n }\r\n }\r\n\r\n private DefineMode() {\r\n if (!this.Settings.FilterSettings) { this.State.Mode = EnumSelectorModes.Independent; }\r\n else if (this.IsMinor) { this.State.Mode = EnumSelectorModes.FilterMinor; }\r\n else { this.State.Mode = EnumSelectorModes.FilterMajor; }\r\n }\r\n\r\n private SetDataSource(dataSource) {\r\n if (this.State.Mode === EnumSelectorModes.FilterMajor) {\r\n this.Settings.FilterSettings?.DataSourceLoaded(dataSource);\r\n } else {\r\n this.State.DataSource = dataSource;\r\n }\r\n }\r\n\r\n private Loaded() {\r\n if (this.State.Mode === EnumSelectorModes.FilterMajor && this.Settings.FilterSettings) { this.Settings.FilterSettings.Loaded(); }\r\n }\r\n\r\n}","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\";","\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { BookingAccountUploadView } from './../views/bookingaccountupload.view';\r\nimport { UploadRequestParams } from './../params/uploadrequest.param';\r\n@Injectable()\r\nexport class UploadRequestEndpoint extends BaseEndpoint\r\n{\r\n constructor(api: APIGatewayService) {super(\"UploadRequest\", api);}\r\n \r\n public CreateUploadRequest(Params: UploadRequestParams) : Observable>\r\n {\r\n return this.api.ExecutePostAction(this.ControllerName, 'CreateUploadRequest', Params, undefined );\r\n }\r\n}\r\n","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class UploadRequestParams extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'UploadRequestParams';\r\n }\r\n \r\n public BookingAccountID: number; \r\n public AccountID: number; \r\n public CompanyID: number; \r\n public OrganizationID: number; \r\n public FromDate: Date; \r\n public IsCheckDate: boolean; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import {Component, Input, ViewChild} from '@angular/core';\r\nimport { UploadRequestEndpoint } from '@kraken/_proxy/endpoints/uploadrequest.endpoint';\r\nimport { BookingAccount } from '@kraken/_proxy/entities/bookingaccount.entity';\r\nimport {BasePageComponent} from '@m4u-angular/base/component/BasePageComponent';\r\nimport {ServiceBagService, ServiceBagServices} from '@m4u-angular/base/component/ServiceBag';\r\nimport {BaseEntity, BaseState} from '@m4u-angular/base/entities/BaseEntities';\r\nimport {EnumPageDisplayModes} from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { DxValidationGroupComponent } from 'devextreme-angular';\r\nimport { formatDate } from 'devextreme/localization';\r\nimport {UploadRequestParams} from \"../../_proxy/params/uploadrequest.param\";\r\n\r\nclass State extends BaseState {\r\n FromDate: Date;\r\n InvalidBookingAccounts: BookingAccount[]; \r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-upload-dialog',\r\n templateUrl: './upload-dialog.component.html'\r\n})\r\nexport class UploadDialogComponent extends BasePageComponent {\r\n\r\n @ViewChild('validationGroup') validationGroup: DxValidationGroupComponent;\r\n\r\n @Input() OrganizationID: number = -999;\r\n @Input() CompanyID: number = -999;\r\n @Input() AccountID: number = -999;\r\n @Input() BookingAccountID: number = -999;\r\n\r\n constructor(A: ServiceBagService,\r\n private uploadRequestEndpoint: UploadRequestEndpoint) {\r\n \r\n super(A, 'UploadDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog);\r\n }\r\n\r\n public OpenDialog() {\r\n this.ClearState();\r\n this.ShowDialogShort(undefined);\r\n }\r\n\r\n public OnOK() {\r\n if(this.State.InvalidBookingAccounts && this.State.InvalidBookingAccounts.length > 0) {\r\n this.SaveInvalid();\r\n }else {\r\n this.Save();\r\n }\r\n }\r\n\r\n public GetTitleConfirm() {\r\n return this.RC('ttlConfirmUploadRequest').replace('{0}', formatDate(this.State.FromDate, this.F.DateFormatShort));\r\n }\r\n\r\n private Save() {\r\n let params = new UploadRequestParams();\r\n params.OrganizationID = this.OrganizationID;\r\n params.CompanyID = this.CompanyID;\r\n params.AccountID = this.AccountID;\r\n params.BookingAccountID = this.BookingAccountID;\r\n params.FromDate = this.State.FromDate;\r\n params.IsCheckDate = true;\r\n \r\n this.Do(this.uploadRequestEndpoint.CreateUploadRequest(params), false, (response) => {\r\n this.State.InvalidBookingAccounts = response.Entities;\r\n\r\n if(!response.Entities || response.Entities.length === 0) { \r\n this.A.UI.InfoMessage(this.RC(\"msgSuccess\"));\r\n this.CloseDialogWithSuccess(); \r\n }\r\n });\r\n }\r\n\r\n private SaveInvalid() {\r\n let params = new UploadRequestParams();\r\n params.OrganizationID = this.OrganizationID;\r\n params.CompanyID = this.CompanyID;\r\n params.AccountID = this.AccountID;\r\n params.BookingAccountID = this.BookingAccountID;\r\n params.FromDate = this.State.FromDate;\r\n params.IsCheckDate = false;\r\n \r\n this.Do(this.uploadRequestEndpoint.CreateUploadRequest(params), true, (response) => {\r\n this.CloseDialogWithSuccess();\r\n });\r\n }\r\n\r\n private ClearState() {\r\n this.State.FromDate = undefined;\r\n this.State.InvalidBookingAccounts = undefined;\r\n\r\n this.validationGroup.instance.reset();\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n {{GetTitleConfirm()}}\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n {{'txtContinue' | RC:THIS}}\\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 { NotificationTemplate } from './../entities/notificationtemplate.entity';\r\nimport { NotificationTemplateSectionView } from './../views/notificationtemplatesection.view';\r\nexport class NotificationTemplateView extends NotificationTemplate {\r\n constructor() {\r\n super();\r\n this.TypeName = 'NotificationTemplateView';\r\n }\r\n \r\n public Sections: NotificationTemplateSectionView[] = []; \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 { ReplicationRequest } from './../entities/replicationrequest.entity';\r\nimport { OrganizationWrapParams } from './../params/organizationwrap.param';\r\nimport { UpdateReplicationRequestParams } from './../params/updatereplicationrequest.param';\r\n@Injectable()\r\nexport class ReplicationRequestEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"ReplicationRequest\", api);}\r\n\t\r\n\r\n public Create(Params: OrganizationWrapParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'Create', Params, undefined );\r\n }\r\n\r\n public CheckRequest(Params: OrganizationWrapParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'CheckRequest', Params, undefined );\r\n }\r\n\r\n public UpdateRequest(Params: UpdateReplicationRequestParams) : Observable\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'UpdateRequest', Params, undefined );\r\n }\r\n}\r\n\r\n","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Organization } from './../entities/organization.entity';\r\nexport class BillingContract extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'BillingContract';\r\n }\r\n \r\n public OrganizationID: number; \r\n public Name: string; \r\n public Description: string; \r\n public SBOCustomerCode: string; \r\n public SBOProjectNumber: number; \r\n public ContractBaseSum: number; \r\n public ContractBaseCompaniesQuantity: number; \r\n public ContractBaseAccountsQuantity: number; \r\n public ContractBaseUsersQuantity: number; \r\n public BillingBaseSum: number; \r\n public BillingBaseCompaniesQuantity: number; \r\n public BillingBaseAccountsQuantity: number; \r\n public BillingBaseUsersQuantity: number; \r\n public ExtraBaseCompanyPrice: number; \r\n public ExtraBaseAccountPrice: number; \r\n public ExtraBaseUserPrice: number; \r\n public ContractJournalEntriesSum: number; \r\n public ContractJournalEntriesCompaniesQuantity: number; \r\n public BillingJournalEntriesSum: number; \r\n public BillingJournalEntriesCompaniesQuantity: number; \r\n public ExtraJournalEntriesPrice: number; \r\n public ContractCashflowSum: number; \r\n public ContractCashflowCompaniesQuantity: number; \r\n public BillingCashflowSum: number; \r\n public BillingCashflowCompaniesQuantity: number; \r\n public ExtraCashflowPrice: number; \r\n public ContractLoansSum: number; \r\n public ContractLoansCompaniesQuantity: number; \r\n public BillingLoansSum: number; \r\n public BillingLoansCompaniesQuantity: number; \r\n public ExtraLoansPrice: number; \r\n public IsActive: boolean; \r\n public Organization: Organization = new Organization; \r\n\tpublic CreatedBy: number;\r\n\tpublic CreatedDate: Date;\r\n}\r\n\r\n\r\n\r\n","import { ChangeDetectorRef, Component, ViewChild } from '@angular/core';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { OrganizationEndpoint } from '../../_proxy/endpoints/organization.endpoint';\r\nimport { BaseState, BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Organization } from '../../_proxy/entities/organization.entity';\r\nimport { EnumOrganizationChildEntityTypes } from '../../_proxy/enums';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ContextMenuElement } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { DownloadRequestEndpoint } from '../../_proxy/endpoints/downloadrequest.endpoint';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { formatDate } from 'devextreme/localization';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenerateJournalEntryDialogComponent } from '../../dialogs/generate-journal-entry-dialog/generate-journal-entry-dialog.component';\r\nimport { TabsComponent } from '@m4u-angular/ui/components/tabs/tabs.component';\r\nimport { ReconciliationDialogComponent } from '../../dialogs/reconciliation-dialog/reconciliation-dialog.component';\r\nimport { InputBoxDialogComponent } from '@m4u-angular/ui/dialogs/inputbox-dialog/inputboxdialog.component';\r\nimport { OtpInputDialogComponent } from '../../components/otp-input-dialog/otp-input-dialog.component';\r\nimport { MessageBoxDialogComponent } from '../../../../src/ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\nimport { EnumCRUDActions, EnumMessageBoxTypes } from '../../../../src/core/framework/sysenums.enum';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Company } from '../../_proxy/entities/company.entity';\r\nimport { User } from '../../_proxy/entities/user.entity';\r\nimport { Account } from '../../_proxy/entities/account.entity';\r\nimport { AccountGroup } from '../../_proxy/entities/accountgroup.entity';\r\nimport { NotificationTemplate } from '../../_proxy/entities/notificationtemplate.entity';\r\nimport { TransactionCategory } from '../../_proxy/entities/transactioncategory.entity';\r\nimport { Scenario } from '../../_proxy/entities/scenario.entity';\r\nimport { ProbabilityLevel } from '../../_proxy/entities/probabilitylevel.entity';\r\nimport { OrganizationWrapParams } from '../../_proxy/params/organizationwrap.param';\r\nimport { Deployment } from '../../_proxy/entities/deployment.entity';\r\nimport { BankPassView } from '../../_proxy/views/bankpass.view';\r\nimport { RecategorizeDialogComponent } from '@kraken/dialogs/recategorize-dialog/recategorize-dialog.component';\r\nimport { CompanyCreationWizardComponent } from '../company-creation-wizard/company-creation-wizard.component';\r\nimport { UploadDialogComponent } from '../../dialogs/upload-dialog/upload-dialog.component';\r\nimport { NotificationTemplateView } from '@kraken/_proxy/views/notificationtemplate.view';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { AccessService } from '@kraken/services/access.service';\r\nimport { ReplicationRequestEndpoint } from '@kraken/_proxy/endpoints/replicationrequest.endpoint';\r\nimport { BillingContract } from '../../_proxy/entities/billingcontract.entity';\r\nimport { TransactionClassificationRule } from '@kraken/_proxy/entities/transactionclassificationrule.entity';\r\n\r\nclass State extends BaseState {\r\n CurrentTabIndex: number;\r\n CurrentTabIndexInGroup: number;\r\n CurrentAdditionalSettingsTabIndex: number;\r\n SelectedGroupIndex = 0;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-organization',\r\n templateUrl: './organization.component.html',\r\n styleUrls: ['./organization.component.scss']\r\n})\r\nexport class OrganizationComponent extends BasePageCRUDComponent {\r\n @ViewChild(GenerateJournalEntryDialogComponent) generateJournalEntryDialog: GenerateJournalEntryDialogComponent;\r\n @ViewChild(ReconciliationDialogComponent) reconciliationDialog: ReconciliationDialogComponent;\r\n @ViewChild(UploadDialogComponent) uploadDialog: UploadDialogComponent;\r\n @ViewChild(InputBoxDialogComponent) inputBoxDialog: InputBoxDialogComponent;\r\n @ViewChild('tabs') tabs: TabsComponent;\r\n @ViewChild('otpInputDialog') otpInputDialog: OtpInputDialogComponent;\r\n @ViewChild('messageBox') messageBoxDialog: MessageBoxDialogComponent;\r\n @ViewChild(RecategorizeDialogComponent) recategorizeDialog: RecategorizeDialogComponent;\r\n @ViewChild(CompanyCreationWizardComponent) wizardDialog: CompanyCreationWizardComponent;\r\n\r\n public OrganizationGroupingTabs;\r\n\r\n constructor(A: ServiceBagService,\r\n public accessService: AccessService,\r\n private endpoint: OrganizationEndpoint,\r\n public screenService: ScreenService,\r\n private downloadRequestEndpoint: DownloadRequestEndpoint,\r\n private replicationRequestEndpoint: ReplicationRequestEndpoint,\r\n private cdr: ChangeDetectorRef) {\r\n super(A, 'OrganizationComponent', Organization, State, endpoint);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.OrganizationGroupingTabs = this.LIST('OrganizationGroupingTabs');\r\n\r\n if (!this.accessService.IsAdmin()) {\r\n this.OrganizationGroupingTabs = this.LIST('OrganizationGroupingTabs')\r\n .filter(tab => (tab as any).Name !== 'AdminSettingsTab' && (tab as any).Name !== 'BillingContractTab');\r\n }\r\n\r\n if (!this.accessService.IsAllowCashflow()) {\r\n this.OrganizationGroupingTabs = this.OrganizationGroupingTabs.map((groupTab: any) => {\r\n \r\n const filteredTabs = groupTab.tabs.filter((tab: any) => \r\n tab.Type !== EnumOrganizationChildEntityTypes.Scenario &&\r\n tab.Type !== EnumOrganizationChildEntityTypes.ProbabilityLevel\r\n );\r\n return { ...groupTab, tabs: filteredTabs };\r\n });\r\n }\r\n\r\n if (!this.accessService.IsAllowOrganizationLevelEntities()) {\r\n this.OrganizationGroupingTabs = this.OrganizationGroupingTabs.map((groupTab: any) => {\r\n\r\n const filteredTabs = groupTab.tabs.filter((tab: any) => \r\n tab.Type === EnumOrganizationChildEntityTypes.Company || \r\n tab.Type === EnumOrganizationChildEntityTypes.BankPass || \r\n tab.Type === EnumOrganizationChildEntityTypes.Account\r\n );\r\n\r\n return { ...groupTab, tabs: filteredTabs };\r\n });\r\n }\r\n\r\n if (!this.accessService.IsAdmin()) {\r\n this.OrganizationGroupingTabs = this.OrganizationGroupingTabs.filter((groupTab: any) =>\r\n groupTab.name !== 'Admin');\r\n }\r\n\r\n this.RemoveEmptyGroupTabs();\r\n this.DisplayMode = this.IsAddMode ? EnumPageDisplayModes.Window : EnumPageDisplayModes.FullScreen;\r\n this.CountActualTabIndexesInSelector();\r\n this.InitStateFromQuery();\r\n this.ReloadTabsBadges();\r\n }\r\n\r\n public ActualIndexOfTabInSelector: { [key: string]: number } = {};\r\n\r\n public CountActualTabIndexesInSelector() {\r\n this.OrganizationGroupingTabs.forEach(group => {\r\n group.tabs.forEach(tab => {\r\n this.ActualIndexOfTabInSelector[tab.Name] = tab.index;\r\n });\r\n });\r\n }\r\n\r\n override OnInitState() {\r\n this.State.CurrentTabIndex = 0;\r\n this.State.CurrentTabIndexInGroup = 0;\r\n this.State.CurrentAdditionalSettingsTabIndex = 0;\r\n }\r\n\r\n InitStateFromQuery() {\r\n if (Object.entries(this.QueryParams).length <= 0) {\r\n return;\r\n }\r\n if (this.QueryParams.P_TabIndex) {\r\n this.State.CurrentTabIndex = this.QueryParams.P_TabIndex;\r\n }\r\n }\r\n\r\n override OnEntityInitObjectName() {\r\n return this.Entity && this.Entity.Name;\r\n }\r\n\r\n override OnEntityNew() {\r\n this.Entity.IsActive = true;\r\n this.Entity.JobPriority = 9;\r\n this.Entity.IsLicensedForTransactionsUpload = true;\r\n this.Entity.DefaultCurrency = 'ILS';\r\n }\r\n\r\n override OnEntityValidate(): boolean {\r\n if (this.Entity.IsRemoveHistoricalData && !this.Entity.HistoricalDataRetentionPeriod) {\r\n this.UI.StopMessage(this.RC('msgFillHistoricalDataRetentionPeriod'));\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n override OnEntitySaved() {\r\n if (!this.IsAddMode) {\r\n if (this.accessService.IsAdmin()) {\r\n this.NavigateBack();\r\n }\r\n return;\r\n }\r\n\r\n this.Do(this.endpoint.GetLastBillingContractEntryId(this.Entity.EntryID), false, (response) => {\r\n const billingContractId = response.Data;\r\n this.Do(this.endpoint.GetLastDeploymentEntryId(this.Entity.EntryID), false, (response) => {\r\n const deploymentId = response.Data;\r\n this.Navigate(['/pages/passwordmanage'], {\r\n CredentialID: deploymentId,\r\n Type: 2,\r\n ReturnUrl: `/pages/billing-contract/${billingContractId}`,\r\n ReturnUrlParams: JSON.stringify({\r\n OrganizationID: this.Entity.EntryID,\r\n IsNewOrganization: true\r\n })\r\n });\r\n });\r\n });\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 === Company || ExternalEntityType === User || ExternalEntityType === BankPassView\r\n || ExternalEntityType === Account || ExternalEntityType === AccountGroup || ExternalEntityType === NotificationTemplate\r\n || ExternalEntityType === NotificationTemplateView || ExternalEntityType === TransactionCategory\r\n || ExternalEntityType === TransactionClassificationRule || ExternalEntityType === Scenario \r\n || ExternalEntityType === ProbabilityLevel\r\n || ExternalEntityType === Deployment || ExternalEntityType === BillingContract) {\r\n this.ReloadTabsBadges();\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 private ReloadTabsBadges() {\r\n\r\n this.OrganizationGroupingTabs && this.OrganizationGroupingTabs.forEach(group => {\r\n\r\n group.tabs.forEach(tab => {\r\n if (!(tab as any).Type) {\r\n return; \r\n }\r\n\r\n this.Do(this.endpoint.GetChildObjectsCount(this.EntityEntryID, (tab as any).Type), false,\r\n (response: BaseDataResponse) => {\r\n (tab as any).badge = response.Data.toString();\r\n this.tabs && this.tabs.Instance && this.tabs.Instance.repaint();\r\n }\r\n );\r\n });\r\n });\r\n }\r\n\r\n GetLinkParams() {\r\n return { CredentialID: this.Entity.EntryID, Type: 2, ReturnUrl: `/pages/organization/${this.Entity.EntryID}` };\r\n }\r\n\r\n override OnInitContextMenus(): ContextMenuElement[] {\r\n if (this.IsAddMode) {\r\n return undefined;\r\n }\r\n const menus: ContextMenuElement[] =\r\n [\r\n {\r\n text: this.RC('btnDownloadUpdatedData'),\r\n visible: this.Entity.IsActive,\r\n onClick: this.OnDownloadRequestedData.bind(this)\r\n },\r\n {\r\n text: this.RC('btnUpload'),\r\n visible: this.Entity.IsActive && this.Entity.IsHasAutomaticDeployment,\r\n onClick: this.OnUpload.bind(this)\r\n },\r\n {\r\n text: this.RC('btnTransactionsReport'),\r\n visible: this.Entity.IsActive,\r\n onClick: this.OnGoToTransactions.bind(this)\r\n },\r\n {\r\n text: this.RC('btnBalancesReport'),\r\n visible: this.Entity.IsActive,\r\n onClick: this.OnGoToBalances.bind(this)\r\n },\r\n {\r\n text: this.RC('btnSyncStatus'),\r\n visible: this.Entity.IsActive,\r\n onClick: this.OnGoToSyncStatus.bind(this)\r\n },\r\n {\r\n text: this.RC('lblRecategorize'),\r\n visible: this.Entity.IsActive,\r\n onClick: this.OnRecategorize.bind(this)\r\n },\r\n {\r\n text: this.RC('lblReconcile'),\r\n visible: this.Entity.IsActive,\r\n onClick: this.OnShowDialogRecioncile.bind(this)\r\n },\r\n {\r\n text: this.RC('lblRegenarateJournalEntries'),\r\n visible: this.Entity.IsActive && this.Entity.IsLicensedForJournalEntries,\r\n onClick: this.OnShowDialogRegenarateJournalEntries.bind(this)\r\n },\r\n {\r\n text: this.RC('lblSyncNow'),\r\n visible: !this.IsAddMode &&\r\n (this.Entity?.IsLicensedForAccountingSync\r\n || this.Entity?.IsLicensedForCashflow\r\n || this.Entity?.IsLicensedForLedgerAccountsSync ? true : false),\r\n onClick: this.SyncNow\r\n }\r\n ];\r\n\r\n return menus;\r\n }\r\n\r\n OnUpload() {\r\n this.uploadDialog.OpenDialog();\r\n }\r\n\r\n OnDownloadRequestedData() {\r\n this.Do(this.downloadRequestEndpoint.DownloadOrganizationUpdatedData(this.Entity.EntryID), true, (data) => {\r\n if (data.Entity) {\r\n this.otpInputDialog.downloadRequest = data.Entity;\r\n this.otpInputDialog.Message = data.ResponseMessage;\r\n this.otpInputDialog.ShowDialogShort(() => { });\r\n } else if (data.ResponseExtendedMessage) {\r\n this.messageBoxDialog.Type = EnumMessageBoxTypes.OK;\r\n this.messageBoxDialog.Title = this.RC('ttlMultipleOtp');\r\n this.messageBoxDialog.Prompt = data.ResponseExtendedMessage;\r\n this.messageBoxDialog.ShowDialogShort(() => { });\r\n }\r\n });\r\n }\r\n\r\n OnGoToTransactions() {\r\n this.Navigate(['/pages/transaction-report'], { OrganizationID: this.Entity.EntryID }, false, true);\r\n }\r\n\r\n OnGoToBalances() {\r\n this.Navigate(['/pages/balance-report'], { OrganizationID: this.Entity.EntryID }, false, true);\r\n }\r\n\r\n OnGoToSyncStatus() {\r\n this.Navigate(['pages/sync-status'], { OrganizationID: this.Entity.EntryID }, false, true);\r\n }\r\n\r\n OnRecategorize() {\r\n this.recategorizeDialog.RecategorizeByOrganization(this.Entity.EntryID);\r\n }\r\n\r\n OnShowDialogRecioncile() {\r\n this.reconciliationDialog.ReconcileOrganization(this.Entity.EntryID);\r\n }\r\n\r\n OnShowDialogRegenarateJournalEntries() {\r\n this.generateJournalEntryDialog.RegenarateJournalEntriesByOrganization(this.Entity.EntryID);\r\n }\r\n\r\n // Add date and user whenever focusing the field\r\n OnFocusNotes(e) {\r\n if (this.IsAddMode) {\r\n return;\r\n }\r\n const d = new Date;\r\n const sSep: string = Utils.IsEmpty(this.Entity.InternalNotes) ? '' : '\\n';\r\n let sAdd = '';\r\n sAdd += formatDate(d, this.Framework.CompanyInfo.DateFormatShort.substring(0, 5)) + ' ';\r\n sAdd += formatDate(d, this.Framework.CompanyInfo.TimeFormatShort) + ' ';\r\n sAdd += this.A.Session.DisplayUserName + ': ';\r\n if (Utils.NZ(this.Entity.InternalNotes).endsWith(sAdd)) {\r\n return;\r\n }\r\n this.Entity.InternalNotes = Utils.NZ(this.Entity.InternalNotes) + sSep + sAdd;\r\n\r\n\r\n // Put focus on end of line\r\n setTimeout(() => {\r\n const ctl = e.element.getElementsByClassName('dx-texteditor-input');\r\n ctl[0].selectionStart = this.Entity.InternalNotes && this.Entity.InternalNotes.length;\r\n }, 100);\r\n }\r\n\r\n OnTabItemClick(e) {\r\n this.State.CurrentTabIndex = e.itemData.index;\r\n }\r\n\r\n override IsAutoFocusEnabled() {\r\n return this.A.Screen.IsDesktop() || (this.A.Screen.IsMobile() && this.IsAddMode);\r\n }\r\n\r\n OnRunWizard() {\r\n this.wizardDialog.OrganizationID = this.EntityEntryID;\r\n this.wizardDialog.ShowDialogShort(() => { }, () => { });\r\n }\r\n\r\n OnAddBankPass() {\r\n this.A.Navigator.Navigate(['/pages/bankpass', 'new'], { OrganizationID: this.Entity.EntryID });\r\n }\r\n\r\n override OnSave() {\r\n\r\n //Not set to remove\r\n if (this.Entity.IsRemoveHistoricalData == false) {\r\n super.OnSave();\r\n return;\r\n }\r\n\r\n //Didn't change\r\n if (this.EntityOriginal.IsRemoveHistoricalData == this.Entity.IsRemoveHistoricalData\r\n && this.EntityOriginal.HistoricalDataRetentionPeriod == this.Entity.HistoricalDataRetentionPeriod) {\r\n super.OnSave();\r\n return;\r\n }\r\n\r\n //Show messagebox\r\n this.messageBoxDialog.Type = EnumMessageBoxTypes.YesNo;\r\n this.messageBoxDialog.Prompt = this.RC('msgRemoveHistoricalData', this.Entity.HistoricalDataRetentionPeriod);\r\n this.messageBoxDialog.ShowDialogShort(() => super.OnSave());\r\n\r\n }\r\n\r\n OnUpdateTab(type: EnumOrganizationChildEntityTypes, count: number) {\r\n this.OrganizationGroupingTabs.forEach(group => {\r\n const tab = group.tabs.find(tab => tab.Type === type);\r\n if (tab) {\r\n tab.badge = count; \r\n }\r\n });\r\n }\r\n\r\n SyncNow = () => {\r\n const params = new OrganizationWrapParams;\r\n params.OrganizationID = this.EntityEntryID;\r\n\r\n this.Do(this.replicationRequestEndpoint.Create(params));\r\n };\r\n\r\n onGroupSelected(e: any) {\r\n this.State.SelectedGroupIndex = e.itemIndex;\r\n this.State.CurrentTabIndex = this.ActualIndexOfTabInSelector[this.OrganizationGroupingTabs[e.itemIndex]?.tabs[0]?.Name];\r\n this.cdr.detectChanges();\r\n this.tabs.ResetSelectedAndRepaint();\r\n }\r\n\r\n RemoveEmptyGroupTabs() {\r\n this.OrganizationGroupingTabs = this.OrganizationGroupingTabs.filter(group => group.tabs.length > 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\";","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { CompanyEndpoint } from '../../../_proxy/endpoints/company.endpoint';\r\nimport { Company } from '../../../_proxy/entities/company.entity';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { Organization } from '../../../_proxy/entities/organization.entity';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { CompanyListParams } from '@kraken/_proxy/params/companylist.param';\r\n\r\nclass State extends BaseState {\r\n LoadActive: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-company-list',\r\n templateUrl: './company-list.component.html',\r\n styleUrls: ['./company-list.component.scss']\r\n})\r\nexport class CompanyListComponent extends BaseComponent {\r\n @Output() OnUpdateCount = new EventEmitter();\r\n\r\n private _organizationID: number;\r\n @Input() set OrganizationID(value: number) {\r\n this._organizationID = value;\r\n if (this._organizationID > -1) this.LoadDataSource();\r\n }\r\n get OrganizationID() {\r\n return this._organizationID; \r\n }\r\n\r\n @Input() IsShowJournalEntryUploadLevel: boolean;\r\n\r\n constructor(A: ServiceBagService, private endpoint: CompanyEndpoint) {\r\n super(A, 'CompanyListComponent', State);\r\n }\r\n\r\n protected override OnInitState(): void {\r\n this.State.LoadActive = true;\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 === Organization || ExternalEntityType === Company) this.LoadDataSource();\r\n }\r\n\r\n public LoadDataSource() {\r\n if (!this._organizationID) return;\r\n\r\n const params = new CompanyListParams();\r\n params.OrganizationID = this._organizationID;\r\n params.LoadActive = this.State.LoadActive;\r\n\r\n this.DataSources['Companies'] = new DataSourceCustomAction((options: DataLoadOptions) => \r\n this.endpoint.ListEx(params, options), null, (data) => this.OnUpdateCount.emit(data.length));\r\n }\r\n\r\n GetLinkParams() {\r\n return { OrganizationID: this._organizationID, ShowAsWindow: true };\r\n }\r\n\r\n OnLoadActive(value: boolean) {\r\n this.State.LoadActive = value;\r\n this.LoadDataSource();\r\n }\r\n}\r\n\r\n","export default \"\\r\\n\\r\\n\\r\\n\";","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { 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 { Company } from '@kraken/_proxy/entities/company.entity';\r\n\r\nclass CompanyGridState extends BaseState {\r\n SelectedRows: number[];\r\n ShowActiveOnly: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-company-grid',\r\n templateUrl: './company-grid.component.html'\r\n})\r\nexport class CompanyGridComponent extends BaseGridComponent {\r\n @Input() IsSelectionMode: boolean = false;\r\n @Input() SelectedRows: number[];\r\n @Input() IsShowJournalEntryUploadLevel: boolean;\r\n @Input() LimitedHeight;\r\n @Output() OnSelectionChanged = new EventEmitter();\r\n @Output() OnLoadActive = new EventEmitter();\r\n\r\n allMode: string = 'allPages';\r\n checkBoxesMode: string = 'always';\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'CompanyGridComponent', Company, CompanyGridState);\r\n }\r\n\r\n override OnInitState() {\r\n this.State.ShowActiveOnly = true;\r\n this.OnLoadActive.emit(this.State.ShowActiveOnly);\r\n }\r\n\r\n OnNavigate(e) {\r\n if (!this.IsSelectionMode) this.Navigate(['/pages/company', e.data.EntryID], { OrganizationID: e.data.OrganizationID });\r\n }\r\n\r\n OnGridSelectionChanged(e) {\r\n this.OnSelectionChanged.emit();\r\n }\r\n\r\n OnToolbarPreparing(e) {\r\n e.toolbarOptions.items.unshift({\r\n location: 'after',\r\n widget: 'dxCheckBox',\r\n isCustom: true,\r\n options: {\r\n text: this.RC('lblShowActiveOnly'),\r\n value: this.State.ShowActiveOnly,\r\n onValueChanged: (e) => {\r\n this.State.ShowActiveOnly = e.value;\r\n this.OnLoadActive.emit(this.State.ShowActiveOnly);\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 { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseParamsFilter } from './../entities/baseparamsfilter.entity';\r\nimport { EnumDownloadTaskStatuses } from './../enums';\r\nimport { EnumUploadStatuses } from './../enums';\r\nimport { User } from './../entities/user.entity';\r\nexport class SyncStatusListParams extends BaseParamsFilter {\r\n constructor() {\r\n super();\r\n this.TypeName = 'SyncStatusListParams';\r\n }\r\n \r\n public DeploymentID: number; \r\n public ShowFailedOnly: boolean; \r\n public IsDownloadOnly: boolean; \r\n public IsUploadOnly: boolean; \r\n public DownloadTaskStatuses: EnumDownloadTaskStatuses[]; \r\n public UploadStatuses: EnumUploadStatuses[]; \r\n public JournalEntryUploadStatuses: EnumUploadStatuses[]; \r\n public IncomingPaymentUploadStatuses: EnumUploadStatuses[]; \r\n public BankPassIDs: number[]; \r\n public IsOnlyAutomaticUpload: boolean; \r\n public User: User = new User; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { SyncStatusAccountView } from './../views/syncstatusaccount.view';\r\nimport { SyncStatusListParams } from './../params/syncstatuslist.param';\r\n@Injectable()\r\nexport class SyncStatusAccountEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(api: APIGatewayService) {super(\"SyncStatusAccount\", api);}\r\n\t\r\n\r\n public ListEx(Params: SyncStatusListParams, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListEx', Params, options?.GetLoadOptions() );\r\n }\r\n}\r\n\r\n","import { Component } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { BaseEntitiesResponse, 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 { SyncStatusListParams } from '../../_proxy/params/syncstatuslist.param';\r\nimport { SyncStatusView } from '../../_proxy/views/syncstatus.view';\r\nimport {Globals} from '../../_globals';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { SyncStatusAccountEndpoint } from '@kraken/_proxy/endpoints/syncstatusaccount.endpoint';\r\nimport { AccessService } from '@kraken/services/access.service';\r\n\r\nclass State extends BaseState {\r\n IsError: boolean = false;\r\n TooltipVisible: boolean = false;\r\n ID: string;\r\n}\r\n\r\n@Component({\r\n selector: 'app-problem-indicator',\r\n templateUrl: './problem-indicator.component.html',\r\n styleUrls: ['./problem-indicator.component.scss']\r\n})\r\nexport class ProblemIndicatorComponent extends BaseComponent {\r\n private subscribtionOnNavigate: Subscription;\r\n private isReadyToRefresh = true;\r\n \r\n constructor(A: ServiceBagService, \r\n public accessService: AccessService,\r\n private syncStatusAccountEndpoint: SyncStatusAccountEndpoint, \r\n private screenService: ScreenService) {\r\n super(A, 'ProblemIndicatorComponent', State);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.GenerateID();\r\n this.subscribtionOnNavigate = this.A.SysEvents.OnNavigate.subscribe(() => this.RefreshStatus());\r\n this.LoadSyncStatus();\r\n }\r\n\r\n GenerateID() {\r\n this.State.ID = 'problem-indicator_' + Math.random().toString(36).substr(2, 9);\r\n }\r\n\r\n RefreshStatus() {\r\n if (this.isReadyToRefresh) {\r\n this.LoadSyncStatus();\r\n this.isReadyToRefresh = false;\r\n setTimeout(() => this.isReadyToRefresh = true, 60000);\r\n }\r\n }\r\n\r\n LoadSyncStatus() {\r\n if (this.accessService.IsAdmin()) return;\r\n\r\n var params = new SyncStatusListParams();\r\n params.OrganizationID = this.UserInfo?.OrganizationID;\r\n params.ShowFailedOnly = true;\r\n \r\n this.Do(this.syncStatusAccountEndpoint.ListEx(params, null), false,\r\n (response: BaseEntitiesResponse) => this.State.IsError = response.Entities.length > 0);\r\n }\r\n\r\n ToggleTooltipVisible() {\r\n this.State.TooltipVisible = !this.State.TooltipVisible;\r\n }\r\n\r\n OnClick() {\r\n this.Navigate(['pages/sync-status'], { OrganizationID: Globals.OrganizationID, ShowFailedOnly: true }, false, true);\r\n }\r\n\r\n override OnDestroyComponent() {\r\n this.subscribtionOnNavigate.unsubscribe();\r\n }\r\n}\r\n","export default \"\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n {{'txtSyncError' | RC:THIS}}\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n {{'msgProblemIndicator' | RC:THIS}}\\r\\n
\\r\\n \\r\\n
\";","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseParamsFilter } from './../entities/baseparamsfilter.entity';\r\nexport class AccountListParams extends BaseParamsFilter {\r\n constructor() {\r\n super();\r\n this.TypeName = 'AccountListParams';\r\n }\r\n \r\n public IsActiveCashFlow: boolean; \r\n public IsRequired: boolean = false;\r\n public IsManualBalancesEntry: boolean; \r\n\t\r\n public BankPassID: number; \r\n\t\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 { OrganizationEndpoint } from \"../../_proxy/endpoints/organization.endpoint\";\r\nimport { BaseState, BaseEntityResponse } from \"@m4u-angular/base/entities/BaseEntities\";\r\nimport { Organization } from \"../../_proxy/entities/organization.entity\";\r\nimport { EnumPageDisplayModes } from \"@m4u-angular/core/framework/sysenums.enum\";\r\nimport { AccountGroup } from \"../../_proxy/entities/accountgroup.entity\";\r\nimport { AccountGroupEndpoint } from \"../../_proxy/endpoints/accountgroup.endpoint\";\r\nimport { ToolbarSettings } from '@base/classes/BaseClasses';\r\nimport { AccountEndpoint } from \"@kraken/_proxy/endpoints/account.endpoint\";\r\nimport { AccountListParams } from \"@kraken/_proxy/params/accountlist.param\";\r\nimport { DataSourceCustomAction } from \"@m4u-angular/base/datalayer/BaseDataSources\";\r\nimport { DataLoadOptions } from \"@m4u-angular/base/datalayer/DataLoadOptions\";\r\n\r\nclass State extends BaseState\r\n{\r\n Organization: Organization = new Organization\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-account-group',\r\n templateUrl: './account-group.component.html'\r\n})\r\nexport class AccountGroupComponent extends BasePageCRUDComponent\r\n{\r\n constructor(A: ServiceBagService, \r\n private endpoint: AccountGroupEndpoint, \r\n private organizationEndpoint: OrganizationEndpoint, \r\n private accountEndpoint: AccountEndpoint)\r\n {\r\n super(A, 'AccountGroupComponent', AccountGroup, State, endpoint, EnumPageDisplayModes.Window);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.Do(\r\n this.organizationEndpoint.Get(this.QueryParams.OrganizationID), \r\n false, \r\n (response: BaseEntityResponse) => {\r\n this.State.Organization = response.Entity;\r\n this.LoadAccounts();\r\n }\r\n );\r\n }\r\n\r\n override OnEntityInitObjectName() {\r\n return this.Entity && this.Entity.Name; \r\n }\r\n\r\n override OnEntityNew() {\r\n this.Entity.IsActive = true;\r\n this.Entity.OrganizationID = this.QueryParams.OrganizationID;\r\n }\r\n\r\n override OnEntitySaved() {\r\n this.NavigateBack();\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 private LoadAccounts() {\r\n if(this.IsAddMode) {\r\n return;\r\n }\r\n\r\n const params = new AccountListParams();\r\n params.AccountGroups = [this.EntityEntryID];\r\n params.OrganizationID = this.State.Organization.EntryID;\r\n\r\n console.log(params);\r\n\r\n this.DataSources['Accounts'] = new DataSourceCustomAction((options: DataLoadOptions) =>\r\n this.accountEndpoint.ListEx(params, 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\\n \\r\\n\";","import { Component, EventEmitter, Output } 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 { AccountGroup } from '@kraken/_proxy/entities/accountgroup.entity';\r\n\r\nclass State extends BaseState {\r\n ShowActiveOnly: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-account-group-grid',\r\n templateUrl: './account-group-grid.component.html'\r\n})\r\nexport class AccountGroupGridComponent extends BaseGridComponent {\r\n \r\n @Output() OnLoadActive = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'AccountGroupGridComponent', AccountGroup, State);\r\n }\r\n\r\n protected override OnInitState() {\r\n this.State.ShowActiveOnly = true;\r\n this.OnLoadActive.emit(this.State.ShowActiveOnly);\r\n }\r\n\r\n OnNavigate(e) {\r\n this.Navigate(['/pages/account-group', e.data.EntryID], { OrganizationID: e.data.OrganizationID });\r\n }\r\n\r\n OnToolbarPreparing(e) {\r\n e.toolbarOptions.items.unshift({\r\n location: 'after',\r\n widget: 'dxCheckBox',\r\n isCustom: true,\r\n options: {\r\n text: this.RC('lblShowActiveOnly'),\r\n value: this.State.ShowActiveOnly,\r\n onValueChanged: (e) => {\r\n this.State.ShowActiveOnly = e.value;\r\n this.OnLoadActive.emit(this.State.ShowActiveOnly);\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, EventEmitter, Input, Output } from '@angular/core';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCRUDActions } 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 { AccountGroup } from '../../../_proxy/entities/accountgroup.entity';\r\nimport { AccountGroupEndpoint } from '../../../_proxy/endpoints/accountgroup.endpoint';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { AccountGroupListParams } from '@kraken/_proxy/params/accountgrouplist.param';\r\n\r\nclass State extends BaseState {\r\n LoadActive: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-account-group-list',\r\n templateUrl: './account-group-list.component.html'\r\n})\r\nexport class AccountGroupListComponent extends BaseComponent {\r\n @Output() OnUpdateCount = new EventEmitter();\r\n private _organizationID: number;\r\n @Input() set OrganizationID(value) {\r\n this._organizationID = value;\r\n if (this._organizationID > -1) this.LoadDataSource();\r\n }\r\n\r\n constructor(A: ServiceBagService, private endpoint: AccountGroupEndpoint) {\r\n super(A, 'AccountGroupListComponent', State);\r\n }\r\n\r\n protected override OnInitState(): void {\r\n this.State.LoadActive = true;\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 == AccountGroup) this.LoadDataSource();\r\n }\r\n\r\n public LoadDataSource() {\r\n const params = new AccountGroupListParams();\r\n params.OrganizationID = this._organizationID;\r\n params.LoadActive = this.State.LoadActive;\r\n\r\n this.DataSources['AccountGroups'] = new DataSourceCustomAction((options: DataLoadOptions) => \r\n this.endpoint.ListEx(params, options), null, (data) => this.OnUpdateCount.emit(data.length));\r\n }\r\n\r\n GetLinkParams() {\r\n return { OrganizationID: this._organizationID };\r\n }\r\n OnLoadActive(value: boolean) {\r\n this.State.LoadActive = value;\r\n this.LoadDataSource();\r\n }\r\n}\r\n\r\n","export default \"\\r\\n\\r\\n\";","import { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { 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 { EnumPageDisplayModes, EnumPageEntitySources } from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\nexport class State extends BaseState\r\n{\r\n SelectedAccountID: number;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-account-action-dialog',\r\n templateUrl: './account-action-dialog.component.html'\r\n})\r\nexport class AccountActionDialogComponent extends BasePageComponent\r\n{\r\n @Input() CompanyID: number;\r\n @Input() AccountID: number;\r\n\r\n constructor(A: ServiceBagService)\r\n {\r\n super(A, 'AccountActionDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n\r\n override OnInitState()\r\n {\r\n this.State.SelectedAccountID = this.AccountID;\r\n }\r\n\r\n OnSelectionChanged(value: number)\r\n {\r\n this.State.SelectedAccountID = value;\r\n }\r\n}","export 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\nimport { Account } from './../entities/account.entity';\r\nimport { BankPass } from './../entities/bankpass.entity';\r\nimport { BookingAccount } from './../entities/bookingaccount.entity';\r\nimport { CreditLimitView } from './../views/creditlimit.view';\r\nexport class AccountSaveParams extends BaseEntity\r\n{ \r\n public OrganizationID: number; \r\n public Account: Account = new Account; \r\n public BankPass: BankPass = new BankPass; \r\n public BookingAccountEntities: BookingAccount[] = []; \r\n public CreditLimitEntities: CreditLimitView[] = []; \r\n public DeleteBookingAccountEntryIDs: number[]; \r\n public DeleteCreditLimitEntryIDs: number[]; \r\n \r\n}\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { CreditLimitView } from './../views/creditlimit.view';\r\nimport { CreditLimitsParams } from './../params/creditlimits.param';\r\n@Injectable()\r\nexport class CreditLimitEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(api: APIGatewayService) {super(\"CreditLimit\", api);}\r\n\t\r\n\r\n public ListEx(Params: CreditLimitsParams, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListEx', Params, options?.GetLoadOptions() );\r\n }\r\n}\r\n\r\n","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseParamsFilter } from './../entities/baseparamsfilter.entity';\r\nexport class CreditLimitsParams extends BaseParamsFilter {\r\n constructor() {\r\n super();\r\n this.TypeName = 'CreditLimitsParams';\r\n }\r\n \r\n\t\r\n}\r\n\r\n\r\n","import { Injectable } from '@angular/core';\r\nimport { BaseService } from '@m4u-angular/base/service/BaseService';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ResourcesService } from '@m4u-angular/core/framework/resources.service';\r\nimport { EnumBankTypes } from '../_proxy/enums';\r\nimport { OrganizationEndpoint } from '../_proxy/endpoints/organization.endpoint';\r\nimport { AccountEndpoint } from '../_proxy/endpoints/account.endpoint';\r\nimport { Observable, of } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport DataSource from 'devextreme/data/data_source';\r\nimport ArrayStore from 'devextreme/data/array_store';\r\nimport { SessionService } from '@m4u-angular/core/framework/session.service';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { Organization } from '@kraken/_proxy/entities/organization.entity';\r\nimport { AccessService } from './access.service';\r\n\r\n\r\n@Injectable()\r\nexport class BanksListService extends BaseService {\r\n constructor(private resourcesService: ResourcesService, \r\n private sessionService: SessionService,\r\n private organizationEndpoint: OrganizationEndpoint, \r\n private accountEndpoint: AccountEndpoint,\r\n private accessService: AccessService) {\r\n super();\r\n }\r\n\r\n GetUserAllowedBanks(): Observable {\r\n\r\n const banksList = this.resourcesService.LIST('Banks', this.ModuleName);\r\n\r\n if (this.accessService.IsUser()) {\r\n return this.organizationEndpoint.GetAllowedBanks(this.UserInfo?.OrganizationID).pipe(\r\n map(r => !r.IsSuccess ? [] : banksList.filter(b => r.Data.find(d => d === b.Value)))\r\n );\r\n } else {\r\n return of(banksList);\r\n }\r\n }\r\n\r\n GetBanksByType(BankType: EnumBankTypes): Observable {\r\n\r\n const banksList = this.resourcesService.LIST('Banks', this.ModuleName);\r\n\r\n return this.accountEndpoint.GetBanksByType([BankType]).pipe(\r\n map(r => !r.IsSuccess ? [] : banksList.filter(b => r.Data.find(d => d === b.Value)))\r\n );\r\n }\r\n\r\n GetLocalBanks() {\r\n return this.sessionService.DataSources[`${this.ModuleName}LocalBanks`] as unknown as GenericListEntity[];\r\n }\r\n\r\n GetExternalCreditBanks() {\r\n return this.sessionService.DataSources[`${this.ModuleName}ExternalCreditCardBanks`] as unknown as GenericListEntity[];\r\n }\r\n\r\n GetForeignBanks() {\r\n return this.sessionService.DataSources[`${this.ModuleName}ForeignBanks`] as unknown as GenericListEntity[];\r\n }\r\n\r\n GetExternalLoanersBanks() {\r\n return this.sessionService.DataSources[`${this.ModuleName}ExternalLoanersBanks`] as unknown as GenericListEntity[];\r\n }\r\n\r\n \r\n GetCCProcessors() {\r\n return this.sessionService.DataSources[`${this.ModuleName}CCProcessors`] as unknown as GenericListEntity[];\r\n }\r\n\r\n IsLocalBank(bank) {\r\n const localBanks = this.GetLocalBanks();\r\n return localBanks.some(b => b.Value === bank.Value);\r\n }\r\n\r\n IsExternalCreditBank(bank) {\r\n const externalCreditCardBanks = this.GetExternalCreditBanks();\r\n return externalCreditCardBanks.some(b => b.Value === bank.Value);\r\n }\r\n\r\n IsForeignBank(bank) {\r\n const foreignBanks = this.GetForeignBanks();\r\n return foreignBanks.some(b => b.Value === bank.Value);\r\n }\r\n\r\n IsExternalLoanersBank(bank) {\r\n const externalLoanersBanks = this.GetExternalLoanersBanks() ?? [];\r\n return externalLoanersBanks.some(b => b.Value === bank.Value);\r\n }\r\n\r\n IsCCProcessor(bank) {\r\n const ccProcessors = this.GetCCProcessors() ?? [];\r\n return ccProcessors.some(b => b.Value === bank.Value);\r\n }\r\n\r\n \r\n\r\n\r\n\r\n GetGroupedDSFromList(BanksList: GenericListEntity[], organization: Organization = null) {\r\n const bankTypesList = this.resourcesService.LIST('BankTypes', this.ModuleName);\r\n let banksListWithTypes = Utils.CloneObject(BanksList);\r\n\r\n const getBankTypeFor = (type: EnumBankTypes) => bankTypesList.find(bt => bt.Value === type).Text;\r\n\r\n const findBankType = (bank) => {\r\n switch (true) {\r\n case this.IsLocalBank(bank):\r\n return getBankTypeFor(EnumBankTypes.Local);\r\n case this.IsExternalCreditBank(bank):\r\n return getBankTypeFor(EnumBankTypes.ExternalCreditCard);\r\n case this.IsForeignBank(bank):\r\n return getBankTypeFor(EnumBankTypes.Foreign);\r\n case this.IsExternalLoanersBank(bank):\r\n return getBankTypeFor(EnumBankTypes.ExternalLoaner);\r\n case this.IsCCProcessor(bank):\r\n return getBankTypeFor(EnumBankTypes.CCProcessor);\r\n default:\r\n return '';\r\n }\r\n };\r\n\r\n for (const bank of banksListWithTypes) {\r\n (bank as any).BankType = findBankType(bank);\r\n }\r\n\r\n return new DataSource({\r\n store: new ArrayStore({\r\n data: banksListWithTypes,\r\n key: 'Value',\r\n }),\r\n group: 'BankType',\r\n });\r\n }\r\n}\r\n","import { Component, ViewChild } 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, BaseEntityResponse, BaseDataResponse, BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumBookingAccountSubtypes, EnumBanks, EnumBankTypes, EnumBankGroups, \r\n EnumBankPassAccessTypes, EnumBankPassAutoDiscoverModes } from '../../_proxy/enums';\r\nimport { EnumMessageBoxTypes, EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ContextMenuElement } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { Account } from '../../_proxy/entities/account.entity';\r\nimport { CompanyEndpoint } from '../../_proxy/endpoints/company.endpoint';\r\nimport { AccountEndpoint } from '../../_proxy/endpoints/account.endpoint';\r\nimport { Company } from '../../_proxy/entities/company.entity';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { BankPassEndpoint } from '../../_proxy/endpoints/bankpass.endpoint';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { BankPassListParams } from '../../_proxy/params/bankpasslist.param';\r\nimport { BookingAccountListComponent } from '../booking-account/list/booking-account-list.component';\r\nimport { AccountSaveParams } from '../../_proxy/params/accountsave.param';\r\nimport { AccountGroupEndpoint } from '../../_proxy/endpoints/accountgroup.endpoint';\r\nimport { SysGlobals } from '@m4u-angular/core/framework/sysglobals';\r\nimport { DownloadRequestEndpoint } from '../../_proxy/endpoints/downloadrequest.endpoint';\r\nimport { AccountActionDialogComponent } from './account-action-dialog.component';\r\nimport { BookingAccountEndpoint } from '../../_proxy/endpoints/bookingaccount.endpoint';\r\nimport { BookingAccountListParams } from '../../_proxy/params/bookingaccountlist.param';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { GenerateJournalEntryDialogComponent } from '../../dialogs/generate-journal-entry-dialog/generate-journal-entry-dialog.component';\r\nimport { ReconciliationDialogComponent } from '../../dialogs/reconciliation-dialog/reconciliation-dialog.component';\r\nimport { InputBoxDialogComponent } from '@m4u-angular/ui/dialogs/inputbox-dialog/inputboxdialog.component';\r\nimport { OtpInputDialogComponent } from '../../components/otp-input-dialog/otp-input-dialog.component';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BankPass } from '../../_proxy/entities/bankpass.entity';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { BankPassView } from '../../_proxy/views/bankpass.view';\r\nimport { CreditLimitEndpoint } from '../../_proxy/endpoints/creditlimit.endpoint';\r\nimport { CreditLimitsParams } from '../../_proxy/params/creditlimits.param';\r\nimport { BookingAccountView } from '../../_proxy/views/bookingaccount.view';\r\nimport { BanksListService } from '../../services/banks-list.service';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { CreditLimitGridComponent } from '../credit-limit/grid/credit-limit-grid.component';\r\nimport { CreditLimitView } from '../../_proxy/views/creditlimit.view';\r\nimport { RecategorizeDialogComponent } from '@kraken/dialogs/recategorize-dialog/recategorize-dialog.component';\r\nimport { OrganizationEndpoint } from '@kraken/_proxy/endpoints/organization.endpoint';\r\nimport { Organization } from '@kraken/_proxy/entities/organization.entity';\r\nimport { UploadDialogComponent } from '@kraken/dialogs/upload-dialog/upload-dialog.component';\r\nimport { Globals } from '@kraken/_globals';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { BehaviorSubject, map, of, switchMap, tap } from 'rxjs';\r\nimport { DxSelectBoxComponent } from 'devextreme-angular';\r\nimport { AccountGroupListParams } from '@kraken/_proxy/params/accountgrouplist.param';\r\nimport { AccountListParams } from '@kraken/_proxy/params/accountlist.param';\r\nimport { MessageBoxDialogComponent } from '@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\n\r\nclass State extends BaseState {\r\n Company: Company = new Company;\r\n DefaultDownloadStartDate: Date;\r\n IsBalancesExists = false;\r\n BookingAccountSubtype = EnumBookingAccountSubtypes.Current;\r\n BookingAccountID: number;\r\n CopyFromAccountID: number;\r\n CreditLimits: CreditLimitView[] = [];\r\n DeleteCreditLimitEntryIDs: number[] = [];\r\n Organization: Organization;\r\n BookingAccounts = -1;\r\n IsBookingAccountsAdded: boolean;\r\n IsAnyBookingAccountDownloadDateChanged: boolean;\r\n HasPlaidBookingAccounts: boolean;\r\n NavBack: boolean = false;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-account',\r\n templateUrl: './account.component.html',\r\n styleUrls: ['./account.component.scss']\r\n})\r\nexport class AccountComponent extends BasePageCRUDComponent {\r\n @ViewChild('bookingAccounts') bookingAccounts: BookingAccountListComponent;\r\n @ViewChild('creditLimits') creditLimits: CreditLimitGridComponent;\r\n @ViewChild(ReconciliationDialogComponent) reconciliationDialog: ReconciliationDialogComponent;\r\n @ViewChild('accountActionDialog') accountActionDialog: AccountActionDialogComponent;\r\n @ViewChild(UploadDialogComponent) uploadDialog: UploadDialogComponent;\r\n @ViewChild(GenerateJournalEntryDialogComponent) generateJournalEntryDialog: GenerateJournalEntryDialogComponent;\r\n @ViewChild(InputBoxDialogComponent) inputBoxDialog: InputBoxDialogComponent;\r\n @ViewChild('otpInputDialog') otpInputDialog: OtpInputDialogComponent;\r\n @ViewChild(RecategorizeDialogComponent) recategorizeDialog: RecategorizeDialogComponent;\r\n @ViewChild('bankPassSelectBox') bankPassSelectBox: DxSelectBoxComponent;\r\n @ViewChild('messageBox') messageBoxDialog: MessageBoxDialogComponent;\r\n\r\n private entityLoaded$ = new BehaviorSubject(undefined);\r\n\r\n private get SelectedBankPass(): BankPassView {\r\n return this.Entity.BankPassID && this.DataSources['BankPasses']?.find(bp => bp.EntryID === this.Entity.BankPassID);\r\n }\r\n\r\n get ShowExternalMappingColumn(): boolean {\r\n return this.SelectedBankPass?.AccessType == EnumBankPassAccessTypes.PSD\r\n || this.SelectedBankPass?.AccessType == EnumBankPassAccessTypes.Plaid;\r\n }\r\n\r\n get IsBranchVisible() {\r\n return this.Entity.Bank != EnumBanks.CityBank && this.Entity.BankType != EnumBankTypes.ExternalCreditCard \r\n && !this.IsExternalLoanerBank;\r\n }\r\n\r\n get IsCCPostingAccountIDVisible() {\r\n return this.Entity.BankType === EnumBankTypes.ExternalCreditCard;\r\n }\r\n\r\n get IsExternalLoanerBank() {\r\n return this.Entity.BankType == EnumBankTypes.ExternalLoaner;\r\n }\r\n\r\n constructor(A: ServiceBagService, \r\n private endpoint: AccountEndpoint, private companyEndpoint: CompanyEndpoint, private bankPassEndpoint: BankPassEndpoint,\r\n private accountGroupEndpoint: AccountGroupEndpoint, private downloadRequestEndpoint: DownloadRequestEndpoint,\r\n private bookingAccountEndpoint: BookingAccountEndpoint, private creditLimitEndpoint: CreditLimitEndpoint,\r\n private banksListService: BanksListService, private organizationEndpoint: OrganizationEndpoint) {\r\n super(A, 'AccountComponent', Account, State, endpoint, EnumPageDisplayModes.Window);\r\n this.BindHandler('GetBankPassDisplayExpr');\r\n }\r\n\r\n override OnInitComponent() {\r\n this.Do(this.companyEndpoint.Get(this.QueryParams.CompanyID).pipe(\r\n switchMap((response: BaseEntityResponse) => {\r\n this.State.Company = response.Entity;\r\n this.LoadAccountGroups();\r\n this.LoadCreditLimits();\r\n this.LoadAccounts();\r\n this.LoadOrganization(this.State.Company.OrganizationID);\r\n this.CheckPlaidMappings();\r\n\r\n return this.entityLoaded$.pipe(\r\n switchMap(() => of(response))\r\n );\r\n })\r\n ), \r\n false, \r\n () => {\r\n this.LoadBankPasses();\r\n });\r\n }\r\n\r\n protected override OnInitState() {\r\n this.InitStateFromQuery();\r\n }\r\n\r\n protected override OnInitSubtitle(): string {\r\n return this.State.Company?.CompanyFullName;\r\n }\r\n\r\n OnAfterLoadBookingAccounts(bookingAccountCount) {\r\n this.NotifyReloadTitle();\r\n this.CopyBookingAccounts();\r\n\r\n this.State.BookingAccounts = bookingAccountCount;\r\n }\r\n\r\n CopyBookingAccounts() {\r\n if (!this.State.CopyFromAccountID) return;\r\n const params = new BookingAccountListParams();\r\n params.Accounts = [this.State.CopyFromAccountID];\r\n params.IncludeTransactionInfo = true;\r\n\r\n this.Do(this.bookingAccountEndpoint.ListEx(params), false, (response: BaseEntitiesResponse) => {\r\n const bookingAccounts = response.Entities;\r\n bookingAccounts.forEach(item => {\r\n item.EntryID = -1;\r\n item.AccountID = this.Entity.EntryID;\r\n item.BookingAccountCode = '';\r\n });\r\n\r\n this.bookingAccounts.AddRange(bookingAccounts);\r\n this.State.CopyFromAccountID = null;\r\n });\r\n }\r\n\r\n override OnGetHistoryCustom() {\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 override OnGetToolbarSettings() {\r\n return {\r\n IsSupportHistory: true,\r\n } as ToolbarSettings;\r\n }\r\n\r\n InitStateFromQuery() {\r\n if (Object.entries(this.QueryParams).length <= 0) return;\r\n if (this.QueryParams.BookingAccountSubtype) this.State.BookingAccountSubtype = this.QueryParams.BookingAccountSubtype;\r\n if (this.QueryParams.BookingAccountID) this.State.BookingAccountID = +this.QueryParams.BookingAccountID;\r\n if (this.QueryParams.CopyFromAccountID) this.State.CopyFromAccountID = +this.QueryParams.CopyFromAccountID;\r\n if (this.QueryParams.NavBack) this.State.NavBack = true;\r\n }\r\n\r\n override OnEntityInitObjectName() {\r\n return this.Entity != null && !this.IsAddMode ? this.Entity.AccountFullName : '';\r\n }\r\n\r\n override OnInitContextMenus(): ContextMenuElement[] {\r\n if (this.IsAddMode) return undefined;\r\n const bookingAccountsNotExists = this.bookingAccounts && this.bookingAccounts.State.BookingAccounts\r\n && this.bookingAccounts.State.BookingAccounts.length == 0;\r\n const menus: ContextMenuElement[] =\r\n [\r\n {\r\n text: this.RC('btnCopyFromAccount'),\r\n visible: this.Entity.IsActive && bookingAccountsNotExists,\r\n onClick: this.OnCopyFromAccount.bind(this)\r\n },\r\n {\r\n text: this.RC('btnAddSimpleBookingAccountsTemplate'),\r\n visible: this.Entity.IsActive && bookingAccountsNotExists,\r\n onClick: this.OnAddSimpleBookingAccountsTemplate.bind(this)\r\n },\r\n {\r\n text: this.RC('btnAddNormalBookingAccountsTemplate'),\r\n visible: this.Entity.IsActive && bookingAccountsNotExists,\r\n onClick: this.OnAddNormalBookingAccountsTemplate.bind(this)\r\n },\r\n {\r\n text: this.RC('btnAddExtendedBookingAccountsTemplate'),\r\n visible: this.Entity.IsActive && bookingAccountsNotExists,\r\n onClick: this.OnAddExtendedBookingAccountsTemplate.bind(this)\r\n },\r\n {\r\n text: this.RC('btnDownloadUpdatedData'),\r\n visible: this.Entity.IsActive && this.Entity.BankType !== EnumBankTypes.ExternalLoaner \r\n && !(this.State.IsBookingAccountsAdded || this.State.IsAnyBookingAccountDownloadDateChanged)\r\n && !this.Entity.IsManualBalancesEntry,\r\n onClick: () => this.OnDownloadRequestedData()\r\n },\r\n {\r\n text: this.RC('btnUpload'),\r\n visible: this.Entity.IsActive && this.Entity.IsHasAutomaticDeployment,\r\n onClick: this.OnUpload.bind(this)\r\n },\r\n {\r\n text: this.RC('btnTransactionsReport'),\r\n visible: this.Entity.IsActive,\r\n onClick: this.OnGoToTransactions.bind(this)\r\n },\r\n {\r\n text: this.RC('btnBalancesReport'),\r\n visible: this.Entity.IsActive,\r\n onClick: this.OnGoToBalances.bind(this)\r\n },\r\n {\r\n text: this.RC('btnSyncStatus'),\r\n visible: this.Entity.IsActive,\r\n onClick: this.OnGoToSyncStatus.bind(this)\r\n },\r\n {\r\n text: this.RC('lblRecategorize'),\r\n visible: this.Entity.IsActive,\r\n onClick: this.OnRecategorize.bind(this)\r\n },\r\n {\r\n text: this.RC('lblReconcile'),\r\n visible: this.Entity.IsActive,\r\n onClick: this.OnShowDialogRecioncile.bind(this)\r\n },\r\n {\r\n text: this.RC('lblRegenarateJournalEntries'),\r\n visible: this.Entity.IsActive && this.State.Organization && this.State.Organization.IsLicensedForJournalEntries,\r\n onClick: this.OnShowDialogRegenarateJournalEntries.bind(this)\r\n },\r\n {\r\n text: this.RC('btnShowAccountMappings'),\r\n visible: this.SelectedBankPass?.AccessType == EnumBankPassAccessTypes.Plaid \r\n || this.SelectedBankPass?.AccessType == EnumBankPassAccessTypes.PSD,\r\n onClick: this.OnShowAccountMappings.bind(this)\r\n },\r\n {\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 return menus;\r\n }\r\n\r\n OnAddSimpleBookingAccountsTemplate() {\r\n this.bookingAccounts.AddSimpleTemplate();\r\n }\r\n\r\n OnAddNormalBookingAccountsTemplate() {\r\n this.bookingAccounts.AddNormalTemplate();\r\n }\r\n\r\n OnAddExtendedBookingAccountsTemplate() {\r\n this.bookingAccounts.AddExtendedTemplate();\r\n }\r\n\r\n OnGoToTransactions() {\r\n this.Navigate(['/pages/transaction-report'], { \r\n OrganizationID: this.State.Company.OrganizationID, \r\n CompanyID: this.State.Company.EntryID,\r\n AccountID: this.Entity.EntryID \r\n });\r\n }\r\n\r\n OnGoToBalances() {\r\n this.Navigate(['/pages/balance-report'], { \r\n OrganizationID: this.State.Company.OrganizationID, \r\n CompanyID: this.State.Company.EntryID, \r\n AccountID: this.Entity.EntryID \r\n });\r\n }\r\n\r\n OnGoToSyncStatus() {\r\n this.Navigate(['/pages/sync-status'], { \r\n OrganizationID: this.State.Company.OrganizationID, \r\n CompanyID: this.State.Company.EntryID, \r\n AccountID: this.Entity.EntryID \r\n });\r\n }\r\n\r\n OnShowAccountMappings() {\r\n this.A.Navigator.Navigate(\r\n ['/pages/bankpass-accounts-mappings', this.Entity.BankPassID], \r\n {OrganizationID: this.State.Company.OrganizationID}\r\n );\r\n }\r\n\r\n OnUpload() {\r\n this.uploadDialog.OpenDialog();\r\n }\r\n\r\n OnRecategorize() {\r\n this.recategorizeDialog.RecategorizeByAccount(this.Entity.EntryID);\r\n }\r\n\r\n OnShowDialogRecioncile() {\r\n this.reconciliationDialog.ReconcileAccount(this.Entity.EntryID);\r\n }\r\n\r\n OnShowDialogRegenarateJournalEntries() {\r\n if (this.IsCCPostingAccountIDVisible && !this.Entity.CCPostingAccountID) {\r\n this.UI.StopMessage(this.RC('msgCCPostingAccountError'));\r\n return;\r\n }\r\n this.generateJournalEntryDialog.RegenarateJournalEntriesByAccount(this.Entity.EntryID, this.State.Company.OrganizationID);\r\n }\r\n\r\n OnBankChanged(event: any) {\r\n if (!this.IsUIEvent(event)) {\r\n return; \r\n }\r\n if (this.Entity.Bank === EnumBanks.CityBank) this.Entity.Branch = undefined;\r\n\r\n if ((this.DS('LocalBanks') as unknown as any[]).some(b => b.Value === this.Entity.Bank)) \r\n this.Entity.BankType = EnumBankTypes.Local;\r\n else if ((this.DS('ExternalCreditCardBanks') as unknown as any[]).some(b => b.Value === this.Entity.Bank)) \r\n this.Entity.BankType = EnumBankTypes.ExternalCreditCard;\r\n else if ((this.DS('ForeignBanks') as unknown as any[]).some(b => b.Value === this.Entity.Bank)) \r\n this.Entity.BankType = EnumBankTypes.Foreign;\r\n else if ((this.DS('ExternalLoanersBanks') as unknown as any[]).some(b => b.Value === this.Entity.Bank)) \r\n this.Entity.BankType = EnumBankTypes.ExternalLoaner;\r\n else if ((this.DS('CCProcessors') as unknown as any[]).some(b => b.Value === this.Entity.Bank)) \r\n this.Entity.BankType = EnumBankTypes.CCProcessor;\r\n\r\n this.Entity.BankPassID = undefined;\r\n this.InitBankType();\r\n\r\n if (this.Entity.BankType === EnumBankTypes.ExternalCreditCard && this.Entity.Bank!==EnumBanks.VisaCal) {\r\n const digits = this.Entity.Bank === EnumBanks.Amex || this.Entity.Bank === EnumBanks.Isracard ? 6 : 4;\r\n this.Entity.AccountNumber = this.Entity.AccountNumber?.substr(0, digits);\r\n }\r\n this.LoadBankPasses();\r\n }\r\n\r\n OnIsManualBalancesEntryChanged(event: any) {\r\n if (!this.IsUIEvent(event)) {\r\n return; \r\n }\r\n\r\n this.messageBoxDialog.Type = EnumMessageBoxTypes.YesNo;\r\n this.messageBoxDialog.Prompt = this.RC('msgIsManualBalancesConfirmation');\r\n\r\n if (event.value) {\r\n this.messageBoxDialog.ShowDialogShort(() => {\r\n this.Entity.BankPassID = undefined;\r\n }\r\n , () => {\r\n this.Entity.IsManualBalancesEntry = false;\r\n });\r\n }\r\n }\r\n\r\n LoadBankPasses() {\r\n if (!this.Entity.Bank) {\r\n this.DataSources['BankPasses'] = undefined; return; \r\n }\r\n const params = new BankPassListParams();\r\n params.OrganizationID = this.State.Company.OrganizationID;\r\n params.CompanyID = this.State.Company.EntryID;\r\n params.Bank = this.Entity.Bank;\r\n params.LoadGlobal = true;\r\n\r\n this.Do(this.bankPassEndpoint.ListEx(params, undefined), false, (data) => {\r\n if (this.IsAddMode) {\r\n const newBankPass = new BankPassView();\r\n newBankPass.EntryID = -1;\r\n newBankPass.OrganizationID = this.State.Company.OrganizationID;\r\n newBankPass.Bank = this.Entity.Bank;\r\n newBankPass.IsActive = true;\r\n newBankPass.IsTemporary = false;\r\n newBankPass.IsConfirmedReadOnly = false;\r\n newBankPass.AccessType = EnumBankPassAccessTypes.Scrapping;\r\n newBankPass.AutoDiscoverMode = EnumBankPassAutoDiscoverModes.None;\r\n data.Entities.unshift(newBankPass);\r\n }\r\n\r\n this.DataSources['BankPasses'] = data.Entities;\r\n });\r\n }\r\n\r\n LoadAccountGroups() {\r\n const params = new AccountGroupListParams();\r\n params.OrganizationID = this.State.Company.OrganizationID;\r\n params.LoadActive = true;\r\n\r\n this.DataSources['AccountGroups'] = new DataSourceCustomAction((options: DataLoadOptions) => \r\n this.accountGroupEndpoint.ListEx(params, options));\r\n }\r\n\r\n LoadCreditLimits() {\r\n if (this.IsAddMode) {\r\n return; \r\n }\r\n const params = new CreditLimitsParams();\r\n params.OrganizationID = this.State.Company.OrganizationID;\r\n params.Accounts = this.EntityEntryID? [this.EntityEntryID] : [];\r\n\r\n this.Do(this.creditLimitEndpoint.ListEx(params, undefined), false, (data) => {\r\n this.State.CreditLimits = data.Entities as CreditLimitView[];\r\n });\r\n }\r\n\r\n override OnEntityNew() {\r\n this.Entity.IsActive = true;\r\n this.Entity.CompanyID = this.QueryParams.CompanyID;\r\n this.Entity.DownloadStartDate = Globals.ThisMonthFirstDate;\r\n this.OnDownloadStartDateChanged();\r\n }\r\n\r\n override OnEntityLoaded() {\r\n this.entityLoaded$.next();\r\n\r\n this.Do(this.endpoint.IsBalancesExists(this.Entity.EntryID), false, (response: BaseDataResponse) => {\r\n this.State.IsBalancesExists = response.Data;\r\n this.OnDownloadStartDateChanged();\r\n });\r\n if (this.State.CopyFromAccountID) this.Entity.AccountNumber = '';\r\n this.InitBankType();\r\n }\r\n\r\n OnDownloadStartDateChanged() {\r\n if (!this.State.IsBalancesExists) this.State.DefaultDownloadStartDate = this.Entity.DownloadStartDate;\r\n }\r\n\r\n OnBookingAccountDownloadDateChanged(changedCount: number) {\r\n this.State.IsAnyBookingAccountDownloadDateChanged = changedCount > 0;\r\n }\r\n\r\n override OnDoSave() {\r\n const gridValidations = new Array>();\r\n if (this.bookingAccounts) {\r\n gridValidations.push(this.bookingAccounts.grid.G.ValidateGrid()); \r\n }\r\n if (this.creditLimits) {\r\n gridValidations.push(this.creditLimits.G.ValidateGrid()); \r\n }\r\n\r\n Promise.all(gridValidations).then((validationResults: []) => {\r\n if (validationResults.filter(r => r === false).length === 0) {\r\n const params = new AccountSaveParams();\r\n params.Account = this.Entity;\r\n if (this.SelectedBankPass && this.SelectedBankPass.EntryID < 0) {\r\n params.BankPass = this.SelectedBankPass; \r\n } else {\r\n params.BankPass = undefined; \r\n }\r\n if (this.bookingAccounts) {\r\n this.State.IsBookingAccountsAdded = this.bookingAccounts.State.BookingAccounts.some(x => !x.EntryID);\r\n this.bookingAccounts.AcceptChanges();\r\n params.BookingAccountEntities = this.bookingAccounts.State.BookingAccounts.map(item => {\r\n if (!item.CCPayDay) {\r\n delete item.CCPayDay; \r\n } return item; \r\n });\r\n params.DeleteBookingAccountEntryIDs = this.bookingAccounts.grid.DeletedBookingAccountEntryIDs;\r\n }\r\n if (this.creditLimits) {\r\n this.creditLimits.G.AcceptChanges();\r\n params.CreditLimitEntities = this.State.CreditLimits;\r\n params.DeleteCreditLimitEntryIDs = this.creditLimits.DeletedCreditLimitEntryIDs;\r\n }\r\n\r\n this.Do(this.endpoint.SaveAccountDetails(params), true, (response: BaseEntityResponse) => {\r\n this.Entity = SysGlobals.CurrentEntity = response.Entity;\r\n this.RefreshEntityOriginal();\r\n this.SubscribeOnEntityChanges();\r\n if (this.bookingAccounts) this.bookingAccounts.ReloadGrid();\r\n if (this.creditLimits) this.creditLimits.DeletedCreditLimitEntryIDs = [];\r\n this.LoadCreditLimits();\r\n this.ReflectEntitySaved();\r\n });\r\n }\r\n });\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 === BankPass) {\r\n this.LoadBankPasses();\r\n this.Entity.BankPassID = ExternalEntity.EntryID;\r\n }\r\n }\r\n\r\n override OnEntitySaved() {\r\n if ((this.State.IsBookingAccountsAdded || this.State.IsAnyBookingAccountDownloadDateChanged)\r\n && this.Entity.BankGroup != EnumBankGroups.ExternalLoaners\r\n && !this.Entity.IsManualBalancesEntry) {\r\n this.messageBoxDialog.Type = EnumMessageBoxTypes.YesNo;\r\n this.messageBoxDialog.Title = this.RC('btnDownloadUpdatedData');\r\n this.messageBoxDialog.Prompt = this.RC('msgAccountDownloadRequestQuestion');\r\n const callback = () => this.ClosePage();\r\n this.messageBoxDialog.ShowDialogShort(() => this.OnDownloadRequestedData(callback), callback);\r\n return;\r\n }\r\n this.NavigateBack();\r\n }\r\n\r\n override ClosePage() {\r\n if (this.State.NavBack) {\r\n this.NavigateBack();\r\n } else {\r\n super.ClosePage();\r\n }\r\n }\r\n\r\n OnDownloadRequestedData(callback?: () => void) {\r\n this.Do(this.downloadRequestEndpoint.DownloadAccountUpdatedData(this.Entity.EntryID), true, (data) => {\r\n if (data.Entity) {\r\n this.otpInputDialog.downloadRequest = data.Entity;\r\n this.otpInputDialog.Message = data.ResponseMessage;\r\n this.otpInputDialog.ShowDialogShort(() => callback && callback(), () => callback && callback());\r\n return;\r\n }\r\n callback && callback();\r\n });\r\n }\r\n\r\n OnCopyFromAccount() {\r\n this.accountActionDialog.ShowDialogShort((state: any) => {\r\n this.Do(this.endpoint.Get(state.SelectedAccountID), false, (response: BaseEntityResponse) => {\r\n this.StartNewEntity();\r\n this.CopyAccount(response.Entity);\r\n this.bookingAccounts = null;\r\n\r\n this.OnSave();\r\n });\r\n });\r\n }\r\n\r\n CopyAccount(account: Account) {\r\n Utils.CopyProperties(Account, account, this.Entity);\r\n this.State.CopyFromAccountID = account.EntryID;\r\n\r\n this.Entity.EntryID = -1;\r\n this.Entity.Name = `${account.Name} (${this.RC('lblCopy')})`;\r\n this.Entity.CreatedBy = this.Entity.CreatedDate = null;\r\n }\r\n\r\n GetBankPassDisplayExpr(e: any) {\r\n return e && (e.EntryID === -1 && !e.UserName ? this.RC('lblAddNewBankPass') : (e.FullName ? e.FullName : e.UserName));\r\n }\r\n\r\n IsSaveDisabled() {\r\n if (this.SelectedBankPass && this.SelectedBankPass.EntryID < 0 && \r\n !(this.SelectedBankPass.IsConfirmedReadOnly || \r\n !this.SelectedBankPass.IsActive || \r\n this.SelectedBankPass.IsTemporary ||\r\n this.SelectedBankPass.AccessType !== EnumBankPassAccessTypes.Scrapping\r\n )) {\r\n return true; \r\n }\r\n return false;\r\n }\r\n\r\n private LoadOrganization(organizationID: number) {\r\n this.Do(this.organizationEndpoint.Get(organizationID), false, (response) => {\r\n this.State.Organization = response.Entity;\r\n this.DataSources['Banks'] = this.banksListService\r\n .GetGroupedDSFromList(this.DS('AllowedBanks') as unknown as GenericListEntity[], this.State.Organization);\r\n\r\n this.NotifyReloadTitle();\r\n });\r\n }\r\n\r\n OnBookingAccountRemoved() {\r\n this.State.BookingAccounts--;\r\n this.SetDirty();\r\n }\r\n\r\n OnBookingAccountAdded() {\r\n this.State.IsBookingAccountsAdded = true;\r\n this.State.BookingAccounts++;\r\n this.SetDirty();\r\n }\r\n\r\n private InitBankType() {\r\n if (this.State.BookingAccountSubtype)\r\n return;\r\n\r\n if (this.Entity.BankType === EnumBankTypes.ExternalCreditCard) {\r\n this.State.BookingAccountSubtype = EnumBookingAccountSubtypes.CreditCard;\r\n } else {\r\n this.State.BookingAccountSubtype = EnumBookingAccountSubtypes.Current;\r\n }\r\n }\r\n\r\n OnSelectedBankPassChanged(bankPass: BankPassView) {\r\n const selectedBankPass = this.DataSources['BankPasses'].find(x => x.EntryID === bankPass.EntryID);\r\n selectedBankPass.UserName = bankPass.UserName;\r\n this.bankPassSelectBox && this.bankPassSelectBox.instance && this.bankPassSelectBox.instance.repaint();\r\n }\r\n\r\n LoadAccounts() {\r\n const params = new AccountListParams();\r\n params.OrganizationID = this.State.Company.OrganizationID;\r\n params.Companies = this.State.Company ? [this.State.Company.EntryID] : [];\r\n\r\n this.DataSources['Accounts'] = new DataSourceCustomAction((options: DataLoadOptions) => \r\n this.endpoint.ListEx(params, options).pipe(map(response => {\r\n return {\r\n ...response,\r\n Entities: response.Entities.filter(e => e.BankType === EnumBankTypes.Local)\r\n };\r\n })));\r\n }\r\n\r\n OnBankPassDropDownOpened() {\r\n const newBankPassOption = this.DataSources['BankPasses']?.find(bp => bp.EntryID === -1);\r\n\r\n if(newBankPassOption) {\r\n newBankPassOption.disabled = this.Entity.Bank == EnumBanks.Plaid;\r\n }\r\n }\r\n\r\n validateBankPass = () => {\r\n if (this.Entity.Bank == EnumBanks.Plaid) return true;\r\n\r\n return this.Entity.BankPassID == -1 || this.Entity.BankPassID > 0;\r\n };\r\n\r\n private CheckPlaidMappings() {\r\n if(this.EntityEntryID > 0) {\r\n this.Do(\r\n this.endpoint.HasPlaidBookingAccounts(this.EntityEntryID),\r\n false,\r\n (response) => {\r\n this.State.HasPlaidBookingAccounts = response.Data;\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 {{ GetBankPassDisplayExpr(item)}}\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\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 { 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 { Account } from '@kraken/_proxy/entities/account.entity';\r\n\r\nclass State extends BaseState {\r\n ShowActiveOnly: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-account-grid',\r\n templateUrl: './account-grid.component.html'\r\n})\r\nexport class AccountGridComponent extends BaseGridComponent {\r\n @Input() AccountID: number;\r\n @Input() ShowCompany: boolean;\r\n @Input() IsSelectionMode = false;\r\n @Input() SelectedRows: number[];\r\n @Input() LimitedHeight;\r\n @Input() Embedded: boolean = false;\r\n @Input() ShowAccountGroupColumn: boolean = false;\r\n @Output() OnSelectionChanged = new EventEmitter();\r\n @Output() OnLoadActive = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'AccountGridComponent', Account, State);\r\n }\r\n\r\n protected override OnInitState() {\r\n this.State.ShowActiveOnly = true;\r\n this.OnLoadActive.emit(this.State.ShowActiveOnly);\r\n }\r\n\r\n OnNavigate(e) {\r\n if (this.IsSelectionMode) {\r\n this.OnSelectionChanged.emit(e.data.EntryID);\r\n return;\r\n }\r\n this.Navigate(['/pages/account', e.data.EntryID], { CompanyID: e.data.CompanyID, NavBack: this.Embedded });\r\n }\r\n\r\n\r\n OnGridSelectionChanged(e) {\r\n this.OnSelectionChanged.emit();\r\n }\r\n\r\n OnToolbarPreparing(e) {\r\n if(this.Embedded) {\r\n return;\r\n }\r\n\r\n e.toolbarOptions.items.unshift({\r\n location: 'after',\r\n widget: 'dxCheckBox',\r\n isCustom: true,\r\n options: {\r\n text: this.RC('lblShowActiveOnly'),\r\n value: this.State.ShowActiveOnly,\r\n onValueChanged: (e) => {\r\n this.State.ShowActiveOnly = e.value;\r\n this.OnLoadActive.emit(this.State.ShowActiveOnly);\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\";","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Account } from '../../../_proxy/entities/account.entity';\r\nimport { AccountEndpoint } from '../../../_proxy/endpoints/account.endpoint';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { AccountListParams } from '../../../_proxy/params/accountlist.param';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { tap } from 'rxjs';\r\n\r\nclass State extends BaseState {\r\n LoadActive: boolean;\r\n ShowAccountGroupColumn: boolean = false;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-account-list',\r\n templateUrl: './account-list.component.html',\r\n styleUrls: ['./account-list.component.scss']\r\n})\r\nexport class AccountListComponent extends BaseComponent {\r\n private _companyID: number;\r\n @Input() set CompanyID(value: number) {\r\n this._companyID = value;\r\n this.LoadDataSource();\r\n }\r\n\r\n private _organizationID: number;\r\n @Input() set OrganizationID(value: number) {\r\n this._organizationID = value;\r\n }\r\n get OrganizationID() {\r\n return this._organizationID;\r\n }\r\n\r\n\r\n @Input() HideAddButton: boolean = false;\r\n @Input() IsSelectionMode: boolean;\r\n @Input() AccountID: number;\r\n @Input() Page: BasePageComponent;\r\n @Output() OnSelectionChanged = new EventEmitter();\r\n @Output() OnUpdateCount = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService, private endpoint: AccountEndpoint) {\r\n super(A, 'AccountListComponent', State);\r\n }\r\n\r\n protected override OnInitState(): void {\r\n this.State.LoadActive = true;\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 == Account) this.LoadDataSource();\r\n }\r\n\r\n public LoadDataSource() {\r\n if (!this._companyID && !this._organizationID) return;\r\n const params = new AccountListParams();\r\n params.OrganizationID = this._organizationID;\r\n params.Companies = this._companyID ? [this._companyID] : [];\r\n params.LoadActive = this.State.LoadActive;\r\n\r\n this.DataSources['Accounts'] = new DataSourceCustomAction(\r\n (options: DataLoadOptions) =>\r\n this.endpoint.ListEx(params, options)\r\n .pipe(\r\n tap(\r\n (response) => {\r\n this.State.ShowAccountGroupColumn = response.Entities.some(e => e.AccountGroupID > 0);\r\n }\r\n )\r\n ),\r\n null,\r\n (data) => this.OnUpdateCount.emit(data.length)\r\n );\r\n }\r\n\r\n GetLinkParams() {\r\n return { CompanyID: this._companyID };\r\n }\r\n\r\n OnLoadActive(value: boolean) {\r\n this.State.LoadActive = value;\r\n this.LoadDataSource();\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\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 IsSuperAdmin: boolean; \r\n public IsActive: boolean; \r\n\tpublic CreatedBy: number;\r\n\tpublic CreatedDate: Date;\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { AdminView } from './../views/admin.view';\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 public ListEx(LoadActive: boolean, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'ListEx', {LoadActive: LoadActive, options:options?.GetLoadOptions()} );\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 \"../../_proxy/entities/admin.entity\";\r\nimport { AdminEndpoint } from \"../../_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 OnEntityNew() {\r\n this.Entity.IsSuperAdmin = false;\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 \\r\\n \\r\\n \\r\\n \\r\\n\";","import { Component, EventEmitter, Output } 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 '@kraken/_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 @Output() ShowActiveChanged = new EventEmitter();\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\r\n OnToolbarPreparing(e) {\r\n e.toolbarOptions.items.unshift({\r\n location: 'after',\r\n widget: 'dxCheckBox',\r\n isCustom: true,\r\n options: {\r\n text: this.RC('lblShowActiveOnly'),\r\n value: false,\r\n onValueChanged: (e) => {\r\n this.ShowActiveChanged.emit(e.value);\r\n }\r\n }\r\n });\r\n }\r\n}","export default \"\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseParamsFilter } from './../entities/baseparamsfilter.entity';\r\nexport class ForecastMapperListParams extends BaseParamsFilter {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ForecastMapperListParams';\r\n }\r\n \r\n\t\r\n}\r\n\r\n\r\n","import {BehaviorSubject, ReplaySubject} from 'rxjs';\r\nimport {Injectable} from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class OrganizationService {\r\n private _organizationChangedSubject = new ReplaySubject(1);\r\n readonly Organization$ = this._organizationChangedSubject.asObservable();\r\n\r\n ChangeOrganization(OrganizationID: number) {\r\n this._organizationChangedSubject.next(OrganizationID);\r\n }\r\n}\r\n","import { BusinessPartnerListParams } from '@kraken/_proxy/params/businesspartnerlist.param';\r\nimport { ListTransactionCategoriesParams } from '@kraken/_proxy/params/listtransactioncategories.param';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { EnumBanks, EnumBookingAccountSubtypes, EnumSide } from '@kraken/_proxy/enums';\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { BookingAccountListParams } from '@kraken/_proxy/params/bookingaccountlist.param';\r\nimport { AccountListParams } from '@kraken/_proxy/params/accountlist.param';\r\nimport { ForecastMapperListParams } from '@kraken/_proxy/params/forecastmapperlist.param';\r\nimport { OrganizationService } from '@kraken/services/organization.service';\r\nimport { Subscription } from 'rxjs';\r\nimport { EnumFilterPanelActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { CompanyListParams } from '@kraken/_proxy/params/companylist.param';\r\nimport { Globals } from '@kraken/_globals';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { SelectorSettings } from '../selectors/base-selector.component';\r\nimport { FilterService } from '@kraken/services/filter.service';\r\nimport { CompanyGlobalService } from '@kraken/services/company-global.service';\r\nimport { AccessService } from '@kraken/services/access.service';\r\nimport { DateHelpers } from '../../../../src/core/helpers/DateHelpers';\r\n\r\nexport class FilterSettings {\r\n Company?: SelectorSettings = new SelectorSettings();\r\n Account?: SelectorSettings = new SelectorSettings();\r\n BookingAccount?: SelectorSettings = new SelectorSettings();\r\n Bank?: SelectorSettings = new SelectorSettings();\r\n BookingAccountSubtype?: SelectorSettings = new SelectorSettings();\r\n CurrencyFilter?: SelectorSettings = new SelectorSettings();\r\n Currency?: SelectorSettings = new SelectorSettings();\r\n AccountGroup?: SelectorSettings = new SelectorSettings();\r\n Category?: SelectorSettings = new SelectorSettings();\r\n Scenario?: SelectorSettings = new SelectorSettings();\r\n ProbabilityLevel?: SelectorSettings = new SelectorSettings();\r\n Side?: SelectorSettings = new SelectorSettings();\r\n BusinessPartner?: SelectorSettings = new SelectorSettings();\r\n TransactionCategory?: SelectorSettings = new SelectorSettings();\r\n ForecastMapper?: SelectorSettings = new SelectorSettings();\r\n CashflowCategory?= new SelectorSettings<{ Companies: number[]; OrganizationID: number; }>();\r\n CashflowDataSource?= new SelectorSettings<{ Companies: number[]; dynamicOnly?: boolean; OrganizationID: number; }>();\r\n\r\n IsDateVisible?: boolean = false;\r\n IsDatesVisible?: boolean = false;\r\n IsTimeVisible?: boolean = false;\r\n IsAmountsVisible?: boolean = false;\r\n\r\n MaxReportDate?: Date;\r\n MinReportDate?: Date;\r\n\r\n IsForceGeneralSectionVisible?: boolean = false;\r\n IsCustomGeneralSettingsOnly?: boolean = false;\r\n IsForceOptionsSectionVisible?: boolean = false;\r\n IsCustomOptionsSettings?: boolean = false;\r\n\r\n IsLoadActiveCashflow?: boolean = false;\r\n IsTransactionBookingAccountsSubtypes?: boolean = false;\r\n}\r\n\r\nexport class FilterValues {\r\n // OrganizationID is used when report is navigated with QueryParams and not to change Global OrganizationID\r\n OrganizationID: number;\r\n\r\n Company: number | number[];\r\n Account: number | number[];\r\n BookingAccount: number | number[];\r\n Bank: EnumBanks | EnumBanks[];\r\n BookingAccountSubtype: EnumBookingAccountSubtypes | EnumBookingAccountSubtypes[];\r\n CurrencyFilter: string | string[];\r\n Currency: string | string[];\r\n AccountGroup: number | number[];\r\n Category: number | number[];\r\n TransactionCategory: number | number[];\r\n CashflowCategory: string | string[];\r\n CashflowDataSource: string | string[];\r\n ForecastMapper: number | string | (number | string)[];\r\n Scenario: number | number[];\r\n ProbabilityLevel: number | number[];\r\n Side: EnumSide | EnumSide[];\r\n BusinessPartner: number | number[];\r\n\r\n Date: Date;\r\n DateFrom: Date;\r\n DateTo: Date;\r\n AmountFrom: number;\r\n AmountTo: number;\r\n\r\n IsReady: boolean;\r\n}\r\n\r\nexport enum EnumFilterSelectors {\r\n Company = 'Company',\r\n Account = 'Account',\r\n BookingAccount = 'BookingAccount',\r\n AccountGroup = 'AccountGroup',\r\n BookingAccountSubtype = 'BookingAccountSubtype',\r\n Bank = 'Bank',\r\n CurrencyFilter = 'CurrencyFilter',\r\n Scenario = 'Scenario',\r\n ProbabilityLevel = 'ProbabilityLevel',\r\n Category = 'Category',\r\n TransactionCategory = 'TransactionCategory',\r\n ForecastMapper = 'ForecastMapper',\r\n BusinessPartner = 'BusinessPartner',\r\n CashflowCategory = 'CashflowCategory',\r\n CashflowDataSource = 'CashflowDataSource'\r\n}\r\n\r\nexport class FilterState extends BaseState {\r\n IsReady: boolean;\r\n GlobalCompanyID: number;\r\n GlobalOrganizationID: number;\r\n\r\n emmiter = new EventEmitter();\r\n\r\n constructor() {\r\n super();\r\n return new Proxy(this, {\r\n set(target, prop, value) {\r\n target[prop] = value;\r\n target.emmiter.emit(target);\r\n return true;\r\n }\r\n });\r\n }\r\n}\r\n\r\n@Component({\r\n selector: 'app-filter',\r\n styleUrls: ['filter.component.scss'],\r\n templateUrl: './filter.component.html'\r\n})\r\nexport class FilterComponent extends BaseComponent {\r\n\r\n @Input() FilterSettings: FilterSettings;\r\n @Input() FilterValues: FilterValues;\r\n @Input() Component: BaseComponent;\r\n\r\n get OrganizationID() { return this.FilterValues?.OrganizationID; }\r\n\r\n @Output() FilterValuesChange = new EventEmitter();\r\n @Output() FilterStateChange = new EventEmitter();\r\n @Output() FiltersReady = new EventEmitter();\r\n @Output() FilterCompanyChange = new EventEmitter();\r\n\r\n private _subscriptions: Subscription[] = [];\r\n\r\n constructor(A: ServiceBagService,\r\n private organizationService: OrganizationService,\r\n private filterService: FilterService,\r\n private companyGlobalService: CompanyGlobalService,\r\n private accessService: AccessService) {\r\n super(A, 'FilterComponent', FilterState);\r\n this.State.emmiter.subscribe((value: any) => this.FilterStateChange.emit(value));\r\n }\r\n\r\n override OnInitComponent() {\r\n this.InitSelectGlobalOrganization();\r\n this.InitSelectGlobalCompany();\r\n\r\n this.InitChangeIsReady();\r\n\r\n this._subscriptions.push(this.A.SysEvents.FilterPanel.subscribe((action) => {\r\n\r\n if (action === EnumFilterPanelActions.Clear) {\r\n this.filterService.Clear(this.Component.ComponentName);\r\n }\r\n\r\n }));\r\n\r\n this.ReadQueryParams();\r\n\r\n if (this.FilterSettings?.Account?.IsVisible) {\r\n const parentParams = this.FilterSettings.Account.Params;\r\n\r\n this.FilterSettings.Account.Params = () => {\r\n let params = typeof (parentParams) === 'function' ? parentParams() : Utils.CloneObject(parentParams);\r\n\r\n if (!params) { params = new AccountListParams(); }\r\n if (!params.Companies?.length) { params.Companies = this.GetArray(this.FilterValues.Company); }\r\n if (!params.Banks?.length) { params.Banks = this.GetArray(this.FilterValues.Bank); }\r\n if (!params.BookingAccountsSubtypes?.length) { params.BookingAccountsSubtypes = this.GetArray(this.FilterValues.BookingAccountSubtype); }\r\n if (!params.AccountGroups?.length) { params.AccountGroups = this.GetArray(this.FilterValues.AccountGroup); }\r\n if (!Boolean(params.IsActiveCashFlow)) { params.IsActiveCashFlow = this.FilterSettings.IsLoadActiveCashflow; }\r\n params.LoadActive = true;\r\n\r\n return params;\r\n };\r\n }\r\n\r\n if (this.FilterSettings?.BookingAccount?.IsVisible) {\r\n const parentParams = this.FilterSettings.BookingAccount.Params;\r\n\r\n this.FilterSettings.BookingAccount.Params = () => {\r\n let params = typeof (parentParams) === 'function' ? parentParams() : Utils.CloneObject(parentParams);;\r\n\r\n if (!params) { params = new BookingAccountListParams(); }\r\n if (!params.Banks?.length) { params.Banks = this.GetArray(this.FilterValues.Bank); }\r\n if (!params.Subtypes?.length) { params.Subtypes = this.GetArray(this.FilterValues.BookingAccountSubtype); }\r\n if (!params.AccountGroups?.length) { params.AccountGroups = this.GetArray(this.FilterValues.AccountGroup); }\r\n if (!params.CurrenciesFilter?.length) { params.CurrenciesFilter = this.GetArray(this.FilterValues.CurrencyFilter); }\r\n if (!Boolean(params.IsActiveCashFlow)) { params.IsActiveCashFlow = this.FilterSettings.IsLoadActiveCashflow; }\r\n\r\n return params;\r\n };\r\n }\r\n\r\n if (this.FilterSettings?.TransactionCategory?.IsVisible) {\r\n const parentParams = this.FilterSettings.TransactionCategory.Params;\r\n\r\n this.FilterSettings.TransactionCategory.Params = () => {\r\n let params = typeof (parentParams) === 'function' ? parentParams() : Utils.CloneObject(parentParams);\r\n\r\n if (!params) { params = new ListTransactionCategoriesParams(); }\r\n if (!params.Companies?.length) { params.Companies = this.GetArray(this.FilterValues.Company); }\r\n\r\n return params;\r\n };\r\n }\r\n\r\n if (this.FilterSettings?.CashflowCategory?.IsVisible) {\r\n this.FilterSettings.CashflowCategory.Params = () => {\r\n return {\r\n Companies: Array.isArray(this.FilterValues.Company) ? this.FilterValues.Company : [this.FilterValues.Company],\r\n OrganizationID: this.FilterValues.OrganizationID,\r\n };\r\n };\r\n }\r\n\r\n if (this.FilterSettings?.CashflowDataSource?.IsVisible) {\r\n const parentParams = this.FilterSettings.CashflowDataSource.Params;\r\n\r\n this.FilterSettings.CashflowDataSource.Params = () => {\r\n const Companies = Array.isArray(this.FilterValues.Company) ? this.FilterValues.Company : [this.FilterValues.Company];\r\n const params = typeof (parentParams) === 'function' ? parentParams() : parentParams;\r\n\r\n return {\r\n Companies,\r\n OrganizationID: this.FilterValues.OrganizationID,\r\n ...params\r\n };\r\n };\r\n }\r\n\r\n if (this.FilterSettings?.ForecastMapper?.IsVisible) {\r\n const parentParams = this.FilterSettings.ForecastMapper.Params;\r\n\r\n this.FilterSettings.ForecastMapper.Params = () => {\r\n let params = typeof (parentParams) === 'function' ? parentParams() : Utils.CloneObject(parentParams);;\r\n\r\n if (!params) { params = new ForecastMapperListParams(); }\r\n if (!params.Companies?.length) { params.Companies = this.GetArray(this.FilterValues.Company); }\r\n\r\n return params;\r\n };\r\n }\r\n\r\n if (this.FilterSettings?.BusinessPartner?.IsVisible) {\r\n const parentParams = this.FilterSettings.BusinessPartner.Params;\r\n\r\n this.FilterSettings.BusinessPartner.Params = () => {\r\n let params = typeof (parentParams) === 'function' ? parentParams() : Utils.CloneObject(parentParams);;\r\n\r\n if (!params) { params = new BusinessPartnerListParams(); }\r\n if (!params.CompanyID) { params.CompanyID = this.GetValue(this.FilterValues.Company); }\r\n\r\n return params;\r\n };\r\n }\r\n }\r\n\r\n OnFiltersReady() {\r\n this.FiltersReady.emit({ ...this.FilterValues });\r\n this.A.SysEvents.FilterPanelAction(EnumFilterPanelActions.Ready);\r\n }\r\n\r\n //#region Values changed\r\n\r\n OnFilterValuesChanged() {\r\n this.FilterValuesChange.emit({ ...this.FilterValues });\r\n }\r\n\r\n OnOrganzationChanged() {\r\n this.SetEmpty(EnumFilterSelectors.Company);\r\n this.SetEmpty(EnumFilterSelectors.Account);\r\n this.SetEmpty(EnumFilterSelectors.BookingAccount);\r\n this.SetEmpty(EnumFilterSelectors.BookingAccountSubtype);\r\n this.SetEmpty(EnumFilterSelectors.AccountGroup);\r\n this.SetEmpty(EnumFilterSelectors.Bank);\r\n this.SetEmpty(EnumFilterSelectors.CurrencyFilter);\r\n this.SetEmpty(EnumFilterSelectors.Scenario);\r\n this.SetEmpty(EnumFilterSelectors.ProbabilityLevel);\r\n this.SetEmpty(EnumFilterSelectors.Category);\r\n this.SetEmpty(EnumFilterSelectors.TransactionCategory);\r\n this.SetEmpty(EnumFilterSelectors.ForecastMapper);\r\n this.SetEmpty(EnumFilterSelectors.BusinessPartner);\r\n }\r\n\r\n\r\n OnCompanyChanged(company: number | number[]) {\r\n this.SetEmpty(EnumFilterSelectors.TransactionCategory);\r\n this.SetEmpty(EnumFilterSelectors.ForecastMapper);\r\n this.SetEmpty(EnumFilterSelectors.BusinessPartner);\r\n this.SetEmpty(EnumFilterSelectors.CashflowCategory);\r\n this.SetEmpty(EnumFilterSelectors.CashflowDataSource);\r\n\r\n this.filterService.ReloadSource(this.Component.ComponentName, EnumFilterSelectors.TransactionCategory);\r\n this.filterService.ReloadSource(this.Component.ComponentName, EnumFilterSelectors.ForecastMapper);\r\n this.filterService.ReloadSource(this.Component.ComponentName, EnumFilterSelectors.BusinessPartner);\r\n this.filterService.ReloadSource(this.Component.ComponentName, EnumFilterSelectors.CashflowCategory);\r\n this.filterService.ReloadSource(this.Component.ComponentName, EnumFilterSelectors.CashflowDataSource);\r\n this.FilterCompanyChange.emit();\r\n }\r\n\r\n OnBankChanged(bank: EnumBanks | EnumBanks[]) {\r\n if (!this.State.IsReady) { return; }\r\n\r\n this.SetEmpty(EnumFilterSelectors.Account);\r\n this.SetEmpty(EnumFilterSelectors.BookingAccount);\r\n }\r\n\r\n OnBookingAccountSubtypeChanged(bookingAccountSubtype: EnumBookingAccountSubtypes | EnumBookingAccountSubtypes[]) {\r\n if (!this.State.IsReady) { return; }\r\n\r\n this.SetEmpty(EnumFilterSelectors.Account);\r\n this.SetEmpty(EnumFilterSelectors.BookingAccount);\r\n }\r\n\r\n OnCurrencyFilterChanged(currency: string | string[]) {\r\n if (!this.State.IsReady) { return; }\r\n\r\n this.SetEmpty(EnumFilterSelectors.BookingAccount);\r\n }\r\n\r\n OnAccountGroupChanged(bookingAccount: number | number[]) {\r\n if (!this.State.IsReady) { return; }\r\n\r\n this.SetEmpty(EnumFilterSelectors.Account);\r\n this.SetEmpty(EnumFilterSelectors.BookingAccount);\r\n }\r\n\r\n OnDateFromChange(dateFrom) {\r\n if (!dateFrom?.value) return;\r\n if (!this.FilterSettings.IsTimeVisible) {\r\n this.FilterValues.DateFrom = new Date(dateFrom.value.setHours(0, 0, 0));\r\n }\r\n }\r\n\r\n OnDateToChange(dateTo) {\r\n if (!dateTo?.value) return;\r\n if (!this.FilterSettings.IsTimeVisible) {\r\n this.FilterValues.DateTo = new Date(dateTo.value.setHours(23, 59, 59, 999));\r\n }\r\n }\r\n\r\n OnDateFromOpened(e) {\r\n (!this.FilterValues.DateFrom) && (e.component.option('value', DateHelpers.ToDateOnly(new Date())));\r\n }\r\n\r\n OnDateToOpened(e) {\r\n if (!this.FilterValues.DateTo) {\r\n const endOfDay = new Date();\r\n endOfDay.setHours(23, 59, 59);\r\n e.component.option('value', endOfDay);\r\n }\r\n }\r\n\r\n OnDateSelected(e) {\r\n if (!e.itemData) { return; }\r\n this.FilterValues.Date = e.itemData.Date;\r\n }\r\n\r\n OnDateRangeSelected(e) {\r\n if (!e.itemData) { return; }\r\n this.FilterValues.DateFrom = e.itemData.DateFrom;\r\n this.FilterValues.DateTo = e.itemData.DateTo;\r\n }\r\n\r\n OnAmountFromChanged() {\r\n if (this.FilterValues.AmountFrom && this.FilterValues.AmountFrom > this.FilterValues.AmountTo) {\r\n this.FilterValues.AmountTo = this.FilterValues.AmountFrom;\r\n }\r\n }\r\n\r\n OnAmountToChanged() {\r\n if (this.FilterValues.AmountTo && this.FilterValues.AmountFrom > this.FilterValues.AmountTo) {\r\n this.FilterValues.AmountFrom = this.FilterValues.AmountTo;\r\n }\r\n }\r\n\r\n //#endregion\r\n\r\n IsGeneralSectionVisible() {\r\n return this.FilterSettings?.Company?.IsVisible ||\r\n this.FilterSettings?.Account?.IsVisible ||\r\n this.FilterSettings?.CurrencyFilter?.IsVisible ||\r\n this.FilterSettings?.BookingAccountSubtype?.IsVisible ||\r\n this.FilterSettings?.Bank?.IsVisible ||\r\n this.FilterSettings?.BookingAccount?.IsVisible ||\r\n this.FilterSettings?.Category?.IsVisible ||\r\n this.FilterSettings?.AccountGroup?.IsVisible ||\r\n this.FilterSettings?.BusinessPartner?.IsVisible ||\r\n\r\n this.FilterSettings?.IsForceGeneralSectionVisible ||\r\n this.FilterSettings?.IsCustomGeneralSettingsOnly;\r\n }\r\n\r\n IsOptionsSectionVisible() {\r\n return this.FilterSettings?.IsDateVisible ||\r\n this.FilterSettings?.IsDatesVisible ||\r\n this.FilterSettings?.IsAmountsVisible ||\r\n this.FilterSettings?.Currency?.IsVisible ||\r\n this.FilterSettings?.IsCustomOptionsSettings ||\r\n this.FilterSettings?.Side?.IsVisible ||\r\n this.FilterSettings?.Scenario?.IsVisible ||\r\n\r\n this.FilterSettings?.IsForceOptionsSectionVisible;\r\n }\r\n\r\n protected OnDestroyComponent(): void {\r\n this._subscriptions.forEach(x => x.unsubscribe());\r\n this.filterService.Destroy();\r\n }\r\n\r\n private InitSelectGlobalOrganization() {\r\n\r\n if (this.accessService.IsAdmin()) {\r\n this._subscriptions.push(this.organizationService.Organization$.subscribe(organizationID => {\r\n if (this.State.GlobalOrganizationID != Globals.OrganizationID) {\r\n this.State.GlobalOrganizationID = Globals.OrganizationID;\r\n\r\n this.State.IsReady = false;\r\n this.FilterValues.OrganizationID = organizationID;\r\n this.OnOrganzationChanged();\r\n this.OnFilterValuesChanged();\r\n if (this.FilterSettings.Currency?.IsVisible) {\r\n setTimeout(() => {\r\n this.FilterValues.Currency = this.FilterSettings.Currency.IsMultiple ? [Globals.OrganizationDefaultCurrency] : Globals.OrganizationDefaultCurrency;\r\n });\r\n }\r\n\r\n if (!organizationID) { setTimeout(() => { this.OnFiltersReady(); }); }\r\n }\r\n }));\r\n } else {\r\n this.FilterValues.OrganizationID = Globals.OrganizationID;\r\n if (this.FilterSettings.Currency?.IsVisible) {\r\n setTimeout(() => {\r\n this.FilterValues.Currency = this.FilterSettings.Currency.IsMultiple ? [Globals.OrganizationDefaultCurrency] : Globals.OrganizationDefaultCurrency;\r\n });\r\n }\r\n }\r\n }\r\n\r\n private InitSelectGlobalCompany() {\r\n this._subscriptions.push(this.companyGlobalService.Company$.subscribe((companyID) => {\r\n if (!this.companyGlobalService.IsEqualCompanyID(this.State.GlobalCompanyID, companyID)) {\r\n const isStateGlobalCompanyFirstInit = this.State.GlobalCompanyID === undefined;\r\n this.State.GlobalCompanyID = companyID;\r\n this.State.IsReady = false;\r\n\r\n if (this.FilterSettings.Company?.IsVisible) {\r\n if (companyID > 0) {\r\n this.FilterValues.Company = this.FilterSettings.Company.IsMultiple ? [companyID] : companyID;\r\n } else {\r\n this.SetEmpty(EnumFilterSelectors.Company);\r\n }\r\n }\r\n\r\n // we already have some values in the Filter, so keep them if it's the first company change from undefined to some value\r\n if(!isStateGlobalCompanyFirstInit) {\r\n this.SetEmpty(EnumFilterSelectors.Account);\r\n this.SetEmpty(EnumFilterSelectors.BookingAccount);\r\n this.OnCompanyChanged(this.FilterValues.Company);\r\n }\r\n this.OnFilterValuesChanged();\r\n }\r\n }));\r\n }\r\n\r\n private InitChangeIsReady() {\r\n const componentName = this.Component ? this.Component.ComponentName : this.ComponentName;\r\n this.filterService.Init(componentName, this.FilterSettings, this.accessService.IsAdmin());\r\n this._subscriptions.push(this.filterService.IsReady$(componentName).subscribe((isReadyFilter) => {\r\n if (isReadyFilter) {\r\n if (this.State.IsReady) { this.OnFilterValuesChanged(); }\r\n else {\r\n this.State.IsReady = true;\r\n this.OnFiltersReady();\r\n }\r\n } else {\r\n this.State.IsReady = false;\r\n }\r\n }));\r\n }\r\n\r\n private GetArray(value: T | T[]) {\r\n if (!value) { return []; }\r\n if (Array.isArray(value)) { return value; }\r\n\r\n return [value];\r\n }\r\n\r\n private GetValue(value: number | number[]) {\r\n if (Array.isArray(value)) {\r\n if (value.length === 1) { return value[0]; }\r\n else { return undefined; }\r\n }\r\n\r\n return value;\r\n }\r\n\r\n private _isReadParams: boolean;\r\n\r\n private ReadQueryParams() {\r\n // Read params\r\n let params = this.A.Navigator.GetQueryParams(this.A.Navigator.IsCurrentRouteWindow());\r\n\r\n // Read Organization params \r\n const organizationID = params.OrganizationID ? +params.OrganizationID : undefined;\r\n if (organizationID && this.accessService.IsAdmin() && Globals.OrganizationID !== organizationID) { this.organizationService.ChangeOrganization(organizationID); }\r\n\r\n setTimeout(() => {\r\n\r\n this._isReadParams = false;\r\n\r\n // Read Company params\r\n if (params.CompanyIDs) { this.FilterValues.Company = this.ReadParam(params.CompanyIDs, this.FilterSettings.Company); }\r\n if (params.CompanyID) { this.FilterValues.Company = this.ReadParam(params.CompanyID, this.FilterSettings.Company); }\r\n\r\n // Read Account params\r\n if (params.Accounts) { this.FilterValues.Account = this.ReadParam(params.Accounts, this.FilterSettings.Account); }\r\n if (params.AccountID) { this.FilterValues.Account = this.ReadParam(params.AccountID, this.FilterSettings.Account); }\r\n\r\n // Read Booking Account params\r\n if (params.BookingAccounts) { this.FilterValues.BookingAccount = this.ReadParam(params.BookingAccounts, this.FilterSettings.BookingAccount); }\r\n if (params.BookingAccountID) { this.FilterValues.BookingAccount = this.ReadParam(params.BookingAccountID, this.FilterSettings.BookingAccount); }\r\n\r\n // Read Currency filter params\r\n if (params.CurrenciesFilter) { this.FilterValues.CurrencyFilter = this.ReadParam(params.CurrenciesFilter, this.FilterSettings.CurrencyFilter, false); }\r\n\r\n // Read Currency params\r\n if (params.Currency) { this.FilterValues.Currency = this.ReadParam(params.Currency, this.FilterSettings.Currency, false); }\r\n\r\n // Read Bank params\r\n if (params.Banks) { this.FilterValues.Bank = this.ReadParam(params.Banks, this.FilterSettings.Bank, false); }\r\n if (params.Bank) { this.FilterValues.Bank = this.ReadParam(params.Bank, this.FilterSettings.Bank, false); }\r\n\r\n // Read category params\r\n if (params.Categories) { this.FilterValues.Category = this.ReadParam(params.Categories, this.FilterSettings.Category, false); }\r\n if (params.Category) { this.FilterValues.Category = this.ReadParam(params.Category, this.FilterSettings.Category, false); }\r\n\r\n\r\n // Read Account Group params\r\n if (params.AccountGroups) { this.FilterValues.AccountGroup = this.ReadParam(params.AccountGroups, this.FilterSettings.AccountGroup); }\r\n if (params.AccountGroup) { this.FilterValues.AccountGroup = this.ReadParam(params.AccountGroup, this.FilterSettings.AccountGroup); }\r\n\r\n // Read Booking Account Subtype params\r\n if (params.BookingAccountSubtypes) { this.FilterValues.BookingAccountSubtype = this.ReadParam(params.BookingAccountSubtypes, this.FilterSettings.BookingAccountSubtype, false); }\r\n if (params.BookingAccountSubtype) { this.FilterValues.BookingAccountSubtype = this.ReadParam(params.BookingAccountSubtype, this.FilterSettings.BookingAccountSubtype, false); }\r\n\r\n // Read Date params\r\n if (params.Date) { this.FilterValues.Date = new Date(params.Date); }\r\n if (params.DateTo) { this.FilterValues.DateTo = new Date(params.DateTo); }\r\n if (params.DateFrom) { this.FilterValues.DateFrom = new Date(params.DateFrom); }\r\n\r\n if (this._isReadParams) { this.OnFilterValuesChanged(); }\r\n });\r\n\r\n }\r\n\r\n private ReadParam(param: any, settings: SelectorSettings, isNumber = true): T | T[] {\r\n if (!settings) { return; }\r\n\r\n const value = Array.isArray(param) ? param.map(x => this.Cast(x, isNumber)) : this.Cast(param, isNumber);\r\n\r\n if (settings.IsMultiple && !Array.isArray(value)) { return [value]; }\r\n else if (!settings.IsMultiple && Array.isArray(value)) {\r\n if (value.length === 0) { return undefined; }\r\n else { return value[0]; }\r\n }\r\n\r\n if (!this._isReadParams) { this._isReadParams = true; }\r\n\r\n return value;\r\n }\r\n\r\n private Cast(value: any, isNumber: boolean) {\r\n if (isNumber) { return +value as any; }\r\n return value as T;\r\n }\r\n\r\n private SetEmpty(filterSelector: EnumFilterSelectors) {\r\n const settings = this.FilterSettings[filterSelector];\r\n if (settings?.IsVisible) {\r\n this.FilterValues[filterSelector] = settings.IsMultiple ? [] : undefined;\r\n }\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ReplaySubject } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CompanyGlobalService {\r\n\r\n private _companyChangedSubject = new ReplaySubject(1);\r\n readonly Company$ = this._companyChangedSubject.asObservable();\r\n\r\n ChangeCompany(CompanyID: number) {\r\n this._companyChangedSubject.next(CompanyID);\r\n }\r\n\r\n public IsEqualCompanyID(oldCompanyID: number, newCompanyID: number) {\r\n const isEmptyNewCompanyID = newCompanyID === undefined || newCompanyID === -1;\r\n const isEmptyOldCompanyID = oldCompanyID === undefined || oldCompanyID === -1;\r\n\r\n return (isEmptyNewCompanyID && isEmptyOldCompanyID) || newCompanyID === oldCompanyID;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { EnumFilterSelectors, FilterSettings } from '@kraken/components/filter/filter.component';\r\nimport { QuickFilterSettings } from '@kraken/components/quick-filter/quick-filter.component';\r\nimport { SelectorSettings } from '@kraken/components/selectors/base-selector.component';\r\nimport { BehaviorSubject, combineLatest, map, Observable, of, Subject, Subscription } from 'rxjs';\r\nimport { CompanyGlobalService } from './company-global.service';\r\nimport { OrganizationService } from './organization.service';\r\n\r\nclass FilterItemData {\r\n LoadStatusSubject: BehaviorSubject<{ IsLoaded: boolean, CanBeLoaded: boolean }>\r\n ValueSubject: BehaviorSubject;\r\n Value$: Observable;\r\n Settings: SelectorSettings;\r\n Name: string;\r\n DataSourceSubject: Subject;\r\n}\r\n\r\nclass ComponentFilterData {\r\n Subscriptions: Subscription[];\r\n IsReadySubject: BehaviorSubject;\r\n IsReady$: Observable;\r\n FilterSettings: FilterSettings;\r\n GlobalCompanyID: number;\r\n Data: {\r\n [EnumFilterSelectors.Company]: FilterItemData,\r\n [EnumFilterSelectors.Account]: FilterItemData,\r\n [EnumFilterSelectors.BookingAccount]: FilterItemData,\r\n [EnumFilterSelectors.AccountGroup]: FilterItemData,\r\n [EnumFilterSelectors.BookingAccountSubtype]: FilterItemData,\r\n [EnumFilterSelectors.Bank]: FilterItemData,\r\n [EnumFilterSelectors.CurrencyFilter]: FilterItemData,\r\n [EnumFilterSelectors.Scenario]: FilterItemData,\r\n [EnumFilterSelectors.ProbabilityLevel]: FilterItemData,\r\n [EnumFilterSelectors.Category]: FilterItemData,\r\n [EnumFilterSelectors.TransactionCategory]: FilterItemData,\r\n [EnumFilterSelectors.ForecastMapper]: FilterItemData,\r\n [EnumFilterSelectors.BusinessPartner]: FilterItemData,\r\n [EnumFilterSelectors.CashflowCategory]: FilterItemData,\r\n [EnumFilterSelectors.CashflowDataSource]: FilterItemData,\r\n }\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class FilterService {\r\n\r\n constructor(private organizationService: OrganizationService, private companyGlobalService: CompanyGlobalService) {\r\n }\r\n\r\n private _components: {\r\n [key: string] : ComponentFilterData\r\n } = {};\r\n private _isAdminUser: boolean;\r\n\r\n public Init(component: string, filterSettings: FilterSettings, isAdmninUser: boolean) {\r\n this.ClearSubscriptions(component);\r\n this._isAdminUser = isAdmninUser;\r\n\r\n this._components[component] = {} as any;\r\n this._components[component].Subscriptions = [];\r\n this._components[component].IsReadySubject = new BehaviorSubject(false);\r\n this._components[component].IsReady$ = this._components[component].IsReadySubject.asObservable();\r\n this._components[component].FilterSettings = filterSettings;\r\n\r\n this.InitSubjects(component);\r\n this.AddRules(component);\r\n }\r\n\r\n public InitQuickFilter(component: string, quickFilterSettings: QuickFilterSettings) {\r\n const componentFilterData = this._components[component];\r\n \r\n if (componentFilterData) {\r\n Object.keys(quickFilterSettings).forEach(key => {\r\n if (componentFilterData.FilterSettings[key]?.FilterSettings) {\r\n quickFilterSettings[key].FilterSettings = componentFilterData.FilterSettings[key].FilterSettings;\r\n }\r\n });\r\n }\r\n }\r\n\r\n public Destroy() { this.ClearSubscriptions(); }\r\n\r\n public IsReady$(componentName: string) { return this._components[componentName].IsReady$; }\r\n\r\n public Sources(componentName: string){\r\n if (!this._components[componentName]) { return; }\r\n\r\n return {\r\n CompanyItems$: this.GetSource(componentName, EnumFilterSelectors.Company),\r\n TransactionCategoryItems$: this.GetSource(componentName, EnumFilterSelectors.TransactionCategory),\r\n AccountItems$: this.GetSource(componentName, EnumFilterSelectors.Account),\r\n BookingAccountItems$: this.GetSource(componentName, EnumFilterSelectors.BookingAccount),\r\n ScenarioItems$: this.GetSource(componentName, EnumFilterSelectors.Scenario),\r\n CashflowCategories$: this.GetSource(componentName, EnumFilterSelectors.CashflowCategory),\r\n CashflowDataSources$: this.GetSource(componentName, EnumFilterSelectors.CashflowDataSource),\r\n ProbabilityLevelItems$: this.GetSource(componentName, EnumFilterSelectors.ProbabilityLevel)\r\n };\r\n }\r\n\r\n public Clear(componentName: string) {\r\n const componentFilterData = this._components[componentName];\r\n if (!componentFilterData) { return; }\r\n \r\n this.UpdateFilterData(componentFilterData, EnumFilterSelectors.AccountGroup, false, true);\r\n this.UpdateFilterData(componentFilterData, EnumFilterSelectors.BookingAccountSubtype, false, true);\r\n this.UpdateFilterData(componentFilterData, EnumFilterSelectors.Bank, false, true);\r\n this.UpdateFilterData(componentFilterData, EnumFilterSelectors.CurrencyFilter, false, true);\r\n this.UpdateFilterData(componentFilterData, EnumFilterSelectors.Scenario, false, true);\r\n this.UpdateFilterData(componentFilterData, EnumFilterSelectors.ProbabilityLevel, false, true);\r\n this.UpdateFilterData(componentFilterData, EnumFilterSelectors.Category, false, true);\r\n this.UpdateFilterData(componentFilterData, EnumFilterSelectors.Account, false);\r\n this.UpdateFilterData(componentFilterData, EnumFilterSelectors.BookingAccount, false);\r\n this.UpdateFilterData(componentFilterData, EnumFilterSelectors.TransactionCategory, false);\r\n this.UpdateFilterData(componentFilterData, EnumFilterSelectors.ForecastMapper, false);\r\n this.UpdateFilterData(componentFilterData, EnumFilterSelectors.BusinessPartner, false);\r\n this.UpdateFilterData(componentFilterData, EnumFilterSelectors.CashflowCategory, false);\r\n this.UpdateFilterData(componentFilterData, EnumFilterSelectors.CashflowDataSource, false);\r\n }\r\n\r\n public ReloadSource(component: string, selector: EnumFilterSelectors) {\r\n const data = this._components[component]?.Data?.[selector];\r\n\r\n if (data && data.Settings?.IsVisible) {\r\n const loadStatus = {\r\n IsLoaded: false,\r\n CanBeLoaded: true\r\n };\r\n\r\n if (loadStatus.IsLoaded !== data.LoadStatusSubject.value.IsLoaded || loadStatus.CanBeLoaded !== data.LoadStatusSubject.value.CanBeLoaded) {\r\n data.LoadStatusSubject.next(loadStatus);\r\n }\r\n }\r\n }\r\n\r\n private InitSubjects(component: string) {\r\n this._components[component].Data = {} as any;\r\n this._components[component].Data[EnumFilterSelectors.Company] = this.InitItemData(this._components[component].FilterSettings.Company);\r\n this._components[component].Data[EnumFilterSelectors.Account] = this.InitItemData(this._components[component].FilterSettings.Account);\r\n this._components[component].Data[EnumFilterSelectors.BookingAccount] = this.InitItemData(this._components[component].FilterSettings.BookingAccount);\r\n this._components[component].Data[EnumFilterSelectors.AccountGroup] = this.InitItemData(this._components[component].FilterSettings.AccountGroup);\r\n this._components[component].Data[EnumFilterSelectors.BookingAccountSubtype] = this.InitItemData(this._components[component].FilterSettings.BookingAccountSubtype);\r\n this._components[component].Data[EnumFilterSelectors.Bank] = this.InitItemData(this._components[component].FilterSettings.Bank);\r\n this._components[component].Data[EnumFilterSelectors.CurrencyFilter] = this.InitItemData(this._components[component].FilterSettings.CurrencyFilter);\r\n this._components[component].Data[EnumFilterSelectors.Scenario] = this.InitItemData(this._components[component].FilterSettings.Scenario);\r\n this._components[component].Data[EnumFilterSelectors.ProbabilityLevel] = this.InitItemData(this._components[component].FilterSettings.ProbabilityLevel);\r\n this._components[component].Data[EnumFilterSelectors.Category] = this.InitItemData(this._components[component].FilterSettings.Category);\r\n this._components[component].Data[EnumFilterSelectors.TransactionCategory] = this.InitItemData(this._components[component].FilterSettings.TransactionCategory);\r\n this._components[component].Data[EnumFilterSelectors.ForecastMapper] = this.InitItemData(this._components[component].FilterSettings.ForecastMapper);\r\n this._components[component].Data[EnumFilterSelectors.BusinessPartner] = this.InitItemData(this._components[component].FilterSettings.BusinessPartner);\r\n this._components[component].Data[EnumFilterSelectors.CashflowCategory] = this.InitItemData(this._components[component].FilterSettings.CashflowCategory);\r\n this._components[component].Data[EnumFilterSelectors.CashflowDataSource] = this.InitItemData(this._components[component].FilterSettings.CashflowDataSource);\r\n }\r\n\r\n private InitItemData(settings: SelectorSettings) {\r\n if (settings?.IsVisible){\r\n let data = new FilterItemData();\r\n\r\n data.LoadStatusSubject = new BehaviorSubject({ IsLoaded: false, CanBeLoaded: false });\r\n data.ValueSubject = new BehaviorSubject(settings.IsMultiple ? [] : undefined);\r\n data.DataSourceSubject = new Subject();\r\n data.Value$ = data.ValueSubject.asObservable();\r\n data.Settings = settings;\r\n\r\n settings.FilterSettings = {\r\n Loaded: () => { if (!data.LoadStatusSubject.value.IsLoaded) { data.LoadStatusSubject.next({...data.LoadStatusSubject.value, IsLoaded: true}); } },\r\n ValueChanged: (value) => { if (value !== data.ValueSubject.value) { data.ValueSubject.next(value); } },\r\n DataSourceLoaded: (value: any) => { data.DataSourceSubject.next(value); },\r\n LoadStatus$: data.LoadStatusSubject.asObservable(),\r\n DataSource$: data.DataSourceSubject.asObservable(),\r\n }\r\n\r\n return data;\r\n }\r\n }\r\n\r\n // #region Rules\r\n\r\n private AddRules(component: string) {\r\n const componentFilterData = this._components[component];\r\n\r\n // Change rules\r\n this.AddRuleOrganizationChanged(componentFilterData);\r\n this.AddRuleCompanyChanged(componentFilterData);\r\n this.AddRuleAccountGroupChanged(componentFilterData);\r\n this.AddRuleBookingAccountSubtypeChanged(componentFilterData);\r\n this.AddRuleBankChanged(componentFilterData);\r\n this.AddRuleCurrencyChanged(componentFilterData);\r\n this.AddRuleAccountChanged(componentFilterData);\r\n\r\n // Rules for possibility load\r\n this.AddRuleCanBeLoadedTransactionCategory(componentFilterData);\r\n this.AddRuleCanBeLoadedForecastMapper(componentFilterData);\r\n this.AddRuleCanBeLoadedCashflowCategory(componentFilterData);\r\n this.AddRuleCanBeLoadedCashflowDataSource(componentFilterData);\r\n this.AddRuleCanBeLoadedBusinessPartner(componentFilterData);\r\n this.AddRuleCanBeLoadedAccount(componentFilterData);\r\n this.AddRuleCanBeLoadedBookingAccount(componentFilterData);\r\n\r\n // IsReady rule\r\n this.AddIsReadyRule(componentFilterData);\r\n }\r\n\r\n private AddRuleOrganizationChanged(componentFilterData: ComponentFilterData) {\r\n const updateFilterDatas = (canBeLoaded: boolean) => {\r\n const hasRelatedSelectors = componentFilterData.Data[EnumFilterSelectors.Company] ||\r\n componentFilterData.Data[EnumFilterSelectors.AccountGroup] ||\r\n componentFilterData.Data[EnumFilterSelectors.BookingAccountSubtype] ||\r\n componentFilterData.Data[EnumFilterSelectors.Bank] ||\r\n componentFilterData.Data[EnumFilterSelectors.CurrencyFilter] ||\r\n componentFilterData.Data[EnumFilterSelectors.Scenario] ||\r\n componentFilterData.Data[EnumFilterSelectors.ProbabilityLevel] ||\r\n componentFilterData.Data[EnumFilterSelectors.Category] ||\r\n componentFilterData.Data[EnumFilterSelectors.Account] ||\r\n componentFilterData.Data[EnumFilterSelectors.BookingAccount] ||\r\n componentFilterData.Data[EnumFilterSelectors.CashflowCategory] ||\r\n componentFilterData.Data[EnumFilterSelectors.CashflowDataSource] ||\r\n componentFilterData.Data[EnumFilterSelectors.TransactionCategory] ||\r\n componentFilterData.Data[EnumFilterSelectors.ForecastMapper] || false;\r\n\r\n if (hasRelatedSelectors) {\r\n this.UpdateFilterData(componentFilterData, EnumFilterSelectors.Company, false, canBeLoaded);\r\n this.UpdateFilterData(componentFilterData, EnumFilterSelectors.AccountGroup, false, canBeLoaded);\r\n this.UpdateFilterData(componentFilterData, EnumFilterSelectors.BookingAccountSubtype, false, canBeLoaded);\r\n this.UpdateFilterData(componentFilterData, EnumFilterSelectors.Bank, false, canBeLoaded);\r\n this.UpdateFilterData(componentFilterData, EnumFilterSelectors.CurrencyFilter, false, canBeLoaded);\r\n this.UpdateFilterData(componentFilterData, EnumFilterSelectors.Scenario, false, canBeLoaded);\r\n this.UpdateFilterData(componentFilterData, EnumFilterSelectors.ProbabilityLevel, false, canBeLoaded);\r\n this.UpdateFilterData(componentFilterData, EnumFilterSelectors.Category, false, canBeLoaded);\r\n this.UpdateFilterData(componentFilterData, EnumFilterSelectors.Account, false, !canBeLoaded ? false : undefined);\r\n this.UpdateFilterData(componentFilterData, EnumFilterSelectors.BookingAccount, false, !canBeLoaded ? false : undefined);\r\n this.UpdateFilterData(componentFilterData, EnumFilterSelectors.TransactionCategory, false, !canBeLoaded ? false : undefined);\r\n this.UpdateFilterData(componentFilterData, EnumFilterSelectors.CashflowCategory, false, !canBeLoaded ? false : undefined);\r\n this.UpdateFilterData(componentFilterData, EnumFilterSelectors.CashflowDataSource, false, !canBeLoaded ? false : undefined);\r\n this.UpdateFilterData(componentFilterData, EnumFilterSelectors.ForecastMapper, false, !canBeLoaded ? false : undefined);\r\n this.UpdateFilterData(componentFilterData, EnumFilterSelectors.BusinessPartner, false, !canBeLoaded ? false : undefined);\r\n } else {\r\n setTimeout(() => componentFilterData.IsReadySubject.next(true));\r\n }\r\n }\r\n\r\n if (this._isAdminUser) {\r\n componentFilterData.Subscriptions.push(this.organizationService.Organization$.subscribe((organizationID: number) => {\r\n const canBeLoaded = !!organizationID;\r\n updateFilterDatas(canBeLoaded);\r\n }));\r\n } else {\r\n updateFilterDatas(true);\r\n }\r\n }\r\n\r\n private AddRuleCompanyChanged(componentFilterData: ComponentFilterData) {\r\n if (!componentFilterData.Data[EnumFilterSelectors.Company]?.Settings?.IsVisible) { return; }\r\n // Company changed\r\n componentFilterData.Subscriptions.push(componentFilterData.Data[EnumFilterSelectors.Company].Value$.subscribe(() => {\r\n this.UpdateFilterData(componentFilterData, EnumFilterSelectors.Account, false);\r\n this.UpdateFilterData(componentFilterData, EnumFilterSelectors.BookingAccount, false);\r\n this.UpdateFilterData(componentFilterData, EnumFilterSelectors.TransactionCategory, false);\r\n this.UpdateFilterData(componentFilterData, EnumFilterSelectors.CashflowCategory, false);\r\n this.UpdateFilterData(componentFilterData, EnumFilterSelectors.CashflowDataSource, false);\r\n this.UpdateFilterData(componentFilterData, EnumFilterSelectors.ForecastMapper, false);\r\n this.UpdateFilterData(componentFilterData, EnumFilterSelectors.BusinessPartner, false);\r\n }));\r\n\r\n componentFilterData.Subscriptions.push(this.companyGlobalService.Company$.subscribe((companyID) => {\r\n if(!this.companyGlobalService.IsEqualCompanyID(componentFilterData.GlobalCompanyID, companyID)) {\r\n componentFilterData.GlobalCompanyID = companyID;\r\n\r\n const hasRelatedSelectors = componentFilterData.FilterSettings.Account?.IsVisible ||\r\n componentFilterData.FilterSettings.BookingAccount?.IsVisible ||\r\n componentFilterData.FilterSettings.TransactionCategory?.IsVisible ||\r\n componentFilterData.FilterSettings.CashflowCategory?.IsVisible ||\r\n componentFilterData.FilterSettings.CashflowDataSource?.IsVisible ||\r\n componentFilterData.FilterSettings.ForecastMapper?.IsVisible ||\r\n componentFilterData.FilterSettings.BusinessPartner?.IsVisible || false;\r\n\r\n setTimeout(() => {\r\n if (hasRelatedSelectors) {\r\n this.UpdateFilterData(componentFilterData, EnumFilterSelectors.Account, false);\r\n this.UpdateFilterData(componentFilterData, EnumFilterSelectors.BookingAccount, false);\r\n this.UpdateFilterData(componentFilterData, EnumFilterSelectors.TransactionCategory, false);\r\n this.UpdateFilterData(componentFilterData, EnumFilterSelectors.CashflowCategory, false);\r\n this.UpdateFilterData(componentFilterData, EnumFilterSelectors.CashflowDataSource, false);\r\n this.UpdateFilterData(componentFilterData, EnumFilterSelectors.ForecastMapper, false);\r\n this.UpdateFilterData(componentFilterData, EnumFilterSelectors.BusinessPartner, false);\r\n } else {\r\n componentFilterData.IsReadySubject.next(true);\r\n }\r\n })\r\n }\r\n }));\r\n }\r\n\r\n private AddRuleAccountGroupChanged(componentFilterData: ComponentFilterData) {\r\n if (!componentFilterData.Data[EnumFilterSelectors.AccountGroup]?.Settings?.IsVisible) { return; }\r\n\r\n componentFilterData.Subscriptions.push(componentFilterData.Data[EnumFilterSelectors.AccountGroup].Value$.subscribe(() => {\r\n this.UpdateFilterData(componentFilterData, EnumFilterSelectors.Account, false);\r\n this.UpdateFilterData(componentFilterData, EnumFilterSelectors.BookingAccount, false);\r\n }));\r\n }\r\n\r\n private AddRuleBookingAccountSubtypeChanged(componentFilterData: ComponentFilterData) {\r\n if (!componentFilterData.Data[EnumFilterSelectors.BookingAccountSubtype]?.Settings?.IsVisible) { return; }\r\n\r\n componentFilterData.Subscriptions.push(componentFilterData.Data[EnumFilterSelectors.BookingAccountSubtype].Value$.subscribe(() => {\r\n this.UpdateFilterData(componentFilterData, EnumFilterSelectors.Account, false);\r\n this.UpdateFilterData(componentFilterData, EnumFilterSelectors.BookingAccount, false);\r\n }));\r\n }\r\n\r\n private AddRuleBankChanged(componentFilterData: ComponentFilterData) {\r\n if (!componentFilterData.Data[EnumFilterSelectors.Bank]?.Settings?.IsVisible) { return; }\r\n\r\n componentFilterData.Subscriptions.push(componentFilterData.Data[EnumFilterSelectors.Bank].Value$.subscribe(() => {\r\n this.UpdateFilterData(componentFilterData, EnumFilterSelectors.Account, false);\r\n this.UpdateFilterData(componentFilterData, EnumFilterSelectors.BookingAccount, false);\r\n }));\r\n }\r\n\r\n private AddRuleCurrencyChanged(componentFilterData: ComponentFilterData) {\r\n if (!componentFilterData.Data[EnumFilterSelectors.CurrencyFilter]?.Settings?.IsVisible) { return; }\r\n\r\n componentFilterData.Subscriptions.push(componentFilterData.Data[EnumFilterSelectors.CurrencyFilter].Value$.subscribe(() => {\r\n this.UpdateFilterData(componentFilterData, EnumFilterSelectors.BookingAccount, false);\r\n }));\r\n }\r\n\r\n private AddRuleAccountChanged(componentFilterData: ComponentFilterData) {\r\n if (!componentFilterData.Data[EnumFilterSelectors.Account]?.Settings?.IsVisible) { return; }\r\n\r\n componentFilterData.Subscriptions.push(componentFilterData.Data[EnumFilterSelectors.Account].Value$.subscribe(() => {\r\n this.UpdateFilterData(componentFilterData, EnumFilterSelectors.BookingAccount, false);\r\n }));\r\n }\r\n\r\n private AddRuleCanBeLoadedTransactionCategory(componentFilterData: ComponentFilterData) {\r\n const company = componentFilterData.Data[EnumFilterSelectors.Company];\r\n const transactionCategory = componentFilterData.Data[EnumFilterSelectors.TransactionCategory];\r\n if (!transactionCategory?.Settings?.IsVisible || !company?.Settings?.IsVisible) { return ;}\r\n\r\n const companyIsLoaded$ = company.Settings.FilterSettings.LoadStatus$.pipe(map((status) => status.IsLoaded));\r\n componentFilterData.Subscriptions.push(companyIsLoaded$.subscribe((isLoaded) => {\r\n transactionCategory.LoadStatusSubject.next({...transactionCategory.LoadStatusSubject.value, CanBeLoaded: isLoaded});\r\n }));\r\n }\r\n\r\n private AddRuleCanBeLoadedForecastMapper(componentFilterData: ComponentFilterData) {\r\n const company = componentFilterData.Data[EnumFilterSelectors.Company];\r\n const forecastMapper = componentFilterData.Data[EnumFilterSelectors.ForecastMapper];\r\n if (!forecastMapper?.Settings?.IsVisible || !company?.Settings?.IsVisible) { return ;}\r\n\r\n const companyIsLoaded$ = company.Settings.FilterSettings.LoadStatus$.pipe(map((status) => status.IsLoaded));\r\n componentFilterData.Subscriptions.push(companyIsLoaded$.subscribe((isLoaded) => {\r\n forecastMapper.LoadStatusSubject.next({...forecastMapper.LoadStatusSubject.value, CanBeLoaded: isLoaded});\r\n }));\r\n }\r\n\r\n private AddRuleCanBeLoadedCashflowCategory(componentFilterData: ComponentFilterData) {\r\n const company = componentFilterData.Data[EnumFilterSelectors.Company];\r\n const cashflowCategory = componentFilterData.Data[EnumFilterSelectors.CashflowCategory];\r\n if (!cashflowCategory?.Settings?.IsVisible || !company?.Settings?.IsVisible) { return ;}\r\n\r\n const companyIsLoaded$ = company.Settings.FilterSettings.LoadStatus$.pipe(map((status) => status.IsLoaded));\r\n componentFilterData.Subscriptions.push(companyIsLoaded$.subscribe((isLoaded) => {\r\n cashflowCategory.LoadStatusSubject.next({ ...cashflowCategory.LoadStatusSubject.value, CanBeLoaded: isLoaded });\r\n }));\r\n }\r\n\r\n private AddRuleCanBeLoadedCashflowDataSource(componentFilterData: ComponentFilterData) {\r\n const company = componentFilterData.Data[EnumFilterSelectors.Company];\r\n const cashflowCategory = componentFilterData.Data[EnumFilterSelectors.CashflowDataSource];\r\n if (!cashflowCategory?.Settings?.IsVisible || !company?.Settings?.IsVisible) { return ;}\r\n\r\n const companyIsLoaded$ = company.Settings.FilterSettings.LoadStatus$.pipe(map((status) => status.IsLoaded));\r\n componentFilterData.Subscriptions.push(companyIsLoaded$.subscribe((isLoaded) => {\r\n cashflowCategory.LoadStatusSubject.next({ ...cashflowCategory.LoadStatusSubject.value, CanBeLoaded: isLoaded });\r\n }));\r\n }\r\n\r\n private AddRuleCanBeLoadedBusinessPartner(componentFilterData: ComponentFilterData) {\r\n const company = componentFilterData.Data[EnumFilterSelectors.Company];\r\n const businessPartner = componentFilterData.Data[EnumFilterSelectors.BusinessPartner];\r\n if (!businessPartner?.Settings?.IsVisible || !company?.Settings?.IsVisible) { return ;}\r\n\r\n const companyIsLoaded$ = company.Settings.FilterSettings.LoadStatus$.pipe(map((status) => status.IsLoaded));\r\n componentFilterData.Subscriptions.push(companyIsLoaded$.subscribe((isLoaded) => {\r\n businessPartner.LoadStatusSubject.next({...businessPartner.LoadStatusSubject.value, CanBeLoaded: isLoaded});\r\n }));\r\n }\r\n\r\n private AddRuleCanBeLoadedAccount(componentFilterData: ComponentFilterData) {\r\n const account = componentFilterData.Data[EnumFilterSelectors.Account];\r\n if (!account?.Settings?.IsVisible) { return; }\r\n\r\n const events: Observable[] = [];\r\n events.push(this.GetIsLoadedItem(componentFilterData, EnumFilterSelectors.Company));\r\n events.push(this.GetIsLoadedItem(componentFilterData, EnumFilterSelectors.AccountGroup));\r\n events.push(this.GetIsLoadedItem(componentFilterData, EnumFilterSelectors.BookingAccountSubtype));\r\n events.push(this.GetIsLoadedItem(componentFilterData, EnumFilterSelectors.Bank));\r\n\r\n componentFilterData.Subscriptions.push(combineLatest(events).subscribe((values) => {\r\n const canBeLoaded = !values.some(x => !x);\r\n if (account.LoadStatusSubject.value.CanBeLoaded !== canBeLoaded) {\r\n const isLoaded = !account.LoadStatusSubject.value.CanBeLoaded && canBeLoaded ? false : account.LoadStatusSubject.value.IsLoaded\r\n\r\n account.LoadStatusSubject.next({IsLoaded: isLoaded, CanBeLoaded: canBeLoaded});\r\n }\r\n }));\r\n }\r\n\r\n private AddRuleCanBeLoadedBookingAccount(componentFilterData: ComponentFilterData) {\r\n const bookingAccount = componentFilterData.Data[EnumFilterSelectors.BookingAccount];\r\n if (!bookingAccount?.Settings?.IsVisible) { return; }\r\n\r\n const events: Observable[] = [];\r\n events.push(this.GetIsLoadedItem(componentFilterData, EnumFilterSelectors.Company));\r\n events.push(this.GetIsLoadedItem(componentFilterData, EnumFilterSelectors.AccountGroup));\r\n events.push(this.GetIsLoadedItem(componentFilterData, EnumFilterSelectors.BookingAccountSubtype));\r\n events.push(this.GetIsLoadedItem(componentFilterData, EnumFilterSelectors.Bank));\r\n events.push(this.GetIsLoadedItem(componentFilterData, EnumFilterSelectors.Account));\r\n events.push(this.GetIsLoadedItem(componentFilterData, EnumFilterSelectors.CurrencyFilter));\r\n\r\n componentFilterData.Subscriptions.push(combineLatest(events).subscribe((values) => {\r\n const canBeLoaded = !values.some(x => !x);\r\n if (bookingAccount.LoadStatusSubject.value.CanBeLoaded !== canBeLoaded) {\r\n bookingAccount.LoadStatusSubject.next({...bookingAccount.LoadStatusSubject.value, CanBeLoaded: canBeLoaded});\r\n }\r\n }));\r\n }\r\n\r\n private AddIsReadyRule(componentFilterData: ComponentFilterData) {\r\n\r\n const events: Observable[] = [];\r\n events.push(this.GetIsLoadedItem(componentFilterData, EnumFilterSelectors.Company));\r\n events.push(this.GetIsLoadedItem(componentFilterData, EnumFilterSelectors.Account));\r\n events.push(this.GetIsLoadedItem(componentFilterData, EnumFilterSelectors.BookingAccount));\r\n events.push(this.GetIsLoadedItem(componentFilterData, EnumFilterSelectors.AccountGroup));\r\n events.push(this.GetIsLoadedItem(componentFilterData, EnumFilterSelectors.BookingAccountSubtype));\r\n events.push(this.GetIsLoadedItem(componentFilterData, EnumFilterSelectors.Bank));\r\n events.push(this.GetIsLoadedItem(componentFilterData, EnumFilterSelectors.CurrencyFilter));\r\n events.push(this.GetIsLoadedItem(componentFilterData, EnumFilterSelectors.Scenario));\r\n events.push(this.GetIsLoadedItem(componentFilterData, EnumFilterSelectors.ProbabilityLevel));\r\n events.push(this.GetIsLoadedItem(componentFilterData, EnumFilterSelectors.Category));\r\n events.push(this.GetIsLoadedItem(componentFilterData, EnumFilterSelectors.TransactionCategory));\r\n events.push(this.GetIsLoadedItem(componentFilterData, EnumFilterSelectors.CashflowCategory));\r\n events.push(this.GetIsLoadedItem(componentFilterData, EnumFilterSelectors.CashflowDataSource));\r\n events.push(this.GetIsLoadedItem(componentFilterData, EnumFilterSelectors.ForecastMapper));\r\n events.push(this.GetIsLoadedItem(componentFilterData, EnumFilterSelectors.BusinessPartner));\r\n\r\n componentFilterData.Subscriptions.push(combineLatest(events).subscribe((values) => {\r\n const isReady = !values.some(x => !x);\r\n if (isReady !== componentFilterData.IsReadySubject.value) { componentFilterData.IsReadySubject.next(isReady); }\r\n }));\r\n }\r\n\r\n //#endregion\r\n \r\n\r\n private UpdateFilterData(componentFilterData: ComponentFilterData, filterSelector: EnumFilterSelectors, IsLoaded: boolean, CanBeLoaded?: boolean){\r\n const data = componentFilterData.Data[filterSelector];\r\n\r\n if (data && data.Settings?.IsVisible) {\r\n const loadStatus = {\r\n IsLoaded: IsLoaded,\r\n CanBeLoaded: typeof CanBeLoaded === 'boolean' ? CanBeLoaded : data.LoadStatusSubject.value.CanBeLoaded\r\n };\r\n\r\n if (loadStatus.IsLoaded !== data.LoadStatusSubject.value.IsLoaded || loadStatus.CanBeLoaded !== data.LoadStatusSubject.value.CanBeLoaded) {\r\n data.LoadStatusSubject.next(loadStatus);\r\n }\r\n }\r\n }\r\n\r\n private GetIsLoadedItem(componentFilterData: ComponentFilterData, filterSelector: EnumFilterSelectors) {\r\n if (!componentFilterData.Data[filterSelector]?.Settings?.IsVisible) { return of(true); }\r\n\r\n return componentFilterData.Data[filterSelector].Settings.FilterSettings.LoadStatus$.pipe(map((status) => status.IsLoaded));\r\n }\r\n \r\n private ClearSubscriptions(component?: string) {\r\n let subscriptions: Subscription[];\r\n\r\n if (component) {\r\n subscriptions = this._components[component]?.Subscriptions;\r\n } else {\r\n subscriptions = Object.keys(this._components).map((key) => this._components[key]?.Subscriptions).flat(1);\r\n }\r\n\r\n if(subscriptions?.length > 0) {\r\n subscriptions.forEach((subscription) => subscription.unsubscribe())\r\n }\r\n }\r\n\r\n private GetSource(componentName: string, filterSelector: EnumFilterSelectors) {\r\n if (!this._components[componentName]) { return undefined; }\r\n if (!this._components[componentName].Data[filterSelector]) { return undefined; }\r\n\r\n return this._components[componentName].Data[filterSelector].Settings.FilterSettings.DataSource$;\r\n }\r\n}\r\n","export enum EnumBalanceDetailsReportModes {\r\n Deposits,\r\n Stocks,\r\n Loans,\r\n Guarantees\r\n}\r\n\r\nexport enum EnumExpenseReportModes {\r\n Approval,\r\n Posting,\r\n MyExpenses,\r\n All,\r\n SummaryReport\r\n}\r\n\r\nexport enum IncomingPaymentActions {\r\n Save = 'Save',\r\n Post = 'Post',\r\n HandleManually = 'HandleManually',\r\n MoveToTheNext = 'MoveToTheNext',\r\n MarkAsIrrelevant = 'MarkAsIrrelevant'\r\n}","export default \"\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\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 { FilterService } from '@kraken/services/filter.service';\r\nimport { EnumBanks, EnumBookingAccountSubtypes } from '@kraken/_proxy/enums';\r\nimport { AccountListParams } from '@kraken/_proxy/params/accountlist.param';\r\nimport { BookingAccountListParams } from '@kraken/_proxy/params/bookingaccountlist.param';\r\nimport { CompanyListParams } from '@kraken/_proxy/params/companylist.param';\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 { Subscription } from 'rxjs';\r\nimport { EnumFilterSelectors, FilterValues } from '../filter/filter.component';\r\nimport { SelectorSettings } from '../selectors/base-selector.component';\r\n\r\nexport class QuickFilterSettings {\r\n Company: SelectorSettings = new SelectorSettings();\r\n Account: SelectorSettings = new SelectorSettings();\r\n BookingAccount: SelectorSettings = new SelectorSettings();\r\n Bank: SelectorSettings = new SelectorSettings();\r\n BookingAccountSubtype: SelectorSettings = new SelectorSettings();\r\n CurrencyFilter: SelectorSettings = new SelectorSettings();\r\n Currency?: SelectorSettings = new SelectorSettings();\r\n\r\n IsLoadActiveCashflow: boolean;\r\n AccountBookingAccountSubtypes: EnumBookingAccountSubtypes[] = [];\r\n BookingAccountSubtypes: EnumBookingAccountSubtypes[] = [];\r\n IsDateVisible: boolean;\r\n IsDatesVisible: boolean;\r\n MinReportDate: Date;\r\n MaxReportDate: Date;\r\n}\r\n\r\nclass State extends BaseState {\r\n IsReadyComponent: boolean;\r\n\r\n IsInitialized: boolean;\r\n ComponentName: string;\r\n}\r\n@Component({\r\n selector: 'app-quick-filter',\r\n templateUrl: './quick-filter.component.html',\r\n styleUrls: ['./quick-filter.component.scss']\r\n})\r\nexport class QuickFilterComponent extends BaseComponent {\r\n\r\n @Input() FilterSettings: QuickFilterSettings;\r\n @Input() FilterValues: FilterValues;\r\n @Input() set Component(component: BaseComponent) {\r\n if (component) {\r\n this.State.ComponentName = component.ComponentName;\r\n this.InitFilterService();\r\n }\r\n }\r\n @Output() FilterValuesChange = new EventEmitter();\r\n @Output() FilterValuesChanged = new EventEmitter();\r\n @Output() FilterCompaniesChanged = new EventEmitter();\r\n\r\n private _subscriptions: Subscription[] = [];\r\n\r\n constructor(A: ServiceBagService,\r\n private filterService: FilterService) {\r\n super(A, 'QuickFilterComponent', State);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.State.IsInitialized = true;\r\n this.InitFilterService();\r\n }\r\n\r\n OnFilterValuesChanged() {\r\n if (this.State.IsReadyComponent) {\r\n this.FilterValuesChange.emit({ ...this.FilterValues });\r\n this.FilterValuesChanged.emit({ ...this.FilterValues });\r\n }\r\n }\r\n\r\n OnBankChanged(bank: EnumBanks | EnumBanks[]) {\r\n this.SetEmpty(EnumFilterSelectors.Account);\r\n this.SetEmpty(EnumFilterSelectors.BookingAccount);\r\n }\r\n\r\n OnCurrencyFilterChanged(currency: string | string[]) {\r\n this.SetEmpty(EnumFilterSelectors.BookingAccount);\r\n }\r\n\r\n OnDateChanged(event: any) {\r\n if (!event?.itemData) return;\r\n\r\n this.FilterValues.Date = event?.itemData?.Date;\r\n }\r\n\r\n OnDateFromChanged(event: any) {\r\n if (!event?.value) return;\r\n\r\n this.FilterValues.DateFrom = new Date(event.value.setHours(0, 0, 0));\r\n }\r\n\r\n OnDateToChanged(event: any) {\r\n if (!event?.value) return;\r\n\r\n this.FilterValues.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.FilterValues.DateFrom = event.itemData.DateFrom;\r\n this.FilterValues.DateTo = event.itemData.DateTo;\r\n }\r\n\r\n OnCompanyChanged() {\r\n this.FilterCompaniesChanged.emit();\r\n }\r\n\r\n protected OnDestroyComponent(): void {\r\n this._subscriptions.forEach(x => x.unsubscribe());\r\n }\r\n\r\n private SetEmpty(filterSelector: EnumFilterSelectors) {\r\n const settings = this.FilterSettings[filterSelector];\r\n if (settings) {\r\n this.FilterValues[filterSelector] = settings.IsMultiple ? [] : undefined;\r\n }\r\n }\r\n\r\n private InitFilterService() {\r\n if (this.State.ComponentName && this.State.IsInitialized) {\r\n this.filterService.InitQuickFilter(this.State.ComponentName, this.FilterSettings);\r\n this._subscriptions.push(this.filterService.IsReady$(this.State.ComponentName).subscribe((isReady) => { this.State.IsReadyComponent = isReady; }))\r\n }\r\n }\r\n\r\n}\r\n","export default \"
\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\";","import { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState, BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { EnumBanks, EnumBookingAccountSubtypes, EnumSide } from '../../_proxy/enums';\r\nimport { Globals } from '../../_globals';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { FilterSettings } from '../../components/filter/filter.component';\r\nimport { FilterValues } from '../../components/filter/filter.component';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { formatDate, formatNumber } from 'devextreme/localization';\r\nimport { QuickFilterSettings } from '@kraken/components/quick-filter/quick-filter.component';\r\nimport { BaseParamsFilter } from '@kraken/_proxy/entities/baseparamsfilter.entity';\r\nimport { SelectorSettings } from '@kraken/components/selectors/base-selector.component';\r\n\r\nexport class BaseReportState extends BaseState {\r\n FilterSettings: FilterSettings = new FilterSettings();\r\n FilterValues: FilterValues = new FilterValues();\r\n IsFlatMode = false;\r\n QuickFilterSettings: QuickFilterSettings = new QuickFilterSettings(); \r\n IsLoading: boolean = false;\r\n}\r\n\r\nexport abstract class BaseReportComponent extends BasePageComponent {\r\n protected abstract reportGrid: BaseGridComponent;\r\n protected abstract OnLoadData();\r\n protected abstract OnGetCustomFilterSettings(): FilterSettings;\r\n protected OnGetCustomQuickFilterSettings(): QuickFilterSettings {\r\n return new QuickFilterSettings();\r\n };\r\n\r\n private get gridAny() { return this.reportGrid as any; }\r\n protected get G() { return this.gridAny?.G; }\r\n\r\n protected constructor(A: ServiceBagService, ComponentName: string, StateType: (new () => TState)) {\r\n super(A, ComponentName, BaseEntity, StateType);\r\n }\r\n\r\n protected IsWindowMode() { return this.DisplayMode === EnumPageDisplayModes.Window; }\r\n\r\n override OnInitComponent() {\r\n this.State.FilterSettings = this.OnGetFilterSettings();\r\n this.State.QuickFilterSettings = this.OnGetQuickFilterSettings();\r\n //this.OnResetFilterValues();\r\n }\r\n\r\n protected override OnInitState() {\r\n this.OnResetFilterValues();\r\n this.InitStateFromQuery();\r\n }\r\n\r\n OnGetFilterSettings() {\r\n const filterSettings = {\r\n MaxReportDate: Globals.Yesterday\r\n } as FilterSettings;\r\n return { ...filterSettings, ...this.OnGetCustomFilterSettings() };\r\n }\r\n\r\n private OnGetQuickFilterSettings() {\r\n const quickFilterSettings = {\r\n MaxReportDate: Globals.Yesterday\r\n } as FilterSettings;\r\n return { ...quickFilterSettings, ...this.OnGetCustomQuickFilterSettings() };\r\n }\r\n\r\n override OnGetFilterDescription(): string {\r\n const desciptions = [];\r\n const { Date, DateFrom, DateTo, AmountFrom, AmountTo, Bank } = this.State.FilterValues;\r\n if (Date) {\r\n desciptions.push(`${this.RC('lblReportForDate')}: ${formatDate(Date, this.F.DateFormatShort)}`)\r\n }\r\n\r\n if (DateFrom || DateTo) {\r\n desciptions.push(`${this.RC('lblReportPeriod')}: ${DateFrom ? formatDate(DateFrom, this.F.DateFormatShort) : ''}-${DateFrom ? formatDate(DateTo, this.F.DateFormatShort) : ''}`)\r\n }\r\n\r\n if (AmountFrom || AmountTo) {\r\n desciptions.push(`${this.RC('lblAmount')}: ${AmountFrom ? formatNumber(AmountFrom, this.F.NumberSum) : '-'}${AmountTo ? formatNumber(AmountTo, this.F.NumberSum) : '-'}`)\r\n }\r\n\r\n const banks = Bank as EnumBanks[];\r\n if (banks && banks.length) {\r\n desciptions.push(`${this.RC('lblBanks')}: ${banks.join(\", \")}`)\r\n }\r\n\r\n return desciptions.join(\"\\n\");\r\n }\r\n\r\n private LoadData() {\r\n this.OnBeforeLoadData();\r\n this.OnLoadData();\r\n this.OnAfterLoadData();\r\n }\r\n\r\n protected OnBeforeLoadData() {\r\n this.OnRefreshGrid();\r\n }\r\n protected OnAfterLoadData() {}\r\n\r\n protected OnResetFilterValues() {\r\n if (!this.State.FilterValues) {\r\n this.State.FilterValues = new FilterValues();\r\n }\r\n if (!this.State.FilterValues.OrganizationID) {\r\n this.State.FilterValues.OrganizationID = Globals.OrganizationID;\r\n }\r\n // if (!this.State.FilterValues.Currency) {\r\n // this.State.FilterValues.Currency = Globals.OrganizationDefaultCurrency || 'ILS'\r\n // }\r\n if (!this.State.FilterValues.Company && this.State.FilterSettings?.Company?.IsVisible && Globals.CompanyID) {\r\n if (Globals.CompanyID > 0) { this.State.FilterValues.Company = this.State.FilterSettings.Company.IsMultiple ? [Globals.CompanyID] : Globals.CompanyID; }\r\n else { this.State.FilterValues.Company = this.State.FilterSettings.Company.IsMultiple ? [] : undefined; }\r\n } \r\n }\r\n\r\n OnExpandCollapseChanged(groupLevel: number) {\r\n if (!this.reportGrid) { return; }\r\n const { instance: gridInst } = this.reportGrid.G.grid\r\n gridInst.collapseAll();\r\n\r\n if (groupLevel <= 1) return;\r\n\r\n if (groupLevel === Infinity) {\r\n gridInst.expandAll();\r\n } else {\r\n for (let i = 0; i < groupLevel - 1; i++) {\r\n gridInst.expandAll(i);\r\n }\r\n }\r\n }\r\n\r\n protected InitStateFromQuery() {\r\n if (Object.entries(this.QueryParams).length <= 0) { return; }\r\n const isWindow = Object.keys(this.QueryParams)[0].startsWith('W_');\r\n this.QueryParams = this.A.Navigator.GetQueryParams(isWindow);\r\n this.DisplayMode = isWindow ? EnumPageDisplayModes.Window : EnumPageDisplayModes.FullScreen;\r\n\r\n if (this.QueryParams.IsFlatMode) { this.State.IsFlatMode = this.QueryParams.IsFlatMode === 'true'; }\r\n }\r\n\r\n protected OnOrganizationChanged(org?: number) { }\r\n\r\n protected OnQuickFilterChanged() {\r\n this.LoadData();\r\n }\r\n\r\n OnReadyFilter() {\r\n this.LoadData();\r\n }\r\n\r\n protected override OnApplyFilter() {\r\n this.LoadData();\r\n }\r\n\r\n protected override OnClearFilter() {\r\n this.State.FilterValues = new FilterValues();\r\n this.OnResetFilterValues();\r\n this.LoadData();\r\n }\r\n\r\n protected OnRefreshGrid() {\r\n if (!this.gridAny) { return; }\r\n if (this.State.FilterSettings.Currency?.IsVisible) { this.gridAny.DisplayCurrency = this.State.FilterValues.Currency; }\r\n if (this.State.FilterSettings.IsDateVisible) { this.gridAny.Date = this.State.FilterValues.Date; }\r\n if (this.State.FilterSettings.IsDatesVisible) { this.gridAny.DateFrom = this.State.FilterValues.DateFrom; }\r\n if (this.State.FilterSettings.IsDatesVisible) { this.gridAny.DateTo = this.State.FilterValues.DateTo; }\r\n }\r\n\r\n protected override OnGetToolbarSettings(): ToolbarSettings {\r\n if (!this.G) { return; }\r\n if (this.A.Screen.IsDesktop()) {\r\n const settings = new ToolbarSettings;\r\n settings.IsAllowFilter = !this.IsWindowMode();\r\n settings.IsAllowExport = true;\r\n settings.IsAllowPrint = true;\r\n settings.GridExtender = this.G;\r\n return settings;\r\n }\r\n if (this.A.Screen.IsMobile()) {\r\n const settings = new ToolbarSettings;\r\n settings.IsAllowFilter = true;\r\n return settings;\r\n }\r\n }\r\n\r\n public override OnIsDirtyDisabled(): boolean {\r\n return true;\r\n }\r\n\r\n protected IsExpandCollapseVisible() {\r\n return this.A.Screen.IsDesktop();\r\n }\r\n\r\n protected GetParams() {\r\n let params = new BaseParamsFilter();\r\n params.OrganizationID = this.State.FilterValues.OrganizationID;\r\n params.Companies = this.GetParam(this.State.FilterSettings.Company, this.State.FilterValues.Company);\r\n params.Accounts = this.GetParam(this.State.FilterSettings.Account, this.State.FilterValues.Account);\r\n params.BookingAccounts = this.GetParam(this.State.FilterSettings.BookingAccount, this.State.FilterValues.BookingAccount);\r\n params.AccountGroups = this.GetParam(this.State.FilterSettings.AccountGroup, this.State.FilterValues.AccountGroup);\r\n params.Banks = this.GetParam(this.State.FilterSettings.Bank, this.State.FilterValues.Bank);\r\n params.CurrenciesFilter = this.GetParam(this.State.FilterSettings.CurrencyFilter, this.State.FilterValues.CurrencyFilter);\r\n params.BookingAccountSubtypes = this.GetParam(this.State.FilterSettings.BookingAccountSubtype, this.State.FilterValues.BookingAccountSubtype);\r\n \r\n params.Categories = this.GetParam(this.State.FilterSettings.Category, this.State.FilterValues.Category);\r\n params.ForecastMappers = this.GetParam(this.State.FilterSettings.ForecastMapper, this.State.FilterValues.ForecastMapper);\r\n params.Scenarios = this.GetParam(this.State.FilterSettings.Scenario, this.State.FilterValues.Scenario);\r\n params.ProbabilityLevels = this.GetParam(this.State.FilterSettings.ProbabilityLevel, this.State.FilterValues.ProbabilityLevel);\r\n params.Sides = this.GetParam(this.State.FilterSettings.Side, this.State.FilterValues.Side);\r\n params.BusinessPartners = this.GetParam(this.State.FilterSettings.BusinessPartner, this.State.FilterValues.BusinessPartner);\r\n params.LoadActive = true;\r\n\r\n if (this.State.FilterSettings.Currency?.IsVisible) params.Currency = this.State.FilterValues.Currency as string;\r\n if (this.State.FilterSettings.IsDateVisible) params.Date = this.State.FilterValues.Date;\r\n if (this.State.FilterSettings.IsDatesVisible) params.DateFrom = this.State.FilterValues.DateFrom;\r\n if (this.State.FilterSettings.IsDatesVisible) params.DateTo = this.State.FilterValues.DateTo;\r\n if (this.State.FilterSettings.IsAmountsVisible) params.AmountFrom = this.State.FilterValues.AmountFrom;\r\n if (this.State.FilterSettings.IsAmountsVisible) params.AmountTo = this.State.FilterValues.AmountTo;\r\n\r\n return params as T;\r\n }\r\n\r\n private GetParam(options: SelectorSettings, value: any): T[] {\r\n if (!options?.IsVisible) return undefined;\r\n if (options.IsMultiple) return value as T[];\r\n if (!value) return [];\r\n return [value as T];\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, 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 { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { Admin } from '../../../_proxy/entities/admin.entity';\r\nimport { AdminEndpoint } from '../../../_proxy/endpoints/admin.endpoint';\r\nimport { BaseReportState } from '@kraken/pages/base-report/base-report.component';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\n\r\nexport class State extends BaseReportState {\r\n ShowActiveOnly = false;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\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, State);\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, \r\n 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 DataSourceCustomAction((options: DataLoadOptions) => \r\n this.endpoint.ListEx(this.State.ShowActiveOnly, options));\r\n }\r\n\r\n public OnShowActiveOnlyChanged(value: boolean) {\r\n this.State.ShowActiveOnly = value;\r\n this.LoadDataSource();\r\n }\r\n}\r\n\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumBookingAccountStockTypes } from './../enums';\r\nimport { EnumBookingAccountDepositTypes } from './../enums';\r\nexport class Balance extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'Balance';\r\n }\r\n \r\n public BookingAccountID: number; \r\n public DownloadID: number; \r\n public BalanceNominal: number; \r\n public BalanceActual: number; \r\n public Date: Date; \r\n public DetailsLoans: BalanceDetailLoans[] = []; \r\n public DetailsLoansData: BalanceDetailsLoanData[] = []; \r\n public DetailsStocks: BalanceDetailStocks[] = []; \r\n public DetailsDepos: BalanceDetailDepos[] = []; \r\n public DetailsGuarantees: BalanceDetailGuarantees[] = []; \r\n\t\r\n}\r\n\r\nexport class BalanceDetailLoans extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'BalanceDetailLoans';\r\n }\r\n \r\n public BalanceNominal: number; \r\n public BalanceActual: number; \r\n public BalancePrincipal: number; \r\n public InterestRate: number; \r\n public NextPaymentSum: number; \r\n public StartDate: Date; \r\n public EndDate: Date; \r\n public NextPaymentDate: Date; \r\n public Reference: string; \r\n public Name: string; \r\n public UniqueLoanID: number; \r\n public TempLoanId: number; \r\n public PreviousPaymentSum: number; \r\n public LoanCategoryID: number; \r\n public LineID: number;\r\n}\r\nexport class BalanceDetailsLoanData extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'BalanceDetailsLoanData';\r\n }\r\n \r\n public DetailsLoanLineID: number; \r\n public PaymentTotal: number; \r\n public BalancePrincipal: number; \r\n public PaymentPrincipal: number; \r\n public InterestRate: number; \r\n public PaymentInterest: number; \r\n public ComissionSum: number; \r\n public PaymentDate: Date; \r\n public TempLoanId: number; \r\n public LineID: number;\r\n}\r\nexport class BalanceDetailStocks extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'BalanceDetailStocks';\r\n }\r\n \r\n public BalanceNominal: number; \r\n public BalanceActual: number; \r\n public Reference: string; \r\n public Name: string; \r\n public GroupType: EnumBookingAccountStockTypes; \r\n public Quantity: number; \r\n public AveragePurchasePrice: number; \r\n public LastPrice: number; \r\n public StockCategoryID: number; \r\n public LineID: number;\r\n}\r\nexport class BalanceDetailDepos extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'BalanceDetailDepos';\r\n }\r\n \r\n public BalanceNominal: number; \r\n public BalanceActual: number; \r\n public Name: string; \r\n public DepType: EnumBookingAccountDepositTypes; \r\n public InterestRate: number; \r\n public StartDate: Date; \r\n public EndDate: Date; \r\n public NextExitDate: Date; \r\n public DepositCategoryID: number; \r\n public LineID: number;\r\n}\r\nexport class BalanceDetailGuarantees extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'BalanceDetailGuarantees';\r\n }\r\n \r\n public BalanceNominal: number; \r\n public BalanceActual: number; \r\n public Name: string; \r\n public Type: string; \r\n public LinkageType: string; \r\n public StartDate: Date; \r\n public EndDate: Date; \r\n public GuarantDetails: string; \r\n public GuaranteeCategoryID: number; \r\n public LineID: number;\r\n}\r\n\r\n\r\n","import { Component, Input } from '@angular/core';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCRUDActions } 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 { NotificationTemplateEndpoint } from '../../../_proxy/endpoints/notificationtemplate.endpoint';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport {NotificationTemplateView} from '../../../_proxy/views/notificationtemplate.view';\r\n\r\nexport enum EnumPredefinedNotificationTemplates {\r\n General = 'General',\r\n Detailed = 'Detailed',\r\n TotalBalance = 'TotalBalance',\r\n Empty = 'Empty'\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-organization-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 BaseComponent\r\n{\r\n private _organizationID: number;\r\n @Input() set OrganizationID(value)\r\n {\r\n this._organizationID = value;\r\n if (this._organizationID > -1) this.LoadDataSource();\r\n }\r\n\r\n constructor(A: ServiceBagService, private endpoint: NotificationTemplateEndpoint)\r\n {\r\n super(A, 'NotificationTemplateListComponent', 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 == NotificationTemplateView) this.LoadDataSource();\r\n }\r\n\r\n public LoadDataSource()\r\n {\r\n this.DataSources['NotificationTemplates'] = new DataSourceCustomAction((options: DataLoadOptions) => this.endpoint.ListEx(this._organizationID, options));\r\n this.DS('NotificationTemplates').Reload();\r\n }\r\n\r\n GetLinkParams()\r\n {\r\n return { OrganizationID: this._organizationID };\r\n }\r\n\r\n OnPredefinedTemplateSelected(e: any) {\r\n if (!e.itemData) return;\r\n this.Navigate(['/pages/notification-organization-template/new'], { OrganizationID: this._organizationID, PredefinedTemplate: e.itemData.Value });\r\n }\r\n}\r\n\r\n","import { Component, Input } 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 { EnumBookingAccountSubtypes } from '../../_proxy/enums';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { Format, formatNumber, parseNumber } from 'devextreme/localization';\r\nimport { DateHelpers } from '@m4u-angular/core/helpers/DateHelpers';\r\nimport { ContextMenuElement } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { Balance } from '@kraken/_proxy/entities/balance.entity';\r\nimport { ExportingEvent } from 'devextreme/ui/data_grid';\r\nimport { EnumBalanceDetailsReportModes } from '../../_client.enums';\r\n\r\nclass State extends BaseState {\r\n IsFlatMode: boolean;\r\n IsWindowMode: boolean;\r\n DisplayCurrency: string;\r\n Date: Date;\r\n GroupByCompany: boolean;\r\n GroupByBookingAccountSubtype: boolean;\r\n GroupByCurrency: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-balance-report-grid',\r\n templateUrl: './balance-report-grid.component.html',\r\n styleUrls: ['./balance-report-grid.component.scss']\r\n})\r\nexport class BalanceReportGridComponent extends BaseGridComponent {\r\n @Input() set DisplayCurrency(value: string) {\r\n this.State.DisplayCurrency = value;\r\n }\r\n @Input() set Date(value: Date) {\r\n this.State.Date = value;\r\n }\r\n\r\n @Input() set IsWindowMode(value: boolean) {\r\n this.State.IsWindowMode = value;\r\n }\r\n\r\n @Input() set IsFlatMode(value: boolean) {\r\n this.State.IsFlatMode = value;\r\n }\r\n\r\n @Input() set GroupByCompany(value: boolean) {\r\n this.State.GroupByCompany = value;\r\n }\r\n\r\n @Input() set GroupByBookingAccountSubtype(value: boolean) {\r\n this.State.GroupByBookingAccountSubtype = value;\r\n }\r\n\r\n @Input() set GroupByCurrency(value: boolean) {\r\n this.State.GroupByCurrency = value;\r\n }\r\n\r\n @Input() HasCreditLimits = false;\r\n @Input() IsLoading: boolean = false;\r\n @Input() BalanceType: string;\r\n\r\n //subtypes that has already loaded data\r\n private _subTypesForDetailsLoadedData = [EnumBookingAccountSubtypes.Deposits, EnumBookingAccountSubtypes.Loans, \r\n EnumBookingAccountSubtypes.Stocks, EnumBookingAccountSubtypes.Guarantee];\r\n\r\n constructor(A: ServiceBagService, public screenService: ScreenService) {\r\n super(A, 'BalanceReportGridComponent', Balance, State);\r\n this.BindHandler('OnCalculateSummary');\r\n this.BindHandler('GetGroupRowCaption');\r\n }\r\n\r\n get TransactionsDateFrom(): Date {\r\n return DateHelpers.AddMonth(this.State.Date, -1);\r\n }\r\n\r\n OnExporting({ component }: ExportingEvent) {\r\n component.columnOption('Notes', 'visible', true);\r\n }\r\n\r\n onAfterExporting({ component }: ExportingEvent) {\r\n component.columnOption('Notes', 'visible', false);\r\n }\r\n\r\n customizeExcelCell = options => {\r\n const { gridCell, excelCell } = options;\r\n const { value } = excelCell;\r\n const { rowType, column } = gridCell;\r\n\r\n if (rowType === 'header') return;\r\n\r\n const currencyOriginal = gridCell.data?.Currency;\r\n const notes = gridCell.data?.Notes;\r\n\r\n const gridFormatOriginal = this.GetFormatWithCurrency(this.F.NumberSum, currencyOriginal);\r\n const excelFormatOriginal = this.GetFormatWithCurrency(this.F.NumberSum, currencyOriginal, true);\r\n\r\n const gridFormatDefault = this.GetFormatWithCurrency(this.F.NumberSum, this.State.DisplayCurrency);\r\n const excelFormatDefault = this.GetFormatWithCurrency(this.F.NumberSum, this.State.DisplayCurrency, true);\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 switch (column.name) {\r\n case 'CreditLimitSum':\r\n case 'TotalAvailableFunds':{\r\n excelCell.numFmt = excelFormatDefault;\r\n excelCell.value = parseNumberValue(value, gridFormatDefault);\r\n break;\r\n }\r\n case 'BalanceOriginal': {\r\n excelCell.numFmt = excelFormatOriginal;\r\n excelCell.value = parseNumberValue(value, gridFormatOriginal);\r\n break;\r\n }\r\n case 'BalanceAmount': {\r\n excelCell.numFmt = excelFormatDefault;\r\n excelCell.value = parseNumberValue(value, gridFormatDefault);\r\n\r\n if (notes) {\r\n excelCell.note = notes;\r\n }\r\n break;\r\n }\r\n }\r\n };\r\n\r\n GetCurrencySymbol = (currency: string = this.State.DisplayCurrency) => {\r\n return (this.LISTITEMX('Currencies', currency) as any)?.Symbol ?? '';\r\n };\r\n\r\n GetFormatWithCurrency = (format = this.F.NumberSum, currency?: string, forExcel = false) => {\r\n const symbol = this.GetCurrencySymbol(currency);\r\n const formats = format.split(';');\r\n\r\n if (forExcel) {\r\n const [positiveFormat] = formats;\r\n return this.screenService.IsRTL()\r\n ? `${symbol} ${positiveFormat};${symbol} -${positiveFormat}`\r\n : `${positiveFormat} ${symbol}`;\r\n }\r\n\r\n // Put currency symbol to the end: 12 345.00 $; 12 345.00- $\r\n return formats.map(f => `${f} ${symbol}`).join(';');\r\n };\r\n\r\n OnInitialized(e) {\r\n e.component.columnOption('command:adaptive', 'visible', true);\r\n }\r\n\r\n OnDrillDown(rowData?: any): void {\r\n const { OrganizationID, BookingAccountID, Subtype, AccountID, CompanyID } = rowData;\r\n if (Subtype == EnumBookingAccountSubtypes.Current)\r\n this.Navigate(['/pages/transaction-report'], {\r\n OrganizationID: OrganizationID,\r\n BookingAccountID: BookingAccountID,\r\n DateFrom: this.TransactionsDateFrom,\r\n DateTo: this.State.Date\r\n });\r\n if (Subtype == EnumBookingAccountSubtypes.CreditCard)\r\n this.Navigate(['/pages/credit-cards-report'], {\r\n OrganizationID: OrganizationID,\r\n BookingAccountID: BookingAccountID\r\n });\r\n if (Subtype == EnumBookingAccountSubtypes.Deposits)\r\n this.Navigate(['/pages/balance-depos-report'], {\r\n OrganizationID: OrganizationID,\r\n CompanyID: CompanyID,\r\n AccountID: AccountID,\r\n BookingAccountID: BookingAccountID,\r\n DateFrom: this.TransactionsDateFrom,\r\n DateTo: this.State.Date,\r\n Mode: EnumBalanceDetailsReportModes.Deposits\r\n });\r\n }\r\n\r\n OnCellPrepared(cell: any) {\r\n if(cell.rowType === 'data' && cell.column.command === 'expand' \r\n && (!cell.data || this._subTypesForDetailsLoadedData.some(item => item === cell.data.Subtype)\r\n && cell.data.DetailsLoans.length === 0 && cell.data.DetailsStocks.length === 0 && cell.data.DetailsDepos.length === 0 && cell.data.DetailsGuarantees.length === 0)) {\r\n if (!cell.cellElement || !cell.cellElement.childNodes.length) return;\r\n\r\n cell.cellElement.classList.remove('dx-datagrid-expand');\r\n cell.cellElement.childNodes[0].classList?.remove('dx-datagrid-group-closed');\r\n }\r\n }\r\n\r\n CustomSortingFunction(rowData) {\r\n const column = this as any;\r\n if (rowData.Currency == 'ILS') return column.sortOrder == 'asc' ? 'aaa' : 'zzz';\r\n return rowData.Currency;\r\n }\r\n\r\n OnCalculateSummary(e) {\r\n const currencyGroupIndex = this.G.grid.instance.columnOption('Currency', 'groupIndex');\r\n if (e.name == 'BalanceAmount' && e.groupIndex == currencyGroupIndex) {\r\n if (e.summaryProcess == 'start') e.totalValue = 0;\r\n if (e.summaryProcess == 'calculate') e.totalValue += e.value;\r\n }\r\n if (e.name == 'BookingAccountSubType' && e.summaryProcess == 'calculate')\r\n e.totalValue = (this.LISTITEMX('BookingAccountSubTypes', e.value) as any).SortOrder;\r\n if (e.name == 'Currency' && e.summaryProcess == 'calculate')\r\n e.totalValue = (this.LISTITEMX('Currencies', e.value) as any).SortOrder;\r\n }\r\n\r\n GetGroupRowCaption(e) {\r\n const summaryItem = e.summaryItems && e.summaryItems[0];\r\n if (!summaryItem || !summaryItem.value || !summaryItem.valueFormat) return e.displayValue;\r\n const value = summaryItem.value;\r\n const currencyText = this.State.DisplayCurrency\r\n ? (this.LISTITEMX('Currencies', this.State.DisplayCurrency) as any).Symbol\r\n : '';\r\n return `${e.displayValue} (${formatNumber(value, summaryItem.valueFormat)} ${\r\n currencyText || e.displayValue\r\n })`;\r\n }\r\n\r\n IsCurrentOrCreditCard(e) {\r\n return (\r\n e.row.data.Subtype == EnumBookingAccountSubtypes.Current ||\r\n e.row.data.Subtype == EnumBookingAccountSubtypes.CreditCard\r\n );\r\n }\r\n\r\n private IsRelevantSubtype(rowData) {\r\n return (\r\n rowData?.Subtype === EnumBookingAccountSubtypes.Current ||\r\n rowData?.Subtype === EnumBookingAccountSubtypes.CreditCard ||\r\n rowData?.Subtype === EnumBookingAccountSubtypes.Deposits\r\n );\r\n }\r\n\r\n private GetDrillDownText(rowData) {\r\n return rowData?.Subtype === EnumBookingAccountSubtypes.Current\r\n ? this.RC('btnTransactionsReport')\r\n : rowData?.Subtype === EnumBookingAccountSubtypes.CreditCard? this.RC('btnCreditCardsReport') : this.RC('btnDepositsReport');\r\n }\r\n\r\n protected override GetGridRowContextMenu(options?: any): ContextMenuElement[] {\r\n return [\r\n {\r\n text: this.GetDrillDownText(options?.data),\r\n visible: this.IsRelevantSubtype(options?.data),\r\n onClick: () => this.OnDrillDown(options?.data)\r\n }\r\n ];\r\n }\r\n\r\n public GetAmountClass(cellData: any) {\r\n const amount = this.BalanceType === 'Actual' ? cellData.BalanceAmount : cellData.BalanceNominalAmount;\r\n\r\n return amount == 0 ? '' : amount > 0 ? 'positive-amount' : 'negative-amount';\r\n }\r\n\r\n GetBalanceAmountColumnName(){\r\n return this.BalanceType === 'Actual' ? 'BalanceAmount' : 'BalanceNominalAmount';\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n {{GetGroupRowCaption(data) | LookupList: LIST('BookingAccountSubTypes')}}\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n {{ (BalanceType === 'Actual' ? cell.data.BalanceAmount : cell.data.BalanceNominalAmount) | formatPriceWithCurrency:\\r\\n GetCurrencySymbol(State.DisplayCurrency) }}\\r\\n \\r\\n {{cell.data.Notes ? '(' + cell.data.Notes + ')' : ''}}\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
{{cell.data.CurrencyRate | formatNumberRate}}
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
0 ? 'positive-amount' : 'negative-amount'\\\">\\r\\n
{{cell.data.BalanceOriginal | formatPriceWithCurrency:\\r\\n GetCurrencySymbol(cell.data.Currency)}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n 0 ? 'positive-amount' : 'negative-amount'\\\">\\r\\n {{cell.data.CreditLimitSum | formatPriceWithCurrency:\\r\\n GetCurrencySymbol(State.DisplayCurrency) }}\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n 0 ? 'positive-amount' : 'negative-amount'\\\">\\r\\n {{cell.data.TotalAvailableFunds | formatPriceWithCurrency:\\r\\n GetCurrencySymbol(State.DisplayCurrency)}}\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n {{GetGroupRowCaption(data)}}\\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 { BalanceView } from './../views/balance.view';\r\nimport { BalanceManualEditView } from './../views/balancemanualedit.view';\r\nimport { BalanceDetailStocksView } from './../views/balancedetailstocks.view';\r\nimport { BalanceDetailLoansView } from './../views/balancedetailloans.view';\r\nimport { BalanceDetailDepositsView } from './../views/balancedetaildeposits.view';\r\nimport { BalanceDetailGuaranteesView } from './../views/balancedetailguarantees.view';\r\nimport { AssetsLiabilitiesReportView } from './../views/assetsliabilitiesreport.view';\r\nimport { BalanceDetailsLoanData } from './../entities/balance.entity';\r\nimport { BalanceReportParams } from './../params/balancereport.param';\r\nimport { BalanceManualEditSaveParams } from './../params/balancemanualeditsave.param';\r\nimport { ResetManualBalanceEntryParams } from './../params/resetmanualbalanceentry.param';\r\nimport { DashboardParams } from './../params/dashboard.param';\r\n@Injectable()\r\nexport class BalanceEndpoint extends BaseEndpoint\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"Balance\", api);}\r\n\t\r\n\r\n public ListForDate(Params: BalanceReportParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListForDate', Params, undefined );\r\n }\r\n\r\n public ListForBalanceReport(Params: BalanceReportParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListForBalanceReport', Params, undefined );\r\n }\r\n\r\n public ListForBalanceManualEdit(Params: BalanceReportParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListForBalanceManualEdit', Params, undefined );\r\n }\r\n\r\n public SaveManualBalances(Params: BalanceManualEditSaveParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'SaveManualBalances', Params, undefined );\r\n }\r\n\r\n public ResetManualBalance(Params: ResetManualBalanceEntryParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ResetManualBalance', Params, undefined );\r\n }\r\n\r\n public ListStocks(Params: BalanceReportParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListStocks', Params, undefined );\r\n }\r\n\r\n public ListLoans(Params: BalanceReportParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListLoans', Params, undefined );\r\n }\r\n\r\n public ListDepos(Params: BalanceReportParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListDepos', Params, undefined );\r\n }\r\n\r\n public ListGuarant(Params: BalanceReportParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListGuarant', Params, undefined );\r\n }\r\n\r\n public ListForPeriods(Params: BalanceReportParams, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListForPeriods', Params, options?.GetLoadOptions() );\r\n }\r\n\r\n public ListForDashboardByAccount(Params: DashboardParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListForDashboardByAccount', Params, undefined );\r\n }\r\n\r\n public ListForDashboardByAccountAndCurrency(Params: DashboardParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListForDashboardByAccountAndCurrency', Params, undefined );\r\n }\r\n\r\n public ListForAssetsVsLiabilitiesReport(Params: BalanceReportParams, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListForAssetsVsLiabilitiesReport', Params, options?.GetLoadOptions() );\r\n }\r\n\r\n public ListBalanceLoansData(BalanceID: number, LineID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'ListBalanceLoansData', {BalanceID: BalanceID, LineID: LineID} );\r\n }\r\n\r\n public GetNavigationFilters(BalanceID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetNavigationFilters', {BalanceID: BalanceID} );\r\n }\r\n}\r\n\r\n","import { Component, ViewChild } from '@angular/core';\r\nimport { QuickFilterComponent, QuickFilterSettings } from '@kraken/components/quick-filter/quick-filter.component';\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 { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { FilterSettings } from '../../components/filter/filter.component';\r\nimport { Globals } from '../../_globals';\r\nimport { BalanceEndpoint } from '../../_proxy/endpoints/balance.endpoint';\r\nimport { BalanceReportParams } from '../../_proxy/params/balancereport.param';\r\nimport { BaseReportComponent, BaseReportState } from '../base-report/base-report.component';\r\nimport { BalanceReportGridComponent } from './balance-report-grid.component';\r\n\r\nclass State extends BaseReportState {\r\n IsFromDashboard: boolean;\r\n IsHideZeroBalances = true;\r\n BalanceType = 'Actual';\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-balance-report',\r\n templateUrl: './balance-report.component.html',\r\n styleUrls: ['./balance-report.component.scss']\r\n})\r\nexport class BalanceReportComponent extends BaseReportComponent{\r\n @ViewChild('reportGrid') reportGrid: BalanceReportGridComponent;\r\n @ViewChild('quickFilter') quickfilterComponent: QuickFilterComponent;\r\n\r\n constructor(A: ServiceBagService, private balanceEndpoint: BalanceEndpoint, public screenService: ScreenService) {\r\n super(A, 'BalanceReportComponent', State);\r\n }\r\n\r\n override OnInitState() {\r\n this.InitStateFromQuery();\r\n this.OnResetFilterValues();\r\n }\r\n\r\n override OnInitComponentFinished() {\r\n\r\n }\r\n\r\n protected override InitStateFromQuery() {\r\n super.InitStateFromQuery();\r\n if (this.QueryParams.IsFromDashboard) {\r\n this.State.IsFromDashboard = !!this.QueryParams.IsFromDashboard;\r\n }\r\n if (this.QueryParams.BalanceType) {\r\n this.State.BalanceType = this.QueryParams.BalanceType;\r\n }\r\n }\r\n\r\n protected override OnGetCustomFilterSettings(): FilterSettings {\r\n return {\r\n Company: { IsVisible: true, IsMultiple: true },\r\n AccountGroup: { IsVisible: true, IsMultiple: true },\r\n Account: { IsVisible: true, IsMultiple: true },\r\n CurrencyFilter: { IsVisible: true, IsMultiple: true },\r\n BookingAccountSubtype: { IsVisible: true, IsMultiple: true },\r\n BookingAccount: { IsVisible: true, IsMultiple: true },\r\n Bank: { IsVisible: true, IsMultiple: true },\r\n Currency: { IsVisible: true },\r\n IsDateVisible: true,\r\n MaxReportDate: Globals.Yesterday\r\n } as FilterSettings;\r\n }\r\n\r\n protected override OnGetCustomQuickFilterSettings(): QuickFilterSettings {\r\n return {\r\n Company: { IsVisible: true, IsMultiple: true },\r\n Account: { IsVisible: true, IsMultiple: true },\r\n BookingAccount: { IsVisible: true, IsMultiple: true },\r\n Bank: { IsVisible: true, IsMultiple: true },\r\n IsDateVisible: true\r\n } as QuickFilterSettings;\r\n }\r\n\r\n protected override OnResetFilterValues() {\r\n super.OnResetFilterValues();\r\n this.State.FilterValues.Date = Globals.Yesterday;\r\n }\r\n\r\n protected override OnLoadData() {\r\n if (!this.State.FilterValues.OrganizationID) {\r\n this.DataSources['Balances'] = undefined;\r\n return;\r\n }\r\n this.State.IsLoading = true;\r\n const params = this.GetParams();\r\n params.IsLoadDetails = true;\r\n params.IsHideZeroBalances = this.State.IsHideZeroBalances;\r\n\r\n this.DataSources['Balances'] = new DataSourceCustomAction(\r\n (options: DataLoadOptions) => this.balanceEndpoint.ListForBalanceReport(params),\r\n undefined, (data) => {\r\n this.State.IsLoading = false;\r\n if (data.some(b => b.CreditLimitSum)) {\r\n this.reportGrid.HasCreditLimits = true;\r\n }\r\n }, false);\r\n }\r\n\r\n OnBalanceTypeChanged() {\r\n this.OnLoadData();\r\n }\r\n\r\n //override OnNavigateBack(): NavigateBackParams {\r\n // return {\r\n // IsAllowNavigateBack: this.State.IsFromDashboard || super.OnNavigateBack().IsAllowNavigateBack,\r\n // Callback: () => this.Navigate(['/pages/dashboard'])\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\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 { Consent } from './../entities/consent.entity';\r\nimport { BankPass } from './../entities/bankpass.entity';\r\nimport { ConsentLink } from './../entities/consent.entity';\r\nimport { ExchangeAccessCodeParams } from './../params/exchangeaccesscode.param';\r\nimport { UpdateExternalAccountMappingParams } from './../params/updateexternalaccountmapping.param';\r\n@Injectable()\r\nexport class ConsentsEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"Consents\", api);}\r\n\t\r\n\r\n public StartNewConcent(BankPassID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'StartNewConcent', {BankPassID: BankPassID} );\r\n }\r\n\r\n public ExchangeAccessCode(Params: ExchangeAccessCodeParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ExchangeAccessCode', Params, undefined );\r\n }\r\n\r\n public UpdateExternalAccountMapping(Params: UpdateExternalAccountMappingParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'UpdateExternalAccountMapping', 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 { Consent } from './../entities/consent.entity';\r\nimport { SetPlaidAccessTokenParams } from './../params/setplaidaccesstoken.param';\r\n@Injectable()\r\nexport class PlaidEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"Plaid\", api);}\r\n\t\r\n\r\n public GetLinkToken() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetLinkToken', undefined );\r\n }\r\n\r\n public GetLinkTokenInRefreshMode(BankPassID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetLinkTokenInRefreshMode', {BankPassID: BankPassID} );\r\n }\r\n\r\n public SetAccessToken(Params: SetPlaidAccessTokenParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'SetAccessToken', Params, undefined );\r\n }\r\n}\r\n\r\n","import { Injectable, Renderer2, RendererFactory2 } from '@angular/core';\r\nimport { Observable, of } from 'rxjs';\r\n\r\n@Injectable( {\r\n providedIn: 'root'\r\n})\r\nexport class PlaidScriptLoader {\r\n private plaidScriptLoaded: boolean = false;\r\n private renderer: Renderer2;\r\n\r\n constructor(rendererFactory: RendererFactory2) {\r\n this.renderer = rendererFactory.createRenderer(null, null);\r\n }\r\n\r\n LoadPlaidScript(): Observable {\r\n const scriptUrl = 'https://cdn.plaid.com/link/v2/stable/link-initialize.js';\r\n\r\n if (this.plaidScriptLoaded) {\r\n return of(true);\r\n }\r\n\r\n return new Observable((observer) => {\r\n const script = this.renderer.createElement('script');\r\n script.src = scriptUrl;\r\n\r\n script.onload = () => {\r\n this.plaidScriptLoaded = true;\r\n observer.next(true);\r\n observer.complete();\r\n };\r\n\r\n script.onerror = () => {\r\n console.error(`Failed to load script: ${scriptUrl}`);\r\n observer.error(`Failed to load script: ${scriptUrl}`);\r\n };\r\n\r\n this.renderer.appendChild(document.body, script);\r\n });\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { PlaidEndpoint } from '@kraken/_proxy/endpoints/plaid.endpoint';\r\nimport { catchError, Observable, of, switchMap } from 'rxjs';\r\nimport { PlaidScriptLoader } from './plaid-script-loader.service';\r\n\r\ndeclare const Plaid: any;\r\nexport type PlaidOnSuccessDelegate = (publicToken: string, metadata: any) => void;\r\n\r\nexport interface PlaidEvent {\r\n Event: 'success' | 'exit';\r\n PublicToken: string;\r\n Metadata: any;\r\n} \r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class PlaidService {\r\n private plaidHandler: any;\r\n\r\n constructor(private plaidEndpoint: PlaidEndpoint, \r\n private plaidScriptLoader: PlaidScriptLoader) {\r\n }\r\n\r\n FetchLinkTokenAndInitializePlaid(bankPassID?: number): Observable {\r\n // 1. Load Plaid script via CDN. TODO: refactor if possible\r\n // 2. Init Plaid so, that we return public token and metadata as Observable on success\r\n // 3. Instantly open Plaid Link, so, that a User can select Financial Institutions and Accounts data to share\r\n return this.plaidScriptLoader.LoadPlaidScript().pipe(\r\n switchMap((scriptLoaded) => {\r\n if (scriptLoaded) {\r\n return bankPassID? this.plaidEndpoint.GetLinkTokenInRefreshMode(bankPassID) : this.plaidEndpoint.GetLinkToken();\r\n } else {\r\n throw new Error('Plaid script failed to load');\r\n }\r\n }),\r\n switchMap((response) => this.InitPlaid(response.Data)),\r\n catchError((error) => {\r\n console.error('Error during Plaid process:', error);\r\n return of(null); \r\n })\r\n );\r\n }\r\n\r\n // Init Plaid and instantly open Link. \r\n private InitPlaid(token: string) : Observable {\r\n return new Observable((observer) => {\r\n this.plaidHandler = Plaid.create({\r\n token: token,\r\n onSuccess: (publicToken: string, metadata: any) => {\r\n const event: PlaidEvent = {\r\n Event: 'success',\r\n PublicToken: publicToken,\r\n Metadata: metadata,\r\n };\r\n observer.next(event);\r\n },\r\n onExit: (err: any, metadata: any) => {\r\n const event: PlaidEvent = {\r\n Event: 'success',\r\n PublicToken: undefined,\r\n Metadata: metadata,\r\n };\r\n observer.next(event);\r\n }\r\n });\r\n\r\n\r\n this.OpenPlaidLink();\r\n });\r\n }\r\n\r\n // private InitializePlaid(token: string, onSuccess: PlaidOnSuccessDelegate): void {\r\n // this.plaidHandler = Plaid.create({\r\n // token: token,\r\n // onSuccess: (publicToken: string, metadata: any) => {\r\n // console.log('onSuccess');\r\n // onSuccess(publicToken, metadata);\r\n // },\r\n // onExit: (err: any, metadata: any) => {\r\n // if (err != null) {\r\n // console.error('Plaid link exited with error:', err);\r\n // }\r\n // console.log('OnEXIT ');\r\n // console.log(err);\r\n // console.log(metadata);\r\n // }\r\n // });\r\n // }\r\n\r\n private OpenPlaidLink(): void {\r\n if (this.plaidHandler) {\r\n this.plaidHandler.open();\r\n } else {\r\n console.error('Plaid handler is not initialized!');\r\n throw new Error('Plaid handler is not initialized!');\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 { BankPassView } from './../views/bankpass.view';\r\nexport class SaveBankPassParams extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'SaveBankPassParams';\r\n }\r\n \r\n public BankPass: BankPassView = new BankPassView; \r\n public PlaidPublicToken: string; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { Component, ViewChild } from '@angular/core';\r\nimport { CompanyListParams } from '@kraken/_proxy/params/companylist.param';\r\nimport { ContextMenuElement, ToolbarSettings } 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 { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { BaseEntityResponse, BaseState, GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { EnumMessageBoxTypes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { MessageBoxDialogComponent } from '@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\nimport { OtpInputDialogComponent } from '../../components/otp-input-dialog/otp-input-dialog.component';\r\nimport { UploadDialogComponent } from '../../dialogs/upload-dialog/upload-dialog.component';\r\nimport { BanksListService } from '../../services/banks-list.service';\r\nimport { AccountEndpoint } from '../../_proxy/endpoints/account.endpoint';\r\nimport { BankPassEndpoint } from '../../_proxy/endpoints/bankpass.endpoint';\r\nimport { CompanyEndpoint } from '../../_proxy/endpoints/company.endpoint';\r\nimport { DownloadRequestEndpoint } from '../../_proxy/endpoints/downloadrequest.endpoint';\r\nimport { OrganizationEndpoint } from '../../_proxy/endpoints/organization.endpoint';\r\nimport { UserEndpoint } from '../../_proxy/endpoints/user.endpoint';\r\nimport { Organization } from '../../_proxy/entities/organization.entity';\r\nimport { EnumBankPassAccessTypes, EnumBankPassAutoDiscoverModes, EnumBankPassCredentialValidity, EnumBankPassTwoFactorMethod, \r\n EnumBanks, \r\n EnumConsentStatuses} from '../../_proxy/enums';\r\nimport { BankPassView } from '../../_proxy/views/bankpass.view';\r\nimport { ConsentsEndpoint } from '@kraken/_proxy/endpoints/consents.endpoint';\r\nimport { PlaidService } from '@kraken/services/plaid.service';\r\nimport { take } from 'rxjs';\r\nimport { SaveBankPassParams } from '@kraken/_proxy/params/savebankpass.param';\r\n\r\nclass State extends BaseState {\r\n Organization: Organization;\r\n IsConfirmedReadonly: boolean = false;\r\n TooltipVisible: boolean = false;\r\n BankPredefined = false;\r\n IsUsernameReadOnly: boolean;\r\n PlaidPublicToken: string;\r\n PlaidMetadata: any;\r\n BankPassAccessTypes: GenericListEntity[] = [];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-bankpass',\r\n templateUrl: './bankpass.component.html',\r\n styleUrls: ['./bankpass.component.scss']\r\n})\r\nexport class BankPassComponent extends BasePageCRUDComponent {\r\n @ViewChild('messageBox') messageBoxDialog: MessageBoxDialogComponent;\r\n @ViewChild('otpInputDialog') otpInputDialog: OtpInputDialogComponent;\r\n @ViewChild(UploadDialogComponent) uploadDialog: UploadDialogComponent;\r\n\r\n\r\n constructor(A: ServiceBagService, private endpoint: BankPassEndpoint, private organizationEndpoint: OrganizationEndpoint,\r\n private companyEndpoint: CompanyEndpoint, private userEndpoint: UserEndpoint, public screen: ScreenService,\r\n private downloadRequestEndpoint: DownloadRequestEndpoint, private banksListService: BanksListService,\r\n private accountEndpoint: AccountEndpoint, private consentsEndpoint: ConsentsEndpoint, private plaidService: PlaidService) {\r\n super(A, 'BankPassComponent', BankPassView, State, endpoint);\r\n\r\n this.BindHandler('ValidateCompany');\r\n }\r\n\r\n override OnInitComponent() {\r\n this.QueryParams = this.A.Navigator.GetQueryParams(this.A.Navigator.IsCurrentRouteWindow());\r\n if (this.QueryParams.OrganizationID) {\r\n const params = new CompanyListParams();\r\n params.OrganizationID = this.QueryParams.OrganizationID;\r\n params.LoadActive = true;\r\n\r\n this.Do(\r\n this.organizationEndpoint.Get(this.QueryParams.OrganizationID), \r\n false, \r\n (response: BaseEntityResponse) => {\r\n this.State.Organization = response.Entity;\r\n\r\n this.State.BankPassAccessTypes.push(...this.LIST('BankPassAccessTypes').filter(\r\n i => this.State.Organization.IsLicensedForForeignBanks || i.Value != EnumBankPassAccessTypes.Plaid));\r\n }\r\n );\r\n\r\n this.DataSources['Users'] = new DataSourceCustomAction(\r\n (options: DataLoadOptions) => this.userEndpoint.ListEx(this.QueryParams.OrganizationID, true, options)\r\n );\r\n\r\n this.DataSources['Companies'] = new DataSourceCustomAction(\r\n (options: DataLoadOptions) => this.companyEndpoint.ListEx(params, options)\r\n );\r\n }\r\n\r\n if (this.QueryParams.Bank) {\r\n this.Entity.Bank = this.QueryParams.Bank;\r\n this.State.BankPredefined = true;\r\n }\r\n\r\n if (this.QueryParams.IsFromEmail && this.QueryParams.IsFromEmail == 'true') {\r\n this.State.IsUsernameReadOnly = true;\r\n }\r\n\r\n this.DataSources['Banks'] = this.banksListService.GetGroupedDSFromList(this.DS('AllowedBanks') as unknown as GenericListEntity[]);\r\n }\r\n\r\n override OnEntityInitObjectName() {\r\n return this.Entity && this.Entity.UserName;\r\n }\r\n\r\n override OnInitContextMenus(): ContextMenuElement[] {\r\n if (this.IsAddMode) return undefined;\r\n const menus: ContextMenuElement[] =\r\n [\r\n {\r\n text: this.RC('btnDownloadUpdatedData'),\r\n visible: true,\r\n onClick: this.OnDownloadRequestedData.bind(this)\r\n },\r\n {\r\n text: this.RC('btnStartNewConsent'),\r\n visible: this.Entity.AccessType == EnumBankPassAccessTypes.PSD,\r\n onClick: this.OnStartNewConsent.bind(this)\r\n },\r\n {\r\n text: this.RC('btnStartAutoDiscover'),\r\n visible: this.Entity.AccessType == EnumBankPassAccessTypes.PSD \r\n && this.Entity.AutoDiscoverMode!=EnumBankPassAutoDiscoverModes.None,\r\n onClick: this.OnStartAutoDiscover.bind(this)\r\n },\r\n {\r\n text: this.RC('btnShowAccountMappings'),\r\n visible: this.Entity.AccessType == EnumBankPassAccessTypes.Plaid \r\n || this.Entity.AccessType == EnumBankPassAccessTypes.PSD,\r\n onClick: this.ExecuteAccountsMapping.bind(this)\r\n },\r\n {\r\n text: this.RC('btnRemap'),\r\n visible: this.Entity.AccessType == EnumBankPassAccessTypes.Plaid,\r\n onClick: this.PlaidRemap.bind(this)\r\n },\r\n {\r\n text: this.RC('btnUpload'),\r\n visible: this.Entity.IsHasAutomaticDeployment,\r\n onClick: this.OnUpload.bind(this)\r\n },\r\n {\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 return menus;\r\n }\r\n\r\n OnStartNewConsent() {\r\n const newWindow = window.open('', '_blank', 'width=800,height=600,resizable,scrollbars');\r\n\r\n newWindow.addEventListener('message', (event) => {\r\n if (event.origin !== window.location.origin) {\r\n return;\r\n }\r\n\r\n if (event.data && event.data.type === 'Kr_callback') {\r\n const callback = event.data.callbackResponse as BaseEntityResponse;\r\n\r\n if(callback) {\r\n if(callback.IsSuccess) {\r\n\r\n this.UI.InfoMessage(this.RC('msgSuccess'));\r\n\r\n this.ExecuteAccountsMapping();\r\n\r\n } else {\r\n this.UI.StopMessage(callback.ResponseMessage);\r\n }\r\n }\r\n\r\n newWindow.close();\r\n }\r\n });\r\n\r\n this.Do(\r\n this.consentsEndpoint.StartNewConcent(this.Entity.EntryID), \r\n false, \r\n (response)=> {\r\n const url = this.FormatCallbackUrl(response.Data);\r\n newWindow.location.href = url;\r\n }\r\n );\r\n }\r\n\r\n OnStartAutoDiscover() {\r\n\r\n }\r\n\r\n OnDownloadRequestedData() {\r\n \r\n // whether we send download request, first save entity to pass correct credentials to downloader\r\n if (this.IsDirty) { \r\n super.OnDoSave(); \r\n }\r\n\r\n if (!this.Entity.IsActive || this.Entity.IsTemporary) return;\r\n \r\n\r\n this.messageBoxDialog.Type = EnumMessageBoxTypes.YesNo;\r\n this.messageBoxDialog.Title = this.RC('btnDownloadUpdatedData');\r\n this.messageBoxDialog.Prompt = this.RC('msgBankPassDownloadRequestQuestion');\r\n this.messageBoxDialog.ShowDialogShort(() => {\r\n this.Do(this.downloadRequestEndpoint.DownloadBankPassUpdatedData(this.Entity.EntryID), true, (data) => {\r\n if (data.Entity) {\r\n this.otpInputDialog.downloadRequest = data.Entity;\r\n this.otpInputDialog.Message = data.ResponseMessage;\r\n this.otpInputDialog.ShowDialogShort((Otp) => this.ClosePage(), () => this.ClosePage());\r\n } else {\r\n this.ClosePage();\r\n }\r\n });\r\n },\r\n () => {\r\n this.ClosePage();\r\n }\r\n );\r\n }\r\n\r\n override OnEntityNew() {\r\n this.Entity.IsActive = true;\r\n this.Entity.IsTemporary = false;\r\n this.Entity.IsConfirmedReadOnly = false;\r\n this.Entity.OrganizationID = this.QueryParams.OrganizationID;\r\n this.Entity.IsDefineAvailabilityWindow = false;\r\n this.Entity.AccessType = EnumBankPassAccessTypes.Scrapping;\r\n this.Entity.AutoDiscoverMode = EnumBankPassAutoDiscoverModes.None;\r\n }\r\n\r\n override OnEntitySaved() {\r\n if (!this.IsAddMode) {\r\n this.OnDownloadRequestedData();\r\n } else if(this.Entity.AccessType != EnumBankPassAccessTypes.Plaid) {\r\n this.ClosePage();\r\n }\r\n }\r\n\r\n OnUpload() {\r\n this.uploadDialog.OpenDialog();\r\n }\r\n\r\n override ClosePage() {\r\n if (!this.A.Navigator.IsCurrentRouteWindow()) this.A.Framework.NavigateDefault();\r\n else super.ClosePage();\r\n }\r\n\r\n OnTwoFactorMethodChanged(e) {\r\n this.Entity.LoginByVoiceMsg = false;\r\n this.Entity.SeparatePhoneNumber = '';\r\n this.Entity.SeparatePhoneUserName = '';\r\n }\r\n\r\n GetIndicatorClass() {\r\n if (this.Entity.IsTemporary) return 'bankpass-status bankpass-temporary dx-icon-clock';\r\n if (this.Entity.CredentialValidity === EnumBankPassCredentialValidity.Unknown)\r\n return 'bankpass-status bankpass-unknown dx-icon-help';\r\n return this.Entity.CredentialValidity === EnumBankPassCredentialValidity.Valid\r\n ? 'bankpass-status bankpass-valid dx-icon-check'\r\n : 'bankpass-status bankpass-invalid dx-icon-warning';\r\n }\r\n\r\n ToggleTooltipVisible() {\r\n this.State.TooltipVisible = !this.State.TooltipVisible;\r\n }\r\n\r\n OnBankChange() {\r\n if (this.Entity.Bank === EnumBanks.Poalim && this.Entity.TwoFactorMethod == undefined) {\r\n this.Entity.TwoFactorMethod = EnumBankPassTwoFactorMethod.None;\r\n }\r\n\r\n if (this.Entity.Bank !== EnumBanks.Poalim) {\r\n this.Entity.TwoFactorMethod = EnumBankPassTwoFactorMethod.None;\r\n }\r\n\r\n if (this.Entity.Bank !== EnumBanks.Yahav) {\r\n delete this.Entity.BankClientCode;\r\n }\r\n\r\n this.State.IsConfirmedReadonly = false;\r\n }\r\n\r\n validatePassword = () => {\r\n\r\n // if entity exists, password may be omitted and will not be updated\r\n if (this.Entity.EntryID != -1 && !this.Entity.NewPassword) return true;\r\n\r\n //Validate conditions\r\n if (this.Entity.NewPassword.length < 4) return false;\r\n if (Utils.ContainsHebrewLetters(this.Entity.NewPassword)) return false;\r\n if (this.Entity.NewPassword.startsWith(' ') || this.Entity.NewPassword.endsWith(' ')) return false;\r\n\r\n //Finish\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 public BankClientCodeKeyDown(e) {\r\n if (e && e.event && e.event.key){\r\n if (e.event.key.length === 1 && !e.event.ctrlKey && !(/^\\d+$/.test(e.event.key))) {\r\n e.event.preventDefault();\r\n }\r\n }\r\n }\r\n\r\n public OnBankClientCodeChanged(){\r\n setTimeout(() => {\r\n if (this.Entity.BankClientCode) {\r\n this.Entity.BankClientCode = this.Entity.BankClientCode.replace(/[^\\d]/g, '');\r\n }\r\n });\r\n }\r\n\r\n protected override OnEntityPrepareForSave() { \r\n this.Entity.UserName = this.Entity.UserName.trim();\r\n }\r\n\r\n\r\n\r\n public override OnDoSave() {\r\n if(this.Entity.AccessType == EnumBankPassAccessTypes.Plaid && this.IsAddMode) {\r\n this.FetchLinkTokenAndSave();\r\n } else {\r\n this.Save();\r\n }\r\n }\r\n\r\n private Save() {\r\n this.Entity.FinancialInstitutionID = this.State.PlaidMetadata?.institution?.institution_id;\r\n this.Entity.FinancialInstitutionName = this.State.PlaidMetadata?.institution?.name;\r\n \r\n const saveParams = new SaveBankPassParams();\r\n saveParams.BankPass = this.Entity;\r\n saveParams.PlaidPublicToken = this.State.PlaidPublicToken;\r\n\r\n this.Do(\r\n this.endpoint.SaveWithConsent(saveParams), \r\n true,\r\n (response) => {\r\n const showAccountsMappingMessage = this.IsAddMode\r\n && (this.Entity.AccessType == EnumBankPassAccessTypes.Plaid);\r\n this.Entity.EntryID = response.Entity.EntryID;\r\n \r\n this.RefreshEntityOriginal();\r\n this.ReflectEntitySaved();\r\n\r\n if(showAccountsMappingMessage) {\r\n this.ShowAccoutsMappingMessage();\r\n }\r\n this.IsLoading = false;\r\n }\r\n );\r\n }\r\n\r\n OnAccessTypeChanged(e) {\r\n if(e.value != EnumBankPassAccessTypes.Plaid) {\r\n if(e.previousValue == EnumBankPassAccessTypes.Plaid) {\r\n this.Entity.Bank = undefined;\r\n }\r\n\r\n return;\r\n }\r\n\r\n this.Entity.Bank = EnumBanks.Plaid;\r\n }\r\n\r\n ValidateCompany(e: any) {\r\n if(this.Entity.IsPrivate || this.Entity.AccessType != EnumBankPassAccessTypes.PSD) {\r\n return true;\r\n }\r\n\r\n return e.value > 0;\r\n }\r\n\r\n private ShowAccoutsMappingMessage() {\r\n this.messageBoxDialog.Type = EnumMessageBoxTypes.YesNo;\r\n this.messageBoxDialog.Title = this.RC('ttlSetupAccountsMapping');\r\n this.messageBoxDialog.Prompt = this.RC('msgMapPlaidAccounts', this.Entity.FinancialInstitutionName);\r\n this.messageBoxDialog.ShowDialogShort(\r\n () => {\r\n this.ExecuteAccountsMapping();\r\n },\r\n () => {\r\n this.ClosePage();\r\n }\r\n );\r\n }\r\n\r\n private ExecuteAccountsMapping() {\r\n if(this.Entity.AccessType != EnumBankPassAccessTypes.Plaid && this.Entity.AccessType != EnumBankPassAccessTypes.PSD) {\r\n return;\r\n }\r\n\r\n this.Do(\r\n this.endpoint.CheckConsentStatus(this.Entity.EntryID),\r\n false,\r\n (response) => {\r\n if(response.Entity.Status != EnumConsentStatuses.GrantedAccess) {\r\n this.ShowBankConnectionHasErrorsMessage(response.Entity.Status);\r\n } else {\r\n this.A.Navigator.Navigate(\r\n ['/pages/bankpass-accounts-mappings', this.Entity.EntryID], \r\n {OrganizationID: this.Entity.OrganizationID}\r\n );\r\n }\r\n },\r\n (err) => {\r\n if(err.ResponseExtendedMessage == 'NoConsent') {\r\n if(this.Entity.AccessType == EnumBankPassAccessTypes.Plaid) {\r\n this.FetchLinkTokenAndSave();\r\n }\r\n\r\n if(this.Entity.AccessType == EnumBankPassAccessTypes.PSD) {\r\n this.OnStartNewConsent();\r\n }\r\n }\r\n }\r\n );\r\n }\r\n\r\n private FetchLinkTokenAndSave() {\r\n this.IsLoading = true;\r\n this.FetchLinkTokenAndInitializePlaid(false).subscribe(\r\n {\r\n next: (result) => {\r\n this.State.PlaidPublicToken = result.PublicToken;\r\n this.State.PlaidMetadata = result.Metadata;\r\n this.Save();\r\n },\r\n error: (err) => {\r\n console.error(err);\r\n this.UI.StopMessage(err);\r\n this.IsLoading = false;\r\n }\r\n }\r\n );\r\n }\r\n\r\n private PlaidRemap() {\r\n this.IsLoading = true;\r\n this.FetchLinkTokenAndInitializePlaid(true).subscribe(\r\n {\r\n next: () => {\r\n this.A.Navigator.Navigate(\r\n ['/pages/bankpass-accounts-mappings', this.EntityEntryID], \r\n {OrganizationID: this.Entity.OrganizationID}\r\n );\r\n },\r\n error: (err) => {\r\n console.error(err);\r\n this.UI.StopMessage(err);\r\n this.IsLoading = false;\r\n }\r\n }\r\n );\r\n }\r\n\r\n private ShowBankConnectionHasErrorsMessage(error: string) {\r\n this.messageBoxDialog.Type = EnumMessageBoxTypes.YesNo;\r\n const title = this.Entity.AccessType == EnumBankPassAccessTypes.Plaid? \r\n this.RC('ttlPlaidItemHasErrors') \r\n : this.RC('ttlConsentHasErrors');\r\n\r\n const prompt = this.Entity.AccessType == EnumBankPassAccessTypes.Plaid? \r\n this.RC('lblPlaidReMapItem', error) \r\n : this.RC('lblConsentHasErrors', error);\r\n\r\n this.messageBoxDialog.Title = title;\r\n this.messageBoxDialog.Prompt = prompt;\r\n\r\n this.messageBoxDialog.ShowDialogShort(\r\n () => {\r\n if(this.Entity.AccessType == EnumBankPassAccessTypes.Plaid) {\r\n this.PlaidRemap();\r\n } else {\r\n this.OnStartNewConsent();\r\n }\r\n },\r\n () => {\r\n // Nav to check mappings?\r\n }\r\n );\r\n }\r\n\r\n private FetchLinkTokenAndInitializePlaid(refresh: boolean) {\r\n return this.plaidService.FetchLinkTokenAndInitializePlaid(refresh? this.EntityEntryID: undefined)\r\n .pipe(take(1));\r\n }\r\n\r\n private FormatCallbackUrl(url : string) {\r\n return url.replace('__environmentURL__', encodeURIComponent('https://t777777.mydevcloud.co.il/development/'));\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n {{'msgBankpassIndicator' | RC:THIS}} {{ Entity.CredentialValidity | LookupList:\\r\\n LIST('BankPassCredentialValidity') }}\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n\\r\\n\";","import { Component, EventEmitter, Output } from '@angular/core';\r\nimport { 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 { EnumBankPassCredentialValidity } from '../../../_proxy/enums';\r\nimport { BankPass } from '@kraken/_proxy/entities/bankpass.entity';\r\n\r\nclass State extends BaseState {\r\n ShowActiveOnly: boolean;\r\n ShowProblemsOnly: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-bankpass-grid',\r\n templateUrl: './bankpass-grid.component.html',\r\n styleUrls: ['./bankpass-grid.component.scss']\r\n})\r\nexport class BankPassGridComponent extends BaseGridComponent {\r\n @Output() OnGridToolbarFilterChanged = new EventEmitter<{loadActive: boolean, showProblemsOnly: boolean}>();\r\n \r\n constructor(A: ServiceBagService) {\r\n super(A, 'BankPassGridComponent', BankPass, State);\r\n }\r\n\r\n protected override OnInitState() {\r\n this.State.ShowActiveOnly = true;\r\n this.State.ShowProblemsOnly = false;\r\n this.RaiseToolbarFilterChanged();\r\n }\r\n\r\n OnNavigate(e) {\r\n this.A.Navigator.Navigate(['/pages/bankpass', e.data.EntryID], { OrganizationID: e.data.OrganizationID });\r\n }\r\n\r\n GetIndicatorClass(bankpass: any) {\r\n if (bankpass.IsTemporary) return 'bankpass-status bankpass-temporary dx-icon-clock';\r\n if (bankpass.CredentialValidity === EnumBankPassCredentialValidity.Unknown)\r\n return 'bankpass-status bankpass-unknown dx-icon-help';\r\n return bankpass.CredentialValidity === EnumBankPassCredentialValidity.Valid\r\n ? 'bankpass-status bankpass-valid dx-icon-check'\r\n : 'bankpass-status bankpass-invalid dx-icon-warning';\r\n }\r\n\r\n OnToolbarPreparing(e) {\r\n e.toolbarOptions.items.unshift({\r\n location: 'after',\r\n widget: 'dxCheckBox',\r\n isCustom: true,\r\n options: {\r\n text: this.RC('lblShowProblemsOnly'),\r\n value: this.State.ShowProblemsOnly,\r\n onValueChanged: (e) => {\r\n this.State.ShowProblemsOnly = e.value;\r\n this.RaiseToolbarFilterChanged();\r\n }\r\n }\r\n },\r\n {\r\n location: 'after',\r\n widget: 'dxCheckBox',\r\n isCustom: true,\r\n options: {\r\n text: this.RC('lblShowActiveOnly'),\r\n value: this.State.ShowActiveOnly,\r\n onValueChanged: (e) => {\r\n this.State.ShowActiveOnly = e.value;\r\n this.RaiseToolbarFilterChanged();\r\n }\r\n }\r\n });\r\n }\r\n\r\n private RaiseToolbarFilterChanged() {\r\n this.OnGridToolbarFilterChanged.emit({\r\n loadActive: this.State.ShowActiveOnly, \r\n showProblemsOnly: this.State.ShowProblemsOnly\r\n });\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.FullName}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\";","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { BankPass } from '../../../_proxy/entities/bankpass.entity';\r\nimport { BankPassEndpoint } from '../../../_proxy/endpoints/bankpass.endpoint';\r\nimport { BankPassListParams } from '../../../_proxy/params/bankpasslist.param';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport {BankPassView} from '../../../_proxy/views/bankpass.view';\r\n\r\nclass State extends BaseState {\r\n LoadActive: boolean;\r\n ProblemsOnly: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-bankpass-list',\r\n templateUrl: './bankpass-list.component.html',\r\n styleUrls: ['./bankpass-list.component.scss']\r\n})\r\nexport class BankpassListComponent extends BaseComponent {\r\n private _organizationID: number;\r\n @Input() set OrganizationID(value) {\r\n this._organizationID = value;\r\n if (this._organizationID > -1) this.LoadDataSource();\r\n }\r\n get OrganizationID() {\r\n return this._organizationID; \r\n }\r\n \r\n private _isLoadGlobal: boolean;\r\n @Input() set IsLoadGlobal(value: boolean) {\r\n this._isLoadGlobal = value;\r\n this.LoadDataSource();\r\n }\r\n get IsLoadGlobal() {\r\n return this._isLoadGlobal; \r\n }\r\n\r\n @Input() Title: string;\r\n @Output() OnUpdateCount = new EventEmitter();\r\n \r\n constructor(A: ServiceBagService, private endpoint: BankPassEndpoint) {\r\n super(A, 'BankPassListComponent', State);\r\n }\r\n\r\n protected override OnInitState(): void {\r\n this.State.LoadActive = true;\r\n this.State.ProblemsOnly = false;\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 == BankPass || ExternalEntityType == BankPassView) this.LoadDataSource();\r\n }\r\n\r\n public LoadDataSource() {\r\n const params = new BankPassListParams();\r\n params.OrganizationID = this.OrganizationID;\r\n params.LoadGlobal = this.IsLoadGlobal;\r\n params.IsActiveOnly = this.State.LoadActive;\r\n params.IsShowProblemsOnly = this.State.ProblemsOnly;\r\n \r\n this.DataSources['BankPasses'] = new DataSourceCustomAction((options: DataLoadOptions) => \r\n this.endpoint.ListEx(params, options), null, (data) => this.OnUpdateCount.emit(data.length));\r\n }\r\n\r\n GetLinkParams() {\r\n return { OrganizationID: this._organizationID };\r\n }\r\n\r\n OnBankpassGridToolbarFilterChanged(value: {loadActive: boolean, showProblemsOnly: boolean }) {\r\n this.State.LoadActive = value.loadActive;\r\n this.State.ProblemsOnly = value.showProblemsOnly;\r\n this.LoadDataSource();\r\n }\r\n}\r\n\r\n","export default \"\\r\\n\\r\\n\";","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumBookingAccountSubtypes } from './../enums';\r\nimport { EnumExternalAccountMappingStatus } from './../enums';\r\nexport class ExternalAccountMappingView extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ExternalAccountMappingView';\r\n }\r\n \r\n public ExternalAccountID: string; \r\n public Currency: string; \r\n public Mask: string; \r\n public Name: string; \r\n public OfficialName: string; \r\n public PersistenAccountID: string; \r\n public Type: string; \r\n public Subtype: string; \r\n public ExpectedBookingAccontSubtype: EnumBookingAccountSubtypes; \r\n public ExternalAccountHash: string; \r\n public Product: string; \r\n public CashAccountType: string; \r\n public Iban: string; \r\n public ConsentID: number; \r\n public CompanyID: number; \r\n public CompanyName: string; \r\n public AccountID: number; \r\n public AccountName: string; \r\n public BookingAccountID: number; \r\n public BookingAccountName: string; \r\n public BookingAccountSubtype: EnumBookingAccountSubtypes; \r\n public ShouldConfirmMapping: boolean; \r\n public AccountMappingStatus: EnumExternalAccountMappingStatus; \r\n public MappedInBankPass: string; \r\n\t\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 { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { AccountMappingGridComponent } from '../account-mapping-grid/account-mapping-grid.component';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { BankPassEndpoint } from '@kraken/_proxy/endpoints/bankpass.endpoint';\r\nimport { ExternalAccountMappingView } from '@kraken/_proxy/views/externalaccountmapping.view';\r\nimport { CompanyCreationWizardComponent } from '@kraken/pages/company-creation-wizard/company-creation-wizard.component';\r\nimport { Account } from '@kraken/_proxy/entities/account.entity';\r\nimport { BookingAccount } from '@kraken/_proxy/entities/bookingaccount.entity';\r\nimport { BookingAccountEndpoint } from '@kraken/_proxy/endpoints/bookingaccount.endpoint';\r\nimport { Company } from '@kraken/_proxy/entities/company.entity';\r\nimport { AccountEndpoint } from '@kraken/_proxy/endpoints/account.endpoint';\r\nimport { CompanyEndpoint } from '@kraken/_proxy/endpoints/company.endpoint';\r\nimport { CompanyListParams } from '@kraken/_proxy/params/companylist.param';\r\nimport { AccountListParams } from '@kraken/_proxy/params/accountlist.param';\r\nimport { BookingAccountListParams } from '@kraken/_proxy/params/bookingaccountlist.param';\r\nimport { ConsentsEndpoint } from '@kraken/_proxy/endpoints/consents.endpoint';\r\nimport { UpdateExternalAccountMappingParams } from '@kraken/_proxy/params/updateexternalaccountmapping.param';\r\nimport { BankPassView } from '@kraken/_proxy/views/bankpass.view';\r\nimport { BankPass } from '@kraken/_proxy/entities/bankpass.entity';\r\nimport { EnumBankPassAccessTypes } from '@kraken/_proxy/enums';\r\n\r\nexport class State extends BaseState {\r\n BankPassID: number;\r\n OrganizationID: number;\r\n AccountMappings: ExternalAccountMappingView[];\r\n\r\n CompaniesItems: Company[] = [];\r\n AccountsItems: Account[] = [];\r\n BookingAccountsItems: BookingAccount[] = [];\r\n BankPass: BankPassView;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n templateUrl: './account-mapping-list.component.html',\r\n styleUrls: ['./account-mapping-list.component.scss']\r\n})\r\nexport class AccountMappingListComponent extends BasePageComponent {\r\n\r\n @ViewChild('reportGrid') reportGrid: AccountMappingGridComponent;\r\n @ViewChild(CompanyCreationWizardComponent) wizardDialog: CompanyCreationWizardComponent;\r\n\r\n get IsPlaidView() : boolean {\r\n return this.State?.BankPass?.AccessType == EnumBankPassAccessTypes.Plaid;\r\n }\r\n\r\n constructor(A: ServiceBagService,\r\n private bankPassEndpoint: BankPassEndpoint, private companyEndpoint: CompanyEndpoint,\r\n private accountEndpoint: AccountEndpoint,\r\n private bookingAccountEndpoint: BookingAccountEndpoint,\r\n private consentsEndpoin: ConsentsEndpoint) {\r\n super(A, 'AccountMappingListComponent',ExternalAccountMappingView, State, EnumPageDisplayModes.Window);\r\n }\r\n\r\n protected override OnInitState() {\r\n const sParam: string = this.A.Navigator.GetRouteParams().EntryID;\r\n\r\n if(!isNaN(parseFloat(sParam))) {\r\n this.State.BankPassID = +sParam;\r\n this.GetBankPass();\r\n }\r\n\r\n if (Object.entries(this.QueryParams).length <= 0)\r\n return;\r\n\r\n if (this.QueryParams.OrganizationID) {\r\n this.State.OrganizationID = this.QueryParams.OrganizationID;\r\n } \r\n\r\n this.LoadCompanies();\r\n this.LoadAccounts();\r\n this.LoadBookingAccounts();\r\n }\r\n\r\n protected override OnInitDataSources() {\r\n this.Do(\r\n this.bankPassEndpoint.GetAccountsMappings(this.State.BankPassID),\r\n false,\r\n (response) => {\r\n this.State.AccountMappings = response.Entities;\r\n }\r\n );\r\n }\r\n\r\n OnMappingChanged(event: {updatedRow: ExternalAccountMappingView, refresh: boolean}) {\r\n const params = this.GetExternalAccountMappingParams(event.updatedRow);\r\n\r\n this.Do(\r\n this.consentsEndpoin.UpdateExternalAccountMapping(params),\r\n true,\r\n () => {\r\n if(event.refresh) {\r\n this.OnInitDataSources();\r\n }\r\n }\r\n );\r\n }\r\n\r\n OpenCreationWizard(event: {externalAccountData: ExternalAccountMappingView, account: Account}) {\r\n this.wizardDialog.OrganizationID = this.State.OrganizationID;\r\n this.wizardDialog.CompanyID = event.externalAccountData.CompanyID > 0 ? event.externalAccountData.CompanyID : undefined;\r\n this.wizardDialog.Account = event.account;\r\n this.wizardDialog.IsExternalAccountsMapping = true;\r\n this.wizardDialog.AccountBank = this.State.BankPass.Bank;\r\n this.wizardDialog.BankPassID = this.State.BankPassID;\r\n this.wizardDialog.BookingAccountType = event.externalAccountData.ExpectedBookingAccontSubtype;\r\n this.wizardDialog.Currency = event.externalAccountData.Currency;\r\n this.wizardDialog.ExternalAccountMappingParams = this.GetExternalAccountMappingParams(event.externalAccountData);\r\n this.wizardDialog.ExternalAccountCode = event.externalAccountData.Mask;\r\n\r\n this.wizardDialog.ShowDialogShort(\r\n () => {\r\n this.LoadBookingAccounts();\r\n this.LoadAccounts();\r\n this.LoadCompanies();\r\n this.OnInitDataSources();\r\n }, \r\n () => {});\r\n }\r\n\r\n OnOK() {\r\n this.ClosePage();\r\n }\r\n\r\n public override OnClose() {\r\n this.NotifyEntitySaved(null, BankPass);\r\n return true;\r\n }\r\n\r\n private LoadCompanies() {\r\n this.State.CompaniesItems = [];\r\n const newCompany = new Company();\r\n\r\n newCompany.EntryID = -1;\r\n newCompany.OrganizationID = this.State.OrganizationID;\r\n newCompany.Name = this.RC('lblAddNewCompany');\r\n newCompany.IsActive = true;\r\n\r\n this.State.CompaniesItems.push(newCompany);\r\n\r\n const params = new CompanyListParams();\r\n params.LoadActive = true;\r\n params.OrganizationID = this.State.OrganizationID;\r\n\r\n this.Do(\r\n this.companyEndpoint.ListEx(params, null), \r\n false, \r\n (response) => {\r\n this.State.CompaniesItems = this.State.CompaniesItems.concat(response.Entities);\r\n }\r\n );\r\n }\r\n\r\n private LoadAccounts() {\r\n this.State.AccountsItems = [];\r\n\r\n const newAccount = new Account();\r\n\r\n newAccount.EntryID = -1;\r\n newAccount.AccountFullName = this.RC('lblAddNewAccount');\r\n\r\n this.State.AccountsItems.push(newAccount);\r\n\r\n const params = new AccountListParams();\r\n params.LoadActive = true;\r\n params.OrganizationID = this.State.OrganizationID;\r\n\r\n this.Do(\r\n this.accountEndpoint.ListEx(params, null),\r\n false,\r\n (response) => {\r\n this.State.AccountsItems = this.State.AccountsItems.concat(response.Entities);\r\n }\r\n );\r\n }\r\n\r\n private LoadBookingAccounts() {\r\n this.State.BookingAccountsItems = [];\r\n\r\n const newAccount = new BookingAccount();\r\n\r\n newAccount.EntryID = -1;\r\n newAccount.BookingAccountFullName = this.RC('lblAddNewBookingAccount');\r\n\r\n this.State.BookingAccountsItems.push(newAccount);\r\n\r\n const params = new BookingAccountListParams();\r\n params.LoadActive = true;\r\n params.OrganizationID = this.State.OrganizationID;\r\n\r\n this.Do(\r\n this.bookingAccountEndpoint.ListEx(params),\r\n false,\r\n (response) => {\r\n this.State.BookingAccountsItems = this.State.BookingAccountsItems.concat(response.Entities);\r\n }\r\n );\r\n }\r\n\r\n private GetExternalAccountMappingParams(externalAccountData: ExternalAccountMappingView) {\r\n const params = new UpdateExternalAccountMappingParams();\r\n params.ConsentID = externalAccountData.ConsentID;\r\n params.BookingAccountID = externalAccountData.BookingAccountID;\r\n params.ExternalAccountID = externalAccountData.ExternalAccountID;\r\n params.ExternalAccountHash = externalAccountData.ExternalAccountHash;\r\n params.IBAN = externalAccountData.Iban;\r\n\r\n return params;\r\n }\r\n\r\n private GetBankPass() {\r\n this.Do(\r\n this.bankPassEndpoint.Get(this.State.BankPassID),\r\n false,\r\n (response) => {\r\n this.State.BankPass = response.Entity;\r\n }\r\n );\r\n }\r\n}","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\";","import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { Account } from '@kraken/_proxy/entities/account.entity';\r\nimport { BookingAccount } from '@kraken/_proxy/entities/bookingaccount.entity';\r\nimport { Company } from '@kraken/_proxy/entities/company.entity';\r\nimport { EnumBanks, EnumBookingAccountSubtypes } from '@kraken/_proxy/enums';\r\nimport { ExternalAccountMappingView } from '@kraken/_proxy/views/externalaccountmapping.view';\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 } 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 * as _ from 'lodash';\r\nimport { EnumExternalAccountMappingStatus } from '../../../../../../../Kraken/Angular/ClientApp/_proxy/enums';\r\n\r\nexport class State extends BaseState {\r\n CompaniesItems: Company[] = [];\r\n AccountsItems: Account[] = [];\r\n BookingAccountsItems: BookingAccount[] = [];\r\n AccountItemsOptions: Account[] = [];\r\n BookingAccountsItemsOptions: BookingAccount[] = [];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-account-mapping-grid',\r\n templateUrl: './account-mapping-grid.component.html',\r\n styleUrls: ['./account-mapping-grid.component.scss']\r\n})\r\nexport class AccountMappingGridComponent extends BaseGridComponent {\r\n\r\n @ViewChild('messageBox') messageBoxDialog: MessageBoxDialogComponent;\r\n\r\n @Input() OrganizationID: number;\r\n @Input() BankPassID: number;\r\n @Input() Bank: EnumBanks;\r\n @Input() IsPlaidView: boolean;\r\n\r\n @Input() set BookingAccountsItems (value: BookingAccount[]) {\r\n this.State.BookingAccountsItems = value;\r\n this.State.BookingAccountsItemsOptions.length = 0;\r\n this.State.BookingAccountsItemsOptions.push(... this.State.BookingAccountsItems);\r\n }\r\n\r\n @Input() set AccountsItems (value: Account[]) {\r\n this.State.AccountsItems = value;\r\n this.State.AccountItemsOptions.length = 0;\r\n this.State.AccountItemsOptions.push(... this.State.AccountsItems);\r\n }\r\n\r\n @Input() set CompaniesItems (value: Company[]) {\r\n this.State.CompaniesItems.length = 0;\r\n this.State.CompaniesItems.push(...value);\r\n }\r\n\r\n @Output() OnAddNewEntity = new EventEmitter<{externalAccountData: ExternalAccountMappingView, account: Account}>();\r\n @Output() OnMappingChanged = new EventEmitter<{updatedRow: ExternalAccountMappingView, refresh: boolean}>();\r\n\r\n private _accountStatusMap = new Map();\r\n\r\n get MappedInBankPassVisible(): boolean {\r\n return (this.DataSource as ExternalAccountMappingView[])?.some(a => a.ShouldConfirmMapping);\r\n }\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'AccountMappingGridComponent', ExternalAccountMappingView, State);\r\n\r\n this.LIST('ExternalAccountMappingStatus').forEach(l => {\r\n this._accountStatusMap.set(EnumExternalAccountMappingStatus[l.Value], l.Text);\r\n });\r\n }\r\n\r\n protected override GetGridRowContextMenu(options?: any): ContextMenuElement[] {\r\n return [{\r\n text: this.RC('btnRemoveMapping'),\r\n visible: options?.data?.BookingAccountID > 0 && !options?.data?.ShouldConfirmMapping,\r\n onClick: () => {\r\n const bookingAccount = this.FindBookingAccount(options?.data?.BookingAccountID);\r\n if(bookingAccount) {\r\n const row = _.clone(options?.data as ExternalAccountMappingView);\r\n row.BookingAccountID = undefined;\r\n this.OnMappingChanged.emit({updatedRow: row, refresh: true});\r\n }\r\n }\r\n }];\r\n }\r\n\r\n CalculateCompanyDisplayName = (rowData) => {\r\n if (!rowData.CompanyID)\r\n return;\r\n\r\n return this.State.CompaniesItems.find(x => x.EntryID === rowData.CompanyID)?.Name;\r\n };\r\n\r\n CalculateAccountDisplayName = (rowData) => {\r\n if (!rowData.AccountID)\r\n return;\r\n\r\n return this.State.AccountsItems.find(x => x.EntryID === rowData.AccountID)?.AccountFullName;\r\n };\r\n\r\n CalculateBookingAccountDisplayName = (rowData) => {\r\n if (!rowData.BookingAccountID)\r\n return;\r\n\r\n const bookingAccount = this.State.BookingAccountsItems.find(x => x.EntryID === rowData.BookingAccountID);\r\n\r\n if(!bookingAccount) {\r\n return undefined;\r\n }\r\n\r\n if (bookingAccount.Subtype == EnumBookingAccountSubtypes.Deposits \r\n || bookingAccount.Subtype == EnumBookingAccountSubtypes.Stocks\r\n || bookingAccount.Subtype == EnumBookingAccountSubtypes.Guarantee \r\n || bookingAccount.Subtype == EnumBookingAccountSubtypes.Loans) {\r\n\r\n return bookingAccount.BookingAccountName;\r\n }\r\n\r\n return bookingAccount.BookingAccountCode;\r\n \r\n };\r\n\r\n OnCompanyDropDownChanged(event: any, cellInfo: any) {\r\n if(event.value == -1) { \r\n const row = _.clone(cellInfo.data);\r\n row.AccountID = undefined;\r\n row.CompanyID = undefined;\r\n\r\n this.OpenWizard(row);\r\n\r\n return;\r\n }\r\n\r\n this.HandleChange(event, cellInfo, true);\r\n }\r\n\r\n OnAccountDropDownChanged(event: any, cellInfo: any) {\r\n if(event.value == -1) { \r\n const row = _.clone(cellInfo.data);\r\n row.AccountID = undefined;\r\n this.OpenWizard(row);\r\n\r\n return;\r\n }\r\n\r\n this.HandleChange(event, cellInfo, false);\r\n }\r\n\r\n OnBookingAccountChanged(event: any, cellInfo: any) {\r\n if(event.value !== -1) {\r\n cellInfo.setValue(event.value);\r\n this.HandleBookingAccountChange(event, cellInfo);\r\n \r\n return;\r\n }\r\n\r\n this.OpenWizard(cellInfo.data);\r\n }\r\n\r\n OnRowPrepared(e) {\r\n const { rowType, data } = e;\r\n if (rowType !== 'data') return;\r\n\r\n if (data.ShouldConfirmMapping) {\r\n e.rowElement.classList.add('row-edit-disabled');\r\n }\r\n }\r\n\r\n // we need to filter account options here \r\n // to make drop down work correctly we need to have one instance of options array\r\n // and to populate upon opening\r\n OnAccountsDropDownOpened(rowData: ExternalAccountMappingView) {\r\n this.State.AccountItemsOptions.length = 0;\r\n this.State.AccountItemsOptions.push(...this.GetAccountsItems(rowData.CompanyID));\r\n }\r\n\r\n OnBookingAccountsDropDownOpened(rowData: ExternalAccountMappingView) {\r\n this.State.BookingAccountsItemsOptions.length = 0;\r\n this.State.BookingAccountsItemsOptions.push(\r\n ...this.GetBookingAccountsItems(rowData)\r\n );\r\n }\r\n\r\n GetStatusIndicatorClass(row: ExternalAccountMappingView) {\r\n if (row.AccountMappingStatus === EnumExternalAccountMappingStatus.NotMapped)\r\n return 'mapping-status mapping-not-mapped dx-icon-help';\r\n \r\n return row.AccountMappingStatus === EnumExternalAccountMappingStatus.Mapped\r\n ? 'mapping-status mapping-mapped dx-icon-check'\r\n : 'mapping-status mapping-mapped-in-another dx-icon-warning';\r\n }\r\n\r\n ShowConfirmMapButton(e) {\r\n return e?.row?.data?.ShouldConfirmMapping;\r\n }\r\n\r\n GetStatusMessage(status: EnumExternalAccountMappingStatus) {\r\n return this._accountStatusMap.get(status);\r\n }\r\n\r\n IsAcceptMappingLinkDisabled = (cell) => {\r\n if(cell.data) {\r\n return this.IsAcceptMappingDisabled(cell.data);\r\n }\r\n\r\n return true;\r\n };\r\n\r\n OnConfirmMapClick(e) {\r\n this.OnMappingChanged.emit({updatedRow: e.row.data as ExternalAccountMappingView, refresh: true});\r\n }\r\n\r\n CalculateAcceptMapping = (rowData) => {\r\n if(!this.IsAcceptMappingDisabled(rowData)) {\r\n return this.RC('lblAccept');\r\n }\r\n };\r\n\r\n private GetAccountsItems(companyID: number) {\r\n return this.State.AccountsItems.filter(a => a.CompanyID == companyID && a.Bank == this.Bank || a.EntryID == -1);\r\n }\r\n\r\n private GetBookingAccountsItems(rowData: ExternalAccountMappingView) {\r\n return this.State.BookingAccountsItems\r\n .filter(a => \r\n a.AccountID == rowData.AccountID && a.Currency == rowData.Currency && a.Subtype == rowData.ExpectedBookingAccontSubtype\r\n || a.EntryID == -1 \r\n || a.EntryID == rowData.BookingAccountID);\r\n }\r\n\r\n private OpenWizard(row: ExternalAccountMappingView) {\r\n this.OnAddNewEntity.emit({\r\n externalAccountData: row, \r\n account: this.State.AccountsItems.find(a => a.EntryID == row.AccountID)\r\n });\r\n }\r\n\r\n private HandleChange(event: any, cellInfo: any, isClearAccount: boolean) {\r\n const cellInfoData = cellInfo.data as ExternalAccountMappingView;\r\n\r\n if(event.previousValue \r\n && (cellInfoData.BookingAccountID || (cellInfoData.AccountID && isClearAccount))\r\n && cellInfoData.AccountMappingStatus == EnumExternalAccountMappingStatus.Mapped) {\r\n\r\n this.messageBoxDialog.Type = EnumMessageBoxTypes.YesNo;\r\n this.messageBoxDialog.Title = this.RC('lblConfirmChange');\r\n this.messageBoxDialog.Prompt = this.RC('msgClearingDependentDataConfirmation');\r\n\r\n this.messageBoxDialog.ShowDialogShort(() => {\r\n const bookingAccount = this.FindBookingAccount(cellInfoData.BookingAccountID);\r\n cellInfoData.BookingAccountID = undefined;\r\n cellInfoData.BookingAccountSubtype = undefined;\r\n\r\n\r\n if(isClearAccount) {\r\n cellInfoData.AccountID = undefined;\r\n }\r\n\r\n if(bookingAccount) {\r\n cellInfoData.AccountMappingStatus = EnumExternalAccountMappingStatus.NotMapped;\r\n this.OnMappingChanged.emit({updatedRow: cellInfo.row.data as ExternalAccountMappingView, refresh: false});\r\n }\r\n\r\n cellInfo.setValue(event.value);\r\n },\r\n () => {}\r\n );\r\n } else {\r\n if(isClearAccount) {\r\n cellInfoData.AccountID = undefined;\r\n }\r\n\r\n cellInfoData.BookingAccountID = undefined;\r\n cellInfoData.BookingAccountSubtype = undefined;\r\n cellInfoData.AccountMappingStatus = EnumExternalAccountMappingStatus.NotMapped;\r\n\r\n cellInfo.setValue(event.value);\r\n } \r\n }\r\n\r\n private HandleBookingAccountChange(event: any, cellInfo: any) {\r\n const bookingAccount = this.FindBookingAccount(event.value);\r\n\r\n cellInfo.component.cellValue(\r\n cellInfo.rowIndex, \r\n 'BookingAccountSubtype', \r\n bookingAccount.Subtype\r\n );\r\n\r\n this.OnMappingChanged.emit({updatedRow: cellInfo.row.data as ExternalAccountMappingView, refresh: true});\r\n }\r\n\r\n private FindBookingAccount(entryID: number) : BookingAccount {\r\n return this.State.BookingAccountsItems.find(b => b.EntryID == entryID);\r\n }\r\n\r\n private IsAcceptMappingDisabled(row: ExternalAccountMappingView) {\r\n return !(row.AccountMappingStatus != EnumExternalAccountMappingStatus.Mapped && row.BookingAccountID > 0);\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.Name}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n {{GetStatusMessage(cell.data.AccountMappingStatus)}}\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n {{ RC('msgMappedInBankPass', cell.data.MappedInBankPass) }}\\r\\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 { ServiceBagServices, ServiceBagService } 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 { OrganizationView } from \"../../_proxy/views/organization.view\";\r\n\r\nclass State extends BaseState\r\n{\r\n TotalCount: number;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-billing-report-chart',\r\n templateUrl: './billing-report-chart.component.html',\r\n styleUrls: ['./billing-report-chart.component.scss']\r\n})\r\nexport class BillingReportChartComponent extends BaseComponent\r\n{\r\n @Input() Title: string;\r\n\r\n private _valueField: string;\r\n @Input() set ValueField(value: string) {\r\n this._valueField = value;\r\n this.SetTotalCount();\r\n }\r\n get ValueField() {\r\n return this._valueField;\r\n }\r\n\r\n private _dataSource: any;\r\n @Input() set DataSource(value: OrganizationView[]) {\r\n if (!value) return;\r\n this._dataSource = value;\r\n this.SetTotalCount();\r\n }\r\n get DataSource() {\r\n return this._dataSource;\r\n }\r\n\r\n constructor(A: ServiceBagService)\r\n {\r\n super(A, 'BillingReportChartComponent', State);\r\n }\r\n\r\n CustomizeLabel(e)\r\n {\r\n return `${e.valueText}\\n${e.argumentText}`;\r\n }\r\n\r\nSetTotalCount() {\r\n this.State.TotalCount = Array.isArray(this._dataSource) ? this._dataSource.reduce((s, p) => s + p[this.ValueField], 0) : 0;\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 \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n {{State.TotalCount}}\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\";","import { Component } from \"@angular/core\";\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Organization } from '@kraken/_proxy/entities/organization.entity';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-billing-report-grid',\r\n templateUrl: './billing-report-grid.component.html'\r\n})\r\nexport class BillingReportGridComponent extends BaseGridComponent\r\n{\r\n constructor(A: ServiceBagService)\r\n {\r\n super(A, 'BillingReportGridComponent', Organization, BaseState);\r\n }\r\n}","export default \"\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { OrganizationView } from './../views/organization.view';\r\nimport { BillingReportParams } from './../params/billingreport.param';\r\n@Injectable()\r\nexport class BillingReportEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(api: APIGatewayService) {super(\"BillingReport\", api);}\r\n \r\n public ListEx(Params: BillingReportParams) : Observable>\r\n {\r\n return this.api.ExecutePostAction(this.ControllerName, 'ListEx', Params, undefined );\r\n }\r\n}\r\n","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class BillingReportParams extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'BillingReportParams';\r\n }\r\n \r\n public DateFrom: Date; \r\n public DateTo: Date; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { Component, ViewChild } from '@angular/core';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState, BaseEntity, BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { BillingReportEndpoint } from '../../_proxy/endpoints/billingreport.endpoint';\r\nimport { OrganizationView } from '../../_proxy/views/organization.view';\r\nimport { BillingReportParams } from '../../_proxy/params/billingreport.param';\r\nimport { BillingReportGridComponent } from './billing-report-grid.component';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\n\r\nexport class State extends BaseState {\r\n ReportData: OrganizationView[];\r\n TopReportData: OrganizationView[];\r\n Quarter: number;\r\n QuarterYear: Date = new Date();\r\n\r\n DateFrom: Date;\r\n DateTo: Date;\r\n CurrentTabIndex = 0;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n templateUrl: './billing-report.component.html',\r\n styleUrls: ['./billing-report.component.scss']\r\n})\r\nexport class BillingReportComponent extends BasePageComponent {\r\n @ViewChild('reportGrid') reportGrid: BillingReportGridComponent;\r\n Reports = [\r\n {\r\n ValueField: 'TransactionsCount',\r\n Title: this.RC('titleTotalTransactionsCount')\r\n },\r\n {\r\n ValueField: 'BalancesCount',\r\n Title: this.RC('titleTotalBalancesCount')\r\n },\r\n {\r\n ValueField: 'AccountsCount',\r\n Title: this.RC('titleTotalAccountsCount')\r\n },\r\n {\r\n ValueField: 'BookingAccountsCount',\r\n Title: this.RC('titleTotalBookingAccountsCount')\r\n },\r\n {\r\n ValueField: 'CompaniesCount',\r\n Title: this.RC('titleTotalCompaniesCount')\r\n },\r\n {\r\n ValueField: 'UsersCount',\r\n Title: this.RC('titleTotalUsersCount')\r\n }\r\n ];\r\n BillingReportTabs = this.LIST('BillingReportTabs');\r\n \r\n constructor(A: ServiceBagService, private billingReportEndpoint: BillingReportEndpoint) {\r\n super(A, 'BillingReportComponent', BaseEntity, State);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.LoadBillingReport();\r\n }\r\n\r\n LoadBillingReport() {\r\n const params = new BillingReportParams();\r\n params.DateFrom = this.State.DateFrom;\r\n params.DateTo = this.State.DateTo;\r\n\r\n this.Do(this.billingReportEndpoint.ListEx(params), false, (response: BaseEntitiesResponse) => {\r\n this.State.ReportData = response.Entities;\r\n this.State.TopReportData = response.Entities.slice(0, 10);\r\n });\r\n }\r\n\r\n OnFilterDateChanged(e) {\r\n this.SetFilterDates();\r\n }\r\n\r\n SetFilterDates() {\r\n const quarter = this.LISTITEMX('Quarters', this.State.Quarter) as any;\r\n if (!quarter || !this.State.QuarterYear) {\r\n this.State.DateFrom = this.State.DateTo = undefined;\r\n return;\r\n }\r\n\r\n const year = this.State.QuarterYear.getFullYear();\r\n this.State.DateFrom = new Date(quarter.DateFrom.setYear(year));\r\n this.State.DateTo = new Date(quarter.DateTo.setYear(year));\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n const settings = new ToolbarSettings;\r\n settings.IsAllowFilter = true;\r\n\r\n return settings;\r\n }\r\n\r\n override OnApplyFilter() {\r\n this.LoadBillingReport();\r\n }\r\n\r\n override OnClearFilter() {\r\n this.InitState();\r\n this.LoadBillingReport();\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\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 { EnumAccountFullNameDisplayType } from './../enums';\r\nimport { EnumBookingAccountSelectionMethods } from './../enums';\r\nexport class Organization extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'Organization';\r\n }\r\n \r\n public Name: string; \r\n public Notes: string; \r\n public JobPriority: number; \r\n public IsActive: boolean; \r\n public InternalNotes: string; \r\n public DefaultCurrency: string; \r\n public IsLicensedForTransactionsUpload: boolean; \r\n public IsLicensedForJournalEntries: boolean; \r\n public IsLicensedForCashflow: boolean; \r\n public IsLicensedForForeignBanks: boolean; \r\n public IsLicensedForAccountingSync: boolean; \r\n public IsLicensedForLedgerAccountsSync: boolean; \r\n public IsLicensedForLoans: boolean; \r\n public IsLicensedForAdvancedReports: boolean; \r\n public IsLicensedForCreditCardProcessing: boolean; \r\n public IsRemoveHistoricalData: boolean; \r\n public HistoricalDataRetentionPeriod: number; \r\n public RequestImmediatelyReplication: Date; \r\n public AccountFullNameDisplayType: EnumAccountFullNameDisplayType; \r\n public BookingAccountSelectionMethod: EnumBookingAccountSelectionMethods; \r\n public IsAccountingOffice: boolean; \r\n public IsLicensedForIncomingPaymentsProcessing: boolean; \r\n public IsDownloadBalances: boolean; \r\n public IsDownloadLoansData: boolean; \r\n public IsHasAutomaticDeployment: boolean; \r\n\tpublic CreatedBy: number;\r\n\tpublic CreatedDate: Date;\r\n}\r\n\r\n\r\n\r\n","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Organization } from './../entities/organization.entity';\r\nexport class BillingContract extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'BillingContract';\r\n }\r\n \r\n public OrganizationID: number; \r\n public Name: string; \r\n public Description: string; \r\n public SBOCustomerCode: string; \r\n public SBOProjectNumber: number; \r\n public ContractBaseSum: number; \r\n public ContractBaseCompaniesQuantity: number; \r\n public ContractBaseAccountsQuantity: number; \r\n public ContractBaseUsersQuantity: number; \r\n public BillingBaseSum: number; \r\n public BillingBaseCompaniesQuantity: number; \r\n public BillingBaseAccountsQuantity: number; \r\n public BillingBaseUsersQuantity: number; \r\n public ExtraBaseCompanyPrice: number; \r\n public ExtraBaseAccountPrice: number; \r\n public ExtraBaseUserPrice: number; \r\n public ContractJournalEntriesSum: number; \r\n public ContractJournalEntriesCompaniesQuantity: number; \r\n public BillingJournalEntriesSum: number; \r\n public BillingJournalEntriesCompaniesQuantity: number; \r\n public ExtraJournalEntriesPrice: number; \r\n public ContractCashflowSum: number; \r\n public ContractCashflowCompaniesQuantity: number; \r\n public BillingCashflowSum: number; \r\n public BillingCashflowCompaniesQuantity: number; \r\n public ExtraCashflowPrice: number; \r\n public ContractLoansSum: number; \r\n public ContractLoansCompaniesQuantity: number; \r\n public BillingLoansSum: number; \r\n public BillingLoansCompaniesQuantity: number; \r\n public ExtraLoansPrice: number; \r\n public IsActive: boolean; \r\n public Organization: Organization = new Organization; \r\n\tpublic CreatedBy: number;\r\n\tpublic CreatedDate: Date;\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BillingContract } from './../entities/billingcontract.entity';\r\nimport { EnumBillingContractsReportModule } from './../enums';\r\nimport { EnumBillingContractViewSubmodules } from './../enums';\r\nexport class BillingContractView extends BillingContract {\r\n constructor() {\r\n super();\r\n this.TypeName = 'BillingContractView';\r\n }\r\n \r\n public ReportModule: EnumBillingContractsReportModule; \r\n public ContractSum: number; \r\n public BillingSum: number; \r\n public ContractQuantity: number; \r\n public BillingQuantity: number; \r\n public ExtraPrice: number; \r\n public ActualCompanyQuantity: number; \r\n public ActualAccountQuantity: number; \r\n public ActualUsersQuantity: number; \r\n public ActualSum: number; \r\n public CompaniesDiff: number; \r\n public AccountsDiff: number; \r\n public UsersDiff: number; \r\n public ItemCode: string; \r\n public BillingText: string; \r\n public BillingTotal: number; \r\n public SummaryTotalExtra: number; \r\n public AlternativeDiff: number; \r\n public Submodule: EnumBillingContractViewSubmodules; \r\n public ChildBillingViews: BillingContractView[] = []; \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 { BillingContractView } from './../views/billingcontract.view';\r\nimport { BillingContractReportParams } from './../params/billingcontractreport.param';\r\n@Injectable()\r\nexport class BillingContractsReportEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"BillingContractsReport\", api);}\r\n\t\r\n\r\n public ListEx(Params: BillingContractReportParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListEx', Params, undefined );\r\n }\r\n\r\n public override Save(entity: BillingContractView) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'Save', entity, undefined );\r\n }\r\n\r\n public GetBillingContractViewsByContractID(billingContractID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetBillingContractViewsByContractID', {billingContractID: billingContractID} );\r\n }\r\n\r\n public IsBillingContractConnectedToAnyEntity(billingContractID: number) : Observable\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'IsBillingContractConnectedToAnyEntity', {billingContractID: billingContractID} );\r\n }\r\n}\r\n\r\n","import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BillingContractView } from '../../../../../../../Kraken/Angular/ClientApp/_proxy/views/billingcontract.view';\r\nimport { EnumBillingContractsReportModule } from '../../../../../../../Kraken/Angular/ClientApp/_proxy/enums';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { BillingContract } from '@kraken/_proxy/entities/billingcontract.entity';\r\nimport { DxDataGridComponent } from 'devextreme-angular';\r\nimport { BillingContractsReportEndpoint } from '@kraken/_proxy/endpoints/billingcontractsreport.endpoint';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-billing-contracts-report-grid',\r\n templateUrl: './billing-contracts-report-grid.component.html',\r\n styleUrls: ['./billing-contracts-report-grid.component.scss']\r\n})\r\nexport class BillingContractsReportGridComponent extends BaseGridComponent {\r\n @ViewChild('billingGrid') billingGrid: DxDataGridComponent;\r\n @Input() BillingMonth: Date;\r\n @Output() Reload: EventEmitter = new EventEmitter();\r\n changes = [];\r\n editRowKey?: number = null;\r\n\r\n constructor(A: ServiceBagService, private billingContractsReportEndpoint: BillingContractsReportEndpoint) {\r\n super(A, 'BillingContractsReportGridComponent', BillingContractView, BaseState);\r\n this.BindHandler('OnActualizeBillingDataButtonClick');\r\n this.BindHandler('IsActualizeButtonVisible');\r\n }\r\n\r\n public OnEditorPreparing(e: any): void {\r\n if (this.ShouldLockCells(e.dataField, e.row?.data.ReportModule)) {\r\n e.allowEditing = false;\r\n e.cancel = true;\r\n }\r\n\r\n const { editorOptions, setValue } = e;\r\n editorOptions.onValueChanged = ({ value }) => {\r\n setValue(value);\r\n };\r\n }\r\n\r\n public ShouldLockCells(dataField: string, reportModule: EnumBillingContractsReportModule): boolean {\r\n const onlyBaseModuleEditableColumns = ['BillingBaseAccountsQuantity', 'BillingBaseUsersQuantity'];\r\n const onlyBaseModuleFilledColumns = ['ContractBaseAccountsQuantity', 'ContractBaseUsersQuantity',\r\n 'ActualAccountQuantity', 'ActualUsersQuantity', 'AccountsDiff', 'UsersDiff', 'ExtraBaseAccountPrice', 'ExtraBaseUserPrice'];\r\n return (onlyBaseModuleEditableColumns.includes(dataField) || onlyBaseModuleFilledColumns.includes(dataField))\r\n && reportModule != EnumBillingContractsReportModule.Base;\r\n }\r\n\r\n public OnCellPrepared(e: any): void {\r\n this.HideMasterDetailExpandButton(e);\r\n this.HideAndPaintDiffCells(e);\r\n this.HideOnlyBaseModuleFields(e);\r\n }\r\n\r\n private HideMasterDetailExpandButton(e) {\r\n if (e.column.type !== \"detailExpand\" || e.rowType !== \"data\") return;\r\n const data = e.data;\r\n let shouldHideButton = false;\r\n\r\n if (data.ReportModule === EnumBillingContractsReportModule.Base) {\r\n shouldHideButton = data.CompaniesDiff === undefined &&\r\n data.UsersDiff === undefined &&\r\n data.AccountsDiff === undefined;\r\n } else {\r\n shouldHideButton = data.CompaniesDiff === undefined;\r\n }\r\n\r\n if (shouldHideButton) {\r\n e.cellElement.style.visibility = \"hidden\";\r\n }\r\n }\r\n\r\n private HideAndPaintDiffCells(e) {\r\n const extraPricesAndDiffs = {\r\n 'CompaniesDiff': 'ExtraPrice',\r\n 'AccountsDiff': 'ExtraBaseAccountPrice',\r\n 'UsersDiff': 'ExtraBaseUserPrice',\r\n \"SummaryTotalExtra\" : \"SummaryTotalExtra\"\r\n };\r\n\r\n for (const [diffField, priceField] of Object.entries(extraPricesAndDiffs)) {\r\n if (e.column.dataField === diffField || e.column.dataField === priceField) {\r\n this.PaintDiffCell(e, diffField);\r\n (e.column.dataField !== \"SummaryTotalExtra\") && this.BlockUndefinedCell(e, diffField);\r\n }\r\n }\r\n }\r\n\r\n private HideOnlyBaseModuleFields(e) {\r\n if (e.rowType === 'data'\r\n && (this.ShouldLockCells(e.column.dataField, e.row?.data.ReportModule))) {\r\n e.cellElement.classList.add('blocked-cell');\r\n }\r\n }\r\n\r\n private PaintDiffCell(e, diffField) {\r\n const diffValue = e.row?.data[diffField];\r\n (diffValue !== 0) && e.cellElement.classList.add(diffValue < 0 ? 'negative-amount' : 'positive-amount');\r\n }\r\n\r\n private BlockUndefinedCell(e, diffField) {\r\n const diffValue = e.row?.data[diffField];\r\n if (diffValue === undefined && e.rowType !== 'header') {\r\n e.cellElement.classList.add('blocked-cell');\r\n }\r\n }\r\n\r\n public OnSaving(e: any) {\r\n if (!e.changes.length) return;\r\n e.cancel = true;\r\n const updatedBillingContractViews = this.CreateUpdatedBillingContractViews(e.changes);\r\n e.promise = this.SaveChanges(updatedBillingContractViews[0]);\r\n }\r\n\r\n private CreateUpdatedBillingContractViews(changes: any[]): BillingContractView[] {\r\n const defaultValues = {\r\n BillingBaseAccountsQuantity: -999,\r\n BillingBaseUsersQuantity: -999,\r\n BillingQuantity: -999,\r\n BillingSum: -999\r\n };\r\n\r\n return changes.map(item => {\r\n const view = new BillingContractView();\r\n Object.assign(view, defaultValues, item.key, item.data);\r\n return view;\r\n });\r\n }\r\n\r\n private SaveChanges(entry: BillingContractView): Promise {\r\n return new Promise((resolve) => {\r\n this.Do(this.billingContractsReportEndpoint.Save(entry), true, async () => {\r\n this.editRowKey = null;\r\n this.changes = [];\r\n this.Reload.emit();\r\n resolve(true);\r\n }, (response) => {\r\n this.UI.StopMessage(response.ResponseMessage);\r\n resolve(false);\r\n });\r\n this.billingGrid.instance.collapseRow(this.editRowKey);\r\n this.Reload.emit();\r\n });\r\n }\r\n\r\n public OnActualizeBillingDataButtonClick(e) {\r\n this.editRowKey = e?.row?.key;\r\n const billingContractView = (e?.row?.data) as BillingContractView;\r\n\r\n const actualAccountQuantity = billingContractView.ActualAccountQuantity;\r\n const actualUsersQuantity = billingContractView.ActualUsersQuantity;\r\n\r\n const contractBaseAccountsQuantity = billingContractView.ContractBaseAccountsQuantity === undefined ? 0 : billingContractView.ContractBaseAccountsQuantity;\r\n const contractBaseUsersQuantity = billingContractView.ContractBaseUsersQuantity === undefined ? 0 : billingContractView.ContractBaseUsersQuantity;\r\n\r\n const updatedRowValues = {\r\n data: {\r\n BillingBaseAccountsQuantity: (actualAccountQuantity !== null && actualAccountQuantity !== undefined)\r\n ? Math.max(actualAccountQuantity, contractBaseAccountsQuantity)\r\n : undefined,\r\n BillingBaseUsersQuantity: (actualUsersQuantity !== null && actualUsersQuantity !== undefined)\r\n ? Math.max(actualUsersQuantity, contractBaseUsersQuantity)\r\n : undefined,\r\n BillingQuantity: Math.max(billingContractView.ActualCompanyQuantity, billingContractView.ContractQuantity),\r\n BillingSum: billingContractView.ActualSum\r\n },\r\n key: this.editRowKey,\r\n type: 'update'\r\n };\r\n this.changes = [];\r\n this.changes.push(updatedRowValues);\r\n }\r\n\r\n public IsActualizeButtonVisible(e) {\r\n const data = e?.row?.data;\r\n const isBaseReportModule = data.ReportModule === EnumBillingContractsReportModule.Base;\r\n const isSumEqual = data.BillingSum === data.ActualSum;\r\n\r\n const companiesQuantityToCompare = Math.max(data.ActualCompanyQuantity, data.ContractQuantity);\r\n\r\n if (isBaseReportModule) {\r\n const accountsQuantityToCompare = Math.max(data.ActualAccountQuantity, data.ContractBaseAccountsQuantity);\r\n const usersQuantityToCompare = Math.max(data.ActualUsersQuantity, data.ContractBaseUsersQuantity);\r\n\r\n return data.BillingQuantity !== companiesQuantityToCompare ||\r\n data.BillingBaseAccountsQuantity !== accountsQuantityToCompare ||\r\n data.BillingBaseUsersQuantity !== usersQuantityToCompare ||\r\n !isSumEqual;\r\n }\r\n\r\n return !isSumEqual || data.BillingQuantity !== companiesQuantityToCompare;\r\n }\r\n\r\n public NavigateToBillingContract(e: any) {\r\n const data = e.data;\r\n const isCurrentCellBeingEdited = e?.column?.allowEditing\r\n && this.editRowKey !== null\r\n && this.editRowKey['EntryID'] === data?.EntryID\r\n && this.editRowKey['ReportModule'] === data?.ReportModule;\r\n\r\n if (e.rowType === 'data' && e.column.type !== 'detailExpand' && !isCurrentCellBeingEdited) {\r\n this.A.Navigator.Navigate(['/pages/billing-contract', e.key.EntryID], { OrganizationID: e.data.OrganizationID });\r\n }\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n if (ExternalEntityType == BillingContract) this.Reload.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 \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\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 { BillingContractView } from '../../../../../../../Kraken/Angular/ClientApp/_proxy/views/billingcontract.view';\r\nimport { EnumBillingContractsReportModule, EnumBillingContractViewSubmodules } from '../../../../../../../Kraken/Angular/ClientApp/_proxy/enums';\r\nimport { DxDataGridComponent } from 'devextreme-angular';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BillingContractsReportEndpoint } from '@kraken/_proxy/endpoints/billingcontractsreport.endpoint';\r\nimport { BillingContract } from '@kraken/_proxy/entities/billingcontract.entity';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport DataSource from 'devextreme/data/data_source';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-billing-contracts-report-billing-grid',\r\n templateUrl: './billing-contracts-report-billing-grid.component.html',\r\n styleUrls: ['./billing-contracts-report-billing-grid.component.scss']\r\n})\r\nexport class BillingContractsReportBillingGridComponent extends BaseGridComponent {\r\n @Input() BillingMonth: Date;\r\n @Input() IsSubgridMode: boolean = false;\r\n @Output() Reload: EventEmitter = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService, private billingContractsReportEndpoint: BillingContractsReportEndpoint) {\r\n super(A, 'BillingContractsReportBillingGridComponent', BillingContractView, BaseState);\r\n this.BindHandler('OnActualizeBillingDataButtonClick');\r\n this.BindHandler('IsActualizeButtonVisible');\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n if (ExternalEntityType == BillingContract) this.Reload.emit();\r\n }\r\n\r\n public OnCellPrepared(e: any): void {\r\n this.PaintDiffCells(e);\r\n }\r\n\r\n private PaintDiffCells(e) {\r\n const columnsToPaint = ['AlternativeDiff', 'ExtraPrice', 'BillingTotal'];\r\n if (columnsToPaint.includes(e.column.dataField)) {\r\n e.cellElement.classList.add(e.data?.AlternativeDiff < 0 ? 'negative-amount' : 'positive-amount');\r\n }\r\n }\r\n\r\n public NavigateToBillingContract(e: any) {\r\n if (e.rowType === 'data') {\r\n this.A.Navigator.Navigate(['/pages/billing-contract', e.key.EntryID], { OrganizationID: e.data.OrganizationID });\r\n }\r\n }\r\n\r\n public IsActualizeButtonVisible(e) {\r\n const data = e?.row?.data;\r\n return data.Submodule === EnumBillingContractViewSubmodules.Companies && !this.IsSubgridMode;\r\n }\r\n\r\n public OnActualizeBillingDataButtonClick(e) {\r\n const cells = e.row.cells;\r\n const billingContractView = (e?.row?.data) as BillingContractView;\r\n billingContractView.BillingQuantity = Math.max(billingContractView.ActualCompanyQuantity, billingContractView.ContractQuantity);\r\n billingContractView.BillingSum = billingContractView.ActualSum;\r\n\r\n this.Do(this.billingContractsReportEndpoint.Save(billingContractView), true, async () => {\r\n // Change row background after actualization\r\n cells.forEach(cell => {\r\n cell.cellElement && (cell.cellElement.className += ' updated-cell');\r\n });\r\n // Hide actualization button after successful actualization\r\n cells[cells.length - 1].cellElement.className += ' m4u-hidden';\r\n }, (response) => {\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 \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\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 { EnumBillingContractsReportModule } from './../enums';\r\nexport class BillingContractReportParams extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'BillingContractReportParams';\r\n }\r\n \r\n public ReportModule: EnumBillingContractsReportModule; \r\n public OrganizationID: number; \r\n public ShowDifferencesOnly: boolean; \r\n public IsAlternativeGridView: boolean; \r\n public BillingMonth: Date; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { Component, ViewChild } from '@angular/core';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BillingContractsReportEndpoint } from '../../_proxy/endpoints/billingcontractsreport.endpoint';\r\nimport { OrganizationEndpoint } from '../../_proxy/endpoints/organization.endpoint';\r\nimport { BillingContractsReportGridComponent } from './billing-contracts-report-summary-grid/billing-contracts-report-grid.component';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { DataSourceCustomAction } from '../../../../src/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '../../../../src/base/datalayer/DataLoadOptions';\r\nimport { EnumBillingContractsReportModule } from '../../_proxy/enums';\r\nimport { BillingContractReportParams } from '../../_proxy/params/billingcontractreport.param';\r\nimport { BaseReportComponent, BaseReportState } from '../base-report/base-report.component';\r\nimport { FilterSettings } from '../../components/filter/filter.component';\r\nimport { QuickFilterComponent, QuickFilterSettings } from '../../components/quick-filter/quick-filter.component';\r\nimport { OrganizationSelectorComponent } from '@kraken/components/organization-selector/organization-selector.component';\r\nimport { DateHelpers } from \"@m4u-angular/core/helpers/DateHelpers\";\r\n\r\nexport class State extends BaseReportState {\r\n ReportModule: EnumBillingContractsReportModule;\r\n ShowDifferencesOnly: boolean;\r\n BillingMonth: Date;\r\n CurrentTabIndex = 0;\r\n ChildEntities = [];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n templateUrl: './billing-contracts-report.component.html'\r\n})\r\n\r\nexport class BillingContractsReportComponent extends BaseReportComponent {\r\n @ViewChild('reportGrid') reportGrid: BillingContractsReportGridComponent;\r\n @ViewChild('quickFilter') quickfilterComponent: QuickFilterComponent;\r\n\r\n constructor(A: ServiceBagService,\r\n private billingContractsReportEndpoint: BillingContractsReportEndpoint,\r\n private organizationEndpoint: OrganizationEndpoint) {\r\n super(A, 'BillingContractsReportComponent', State);\r\n }\r\n\r\n OnTabItemClick({ itemIndex }) {\r\n this.State.CurrentTabIndex = itemIndex;\r\n this.OnLoadData();\r\n }\r\n\r\n protected override OnGetCustomFilterSettings(): FilterSettings {\r\n return {\r\n Organization: { IsVisible: true, IsMultiple: false },\r\n } as FilterSettings;\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 protected override OnLoadData() {\r\n this.LoadBillingReport();\r\n }\r\n\r\n override OnInitState() {\r\n this.SetDefaultBillingMonthValue();\r\n }\r\n\r\n private SetDefaultBillingMonthValue() {\r\n if (!this.State.BillingMonth) {\r\n this.State.BillingMonth = DateHelpers.BOM(new Date());\r\n }\r\n }\r\n\r\n private LoadBillingReport() {\r\n const params = new BillingContractReportParams();\r\n params.IsAlternativeGridView = this.State.CurrentTabIndex === 1;\r\n params.ReportModule = params.IsAlternativeGridView ? undefined : this.State.ReportModule || null;\r\n params.OrganizationID = this.State.FilterValues.OrganizationID || null;\r\n params.ShowDifferencesOnly = params.IsAlternativeGridView ? undefined : this.State.ShowDifferencesOnly || false;\r\n params.BillingMonth = this.State.BillingMonth;\r\n\r\n this.DataSources['BillingContractViews'] = new DataSourceCustomAction(\r\n (options: DataLoadOptions) => this.billingContractsReportEndpoint.ListEx(params),\r\n undefined,\r\n (data) => {\r\n params.IsAlternativeGridView && (this.State.ChildEntities = data);\r\n },\r\n undefined,\r\n undefined,\r\n ['EntryID', 'ReportModule']\r\n );\r\n this.DS('BillingContractViews').Reload();\r\n }\r\n\r\n\r\n ReloadGrid() {\r\n this.LoadBillingReport();\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\";","import { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { 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 { EnumPageDisplayModes, EnumPageEntitySources } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { formatDate } from 'devextreme/localization';\r\n\r\nexport class State extends BaseState\r\n{\r\n Date: Date\r\n JEDate: Date;\r\n Amount: number\r\n Notes: string\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-booking-account-action-dialog',\r\n templateUrl: './booking-account-action-dialog.component.html',\r\n styleUrls: ['./booking-account-action-dialog.component.scss']\r\n})\r\nexport class BookingAccountActionDialogComponent extends BasePageComponent\r\n{\r\n @Input() IsShowAmount: boolean;\r\n @Input() IsShowNotes: boolean;\r\n @Input() IsShowJEDate: boolean;\r\n @Input() ActionTitle: string;\r\n @Input() Date: Date;\r\n\r\n constructor(A: ServiceBagService)\r\n {\r\n super(A, 'BookingAccountActionDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n\r\n override OnInitTitle(): string\r\n {\r\n return this.ActionTitle;\r\n }\r\n\r\n protected override OnInitComponentFinished(): void {\r\n this.State.Date = this.Date;\r\n \r\n const now = new Date();\r\n this.State.JEDate = new Date(now.getFullYear(), now.getMonth(), now.getDate());\r\n }\r\n}","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\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 { Component, EventEmitter, Input, Output, ViewChild } 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, BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport {\r\n EnumBookingAccountSubtypes,\r\n EnumBookingAccountDepositTypes,\r\n EnumBookingAccountStockTypes,\r\n EnumBankTypes,\r\n EnumBanks,\r\n EnumDataExportType,\r\n Enums\r\n} from '../../../_proxy/enums';\r\nimport { BookingAccountEndpoint } from '../../../_proxy/endpoints/bookingaccount.endpoint';\r\nimport { BookingAccountActionDialogComponent, State } from '../booking-account-action-dialog.component';\r\nimport { MessageBoxDialogComponent } from '@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\nimport { EnumMessageBoxTypes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { formatDate } from 'devextreme/localization';\r\nimport { Company } from '../../../_proxy/entities/company.entity';\r\nimport { Balance } from '../../../_proxy/entities/balance.entity';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { GenerateJournalEntryDialogComponent } from\r\n '../../../dialogs/generate-journal-entry-dialog/generate-journal-entry-dialog.component';\r\nimport { BookingAccount } from '../../../_proxy/entities/bookingaccount.entity';\r\nimport { DxTooltipComponent } from 'devextreme-angular';\r\nimport { RecategorizeDialogComponent } from '@kraken/dialogs/recategorize-dialog/recategorize-dialog.component';\r\nimport { Organization } from '@kraken/_proxy/entities/organization.entity';\r\nimport { ContextMenuElement } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { UploadDialogComponent } from '@kraken/dialogs/upload-dialog/upload-dialog.component';\r\nimport { DownloadRequest } from '../../../_proxy/entities/downloadrequest.entity';\r\nimport { OtpInputDialogComponent } from '../../../components/otp-input-dialog/otp-input-dialog.component';\r\nimport { DownloadRequestEndpoint } from '../../../_proxy/endpoints/downloadrequest.endpoint';\r\nimport { EnumBalanceDetailsReportModes } from '../../../_client.enums';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { AccessService } from '@kraken/services/access.service';\r\nimport { Deployment } from '@kraken/_proxy/entities/deployment.entity';\r\nimport { firstValueFrom } from 'rxjs';\r\nimport { Globals } from '@kraken/_globals';\r\n\r\nclass BookingAccountGridState extends BaseState {\r\n DownloadDateChangedIds: number[] = [];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-booking-account-grid',\r\n templateUrl: './booking-account-grid.component.html',\r\n styleUrls: ['./booking-account-grid.component.scss']\r\n})\r\nexport class BookingAccountGridComponent extends BaseGridComponent {\r\n @ViewChild('resetDialog') resetActionDialog: BookingAccountActionDialogComponent;\r\n @ViewChild('reloadDialog') reloadActionDialog: BookingAccountActionDialogComponent;\r\n @ViewChild('messageBox') messageBoxDialog: MessageBoxDialogComponent;\r\n @ViewChild('downloadTooltip') downloadTooltip: DxTooltipComponent;\r\n @ViewChild('otpInputDialog') otpInputDialog: OtpInputDialogComponent;\r\n\r\n @ViewChild(GenerateJournalEntryDialogComponent) generateJournalEntryDialog: GenerateJournalEntryDialogComponent;\r\n @ViewChild(RecategorizeDialogComponent) recategorizeDialog: RecategorizeDialogComponent;\r\n @ViewChild(UploadDialogComponent) uploadDialog: UploadDialogComponent;\r\n\r\n @Input() Type: EnumBookingAccountSubtypes;\r\n @Input() AccountID: number;\r\n @Input() AccountNumber: string;\r\n @Input() DefaultDownloadStartDate: Date;\r\n @Input() FocusedBookingAccountID: number;\r\n @Output() FocusedBookingAccountIDChange = new EventEmitter();\r\n @Input() Company: Company;\r\n @Input() BankType: EnumBankTypes;\r\n @Input()\r\n get Bank() {\r\n return this._Bank;\r\n }\r\n set Bank(v: EnumBanks) {\r\n this._Bank = v;\r\n }\r\n @Input() IsForCreationWizard = false;\r\n @Input() Organization: Organization;\r\n @Input() Deployment: Deployment;\r\n @Input() IsExternalAccountsMapping: boolean = false;\r\n @Input() Currency: string;\r\n @Input() ExternalAccountCode: string;\r\n @Input() ShowExternalMappingColumn: boolean = false;\r\n\r\n @Output() BookingAccountAdded = new EventEmitter();\r\n @Output() BookingAccountRemoved = new EventEmitter();\r\n @Output() BookingAccountsChanged = new EventEmitter();\r\n @Output() AfterReloadDataFromBank = new EventEmitter();\r\n\r\n @Output() BookingAccountDownloadDateChanged = new EventEmitter();\r\n\r\n public DeletedBookingAccountEntryIDs: number[] = [];\r\n private _Bank: EnumBanks;\r\n\r\n constructor(A: ServiceBagService,\r\n public accessService: AccessService,\r\n private endpoint: BookingAccountEndpoint,\r\n private downloadRequestEndpoint: DownloadRequestEndpoint) {\r\n super(A, 'BookingAccountGridComponent', BookingAccount, BookingAccountGridState);\r\n this.BindHandler('OnInitNewRow');\r\n this.BindHandler('OnReset');\r\n this.BindHandler('OnReload');\r\n this.BindHandler('OnReloadAll');\r\n this.BindHandler('OnDelete');\r\n this.BindHandler('OnGoToTransactions');\r\n this.BindHandler('OnRecategorize');\r\n this.BindHandler('OnRegenarateJournalEntries');\r\n this.BindHandler('OnUploadeRequestCreate');\r\n }\r\n\r\n OnInitNewRow(e) {\r\n this.G.SetData('AccountID', this.AccountID, e.data);\r\n this.G.SetData('Subtype', this.Type, e.data);\r\n\r\n if (this.G.GetRowCount() == 0) {\r\n this.G.SetData('Currency', this.Currency ?? 'ILS', e.data);\r\n }\r\n\r\n if(this.ExternalAccountCode) {\r\n if(!(this.IsDeposits() || this.IsStocks() || this.IsLoans() || this.IsGuarantee())) {\r\n this.G.SetData('BookingAccountCode', this.ExternalAccountCode, e.data);\r\n }\r\n \r\n if(this.IsCreditCard() || this.BankType === Enums.EnumBankTypes.ExternalCreditCard) {\r\n this.G.SetData('CC4Digits', this.ExternalAccountCode, e.data);\r\n }\r\n }\r\n\r\n if (this.G.GetColumn('IsActiveDownload')) {\r\n this.G.SetData('IsActiveDownload', true, e.data);\r\n }\r\n\r\n if (!this.IsForCreationWizard && this.G.GetColumn('IsActiveCashFlow')) {\r\n this.G.SetData('IsActiveCashFlow', false, e.data);\r\n }\r\n if ((this.IsCurrent() || this.IsCreditCard()) && this.G.GetColumn('IsActiveUpload') !== undefined) {\r\n this.G.SetData('IsActiveUpload', true, e.data);\r\n }\r\n if (this.IsDeposits()) this.G.SetData('DepositType', EnumBookingAccountDepositTypes.All, e.data);\r\n if (this.IsStocks()) this.G.SetData('StockType', EnumBookingAccountStockTypes.All, e.data);\r\n if (this.DefaultDownloadStartDate && this.G.GetColumn('DownloadStartDate')) {\r\n this.G.SetData('DownloadStartDate', this.DefaultDownloadStartDate, e.data);\r\n if (this.G.GetColumn('JournalEntryPostingStartDate')) {\r\n this.G.SetData('JournalEntryPostingStartDate', this.DefaultDownloadStartDate, e.data);\r\n }\r\n }\r\n if ((this.BankType === EnumBankTypes.ExternalCreditCard) && this.IsCreditCard() && this.AccountNumber)\r\n this.G.SetData('CC4Digits', this.AccountNumber.substr(this.AccountNumber.length - 4), e.data);\r\n\r\n // we do want to add only one booking account for Plaid in wizard\r\n if(this.IsExternalAccountsMapping) {\r\n this.ShowAddButton = false;\r\n }\r\n }\r\n\r\n OnRowInserted(e) {\r\n this.BookingAccountAdded.emit(e.data);\r\n }\r\n\r\n OnRowRemoved(e) {\r\n const entryID = e.data && !isNaN(e.data.EntryID) && e.data.EntryID;\r\n if (entryID) {\r\n this.DeletedBookingAccountEntryIDs.push(entryID);\r\n }\r\n\r\n // we do want to add only one booking account for Plaid in wizard\r\n if(this.IsExternalAccountsMapping) {\r\n this.ShowAddButton = true;\r\n }\r\n\r\n this.BookingAccountRemoved.emit(e.data);\r\n }\r\n\r\n OnRowUpdating(e) {\r\n e.key.JournalEntryPostingStartDate =\r\n this.ChangeJEPostingStartDate(e.oldData.DownloadStartDate, e.newData.DownloadStartDate, e.key.JournalEntryPostingStartDate);\r\n }\r\n\r\n OnDownloadStartDateChanged(newValue, cellInfo: any) {\r\n cellInfo.row.data.JournalEntryPostingStartDate =\r\n this.ChangeJEPostingStartDate(cellInfo.row.data.DownloadStartDate, newValue, cellInfo.row.data.JournalEntryPostingStartDate);\r\n }\r\n\r\n // eslint-disable-next-line max-len\r\n private ChangeJEPostingStartDate(oldDownloadStartDate: Date | string, newDownloadStartDate: Date | string, jePostingStartDate: Date | string) {\r\n if (newDownloadStartDate) {\r\n newDownloadStartDate = typeof newDownloadStartDate === 'object'\r\n ? formatDate(newDownloadStartDate, 'yyyy-MM-dd')\r\n : newDownloadStartDate;\r\n oldDownloadStartDate = typeof oldDownloadStartDate === 'object'\r\n ? formatDate(oldDownloadStartDate, 'yyyy-MM-dd')\r\n : oldDownloadStartDate;\r\n jePostingStartDate = typeof jePostingStartDate === 'object' ? formatDate(jePostingStartDate, 'yyyy-MM-dd') : jePostingStartDate;\r\n\r\n if (newDownloadStartDate !== oldDownloadStartDate && jePostingStartDate === oldDownloadStartDate) {\r\n return newDownloadStartDate;\r\n }\r\n }\r\n\r\n return jePostingStartDate;\r\n }\r\n\r\n OnReset(e) {\r\n this.Do(this.endpoint.GetLastBalance(e?.row?.data?.EntryID), false, (response: BaseEntityResponse) => {\r\n this.resetActionDialog.Date = response.Entity && response.Entity.Date;\r\n this.resetActionDialog.ShowDialogShort((state: State) => {\r\n this.messageBoxDialog.Type = EnumMessageBoxTypes.YesNo;\r\n this.messageBoxDialog.Title = this.RC('titleReset');\r\n this.messageBoxDialog.Prompt = this.RC('BookingAccountResetQuestion',\r\n response.Entity && response.Entity.BalanceActual || 0, state.Amount);\r\n this.messageBoxDialog.ShowDialogShort(() =>\r\n this.Do(this.endpoint.ResetBalance(e?.row?.data?.EntryID, state.Date, state.Amount, state.Notes), true));\r\n });\r\n });\r\n }\r\n\r\n async OnReload(e) {\r\n console.log(e);\r\n const isCurrentOrCreditCardSubtype = (e.data as BookingAccount)?.Subtype == EnumBookingAccountSubtypes.CreditCard \r\n || (e.data as BookingAccount)?.Subtype == EnumBookingAccountSubtypes.Current;\r\n \r\n if(!isCurrentOrCreditCardSubtype) {\r\n this.reloadActionDialog.Date = Globals.Yesterday;\r\n this.reloadActionDialog.IsShowJEDate = false;\r\n } else {\r\n this.reloadActionDialog.Date = undefined;\r\n this.reloadActionDialog.IsShowJEDate = true;\r\n }\r\n\r\n this.reloadActionDialog.ShowDialogShort(async (state: State) => {\r\n const EntryId = e?.row?.data?.EntryID;\r\n\r\n let JEDate = state.JEDate;\r\n\r\n if(!isCurrentOrCreditCardSubtype) {\r\n JEDate = state.Date;\r\n }\r\n\r\n const bookingAccountHasReconciliations = \r\n (await firstValueFrom(this.endpoint.IsHasReconciliationsWithActiveCashFlow(EntryId, state.Date))).Data;\r\n\r\n let promptMessage = 'BookingAccountReloadQuestion';\r\n if (bookingAccountHasReconciliations) {\r\n promptMessage = 'BookingAccountReloadQuestionActiveReconciliations';\r\n }\r\n\r\n this.messageBoxDialog.Type = EnumMessageBoxTypes.YesNo;\r\n this.messageBoxDialog.Title = this.RC('titleReload');\r\n this.messageBoxDialog.Prompt = this.RC(promptMessage, formatDate(state.Date, this.F.DateFormatLong));\r\n this.messageBoxDialog.ShowDialogShort(() => \r\n this.Do(this.endpoint.ReloadBalance(EntryId, state.Date, JEDate), true, \r\n (_) => this.AfterReloadDataFromBank.emit()));\r\n });\r\n }\r\n\r\n OnReloadAll(e) {\r\n this.messageBoxDialog.Type = EnumMessageBoxTypes.YesNo;\r\n this.messageBoxDialog.Title = this.RC('titleReload');\r\n this.messageBoxDialog.Prompt = this.RC('BookingAccountReloadAllQuestion');\r\n this.messageBoxDialog.ShowDialogShort(() => this.Do(this.endpoint.ReloadBalance(e?.row?.data?.EntryID, null, null), true));\r\n }\r\n\r\n OnDownloadRequestedData(e) {\r\n this.Do(this.downloadRequestEndpoint.DownloadBookingAccountUpdatedData(this.AccountID, e?.row?.data?.EntryID), true,\r\n (data: BaseEntityResponse) => {\r\n if (data.Entity) {\r\n this.otpInputDialog.downloadRequest = data.Entity;\r\n this.otpInputDialog.Message = data.ResponseMessage;\r\n this.otpInputDialog.ShowDialogShort(() => { });\r\n }\r\n });\r\n }\r\n\r\n OnGoToTransactions(e) {\r\n this.Navigate(['/pages/transaction-report'], {\r\n OrganizationID: this.Company.OrganizationID,\r\n CompanyID: this.Company.EntryID,\r\n AccountID: this.AccountID,\r\n BookingAccountID: e?.row?.data?.EntryID\r\n });\r\n }\r\n\r\n OnDelete(e) {\r\n if (!e?.row?.data?.EntryID || isNaN(e?.row?.data?.EntryID)) {\r\n this.grid.instance.deleteRow(e?.row?.rowIndex);\r\n return;\r\n }\r\n\r\n Promise.all([\r\n new Promise((resolve, reject) => this.Do(this.endpoint.IsBalanceExists(e?.row?.data?.EntryID), false, ({ Data }) => {\r\n if (Data) reject();\r\n else resolve(Data);\r\n }, reject)),\r\n new Promise((resolve, reject) => this.Do(this.endpoint.IsDeletable(e?.row?.data?.EntryID), false, ({ Data }) => {\r\n if (Data) resolve(Data);\r\n else reject();\r\n }, reject))\r\n ])\r\n .then(() => this.grid.instance.deleteRow(e?.row?.rowIndex))\r\n .catch(() => this.UI.StopMessage(this.RC('msgBookingAccountNotDeletable')));\r\n }\r\n\r\n OnEditorPreparing(e) {\r\n const { editorOptions } = e;\r\n if (e.parentType != 'dataRow' || e.dataField != 'DownloadStartDate') return;\r\n editorOptions.disabled = e.row.data.IsTransactionsExist;\r\n\r\n const standardHandler = e.editorOptions.onValueChanged;\r\n e.editorOptions.onValueChanged = (event) => {\r\n standardHandler(event);\r\n e.row.data.EntryID && this.State.DownloadDateChangedIds.push(+e.row.data.EntryID);\r\n this.BookingAccountDownloadDateChanged.emit(this.State.DownloadDateChangedIds.length);\r\n };\r\n }\r\n\r\n OnRecategorize(e) {\r\n this.recategorizeDialog.RecategorizeByBookingAccount(e?.row?.data?.EntryID);\r\n }\r\n\r\n OnRegenarateJournalEntries(e) {\r\n this.generateJournalEntryDialog.RegenarateJournalEntriesByBookingAccount(e?.row?.data?.EntryID, this.Company.OrganizationID);\r\n }\r\n\r\n OnUploadeRequestCreate(e) {\r\n this.uploadDialog.BookingAccountID = e?.row?.data?.EntryID;\r\n this.uploadDialog.OpenDialog();\r\n }\r\n\r\n IsDeposits() {\r\n return this.Type == EnumBookingAccountSubtypes.Deposits;\r\n }\r\n\r\n IsCurrent() {\r\n return this.Type == EnumBookingAccountSubtypes.Current;\r\n }\r\n\r\n IsCreditCard() {\r\n return this.Type == EnumBookingAccountSubtypes.CreditCard;\r\n }\r\n\r\n IsStocks() {\r\n return this.Type == EnumBookingAccountSubtypes.Stocks;\r\n }\r\n\r\n IsLoans() {\r\n return this.Type == EnumBookingAccountSubtypes.Loans;\r\n }\r\n\r\n IsGuarantee() {\r\n return this.Type == EnumBookingAccountSubtypes.Guarantee;\r\n }\r\n\r\n IsBezeqZahav() {\r\n return this.Deployment?.DataExportType === EnumDataExportType.BezeqZahav14File\r\n || this.Deployment?.DataExportType === EnumDataExportType.BezeqZahav24File\r\n || this.Deployment?.DataExportType === EnumDataExportType.BezeqZahav48File;\r\n }\r\n\r\n OnCellClick(e: any) {\r\n this.BookingAccountsChanged.emit();\r\n }\r\n\r\n protected override GetGridRowContextMenu(options?: any): ContextMenuElement[] {\r\n const contextMenuItems = [];\r\n if (options?.data?.EntryID) {\r\n if (!this.IsForCreationWizard) {\r\n contextMenuItems.push({\r\n text: this.RC('btnDownloadUpdatedData'),\r\n onClick: () => this.OnDownloadRequestedData(options),\r\n visible: () => !this.State.DownloadDateChangedIds.some(x => x === options?.data?.EntryID)\r\n });\r\n }\r\n if (!this.IsForCreationWizard && this.Company && this.Company.IsHasAutomaticDeployment) {\r\n contextMenuItems.push({\r\n text: this.RC('btnUpload'),\r\n onClick: () => this.OnUploadeRequestCreate(options)\r\n });\r\n }\r\n if (!this.IsForCreationWizard && (this.IsCurrent() || this.IsCreditCard())) {\r\n contextMenuItems.push({\r\n text: this.RC('titleReload'),\r\n onClick: () => this.OnReload(options)\r\n });\r\n }\r\n if (!this.IsForCreationWizard && (this.IsDeposits() || this.IsStocks() || this.IsLoans() || this.IsGuarantee())) {\r\n contextMenuItems.push({\r\n text: this.RC('titleReload'),\r\n onClick: () => this.OnReload(options)\r\n });\r\n }\r\n if (!this.IsForCreationWizard && (this.IsCurrent() || this.IsCreditCard())) {\r\n contextMenuItems.push({\r\n text: this.RC('titleReset'),\r\n onClick: () => this.OnReset(options)\r\n });\r\n }\r\n if (!this.IsForCreationWizard && (this.IsCurrent() || this.IsCreditCard())) {\r\n contextMenuItems.push({\r\n text: this.RC('btnTransactionsReport'),\r\n onClick: () => this.OnGoToTransactions(options)\r\n });\r\n }\r\n if (!this.IsForCreationWizard && (this.IsDeposits() || this.IsStocks() || this.IsLoans() || this.IsGuarantee())) {\r\n contextMenuItems.push({\r\n text: this.RC('btnBalancesReport'),\r\n onClick: () => this.OnGoToBalances(options)\r\n });\r\n }\r\n if (!this.IsForCreationWizard && (this.IsCurrent() || this.IsCreditCard() || this.IsDeposits() || this.IsLoans()\r\n || this.IsStocks() || this.IsGuarantee())) {\r\n contextMenuItems.push({\r\n text: this.RC('lblRecategorize'),\r\n onClick: () => this.OnRecategorize(options)\r\n });\r\n }\r\n if (!this.IsForCreationWizard && (this.IsCurrent() || this.IsCreditCard())\r\n && this.Organization && this.Organization.IsLicensedForJournalEntries) {\r\n contextMenuItems.push({\r\n text: this.RC('lblRegenarateJournalEntries'),\r\n onClick: () => this.OnRegenarateJournalEntries(options)\r\n });\r\n }\r\n }\r\n\r\n contextMenuItems.push({\r\n text: this.RC('titleDelete'),\r\n onClick: () => this.OnDelete(options)\r\n });\r\n\r\n return contextMenuItems;\r\n }\r\n\r\n OnGoToBalances(e) {\r\n if (!e) return;\r\n\r\n const path = this.IsDeposits()\r\n ? 'balance-depos-report'\r\n : this.IsStocks()\r\n ? 'balance-stocks-report'\r\n : this.IsLoans()\r\n ? 'balance-loans-report'\r\n : this.IsGuarantee()\r\n ? 'balance-guarantees-report'\r\n : undefined;\r\n const mode = this.IsDeposits() ? EnumBalanceDetailsReportModes.Deposits : this.IsStocks()\r\n ? EnumBalanceDetailsReportModes.Stocks : this.IsLoans() ? EnumBalanceDetailsReportModes.Loans : this.IsGuarantee() ? EnumBalanceDetailsReportModes.Guarantees : undefined;\r\n\r\n if (Utils.IsEmpty(path) || Utils.IsEmpty(mode)) return;\r\n\r\n this.Navigate([`pages/${path}`], {\r\n OrganizationID: this.Company.OrganizationID,\r\n CompanyID: this.Company.EntryID,\r\n AccountID: this.AccountID,\r\n BookingAccountID: e?.row?.data?.EntryID,\r\n Mode: mode\r\n });\r\n }\r\n\r\n IsJEPostingStartDateColumnVisible() {\r\n return this.accessService.IsAllowJournalEntryPosting()\r\n && this.BankType !== Enums.EnumBankTypes.ExternalLoaner\r\n && (this.IsCurrent() || this.IsCreditCard());\r\n }\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 { EnumBookingAccountSubtypes, EnumBookingAccountDepositTypes, EnumBookingAccountStockTypes } from \"../_proxy/enums\";\r\nimport { BaseService } from '@m4u-angular/base/service/BaseService';\r\n\r\n@Injectable()\r\nexport class BookingAccountTemplateService extends BaseService\r\n{\r\n GetSimpleBookingAccountsTemplate = (AccountID: number) =>\r\n [\r\n {\r\n AccountID: AccountID,\r\n Subtype: EnumBookingAccountSubtypes.Current,\r\n Currency: \"ILS\",\r\n IsActiveDownload: true,\r\n IsActiveUpload: true\r\n },\r\n {\r\n AccountID: AccountID,\r\n Subtype: EnumBookingAccountSubtypes.Current,\r\n Currency: \"USD\",\r\n IsActiveDownload: true,\r\n IsActiveUpload: true\r\n }\r\n ,\r\n {\r\n AccountID: AccountID,\r\n Subtype: EnumBookingAccountSubtypes.Current,\r\n Currency: \"EUR\",\r\n IsActiveDownload: true,\r\n IsActiveUpload: true\r\n }\r\n ]\r\n\r\n GetNormalBookingAccountsTemplate = (AccountID: number) =>\r\n [\r\n {\r\n AccountID: AccountID,\r\n Subtype: EnumBookingAccountSubtypes.CreditCard,\r\n Currency: \"ILS\",\r\n IsActiveDownload: true,\r\n IsActiveUpload: true\r\n },\r\n {\r\n AccountID: AccountID,\r\n Subtype: EnumBookingAccountSubtypes.CreditCard,\r\n Currency: \"USD\",\r\n IsActiveDownload: true,\r\n IsActiveUpload: true\r\n },\r\n {\r\n AccountID: AccountID,\r\n Subtype: EnumBookingAccountSubtypes.CreditCard,\r\n Currency: \"EUR\",\r\n IsActiveDownload: true,\r\n IsActiveUpload: true\r\n },\r\n {\r\n AccountID: AccountID,\r\n Subtype: EnumBookingAccountSubtypes.Deposits,\r\n DepositType: EnumBookingAccountDepositTypes.All,\r\n Currency: \"ILS\",\r\n IsActiveDownload: true,\r\n IsActiveUpload: true\r\n }\r\n ];\r\n\r\n GetExtendedBookingAccountsTemplate = (AccountID: number) =>\r\n [\r\n {\r\n AccountID: AccountID,\r\n Subtype: EnumBookingAccountSubtypes.Stocks,\r\n StockType: EnumBookingAccountStockTypes.All,\r\n Currency: \"ILS\",\r\n IsActiveDownload: true,\r\n IsActiveUpload: true\r\n },\r\n {\r\n AccountID: AccountID,\r\n Subtype: EnumBookingAccountSubtypes.Stocks,\r\n StockType: EnumBookingAccountStockTypes.All,\r\n Currency: \"USD\",\r\n IsActiveDownload: true,\r\n IsActiveUpload: true\r\n }\r\n ];\r\n}","import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseDataResponse, BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { EnumBankTypes, EnumBookingAccountSubtypes, EnumBanks } from '../../../_proxy/enums';\r\nimport { BookingAccount } from '../../../_proxy/entities/bookingaccount.entity';\r\nimport { BookingAccountEndpoint } from '../../../_proxy/endpoints/bookingaccount.endpoint';\r\nimport { BookingAccountGridComponent } from './booking-account-grid.component';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { BookingAccountTemplateService } from '../../../services/booking-account-template.service';\r\nimport { Company } from '../../../_proxy/entities/company.entity';\r\nimport { BookingAccountListParams } from '../../../_proxy/params/bookingaccountlist.param';\r\nimport { TabsComponent } from '@m4u-angular/ui/components/tabs/tabs.component';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { BookingAccountView } from '../../../_proxy/views/bookingaccount.view';\r\nimport { Organization } from '@kraken/_proxy/entities/organization.entity';\r\nimport { DeploymentEndpoint } from '@kraken/_proxy/endpoints/deployment.endpoint';\r\nimport { Deployment } from '@kraken/_proxy/entities/deployment.entity';\r\nimport { OrganizationEndpoint } from '@kraken/_proxy/endpoints/organization.endpoint';\r\n\r\nclass State extends BaseState {\r\n CurrentType: EnumBookingAccountSubtypes;\r\n AccountID: number;\r\n AccountNumber: string;\r\n BookingAccounts: BookingAccountView[] = [];\r\n SubtypesFilter: EnumBookingAccountSubtypes[] = [];\r\n TabSubtypes: any[];\r\n BankType: EnumBankTypes;\r\n Deployment: Deployment;\r\n Bank: EnumBanks;\r\n\r\n Organization: Organization;\r\n Company: Company;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-booking-account-list',\r\n templateUrl: './booking-account-list.component.html'\r\n})\r\nexport class BookingAccountListComponent extends BaseComponent\r\n{\r\n private _allowedSubtypes: any[];\r\n @Input() IsExternalAccountsMapping: boolean;\r\n\r\n @Input() set AccountID(value: number) {\r\n this.State.AccountID = value;\r\n if (this.State.AccountID) {\r\n this.LoadDataSource();\r\n this.SetTabsBadges();\r\n }\r\n }\r\n\r\n @Input() set AccountNumber(value: string) {\r\n this.State.AccountNumber = value;\r\n if (this.Bank !== EnumBanks.LeumiMax) { return; }\r\n for (const bookingAccount of this.State.BookingAccounts) {\r\n bookingAccount.CC4Digits = value;\r\n }\r\n }\r\n\r\n @Input() set BankType(value: EnumBankTypes) {\r\n this.State.BankType = value;\r\n this.DisplaySubTypesTabs();\r\n }\r\n\r\n @Input() DefaultDownloadStartDate: Date;\r\n\r\n private _currentType: EnumBookingAccountSubtypes;\r\n @Input() set CurrentType(value: EnumBookingAccountSubtypes) {\r\n this.ChangeCurrentType(value);\r\n this._currentType = value;\r\n }\r\n @Output() CurrentTypeChange = new EventEmitter();\r\n\r\n @Input() FocusedBookingAccountID: number;\r\n @Input() Bank: EnumBanks;\r\n @Output() FocusedBookingAccountIDChange = new EventEmitter();\r\n\r\n @Input() set Company(company: Company){\r\n this.State.Company = company;\r\n\r\n if (company?.OrganizationID && company?.OrganizationID !== this.State.Organization?.EntryID) { \r\n this.LoadOrganization(company.OrganizationID); \r\n }\r\n }\r\n @Input() IsForCreationWizard = false;\r\n @Input() set BookingAccounts(value: BookingAccountView[]) {\r\n this.State.BookingAccounts = value;\r\n }\r\n @Input() Currency: string;\r\n @Input() Organization: Organization;\r\n @Input() set DeploymentID(value: number) {\r\n if (value) { this.LoadDeployment(value); }\r\n }\r\n @Input() ExternalAccountCode: string;\r\n @Input() ShowExternalMappingColumn: boolean = false;\r\n\r\n @Output() OnAfterLoad = new EventEmitter();\r\n @Output() BookingAccountRemoved = new EventEmitter();\r\n @Output() BookingAccountAdded = new EventEmitter();\r\n @Output() BookingAccountChanged = new EventEmitter();\r\n\r\n @Output() BookingAccountDownloadDateChanged = new EventEmitter();\r\n\r\n @ViewChild('grid') grid: BookingAccountGridComponent;\r\n @ViewChild('subtypesTabs') subtypesTabs: TabsComponent;\r\n\r\n constructor(A: ServiceBagService, \r\n private endpoint: BookingAccountEndpoint, \r\n private bookingAccountTemplateService: BookingAccountTemplateService,\r\n private deploymentEndpoint: DeploymentEndpoint,\r\n private organizationEndpoint: OrganizationEndpoint) {\r\n super(A, 'BookingAccountListComponent', State);\r\n this._allowedSubtypes = this.DS('AllowedSubtypes') as unknown as any[];\r\n this.State.TabSubtypes = this._allowedSubtypes;\r\n }\r\n\r\n override OnInitComponentFinished() {\r\n if (!this.subtypesTabs || !this.subtypesTabs.Instance) return;\r\n if (this.subtypesTabs && this.subtypesTabs.Instance) { this.subtypesTabs.Instance.repaint(); }\r\n setTimeout(() => this.FilterBySubType());\r\n if (this.State.AccountID) { this.SetTabsBadges(); }\r\n }\r\n\r\n SetTabsBadges() {\r\n if(this.IsExternalAccountsMapping) {\r\n return;\r\n }\r\n\r\n if (this.State.AccountID > 0) {\r\n this.State.TabSubtypes.forEach(item => {\r\n const count = this.State.BookingAccounts.filter(ba => ba.Subtype === (item as any).Value).length;\r\n if (count > 0) { (item as any).badge = count; }\r\n });\r\n \r\n this.State.TabSubtypes.forEach(item => this.Do(this.endpoint.GetSubtypesCount(this.State.AccountID, (item as any).Value), false, (response: BaseDataResponse) => {\r\n (item as any).badge = (item as any).badge ? (+(item as any).badge + response.Data) : response.Data;\r\n }));\r\n }\r\n }\r\n\r\n override OnDestroyComponent() {\r\n this.State.TabSubtypes.forEach(item => (item as any).badge = undefined);\r\n }\r\n\r\n override InitState() {\r\n const getCurrentTypeValue = () => {\r\n if (this._currentType) return this._currentType\r\n\r\n switch (this.State.BankType) {\r\n case EnumBankTypes.ExternalCreditCard:\r\n return EnumBookingAccountSubtypes.CreditCard\r\n\r\n case EnumBankTypes.ExternalLoaner:\r\n return EnumBookingAccountSubtypes.Loans\r\n\r\n default:\r\n return EnumBookingAccountSubtypes.Current\r\n }\r\n }\r\n\r\n this.State.CurrentType = getCurrentTypeValue()\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n if (ExternalEntityType == BookingAccount) this.LoadDataSource();\r\n }\r\n\r\n public LoadDataSource() {\r\n // if this is for creation wizard, @Input() BookingAccounts should be provided\r\n if (this.IsForCreationWizard) { return; }\r\n\r\n var params = new BookingAccountListParams();\r\n params.Accounts = this.State.AccountID ? [this.State.AccountID] : null;\r\n params.BookingAccountSubtypes = this.State.SubtypesFilter.length ? this.State.SubtypesFilter : null;\r\n params.IncludeTransactionInfo = true;\r\n\r\n this.Do(\r\n this.endpoint.ListEx(params),\r\n false,\r\n (response) => {\r\n const data = response.Entities;\r\n this.State.BookingAccounts = data;\r\n this.OnAfterLoad.emit(data.length);\r\n setTimeout(() => this.FilterBySubType(), 10);\r\n if(this.grid){\r\n this.grid.FocusedBookingAccountID = this.FocusedBookingAccountID;\r\n }\r\n }\r\n );\r\n\r\n }\r\n\r\n public AcceptChanges() {\r\n if (this.grid) { this.grid.G.AcceptChanges(); }\r\n }\r\n\r\n public ReloadGrid() {\r\n this.grid.DeletedBookingAccountEntryIDs = [];\r\n this.LoadDataSource();\r\n }\r\n\r\n OnSelectTab(e) {\r\n this.ChangeCurrentType(e.itemData.Value);\r\n }\r\n\r\n FilterBySubType() {\r\n if (this.grid) { this.grid.G.SetGridFilter(\"Subtype\", \"=\", this.State.CurrentType); }\r\n }\r\n\r\n GetSelectedIndex() {\r\n const index = this.State.TabSubtypes.findIndex(item => item.Value === this.State.CurrentType)\r\n\r\n if (index === -1) return 0\r\n\r\n if (this.subtypesTabs?.tabs) {\r\n this.subtypesTabs.tabs.selectedIndex = index;\r\n }\r\n\r\n return 0\r\n }\r\n\r\n public AddSimpleTemplate() {\r\n var bookingAccounts = this.bookingAccountTemplateService.GetSimpleBookingAccountsTemplate(this.State.AccountID);\r\n this.AddRange(bookingAccounts as BookingAccountView[]);\r\n }\r\n\r\n public AddNormalTemplate() {\r\n var bookingAccounts = this.bookingAccountTemplateService.GetNormalBookingAccountsTemplate(this.State.AccountID);\r\n this.AddRange(bookingAccounts as BookingAccountView[]);\r\n }\r\n\r\n public AddExtendedTemplate() {\r\n var bookingAccounts = this.bookingAccountTemplateService.GetExtendedBookingAccountsTemplate(this.State.AccountID);\r\n this.AddRange(bookingAccounts as BookingAccountView[]);\r\n }\r\n\r\n public AddRange(bookingAccounts: BookingAccountView[]) {\r\n this.State.BookingAccounts = (this.State.BookingAccounts || []).concat(bookingAccounts);\r\n }\r\n\r\n GetSubtypesForGrid() {\r\n if (this.State.BankType === EnumBankTypes.ExternalCreditCard) {\r\n return [EnumBookingAccountSubtypes.CreditCard]\r\n }\r\n\r\n if (this.State.BankType === EnumBankTypes.ExternalLoaner) {\r\n return [EnumBookingAccountSubtypes.Loans]\r\n }\r\n\r\n return [];\r\n }\r\n\r\n OnBookingAccountAdded(e) {\r\n const subType = this.State.TabSubtypes.find(s => s.Value === e.Subtype)\r\n if (!subType) return\r\n\r\n subType.badge = +subType.badge + 1;\r\n this.BookingAccountAdded.emit(e.EntryID);\r\n }\r\n\r\n OnBookingAccountRemoved(e) {\r\n this.State.TabSubtypes.find(s => s.Value === e.Subtype).badge = +this.State.TabSubtypes.find(s => s.Value === e.Subtype).badge - 1;\r\n this.BookingAccountRemoved.emit();\r\n }\r\n\r\n OnBookingAccountsChanged() {\r\n this.BookingAccountChanged.emit();\r\n }\r\n\r\n OnBookingAccountDownloadDateChanged(e) {\r\n this.BookingAccountDownloadDateChanged.emit(e);\r\n }\r\n\r\n public OnAfterReloadDataFromBank() {\r\n this.LoadDataSource();\r\n }\r\n\r\n private DisplaySubTypesTabs() {\r\n this.State.SubtypesFilter = this.IsExternalAccountsMapping && this.State.CurrentType\r\n ? [this.State.CurrentType] \r\n : this.GetSubtypesForGrid();\r\n\r\n this.State.TabSubtypes = this.State.SubtypesFilter.length \r\n ? this._allowedSubtypes.filter(s => this.State.SubtypesFilter.find(v => v === s.Value)) \r\n : this._allowedSubtypes;\r\n\r\n if (this.State.TabSubtypes.length && !this._currentType || this.State.TabSubtypes.length === 1) {\r\n this.State.CurrentType = this.State.TabSubtypes[0].Value;\r\n }\r\n \r\n setTimeout(() => this.FilterBySubType());\r\n }\r\n\r\n private ChangeCurrentType(type: EnumBookingAccountSubtypes) {\r\n if (!!type && type !== this.State.CurrentType) {\r\n if (this.grid && this.grid.G)\r\n this.grid.G.AcceptChanges();\r\n this.State.CurrentType = type;\r\n this.CurrentTypeChange.emit(type);\r\n this.FilterBySubType();\r\n setTimeout(() => { if (this.grid) { this.grid.G.Refresh(); } });\r\n }\r\n }\r\n\r\n private LoadDeployment(deploymentID: number) {\r\n this.Do(this.deploymentEndpoint.Get(deploymentID), false, (response) => {\r\n this.State.Deployment = response.Entity;\r\n });\r\n }\r\n\r\n private LoadOrganization(organizationID: number) {\r\n this.Do(this.organizationEndpoint.Get(organizationID), false, (response) => {\r\n this.State.Organization = response.Entity;\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\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class InitCashflowParams extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'InitCashflowParams';\r\n }\r\n \r\n public CompanyID: number; \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 ForecastMapper extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ForecastMapper';\r\n }\r\n \r\n public CompanyID: number; \r\n public DatasourceName: string; \r\n public AccountingEssense: string; \r\n public IsActive: boolean; \r\n public SyncStartDate: Date; \r\n public ScenarioID: number; \r\n public ProbabilityLevelID: number; \r\n public ScenarioName: string; \r\n public ProbabilityLevelName: string; \r\n\tpublic CreatedBy: number;\r\n\tpublic CreatedDate: Date;\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { ForecastMapper } from './../entities/forecastmapper.entity';\r\nimport { ForecastMapperListParams } from './../params/forecastmapperlist.param';\r\n@Injectable()\r\nexport class ForecastMapperEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(api: APIGatewayService) {super(\"ForecastMapper\", api);}\r\n\t\r\n\r\n public ListEx(CompanyID: number, LoadActive: boolean, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'ListEx', {CompanyID: CompanyID, LoadActive: LoadActive, options:options?.GetLoadOptions()} );\r\n }\r\n\r\n public ListExByParams(Params: ForecastMapperListParams, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListExByParams', Params, options?.GetLoadOptions() );\r\n }\r\n}\r\n\r\n","import { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ForecastMapperEndpoint } from '../../../_proxy/endpoints/forecastmapper.endpoint';\r\nimport { ForecastMapper } from '../../../_proxy/entities/forecastmapper.entity';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\n\r\nclass State extends BaseState {\r\n LoadActive: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-forecast-mapper-list',\r\n templateUrl: './forecast-mapper-list.component.html'\r\n})\r\nexport class ForecastMapperListComponent extends BaseComponent {\r\n\r\n @Input() CompanyID: number;\r\n @Input() IsAutoHeight: boolean = false;\r\n @Input() OrganizationID: number;\r\n @Input() IsShowActiveOnlyCheckbox: boolean;\r\n @Output() OnUpdateCount = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService,\r\n private endpoint: ForecastMapperEndpoint) {\r\n super(A, 'ForecastMapperListComponent', State);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n protected override OnInitState(): void {\r\n this.State.LoadActive = true;\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 == ForecastMapper) this.LoadDataSource();\r\n }\r\n\r\n OnAdd() {\r\n this.Navigate(['/pages/forecast-mapper/new'], { CompanyID: this.CompanyID, OrganizationID: this.OrganizationID });\r\n }\r\n\r\n LoadDataSource() {\r\n this.DataSources['ForecastMappers'] = new DataSourceCustomAction((options: DataLoadOptions) => \r\n this.endpoint.ListEx(this.CompanyID, this.State.LoadActive, options), null, (data) => {\r\n this.OnUpdateCount.emit(data.length);\r\n });\r\n }\r\n\r\n GetLinkParams() {\r\n return { CompanyID: this.CompanyID, OrganizationID: this.OrganizationID };\r\n }\r\n OnLoadActive(v) {\r\n this.State.LoadActive = v;\r\n this.LoadDataSource();\r\n }\r\n}\r\n","export default \"\\r\\n\";","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class CompanyWrapParams extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'CompanyWrapParams';\r\n }\r\n \r\n public CompanyID: number; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ContextMenuElement } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseDataResponse, BaseEntityResponse, BaseState, GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { TabsComponent } from '@m4u-angular/ui/components/tabs/tabs.component';\r\nimport { InputBoxDialogComponent } from '@m4u-angular/ui/dialogs/inputbox-dialog/inputboxdialog.component';\r\nimport { GenerateJournalEntryDialogComponent } from '../../dialogs/generate-journal-entry-dialog/generate-journal-entry-dialog.component';\r\nimport { ReconciliationDialogComponent } from '../../dialogs/reconciliation-dialog/reconciliation-dialog.component';\r\nimport { CompanyEndpoint } from '../../_proxy/endpoints/company.endpoint';\r\nimport { DownloadRequestEndpoint } from '../../_proxy/endpoints/downloadrequest.endpoint';\r\nimport { OrganizationEndpoint } from '../../_proxy/endpoints/organization.endpoint';\r\nimport { Company } from '../../_proxy/entities/company.entity';\r\nimport { Organization } from '../../_proxy/entities/organization.entity';\r\nimport { EnumAccountingSoftwares, EnumCompanyChildEntityTypes, EnumDataExportType, EnumIncomingPaymentUploadLevel } from '../../_proxy/enums';\r\nimport { InitCashflowParams } from '../../_proxy/params/initcashflow.param';\r\nimport { EnumMessageBoxTypes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { OtpInputDialogComponent } from '../../components/otp-input-dialog/otp-input-dialog.component';\r\nimport { MessageBoxDialogComponent } from '@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\nimport { DeploymentEndpoint } from '../../_proxy/endpoints/deployment.endpoint';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { RecategorizeDialogComponent } from \"@kraken/dialogs/recategorize-dialog/recategorize-dialog.component\";\r\nimport { ForecastMapper } from \"@kraken/_proxy/entities/forecastmapper.entity\";\r\nimport { AccessService } from \"@kraken/services/access.service\";\r\nimport { CompanyCreationWizardComponent } from '../company-creation-wizard/company-creation-wizard.component';\r\nimport { UploadDialogComponent } from '../../dialogs/upload-dialog/upload-dialog.component';\r\nimport { ForecastMapperListComponent } from '../forecast-mapper/list/forecast-mapper-list.component';\r\nimport { ToolbarSettings } from '@base/classes/BaseClasses';\r\nimport { BillingContractEndpoint } from '../../_proxy/endpoints/billingcontract.endpoint';\r\nimport { Component, ViewChild } from '@angular/core';\r\nimport { CompanyWrapParams } from '@kraken/_proxy/params/companywrap.param';\r\nimport { Deployment } from '@kraken/_proxy/entities/deployment.entity';\r\n\r\nclass State extends BaseState {\r\n Organization: Organization = new Organization;\r\n CurrentTabIndex = 0;\r\n CurrentSubTabIndex = 0;\r\n ShowInitCashflowMenu: boolean;\r\n IsForecastMappersExist: boolean;\r\n Badges: Record;\r\n CompanyTabs: (GenericListEntity & { badge: number; Type: EnumCompanyChildEntityTypes; })[];\r\n Deployment: Deployment;\r\n IsDownloadUpdatedDataBtnVisible: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-company',\r\n templateUrl: './company.component.html',\r\n styleUrls: ['./company.component.scss']\r\n})\r\nexport class CompanyComponent extends BasePageCRUDComponent {\r\n @ViewChild('tabs') tabs: TabsComponent;\r\n @ViewChild(GenerateJournalEntryDialogComponent) generateJournalEntryDialog: GenerateJournalEntryDialogComponent;\r\n @ViewChild(ReconciliationDialogComponent) reconciliationDialog: ReconciliationDialogComponent;\r\n @ViewChild(UploadDialogComponent) uploadDialog: UploadDialogComponent;\r\n @ViewChild(InputBoxDialogComponent) inputBoxDialog: InputBoxDialogComponent;\r\n @ViewChild('otpInputDialog') otpInputDialog: OtpInputDialogComponent;\r\n @ViewChild('messageBox') messageBoxDialog: MessageBoxDialogComponent;\r\n @ViewChild(RecategorizeDialogComponent) recategorizeDialog: RecategorizeDialogComponent;\r\n @ViewChild(CompanyCreationWizardComponent) wizardDialog: CompanyCreationWizardComponent;\r\n @ViewChild(ForecastMapperListComponent) forecastMapperList: ForecastMapperListComponent;\r\n\r\n get IsDbNameHidden() : boolean {\r\n if(!this.State.Deployment) return false;\r\n\r\n return this.State.Deployment.AccountingSoftware == EnumAccountingSoftwares.Priority\r\n || this.State.Deployment.AccountingSoftware == EnumAccountingSoftwares.Standalone\r\n || this.State.Deployment.AccountingSoftware == EnumAccountingSoftwares.SAPByDesign\r\n || this.State.Deployment.DataExportType != EnumDataExportType.Automatic; \r\n }\r\n\r\n constructor(A: ServiceBagService, private endpoint: CompanyEndpoint, private organizationEndpoint: OrganizationEndpoint,\r\n private downloadRequestEndpoint: DownloadRequestEndpoint, private deploymentEndpoint: DeploymentEndpoint,\r\n public accessService: AccessService,\r\n public billingContractEndpoint: BillingContractEndpoint) {\r\n super(A, 'CompanyComponent', Company, State, endpoint, EnumPageDisplayModes.FullScreen);\r\n }\r\n\r\n protected override OnInitState(): void {\r\n super.OnInitState();\r\n\r\n this.State.CompanyTabs = this.LIST('CompanyTabs') as any;\r\n }\r\n\r\n get CompanyTabs() {\r\n return this.State.CompanyTabs;\r\n }\r\n\r\n override OnInitComponent() {\r\n if (!this.accessService.IsAllowJournalEntryPosting()) {\r\n this.State.CompanyTabs = this.State.CompanyTabs.filter((tab: any) => tab.Type !== EnumCompanyChildEntityTypes.PostingTemplate);\r\n }\r\n if (!this.accessService.IsAllowCashflow()) {\r\n this.State.CompanyTabs = this.State.CompanyTabs.filter((tab: any) => tab.Type !== EnumCompanyChildEntityTypes.ForecastMapper);\r\n }\r\n if (!this.accessService.IsAllowCCProcessing()) {\r\n this.State.CompanyTabs = this.State.CompanyTabs.filter((tab: any) => tab.Type !== EnumCompanyChildEntityTypes.CCContract);\r\n }\r\n\r\n this.DisplayMode = this.IsAddMode ? EnumPageDisplayModes.Window : EnumPageDisplayModes.FullScreen;\r\n\r\n if (!this.IsAddMode) {\r\n this.UpdateTabsCounts();\r\n this.CheckForecastMapperCount();\r\n } else {\r\n this.Entity.UseAutomaticReconciliation = this.accessService.IsAllowCashflow() && true;\r\n }\r\n\r\n if (this.QueryParams?.Tab >= 1) {\r\n this.State.CurrentTabIndex = +this.QueryParams?.Tab;\r\n }\r\n\r\n if (this.QueryParams?.Subtab >= 1) {\r\n this.State.CurrentSubTabIndex = +this.QueryParams?.Subtab;\r\n }\r\n }\r\n\r\n async UpdateTabsCounts() {\r\n const promises = this.State.CompanyTabs.map(item => {\r\n return new Promise<[EnumCompanyChildEntityTypes, number]>((resolve, reject) => {\r\n this.Do(this.endpoint.GetChildObjectsCount(this.EntityEntryID, item.Type), false, (response: BaseDataResponse) => {\r\n resolve([item.Type, response.Data]);\r\n }, reject);\r\n });\r\n });\r\n\r\n const badges = await Promise.all(promises);\r\n const badgesByType = Object.fromEntries(badges);\r\n\r\n this.State.CompanyTabs.forEach(tab => {\r\n if (tab.Type in badgesByType) {\r\n tab.badge = badgesByType[tab.Type];\r\n }\r\n });\r\n }\r\n\r\n OnUpdateCount(count: number, type: EnumCompanyChildEntityTypes) {\r\n this.State.CompanyTabs.forEach(tab => {\r\n if (type !== tab.Type) return;\r\n tab.badge = count;\r\n });\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n if (ExternalEntityType === ForecastMapper) this.UpdateTabsCounts();\r\n if (ExternalEntityType == ForecastMapper) this.CheckForecastMapperCount();\r\n\r\n }\r\n CheckForecastMapperCount() {\r\n this.Do(this.endpoint.GetChildObjectsCount(this.EntityEntryID, EnumCompanyChildEntityTypes.ForecastMapper), false,\r\n (response: BaseDataResponse) => {\r\n this.State.IsForecastMappersExist = response.Data > 0;\r\n this.SetCashflowInitMenuVisibility();\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 private IsCashflowActive(): boolean {\r\n return this.Entity.IsSyncCashflow && this.State.Organization.IsLicensedForCashflow;\r\n }\r\n\r\n private SetCashflowInitMenuVisibility() {\r\n this.State.ShowInitCashflowMenu = this.IsCashflowActive() && !this.State.IsForecastMappersExist;\r\n }\r\n\r\n OnTabClick(event: any) {\r\n this.State.CurrentTabIndex = event.itemData.index;\r\n }\r\n\r\n override OnEntityInitObjectName() {\r\n return this.Entity && this.Entity.Name;\r\n }\r\n\r\n override OnEntityLoaded() {\r\n this.LoadOrganization(this.Entity.OrganizationID);\r\n this.InitDeployments(this.Entity.OrganizationID);\r\n this.InitBillingContracts(this.Entity.OrganizationID);\r\n this.OnDeploymentChanged(undefined);\r\n this.UpdateDownloadUpdatedButtonVisibility();\r\n }\r\n\r\n override OnEntityNew() {\r\n const { OrganizationID } = this.QueryParams;\r\n this.LoadOrganization(OrganizationID);\r\n this.InitDeployments(OrganizationID);\r\n this.InitBillingContracts(OrganizationID);\r\n this.Entity.IsActive = this.Entity.IsSyncAccounting = true;\r\n this.Entity.IsSyncCashflow = false;\r\n this.Entity.OrganizationID = OrganizationID;\r\n this.Do(this.deploymentEndpoint.ListEx(this.Entity.OrganizationID, null, null), false, (data) => {\r\n if (data.Entities && data.Entities.length === 1) {\r\n this.Entity.DeploymentID = data.Entities[0].EntryID;\r\n }\r\n });\r\n }\r\n\r\n override OnEntitySaved() {\r\n if (!this.IsAddMode) {\r\n this.NavigateBack();\r\n return;\r\n }\r\n this.Navigate(['/pages/company', this.Entity.EntryID], { OrganizationID: this.Entity.OrganizationID });\r\n }\r\n\r\n override ReflectEntityDeleted() {\r\n this.NavigateBack();\r\n }\r\n\r\n\r\n override OnInitContextMenus(): ContextMenuElement[] {\r\n if (this.IsAddMode) return undefined;\r\n const menus: ContextMenuElement[] =\r\n [\r\n {\r\n text: this.RC('btnDownloadUpdatedData'),\r\n visible: this.State.IsDownloadUpdatedDataBtnVisible,\r\n onClick: this.OnDownloadRequestedData.bind(this)\r\n },\r\n {\r\n text: this.RC('btnUpload'),\r\n visible: this.Entity.IsActive && this.Entity.IsHasAutomaticDeployment,\r\n onClick: this.OnUpload.bind(this)\r\n },\r\n {\r\n text: this.RC('btnTransactionsReport'),\r\n visible: this.Entity.IsActive,\r\n onClick: this.OnGoToTransactions.bind(this)\r\n },\r\n {\r\n text: this.RC('btnBalancesReport'),\r\n visible: this.Entity.IsActive,\r\n onClick: this.OnGoToBalances.bind(this)\r\n },\r\n {\r\n text: this.RC('btnSyncStatus'),\r\n visible: this.Entity.IsActive,\r\n onClick: this.OnGoToSyncStatus.bind(this)\r\n },\r\n {\r\n text: this.RC('lblRecategorize'),\r\n visible: this.Entity.IsActive,\r\n onClick: this.OnRecategorize.bind(this)\r\n },\r\n {\r\n text: this.RC('lblReconcile'),\r\n visible: this.Entity.IsActive,\r\n onClick: this.OnShowDialogRecioncile.bind(this)\r\n },\r\n {\r\n text: this.RC('lblRegenarateJournalEntries'),\r\n visible: this.Entity.IsActive && this.State.Organization && this.accessService.IsAllowJournalEntryPosting(),\r\n onClick: this.OnShowDialogRegenarateJournalEntries.bind(this)\r\n },\r\n {\r\n text: this.RC('titleInitCashflow'),\r\n visible: this.Entity.IsActive && this.State.ShowInitCashflowMenu,\r\n onClick: this.OnInitCashflow.bind(this)\r\n },\r\n {\r\n text: this.RC('titleDelete'),\r\n visible: true,\r\n onClick: this.OnDelete.bind(this)\r\n },\r\n {\r\n text: this.RC('lblRemoveSynchedData'),\r\n visible: (this.State.Organization.IsLicensedForAccountingSync && this.Entity.IsSyncAccounting)\r\n || (this.State.Organization.IsLicensedForCashflow && this.Entity.IsSyncCashflow)\r\n || (this.State.Organization.IsLicensedForLedgerAccountsSync && this.Entity.IsSyncLedgerAccounts),\r\n onClick: this.OnRemoveSynchedData.bind(this)\r\n }\r\n ];\r\n\r\n return menus;\r\n }\r\n\r\n OnInitCashflow() {\r\n const params = new InitCashflowParams();\r\n params.CompanyID = this.Entity.EntryID;\r\n this.Do(this.endpoint.InitCashflow(params), true, () => {\r\n this.UpdateTabsCounts();\r\n this.State.ShowInitCashflowMenu = false;\r\n this.forecastMapperList?.LoadDataSource();\r\n this.CheckForecastMapperCount();\r\n });\r\n }\r\n\r\n OnDownloadRequestedData() {\r\n this.Do(this.downloadRequestEndpoint.DownloadCompanyUpdatedData(this.Entity.EntryID), true, (data) => {\r\n if (data.Entity) {\r\n this.otpInputDialog.downloadRequest = data.Entity;\r\n this.otpInputDialog.Message = data.ResponseMessage;\r\n this.otpInputDialog.ShowDialogShort(() => { });\r\n }\r\n else if (data.ResponseExtendedMessage) {\r\n this.messageBoxDialog.Type = EnumMessageBoxTypes.OK;\r\n this.messageBoxDialog.Title = this.RC('ttlMultipleOtp');\r\n this.messageBoxDialog.Prompt = data.ResponseExtendedMessage;\r\n this.messageBoxDialog.ShowDialogShort(() => { });\r\n }\r\n });\r\n }\r\n\r\n OnUpload() {\r\n this.uploadDialog.OpenDialog();\r\n }\r\n\r\n OnGoToTransactions() {\r\n this.Navigate(['/pages/transaction-report'],\r\n { OrganizationID: this.Entity.OrganizationID, CompanyID: this.Entity.EntryID }, false, true);\r\n }\r\n\r\n OnGoToBalances() {\r\n this.Navigate(['/pages/balance-report'],\r\n { OrganizationID: this.Entity.OrganizationID, Companies: [this.Entity.EntryID] }, false, true);\r\n }\r\n\r\n OnGoToSyncStatus() {\r\n this.Navigate(['/pages/sync-status'], { OrganizationID: this.Entity.OrganizationID, CompanyID: this.Entity.EntryID });\r\n }\r\n\r\n OnRecategorize() {\r\n this.recategorizeDialog.RecategorizeByCompany(this.Entity.EntryID);\r\n }\r\n\r\n OnShowDialogRecioncile() {\r\n this.reconciliationDialog.ReconcileCompany(this.Entity.EntryID);\r\n }\r\n\r\n OnShowDialogRegenarateJournalEntries() {\r\n this.generateJournalEntryDialog.RegenarateJournalEntriesByCompany(this.Entity.EntryID, this.State.Organization.EntryID);\r\n }\r\n\r\n\r\n OnRunWizard() {\r\n this.wizardDialog.OrganizationID = this.State.Organization.EntryID;\r\n this.wizardDialog.CompanyID = this.EntityEntryID;\r\n this.wizardDialog.ShowDialogShort(() => { }, () => { });\r\n }\r\n\r\n IsShowAdditionalSection() {\r\n if (!this.State.Organization) {\r\n return false;\r\n }\r\n\r\n return this.State.Organization.IsLicensedForCashflow\r\n || this.State.Organization.IsLicensedForAccountingSync\r\n || this.State.Organization.IsLicensedForLedgerAccountsSync;\r\n }\r\n\r\n OnIncomingPaymentUploadLevelChanged(e) {\r\n if(!this.IsUIEvent(e)) {\r\n return;\r\n }\r\n\r\n if(this.Entity.IncomingPaymentUploadLevel == EnumIncomingPaymentUploadLevel.None) {\r\n this.Entity.IncomingPaymentTolerance = undefined;\r\n }\r\n }\r\n\r\n OnDeploymentChanged(e) {\r\n this.State.Deployment = this.DataSources['Deployments'].Items.find(item => item.EntryID == this.Entity.DeploymentID);\r\n\r\n if(this.IsDbNameHidden) {\r\n this.Entity.DBName = undefined;\r\n }\r\n\r\n if(this.Entity.DeploymentID > 0 && !this.State.Deployment) {\r\n this.Do(\r\n this.deploymentEndpoint.Get(this.Entity.DeploymentID),\r\n false,\r\n (r) => {\r\n this.State.Deployment = r.Entity;\r\n\r\n if(this.IsDbNameHidden) {\r\n this.Entity.DBName = undefined;\r\n }\r\n }\r\n );\r\n }\r\n }\r\n\r\n private OnRemoveSynchedData() {\r\n const params = new CompanyWrapParams();\r\n params.CompanyID = this.Entity.EntryID;\r\n\r\n this.Do(this.endpoint.RemoveSynchedData(params), true, () => {\r\n this.LoadEntity(this.EntityEntryID);\r\n });\r\n }\r\n\r\n\r\n private LoadOrganization(organizationID: number) {\r\n this.Do(this.organizationEndpoint.Get(organizationID), false, (response: BaseEntityResponse) => {\r\n this.State.Organization = response.Entity;\r\n this.SetCashflowInitMenuVisibility();\r\n\r\n if (!this.accessService.IsAllowJournalEntryPosting()) {\r\n this.State.CompanyTabs = this.State.CompanyTabs.filter((tab: any) =>\r\n tab.Type !== EnumCompanyChildEntityTypes.PostingTemplate);\r\n }\r\n\r\n this.NotifyReloadTitle();\r\n });\r\n }\r\n\r\n private InitDeployments(organizationID: number) {\r\n this.DataSources['Deployments'] = new DataSourceCustomAction((options: DataLoadOptions) =>\r\n this.deploymentEndpoint.ListEx(organizationID, null, options));\r\n }\r\n\r\n private InitBillingContracts(organizationID: number) {\r\n this.DataSources['BillingContracts'] = new DataSourceCustomAction((options: DataLoadOptions) => this.billingContractEndpoint.ListEx(organizationID, true, options),\r\n undefined,\r\n (data) => {\r\n if (this.IsAddMode && data.length === 1) {\r\n this.Entity.BillingContractID = data[0].EntryID;\r\n }\r\n });\r\n this.DS('BillingContracts').Reload();\r\n }\r\n\r\n private UpdateDownloadUpdatedButtonVisibility() {\r\n if(!this.Entity.IsActive) {\r\n this.State.IsDownloadUpdatedDataBtnVisible = false;\r\n return;\r\n }\r\n\r\n this.Do(\r\n this.endpoint.HasNonManualBalanceAccountOrCCContract(this.Entity.EntryID),\r\n false,\r\n (response) => {\r\n this.State.IsDownloadUpdatedDataBtnVisible = response.Data;\r\n this.RepaintToolbar();\r\n }\r\n );\r\n }\r\n\r\n}\r\n","export default \"\\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\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 } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { BaseState } from \"@m4u-angular/base/entities/BaseEntities\";\r\nimport { formatNumber } from \"devextreme/localization\";\r\nimport { ScreenService } from \"@m4u-angular/core/framework/screen.service\";\r\nimport { DxChartComponent } from \"devextreme-angular\";\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { DashboardState } from '../base/base-dashboard.component';\r\nimport { EnumDashboardGroupBy } from \"../../../_proxy/enums\";\r\n\r\n@Component({\r\n selector: 'base-dashboard-chart',\r\n template: '
'\r\n})\r\nexport abstract class BaseDashboardChartComponent extends BaseComponent\r\n{\r\n @Input() GroupBy:EnumDashboardGroupBy;\r\n @Input() DataSource: any[] = [];\r\n @Input() DashboardState: DashboardState;\r\n @ViewChild('chart') chart: DxChartComponent;\r\n\r\n constructor(A: ServiceBagService, ComponentName: string, StateType: (new () => TState), public screenService: ScreenService)\r\n {\r\n super(A, ComponentName, StateType);\r\n this.BindHandler(\"CustomizeTooltip\");\r\n this.BindHandler(\"CustomizeLabel\");\r\n }\r\n\r\n CustomizeTooltip(e)\r\n {\r\n const currencyText = this.GetCurrencyText(this.DashboardState.FilterValues.Currency as string);\r\n const valueText = formatNumber(e.value, this.F.NumberSum);\r\n return {\r\n text: `${valueText} ${currencyText}`\r\n }\r\n }\r\n\r\n CustomizeLabel(e)\r\n {\r\n const currencyText = this.GetCurrencyText(this.DashboardState.FilterValues.Currency as string);\r\n const valueText = formatNumber(e.value, this.F.NumberSum);\r\n const percent = formatNumber(e.percent * 100, this.F.NumberPercent);\r\n return this.screenService.IsRTL()\r\n ? `(${percent}%) ${valueText} ${currencyText}`\r\n : `${valueText} ${currencyText} (${percent}%)`;\r\n }\r\n\r\n GetCurrencyText(currency: string) {\r\n if (!currency) return '';\r\n const currencyItem = this.LISTITEMX('Currencies', currency) as any;\r\n return currencyItem && currencyItem.Symbol || currency;\r\n }\r\n}\r\n","import { Component, EventEmitter, Output } from \"@angular/core\";\r\nimport { ServiceBagServices, 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 { Globals } from '../../../_globals';\r\nimport { BaseDashboardChartComponent } from \"../base-dashboard-chart/base-dashboard-chart\";\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-assets-liabilities-dashboard-chart',\r\n templateUrl: './assets-liabilities-dashboard-chart.component.html',\r\n styleUrls: ['./assets-liabilities-dashboard-chart.component.scss']\r\n})\r\nexport class AssetsLiabilitiesDashboardChartComponent extends BaseDashboardChartComponent\r\n{\r\n @Output() OpenGridView = new EventEmitter();\r\n constructor(A: ServiceBagService, screenService: ScreenService)\r\n {\r\n super(A, 'AssetsLiabilitiesDashboardChartComponent', BaseState, screenService);\r\n this.BindHandler(\"CustomizeText\");\r\n this.BindHandler(\"CustomizePoint\");\r\n }\r\n\r\n OnOpenGridView() {\r\n this.OpenGridView.emit();\r\n }\r\n\r\n\r\n OnNavigate(e)\r\n {\r\n this.Navigate(['/pages/balance-report'], { OrganizationID: Globals.OrganizationID, \r\n BookingAccountSubtypes: [e.target.data.Subtype], Date: this.DashboardState.FilterValues.Date, Accounts: this.DashboardState.FilterValues.Account, \r\n CompanyIDs: this.DashboardState.FilterValues.Company, Banks: this.DashboardState.FilterValues.Bank, AccountGroups: this.DashboardState.FilterValues.AccountGroup,\r\n Currency: this.DashboardState.FilterValues.Currency, IsFromDashboard: true }, false, true);\r\n }\r\n\r\n CustomizeText(e)\r\n {\r\n return this.LISTITEM(\"BookingAccountSubTypes\", e.pointName);\r\n }\r\n \r\n CustomizePoint(e)\r\n {\r\n var subtype = this.LISTITEMX(\"BookingAccountSubTypes\", e.data.Subtype) as any;\r\n return {\r\n color: subtype && subtype.Color\r\n };\r\n }\r\n\r\n GetBorderColor() {\r\n return this.screenService.IsDesktop() ? '#FAFAFB' : 'white';\r\n }\r\n}\r\n","export default \"
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\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 { 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 { ScreenService } from \"@m4u-angular/core/framework/screen.service\";\r\nimport { DashboardState } from '../base/base-dashboard.component';\r\nimport { Globals } from '../../../_globals';\r\nimport { Balance } from '@kraken/_proxy/entities/balance.entity';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-assets-liabilities-dashboard-grid',\r\n templateUrl: './assets-liabilities-dashboard-grid.component.html',\r\n styleUrls: ['./assets-liabilities-dashboard-grid.component.scss']\r\n})\r\nexport class AssetsLiabilitiesDashboardGridComponent extends BaseGridComponent\r\n{\r\n @Output() OpenChartView = new EventEmitter();\r\n @Input() DashboardState: DashboardState;\r\n\r\n constructor(A: ServiceBagService, private screenService: ScreenService) {\r\n super(A, 'AssetsLiabilitiesDashboardGridComponent', Balance, BaseState);\r\n this.BindHandler('GetBalanceAmountSummaryDisplayFormat');\r\n this.BindHandler('OnGoChartView');\r\n }\r\n\r\n OnGoChartView() {\r\n this.OpenChartView.emit();\r\n }\r\n\r\n OnNavigate(e) {\r\n if (e.rowType !== 'data') return;\r\n this.Navigate(['/pages/assets-liabilities-report'], {\r\n OrganizationID: Globals.OrganizationID,\r\n BookingAccountSubtypes: [e.data.Subtype], \r\n Date: this.DashboardState.FilterValues.Date, \r\n Accounts: this.DashboardState.FilterValues.Account,\r\n CompanyIDs: this.DashboardState.FilterValues.Company, \r\n Banks: this.DashboardState.FilterValues.Bank, \r\n AccountGroups: this.DashboardState.FilterValues.AccountGroup,\r\n Currency: this.DashboardState.FilterValues.Currency, \r\n IsFromDashboard: true\r\n }, false, true);\r\n }\r\n\r\n GetBalanceAmountSummaryDisplayFormat(e) {\r\n if (!e.valueText) return '';\r\n var currencyText = this.DashboardState.FilterValues.Currency ? (this.LISTITEMX('Currencies', this.DashboardState.FilterValues.Currency) as any).Symbol : '';\r\n if (!this.screenService.IsRTL()) return `${e.valueText} ${currencyText}`;\r\n var value = e.valueText.replace('-', '');\r\n var sign = e.value < 0 ? '-' : '';\r\n return `${value}${sign} ${currencyText}`;\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n {{cell.data.Subtype | LookupList: LIST('BookingAccountSubTypes')}}\\r\\n
\\r\\n
{{cell.data.Notes ? '(' + cell.data.Notes + ')' : ''}}
\\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 ? 'positive-amount' : 'negative-amount'\\\">\\r\\n
{{cell.data.BalanceAmountFilteredByCurrency | formatNumberSum}}
\\r\\n {{DashboardState.FilterValues.Currency |\\r\\n LookupList:LIST('Currencies'):'Symbol'}}\\r\\n
\\r\\n
\\r\\n
\\r\\n
0 ? 'positive-amount' : 'negative-amount'\\\">\\r\\n
{{cell.data.BalanceAmountFilteredByNotCurrency | formatNumberSum}}
\\r\\n {{DashboardState.FilterValues.Currency |\\r\\n LookupList:LIST('Currencies'):'Symbol'}}\\r\\n
\\r\\n
\\r\\n
\\r\\n
0 ? 'positive-amount' : 'negative-amount'\\\">\\r\\n
{{cell.data.BalanceAmount | formatNumberSum}}
\\r\\n {{DashboardState.FilterValues.Currency |\\r\\n LookupList:LIST('Currencies'):'Symbol'}}\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\";","import { Component, EventEmitter, Output } from \"@angular/core\";\r\nimport { ServiceBagServices, ServiceBagService } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { BaseState } from \"@m4u-angular/base/entities/BaseEntities\";\r\nimport { EnumBookingAccountSubtypes, EnumDashboardGroupBy } from \"../../../_proxy/enums\";\r\nimport { ScreenService } from \"@m4u-angular/core/framework/screen.service\";\r\nimport { Globals } from \"../../../_globals\";\r\nimport { BaseDashboardChartComponent } from \"../base-dashboard-chart/base-dashboard-chart\";\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-balance-dashboard-chart',\r\n templateUrl: './balance-dashboard-chart.component.html',\r\n styleUrls: [\"balance-dashboard-chart.component.scss\"]\r\n})\r\nexport class BalanceDashboardChartComponent extends BaseDashboardChartComponent\r\n{\r\n @Output() OpenGridView = new EventEmitter();\r\n constructor(A: ServiceBagService, screenService: ScreenService) {\r\n super(A, 'BalanceDashboardChartComponent', BaseState, screenService);\r\n this.BindHandler(\"CustomizePoint\");\r\n this.BindHandler(\"CustomizeXText\");\r\n }\r\n\r\n OnOpenGridView() {\r\n this.OpenGridView.emit();\r\n }\r\n\r\n OnNavigate(e) {\r\n var data = e.target.data;\r\n var accounts = data.AccountID ? [data.AccountID] : null;\r\n var companies = data.CompanyID ? [data.CompanyID] : null;\r\n var accountGroups = data.AccountGroupID ? [data.AccountGroupID] : null;\r\n var banks = data.Bank ? [data.Bank] : null;\r\n const subTypes = this.DashboardState.IsShowCurrentOnly ? [EnumBookingAccountSubtypes.Current] : this.DashboardState.FilterValues.BookingAccountSubtype;\r\n this.Navigate(['/pages/balance-report'], {\r\n OrganizationID: Globals.OrganizationID, Accounts: accounts,\r\n CompanyIDs: companies, Banks: banks, AccountGroups: accountGroups, Date: this.DashboardState.FilterValues.Date,\r\n Currency: this.DashboardState.FilterValues.Currency, BookingAccountSubtypes: subTypes,\r\n IsFromDashboard: true\r\n }, false, true);\r\n }\r\n\r\n GetArgumentField() {\r\n switch (this.GroupBy) {\r\n case EnumDashboardGroupBy.Account: return 'AccountName';\r\n case EnumDashboardGroupBy.Bank: return 'Bank';\r\n case EnumDashboardGroupBy.Company: return 'CompanyName';\r\n case EnumDashboardGroupBy.AccountGroup: return 'AccountGroupName';\r\n }\r\n }\r\n\r\n CustomizePoint(e) {\r\n return {\r\n color: (this.GroupBy == EnumDashboardGroupBy.Account && this.DashboardState.IsSetBankColorToAccount) || this.GroupBy == EnumDashboardGroupBy.Bank\r\n ? (this.LISTITEMX(\"Banks\", e.data.Bank) as any).Color\r\n : Globals.DashboardPalette[e.index % Globals.DashboardPalette.length]\r\n };\r\n }\r\n\r\n CustomizeXText(e) {\r\n return this.GroupBy == EnumDashboardGroupBy.Bank ? this.LISTITEM(\"Banks\", e.valueText) : e.valueText;\r\n }\r\n}","export default \"
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n\\r\\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 { 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 { Globals } from \"../../../_globals\";\r\nimport { EnumBookingAccountSubtypes, EnumDashboardGroupBy } from \"../../../_proxy/enums\";\r\nimport { DashboardState } from '../base/base-dashboard.component';\r\nimport { Balance } from '@kraken/_proxy/entities/balance.entity';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-balance-dashboard-grid',\r\n templateUrl: './balance-dashboard-grid.component.html',\r\n styleUrls: ['./balance-dashboard-grid.component.scss']\r\n})\r\nexport class BalanceDashboardGridComponent extends BaseGridComponent\r\n{\r\n @Input() GroupBy: EnumDashboardGroupBy = EnumDashboardGroupBy.Account;\r\n @Input() DashboardState: DashboardState;\r\n @Output() OpenChartView = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'BalanceDashboardGridComponent', Balance, BaseState);\r\n this.BindHandler('GetBalanceAmountSummaryDisplayFormat');\r\n this.BindHandler('OnGoChartView');\r\n }\r\n\r\n OnNavigate(e) {\r\n if (e.rowType !== 'data') return;\r\n var accounts = e.data.AccountID ? [e.data.AccountID] : null;\r\n var companies = e.data.CompanyID ? [e.data.CompanyID] : null;\r\n var accountGroups = e.data.AccountGroupID ? [e.data.AccountGroupID] : null;\r\n var banks = e.data.Bank ? [e.data.Bank] : null;\r\n const subTypes = this.DashboardState.IsShowCurrentOnly ? [EnumBookingAccountSubtypes.Current] : this.DashboardState.FilterValues.BookingAccountSubtype;\r\n this.Navigate(['/pages/balance-report'], {\r\n OrganizationID: Globals.OrganizationID,\r\n Accounts: accounts,\r\n CompanyIDs: companies,\r\n Banks: banks,\r\n AccountGroups: accountGroups,\r\n Date: this.DashboardState.FilterValues.Date,\r\n Currency: this.DashboardState.FilterValues.Currency,\r\n BookingAccountSubtypes: subTypes,\r\n IsFromDashboard: true\r\n }, false, true);\r\n }\r\n\r\n OnGoChartView() {\r\n this.OpenChartView.emit();\r\n }\r\n\r\n GetBalanceAmountSummaryDisplayFormat(e) {\r\n var currencyText = this.DashboardState.FilterValues.Currency ? (this.LISTITEMX('Currencies', this.DashboardState.FilterValues.Currency) as any).Symbol : '';\r\n return `${e.valueText} ${currencyText}`;\r\n }\r\n\r\n GetBankIcon(cell) {\r\n const urlPathPrefix = 'assets/projects/kraken/';\r\n const bankItem = this.LISTITEMX('Banks', cell.data.Bank) as any;\r\n return bankItem && bankItem.Icon && `${urlPathPrefix}${bankItem.Icon}`;\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\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 ? 'positive-amount' : 'negative-amount'\\\">\\r\\n
{{cell.data.BalanceAmount | formatNumberSum}}
\\r\\n
{{DashboardState.FilterValues.Currency |\\r\\n LookupList:LIST('Currencies'):'Symbol'}}
\\r\\n
\\r\\n {{cell.data.Notes ? '(' + cell.data.Notes + ')' : ''}}\\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 { ServiceBagServices, ServiceBagService } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { BaseState } from \"@m4u-angular/base/entities/BaseEntities\";\r\nimport { EnumBookingAccountSubtypes, EnumDashboardGroupBy } from \"../../../_proxy/enums\";\r\nimport { ScreenService } from \"@m4u-angular/core/framework/screen.service\";\r\nimport { BaseDashboardChartComponent } from \"../base-dashboard-chart/base-dashboard-chart\";\r\nimport { formatNumber } from 'devextreme/localization';\r\nimport { Globals } from '../../../_globals';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-balance-grouping-per-currency-dashboard-chart',\r\n templateUrl: './balance-grouping-per-currency-dashboard-chart.component.html',\r\n styleUrls: ['./balance-grouping-per-currency-dashboard-chart.component.scss']\r\n})\r\nexport class BalanceGroupingPerCurrencyDashboardChartComponent extends BaseDashboardChartComponent\r\n{\r\n private _data: any[];\r\n @Input() set Data(value: any[])\r\n {\r\n if (!value) return;\r\n this._data = value;\r\n this.InitSeries(value);\r\n }\r\n get Data() { return this._data; }\r\n Series: any[];\r\n \r\n constructor(A: ServiceBagService, screenService: ScreenService)\r\n {\r\n super(A, 'BalanceGroupingPerCurrencyDashboardChartComponent', BaseState, screenService);\r\n this.BindHandler(\"CustomizeXText\");\r\n }\r\n\r\n override OnInitComponentFinished()\r\n {\r\n this.InitSeries(this.Data);\r\n }\r\n\r\n InitSeries(data: any[])\r\n {\r\n var seriesField = this.GetTimelineSeriesField();\r\n if (!seriesField) return;\r\n\r\n var currencies = data.map(item => item.Currency).filter((value, index, self) => self.indexOf(value) === index);\r\n data.forEach(item => {\r\n currencies.forEach(c => {\r\n var dataItem = data.find(d => d[seriesField.id] === item[seriesField.id] && d.Currency === c);\r\n item[`BalanceOriginal${c}`] = dataItem && dataItem.BalanceOriginal;\r\n });\r\n });\r\n\r\n this.Series = currencies.map(c => {\r\n return {\r\n name: (this.LISTITEMX('Currencies', c) as any).Symbol,\r\n valueField: `BalanceOriginal${c}`,\r\n color: Globals.DashboardPalette[currencies.indexOf(c) % Globals.DashboardPalette.length]\r\n }\r\n });\r\n }\r\n\r\n GetTimelineSeriesField()\r\n {\r\n switch(this.DashboardState.GroupBy)\r\n {\r\n case EnumDashboardGroupBy.Account: return { id: 'AccountID', name: 'AccountName' };\r\n case EnumDashboardGroupBy.Bank: return { id: 'Bank', name: 'Bank' };\r\n case EnumDashboardGroupBy.Company: return { id: 'CompanyID', name: 'CompanyName' };\r\n case EnumDashboardGroupBy.AccountGroup: return { id: 'AccountGroupID', name: 'AccountGroupName' };\r\n }\r\n }\r\n\r\n override CustomizeTooltip(e)\r\n {\r\n var valueText = formatNumber(e.value, this.F.NumberSum);\r\n return {\r\n text: `${valueText} ${e.seriesName}`\r\n }\r\n }\r\n\r\n OnNavigate(e)\r\n {\r\n var data = e.target.data;\r\n var accounts = data.AccountID ? [data.AccountID] : null;\r\n var companies = data.CompanyID ? [data.CompanyID] : null;\r\n var accountGroups = data.AccountGroupID ? [data.AccountGroupID] : null;\r\n var banks = data.Bank ? [data.Bank] : null;\r\n const subTypes = this.DashboardState.IsShowCurrentOnly ? [EnumBookingAccountSubtypes.Current] : this.DashboardState.FilterValues.BookingAccountSubtype;\r\n this.Navigate(['/pages/balance-report'], { OrganizationID: Globals.OrganizationID, Accounts: accounts, \r\n CompanyIDs: companies, Banks: banks, AccountGroups: accountGroups, Date: this.DashboardState.FilterValues.Date, \r\n Currency: data.Currency, CurrenciesFilter: [data.Currency], BookingAccountSubtypes: subTypes,\r\n IsFromDashboard: true }, false, true);\r\n }\r\n\r\n GetArgumentField()\r\n {\r\n return this.GetTimelineSeriesField().name;\r\n }\r\n\r\n CustomizeXText(e)\r\n {\r\n return this.DashboardState.GroupBy == EnumDashboardGroupBy.Bank ? this.LISTITEM(\"Banks\", e.valueText) : e.valueText;\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\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 { ServiceBagServices, 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 { Globals } from \"../../../_globals\";\r\nimport { BaseDashboardChartComponent } from \"../base-dashboard-chart/base-dashboard-chart\";\r\nimport { DxPieChartComponent } from 'devextreme-angular';\r\nimport { formatNumber } from 'devextreme/localization';\r\nimport { EnumBookingAccountSubtypes } from './../../../_proxy/enums';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-balance-per-currency-dashboard-chart',\r\n templateUrl: './balance-per-currency-dashboard-chart.component.html',\r\n styleUrls: ['./balance-per-currency-dashboard-chart.component.scss']\r\n})\r\nexport class BalancePerCurrencyDashboardChartComponent extends BaseDashboardChartComponent\r\n{\r\n @Output() OpenGridView = new EventEmitter();\r\n @ViewChild('chart') pieChart: DxPieChartComponent;\r\n Palette = Globals.DashboardPalette;\r\n\r\n constructor(A: ServiceBagService, screenService: ScreenService) {\r\n super(A, 'BalancePerCurrencyDashboardChartComponent', BaseState, screenService);\r\n this.BindHandler(\"CustomizePoint\");\r\n this.BindHandler(\"CustomizeXText\");\r\n }\r\n\r\n OnOpenGridView() {\r\n this.OpenGridView.emit();\r\n }\r\n\r\n OnNavigate(e) {\r\n this.GoToBalancesReport(e.target.data.Currency);\r\n }\r\n\r\n OnNavigateFromPie(e) {\r\n this.GoToBalancesReport(this.DashboardState.FilterValues.Currency as string);\r\n }\r\n\r\n GoToBalancesReport(currency: string) {\r\n const subTypes = this.DashboardState.IsShowCurrentOnly ? [EnumBookingAccountSubtypes.Current] : this.DashboardState.FilterValues.BookingAccountSubtype;\r\n this.Navigate(['/pages/balance-report'], {\r\n OrganizationID: Globals.OrganizationID, \r\n Accounts: this.DashboardState.FilterValues.Account,\r\n CompanyIDs: this.DashboardState.FilterValues.Company, \r\n Banks: this.DashboardState.FilterValues.Bank, \r\n AccountGroups: this.DashboardState.FilterValues.AccountGroup,\r\n Date: this.DashboardState.FilterValues.Date, \r\n Currency: currency, \r\n CurrenciesFilter: [currency], \r\n BookingAccountSubtypes: subTypes,\r\n IsFromDashboard: true\r\n }, false, true);\r\n }\r\n\r\n CustomizePoint(e) {\r\n return {\r\n color: this.Palette[e.index % this.Palette.length]\r\n };\r\n }\r\n\r\n CustomizeXText(e) {\r\n const currency = e.valueText || e.pointName;\r\n return this.GetCurrencyText(currency);\r\n }\r\n\r\n override CustomizeTooltip(e) {\r\n var currencyText = this.GetCurrencyText(e.argument);\r\n var valueText = formatNumber(e.value, this.F.NumberSum);\r\n return {\r\n text: `${valueText} ${currencyText}`\r\n }\r\n }\r\n\r\n GetBorderColor() {\r\n return this.screenService.IsDesktop() ? '#FAFAFB' : 'white';\r\n }\r\n}\r\n","export default \"
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\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 { 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 { Globals } from \"../../../_globals\";\r\nimport { DashboardState } from '../base/base-dashboard.component';\r\nimport { EnumBookingAccountSubtypes } from './../../../_proxy/enums';\r\nimport { Balance } from '@kraken/_proxy/entities/balance.entity';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-balance-per-currency-dashboard-grid',\r\n templateUrl: './balance-per-currency-dashboard-grid.component.html',\r\n styleUrls: ['./balance-per-currency-dashboard-grid.component.scss']\r\n})\r\nexport class BalancePerCurrencyDashboardGridComponent extends BaseGridComponent\r\n{\r\n @Output() OpenChartView = new EventEmitter();\r\n @Input() DashboardState: DashboardState;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'BalancePerCurrencyDashboardGridComponent', Balance, BaseState);\r\n this.BindHandler('GetBalanceAmountSummaryDisplayFormat');\r\n }\r\n\r\n OnGoChartView() {\r\n this.OpenChartView.emit();\r\n }\r\n\r\n OnNavigate(e) {\r\n if (e.rowType !== 'data') return;\r\n const subTypes = this.DashboardState.IsShowCurrentOnly ? [EnumBookingAccountSubtypes.Current] : this.DashboardState.FilterValues.BookingAccountSubtype;\r\n this.Navigate(['/pages/balance-report'], {\r\n OrganizationID: Globals.OrganizationID, \r\n Accounts: this.DashboardState.FilterValues.Account,\r\n CompanyIDs: this.DashboardState.FilterValues.Company, \r\n Banks: this.DashboardState.FilterValues.Bank, \r\n AccountGroups: this.DashboardState.FilterValues.AccountGroup,\r\n Date: this.DashboardState.FilterValues.Date, \r\n Currency: e.data.Currency, \r\n CurrenciesFilter: [e.data.Currency], \r\n BookingAccountSubtypes: subTypes,\r\n IsFromDashboard: true\r\n }, false, true);\r\n }\r\n\r\n GetBalanceAmountSummaryDisplayFormat(e) {\r\n var currencyText = this.DashboardState.FilterValues.Currency ? (this.LISTITEMX('Currencies', this.DashboardState.FilterValues.Currency) as any).Symbol : '';\r\n return `${e.valueText} ${currencyText}`;\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
0 ? 'positive-amount' : 'negative-amount'\\\">\\r\\n
{{cell.data.BalanceOriginal | formatNumberSum}}
\\r\\n
{{cell.data.Currency | LookupList:LIST('Currencies'):'Symbol'}}\\r\\n
\\r\\n
\\r\\n
{{cell.data.Notes ? '(' + cell.data.Notes + ')' : ''}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
{{cell.data.CurrencyRate | formatNumberRate }}
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
0 ? 'positive-amount' : 'negative-amount'\\\">\\r\\n
{{cell.data.BalanceAmount | formatNumberSum}}
\\r\\n
{{DashboardState.FilterValues.Currency |\\r\\n LookupList:LIST('Currencies'):'Symbol'}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n\";","\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { CurrencyRate } from './../entities/currencyrate.entity';\r\n@Injectable()\r\nexport class CurrencyRateEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(api: APIGatewayService) {super(\"CurrencyRate\", api);}\r\n\t\r\n\r\n public ListEx(OrganizationID: number, RateDate: Date, CurrentCurrency: string) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'ListEx', {OrganizationID: OrganizationID, RateDate: RateDate, CurrentCurrency: CurrentCurrency} );\r\n }\r\n\r\n public GetCurrencyHistory(Currency: string, DateFrom: Date, DateTo: Date) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetCurrencyHistory', {Currency: Currency, DateFrom: DateFrom, DateTo: DateTo} );\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 CurrencyRate extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'CurrencyRate';\r\n }\r\n \r\n public Date: Date; \r\n public Currency: string; \r\n public Rate: number; \r\n\t\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 { BaseEntitiesResponse, BaseState } from \"@m4u-angular/base/entities/BaseEntities\";\r\nimport { CurrencyRateEndpoint } from '../../../_proxy/endpoints/currencyrate.endpoint';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { CurrencyRate } from '../../../_proxy/entities/currencyrate.entity';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Globals } from '../../../_globals';\r\n\r\nclass State extends BaseState\r\n{\r\n CurrencyHistory: CurrencyRate[] = [];\r\n DateFrom: Date = Globals.ThirtyDaysAgoDate;\r\n DateTo: Date = Globals.Yesterday;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-currency-rate-dashboard-chart',\r\n templateUrl: './currency-rate-dashboard-chart.component.html',\r\n styleUrls: ['./currency-rate-dashboard-chart.component.scss']\r\n})\r\nexport class CurrencyRateDashboardChartComponent extends BasePageComponent\r\n{\r\n constructor(A: ServiceBagService, private currencyRateEndpoint: CurrencyRateEndpoint)\r\n {\r\n super(A, 'CurrencyRateDashboardChartComponent', CurrencyRate, State, EnumPageDisplayModes.Window);\r\n this.BindHandler('CustomizeXText');\r\n }\r\n\r\n override GetTitle()\r\n {\r\n return `${this.GetDefaultTitle()} - ${this.QueryParams.Currency}`;\r\n }\r\n\r\n override OnInitComponent()\r\n {\r\n this.LoadCurrencyHistory();\r\n }\r\n\r\n LoadCurrencyHistory()\r\n {\r\n if (Object.entries(this.QueryParams).length <= 0) return;\r\n this.Do(this.currencyRateEndpoint.GetCurrencyHistory(this.QueryParams.Currency, this.State.DateFrom, this.State.DateTo), false,\r\n (response: BaseEntitiesResponse) => this.State.CurrencyHistory = response.Entities);\r\n }\r\n\r\n CustomizeXText(e)\r\n {\r\n const currency = this.LISTITEMX(\"Currencies\", this.QueryParams.Currency);\r\n return currency ? currency.Text : this.QueryParams.Currency;\r\n }\r\n\r\n OnDateRangeSelected(e)\r\n {\r\n if (!e.itemData) return;\r\n this.State.DateFrom = e.itemData.DateFrom;\r\n this.State.DateTo = e.itemData.DateTo;\r\n this.LoadCurrencyHistory();\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\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 { 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 { CurrencyRate } from '../../../_proxy/entities/currencyrate.entity';\r\n\r\n@Component({\r\n selector: 'app-dashboard-footer',\r\n templateUrl: './dashboard-footer.component.html',\r\n styleUrls: ['./dashboard-footer.component.scss']\r\n})\r\nexport class DashboardFooterComponent extends BaseComponent {\r\n @Input() Items: CurrencyRate[] = [];\r\n\r\n isRatesHidden: boolean = true;\r\n sidebarOpened: boolean = false;\r\n \r\n constructor(A: ServiceBagService) {\r\n super(A, 'DashboardFooterComponent', BaseState);\r\n }\r\n\r\n ShowCurrencyHistory(e) {\r\n this.NavigateCurrencyHistory(e.itemData && e.itemData.Currency);\r\n }\r\n\r\n NavigateCurrencyHistory(currency: string) {\r\n this.Navigate(['pages/currency-history'], { Currency:currency });\r\n }\r\n\r\n ToggleRates() {\r\n if (this.A.Screen.IsDesktop()) this.isRatesHidden = !this.isRatesHidden;\r\n else this.sidebarOpened = true;\r\n }\r\n\r\n CloseSidebar() {\r\n this.sidebarOpened = false;\r\n }\r\n\r\n GetCurrencyRateIcon() {\r\n return 'assets/projects/kraken/currency_rate.png';\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n
{{'lblCurrencyDate' | RC:THIS}}
\\r\\n
{{Items && Items[0].Date | formatDate}}
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n {{item.Currency}}\\r\\n ~\\r\\n {{item.Rate | formatNumberRate}}\\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 { BaseParamsFilter } from './../entities/baseparamsfilter.entity';\r\nimport { EnumBalanceHistoryReportMode } from './../enums';\r\nexport class BalanceReportParams extends BaseParamsFilter {\r\n constructor() {\r\n super();\r\n this.TypeName = 'BalanceReportParams';\r\n }\r\n \r\n public OrganizationID: number; \r\n public Date: Date; \r\n public Mode: EnumBalanceHistoryReportMode; \r\n public IsLoadDetails: boolean; \r\n public IsHideZeroBalances: boolean; \r\n public IsActiveCashflow: boolean; \r\n public GuarantEndDateTo: Date; \r\n public IsHideImplicitBalances: boolean; \r\n public IsManualBalancesEntry: boolean; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BalanceReportParams } from './../params/balancereport.param';\r\nimport { BaseParamsFilter } from './../entities/baseparamsfilter.entity';\r\nimport { EnumDashboardGroupBy } from './../enums';\r\nimport { User } from './../entities/user.entity';\r\nexport class DashboardParams extends BalanceReportParams {\r\n constructor() {\r\n super();\r\n this.TypeName = 'DashboardParams';\r\n }\r\n \r\n public GroupBy: EnumDashboardGroupBy; \r\n public User: User = new User; \r\n public IsForEmails: 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 { Balance } from './../entities/balance.entity';\r\nimport { EnumBookingAccountSubtypes } from './../enums';\r\nimport { EnumBanks } from './../enums';\r\nimport { BalanceByPeriodView } from './../views/balancebyperiod.view';\r\nimport { BalanceDetailLoansView } from './../views/balancedetailloans.view';\r\nimport { BalanceDetailStocksView } from './../views/balancedetailstocks.view';\r\nimport { BalanceDetailDepositsView } from './../views/balancedetaildeposits.view';\r\nimport { BalanceDetailGuaranteesView } from './../views/balancedetailguarantees.view';\r\nexport class BalanceView extends Balance {\r\n constructor() {\r\n super();\r\n this.TypeName = 'BalanceView';\r\n }\r\n \r\n public OrganizationID: number; \r\n public CompanyID: number; \r\n public CompanyName: string; \r\n public AccountID: number; \r\n public AccountName: string; \r\n public BookingAccountCode: string; \r\n public BookingAccountName: string; \r\n public BookingAccountFullName: string; \r\n public Subtype: EnumBookingAccountSubtypes; \r\n public SubtypeName: string; \r\n public Currency: string; \r\n public BalanceAmount: number; \r\n public BalanceAmountFormatted: string; \r\n public CurrencyRate: number; \r\n public CurrencyRateFormatted: string; \r\n public BalanceOriginal: number; \r\n public BalanceOriginalFormatted: string; \r\n public Notes: string; \r\n public Bank: EnumBanks; \r\n public BankName: string; \r\n public AccountGroupID: number; \r\n public AccountGroupName: string; \r\n public CC4Digits: string; \r\n public IsManualBalancesEntry: boolean; \r\n public BalancesByPeriods: BalanceByPeriodView[] = []; \r\n public BalanceAmountFilteredByCurrency: number; \r\n public BalanceAmountFilteredByNotCurrency: number; \r\n public CreditLimitSum: number; \r\n public TotalAvailableFunds: number; \r\n public DetailsLoanViews: BalanceDetailLoansView[] = []; \r\n public DetailsStockViews: BalanceDetailStocksView[] = []; \r\n public DetailsDepoViews: BalanceDetailDepositsView[] = []; \r\n public DetailsGuarantViews: BalanceDetailGuaranteesView[] = []; \r\n public BalanceNominalAmount: number; \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 { BaseParamsFilter } from './../entities/baseparamsfilter.entity';\r\nexport class TransactionReportParams extends BaseParamsFilter {\r\n constructor() {\r\n super();\r\n this.TypeName = 'TransactionReportParams';\r\n }\r\n \r\n public OrganizationID: number; \r\n public DateFrom: Date; \r\n public DateTo: Date; \r\n public BankChargeDateFrom: Date; \r\n public BankChargeDateTo: Date; \r\n public IsBankCharge: number; \r\n public AmountFrom: number; \r\n public AmountTo: number; \r\n public Categories: number[]; \r\n public IsHasCheques: number; \r\n public Downloads: number[]; \r\n public Notes1: string; \r\n public Notes2: string; \r\n public Reference: string; \r\n public IsNotReconcilationed: boolean; \r\n public IsDebitOnly: boolean; \r\n public IsCreditOnly: 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 { LoanPayment } from './../entities/loanpayment.entity';\r\nimport { LoanPaymentReportItem } from './../entities/loanpaymentreportitem.entity';\r\nimport { LoanPaymentReportParams } from './../params/loanpaymentreport.param';\r\nimport { LoanKpiParams } from './../params/loankpi.param';\r\nimport { EnumLoanPostPaymentRecalculationOptions } from './../enums';\r\n@Injectable()\r\nexport class LoanPaymentEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"LoanPayment\", api);}\r\n\t\r\n\r\n public ListEx(LoanID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'ListEx', {LoanID: LoanID} );\r\n }\r\n\r\n public ListLoanPaymentReportItems(Params: LoanPaymentReportParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListLoanPaymentReportItems', Params, undefined );\r\n }\r\n\r\n public ListLoanPaymentsTillDate(Params: LoanPaymentReportParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListLoanPaymentsTillDate', Params, undefined );\r\n }\r\n\r\n public GetLastOpenPayment(LoanID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetLastOpenPayment', {LoanID: LoanID} );\r\n }\r\n\r\n public GetLoansKpi(Params: LoanKpiParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'GetLoansKpi', Params, undefined );\r\n }\r\n\r\n public ReculculateInterest(Entity: LoanPayment) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ReculculateInterest', Entity, undefined );\r\n }\r\n\r\n public PostPayment(Entity: LoanPayment, recalculationType: EnumLoanPostPaymentRecalculationOptions, transactionId: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'PostPayment', Entity, {recalculationType: recalculationType, transactionId: transactionId} );\r\n }\r\n\r\n public PostPaymentBatch(Entities: LoanPayment[]) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'PostPaymentBatch', Entities, undefined );\r\n }\r\n\r\n public override SaveBatch(Entities: LoanPayment[]) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'SaveBatch', Entities, undefined );\r\n }\r\n\r\n public GetNavigationFilters(LoanPaymentID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetNavigationFilters', {LoanPaymentID: LoanPaymentID} );\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 { CashflowReportRowView } from './../views/cashflowreportrow.view';\r\nimport { CashflowReportSummarizedGroup } from './../entities/cashflowreportsummarizedgroup.entity';\r\nimport { CashflowFutureForecastGroups } from './../entities/cashflowfutureforecastgroups.entity';\r\nimport { ValueText } from './../entities/valuetext.entity';\r\nimport { CashflowBalanceView } from './../views/cashflowbalance.view';\r\nimport { CashflowReportParams } from './../params/cashflowreport.param';\r\nimport { CashflowSummarizedParams } from './../params/cashflowsummarized.param';\r\nimport { CashflowFutureForecastOperationParams } from './../params/cashflowfutureforecastoperation.param';\r\nimport { BalanceReportParams } from './../params/balancereport.param';\r\n@Injectable()\r\nexport class CashflowReportEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"CashflowReport\", api);}\r\n\t\r\n\r\n public ListCashflowReportTransactions(Params: CashflowReportParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListCashflowReportTransactions', Params, undefined );\r\n }\r\n\r\n public ListCashflowReportSummarizedTransactions(Params: CashflowSummarizedParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListCashflowReportSummarizedTransactions', Params, undefined );\r\n }\r\n\r\n public ListFutureForecastOperations(Params: CashflowFutureForecastOperationParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListFutureForecastOperations', Params, undefined );\r\n }\r\n\r\n public GetCashflowBalance(Params: CashflowReportParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'GetCashflowBalance', Params, undefined );\r\n }\r\n\r\n public ListDataSources(organizationId: number, companyIds: number[], dynamicOnly: boolean) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'ListDataSources', {organizationId: organizationId, companyIds: companyIds, dynamicOnly: dynamicOnly} );\r\n }\r\n\r\n public ListCategories(organizationId: number, companyIds: number[]) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'ListCategories', {organizationId: organizationId, companyIds: companyIds} );\r\n }\r\n\r\n public CashflowBalanceView(Params: BalanceReportParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'CashflowBalanceView', Params, undefined );\r\n }\r\n\r\n public override SaveBatch(CashflowItems: CashflowReportRowView[]) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'SaveBatch', CashflowItems, 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 { EnumBanks } from './../enums';\r\nimport { EnumBankGroups } from './../enums';\r\nexport class CashflowReportParams extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'CashflowReportParams';\r\n }\r\n \r\n public OrganizationID: number; \r\n public Companies: number[]; \r\n public Banks: EnumBanks[]; \r\n public BankGroups: EnumBankGroups[]; \r\n public Accounts: number[]; \r\n public AccountGroups: number[]; \r\n public BookingAccounts: number[]; \r\n public Scenarios: number[]; \r\n public DataSources: string[]; \r\n public ProbabilityLevels: number[]; \r\n public Categories: string[]; \r\n public DateFrom: Date; \r\n public DateTo: Date; \r\n public CalculationDate: Date; \r\n public Currency: string; \r\n public FilterCurrency: string; \r\n public IsNotReconcilationed: boolean; \r\n public DatePeriodOnly: boolean; \r\n public IgnorePastUnreconcilledTransactions: boolean; \r\n public ParentCategories: string[]; \r\n public DoNotShowEmptyCategoriesInSplit: boolean; \r\n\t\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 { BaseDataResponse, BaseEntitiesResponse, BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BalanceEndpoint } from '../../../_proxy/endpoints/balance.endpoint';\r\nimport { CurrencyRateEndpoint } from '../../../_proxy/endpoints/currencyrate.endpoint';\r\nimport { CurrencyRate } from '../../../_proxy/entities/currencyrate.entity';\r\nimport { EnumBanks, EnumBookingAccountSubtypes, EnumCredentialTypes, EnumDashboardGroupBy } from '../../../_proxy/enums';\r\nimport { DashboardParams } from '../../../_proxy/params/dashboard.param';\r\nimport { BalanceView } from '../../../_proxy/views/balance.view';\r\nimport { Globals } from '../../../_globals';\r\nimport { AssetsLiabilitiesDashboardChartComponent } from '../assets-liabilities-dashboard/assets-liabilities-dashboard-chart.component';\r\nimport { BalanceGroupingPerCurrencyDashboardChartComponent }\r\n from '../balance-grouping-per-currency-dashboard/balance-grouping-per-currency-dashboard-chart.component';\r\nimport { BalancePerCurrencyDashboardChartComponent }\r\n from '../balance-per-currency-dashboard/balance-per-currency-dashboard-chart.component';\r\nimport { FilterComponent, FilterSettings, FilterValues } from '../../../components/filter/filter.component';\r\nimport { TransactionView } from '../../../_proxy/views/transaction.view';\r\nimport { TransactionEndpoint } from '../../../_proxy/endpoints/transaction.endpoint';\r\nimport { GridChartComponent } from '../grid-chart/grid-chart.component';\r\nimport { BalanceDashboardChartComponent } from '../balance-dashboard/balance-dashboard-chart.component';\r\nimport { BalanceDashboardGridComponent } from '../balance-dashboard/balance-dashboard-grid.component';\r\nimport { AssetsLiabilitiesDashboardGridComponent } from '../assets-liabilities-dashboard/assets-liabilities-dashboard-grid.component';\r\nimport { BalancePerCurrencyDashboardGridComponent } from '../balance-per-currency-dashboard/balance-per-currency-dashboard-grid.component';\r\nimport { TransactionReportParams } from '../../../_proxy/params/transactionreport.param';\r\nimport { DateHelpers } from '@m4u-angular/core/helpers/DateHelpers';\r\nimport { TransactionSummaryGroupView } from '../../../_proxy/views/transactionsummarygroup.view';\r\nimport { AccountGroupEndpoint } from '../../../_proxy/endpoints/accountgroup.endpoint';\r\nimport { CustomTransactionView } from '../last-transactions/grid/last-transactions-grid.component';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { OrganizationEndpoint } from '@kraken-proxy/endpoints/organization.endpoint';\r\nimport { Organization } from '@kraken-proxy/entities/organization.entity';\r\nimport { OrganizationWrapParams } from '@kraken/_proxy/params/organizationwrap.param';\r\nimport { ShareInformationDialogComponent } from '@kraken/dialogs/share-information-dialog/share-information-dialog.component';\r\nimport { QuickFilterSettings } from '@kraken/components/quick-filter/quick-filter.component';\r\nimport { LoanPaymentEndpoint } from '@kraken/_proxy/endpoints/loanpayment.endpoint';\r\nimport { BalanceReportParams } from '@kraken/_proxy/params/balancereport.param';\r\nimport { CashflowReportEndpoint } from '@kraken/_proxy/endpoints/cashflowreport.endpoint';\r\nimport { CashflowReportParams } from '@kraken/_proxy/params/cashflowreport.param';\r\nimport { formatDate } from 'devextreme/localization';\r\nimport { ReplicationRequestEndpoint } from '@kraken/_proxy/endpoints/replicationrequest.endpoint';\r\nimport { OrganizationService } from '@kraken/services/organization.service';\r\nimport { CompanyGlobalService } from '@kraken/services/company-global.service';\r\nimport { AccessService } from '@kraken/services/access.service';\r\nimport { isEqual } from 'lodash';\r\nimport { LocalStorageService } from '@m4u-angular/core/framework/local-storage.service';\r\nimport { AppInjector } from '@m4u-angular/core/injector/injector.module';\r\n\r\nexport class DashboardState extends BaseState {\r\n FilterSettings: FilterSettings;\r\n QuickFilterSettings: QuickFilterSettings;\r\n FilterValues: FilterValues;\r\n GroupBy: EnumDashboardGroupBy = EnumDashboardGroupBy.Company;\r\n IsSetBankColorToAccount: boolean = false;\r\n IsSetBankColorToAccountTemporary: boolean = false;\r\n CurrentTimelineText: string;\r\n\r\n LastTransactions: CustomTransactionView[] = [];\r\n Balances: BalanceView[] = [];\r\n AccountBalances: BalanceView[] = [];\r\n BalancesPerCurrency: BalanceView[] = [];\r\n AssetsBalances: BalanceView[] = [];\r\n LiabilitiesBalances: BalanceView[] = [];\r\n BalancesTimeline: BalanceView[] = [];\r\n BalancesGroupingPerCurrency: BalanceView[] = [];\r\n\r\n TimelineSeries: any[];\r\n CurrencyRates: CurrencyRate[];\r\n\r\n LastTransactionsDateCount = 1;\r\n IsShowCurrentOnly: boolean;\r\n DebitLastTransactionsCategoryGroups: TransactionSummaryGroupView[] = [];\r\n CreditLastTransactionsCategoryGroups: TransactionSummaryGroupView[] = [];\r\n DateFromLastTransactionsCategoryGroups: Date;\r\n DateToLastTransactionsCategoryGroups: Date;\r\n LastTransactionsCategoryGroupsDateCount = 1;\r\n DateFrom: Date;\r\n DateTo: Date;\r\n\r\n Organization: Organization;\r\n LoansKpi: number;\r\n\r\n TotalCashflow: number;\r\n LastDateStr: string;\r\n}\r\n\r\n@Component({\r\n selector: 'base-dashboard',\r\n template: '
'\r\n})\r\nexport class BaseDashboardComponent extends BasePageComponent {\r\n\r\n private localStorageService: LocalStorageService;\r\n @ViewChild('filter') filter: FilterComponent;\r\n\r\n @ViewChild('shareInformationDialog') shareInformationDialog: ShareInformationDialogComponent;\r\n @ViewChild('gridChartBalances') gridChartBalances: GridChartComponent;\r\n @ViewChild('balancePerCurrencyChart') balancePerCurrencyChart: GridChartComponent;\r\n @ViewChild('balanceAssetsChart') balanceAssetsChart: GridChartComponent;\r\n @ViewChild('balanceLiabilitiesChart') balanceLiabilitiesChart: GridChartComponent;\r\n @ViewChild('balanceGroupingPerCurrencyChart') balanceGroupingPerCurrencyChart: BalanceGroupingPerCurrencyDashboardChartComponent;\r\n BalanceDashboardGridComponent = BalanceDashboardGridComponent;\r\n BalanceDashboardChartComponent = BalanceDashboardChartComponent;\r\n AssetsLiabilitiesDashboardChartComponent = AssetsLiabilitiesDashboardChartComponent;\r\n AssetsLiabilitiesDashboardGridComponent = AssetsLiabilitiesDashboardGridComponent;\r\n BalancePerCurrencyDashboardGridComponent = BalancePerCurrencyDashboardGridComponent;\r\n BalancePerCurrencyDashboardChartComponent = BalancePerCurrencyDashboardChartComponent;\r\n\r\n _subscriptions = [];\r\n\r\n IsSectionsCollapsed: boolean = true;\r\n\r\n get OrganizationID() {\r\n return Globals.OrganizationID;\r\n }\r\n set OrganizationID(value: number) {\r\n Globals.OrganizationID = value;\r\n this.OnInitState();\r\n this.OnLoadData();\r\n }\r\n\r\n get ShowLoansKpi() {\r\n return this.State.LoansKpi && (this.UserInfo.Type == EnumCredentialTypes.Admin\r\n || (this.UserInfo.Type == EnumCredentialTypes.User && this.UserInfo.IsOrganizationLicensedForLoans\r\n && this.UserInfo.IsAllowLoans));\r\n }\r\n\r\n constructor(A: ServiceBagService,\r\n componentName: string,\r\n private balanceEndpoint: BalanceEndpoint,\r\n private transactionEndpoint: TransactionEndpoint,\r\n private currencyRateEndpoint: CurrencyRateEndpoint,\r\n private accoountGroupEndpoint: AccountGroupEndpoint,\r\n private screen: ScreenService,\r\n private organizationEndpoint: OrganizationEndpoint,\r\n private loanPaymentEndpoint: LoanPaymentEndpoint,\r\n private replicationRequestEndpoint: ReplicationRequestEndpoint,\r\n private cashflowReportEndpoint: CashflowReportEndpoint,\r\n private organizationService: OrganizationService,\r\n private companyService: CompanyGlobalService,\r\n private accessService: AccessService) {\r\n super(A, componentName, BaseEntity, DashboardState);\r\n this.localStorageService = AppInjector.get(LocalStorageService);\r\n this.InitStateFromLocalStorage();\r\n }\r\n\r\n // overrides\r\n protected OnLoadData() {\r\n this.LoadAllBalances();\r\n this.LoadRates();\r\n }\r\n\r\n protected OnInitComponent(): void {\r\n this._subscriptions.push(\r\n this.organizationService.Organization$.subscribe(organizationID => {\r\n if (this.OrganizationID != organizationID) {\r\n this.OrganizationID = organizationID;\r\n this.LoadOrganization().then(() => this.FetchTotalCashflow());\r\n }\r\n }),\r\n this.companyService.Company$.subscribe((id) => {\r\n const companyId = id > 0 ? [id] : [];\r\n if (!isEqual(companyId, this.State.FilterValues.Company)) {\r\n this.State.FilterValues.Company = companyId;\r\n //this.FetchTotalCashflow();\r\n }\r\n })\r\n );\r\n }\r\n\r\n OnReadyFilter() {\r\n this.OnLoadData();\r\n }\r\n\r\n OnOrganizationChanged() {\r\n this.LoadLoansKpi();\r\n }\r\n\r\n OnLastTransactionsDateSelected(e) {\r\n if (!e.itemData) return;\r\n this.State.LastTransactionsDateCount = e.itemData.Value;\r\n this.localStorageService.SetItem(this.GetSettingName('LastTransactionsDateCount'), this.State.LastTransactionsDateCount.toString());\r\n this.LoadLastTransactions();\r\n }\r\n\r\n OnLastTransactionsCategoryGroupsDateSelected(e) {\r\n if (!e.itemData) return;\r\n this.State.LastTransactionsCategoryGroupsDateCount = e.itemData.Value;\r\n this.localStorageService.SetItem(this.GetSettingName('LastTransactionsCategoryGroupsDateCount'),\r\n this.State.LastTransactionsCategoryGroupsDateCount.toString());\r\n this.LoadLastTransactionsCategoryGroups();\r\n }\r\n\r\n GetSettingName(name: string) {\r\n return `${this.ComponentName}.State.${name}`;\r\n }\r\n\r\n get DashboardGroupByText() {\r\n return this.LISTITEMX('DashboardGroupBy', this.State.GroupBy)?.Text;\r\n }\r\n\r\n get LastTransactionsDateText() {\r\n return this.LISTITEMX('LastTransactionsDateOptions', this.State.LastTransactionsDateCount)?.Text;\r\n }\r\n\r\n get LastTransactionsCategoryGroupsDateText() {\r\n return this.LISTITEMX('LastTransactionsDateOptions', this.State.LastTransactionsCategoryGroupsDateCount)?.Text;\r\n }\r\n\r\n get DebitLastTransactionsCategoryGroupsSum() {\r\n return -this.State.DebitLastTransactionsCategoryGroups.reduce((prev, cur) => prev + cur.Debit, 0);\r\n }\r\n\r\n get CreditLastTransactionsCategoryGroupsSum() {\r\n return this.State.CreditLastTransactionsCategoryGroups.reduce((prev, cur) => prev + cur.Credit, 0);\r\n }\r\n\r\n override OnInitComponentFinished() {\r\n this.RepaintCharts();\r\n }\r\n\r\n InitStateFromLocalStorage() {\r\n const lastTransactionsDateCount = this.localStorageService.GetItem(this.GetSettingName('LastTransactionsDateCount'));\r\n if (lastTransactionsDateCount) this.State.LastTransactionsDateCount = +lastTransactionsDateCount;\r\n const lastTransactionsCategoryGroupsDateCount = localStorage\r\n .getItem(this.GetSettingName('LastTransactionsCategoryGroupsDateCount'));\r\n if (lastTransactionsCategoryGroupsDateCount)\r\n this.State.LastTransactionsCategoryGroupsDateCount = +lastTransactionsCategoryGroupsDateCount;\r\n const groupBy = this.localStorageService.GetItem(this.GetSettingName('GroupBy'));\r\n if (groupBy) this.State.GroupBy = groupBy as EnumDashboardGroupBy;\r\n }\r\n\r\n GetBalanceDashboardTitle() {\r\n return `${this.RC('titleBalanceDashboard')} ${this.LISTITEM('DashboardGroupBy', this.State.GroupBy)}`;\r\n }\r\n\r\n GetBalanceDashboardByAccountTitle() {\r\n return `${this.RC('titleBalanceDashboard')} ${this.LISTITEM('DashboardGroupBy', 'Account')}`;\r\n }\r\n\r\n GetBalanceGroupingPerCurrencyDashboardTitle() {\r\n return `${this.GetBalanceDashboardTitle()} ${this.RC('lblAnd')}${this.RC('lblCurrency')}`;\r\n }\r\n\r\n GetAssetsLiabilitiesTitle() {\r\n return `${this.RC('titleAssets')} & ${this.RC('titleLiabilities')}`;\r\n }\r\n\r\n override OnInitState() {\r\n this.State.FilterSettings = {\r\n Company: { IsVisible: true, IsMultiple: true },\r\n Account: { IsVisible: true, IsMultiple: true },\r\n Bank: { IsVisible: true, IsMultiple: true },\r\n BookingAccountSubtype: { IsVisible: true, IsMultiple: true },\r\n AccountGroup: { IsVisible: true, IsMultiple: true },\r\n Currency: { IsVisible: true },\r\n IsDateVisible: true\r\n } as FilterSettings;\r\n this.State.QuickFilterSettings = {\r\n Currency: { IsVisible: true, IsHideClearButton: true },\r\n IsDateVisible: true\r\n } as QuickFilterSettings;\r\n this.State.FilterValues = {\r\n Currency: Globals.OrganizationDefaultCurrency || 'ILS',\r\n Date: Globals.Yesterday,\r\n OrganizationID: Globals.OrganizationID\r\n } as FilterValues;\r\n this.SetTimelinePeriod();\r\n this.LoadRates();\r\n this.State.IsShowCurrentOnly = true;\r\n }\r\n\r\n SetTimelinePeriod() {\r\n const timelineDateRange = this.LIST('ReportDateRanges')[0] as any;\r\n this.State.DateFrom = timelineDateRange.DateFrom;\r\n this.State.DateTo = timelineDateRange.DateTo;\r\n this.State.CurrentTimelineText = timelineDateRange.Text;\r\n }\r\n\r\n OnClearFilters() {\r\n this.State.IsSetBankColorToAccountTemporary = this.State.IsSetBankColorToAccount;\r\n this.OnInitState();\r\n this.OnLoadData();\r\n }\r\n\r\n OnShareInformation = () => {\r\n this.shareInformationDialog.ShowDialogShort((result: any) => { });\r\n };\r\n\r\n OnSyncNow = () => {\r\n const params = new OrganizationWrapParams;\r\n params.OrganizationID = this.OrganizationID;\r\n\r\n this.Do(this.replicationRequestEndpoint.Create(params));\r\n };\r\n\r\n OnGroupByChanged(e) {\r\n this.State.GroupBy = e.itemData && e.itemData.Value;\r\n this.localStorageService.SetItem(this.GetSettingName('GroupBy'), this.State.GroupBy);\r\n this.LoadBalances();\r\n this.LoadBalancesGroupingPerCurrency();\r\n }\r\n\r\n OnCurrencyChanged() {\r\n this.LoadRates();\r\n }\r\n\r\n OnDateRangeSelected(e) {\r\n if (!e.itemData) return;\r\n this.State.CurrentTimelineText = e.itemData.Text;\r\n this.State.DateFrom = e.itemData.DateFrom;\r\n this.State.DateTo = e.itemData.DateTo;\r\n }\r\n\r\n LoadAllBalances() {\r\n this.LoadLastTransactions();\r\n this.LoadLastTransactionsCategoryGroups();\r\n this.LoadBalances();\r\n this.LoadAccountBalances();\r\n this.LoadBalancesGroupingPerCurrency();\r\n this.LoadBalancesPerCurrency();\r\n this.LoadAssets();\r\n this.LoadLiabilities();\r\n this.LoadLoansKpi();\r\n this.FetchTotalCashflow();\r\n }\r\n\r\n LoadLastTransactions() {\r\n if (!Globals.OrganizationID) {\r\n this.State.LastTransactions = [];\r\n return;\r\n }\r\n const params = this.GetTransactionsParams();\r\n params.DateFrom = DateHelpers.AddDay(this.State.FilterValues.Date, - this.State.LastTransactionsDateCount + 1);\r\n this.Do(this.transactionEndpoint.ListEx(params), false, (response: BaseEntitiesResponse) => {\r\n this.State.LastTransactions = response.Entities.map((item, index, array) => {\r\n const newItem = item as CustomTransactionView;\r\n newItem.ShowDate = index == 0 || array[index - 1].Date.valueOf() != item.Date.valueOf();\r\n return newItem;\r\n });\r\n });\r\n }\r\n\r\n LoadLastTransactionsCategoryGroups() {\r\n if (!Globals.OrganizationID) {\r\n this.State.DebitLastTransactionsCategoryGroups = this.State.CreditLastTransactionsCategoryGroups = [];\r\n return;\r\n }\r\n const params = this.GetTransactionsParams();\r\n params.DateFrom = DateHelpers.AddDay(this.State.FilterValues.Date, - this.State.LastTransactionsCategoryGroupsDateCount + 1);\r\n this.State.DateFromLastTransactionsCategoryGroups = params.DateFrom;\r\n this.State.DateToLastTransactionsCategoryGroups = params.DateTo;\r\n this.Do(this.transactionEndpoint.GetLastTransactionsGroupedByCategory(params), false,\r\n (response: BaseEntitiesResponse) => {\r\n this.State.DebitLastTransactionsCategoryGroups = response.Entities.filter(item => item.Debit)\r\n .sort(item => item.Debit).reverse();\r\n this.State.CreditLastTransactionsCategoryGroups = response.Entities.filter(item => item.Credit)\r\n .sort(item => item.Credit).reverse();\r\n }\r\n );\r\n }\r\n\r\n LoadBalances() {\r\n this.LoadDashBoardBalances(this.State.GroupBy, (response: BaseEntitiesResponse) => {\r\n this.State.Balances = response.Entities;\r\n });\r\n }\r\n\r\n LoadAccountBalances() {\r\n this.LoadDashBoardBalances(EnumDashboardGroupBy.Account,\r\n (response: BaseEntitiesResponse) => this.State.AccountBalances = response.Entities);\r\n }\r\n\r\n LoadDashBoardBalances(groupBy: EnumDashboardGroupBy, success: (response: BaseEntitiesResponse) => void) {\r\n if (!Globals.OrganizationID) {\r\n this.State.Balances = [];\r\n return;\r\n }\r\n\r\n const params = this.GetCommonDashboardParams();\r\n params.GroupBy = groupBy;\r\n\r\n // if (this.State.IsShowCurrentOnly) params.BookingAccountSubtypes = [EnumBookingAccountSubtypes.Current];\r\n\r\n this.Do(this.balanceEndpoint.ListForDashboardByAccount(params), false, success);\r\n }\r\n\r\n LoadBalancesGroupingPerCurrency() {\r\n if (!Globals.OrganizationID) {\r\n this.State.BalancesGroupingPerCurrency = [];\r\n return;\r\n }\r\n\r\n const params = this.GetCommonDashboardParams();\r\n params.GroupBy = this.State.GroupBy;\r\n if (this.State.IsShowCurrentOnly) params.BookingAccountSubtypes = [EnumBookingAccountSubtypes.Current];\r\n\r\n this.Do(this.balanceEndpoint.ListForDashboardByAccountAndCurrency(params), false, (response: BaseEntitiesResponse) =>\r\n this.State.BalancesGroupingPerCurrency = response.Entities);\r\n }\r\n\r\n LoadBalancesPerCurrency() {\r\n if (!Globals.OrganizationID) {\r\n this.State.BalancesPerCurrency = [];\r\n return;\r\n }\r\n\r\n const params = this.GetCommonDashboardParams();\r\n params.GroupBy = EnumDashboardGroupBy.Currency;\r\n if (this.State.IsShowCurrentOnly) params.BookingAccountSubtypes = [EnumBookingAccountSubtypes.Current];\r\n\r\n this.Do(this.balanceEndpoint.ListForDashboardByAccount(params), false, (response: BaseEntitiesResponse) =>\r\n this.State.BalancesPerCurrency = response.Entities);\r\n }\r\n\r\n LoadAssets() {\r\n if (!Globals.OrganizationID) {\r\n this.State.AssetsBalances = [];\r\n return;\r\n }\r\n\r\n const params = this.GetCommonDashboardParams();\r\n params.BookingAccountSubtypes = this.State.FilterValues.BookingAccountSubtype as EnumBookingAccountSubtypes[];\r\n params.GroupBy = EnumDashboardGroupBy.BookingAccountAssetsSubtype;\r\n\r\n this.Do(this.balanceEndpoint.ListForDashboardByAccount(params), false, (response: BaseEntitiesResponse) =>\r\n this.State.AssetsBalances = response.Entities);\r\n }\r\n\r\n LoadLiabilities() {\r\n if (!Globals.OrganizationID) {\r\n this.State.LiabilitiesBalances = [];\r\n return;\r\n }\r\n\r\n const params = this.GetCommonDashboardParams();\r\n params.BookingAccountSubtypes = this.State.FilterValues.BookingAccountSubtype as EnumBookingAccountSubtypes[];\r\n params.GroupBy = EnumDashboardGroupBy.BookingAccountLiabilitiesSubtype;\r\n\r\n this.Do(this.balanceEndpoint.ListForDashboardByAccount(params), false, (response: BaseEntitiesResponse) =>\r\n this.State.LiabilitiesBalances = response.Entities);\r\n }\r\n\r\n LoadLoansKpi() {\r\n if (!Globals.OrganizationID) {\r\n this.State.LoansKpi = undefined;\r\n return;\r\n }\r\n\r\n const params = this.GetCommonDashboardParams();\r\n this.Do(this.loanPaymentEndpoint.GetLoansKpi(params as any), false,\r\n (response: BaseDataResponse) => this.State.LoansKpi = response.Data);\r\n }\r\n\r\n GetCommonDashboardParams(): DashboardParams {\r\n const params = new DashboardParams();\r\n params.OrganizationID = Globals.OrganizationID;\r\n params.Currency = this.State.FilterValues.Currency as string;\r\n params.Date = this.State.FilterValues.Date;\r\n params.LoadActive = true;\r\n params.Banks = this.State.FilterValues.Bank as EnumBanks[];\r\n params.Companies = this.State.FilterValues.Company as number[];\r\n params.AccountGroups = this.State.FilterValues.AccountGroup as number[];\r\n params.Accounts = this.State.FilterValues.Account as number[];\r\n params.BookingAccountSubtypes = this.State.FilterValues.BookingAccountSubtype as EnumBookingAccountSubtypes[];\r\n\r\n return params;\r\n }\r\n\r\n GetTransactionsParams(): TransactionReportParams {\r\n const params = new TransactionReportParams();\r\n params.OrganizationID = Globals.OrganizationID;\r\n params.CurrenciesFilter = [this.State.FilterValues.Currency as string];\r\n params.Banks = this.State.FilterValues.Bank as EnumBanks[];\r\n params.Companies = this.State.FilterValues.Company as number[];\r\n params.AccountGroups = this.State.FilterValues.AccountGroup as number[];\r\n params.Accounts = this.State.FilterValues.Account as number[];\r\n params.DateTo = this.State.FilterValues.Date;\r\n if (this.State.IsShowCurrentOnly) params.BookingAccountSubtypes = [EnumBookingAccountSubtypes.Current];\r\n else params.BookingAccountSubtypes = this.State.FilterValues.BookingAccountSubtype as EnumBookingAccountSubtypes[];\r\n return params;\r\n }\r\n\r\n LoadRates() {\r\n if (!Globals.OrganizationID) {\r\n this.State.CurrencyRates = [];\r\n return;\r\n }\r\n this.Do(this.currencyRateEndpoint.ListEx(Globals.OrganizationID, this.State.FilterValues.Date,\r\n this.State.FilterValues.Currency as string), false, (response: BaseEntitiesResponse) =>\r\n this.State.CurrencyRates = response.Entities.filter(x => x.Currency != this.State.FilterValues.Currency));\r\n }\r\n\r\n OnSetBankColorToAccountChanged() {\r\n this.State.IsSetBankColorToAccount = this.State.IsSetBankColorToAccountTemporary;\r\n this.RepaintChartsColor();\r\n }\r\n\r\n RepaintChartsColor() {\r\n this.gridChartBalances && this.gridChartBalances.RefreshChart();\r\n }\r\n\r\n GetGroupingState(balance: BalanceView) {\r\n return {\r\n accounts: balance.AccountID ? [balance.AccountID] : undefined,\r\n companies: balance.CompanyID ? [balance.CompanyID] : undefined,\r\n accountGroups: balance.AccountGroupID ? [balance.AccountGroupID] : undefined,\r\n banks: balance.Bank ? [balance.Bank] : undefined\r\n };\r\n }\r\n\r\n GetBalancesAmount(): number {\r\n return this.State.Balances.length ? this.State.Balances.reduce((s, p) => s + p.BalanceAmount, 0) : 0;\r\n }\r\n\r\n GetFirstBalanceNotes(): string {\r\n const balanceWithNotes = this.State.Balances.find(b => b.Notes?.length > 0);\r\n return balanceWithNotes ? `${balanceWithNotes.Notes}` : '';\r\n }\r\n\r\n OnTransactionHeaderClick(event: any) {\r\n this.Navigate(['/pages/transaction-report'], { OrganizationID: this.filter.OrganizationID }, false, true);\r\n }\r\n\r\n override OnApplyFilter() {\r\n this.OnSetBankColorToAccountChanged();\r\n this.OnLoadData();\r\n const totalBalance = new BalanceView;\r\n totalBalance.Currency = this.State.FilterValues.Currency as string;\r\n totalBalance.BalanceOriginal = this.GetBalancesAmount();\r\n totalBalance.Notes = this.GetFirstBalanceNotes();\r\n }\r\n\r\n override OnClearFilter() {\r\n this.OnClearFilters();\r\n }\r\n\r\n get TotalBalance(): BalanceView {\r\n const totalBalance = new BalanceView;\r\n totalBalance.Currency = this.State.FilterValues.Currency as string;\r\n totalBalance.BalanceOriginal = this.GetBalancesAmount();\r\n totalBalance.Notes = this.GetFirstBalanceNotes();\r\n return totalBalance;\r\n }\r\n\r\n GetDashboardTotals(): BalanceView[] {\r\n const totalBalance = new BalanceView;\r\n totalBalance.Currency = this.State.FilterValues.Currency as string;\r\n totalBalance.BalanceOriginal = this.GetBalancesAmount();\r\n totalBalance.Notes = this.GetFirstBalanceNotes();\r\n\r\n if (!this.State.BalancesPerCurrency.length) return [];\r\n\r\n const sortedTotalBalances = this.State.BalancesPerCurrency.sort((a, b) => b.BalanceOriginal - a.BalanceOriginal);\r\n const currentCurrencyBalanceIndex = sortedTotalBalances.findIndex(x => x.Currency === this.State.FilterValues.Currency);\r\n\r\n if (currentCurrencyBalanceIndex === -1) return [];\r\n\r\n const currentCurrencyBalance = sortedTotalBalances.splice(currentCurrencyBalanceIndex, 1)[0];\r\n sortedTotalBalances.unshift(currentCurrencyBalance);\r\n\r\n return [totalBalance, ...sortedTotalBalances];\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n const settings = new ToolbarSettings;\r\n settings.IsAllowFilter = true;\r\n settings.IsAllowPrint = true;\r\n\r\n return settings;\r\n }\r\n\r\n protected RepaintCharts() {\r\n this.gridChartBalances && this.gridChartBalances.RefreshChart();\r\n this.balancePerCurrencyChart && this.balancePerCurrencyChart.RefreshChart();\r\n this.balanceAssetsChart && this.balanceAssetsChart.RefreshChart();\r\n this.balanceLiabilitiesChart && this.balanceLiabilitiesChart.RefreshChart();\r\n }\r\n\r\n GetShowCurrentOnlyIcon() {\r\n return this.State.IsShowCurrentOnly ? 'mdi mdi-checkbox-blank-circle' : 'mdi mdi-checkbox-blank-circle-outline';\r\n }\r\n\r\n OnShowCurrentOnlyChange() {\r\n this.OnLoadData();\r\n }\r\n\r\n protected LoadOrganization() {\r\n return new Promise((resolve, reject) => {\r\n if (!this.OrganizationID) {\r\n this.State.Organization = null;\r\n return resolve(true);\r\n }\r\n\r\n this.Do(this.organizationEndpoint.Get(this.OrganizationID), false, (response) => {\r\n this.State.Organization = response.Entity;\r\n resolve(true);\r\n }, reject);\r\n });\r\n }\r\n\r\n protected OnQuickFilterChanged() {\r\n this.OnLoadData();\r\n }\r\n\r\n OnGoToPaymentsReport() {\r\n this.Navigate(['pages/loan-payments-report'], {\r\n OrganizationID: Globals.OrganizationID,\r\n Currency: this.State.FilterValues.Currency as string,\r\n Date: this.State.FilterValues.Date,\r\n\r\n Banks: this.State.FilterValues.Bank as EnumBanks[],\r\n Companies: this.State.FilterValues.Company as number[],\r\n Accounts: this.State.FilterValues.Account as number[],\r\n AccountGroups: this.State.FilterValues.AccountGroup as number[]\r\n });\r\n }\r\n\r\n FetchTotalCashflow() {\r\n if (!this.OrganizationID || !this.accessService.IsAllowCashflow()) {\r\n this.State.TotalCashflow = 0;\r\n return;\r\n }\r\n\r\n const params = new BalanceReportParams();\r\n params.OrganizationID = this.OrganizationID;\r\n params.BookingAccounts = this.State.FilterValues.BookingAccount as number[];\r\n params.Companies = this.State.FilterValues.Company as number[];\r\n params.AccountGroups = this.State.FilterValues.AccountGroup as number[];\r\n params.Accounts = this.State.FilterValues.Account as number[];\r\n params.Currency = this.State.FilterValues.Currency as string;\r\n params.BookingAccountSubtypes = this.State.FilterValues.BookingAccountSubtype as EnumBookingAccountSubtypes[];\r\n params.DateFrom = DateHelpers.AddDay(this.State.FilterValues.Date, -1);\r\n params.DateTo = DateHelpers.AddDay(this.State.FilterValues.Date, 0);\r\n params.IsActiveCashflow = true;\r\n params.LoadActive = true;\r\n\r\n return new Promise(resolve => {\r\n this.Do(this.cashflowReportEndpoint.CashflowBalanceView(params), false,\r\n (response) => {\r\n const params = new CashflowReportParams();\r\n params.OrganizationID = this.OrganizationID;\r\n params.Companies = this.State.FilterValues.Company as number[];\r\n params.Currency = this.State.FilterValues.Currency as string;\r\n params.DateFrom = DateHelpers.AddDay(response.Entity.CalculationDate, 1);\r\n params.DateTo = Globals.ThisMonthLastDate;\r\n params.CalculationDate = response.Entity.CalculationDate;\r\n\r\n this.Do(this.cashflowReportEndpoint.GetCashflowBalance(params), false, ({ Data }) => {\r\n this.State.TotalCashflow = Data;\r\n this.State.LastDateStr = formatDate(Globals.ThisMonthLastDate, this.F.DateFormatShort);\r\n });\r\n\r\n resolve(true);\r\n },\r\n () => {\r\n this.State.TotalCashflow = 0;\r\n resolve(true);\r\n }\r\n );\r\n });\r\n }\r\n\r\n IsSectionVisible() {\r\n return this.State.Balances.length || (this.State.Organization || Globals.OrganizationID);\r\n }\r\n}\r\n","import { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { 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 { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Interest } from '@kraken/_proxy/entities/interest.entity';\r\nimport { InterestEndpoint } from '@kraken/_proxy/endpoints/interest.endpoint';\r\nimport { BankPassEndpoint } from '@kraken/_proxy/endpoints/bankpass.endpoint';\r\nimport { BankPassListParams } from '@kraken/_proxy/params/bankpasslist.param';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { BankPassView } from '@kraken/_proxy/views/bankpass.view';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-download-request-dialog',\r\n templateUrl: './download-request-dialog.component.html'\r\n})\r\nexport class DownloadRequestDialogComponent extends BasePageComponent\r\n{\r\n BankPass: number;\r\n\r\n _OrganizationID;\r\n\r\n @Input()\r\n set OrganizationID(id: number) {\r\n this._OrganizationID = id;\r\n if (id) this.LoadBankPasses();\r\n }\r\n get OrganizationID() {\r\n return this._OrganizationID;\r\n }\r\n\r\n constructor(A: ServiceBagService, private endpoint: BankPassEndpoint, private screenService: ScreenService) {\r\n super(A, 'DownloadRequestDialogComponent', BaseEntity, BaseState, EnumPageDisplayModes.Dialog);\r\n }\r\n\r\n public LoadBankPasses = () => {\r\n var params = new BankPassListParams();\r\n params.OrganizationID = this.OrganizationID;\r\n\r\n this.DataSources['BankPasses'] = new DataSourceCustomAction((options: DataLoadOptions) => this.endpoint.ListEx(params, options));\r\n };\r\n\r\n DisplayExpr = (item?: BankPassView) => {\r\n if (!item) return;\r\n const bank = this.LISTITEMX('Banks', item.Bank) as any;\r\n const bankName = bank?.TextShort;\r\n\r\n return `${item.FullName} - ${bankName}`;\r\n };\r\n\r\n OnOK() {\r\n this.CloseDialogWithSuccess(this.BankPass);\r\n }\r\n}","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\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 SetOtpParams extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'SetOtpParams';\r\n }\r\n \r\n public Otp: string; \r\n public DownloadID: number; \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 { 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\nimport { DownloadRequest } from '../../_proxy/entities/downloadrequest.entity';\r\nimport { DownloadRequestEndpoint } from '../../_proxy/endpoints/downloadrequest.endpoint';\r\nimport { EnumDownloadRequestStatuses, EnumJobStatuses, EnumOtpProcessingState } from '../../_proxy/enums';\r\nimport { interval, Subscription, timer, take } from 'rxjs';\r\nimport { Job } from '@kraken/_proxy/entities/job.entity';\r\nimport { SetOtpParams } from '@kraken/_proxy/params/setotp.param';\r\n\r\n\r\nclass State extends BaseState {\r\n Status: EnumOtpProcessingState;\r\n Otp: string;\r\n Job: Job;\r\n DownloadId: number;\r\n OtpTimerStarted: boolean = false;\r\n OtpTimerExpired: boolean = false;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-otp-input-dialog',\r\n templateUrl: './otp-input-dialog.component.html',\r\n styleUrls: ['./otp-input-dialog.component.scss']\r\n})\r\nexport class OtpInputDialogComponent extends BasePageComponent {\r\n\r\n @Input() downloadRequest: DownloadRequest;\r\n @Input() Message: string;\r\n\r\n private downloadStateSubscription: Subscription;\r\n private checkStateStatusSubscription: Subscription;\r\n private otpTimeroutSubscription: Subscription;\r\n\r\n constructor(A: ServiceBagService, private downloadRequestEndpoint: DownloadRequestEndpoint) {\r\n super(A, 'OtpInputDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog);\r\n }\r\n\r\n protected OnInitState(): void {\r\n this.State.Status = EnumOtpProcessingState.Initializing;\r\n this.State.Otp = undefined;\r\n }\r\n\r\n get IsOTPDisabled() {\r\n return this.State.Status !== EnumOtpProcessingState.WaitingForSMS\r\n || this.State.OtpTimerExpired;\r\n }\r\n\r\n override OnInitComponent() {\r\n this.downloadStateSubscription = timer(1000, 1000)\r\n .subscribe(() => this.CheckDownloadState());\r\n }\r\n\r\n override OnDestroyComponent() {\r\n if (this.downloadStateSubscription) this.downloadStateSubscription.unsubscribe();\r\n if (this.checkStateStatusSubscription) this.checkStateStatusSubscription.unsubscribe();\r\n if(this.otpTimeroutSubscription) this.otpTimeroutSubscription.unsubscribe();\r\n }\r\n\r\n CheckStateStatus() {\r\n if (this.checkStateStatusSubscription) this.checkStateStatusSubscription.unsubscribe();\r\n\r\n this.checkStateStatusSubscription = interval(1000).pipe(take(120)).subscribe(() => {\r\n this.Do(this.downloadRequestEndpoint.GetDownloadSmsStatus(this.State.Job.EntryID), false, (response) => {\r\n this.State.Status = response.Entity.Status;\r\n this.State.DownloadId = response.Entity.DownloadID;\r\n\r\n if (this.State.Status !== EnumOtpProcessingState.Initializing) {\r\n this.checkStateStatusSubscription.unsubscribe();\r\n }\r\n\r\n if(this.State.Status == EnumOtpProcessingState.WaitingForSMS && !this.State.OtpTimerStarted) {\r\n this.State.OtpTimerStarted = true;\r\n this.StartOtpTimeoutError();\r\n }\r\n });\r\n });\r\n }\r\n\r\n CheckDownloadState() {\r\n this.Do(this.downloadRequestEndpoint.GetResultJob(this.downloadRequest.EntryID), false, (response) => {\r\n const { Data: job } = response;\r\n\r\n if (!job) return;\r\n\r\n this.State.Job = job;\r\n const { Status } = job;\r\n\r\n if (Status === EnumJobStatuses.Executing) {\r\n this.CheckStateStatus();\r\n if (this.downloadStateSubscription) this.downloadStateSubscription.unsubscribe();\r\n }\r\n\r\n if (Status === EnumJobStatuses.NoData) {\r\n this.UI.StopMessage(this.RC('msgDataAlreadyDownloaded'));\r\n this.CloseDialogWithCancel();\r\n }\r\n\r\n if (Status === EnumJobStatuses.Failure) {\r\n this.CloseWithError();\r\n }\r\n });\r\n }\r\n\r\n OnOK() {\r\n const otpRequestParams = new SetOtpParams();\r\n otpRequestParams.DownloadID = this.State.DownloadId;\r\n otpRequestParams.Otp = this.State.Otp;\r\n this.Do(this.downloadRequestEndpoint.SetOTP(otpRequestParams), true, () => {\r\n this.CloseDialogWithSuccess();\r\n });\r\n }\r\n\r\n MarkDownloadRequestAsFailed() {\r\n const downloadRequest = { ...this.downloadRequest };\r\n downloadRequest.Status = EnumDownloadRequestStatuses.Failure;\r\n this.Do(this.downloadRequestEndpoint.Save(downloadRequest), false);\r\n }\r\n\r\n CloseWithError() {\r\n this.UI.StopMessage(this.RC('msgErrorDownloader'));\r\n this.CloseDialogWithCancel();\r\n if (this.downloadStateSubscription) this.downloadStateSubscription.unsubscribe();\r\n }\r\n\r\n GetEnterOTPText() {\r\n switch (this.State.Status) {\r\n case EnumOtpProcessingState.Initializing:\r\n return this.RC('lblInitializingOtp', this.downloadRequest?.AccountFullName);\r\n\r\n case EnumOtpProcessingState.WaitingForSMS:\r\n return this.RC('lblEnterOTP', this.downloadRequest?.AccountFullName);\r\n\r\n case EnumOtpProcessingState.NoSMSRequired:\r\n return this.RC('lblNoSmsRequiredOTP');\r\n\r\n default:\r\n return this.RC('lblEnterOTP', this.Message);\r\n }\r\n }\r\n\r\n private StartOtpTimeoutError() {\r\n this.otpTimeroutSubscription = timer(2 * 60 * 1000).pipe(take(1)).subscribe(() => {\r\n this.MarkDownloadRequestAsFailed();\r\n this.UI.StopMessage(this.RC('msgOTPWaitingForCodeIsExpaired'));\r\n this.State.OtpTimerExpired = true;\r\n this.State.Otp = undefined;\r\n });\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
{{GetEnterOTPText()}}
\\r\\n
{{RC('msgOTPWaitingForCodeIsExpaired')}}
\\r\\n \\r\\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 { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BalanceEndpoint } from '../../_proxy/endpoints/balance.endpoint';\r\nimport { CurrencyRateEndpoint } from '../../_proxy/endpoints/currencyrate.endpoint';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { BaseDashboardComponent } from './base/base-dashboard.component';\r\nimport { TransactionEndpoint } from '../../_proxy/endpoints/transaction.endpoint';\r\nimport { AccountGroupEndpoint } from '../../_proxy/endpoints/accountgroup.endpoint';\r\nimport { OrganizationEndpoint } from '@kraken/_proxy/endpoints/organization.endpoint';\r\nimport { ContextMenuElement } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { DownloadRequestDialogComponent } from './download-request-dialog/download-request-dialog.component';\r\nimport { OtpInputDialogComponent } from '@kraken/components/otp-input-dialog/otp-input-dialog.component';\r\nimport { DownloadRequestEndpoint } from '@kraken/_proxy/endpoints/downloadrequest.endpoint';\r\nimport { LoanPaymentEndpoint } from '@kraken/_proxy/endpoints/loanpayment.endpoint';\r\nimport { CashflowReportEndpoint } from '@kraken/_proxy/endpoints/cashflowreport.endpoint';\r\nimport { ReplicationRequestEndpoint } from '@kraken/_proxy/endpoints/replicationrequest.endpoint';\r\nimport { OrganizationService } from '@kraken/services/organization.service';\r\nimport { CompanyGlobalService } from '@kraken/services/company-global.service';\r\nimport { AccessService } from '@kraken/services/access.service';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n templateUrl: './dashboard.component.html',\r\n styleUrls: ['./dashboard.component.scss']\r\n})\r\nexport class DashboardComponent extends BaseDashboardComponent {\r\n @ViewChild(DownloadRequestDialogComponent) downloadRequestDialog: DownloadRequestDialogComponent;\r\n @ViewChild(OtpInputDialogComponent) otpInputDialog: OtpInputDialogComponent;\r\n\r\n constructor(A: ServiceBagService, \r\n balanceEndpoint: BalanceEndpoint, \r\n transactionEndpoint: TransactionEndpoint, \r\n public downloadRequestEndpoint: DownloadRequestEndpoint,\r\n currencyRateEndpoint: CurrencyRateEndpoint, \r\n accountGroupEndpoint: AccountGroupEndpoint, \r\n public screenService: ScreenService, \r\n organizationEndpoint: OrganizationEndpoint, \r\n cashflowReportEndpoint: CashflowReportEndpoint,\r\n loanPaymentEndpoint: LoanPaymentEndpoint,\r\n replicationRequestEndpoint: ReplicationRequestEndpoint,\r\n organizationService: OrganizationService,\r\n companyService: CompanyGlobalService,\r\n accessService: AccessService) {\r\n super(A, 'DashboardComponent', balanceEndpoint, transactionEndpoint, currencyRateEndpoint, accountGroupEndpoint, screenService, \r\n organizationEndpoint, loanPaymentEndpoint, replicationRequestEndpoint, cashflowReportEndpoint, organizationService, companyService, accessService);\r\n }\r\n\r\n override OnInitComponent() {\r\n super.OnInitComponent();\r\n if (this.A.Screen.IsMobile()) {\r\n this.Navigate(['/pages/mobile-dashboard']);\r\n return;\r\n }\r\n\r\n this.OnLoadData();\r\n\r\n this.A.SysEvents.MenuPositon.subscribe(() => {\r\n setTimeout(() => this.RepaintCharts(), 500);\r\n });\r\n }\r\n\r\n override OnApplyFilter() {\r\n if (this.A.Screen.IsDesktop()) super.OnApplyFilter();\r\n }\r\n\r\n override OnClearFilter() {\r\n if (this.A.Screen.IsDesktop()) super.OnClearFilter();\r\n }\r\n\r\n OnDownloadRequestedData() {\r\n this.downloadRequestDialog.ShowDialogShort(\r\n (EntryID) => {\r\n this.Do(this.downloadRequestEndpoint.DownloadBankPassUpdatedData(EntryID), true,\r\n (data) => {\r\n if (data.Entity) {\r\n this.otpInputDialog.downloadRequest = data.Entity;\r\n this.otpInputDialog.Message = data.ResponseMessage;\r\n this.otpInputDialog.ShowDialogShort((Otp) => this.ClosePage(), () => this.ClosePage());\r\n } else {\r\n this.ClosePage();\r\n }\r\n });\r\n },\r\n () => {\r\n this.ClosePage();\r\n }\r\n );\r\n }\r\n\r\n override OnInitContextMenus(): ContextMenuElement[] {\r\n return [\r\n {\r\n text: this.RC('btnDownloadUpdatedData'),\r\n visible: true,\r\n onClick: this.OnDownloadRequestedData.bind(this)\r\n },\r\n {\r\n text: this.RC('lblSyncNow'),\r\n visible: this.State.Organization?.IsLicensedForAccountingSync \r\n || this.State.Organization?.IsLicensedForCashflow \r\n || this.State.Organization?.IsLicensedForLedgerAccountsSync ? true : false,\r\n onClick: this.OnSyncNow.bind(this)\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 {{CreditLastTransactionsCategoryGroupsSum | formatNumberPrice}}\\r\\n {{TotalBalance?.Currency | LookupList:LIST('Currencies'):'Symbol' }}\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n {{DebitLastTransactionsCategoryGroupsSum | formatNumberPrice}}\\r\\n {{TotalBalance?.Currency | LookupList:LIST('Currencies'):'Symbol' }}\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\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, ViewChild } 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 { DownloadRequestEndpoint } from '../../_proxy/endpoints/downloadrequest.endpoint';\r\nimport { EnumDownloadStatuses } from '../../_proxy/enums';\r\nimport { OtpInputDialogComponent } from '../../components/otp-input-dialog/otp-input-dialog.component';\r\nimport { ContextMenuElement } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { Download } from '@kraken/_proxy/entities/download.entity';\r\nimport { AccessService } from '@kraken/services/access.service';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-download-history-grid',\r\n templateUrl: './download-history-grid.component.html',\r\n styles: [`\r\n ::ng-deep #download-history-grid .dx-data-row.dx-state-hover:not(.dx-selection):not(.dx-row-inserted):not(.dx-row-removed):not(.dx-edit-row) {\r\n cursor: pointer;\r\n }\r\n `]\r\n})\r\nexport class DownloadHistoryGridComponent extends BaseGridComponent\r\n{\r\n @ViewChild('otpInputDialog') otpInputDialog: OtpInputDialogComponent;\r\n public selectedKeys: number[];\r\n @Input() set CurrentDownloadID(value: number) {\r\n if (value) setTimeout(() => this.selectedKeys = [value], 500);\r\n }\r\n @Output() OnFocusChanged = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService, \r\n private downloadRequestEndpoint: DownloadRequestEndpoint,\r\n private accessService: AccessService) {\r\n super(A, 'DownloadHistoryGridComponent', Download, BaseState);\r\n this.BindHandler('OnDownloadRequestedData');\r\n this.BindHandler('OnOpenBankPass');\r\n this.BindHandler('IsOpenBankPassVisible');\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 OnRowClicked(e) {\r\n this.OnFocusChanged.emit(e.data && e.data.EntryID);\r\n }\r\n\r\n OnDownloadRequestedData(e) {\r\n const rowData = e?.row?.data\r\n if (!rowData) return\r\n\r\n const id = rowData.AccountID ?? rowData.CCContractID\r\n if (rowData.AccountID) {\r\n this.Do(this.downloadRequestEndpoint.DownloadAccountUpdatedData(id), true, (data) => {\r\n if (data.Entity) {\r\n this.otpInputDialog.downloadRequest = data.Entity;\r\n this.otpInputDialog.Message = data.ResponseMessage;\r\n this.otpInputDialog.ShowDialogShort(() => { });\r\n }\r\n });\r\n }\r\n else {\r\n this.Do(this.downloadRequestEndpoint.DownloadContractUpdatedData(id), true, (data) => {\r\n if (data.Entity) {\r\n this.otpInputDialog.downloadRequest = data.Entity;\r\n this.otpInputDialog.Message = data.ResponseMessage;\r\n this.otpInputDialog.ShowDialogShort(() => { });\r\n }\r\n });\r\n }\r\n }\r\n\r\n GetStatusColor(data) {\r\n switch (data.Status) {\r\n case this.Enums.EnumDownloadStatuses.Success:\r\n return 'green-cyan';\r\n case this.Enums.EnumDownloadStatuses.Failure:\r\n return 'cinnabar';\r\n case this.Enums.EnumDownloadStatuses.NoData:\r\n return 'light-green';\r\n case this.Enums.EnumDownloadStatuses.Pending:\r\n return 'mango';\r\n case this.Enums.EnumDownloadStatuses.BrowserStartFailure:\r\n return 'cinnabar';\r\n case this.Enums.EnumDownloadStatuses.LoginFailure:\r\n return 'cinnabar';\r\n }\r\n }\r\n\r\n IsOpenBankPassVisible(e) {\r\n if (!this.accessService.IsAllowSettings()) { return false; }\r\n\r\n return e?.row?.data?.Status === EnumDownloadStatuses.LoginFailure;\r\n }\r\n\r\n OnOpenBankPass(e) {\r\n this.Navigate(['/pages/bankpass', e?.row?.data?.BankPassID], { OrganizationID: e?.row?.data?.OrganizationID });\r\n }\r\n\r\n protected override GetGridRowContextMenu(options?: any): ContextMenuElement[] {\r\n return [{\r\n text: this.RC('btnDownloadUpdatedData'),\r\n onClick: () => this.OnDownloadRequestedData(options)\r\n }, {\r\n text: this.RC('btnOpenBankPass'),\r\n visible: this.IsOpenBankPassVisible(options),\r\n onClick: () => this.OnOpenBankPass(options)\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\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { CCContractView } from './../views/cccontract.view';\r\nimport { CCContractsParams } from './../params/cccontracts.param';\r\nimport { CCContractsSaveDetailParams } from './../params/cccontractssavedetail.param';\r\n@Injectable()\r\nexport class CCContractEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(api: APIGatewayService) {super(\"CCContract\", api);}\r\n\t\r\n\r\n public ListEx(Params: CCContractsParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListEx', Params, undefined );\r\n }\r\n\r\n public SaveContractDetails(Params: CCContractsSaveDetailParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'SaveContractDetails', Params, undefined );\r\n }\r\n\r\n public ReloadCCData(CCContractID: number, ReloadDate: Date) : Observable\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'ReloadCCData', {CCContractID: CCContractID, ReloadDate: ReloadDate} );\r\n }\r\n}\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { DownloadView } from './../views/download.view';\r\nimport { DownloadListParams } from './../params/downloadlist.param';\r\n@Injectable()\r\nexport class DownloadEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(api: APIGatewayService) {super(\"Download\", api);}\r\n\t\r\n\r\n public ListEx(Params: DownloadListParams, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListEx', Params, options?.GetLoadOptions() );\r\n }\r\n\r\n public override Get(DownloadID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'Get', {DownloadID: DownloadID} );\r\n }\r\n}\r\n\r\n","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseParamsFilter } from './../entities/baseparamsfilter.entity';\r\nimport { EnumCCProcessingCompanies } from './../enums';\r\nexport class CCContractsParams extends BaseParamsFilter {\r\n constructor() {\r\n super();\r\n this.TypeName = 'CCContractsParams';\r\n }\r\n \r\n public ProcessingCompanies: EnumCCProcessingCompanies[]; \r\n public IsActive: boolean; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseParamsFilter } from './../entities/baseparamsfilter.entity';\r\nimport { EnumDownloadStatuses } from './../enums';\r\nexport class DownloadListParams extends BaseParamsFilter {\r\n constructor() {\r\n super();\r\n this.TypeName = 'DownloadListParams';\r\n }\r\n \r\n public CCContractID: number; \r\n public DateFrom: Date; \r\n public DateTo: Date; \r\n public Status: EnumDownloadStatuses[]; \r\n public BankPassIDs: 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 { Download } from './../entities/download.entity';\r\nimport { EnumBankGroups } from './../enums';\r\nexport class DownloadView extends Download {\r\n constructor() {\r\n super();\r\n this.TypeName = 'DownloadView';\r\n }\r\n \r\n public OrganizationName: string; \r\n public OrganizationID: number; \r\n public CompanyName: string; \r\n public AccountName: string; \r\n public BankGroup: EnumBankGroups; \r\n public Duration: number; \r\n public Retry: number; \r\n public TransactionsCount: number; \r\n public BalancesCount: number; \r\n public TasksCount: number; \r\n public ServerID: number; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { Component, ViewChild } from '@angular/core';\r\nimport { AccessService } from '@kraken/services/access.service';\r\nimport { CCContractEndpoint } from '@kraken/_proxy/endpoints/cccontract.endpoint';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { BaseEntity, BaseState, GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { FilterComponent, FilterSettings, FilterValues } from '../../components/filter/filter.component';\r\nimport { Globals } from '../../_globals';\r\nimport { DownloadEndpoint } from '../../_proxy/endpoints/download.endpoint';\r\nimport { OrganizationEndpoint } from '../../_proxy/endpoints/organization.endpoint';\r\nimport { DownloadStep, DownloadTask } from '../../_proxy/entities/download.entity';\r\nimport { Organization } from '../../_proxy/entities/organization.entity';\r\nimport { EnumBankGroups, EnumBookingAccountSubtypes, EnumDownloadStatuses, EnumDownloadTaskStatuses } from '../../_proxy/enums';\r\nimport { CCContractsParams } from '../../_proxy/params/cccontracts.param';\r\nimport { DownloadListParams } from '../../_proxy/params/downloadlist.param';\r\nimport { DownloadView } from '../../_proxy/views/download.view';\r\nimport { DownloadHistoryGridComponent } from './download-history-grid.component';\r\nimport { DownloadStepHistoryGridComponent } from './download-step-history-grid.component';\r\nimport { BankPassView } from '@kraken/_proxy/views/bankpass.view';\r\nimport { BankPassListParams } from '@kraken/_proxy/params/bankpasslist.param';\r\nimport { BankPassEndpoint } from '@kraken/_proxy/endpoints/bankpass.endpoint';\r\n\r\nclass State extends BaseState {\r\n FilterValues: FilterValues;\r\n FilterSettings: FilterSettings;\r\n Status: EnumDownloadStatuses[];\r\n BankGroups: EnumBankGroups[];\r\n ContractID: number;\r\n CurrentDownload: DownloadView = new DownloadView;\r\n CurrentDownloadTask: DownloadTask = new DownloadTask;\r\n CurrentDownloadTaskID: any;\r\n DownloadTasks: DownloadTask[];\r\n DownloadSteps: DownloadStep[];\r\n ShowFailedTasksOnly = false;\r\n AvailableSubtypes: GenericListEntity[] = [];\r\n Organization: Organization;\r\n BankPassIDs: number[];\r\n BankPassSource: BankPassView[];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-download-history',\r\n templateUrl: './download-history.component.html',\r\n styleUrls: ['./download-history.component.scss']\r\n})\r\nexport class DownloadHistoryComponent extends BasePageComponent {\r\n @ViewChild('filter') filter: FilterComponent;\r\n @ViewChild('downloadGrid') downloadGrid: DownloadHistoryGridComponent;\r\n @ViewChild('stepsGrid') stepsGrid: DownloadStepHistoryGridComponent;\r\n\r\n constructor(A: ServiceBagService,\r\n public accessService: AccessService,\r\n private downloadEndpoint: DownloadEndpoint,\r\n private contractsEndpoint: CCContractEndpoint,\r\n private bankPassEndpoint: BankPassEndpoint,\r\n private organizationEndpoint: OrganizationEndpoint) {\r\n super(A, 'DownloadHistoryComponent', BaseEntity, State);\r\n }\r\n\r\n override OnInitState() {\r\n const contractID = this.QueryParams.ContractID ? +this.QueryParams.ContractID : undefined;\r\n\r\n this.State.FilterValues = {\r\n OrganizationID: Globals.OrganizationID,\r\n Company: Globals.CompanyID > 0 ? [Globals.CompanyID] : undefined\r\n } as FilterValues;\r\n this.State.BankGroups = [];\r\n this.State.BankPassIDs = [];\r\n this.State.ContractID = contractID;\r\n this.State.Status = undefined;\r\n }\r\n\r\n override OnReadyFilter() {\r\n this.LoadContracts();\r\n this.LoadDownloads();\r\n }\r\n\r\n override OnInitComponent() {\r\n this.LoadContracts();\r\n this.LoadBankPasses();\r\n\r\n const contractID = this.QueryParams.ContractID ? +this.QueryParams.ContractID : undefined;\r\n this.State.FilterSettings = {\r\n Company: { IsVisible: true, IsMultiple: true },\r\n Account: { IsVisible: true, IsMultiple: true },\r\n BookingAccount: { IsVisible: true },\r\n BookingAccountSubtype: { IsVisible: true, IsMultiple: true, \r\n Custom: { IsDisableDefaultFilterGarantee: contractID ? true : false } \r\n },\r\n\r\n IsDatesVisible: true,\r\n IsTimeVisible: true\r\n } as FilterSettings;\r\n this.LoadDownloads();\r\n }\r\n\r\n OnShowFailedOnlyChanged() {\r\n this.RefreshDownloadTasks();\r\n }\r\n\r\n OnOrganizationChanged(organizationID: number) {\r\n this.State.FilterValues.OrganizationID = organizationID;\r\n this.LoadContracts();\r\n this.LoadBankPasses();\r\n }\r\n\r\n\r\n private LoadBankPasses() {\r\n const params = new BankPassListParams();\r\n params.OrganizationID = this.State.FilterValues.OrganizationID;\r\n params.LoadGlobal = true;\r\n\r\n this.Do(this.bankPassEndpoint.ListEx(params, null), false, (response) => {\r\n this.State.BankPassSource = response.Entities;\r\n\r\n this.State.BankPassIDs = this.State.BankPassIDs.filter(id => !!response.Entities.find(v => v.EntryID === id));\r\n });\r\n }\r\n\r\n LoadContracts() {\r\n if (!this.State.FilterValues.OrganizationID) {\r\n return;\r\n }\r\n const params = new CCContractsParams();\r\n params.OrganizationID = this.State.FilterValues.OrganizationID;\r\n params.Companies = this.State.FilterValues.Company ? [this.State.FilterValues.Company as number] : [];\r\n this.DataSources['Contracts'] = new DataSourceCustomAction((options: DataLoadOptions) => this.contractsEndpoint.ListEx(params));\r\n }\r\n\r\n LoadDownloads() {\r\n const params = new DownloadListParams();\r\n params.OrganizationID = this.State.FilterValues.OrganizationID;\r\n params.Companies = this.State.FilterValues.Company as number[];\r\n params.Accounts = this.State.FilterValues.Account as number[];\r\n params.DateFrom = this.State.FilterValues.DateFrom;\r\n params.DateTo = this.State.FilterValues.DateTo;\r\n params.Status = this.State.Status;\r\n params.BankGroups = this.State.BankGroups;\r\n params.CCContractID = this.State.ContractID;\r\n params.BookingAccounts = this.State.FilterValues.BookingAccount ? [this.State.FilterValues.BookingAccount as number] : [];\r\n params.BookingAccountSubtypes = this.State.FilterValues.BookingAccountSubtype as EnumBookingAccountSubtypes[];\r\n params.BankPassIDs = this.State.BankPassIDs;\r\n params.LoadActive = true;\r\n\r\n this.DataSources['Downloads'] = new DataSourceCustomAction((options: DataLoadOptions) => this.downloadEndpoint.ListEx(params, options), (value) => this.downloadEndpoint.Get(value), (data) => this.RefreshFocusedRows(data[0]), false);\r\n }\r\n\r\n RefreshFocusedRows(download: DownloadView) {\r\n this.State.CurrentDownload = download;\r\n this.RefreshDownloadTasks();\r\n }\r\n\r\n RefreshBookingAccountSubtypes() {\r\n this.State.AvailableSubtypes = this.LIST('BookingAccountSubTypes').filter(item =>\r\n this.State.DownloadTasks.map(item => item.BookingAccountSubtype).filter((value, index, self) => self.indexOf(value) === index).indexOf(item.Value as any) != -1);\r\n }\r\n\r\n RefreshDownloadTasks() {\r\n this.State.DownloadTasks = this.State.CurrentDownload?.Tasks || [];\r\n\r\n this.RefreshBookingAccountSubtypes();\r\n\r\n this.State.DownloadTasks = this.State.FilterValues.BookingAccount\r\n ? this.State.DownloadTasks.filter(item => item.BookingAccountID == this.State.FilterValues.BookingAccount)\r\n : this.State.DownloadTasks;\r\n const bookingAccountSubtypes = this.State.FilterValues.BookingAccountSubtype as EnumBookingAccountSubtypes[];\r\n this.State.DownloadTasks = bookingAccountSubtypes && bookingAccountSubtypes.length > 0\r\n ? this.State.DownloadTasks.filter(item => bookingAccountSubtypes.indexOf(item.BookingAccountSubtype) != -1)\r\n : this.State.DownloadTasks;\r\n this.State.DownloadTasks = this.State.ShowFailedTasksOnly\r\n ? this.State.DownloadTasks.filter(item => item.Status == EnumDownloadTaskStatuses.Failure)\r\n : this.State.DownloadTasks;\r\n this.OnDownloadTaskFocusChanged(this.State.DownloadTasks && this.State.DownloadTasks[0]);\r\n }\r\n\r\n OnDownloadFocusChanged(downloadEntryID: number) {\r\n this.DS('Downloads').FindAsync(downloadEntryID).subscribe(item => this.RefreshFocusedRows(item as DownloadView));\r\n }\r\n\r\n OnDownloadTaskFocusChanged(downloadTask: any) {\r\n this.State.CurrentDownloadTask = this.State.DownloadTasks?.find(item => item.EntryID == downloadTask?.EntryID && item.LineID == downloadTask?.LineID);\r\n this.State.CurrentDownloadTaskID = { EntryID: downloadTask?.EntryID, LineID: downloadTask?.LineID };\r\n this.State.DownloadSteps = this.State.CurrentDownload?.Steps.filter(item => item.EntryID == downloadTask?.EntryID && (item.TaskLineID == downloadTask?.LineID || item.TaskLineID == 999));\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n const settings = new ToolbarSettings;\r\n settings.IsAllowFilter = true;\r\n settings.GridExtender = this.downloadGrid?.G;\r\n\r\n return settings;\r\n }\r\n\r\n override OnApplyFilter() {\r\n this.LoadDownloads();\r\n }\r\n\r\n override OnClearFilter() {\r\n this.InitState();\r\n this.LoadDownloads();\r\n this.LoadOrganization();\r\n }\r\n\r\n private LoadOrganization() {\r\n if (this.State.Organization && this.State.Organization.EntryID === this.State.FilterValues.OrganizationID) {\r\n return;\r\n }\r\n\r\n if (!this.State.FilterValues || !this.State.FilterValues.OrganizationID) {\r\n this.State.Organization = null;\r\n return;\r\n }\r\n\r\n this.Do(this.organizationEndpoint.Get(this.State.FilterValues.OrganizationID), false, (response) => {\r\n this.State.Organization = response.Entity;\r\n });\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\";","import { Component } from '@angular/core';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DownloadStep } from '@kraken/_proxy/entities/download.entity';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-download-step-history-grid',\r\n templateUrl: './download-step-history-grid.component.html',\r\n styles: [`\r\n ::ng-deep .download-steps-grid .grid-detail-item {\r\n padding: 12px;\r\n }\r\n \r\n ::ng-deep .dx-field-value-static .value {\r\n width: 100%;\r\n word-break: break-word;\r\n }\r\n\r\n ::ng-deep .dx-field-value-static .field-value {\r\n width: 100%;\r\n }\r\n `]\r\n})\r\nexport class DownloadStepHistoryGridComponent extends BaseGridComponent {\r\n KeyExpr = ['EntryID', 'LineID'];\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'DownloadStepHistoryGridComponent', DownloadStep, BaseState);\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 OnCellPrepared(cell: any) {\r\n if(cell.rowType === 'data' && cell.column.command === 'expand' && (!cell.data || !cell.data.Exception)) {\r\n if (!cell.cellElement || !cell.cellElement.childNodes.length) return;\r\n\r\n cell.cellElement.classList.remove('dx-datagrid-expand'); \r\n cell.cellElement.childNodes[0].classList.remove('dx-datagrid-group-closed'); \r\n }\r\n }\r\n\r\n GetStatusColor(data) {\r\n switch(data.Status) {\r\n case this.Enums.EnumDownloadStepStatuses.Success:\r\n return 'green-cyan';\r\n case this.Enums.EnumDownloadStepStatuses.Failure:\r\n return 'atomic-tangerine';\r\n case this.Enums.EnumDownloadStepStatuses.Exception:\r\n return 'cinnabar';\r\n case this.Enums.EnumDownloadStepStatuses.Pending:\r\n return 'mango';\r\n }\r\n }\r\n}","export default \"\\r\\n \\r\\n \\r\\n \\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.Date | formatTime }}\\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 { 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 { ContextMenuElement } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { DownloadTask } from '@kraken/_proxy/entities/download.entity';\r\nimport { AccessService } from '@kraken/services/access.service';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-download-task-history-grid',\r\n templateUrl: './download-task-history-grid.component.html',\r\n styles: [`\r\n ::ng-deep #download-tasks-history-grid .dx-data-row.dx-state-hover:not(.dx-selection):not(.dx-row-inserted):not(.dx-row-removed):not(.dx-edit-row)\r\n {\r\n cursor: pointer;\r\n }\r\n `]\r\n})\r\nexport class DownloadTaskHistoryGridComponent extends BaseGridComponent {\r\n public selectedKeys: number[] = [];\r\n @Input() set CurrentDownloadTaskID(value: number) {\r\n this.selectedKeys = [value];\r\n }\r\n @Output() OnFocusChanged = new EventEmitter();\r\n\r\n KeyExpr = ['EntryID', 'LineID'];\r\n\r\n constructor(A: ServiceBagService, private accessService: AccessService) {\r\n super(A, 'DownloadTaskHistoryGridComponent', DownloadTask, BaseState);\r\n this.BindHandler('OnGoToBookingAccount');\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 OnRowClicked(e) {\r\n this.OnFocusChanged.emit({ EntryID: e.data?.EntryID, LineID: e.data?.LineID });\r\n }\r\n\r\n OnGoToContract(row) {\r\n this.Navigate(['pages/cccontract', row.CCContractID],\r\n { BookingAccountSubtype: row.BookingAccountSubtype, BookingAccountID: row.BookingAccountID, CompanyID: row.CompanyID },\r\n false, true);\r\n }\r\n\r\n OnGoToBookingAccount(row) {\r\n this.Navigate(['pages/account', row.AccountID],\r\n { BookingAccountSubtype: row.BookingAccountSubtype, BookingAccountID: row.BookingAccountID, CompanyID: row.CompanyID },\r\n false, true);\r\n }\r\n\r\n GetStatusColor(data) {\r\n switch (data.Status) {\r\n case this.Enums.EnumDownloadTaskStatuses.Success:\r\n return 'green-cyan';\r\n case this.Enums.EnumDownloadTaskStatuses.Failure:\r\n return 'atomic-tangerine';\r\n case this.Enums.EnumDownloadTaskStatuses.NoData:\r\n return 'lucky-point';\r\n case this.Enums.EnumDownloadTaskStatuses.Pending:\r\n return 'mango';\r\n }\r\n }\r\n\r\n protected override GetGridRowContextMenu(options?: any): ContextMenuElement[] {\r\n const rowData = options?.data;\r\n if (!rowData) return [{ text: 'Fake item', onClick: () => null }];\r\n\r\n const items = [];\r\n\r\n if (this.accessService.IsAllowSettings()) {\r\n if (rowData.AccountID) {\r\n items.push({\r\n text: this.RC('titleGoToBookingAccount'),\r\n onClick: () => this.OnGoToBookingAccount(rowData)\r\n });\r\n }\r\n\r\n if (rowData.CCContractID) {\r\n items.push({\r\n text: this.RC('titleGoToContract'),\r\n onClick: () => this.OnGoToContract(rowData)\r\n });\r\n }\r\n }\r\n\r\n\r\n\r\n return items;\r\n }\r\n}","export default \" \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\";","import { Component } from \"@angular/core\";\r\nimport { ServiceBagServices, ServiceBagService } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { BaseGridComponent } from \"@m4u-angular/base/component/BaseGridComponent\";\r\nimport { BaseState } from \"@m4u-angular/base/entities/BaseEntities\";\r\nimport { NotificationTemplate } from '@kraken/_proxy/entities/notificationtemplate.entity';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-organization-notification-template-grid',\r\n templateUrl: './notification-template-grid.component.html'\r\n})\r\nexport class NotificationTemplateGridComponent extends BaseGridComponent\r\n{\r\n constructor(A: ServiceBagService)\r\n {\r\n super(A, 'NotificationTemplateGridComponent', NotificationTemplate, BaseState);\r\n }\r\n\r\n OnNavigate(e)\r\n {\r\n this.A.Navigator.Navigate(['/pages/notification-organization-template', e.data.EntryID], { OrganizationID: e.data.OrganizationID });\r\n }\r\n}\r\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 { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { NotificationTemplateView } from './../views/notificationtemplate.view';\r\nimport { NotificationTemplatePreView } from './../views/notificationtemplatepre.view';\r\nimport { EnumPredefinedNotificationTemplates } from './../enums';\r\n@Injectable()\r\nexport class NotificationTemplateEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(api: APIGatewayService) {super(\"NotificationTemplate\", api);}\r\n\t\r\n\r\n public ListEx(OrganizationID: number, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'ListEx', {OrganizationID: OrganizationID, options:options?.GetLoadOptions()} );\r\n }\r\n\r\n public GetPredefinedTemplate(predefinedTemplate: EnumPredefinedNotificationTemplates) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetPredefinedTemplate', {predefinedTemplate: predefinedTemplate} );\r\n }\r\n\r\n public GetFilledTemplate(NotificationTemplateID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetFilledTemplate', {NotificationTemplateID: NotificationTemplateID} );\r\n }\r\n\r\n public override Get(NotificationTemplateID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'Get', {NotificationTemplateID: NotificationTemplateID} );\r\n }\r\n\r\n public Duplicate(NotificationTemplateID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'Duplicate', {NotificationTemplateID: NotificationTemplateID} );\r\n }\r\n}\r\n\r\n","import { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Component, Input, ViewChild } from '@angular/core';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { EnumPageDisplayModes, EnumPageEntitySources } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { UserEndpoint } from '../../_proxy/endpoints/user.endpoint';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { NotificationTemplateEndpoint } from '../../_proxy/endpoints/notificationtemplate.endpoint';\r\nimport { NotificationRequest } from '../../_proxy/entities/notificationrequest.entity';\r\nimport { EnumNotificationRequestStatuses } from '../../_proxy/enums';\r\nimport { NotificationRequestEndpoint } from '../../_proxy/endpoints/notificationrequest.endpoint';\r\nimport { NotificationTemplateView } from '@kraken/_proxy/views/notificationtemplate.view';\r\nimport { SessionService } from '@m4u-angular/core/framework/session.service';\r\n\r\nexport enum EnumShareWith {\r\n Myself = 'Myself',\r\n Users = 'Users',\r\n Emails = 'Emails'\r\n}\r\n\r\nexport class State extends BaseState {\r\n ShareWith: string;\r\n Emails = [];\r\n Users = [];\r\n Templates: NotificationTemplateView[] = [];\r\n SelectTemplates: number[];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-share-information-dialog',\r\n templateUrl: './share-information-dialog.component.html'\r\n})\r\nexport class ShareInformationDialogComponent extends BasePageComponent {\r\n\r\n eShareWith = EnumShareWith;\r\n @ViewChild('grid') grid;\r\n @Input() OrganizationID: number;\r\n @Input() TemplateID: number;\r\n\r\n constructor(\r\n A: ServiceBagService,\r\n private userEndpoint: UserEndpoint,\r\n private templateEndpoint: NotificationTemplateEndpoint,\r\n private requestEndpoint: NotificationRequestEndpoint,\r\n private sessionService: SessionService) {\r\n super(A, 'ShareInformationDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.LoadUsers();\r\n this.LoadTemplates();\r\n\r\n setTimeout(() => {\r\n this.validationGroup.instance.reset()\r\n })\r\n }\r\n\r\n override OnInitState() {\r\n this.State.SelectTemplates = [];\r\n }\r\n\r\n private LoadUsers() {\r\n this.DataSources['Users'] = new DataSourceCustomAction((options: DataLoadOptions) => this.userEndpoint.ListEx(this.OrganizationID, true, options));\r\n }\r\n\r\n private LoadTemplates() {\r\n this.Do(this.templateEndpoint.ListEx(this.OrganizationID, null), false, ({ Entities }) => {\r\n this.State.Templates = Entities;\r\n if (this.TemplateID) {\r\n this.State.SelectTemplates[0] = this.State.Templates.find((x) => x.EntryID == this.TemplateID)?.EntryID;\r\n }\r\n });\r\n }\r\n\r\n OnOK() {\r\n let requests: NotificationRequest[];\r\n\r\n this.grid?.G.AcceptChanges()\r\n\r\n switch (this.State.ShareWith) {\r\n case EnumShareWith.Myself:\r\n requests = this.GetPendingNotificationRequest(this.UserInfo.Email, this.sessionService.CurrentUserID);\r\n break;\r\n case EnumShareWith.Users: \r\n requests = this.State.Users.map(u => this.GetPendingNotificationRequest(u.Email, u.EntryID)).flat();\r\n break;\r\n case EnumShareWith.Emails:\r\n requests = this.State.Emails.map(e => this.GetPendingNotificationRequest(e.Email, this.sessionService.CurrentUserID)).flat();\r\n break;\r\n }\r\n\r\n this.Do(this.requestEndpoint.SaveBatch(requests), true, (response) => this.CloseDialogWithSuccess(true));\r\n }\r\n\r\n GetPendingNotificationRequest(email: string, receiverUserId: number): NotificationRequest[] {\r\n return this.State.SelectTemplates.map(templateId => {\r\n const request = new NotificationRequest();\r\n request.Status = EnumNotificationRequestStatuses.Pending;\r\n request.Email = email;\r\n request.NotificationTemplateID = templateId;\r\n request.ReceiverUserId = receiverUserId;\r\n return request;\r\n });\r\n }\r\n\r\n onContentReady() {\r\n this.grid.G.OnGridClick();\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\";","import { ListTransactionCategoriesParams } from './../../_proxy/params/listtransactioncategories.param';\r\nimport { Component, ViewChild } from '@angular/core';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { OrganizationEndpoint } from '../../_proxy/endpoints/organization.endpoint';\r\nimport { BaseEntityResponse, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Organization } from '../../_proxy/entities/organization.entity';\r\nimport { EnumBookingAccountSubtypes, EnumNotificationTemplateSectionFields, EnumNotificationTemplateSectionType, EnumExportType, EnumNotificationBalanceSummaryType } from '../../_proxy/enums';\r\nimport { EnumCRUDActions, EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { NotificationTemplateEndpoint } from '../../_proxy/endpoints/notificationtemplate.endpoint';\r\nimport { NotificationTemplateAccordionComponent } from './notification-template-accordion.component';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { AccountListParams } from '../../_proxy/params/accountlist.param';\r\nimport { BookingAccountListParams } from '../../_proxy/params/bookingaccountlist.param';\r\nimport { CompanyEndpoint } from '../../_proxy/endpoints/company.endpoint';\r\nimport { AccountGroupEndpoint } from '../../_proxy/endpoints/accountgroup.endpoint';\r\nimport { AccountEndpoint } from '../../_proxy/endpoints/account.endpoint';\r\nimport { BookingAccountEndpoint } from '../../_proxy/endpoints/bookingaccount.endpoint';\r\nimport { NotificationTemplateView } from '../../_proxy/views/notificationtemplate.view';\r\nimport { NotificationTemplateSectionView } from '../../_proxy/views/notificationtemplatesection.view';\r\nimport { EnumPredefinedNotificationTemplates } from './list/notification-template-list.component';\r\nimport { TransactionCategoryEndpoint } from '../../_proxy/endpoints/transactioncategory.endpoint';\r\nimport { ContextMenuElement, ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { ShareInformationDialogComponent } from '../../dialogs/share-information-dialog/share-information-dialog.component';\r\nimport { NotificationTemplateSectionFilterView } from '../../_proxy/views/notificationtemplatesectionfilter.view';\r\nimport { NotificationPreviewDialogComponent } from '@m4u-angular/ui/notifications/notification-preview-dialog/notification-preview-dialog.component';\r\nimport saveAs from 'file-saver';\r\nimport { CompanyListParams } from '@kraken/_proxy/params/companylist.param';\r\nimport { DateHelpers } from '@m4u-angular/core/helpers/DateHelpers';\r\nimport { Globals } from '@kraken/_globals';\r\nimport { formatDate } from 'devextreme/localization';\r\nimport { AccountGroupListParams } from '@kraken/_proxy/params/accountgrouplist.param';\r\nimport { AccessService } from '@kraken/services/access.service';\r\n\r\nclass State extends BaseState {\r\n Organization: Organization = new Organization;\r\n CurrentTabIndex: number;\r\n SectionsDictionary = {} as Record>;\r\n NotificationTemplatesTabs: any[] = [];\r\n}\r\n\r\nexport type SectionFilterClientSide = Omit & { Values: any };\r\nexport type SectionViewClientSide = Omit & { Filters: SectionFilterClientSide[] };\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 NotificationOrganizationTemplateComponent extends BasePageCRUDComponent\r\n{\r\n @ViewChild('accordionBalances') accordionBalances: NotificationTemplateAccordionComponent;\r\n @ViewChild('accordionLoans') accordionLoans: NotificationTemplateAccordionComponent;\r\n @ViewChild('accordionTransactions') accordionTransactions: NotificationTemplateAccordionComponent;\r\n @ViewChild('accordionBalanceDetails') accordionBalanceDetails: NotificationTemplateAccordionComponent;\r\n @ViewChild('shareInformationDialog') shareInformationDialog: ShareInformationDialogComponent;\r\n @ViewChild('previewDialog') previewDialog: NotificationPreviewDialogComponent;\r\n\r\n constructor(A: ServiceBagService, private endpoint: NotificationTemplateEndpoint, private organizationEndpoint: OrganizationEndpoint,\r\n private companyEndpoint: CompanyEndpoint, private accountGroupEndpoint: AccountGroupEndpoint, private accountEndpoint: AccountEndpoint,\r\n private bookingAccountEndpoint: BookingAccountEndpoint, private transactionCategoryEndpoint: TransactionCategoryEndpoint,\r\n private accessService: AccessService) {\r\n super(A, 'NotificationTemplateComponent', NotificationTemplateView, State, endpoint, EnumPageDisplayModes.Window);\r\n this.BindHandler(\"OnIsSetCustomSubject\");\r\n }\r\n\r\n override OnInitContextMenus(): ContextMenuElement[] {\r\n if (this.IsAddMode) return undefined;\r\n const menus: ContextMenuElement[] =\r\n [\r\n {\r\n text: this.RC('titleDelete'),\r\n visible: true,\r\n onClick: this.OnDelete.bind(this)\r\n },\r\n {\r\n text: this.RC('btnShareInformation'),\r\n visible: true,\r\n onClick: this.OnShareInformation.bind(this)\r\n },\r\n {\r\n text: this.RC('lblDuplicate'),\r\n visible: true,\r\n onClick: this.OnDuplicate.bind(this)\r\n }\r\n ];\r\n\r\n return menus;\r\n }\r\n override OnInitComponent() {\r\n this.InitTabs();\r\n\r\n const params = new ListTransactionCategoriesParams();\r\n params.OrganizationID = this.QueryParams.OrganizationID;\r\n params.LoadActive = true;\r\n params.LoadGlobal = true;\r\n\r\n const companyParams = new CompanyListParams();\r\n companyParams.OrganizationID = this.QueryParams.OrganizationID;\r\n companyParams.LoadActive = true;\r\n\r\n const accountGroupParams = new AccountGroupListParams();\r\n accountGroupParams.OrganizationID = this.QueryParams.OrganizationID;\r\n accountGroupParams.LoadActive = true;\r\n\r\n this.Do(this.organizationEndpoint.Get(this.QueryParams.OrganizationID), false, (response: BaseEntityResponse) => this.State.Organization = response.Entity);\r\n this.DataSources[EnumNotificationTemplateSectionFields.Company] =\r\n new DataSourceCustomAction((options: DataLoadOptions) => this.companyEndpoint.ListEx(companyParams, options), undefined, undefined, undefined, { pageSize: Number.MAX_SAFE_INTEGER });\r\n this.DataSources[EnumNotificationTemplateSectionFields.AccountGroup] =\r\n new DataSourceCustomAction((options: DataLoadOptions) => this.accountGroupEndpoint.ListEx(accountGroupParams, options), undefined, undefined, undefined, { pageSize: Number.MAX_SAFE_INTEGER });\r\n this.DataSources[EnumNotificationTemplateSectionFields.BankAccount] =\r\n new DataSourceCustomAction((options: DataLoadOptions) => this.accountEndpoint.ListEx({ OrganizationID: this.State.Organization.EntryID, LoadActive: true } as AccountListParams, options), undefined, undefined, undefined, { pageSize: Number.MAX_SAFE_INTEGER });\r\n this.DataSources[EnumNotificationTemplateSectionFields.BookingAccount] = new DataSourceCustomAction((options: DataLoadOptions) =>\r\n this.bookingAccountEndpoint.ListEx({ OrganizationID: this.State.Organization.EntryID } as BookingAccountListParams,), undefined, undefined, undefined, { pageSize: Number.MAX_SAFE_INTEGER });\r\n this.DataSources[EnumNotificationTemplateSectionFields.Category] =\r\n new DataSourceCustomAction((options: DataLoadOptions) => this.transactionCategoryEndpoint.ListEx(params, options), undefined, undefined, undefined, { pageSize: Number.MAX_SAFE_INTEGER });\r\n this.DataSources['BookingAccountsDeposits'] = new DataSourceCustomAction((options: DataLoadOptions) =>\r\n this.bookingAccountEndpoint.ListEx({ OrganizationID: this.State.Organization.EntryID, BookingAccountSubtypes: [EnumBookingAccountSubtypes.Deposits] } as BookingAccountListParams), undefined, undefined, undefined, { pageSize: Number.MAX_SAFE_INTEGER });\r\n this.DataSources['BookingAccountsStocks'] = new DataSourceCustomAction((options: DataLoadOptions) =>\r\n this.bookingAccountEndpoint.ListEx({ OrganizationID: this.State.Organization.EntryID, BookingAccountSubtypes: [EnumBookingAccountSubtypes.Stocks] } as BookingAccountListParams), undefined, undefined, undefined, { pageSize: Number.MAX_SAFE_INTEGER });\r\n this.DataSources['BookingAccountsLoans'] = new DataSourceCustomAction((options: DataLoadOptions) =>\r\n this.bookingAccountEndpoint.ListEx({ OrganizationID: this.State.Organization.EntryID, BookingAccountSubtypes: [EnumBookingAccountSubtypes.Loans] } as BookingAccountListParams), undefined, undefined, undefined, { pageSize: Number.MAX_SAFE_INTEGER });\r\n this.DataSources['BookingAccountsTransactions'] = new DataSourceCustomAction((options: DataLoadOptions) =>\r\n this.bookingAccountEndpoint.ListEx({ OrganizationID: this.State.Organization.EntryID, BookingAccountSubtypes: [EnumBookingAccountSubtypes.Current, EnumBookingAccountSubtypes.CreditCard] } as BookingAccountListParams))\r\n this.DataSources['BookingAccountsLoanPayments'] = new DataSourceCustomAction((options: DataLoadOptions) =>\r\n this.bookingAccountEndpoint.ListEx({ OrganizationID: this.State.Organization.EntryID, BookingAccountSubtypes: [EnumBookingAccountSubtypes.Loans] } as BookingAccountListParams))\r\n for (const e in EnumNotificationTemplateSectionType) { this.State.SectionsDictionary[e] = []; }\r\n\r\n if (this.QueryParams.PredefinedTemplate && this.QueryParams.PredefinedTemplate !== EnumPredefinedNotificationTemplates.Empty) {\r\n this.SetEntity(this.EntityType, this.endpoint.GetPredefinedTemplate(this.QueryParams.PredefinedTemplate), false, (response) => {\r\n this.Entity.OrganizationID = this.QueryParams.OrganizationID;\r\n this.OnEntityLoaded();\r\n });\r\n }\r\n }\r\n\r\n OnIsSetCustomSubject(event: any) {\r\n if (!this.IsUIEvent(event)) { return; }\r\n this.Entity.CustomSubject = null;\r\n }\r\n\r\n override OnEntityInitObjectName() {\r\n return this.Entity && this.Entity.Name;\r\n }\r\n\r\n override OnEntityNew() {\r\n this.Entity.IsIncludeSyncStatus = true;\r\n this.Entity.BalanceSummaryType = EnumNotificationBalanceSummaryType.Total;\r\n this.Entity.IsIncludeLoginLink = true;\r\n this.Entity.OrganizationID = this.QueryParams.OrganizationID;\r\n\r\n this.State.CurrentTabIndex = 0;\r\n }\r\n\r\n override OnEntityLoaded() {\r\n if (!this.Entity.Sections) {\r\n this.Entity.Sections = [];\r\n return;\r\n }\r\n\r\n this.Entity.Sections = this.Entity.Sections.sort((s1, s2) => s1.SortOrder < s2.SortOrder ? -1 : 1);\r\n\r\n const sectionsClientSide = { ...this.Entity.Sections } as Array;\r\n\r\n for (const i in sectionsClientSide) {\r\n for (const filter of sectionsClientSide[i].Filters) {\r\n if (filter.FilterField === EnumNotificationTemplateSectionFields.Company\r\n || filter.FilterField === EnumNotificationTemplateSectionFields.BookingAccount\r\n || filter.FilterField === EnumNotificationTemplateSectionFields.BankAccount\r\n || filter.FilterField === EnumNotificationTemplateSectionFields.AccountGroup\r\n || filter.FilterField === EnumNotificationTemplateSectionFields.Category) {\r\n\r\n filter.Values = filter.Values.map(fv => Number(fv));\r\n }\r\n }\r\n\r\n this.State.SectionsDictionary[sectionsClientSide[i].SectionType].push(sectionsClientSide[i]);\r\n }\r\n\r\n this.RefreshEntityOriginal();\r\n \r\n setTimeout(() => {this.State.CurrentTabIndex = 0;})\r\n }\r\n\r\n override OnEntitySaved() {\r\n this.NavigateBack();\r\n }\r\n\r\n override OnEntityValidate(): boolean {\r\n for (const e in EnumNotificationTemplateSectionType) {\r\n for (const section of this.State.SectionsDictionary[e]) {\r\n for (const filter of section.Filters) {\r\n if (filter.FilterField === undefined) {\r\n this.UI.StopMessage(this.RC('msgSectionFiltersError') + section.Title);\r\n return false;\r\n }\r\n if (filter.Values === undefined || filter.Values.length === 0) {\r\n this.UI.StopMessage(this.RC('msgSectionFilterValuesError') + section.Title + ', ' + filter.FilterField);\r\n return false;\r\n }\r\n\r\n if (section.Filters.filter(f => f.FilterField === filter.FilterField).length > 1) {\r\n this.UI.StopMessage(this.RC('msgDuplicateFiltersError') + section.Title);\r\n return false;\r\n }\r\n\r\n const timeRelated = [EnumNotificationTemplateSectionFields.NextDays, EnumNotificationTemplateSectionFields.NextWeeks, EnumNotificationTemplateSectionFields.NextMonths]\r\n if (section.Filters.filter(f => timeRelated.includes(f.FilterField)).length > 1) {\r\n this.UI.StopMessage(this.RC('msgLotsTimeRelatedError') + section.Title);\r\n return false;\r\n }\r\n }\r\n\r\n //TODO REMOVE IT FOR FLOAT\r\n if (e === EnumNotificationTemplateSectionType.Balances && section.Groupings.length === 0 && section.ExportType !== EnumExportType.Excel) {\r\n this.UI.StopMessage(this.RC('msgSectionGroupingsError') + section.Title);\r\n return false;\r\n }\r\n\r\n if (e === EnumNotificationTemplateSectionType.Transactions && section.IsFilterByAmount && section.AmountFrom === undefined && section.AmountTo === undefined) {\r\n this.UI.StopMessage(this.RC('msgSectionAmountFilterError') + section.Title);\r\n return false;\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n protected override OnEntityPrepareForSave(): void {\r\n this.Entity.Sections = [];\r\n for (const e in EnumNotificationTemplateSectionType) {\r\n this.Entity.Sections = this.Entity.Sections.concat(this.State.SectionsDictionary[e] as NotificationTemplateSectionView[]);\r\n }\r\n\r\n for (const section of this.Entity.Sections) {\r\n if (section.Filters) {\r\n section.Filters = section.Filters.map(f => {\r\n return {\r\n FilterField: f.FilterField,\r\n Values: Array.isArray(f.Values) ? f.Values : [f.Values]\r\n } as NotificationTemplateSectionFilterView\r\n });\r\n }\r\n }\r\n }\r\n\r\n OnDuplicate() {\r\n this.Do(this.endpoint.Duplicate(this.Entity.EntryID), true, (response) => {\r\n this.NotifyEntitySaved(this.Entity, this.EntityType, EnumCRUDActions.Create);\r\n });\r\n }\r\n\r\n OnShareInformation() {\r\n this.shareInformationDialog.OrganizationID = this.State.Organization.EntryID;\r\n this.shareInformationDialog.TemplateID = this.Entity.EntryID;\r\n this.shareInformationDialog.ShowDialogShort((result: any) => { });\r\n }\r\n\r\n OnShowRenderedTemplate() {\r\n\r\n if (!this.OnEntityValidate()) return;\r\n this.OnEntityPrepareForSave();\r\n this.SetEntity(this.EntityType, this.Endpoint.Save(this.Entity), false, (_) => {\r\n this.Do(this.endpoint.GetFilledTemplate(this.Entity.EntryID), true, ({ Data: { Html, ExcelFile } }) => {\r\n this.previewDialog.HTMLBody = Html;\r\n\r\n if (ExcelFile) {\r\n const type = 'data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64,'\r\n const dateStr = `${formatDate(Globals.Today, 'yyyyMMdd')}`;\r\n saveAs(`${type}${ExcelFile}`, `DailyReport_${dateStr}.xlsx`);\r\n }\r\n\r\n this.previewDialog.ShowDialogShort((result: any) => {\r\n });\r\n });\r\n }\r\n );\r\n }\r\n\r\n OnAddSectionClick(e: EnumNotificationTemplateSectionType) {\r\n switch (e) {\r\n case EnumNotificationTemplateSectionType.Balances: this.accordionBalances.OnAddSectionClick(); break;\r\n case EnumNotificationTemplateSectionType.Transactions: this.accordionTransactions.OnAddSectionClick(); break;\r\n case EnumNotificationTemplateSectionType.BalanceDetails: this.accordionBalanceDetails.OnAddSectionClick(); break;\r\n case EnumNotificationTemplateSectionType.LoanPayments: this.accordionLoans.OnAddSectionClick(); break;\r\n }\r\n }\r\n\r\n override OnIsDirtyDisabled(): boolean {\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 private InitTabs() {\r\n let tabs = this.LIST('NotificationTemplatesTabs');\r\n\r\n if (!this.accessService.IsAllowLoans()) {\r\n tabs = tabs.filter((x: any) => x.Name !== 'LoanPaymentsTab')\r\n }\r\n\r\n this.State.NotificationTemplatesTabs = tabs;\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\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 '@m4u-angular/base/entities/BaseEntities';\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-sync-status-chart',\r\n templateUrl: './sync-status-chart.component.html',\r\n styleUrls: ['./sync-status-chart.component.scss']\r\n})\r\nexport class SyncStatusChartComponent extends BaseComponent {\r\n @Input() DataSource: any[];\r\n @Input() FailedCount: number;\r\n @Input() StatusesListName: string;\r\n @Input() IsInCard: boolean;\r\n @Input() GetColor: (e) => {};\r\n @Output() NavigateToReport = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'SyncStatusChartComponent', BaseState);\r\n this.BindHandler('CustomizePoint');\r\n this.BindHandler('CustomizeTooltip');\r\n }\r\n\r\n CustomizePoint(e) {\r\n const color = this.GetColor && this.GetColor(e);\r\n return {\r\n color: color\r\n };\r\n }\r\n\r\n GetBorderColor() {\r\n return this.IsInCard ? 'white' : '#FAFAFB';\r\n }\r\n\r\n CustomizeTooltip(e) {\r\n const statusValue = this.LISTITEM(this.StatusesListName, e.argument);\r\n return {\r\n text: `${statusValue} (${e.value})`\r\n }\r\n }\r\n\r\n OnNavigate(e) {\r\n this.NavigateToReport.emit(e.target.data.Status);\r\n }\r\n}\r\n","export default \"
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n {{FailedCount || ''}}\\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 { SyncStatusDownloadGroupedView } from './../views/syncstatusdownloadgrouped.view';\r\nimport { SyncStatusUploadGroupedView } from './../views/syncstatusuploadgrouped.view';\r\nimport { SyncStatusReplicationGroupedView } from './../views/syncstatusreplicationgrouped.view';\r\nimport { SyncStatusListParams } from './../params/syncstatuslist.param';\r\n@Injectable()\r\nexport class SyncStatusEndpoint extends BaseEndpoint\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"SyncStatus\", api);}\r\n\t\r\n\r\n public ListForDownloads(Params: SyncStatusListParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListForDownloads', Params, undefined );\r\n }\r\n\r\n public ListForUploads(Params: SyncStatusListParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListForUploads', Params, undefined );\r\n }\r\n\r\n public ListForJournalEntryUploads(Params: SyncStatusListParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListForJournalEntryUploads', Params, undefined );\r\n }\r\n\r\n public ListForIncomingPaymentUploads(Params: SyncStatusListParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListForIncomingPaymentUploads', Params, undefined );\r\n }\r\n\r\n public ListForReplications() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'ListForReplications', undefined );\r\n }\r\n}\r\n\r\n","import { Component } from '@angular/core';\r\nimport { BaseEntitiesResponse, BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { SyncStatusEndpoint } from '../../_proxy/endpoints/syncstatus.endpoint';\r\nimport { EnumBankGroups, EnumBookingAccountSubtypes, EnumDownloadTaskStatuses } from '../../_proxy/enums';\r\nimport { SyncStatusListParams } from '../../_proxy/params/syncstatuslist.param';\r\nimport { SyncStatusDownloadGroupedView } from '../../_proxy/views/syncstatusdownloadgrouped.view';\r\nimport { SyncStatusDownloadGroupedRowView } from '../../_proxy/views/syncstatusdownloadgroupedrow.view';\r\nimport { Globals } from '../../_globals';\r\nimport { AccessService } from '@kraken/services/access.service';\r\n\r\nclass State extends BaseState {\r\n OrganizationID: number;\r\n Organizations = [];\r\n SyncStatusDownloads: SyncStatusDownloadGroupedView[] = [];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-sync-status-downloads',\r\n templateUrl: './sync-status-downloads.component.html',\r\n styleUrls: ['./sync-status-downloads.component.scss']\r\n})\r\nexport class SyncStatusDownloadsComponent extends BasePageComponent {\r\n\r\n get OrganizationID() { return Globals.OrganizationID; }\r\n set OrganizationID(value: number) {\r\n if (value !== -999) { Globals.OrganizationID = value; }\r\n this.State.OrganizationID = value;\r\n this.LoadSyncStatusDownloads();\r\n }\r\n\r\n constructor(A: ServiceBagService, \r\n public accessService: AccessService,\r\n private syncStatusEndpoint: SyncStatusEndpoint) {\r\n super(A, 'SyncStatusDownloadsComponent', BaseEntity, State);\r\n }\r\n\r\n override OnInitState() {\r\n this.State.OrganizationID = Globals.OrganizationID;\r\n }\r\n\r\n override OnInitComponent() {\r\n this.LoadOrganizations();\r\n this.LoadSyncStatusDownloads();\r\n }\r\n\r\n LoadOrganizations() {\r\n \r\n if (!this.DS('Organizations').Items.length) {\r\n this.DS('Organizations').Reload().subscribe(() => {\r\n this.State.Organizations = [{'EntryID': -999, 'Name': this.RC('lblAllOrganizations')}, ...this.DS('Organizations').Items.filter((item)=>item.IsActive)];\r\n if (this.State.OrganizationID) this.LoadSyncStatusDownloads();\r\n });\r\n }\r\n else {\r\n this.State.Organizations = [{ 'EntryID': -999, 'Name': this.RC('lblAllOrganizations') }, ...this.DS('Organizations').Items.filter((item) => item.IsActive)];\r\n if (this.State.OrganizationID) this.LoadSyncStatusDownloads();\r\n }\r\n\r\n }\r\n\r\n LoadSyncStatusDownloads() {\r\n if (!this.State.OrganizationID) return;\r\n var params = new SyncStatusListParams();\r\n params.IsDownloadOnly = true;\r\n params.OrganizationID = this.State.OrganizationID;\r\n\r\n this.Do(this.syncStatusEndpoint.ListForDownloads(params), false,\r\n (response: BaseEntitiesResponse) => {\r\n response.Entities.forEach(x => x.Rows = x.Rows.sort((a, b) => \r\n (this.LISTITEMX('BookingAccountSubTypes', a.Subtype) as any).SortOrder - (this.LISTITEMX('BookingAccountSubTypes', b.Subtype) as any).SortOrder))\r\n this.State.SyncStatusDownloads = response.Entities;\r\n });\r\n }\r\n\r\n GetFailedCount(row: SyncStatusDownloadGroupedRowView) {\r\n return row.Statuses.filter(x => x.Status !== EnumDownloadTaskStatuses.NoData && x.Status !== EnumDownloadTaskStatuses.Success)\r\n .reduce((s, p) => s + p.Count, 0);\r\n }\r\n\r\n OnNavigate(e: any, bankGroup: EnumBankGroups, subtype: EnumBookingAccountSubtypes) {\r\n this.Navigate(['pages/sync-status'], { BankGroup: bankGroup, Subtype: subtype, DownloadStatus: e, OrganizationID: this.State.OrganizationID }, false, true);\r\n }\r\n\r\n GetColor(e) {\r\n switch(e.data.Status) {\r\n case EnumDownloadTaskStatuses.Success: return Globals.DashboardPalette[0];\r\n case EnumDownloadTaskStatuses.Pending: return Globals.DashboardPalette[4];\r\n case EnumDownloadTaskStatuses.NoData: return Globals.DashboardPalette[5];\r\n case EnumDownloadTaskStatuses.Failure: return '#E84545';\r\n case EnumDownloadTaskStatuses.NotSynched: return Globals.DashboardPalette[2];\r\n case EnumDownloadTaskStatuses.Reviewed: return Globals.DashboardPalette[1];\r\n }\r\n }\r\n\r\n GetSortedBookingAccountSybtypes() {\r\n return this.LIST('BookingAccountSubTypes').sort((a: any, b: any) => a.SortOrder - b.SortOrder);\r\n }\r\n\r\n GetRow(syncStatusDownload: SyncStatusDownloadGroupedView, subtype: EnumBookingAccountSubtypes) {\r\n return syncStatusDownload.Rows.filter(x => x.Subtype === subtype)[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
{{ subtype.Text }}
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
{{syncStatusDownload.BankGroup | LookupList: LIST('BankGroups')}}
\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\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 { BaseEntitiesResponse, BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { SyncStatusEndpoint } from '../../_proxy/endpoints/syncstatus.endpoint';\r\nimport { EnumUploadStatuses } from '../../_proxy/enums';\r\nimport { SyncStatusListParams } from '../../_proxy/params/syncstatuslist.param';\r\nimport { SyncStatusUploadGroupedView } from '../../_proxy/views/syncstatusuploadgrouped.view';\r\nimport { Globals } from '../../_globals';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { AccessService } from '@kraken/services/access.service';\r\nimport { Observable } from 'rxjs';\r\n\r\nclass State extends BaseState {\r\n SyncStatusUploads: SyncStatusUploadGroupedView[] = [];\r\n VisibleTooltips: any = {};\r\n ShowFailedOnly: boolean = false;\r\n CurrentTabIndex: number;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-sync-status-uploads',\r\n templateUrl: './sync-status-uploads.component.html',\r\n styleUrls: ['./sync-status-uploads.component.scss']\r\n})\r\nexport class SyncStatusUploadsComponent extends BasePageComponent {\r\n constructor(A: ServiceBagService, private syncStatusEndpoint: SyncStatusEndpoint,\r\n public accessService: AccessService) {\r\n super(A, 'SyncStatusUploadsComponent', BaseEntity, State);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.State.CurrentTabIndex = 0;\r\n this.LoadSyncStatusUploads();\r\n }\r\n\r\n LoadSyncStatusUploads() {\r\n // Clear previous value\r\n this.State.SyncStatusUploads = null;\r\n\r\n const params = new SyncStatusListParams();\r\n params.IsUploadOnly = true;\r\n \r\n let actionLoad: Observable>;\r\n if(this.State.CurrentTabIndex === 0) {\r\n actionLoad = this.syncStatusEndpoint.ListForUploads(params);\r\n } else if(this.State.CurrentTabIndex === 1) {\r\n actionLoad = this.syncStatusEndpoint.ListForJournalEntryUploads(params);\r\n } else if(this.State.CurrentTabIndex === 2) {\r\n actionLoad = this.syncStatusEndpoint.ListForIncomingPaymentUploads(params);\r\n } else {\r\n return;\r\n }\r\n \r\n this.Do(actionLoad, \r\n false, \r\n (response: BaseEntitiesResponse) => this.State.SyncStatusUploads = response.Entities\r\n );\r\n }\r\n\r\n GetFailedCount(row: SyncStatusUploadGroupedView) {\r\n return row.Statuses.filter(x => x.Status !== EnumUploadStatuses.NoData && x.Status !== EnumUploadStatuses.Success\r\n && x.Status !== EnumUploadStatuses.Initiated && x.Status !== EnumUploadStatuses.DataSent\r\n && x.Status !== EnumUploadStatuses.FileExported)\r\n .reduce((s, p) => s + p.Count, 0);\r\n }\r\n\r\n OnShowFailedOnlyChanged() {\r\n if (this.State.ShowFailedOnly) this.State.SyncStatusUploads = this.State.SyncStatusUploads.filter(x => this.GetFailedCount(x) > 0 || x.IsError);\r\n else this.LoadSyncStatusUploads();\r\n }\r\n\r\n OnNavigate(e: any, syncStatusUpload: SyncStatusUploadGroupedView) {\r\n this.Navigate(['pages/sync-status'], { OrganizationID: syncStatusUpload.OrganizationID, UploadStatus: e }, false, true);\r\n }\r\n\r\n GetColor(e) {\r\n switch(e.data.Status) {\r\n case EnumUploadStatuses.Success: return Globals.DashboardPalette[0];\r\n case EnumUploadStatuses.DataSent: return Globals.DashboardPalette[1];\r\n case EnumUploadStatuses.Initiated: return Globals.DashboardPalette[4];\r\n case EnumUploadStatuses.NoData: return Globals.DashboardPalette[5];\r\n case EnumUploadStatuses.NotSynched: return Globals.DashboardPalette[2];\r\n case EnumUploadStatuses.BalanceMismatch: return Globals.DashboardPalette[3];\r\n case EnumUploadStatuses.Exception: return '#E84545';\r\n case EnumUploadStatuses.FileExported: return '#917700';\r\n case EnumUploadStatuses.BalanceNotExistsForDate: return '#d700b7';\r\n case EnumUploadStatuses.CompanyNotFound: return '#d78200';\r\n case EnumUploadStatuses.AccountNotFound: return '#710f68';\r\n }\r\n }\r\n\r\n GetTooltipElementID(syncStatusUpload) {\r\n return `upload-status-${syncStatusUpload.OrganizationID}`;\r\n }\r\n\r\n ToggleTooltipVisible(syncStatusUpload) {\r\n this.State.VisibleTooltips[syncStatusUpload.OrganizationID] = !this.State.VisibleTooltips[syncStatusUpload.OrganizationID];\r\n }\r\n\r\n OnTabItemClick(e) {\r\n if (this.State.CurrentTabIndex !== e.itemIndex) { \r\n this.State.CurrentTabIndex = e.itemIndex; \r\n this.LoadSyncStatusUploads();\r\n }\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n const settings = new ToolbarSettings;\r\n settings.IsAllowFilter = true;\r\n\r\n return settings;\r\n }\r\n\r\n override OnApplyFilter() {\r\n this.LoadSyncStatusUploads();\r\n }\r\n\r\n override OnClearFilter() {\r\n this.InitState();\r\n this.LoadSyncStatusUploads();\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
{{syncStatusUpload.LastUploadDate | formatDate}}
\\r\\n
{{syncStatusUpload.OrganizationName}}
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n {{'msgUploadStatusError' | 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
\";","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 { EnumPageDisplayModes, EnumPageEntitySources } from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\nexport class ShowTransactionsByState extends BaseState {\r\n Reference = false;\r\n Notes1 = false;\r\n Notes2 = false;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-show-transactions-by-dialog',\r\n templateUrl: './show-transactions-by-dialog.component.html',\r\n styleUrls: ['./show-transactions-by-dialog.component.scss']\r\n})\r\nexport class ShowTransactionsByDialogComponent extends BasePageComponent {\r\n @Input() EnableNotes1 = true;\r\n @Input() EnableNotes2 = true;\r\n @Input() EnableReferene = true;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, \r\n 'ShowTransactionsByDialog', \r\n BaseEntity, \r\n ShowTransactionsByState, \r\n EnumPageDisplayModes.Dialog, \r\n EnumPageEntitySources.External);\r\n }\r\n}","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\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, ViewChild } from '@angular/core';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { TransactionGroupViewDialogComponent } from '../transaction-drill-view/transaction-group-view-dialog.component';\r\nimport { MessageBoxDialogComponent } from '@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\nimport { EnumCRUDActions, EnumMessageBoxTypes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ContextMenuElement, MessageBoxCustomButton } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { ChequeListDialogComponent } from '../../dialogs/cheque-dialog/list/cheque-list-dialog.component';\r\nimport { TransactionCategoryEndpoint } from '../../_proxy/endpoints/transactioncategory.endpoint';\r\nimport { ListTransactionCategoriesParams } from '../../_proxy/params/listtransactioncategories.param';\r\nimport { TransactionCategory } from '../../_proxy/entities/transactioncategory.entity';\r\nimport { Subscription } from 'rxjs';\r\nimport { Globals } from '../../_globals';\r\nimport { Transaction } from '@kraken/_proxy/entities/transaction.entity';\r\nimport { EnumBookingAccountSubtypes, EnumSide } from '@kraken/_proxy/enums';\r\nimport { BookingAccountEndpoint } from '@kraken/_proxy/endpoints/bookingaccount.endpoint';\r\nimport { formatDate, formatNumber } from 'devextreme/localization';\r\nimport { AccessService } from '@kraken/services/access.service';\r\nimport { TransactionView } from '@kraken/_proxy/views/transaction.view';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { CellPreparedEvent } from 'devextreme/ui/data_grid';\r\nimport { debounce } from 'lodash';\r\nimport { \r\n ShowTransactionsByDialogComponent, ShowTransactionsByState \r\n} from './show-transactions-by-dialog/show-transactions-by-dialog.component';\r\n\r\nclass State extends BaseState {\r\n OrganizationID: number;\r\n\r\n IsFlatMode = false;\r\n IsWindowMode: boolean;\r\n HiddenColumns: string[];\r\n\r\n TransactionCategories: TransactionCategory[];\r\n CategoryGroupIndex: number;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-transaction-report-grid',\r\n templateUrl: './transaction-report-grid.component.html',\r\n styleUrls: ['./transaction-report-grid.component.scss']\r\n})\r\nexport class TransactionReportGridComponent extends BaseGridComponent {\r\n private organizationSubscription: Subscription;\r\n\r\n @ViewChild('chequeListDialog') chequeDialog: ChequeListDialogComponent;\r\n @ViewChild('groupDialog', { static: false }) groupDialog: TransactionGroupViewDialogComponent;\r\n @Input() AutoExpandAll: boolean;\r\n @Input() SortOrder: string = 'desc';\r\n @Input() IsWindowMode: boolean;\r\n @Input() EnableSearch = true;\r\n @Input() EnableCustomization: boolean = true;\r\n @Input() EnableGroupPanel = true;\r\n @Input() SortingMode = 'none';\r\n @Input() IsLoading: boolean = false;\r\n @Input() IsInBalanceReport: boolean = false;\r\n @ViewChild('messageBoxRecurring') messageBoxRecurringDialog: MessageBoxDialogComponent;\r\n @ViewChild(ShowTransactionsByDialogComponent) showTransactionsByDialog: ShowTransactionsByDialogComponent;\r\n EnumMessageBoxTypes = EnumMessageBoxTypes;\r\n\r\n @Input() set OrganizationID(value: number) {\r\n if (value && value !== this.State.OrganizationID) {\r\n this.State.OrganizationID = value;\r\n this.LoadTransactionCategories(value);\r\n }\r\n }\r\n\r\n @Input() set HiddenColumns(value: string[]) {\r\n this.State.HiddenColumns = value;\r\n\r\n this.UpdateColumnsVisibility();\r\n }\r\n @Input() set IsFlatMode(value: boolean) {\r\n this.State.IsFlatMode = value;\r\n\r\n this.UpdateColumnsVisibility();\r\n }\r\n @Input() StorageKey = 'TransactionReportGridComponent.Grid.State';\r\n\r\n @Output() OnRowHoverChanged = new EventEmitter();\r\n\r\n constructor(\r\n A: ServiceBagService,\r\n public screenService: ScreenService,\r\n private transactionCategoryEndpoint: TransactionCategoryEndpoint,\r\n private bookingAccountEndpoint: BookingAccountEndpoint,\r\n private accessService: AccessService\r\n ) {\r\n super(A, 'TransactionReportGridComponent', Transaction, State);\r\n this.BindHandler('OnCalculateSummary');\r\n this.BindHandler('OnGoToCheques');\r\n this.BindHandler('IsHasCheques');\r\n this.BindHandler('OnShowByNotes1');\r\n }\r\n\r\n protected override OnInitComponent(): void {\r\n if (Globals.OrganizationID) {\r\n this.LoadTransactionCategories(Globals.OrganizationID);\r\n }\r\n }\r\n\r\n protected override OnDestroyComponent(): void {\r\n if (this.organizationSubscription) {\r\n this.organizationSubscription.unsubscribe();\r\n }\r\n }\r\n\r\n override OnExternalEntitySaved(\r\n ExternalEntity: BaseEntity,\r\n ExternalEntityType: new () => BaseEntity,\r\n ExternalEntityAction: EnumCRUDActions\r\n ): void {\r\n if (ExternalEntityType === Transaction) {\r\n this.LoadTransactionCategories(Globals.OrganizationID);\r\n }\r\n }\r\n\r\n override OnInitComponentFinished() {\r\n super.OnInitComponentFinished();\r\n this._SubscribeGridEvents();\r\n }\r\n\r\n CalculateCategoryDisplayValue = rowData => {\r\n return rowData.TransactionCategoryName ?? this.RC('lblUnknown');\r\n };\r\n\r\n OnShowByNotes1(e: any) {\r\n if (!e?.row?.data) return;\r\n\r\n const onShowTransactionsDialogComplete = (result : ShowTransactionsByState) => {\r\n const map = new Map();\r\n\r\n for (const key of Object.keys(result)) {\r\n const value = result[key];\r\n\r\n if(value) {\r\n map.set(key, e.row.data[key]);\r\n }\r\n }\r\n\r\n if(map.size == 0) {\r\n return;\r\n }\r\n\r\n const transaction = e?.row?.data;\r\n this.groupDialog.Transaction = transaction;\r\n this.groupDialog.AccountName = e?.row?.data.AccountName;\r\n\r\n this.groupDialog.Fields = map;\r\n\r\n this.groupDialog.Side = Number.isFinite(transaction.Credit)\r\n ? EnumSide.Income\r\n : EnumSide.Expense;\r\n this.groupDialog.ShowDialogShort(({ Amount, Side }) => {\r\n this.GoToAddRecurringForecast(transaction, { Amount, Side });\r\n });\r\n };\r\n\r\n this.showTransactionsByDialog.EnableNotes1 = !!e.row.data.Notes1;\r\n this.showTransactionsByDialog.EnableNotes2 = !!e.row.data.Notes2;\r\n this.showTransactionsByDialog.EnableReferene = !!e.row.data.Reference;\r\n\r\n // check if only one field is populated\r\n if((+this.showTransactionsByDialog.EnableNotes1) + \r\n (+this.showTransactionsByDialog.EnableNotes2) + \r\n (+this.showTransactionsByDialog.EnableReferene) === 1) {\r\n\r\n const showTransactionsBy = new ShowTransactionsByState();\r\n showTransactionsBy.Notes1 = this.showTransactionsByDialog.EnableNotes1;\r\n showTransactionsBy.Notes2 = this.showTransactionsByDialog.EnableNotes2;\r\n showTransactionsBy.Reference = this.showTransactionsByDialog.EnableReferene;\r\n \r\n onShowTransactionsDialogComplete(showTransactionsBy);\r\n return;\r\n }\r\n\r\n this.showTransactionsByDialog.ShowDialogShort(onShowTransactionsDialogComplete);\r\n }\r\n\r\n GoToAddRecurringForecast(transaction: TransactionView, { Amount, Side }) {\r\n const { BookingAccountID, CompanyID, AccountID, Notes1 } = transaction;\r\n const params = {\r\n BookingAccountID: BookingAccountID,\r\n Side,\r\n Notes1,\r\n Credit: Side == EnumSide.Income && Amount,\r\n Debit: Side == EnumSide.Expense && Amount,\r\n CompanyID,\r\n AccountID\r\n };\r\n\r\n this.Navigate(['/pages/recurring-forecast/new'], params, true);\r\n }\r\n\r\n private UpdateColumnsVisibility() {\r\n if (this.grid && this.grid.instance) {\r\n if (this.State.HiddenColumns) {\r\n this.State.HiddenColumns.forEach((name: string) => {\r\n this.G.SetColumnVisibility(name, false);\r\n });\r\n }\r\n }\r\n }\r\n\r\n OnInitialized(e) {\r\n e.component.columnOption('command:adaptive', 'visible', true);\r\n e.component.option('scrolling.timeout', 0);\r\n this.UpdateColumnsVisibility();\r\n }\r\n\r\n OnCalculateSummary(e) {\r\n if (e.name == 'BookingAccountSubType' && e.summaryProcess == 'calculate')\r\n e.totalValue = (this.LISTITEMX('BookingAccountSubTypes', e.value) as any)?.SortOrder;\r\n if (e.name == 'BookingAccountName' && e.summaryProcess == 'calculate')\r\n e.totalValue = (\r\n this.LIST('Currencies').find(\r\n item =>\r\n item.Text ==\r\n e.value.substring(e.value.indexOf('[') + 1, e.value.indexOf(']'))\r\n ) as any\r\n )?.SortOrder;\r\n\r\n if(e.name == 'Credit' || e.name == 'Debit') {\r\n if (e.summaryProcess === 'start') {\r\n e.totalValue = 0;\r\n e.currencies = new Set();\r\n } else if (e.summaryProcess === 'calculate') {\r\n e.totalValue += e.value[e.name] ?? 0;\r\n e.currencies.add(e.value.Currency);\r\n } else if (e.summaryProcess === 'finalize') {\r\n e.totalValue = e.currencies.size == 1 ? formatNumber(e.totalValue, this.F.NumberSum) : '';\r\n }\r\n }\r\n }\r\n\r\n OnCellHoverChanged(e) {\r\n const currentLevelCaption =\r\n e.eventType === 'mouseout' ? '' : this.GetCurrentLevelCaption(e);\r\n this.OnRowHoverChanged.emit(currentLevelCaption);\r\n }\r\n\r\n OnGoToCheques(e) {\r\n const row = e?.row?.data;\r\n if (!row) return;\r\n\r\n this.chequeDialog.TransactionID = e.row.data.EntryID;\r\n this.chequeDialog.ShowDialogShort(e => { });\r\n }\r\n\r\n GetCurrentLevelCaption(e) {\r\n switch (e.rowType) {\r\n case 'data':\r\n return e.data && e.data.AccountName\r\n ? `${e.data.AccountName} > ${e.data.BookingAccountName}`\r\n : '';\r\n case 'group':\r\n return e.values && e.values.length !== 0\r\n ? e.values.slice(0, e.values.length - 1).join(' > ')\r\n : '';\r\n default:\r\n return '';\r\n }\r\n }\r\n\r\n GetAccountGroupIndex() {\r\n return this.State.IsFlatMode ? undefined : !this.IsWindowMode ? 0 : undefined;\r\n }\r\n\r\n GetBookingAccountGroupIndex() {\r\n return this.State.IsFlatMode ? undefined : !this.IsWindowMode ? 1 : undefined;\r\n }\r\n\r\n IsHasCheques(e) {\r\n return e?.row?.data?.IsChequesExist;\r\n }\r\n\r\n //get GetCreateLoanIcon() {\r\n // return this.screenService.IsRTL() ? 'mdi mdi-clipboard-arrow-left-outline' : 'mdi mdi-clipboard-arrow-right-outline';\r\n //}\r\n\r\n OnGoToAccount = e => {\r\n const row = e?.row?.data;\r\n if (!row) return;\r\n\r\n const { AccountID, BookingAccountSubtype, CompanyID } = row;\r\n\r\n this.Navigate(\r\n ['/pages/account', AccountID],\r\n {\r\n AccountID: AccountID,\r\n BookingAccountSubtype: BookingAccountSubtype,\r\n CompanyID: CompanyID\r\n },\r\n true,\r\n true\r\n );\r\n };\r\n\r\n OnGoToCreateLoan = e => {\r\n const row = e?.row?.data;\r\n if (!row) return;\r\n\r\n const { Date, Credit, Debit, Reference, BookingAccountID, AccountID, CompanyID, Currency } =\r\n row;\r\n\r\n this.Do(\r\n this.bookingAccountEndpoint.GetBookingAccounts(\r\n AccountID,\r\n EnumBookingAccountSubtypes.Loans\r\n ),\r\n false,\r\n response => {\r\n const bookingAccount = response.Entities.find(item => item.Currency === Currency);\r\n\r\n this.Navigate(\r\n ['/pages/loan/new'],\r\n {\r\n CompanyID: CompanyID,\r\n AccountID: AccountID,\r\n BookingAccountID: bookingAccount?.EntryID,\r\n StartDate: Date,\r\n Amount: Credit ?? Debit,\r\n BankReferenceNumber: Reference\r\n },\r\n true,\r\n true\r\n );\r\n }\r\n );\r\n };\r\n\r\n private OnReconcile(e) {\r\n const row = e?.row?.data;\r\n if (!row) return;\r\n const { BookingAccountID, EntryID, Debit, CompanyID, Date } = row as TransactionView;\r\n\r\n this.Navigate(\r\n ['/pages/reconciliation-form'],\r\n {\r\n TransactionID: EntryID,\r\n BookingAccountID,\r\n CompanyID,\r\n Date,\r\n IsExpense: Debit > 0\r\n },\r\n true,\r\n true\r\n );\r\n }\r\n\r\n private OnGoToReconciliations(e) {\r\n const row = e?.row?.data;\r\n if (!row) return;\r\n\r\n const { BookingAccountID, ReconciliationID } = row as TransactionView;\r\n\r\n this.Navigate(\r\n ['/pages/reconciliation'],\r\n {\r\n BookingAccountID,\r\n ReconciliationID\r\n },\r\n true,\r\n true\r\n );\r\n }\r\n\r\n private LoadTransactionCategories(organizationID: number) {\r\n const params = new ListTransactionCategoriesParams();\r\n params.OrganizationID = organizationID;\r\n params.LoadGlobal = true;\r\n params.LoadActive = true;\r\n\r\n this.Do(this.transactionCategoryEndpoint.ListCategories(params, null), false, response => {\r\n this.State.TransactionCategories = response.Entities;\r\n });\r\n }\r\n\r\n protected override GetGridRowContextMenu(options?: any): ContextMenuElement[] {\r\n if (!this.accessService.IsAllowLoans() && !this.accessService.IsAllowSettings()) return [];\r\n const items = [\r\n {\r\n text: this.RC('btnCreateLoan'),\r\n visible: this.accessService.IsAllowLoans(),\r\n onClick: () => this.OnGoToCreateLoan(options)\r\n },\r\n {\r\n text: this.RC('btnGoToAccount'),\r\n visible: this.accessService.IsAllowSettings(),\r\n onClick: () => this.OnGoToAccount(options)\r\n }\r\n ] as any[];\r\n\r\n if (options?.row.data.ReconciliationID) {\r\n items.push({\r\n text: this.RC('btnGoToReconciliation'),\r\n onClick: () => this.OnGoToReconciliations(options)\r\n });\r\n }\r\n\r\n if (options?.row.data.IsActiveCashflow && !options.row.data.ReconciliationID) {\r\n items.push({\r\n text: this.RC('lblReconcile'),\r\n onClick: () => this.OnReconcile(options)\r\n });\r\n }\r\n\r\n if (options?.row.data.IsActiveCashflow && this.accessService.IsAllowCashflow()) {\r\n const getParams = row => {\r\n if (!row) return {};\r\n\r\n const { Date, BookingAccountID, CompanyID, AccountID, Debit, Credit } =\r\n row.data as TransactionView;\r\n\r\n return {\r\n AccountID,\r\n CompanyID,\r\n OrganizationID: Globals.OrganizationID,\r\n BookingAccountID,\r\n StartDate: `${Date.getFullYear()}-${Date.getMonth() + 1}-${Date.getDate()}`,\r\n Date: `${Date.getFullYear()}-${Date.getMonth() + 1}-${Date.getDate()}`,\r\n Debit,\r\n Credit,\r\n Side: Debit > 0 ? EnumSide.Expense : EnumSide.Income\r\n };\r\n };\r\n\r\n //new expense menu item\r\n items.push({\r\n text: this.RC('btnCreateForecast'),\r\n onClick: () => null,\r\n items: [\r\n {\r\n text: this.RC('lblOneTime'),\r\n onClick: () =>\r\n this.Navigate(\r\n ['/pages/forecast-operation/new'],\r\n getParams(options?.row)\r\n )\r\n },\r\n {\r\n text: this.RC('lblRecurring'),\r\n onClick: () =>\r\n this.Navigate(\r\n ['/pages/recurring-forecast/new'],\r\n getParams(options?.row)\r\n )\r\n }\r\n ]\r\n });\r\n }\r\n\r\n return items;\r\n }\r\n\r\n customHighlightCellTemplate(cellEl, data) {\r\n const { component, displayValue, column } = data;\r\n if (displayValue === null || displayValue === undefined) return;\r\n\r\n const searchText = component.option('searchPanel.text');\r\n const value = column.format ? formatNumber(+displayValue, column.format) : displayValue;\r\n\r\n if (!searchText) {\r\n cellEl.innerHTML = value ?? '';\r\n return;\r\n }\r\n\r\n const regExp = searchText.split('').join(',?');\r\n\r\n cellEl.innerHTML = value.replace(new RegExp(regExp), m =>\r\n m ? `${m}` : ''\r\n );\r\n }\r\n\r\n OnToolbarPreparing = (e) => {\r\n e.toolbarOptions.items.unshift({\r\n location: 'after',\r\n widget: 'dxButton',\r\n isCustom: true,\r\n options: {\r\n icon: 'refresh',\r\n onClick: () => {\r\n if (!Array.isArray(this.DataSource)) {\r\n this.DataSource.Reload();\r\n }\r\n }\r\n }\r\n });\r\n };\r\n\r\n OnCellPrepared(event: CellPreparedEvent) {\r\n const { rowType, row, cellElement, column } = event;\r\n if (rowType === 'group' && row.groupIndex === this.State.CategoryGroupIndex) {\r\n const items: TransactionView[] = row.data.items ?? row.data.collapsedItems ?? [];\r\n const isOnlyCredit = items.every(x => x.Credit);\r\n const isOnlyDebit = items.every(x => x.Debit);\r\n const bookingAccountId = items[0].BookingAccountID;\r\n const isSameBookingAccount = items.every(x => x.BookingAccountID === bookingAccountId);\r\n const hasCategory = items[0].TransactionCategoryName;\r\n const isActiveCashflow = items[0].IsActiveCashflow;\r\n const isCurrent = items[0].BookingAccountSubtype === EnumBookingAccountSubtypes.Current;\r\n\r\n if ((isOnlyCredit || isOnlyDebit) && isSameBookingAccount && isActiveCashflow && hasCategory && isCurrent) {\r\n const date = items.reduce((a, b) => a.Date > b.Date ? a : b).Date;\r\n const navigationParams = {\r\n AccountID: items[0].AccountID,\r\n CompanyID: items[0].CompanyID,\r\n OrganizationID: Globals.OrganizationID,\r\n BookingAccountID: bookingAccountId,\r\n StartDate: `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`,\r\n Date: `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`,\r\n Debit: items.reduce((accumulator, currentValue) => accumulator + currentValue.Debit, 0),\r\n Credit: items.reduce((accumulator, currentValue) => accumulator + currentValue.Credit, 0),\r\n Side: isOnlyCredit ? EnumSide.Income : EnumSide.Expense,\r\n TransactionCategoryName: items[0].TransactionCategoryName\r\n };\r\n if (column.type === 'buttons' && column.name == 'gridRowContextMenu') {\r\n const btn = document.createElement('i');\r\n btn.className = 'dx-link dx-icon mdi mdi-book-clock-outline';\r\n btn.title = this.RC('createRecurringForecast');\r\n cellElement.append(btn);\r\n btn.addEventListener('click', (e) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n this.Navigate(['/pages/recurring-forecast/new'], navigationParams);\r\n });\r\n } else if (column.cssClass?.trim() === 'fixed-column') {\r\n const btn = document.createElement('i');\r\n btn.className = 'dx-link dx-icon mdi mdi-book-check-outline';\r\n btn.title = this.RC('btnCreateForecast');\r\n cellElement.append(btn);\r\n btn.addEventListener('click', (e) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n this.Navigate(['/pages/forecast-operation/new'], navigationParams);\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n GetGroupedColumns() {\r\n const cols = this.gridAny.instance.getVisibleColumns()\r\n .filter(c => c.groupIndex !== undefined).sort((a, b) => a.groupIndex - b.groupIndex);\r\n const lastCol = cols.at(-1);\r\n\r\n if (lastCol?.dataField === 'TransactionCategoryName') {\r\n this.State.CategoryGroupIndex = lastCol.groupIndex;\r\n } else {\r\n this.State.CategoryGroupIndex = -1;\r\n }\r\n }\r\n\r\n private _SubscribeGridEvents() {\r\n if (!this.gridAny) return;\r\n\r\n const debouncedFn = debounce(() => this.GetGroupedColumns(), 400);\r\n\r\n this.gridAny.onContentReady.subscribe(() => debouncedFn());\r\n this.gridAny.onOptionChanged.subscribe((e) => {\r\n if (e.fullName.endsWith('.groupIndex')) {\r\n debouncedFn();\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 {{data.displayValue}}\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\";","\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { ChequeImage } from './../entities/chequeimage.entity';\r\n@Injectable()\r\nexport class ChequeImageEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(api: APIGatewayService) {super(\"ChequeImage\", api);}\r\n\t\r\n\r\n public ListEx(TransactionID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'ListEx', {TransactionID: TransactionID} );\r\n }\r\n}\r\n\r\n","import { Transaction } from '@kraken/_proxy/entities/transaction.entity';\r\nimport { Component, ViewChild } from \"@angular/core\";\r\nimport { ServiceBagServices, ServiceBagService } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { DataSourceCustomAction } from \"@m4u-angular/base/datalayer/BaseDataSources\";\r\nimport { TransactionReportParams } from \"@kraken/_proxy/params/transactionreport.param\";\r\nimport { TransactionEndpoint } from \"@kraken/_proxy/endpoints/transaction.endpoint\";\r\nimport { Globals } from \"@kraken/_globals\";\r\nimport { TransactionReportGridComponent } from \"./transaction-report-grid.component\";\r\nimport { FilterSettings } from \"@kraken/components/filter/filter.component\";\r\nimport { BaseReportComponent, BaseReportState } from '../base-report/base-report.component';\r\nimport { EnumPageDisplayModes } from \"@m4u-angular/core/framework/sysenums.enum\";\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { QuickFilterComponent, QuickFilterSettings } from '@kraken/components/quick-filter/quick-filter.component';\r\nimport { EnumBookingAccountSubtypes } from '@kraken/_proxy/enums';\r\nimport { ChequeImageEndpoint } from '@kraken/_proxy/endpoints/chequeimage.endpoint';\r\nimport { ImageBoxDialogComponent } from '@m4u-angular/ui/dialogs/imagebox-dialog/imageboxdialog.component';\r\nimport { LocalStorageService } from '@m4u-angular/core/framework/local-storage.service';\r\n\r\nclass State extends BaseReportState {\r\n SortOrder = 'desc';\r\n CurrentLevelCaption: string;\r\n GridCaption: string;\r\n BankChargeDateFrom: Date;\r\n BankChargeDateTo: Date;\r\n IsDebitOnly: boolean;\r\n IsCreditOnly: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-transaction-report',\r\n templateUrl: './transaction-report.component.html',\r\n styleUrls: ['./transaction-report.component.scss']\r\n})\r\nexport class TransactionReportComponent extends BaseReportComponent\r\n{\r\n @ViewChild('reportGrid') reportGrid: TransactionReportGridComponent;\r\n @ViewChild('quickFilter') quickfilterComponent: QuickFilterComponent;\r\n @ViewChild(ImageBoxDialogComponent) chequeViewDialog: ImageBoxDialogComponent;\r\n\r\n constructor(A: ServiceBagService, \r\n private transactionEndpoint: TransactionEndpoint,\r\n private localStorageService: LocalStorageService,\r\n private chequeImageEndpoint: ChequeImageEndpoint) {\r\n super(A, 'TransactionReportComponent', State);\r\n }\r\n\r\n protected override OnGetCustomFilterSettings() {\r\n return {\r\n Company: { IsVisible: true, IsMultiple: true },\r\n Account: { IsVisible: true, IsMultiple: true, Params: { BookingAccountSubtypes: [EnumBookingAccountSubtypes.Current, EnumBookingAccountSubtypes.CreditCard] } },\r\n BookingAccount: { IsVisible: true, IsMultiple: true, Params: { BookingAccountSubtypes: [EnumBookingAccountSubtypes.Current, EnumBookingAccountSubtypes.CreditCard] } },\r\n Bank: { IsVisible: true, IsMultiple: true },\r\n BookingAccountSubtype: { IsVisible: true, IsMultiple: true },\r\n CurrencyFilter: { IsVisible: true, IsMultiple: true },\r\n AccountGroup: { IsVisible: true, IsMultiple: true },\r\n Category: { IsVisible: true, IsMultiple: true },\r\n\r\n IsDatesVisible: true,\r\n IsAmountsVisible: true,\r\n MaxReportDate: Globals.Yesterday,\r\n IsTransactionBookingAccountsSubtypes: true\r\n } as FilterSettings;\r\n }\r\n\r\n protected override OnGetCustomQuickFilterSettings(): QuickFilterSettings {\r\n return {\r\n Company: { IsVisible: true, IsMultiple: true },\r\n Account: { IsVisible: true, IsMultiple: true, Params: { BookingAccountSubtypes: [EnumBookingAccountSubtypes.Current, EnumBookingAccountSubtypes.CreditCard] } },\r\n BookingAccount: { IsVisible: true, IsMultiple: true, Params: { BookingAccountSubtypes: [EnumBookingAccountSubtypes.Current, EnumBookingAccountSubtypes.CreditCard] } },\r\n\r\n IsDatesVisible: true\r\n } as QuickFilterSettings;\r\n }\r\n override OnInitState() {\r\n this.OnResetFilterValues();\r\n this.InitStateFromQuery();\r\n }\r\n protected override OnResetFilterValues() {\r\n super.OnResetFilterValues();\r\n this.State.FilterValues.DateFrom = Globals.ThirtyDaysAgoDate;\r\n this.State.FilterValues.DateTo = Globals.Yesterday;\r\n }\r\n\r\n protected override OnLoadData() {\r\n if (!this.State.FilterValues.OrganizationID) {\r\n this.DataSources['Transactions'] = undefined;\r\n return;\r\n }\r\n this.State.IsLoading = true;\r\n const params = this.GetParams();\r\n params.BankChargeDateFrom = this.State.BankChargeDateFrom;\r\n params.BankChargeDateTo = this.State.BankChargeDateTo;\r\n params.IsDebitOnly = this.State.IsDebitOnly;\r\n params.IsCreditOnly = this.State.IsCreditOnly;\r\n this.DataSources['Transactions'] = new DataSourceCustomAction(() => this.transactionEndpoint.ListEx(params), undefined, (data) => {\r\n this.State.GridCaption = this.reportGrid.GetCurrentLevelCaption(data && data.length && data[0]);\r\n this.NotifyReloadTitle();\r\n this.State.IsLoading = false;\r\n // if single BookingAccount then expand all groupings\r\n if (data.map(item => item.BookingAccountID).filter((value, index, self) => self.indexOf(value) === index).length === 1) {\r\n setTimeout(() => { this.reportGrid.G.grid.instance.expandAll(); });\r\n }\r\n }, false);\r\n }\r\n\r\n override GetTitle() {\r\n const defaultTitle = this.GetDefaultTitle();\r\n const customTitle = this.IsWindowMode() ? this.State.GridCaption : this.State.CurrentLevelCaption;\r\n return customTitle ? `${defaultTitle} - ${customTitle}` : defaultTitle;\r\n }\r\n\r\n override OnInitComponentFinished() {\r\n if (Object.entries(this.QueryParams).length >= 0) this.G && this.G.grid.instance.clearFilter();\r\n this.InitSortOrder();\r\n\r\n if (this.QueryParams.Action === 'ChequeAutoOpen') {\r\n this.OpenCheque(this.QueryParams.TransactionID);\r\n }\r\n }\r\n\r\n override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions): void {\r\n if (ExternalEntityType === Transaction) { this.OnApplyFilter(); }\r\n }\r\n\r\n InitSortOrder() {\r\n const sortOrder = this.localStorageService.GetItem(this.GetSortOrderSettingName());\r\n if (!!sortOrder) this.State.SortOrder = sortOrder;\r\n }\r\n\r\n OnSwitchSortOrder() {\r\n this.State.SortOrder = this.State.SortOrder == \"asc\" ? \"desc\" : \"asc\";\r\n this.localStorageService.SetItem(this.GetSortOrderSettingName(), this.State.SortOrder);\r\n }\r\n\r\n ChangeCurrentLevelCaption(e) {\r\n this.State.CurrentLevelCaption = e;\r\n this.NotifyReloadTitle();\r\n this.DetectChanges();\r\n }\r\n\r\n GetSortOrderSettingName() {\r\n return `${this.ComponentName}.ViewSelector.SortOrder`;\r\n }\r\n\r\n override InitStateFromQuery() {\r\n super.InitStateFromQuery();\r\n\r\n if (Object.entries(this.QueryParams).length <= 0) { return; }\r\n const isWindow = Object.keys(this.QueryParams)[0].startsWith('W_');\r\n this.QueryParams = this.A.Navigator.GetQueryParams(isWindow);\r\n this.DisplayMode = isWindow ? EnumPageDisplayModes.Window : EnumPageDisplayModes.FullScreen;\r\n\r\n const { Companies, AccountID, BookingAccountID, Categories } = this.QueryParams;\r\n\r\n if (this.QueryParams.OrganizationID) {\r\n this.State.FilterValues.OrganizationID = +this.QueryParams.OrganizationID;\r\n }\r\n const { DateFrom, DateTo } = this.QueryParams;\r\n\r\n if (this.QueryParams.BankChargeDateFrom) {\r\n this.State.BankChargeDateFrom = new Date(this.QueryParams.BankChargeDateFrom);\r\n\r\n if (!DateFrom) this.State.FilterValues.DateFrom = undefined;\r\n if (!DateTo) this.State.FilterValues.DateTo = undefined;\r\n }\r\n\r\n if (DateFrom) {\r\n this.State.FilterValues.DateFrom = new Date(DateFrom);\r\n }\r\n\r\n if (DateTo) {\r\n this.State.FilterValues.DateTo = new Date(DateTo);\r\n }\r\n\r\n if (this.QueryParams.BankChargeDateTo) {\r\n this.State.BankChargeDateTo = new Date(this.QueryParams.BankChargeDateTo);\r\n }\r\n\r\n if (Companies) {\r\n this.State.FilterValues.Company = typeof Companies === 'string' ? [+Companies] : Companies;\r\n }\r\n\r\n if (Categories) {\r\n this.State.FilterValues.Category = typeof Categories === 'string' ? [Categories] : Categories;\r\n }\r\n\r\n if (AccountID) {\r\n this.State.FilterValues.Account = typeof AccountID === 'string' ? [AccountID] : AccountID;\r\n }\r\n\r\n if (BookingAccountID) {\r\n this.State.FilterValues.BookingAccount = typeof BookingAccountID === 'string' ? [BookingAccountID] : BookingAccountID;\r\n }\r\n\r\n if (this.QueryParams.IsDebitOnly) this.State.IsDebitOnly = this.QueryParams.IsDebitOnly;\r\n if (this.QueryParams.IsCreditOnly) this.State.IsCreditOnly = this.QueryParams.IsCreditOnly;\r\n }\r\n\r\n OpenCheque(TransactionID: number) {\r\n this.reportGrid.chequeDialog.TransactionID = TransactionID;\r\n this.reportGrid.chequeDialog.ShowDialogShort((e) => { });\r\n }\r\n\r\n override OnReadyFilter() {\r\n const { Category } = this.State.FilterValues;\r\n if (Array.isArray(Category)) {\r\n this.State.FilterValues.Category = Category.map(Number);\r\n }\r\n super.OnReadyFilter();\r\n }\r\n\r\n protected override OnClearFilter(): void {\r\n super.OnClearFilter();\r\n this.State.IsDebitOnly = false;\r\n this.State.IsCreditOnly = false;\r\n }\r\n\r\n OnIsDebitCreditChanged(e: any, checkbox: string) {\r\n if(!this.IsUIEvent(e)) {\r\n return;\r\n }\r\n\r\n const bothChecked = this.State.IsCreditOnly && this.State.IsDebitOnly;\r\n\r\n if(!bothChecked) {\r\n return;\r\n }\r\n\r\n if (checkbox === 'debit') {\r\n this.State.IsCreditOnly = false;\r\n } else if (checkbox === 'credit') {\r\n this.State.IsDebitOnly = 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\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumUploadStatuses } from './../enums';\r\nexport class BaseUpload extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'BaseUpload';\r\n }\r\n \r\n public BatchID: number; \r\n public StartDate: Date; \r\n public EndDate: Date; \r\n public Status: EnumUploadStatuses; \r\n public Exception: 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 { BaseUpload } from './../entities/baseupload.entity';\r\nimport { EnumUploadType } from './../enums';\r\nimport { User } from './../entities/user.entity';\r\nimport { Admin } from './../entities/admin.entity';\r\nexport class Upload extends BaseUpload {\r\n constructor() {\r\n super();\r\n this.TypeName = 'Upload';\r\n }\r\n \r\n public BookingAccountID: number; \r\n public ClosingDate: Date; \r\n public ClosingBalance: number; \r\n public ClosingTransactionsCount: number; \r\n public RangeStartDate: Date; \r\n public RangeEndDate: Date; \r\n public CurrentUserID: number; \r\n public UploadType: EnumUploadType; \r\n public User: User = new User; \r\n public Admin: Admin = new Admin; \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 { Upload } from './../entities/upload.entity';\r\nimport { BaseUpload } from './../entities/baseupload.entity';\r\nimport { EnumBankGroups } from './../enums';\r\nimport { EnumBookingAccountSubtypes } from './../enums';\r\nimport { EnumExportTransactionsMethod } from './../enums';\r\nexport class UploadView extends Upload {\r\n constructor() {\r\n super();\r\n this.TypeName = 'UploadView';\r\n }\r\n \r\n public OrganizationName: string; \r\n public DeploymentName: string; \r\n public CompanyID: number; \r\n public CompanyName: string; \r\n public AccountID: number; \r\n public AccountName: string; \r\n public BankGroup: EnumBankGroups; \r\n public BookingAccountSubtype: EnumBookingAccountSubtypes; \r\n public BookingAccountName: string; \r\n public Duration: number; \r\n public TransactionsCount: number; \r\n public ExportedFileData: string; \r\n public ExportedFileName: string; \r\n public ExportedFileExtension: string; \r\n public ExportMethod: EnumExportTransactionsMethod; \r\n public DateFrom: Date; \r\n public DateTo: Date; \r\n public UserName: string; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { Component } from '@angular/core';\r\nimport { EnumUploadType } from '@kraken/_proxy/enums';\r\nimport { UploadView } from '@kraken/_proxy/views/upload.view';\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 } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-upload-history-grid',\r\n templateUrl: './upload-history-grid.component.html',\r\n styles: [` \r\n .grid-detail-item {\r\n padding: 6px 12px;\r\n }\r\n `]\r\n})\r\nexport class UploadHistoryGridComponent extends BaseGridComponent {\r\n constructor(A: ServiceBagService) {\r\n super(A, 'UploadHistoryGridComponent', UploadView, BaseState);\r\n this.BindHandler('OnGoToBookingAccount');\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 OnCellPrepared(cell: any) {\r\n if (cell.rowType === 'data' && cell.column.command === 'expand' && (!cell.data || !cell.data.Exception)) {\r\n if (!cell.cellElement || !cell.cellElement.childNodes.length) return;\r\n\r\n cell.cellElement.classList.remove('dx-datagrid-expand');\r\n cell.cellElement.childNodes[0].classList.remove('dx-datagrid-group-closed');\r\n }\r\n }\r\n\r\n OnGoToBookingAccount(e) {\r\n const row = e?.row?.data;\r\n if (!row) return;\r\n\r\n this.Navigate(['pages/account', row.AccountID],\r\n { BookingAccountSubtype: row.BookingAccountSubtype, BookingAccountID: row.BookingAccountID, CompanyID: row.CompanyID },\r\n false, true);\r\n }\r\n\r\n GetStatusColor(data) {\r\n switch (data.Status) {\r\n case this.Enums.EnumUploadStatuses.Success:\r\n case this.Enums.EnumUploadStatuses.FileExported:\r\n return 'green-cyan';\r\n case this.Enums.EnumUploadStatuses.Initiated:\r\n return 'olive';\r\n case this.Enums.EnumUploadStatuses.NoData:\r\n return 'light-green';\r\n case this.Enums.EnumUploadStatuses.Exception:\r\n return 'cinnabar';\r\n case this.Enums.EnumUploadStatuses.DataSent:\r\n return 'dark-cyan';\r\n case this.Enums.EnumUploadStatuses.BalanceMismatch:\r\n return 'base-color';\r\n case this.Enums.EnumUploadStatuses.BalanceNotExistsForDate:\r\n return 'hollywood';\r\n case this.Enums.EnumUploadStatuses.CompanyNotFound:\r\n return 'mango';\r\n case this.Enums.EnumUploadStatuses.AccountNotFound:\r\n return 'atomic-tangerine';\r\n }\r\n }\r\n\r\n protected override GetGridRowContextMenu(options?: any): ContextMenuElement[] {\r\n return [{\r\n text: this.RC('titleGoToBookingAccount'),\r\n onClick: () => this.OnGoToBookingAccount(options)\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\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 { UploadView } from './../views/upload.view';\r\nimport { UploadListParams } from './../params/uploadlist.param';\r\nimport { UploadSaveAndGenerateFileParams } from './../params/uploadsaveandgeneratefile.param';\r\n@Injectable()\r\nexport class UploadEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"Upload\", api);}\r\n\t\r\n\r\n public ListEx(Params: UploadListParams, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListEx', Params, options?.GetLoadOptions() );\r\n }\r\n\r\n public SaveAndGenerateFile(Params: UploadSaveAndGenerateFileParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'SaveAndGenerateFile', Params, undefined );\r\n }\r\n}\r\n\r\n","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseParamsFilter } from './../entities/baseparamsfilter.entity';\r\nimport { EnumUploadStatuses } from './../enums';\r\nexport class UploadListParams extends BaseParamsFilter {\r\n constructor() {\r\n super();\r\n this.TypeName = 'UploadListParams';\r\n }\r\n \r\n public DateFrom: Date; \r\n public DateTo: Date; \r\n public Status: EnumUploadStatuses[]; \r\n public Deployments: number[]; \r\n public BatchID: number; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { JournalEntryUploadView } from './../views/journalentryupload.view';\r\nimport { JournalEntryUploadListParams } from './../params/journalentryuploadlist.param';\r\n@Injectable()\r\nexport class JournalEntryUploadEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(api: APIGatewayService) {super(\"JournalEntryUpload\", api);}\r\n\t\r\n\r\n public ListEx(Params: JournalEntryUploadListParams, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListEx', Params, options?.GetLoadOptions() );\r\n }\r\n}\r\n\r\n","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseParamsFilter } from './../entities/baseparamsfilter.entity';\r\nimport { EnumUploadStatuses } from './../enums';\r\nexport class JournalEntryUploadListParams extends BaseParamsFilter {\r\n constructor() {\r\n super();\r\n this.TypeName = 'JournalEntryUploadListParams';\r\n }\r\n \r\n public DateFrom: Date; \r\n public DateTo: Date; \r\n public Statuses: EnumUploadStatuses[]; \r\n public Deployments: number[]; \r\n public BatchID: 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 { BaseParamsFilter } from './../entities/baseparamsfilter.entity';\r\nimport { EnumUploadStatuses } from './../enums';\r\nexport class IncomingPaymentUploadListParams extends BaseParamsFilter {\r\n constructor() {\r\n super();\r\n this.TypeName = 'IncomingPaymentUploadListParams';\r\n }\r\n \r\n public DateFrom: Date; \r\n public DateTo: Date; \r\n public Statuses: EnumUploadStatuses[]; \r\n public Deployments: number[]; \r\n public BatchID: number; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { IncomingPaymentUploadView } from './../views/incomingpaymentupload.view';\r\nimport { IncomingPaymentUploadListParams } from './../params/incomingpaymentuploadlist.param';\r\n@Injectable()\r\nexport class IncomingPaymentUploadEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"IncomingPaymentUpload\", api);}\r\n\t\r\n\r\n public ListEx(Params: IncomingPaymentUploadListParams, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListEx', Params, options?.GetLoadOptions() );\r\n }\r\n}\r\n\r\n","import { Component, ViewChild } from \"@angular/core\";\r\nimport { ServiceBagServices, ServiceBagService } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { BaseState, BaseEntity } from \"@m4u-angular/base/entities/BaseEntities\";\r\nimport { BasePageComponent } from \"@m4u-angular/base/component/BasePageComponent\";\r\nimport { DataSourceCustomAction } from \"@m4u-angular/base/datalayer/BaseDataSources\";\r\nimport { DataLoadOptions } from \"@m4u-angular/base/datalayer/DataLoadOptions\";\r\nimport { EnumUploadStatuses, EnumBankGroups, EnumBookingAccountSubtypes, EnumDataExportType } from \"../../_proxy/enums\";\r\nimport { UploadEndpoint } from \"../../_proxy/endpoints/upload.endpoint\";\r\nimport { UploadListParams } from \"../../_proxy/params/uploadlist.param\";\r\nimport { Globals } from \"../../_globals\";\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { FilterComponent, FilterSettings, FilterValues } from '../../components/filter/filter.component';\r\nimport { JournalEntryUploadEndpoint } from \"@kraken/_proxy/endpoints/journalentryupload.endpoint\";\r\nimport { JournalEntryUploadListParams } from \"@kraken/_proxy/params/journalentryuploadlist.param\";\r\nimport { BaseGridComponent } from \"@m4u-angular/base/component/BaseGridComponent\";\r\nimport { OrganizationEndpoint } from \"@kraken/_proxy/endpoints/organization.endpoint\";\r\nimport { Organization } from \"@kraken/_proxy/entities/organization.entity\";\r\nimport { AccessService } from \"@kraken/services/access.service\";\r\nimport { DeploymentEndpoint } from \"@kraken/_proxy/endpoints/deployment.endpoint\";\r\nimport { IncomingPaymentUploadListParams } from '@kraken/_proxy/params/incomingpaymentuploadlist.param';\r\nimport { IncomingPaymentUploadEndpoint } from '@kraken/_proxy/endpoints/incomingpaymentupload.endpoint';\r\n\r\nclass State extends BaseState {\r\n FilterValues: FilterValues;\r\n FilterSettings: FilterSettings;\r\n Status: EnumUploadStatuses[];\r\n BankGroups: EnumBankGroups[];\r\n BatchID: number;\r\n CurrentTabIndex: number;\r\n Organization: Organization;\r\n Deployments: number[];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-upload-history',\r\n templateUrl: './upload-history.component.html',\r\n styleUrls: ['upload-history.component.scss']\r\n})\r\nexport class UploadHistoryComponent extends BasePageComponent\r\n{\r\n @ViewChild('filter') filter: FilterComponent;\r\n @ViewChild('grid') grid: BaseGridComponent;\r\n\r\n constructor(A: ServiceBagService,\r\n private uploadEndpoint: UploadEndpoint,\r\n private journalEntryUploadEndpoint: JournalEntryUploadEndpoint,\r\n private incomingPaymentUploadEndpoint: IncomingPaymentUploadEndpoint,\r\n private organizationEndpoint: OrganizationEndpoint,\r\n private deploymentEndpoint: DeploymentEndpoint,\r\n public accessService: AccessService) {\r\n super(A, 'UploadHistoryComponent', BaseEntity, State);\r\n }\r\n\r\n override OnInitState() {\r\n this.State.CurrentTabIndex = 0;\r\n\r\n this.State.FilterValues = {\r\n OrganizationID: Globals.OrganizationID,\r\n Company: Globals.CompanyID > 0 ? [Globals.CompanyID] : undefined\r\n } as FilterValues;\r\n this.State.Status = undefined;\r\n this.State.BankGroups = [];\r\n }\r\n\r\n private SetFilterSettings() {\r\n if (!this.State.FilterSettings) {\r\n this.State.FilterSettings = {\r\n Company: { IsVisible: true, IsMultiple: true },\r\n Account: { IsVisible: true, IsMultiple: true },\r\n BookingAccount: { IsVisible: true, IsMultiple: true },\r\n BookingAccountSubtype: { IsVisible: true, IsMultiple: true },\r\n\r\n IsDatesVisible: true,\r\n IsTimeVisible: true\r\n } as FilterSettings;\r\n }\r\n\r\n this.State.FilterSettings.Account.IsVisible = this.State.CurrentTabIndex === 0;\r\n this.State.FilterSettings.BookingAccount.IsVisible = this.State.CurrentTabIndex === 0;\r\n this.State.FilterSettings.BookingAccountSubtype.IsVisible = this.State.CurrentTabIndex === 0;\r\n }\r\n\r\n protected override OnReadyFilter(): void {\r\n this.LoadUploads();\r\n this.LoadDeployments();\r\n this.LoadJournalEntryUploads();\r\n this.LoadIncomingPaymentsUploads();\r\n }\r\n\r\n private LoadDeployments() {\r\n if (!Globals.OrganizationID) return;\r\n const dataExportTypes = Object.values(EnumDataExportType)\r\n this.DataSources['Deployments'] = new DataSourceCustomAction((options: DataLoadOptions) => this.deploymentEndpoint.ListEx(Globals.OrganizationID, dataExportTypes, options), undefined, undefined, false);\r\n }\r\n\r\n\r\n override OnInitComponent() {\r\n this.SetFilterSettings();\r\n this.LoadUploads();\r\n this.LoadJournalEntryUploads();\r\n this.LoadOrganization();\r\n this.LoadIncomingPaymentsUploads();\r\n }\r\n\r\n override OnInitComponentFinished() {\r\n // this.filter.LoadData();\r\n }\r\n\r\n LoadUploads() {\r\n const params = new UploadListParams();\r\n params.OrganizationID = this.State.FilterValues.OrganizationID;\r\n params.Companies = this.State.FilterValues.Company as number[];\r\n params.Accounts = this.State.FilterValues.Account as number[];\r\n params.BookingAccounts = this.State.FilterValues.BookingAccount as number[];\r\n params.BookingAccountSubtypes = this.State.FilterValues.BookingAccountSubtype as EnumBookingAccountSubtypes[];\r\n params.DateFrom = this.State.FilterValues.DateFrom;\r\n params.DateTo = this.State.FilterValues.DateTo;\r\n params.Status = this.State.Status;\r\n params.BankGroups = this.State.BankGroups;\r\n params.BatchID = this.State.BatchID;\r\n params.Deployments = this.State.Deployments;\r\n this.DataSources['Uploads'] = new DataSourceCustomAction((options: DataLoadOptions) => this.uploadEndpoint.ListEx(params, options), undefined, undefined, false);\r\n }\r\n\r\n private LoadJournalEntryUploads() {\r\n const params = new JournalEntryUploadListParams();\r\n params.OrganizationID = this.State.FilterValues.OrganizationID;\r\n params.Companies = this.State.FilterValues.Company as number[];\r\n params.DateFrom = this.State.FilterValues.DateFrom;\r\n params.DateTo = this.State.FilterValues.DateTo;\r\n params.Statuses = this.State.Status;\r\n params.BatchID = this.State.BatchID;\r\n params.Deployments = this.State.Deployments;\r\n this.DataSources['JEUploads'] = new DataSourceCustomAction((options: DataLoadOptions) => this.journalEntryUploadEndpoint.ListEx(params, options), undefined, undefined, false);\r\n }\r\n\r\n private LoadIncomingPaymentsUploads() {\r\n const params = new IncomingPaymentUploadListParams();\r\n params.OrganizationID = this.State.FilterValues.OrganizationID;\r\n params.Companies = this.State.FilterValues.Company as number[];\r\n params.DateFrom = this.State.FilterValues.DateFrom;\r\n params.DateTo = this.State.FilterValues.DateTo;\r\n params.Statuses = this.State.Status;\r\n params.BatchID = this.State.BatchID;\r\n params.Deployments = this.State.Deployments;\r\n this.DataSources['IncomingPaymentsUploads'] = new DataSourceCustomAction(\r\n (options: DataLoadOptions) => this.incomingPaymentUploadEndpoint.ListEx(params, options), \r\n undefined, \r\n undefined, \r\n false\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 settings.IsAllowExport = true;\r\n return settings;\r\n }\r\n\r\n override OnApplyFilter() {\r\n this.LoadUploads();\r\n this.LoadJournalEntryUploads();\r\n this.LoadIncomingPaymentsUploads();\r\n }\r\n\r\n ResetCustomFilters() {\r\n this.State.BankGroups = [];\r\n this.State.Deployments = [];\r\n this.State.Status = [];\r\n }\r\n\r\n override OnClearFilter() {\r\n this.InitState();\r\n\r\n this.ResetCustomFilters();\r\n // this.filter.LoadData();\r\n this.LoadUploads();\r\n this.LoadJournalEntryUploads();\r\n this.LoadOrganization();\r\n this.LoadIncomingPaymentsUploads();\r\n }\r\n\r\n OnOrganizationChanged() {\r\n this.ResetCustomFilters();\r\n \r\n this.LoadUploads();\r\n this.LoadJournalEntryUploads();\r\n this.LoadOrganization();\r\n this.LoadIncomingPaymentsUploads();\r\n }\r\n\r\n OnTabItemClick(e) {\r\n if (this.State.CurrentTabIndex !== e.itemIndex) {\r\n this.State.CurrentTabIndex = e.itemIndex;\r\n setTimeout(() => {\r\n this.SetFilterSettings();\r\n this.ReloadToolbar();\r\n });\r\n }\r\n }\r\n\r\n private LoadOrganization() {\r\n if (this.State.Organization && this.State.Organization.EntryID === this.State.FilterValues.OrganizationID) { return; }\r\n\r\n if (!this.State.FilterValues || !this.State.FilterValues.OrganizationID) {\r\n this.State.Organization = null;\r\n return;\r\n }\r\n\r\n this.Do(this.organizationEndpoint.Get(this.State.FilterValues.OrganizationID), false, (response) => {\r\n this.State.Organization = response.Entity;\r\n\r\n if (this.accessService.IsAdmin()) return;\r\n\r\n if (this.State.Organization && !this.State.Organization.IsLicensedForJournalEntries && this.State.CurrentTabIndex !== 0) {\r\n this.State.CurrentTabIndex = 0;\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 {{itemData.Rate | formatNumberRate}}\\r\\n {{itemData.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\";","import { Component, EventEmitter, Output } 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 { User } from '@kraken/_proxy/entities/user.entity';\r\n\r\nclass State extends BaseState {\r\n ShowActiveOnly: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-user-grid',\r\n templateUrl: './user-grid.component.html'\r\n})\r\nexport class UserGridComponent extends BaseGridComponent {\r\n @Output() OnLoadActive = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'UserGridComponent', User, State);\r\n }\r\n \r\n protected override OnInitState() {\r\n this.State.ShowActiveOnly = true;\r\n this.OnLoadActive.emit(this.State.ShowActiveOnly);\r\n }\r\n\r\n OnNavigate(e) {\r\n this.A.Navigator.Navigate(['/pages/user', e.data.EntryID], { OrganizationID: e.data.OrganizationID });\r\n }\r\n\r\n OnToolbarPreparing(e) {\r\n e.toolbarOptions.items.unshift({\r\n location: 'after',\r\n widget: 'dxCheckBox',\r\n isCustom: true,\r\n options: {\r\n text: this.RC('lblShowActiveOnly'),\r\n value: this.State.ShowActiveOnly,\r\n onValueChanged: (e) => {\r\n this.State.ShowActiveOnly = e.value;\r\n this.OnLoadActive.emit(this.State.ShowActiveOnly);\r\n }\r\n }\r\n });\r\n }\r\n}","export default \"\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\";","import { Component, EventEmitter, Input, Output } 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 { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { User } from '../../../_proxy/entities/user.entity';\r\nimport { UserEndpoint } from '../../../_proxy/endpoints/user.endpoint';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\n\r\nclass State extends BaseState {\r\n LoadActive: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-user-list',\r\n templateUrl: './user-list.component.html',\r\n styleUrls: ['./user-list.component.scss']\r\n})\r\nexport class UserListComponent extends BaseComponent {\r\n @Output() OnUpdateCount = new EventEmitter();\r\n private _organizationID: number;\r\n @Input() set OrganizationID(value) {\r\n this._organizationID = value;\r\n if (this._organizationID > -1) this.LoadDataSource();\r\n }\r\n\r\n constructor(A: ServiceBagService, private endpoint: UserEndpoint) {\r\n super(A, 'UserListComponent', State);\r\n }\r\n\r\n protected override OnInitState(): void {\r\n this.State.LoadActive = true;\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 == User || ExternalEntityType == WebAPICredential) this.LoadDataSource();\r\n }\r\n\r\n public LoadDataSource() {\r\n this.DataSources['Users'] = new DataSourceCustomAction((options: DataLoadOptions) => \r\n this.endpoint.ListEx(this._organizationID, this.State.LoadActive, options), null, (data) => \r\n this.OnUpdateCount.emit(data.length));\r\n }\r\n\r\n GetLinkParams() {\r\n return { OrganizationID: this._organizationID };\r\n }\r\n\r\n OnLoadActive(value: boolean) {\r\n this.State.LoadActive = value;\r\n this.LoadDataSource();\r\n }\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 { EnumAdminActivityRecordType } from './../enums';\r\nexport class AdminActivityRecord extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'AdminActivityRecord';\r\n }\r\n \r\n public ActivityType: EnumAdminActivityRecordType; \r\n public OrganizationID: number; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { AdminActivityRecord } from './../entities/adminactivityrecord.entity';\r\nimport { AdminActivityRecordView } from './../views/adminactivityrecord.view';\r\nimport { AdminActivityRecordParams } from './../params/adminactivityrecord.param';\r\n@Injectable()\r\nexport class AdminActivityRecordEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(api: APIGatewayService) {super(\"AdminActivityRecord\", api);}\r\n\t\r\n\r\n public ListEx(Params: AdminActivityRecordParams, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListEx', Params, 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 { AlertTemplate } from './../entities/alerttemplate.entity';\r\n@Injectable()\r\nexport class AlertTemplateEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"AlertTemplate\", api);}\r\n\t\r\n\r\n public ListEx(OrganizationID: number, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'ListEx', {OrganizationID: OrganizationID, options:options?.GetLoadOptions()} );\r\n }\r\n\r\n public SendTestAlertTemplate(AlertTemplate: AlertTemplate) : Observable\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'SendTestAlertTemplate', AlertTemplate, undefined );\r\n }\r\n}\r\n\r\n","import { Component, Input, ViewChild } from '@angular/core';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { DxValidationGroupComponent } from 'devextreme-angular';\r\nimport { EnumNotificationScheduleType } from '../../../../../../Kraken/Angular/ClientApp/_proxy/enums';\r\nimport { DxTreeViewComponent, DxTreeViewTypes } from 'devextreme-angular/ui/tree-view';\r\n\r\nclass State extends BaseState {\r\n RowIndex: number;\r\n ScheduleType: EnumNotificationScheduleType;\r\n DaysOfMonth: number[];\r\n DaysOfYear: number[];\r\n DaysOfWeek: number[];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'schedule-dialog',\r\n templateUrl: './schedule-dialog.component.html',\r\n styleUrls: ['./schedule-dialog.component.scss']\r\n})\r\nexport class ScheduleDialogComponent extends BasePageComponent {\r\n\r\n @ViewChild('validationGroup') validationGroup: DxValidationGroupComponent;\r\n @ViewChild(DxTreeViewComponent, { static: false }) treeView: DxTreeViewComponent;\r\n\r\n @Input() public RowIndex: number;\r\n @Input() public ScheduleType: EnumNotificationScheduleType;\r\n @Input() public DaysOfMonth: string;\r\n @Input() public DaysOfYear: string;\r\n @Input() public DaysOfWeek: number[];\r\n\r\n public daysOfMonthSource: { value: number, text: string }[];\r\n public daysHierarchy: any[] = [];\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'ScheduleDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog);\r\n\r\n this.daysOfMonthSource = Array.from({ length: 31 }, (_, i) => ({ value: i + 1, text: (i + 1).toString() }));\r\n this.daysOfMonthSource.push({ value: 100, text: this.RC('lblLastDay') });\r\n\r\n this.buildDaysHierarchy();\r\n }\r\n\r\n protected OnInitComponent(): void {\r\n this.State.ScheduleType = this.ScheduleType;\r\n this.State.DaysOfMonth = this.MapDaysOfMonth(this.DaysOfMonth);\r\n this.State.DaysOfYear = this.stringToIds(this.DaysOfYear);\r\n this.State.DaysOfWeek = this.DaysOfWeek;\r\n this.State.RowIndex = this.RowIndex;\r\n }\r\n\r\n private MapDaysOfMonth(daysOfMonth: string): number[] {\r\n return daysOfMonth?.split(',').map(x => parseInt(x.trim())) ?? [];\r\n }\r\n\r\n public Save(): void {\r\n const scheduleType = this.State.ScheduleType;\r\n const daysOfMonth = this.State.DaysOfMonth.map(x => String(x).padStart(2, '0')).join(', ');\r\n const daysOfYear = this.getSelectedDatesAsString(this.State.DaysOfYear);\r\n const daysOfWeek = this.State.DaysOfWeek;\r\n this.CloseDialogWithSuccess({ScheduleType: scheduleType,\r\n DaysOfMonth: daysOfMonth, DaysOfYear: daysOfYear, DaysOfWeek: daysOfWeek });\r\n }\r\n\r\n private buildDaysHierarchy(): void {\r\n // Days in each month (Jan–Dec)\r\n const daysPerMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\r\n\r\n for (let m = 1; m <= 12; m++) {\r\n this.daysHierarchy.push({\r\n id: m,\r\n parentId: 0,\r\n text: this.RC('Month_' + m),\r\n monthNumber: m,\r\n isMonth: true\r\n });\r\n\r\n // Create child day nodes for each day in that month\r\n for (let d = 1; d <= daysPerMonth[m - 1]; d++) {\r\n this.daysHierarchy.push({\r\n id: m * 100 + d, \r\n parentId: m, \r\n text: this.RC('Month_' + m) + ' ' + d,\r\n dayNumber: d\r\n });\r\n }\r\n }\r\n }\r\n\r\n\r\n private getSelectedDatesAsString(ids: number[]): string {\r\n const results: string[] = [];\r\n\r\n // For each selected ID, determine if it's a day node:\r\n ids.forEach(id => {\r\n const dayNode = this.daysHierarchy.find(item => item.id === id);\r\n // Skip month nodes (isMonth == true)\r\n if (!dayNode || (dayNode as any).isMonth) { \r\n return; \r\n }\r\n\r\n // Get the parent (the month node)\r\n const parentMonthNode = this.daysHierarchy.find(\r\n x => x.id === dayNode.parentId\r\n );\r\n if (!parentMonthNode) {\r\n return;\r\n }\r\n\r\n // Build \"mm/dd\" string from monthNumber & dayNumber\r\n const mm = String(parentMonthNode.monthNumber).padStart(2, '0');\r\n const dd = String(dayNode.dayNumber).padStart(2, '0');\r\n const ddmm = `${dd}/${mm}`;\r\n\r\n results.push(ddmm);\r\n });\r\n\r\n return results.join(', ');\r\n }\r\n\r\n private stringToIds(str: string): number[] {\r\n if (!str) return [];\r\n\r\n return str.split(',').map(part => {\r\n part = part.trim(); \r\n const [ddStr, mmStr] = part.split('/');\r\n if (!mmStr || !ddStr) return null;\r\n const mm = parseInt(mmStr, 10);\r\n const dd = parseInt(ddStr, 10);\r\n if (isNaN(mm) || isNaN(dd)) return null;\r\n return mm * 100 + dd;\r\n })\r\n .filter(id => id !== null) as number[];\r\n }\r\n\r\n public onDropDownBoxValueChanged() {\r\n this.updateSelection(this.treeView?.instance);\r\n }\r\n\r\n public onTreeViewReady(e: DxTreeViewTypes.ContentReadyEvent) {\r\n this.updateSelection(e.component);\r\n }\r\n\r\n private updateSelection(treeView: DxTreeViewComponent['instance']) {\r\n if (!treeView) return;\r\n\r\n if (!this.State.DaysOfYear || this.State.DaysOfYear.length === 0) {\r\n treeView.unselectAll();\r\n }\r\n\r\n this.State.DaysOfYear?.forEach(((value) => {\r\n treeView.selectItem(value);\r\n }));\r\n }\r\n\r\n public onTreeViewSelectionChanged(e: DxTreeViewTypes.ItemSelectionChangedEvent) {\r\n this.State.DaysOfYear = e.component.getSelectedNodeKeys();\r\n }\r\n}","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\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 { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { OrganizationEndpoint } from '../../_proxy/endpoints/organization.endpoint';\r\nimport { BaseEntityResponse, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Organization } from '../../_proxy/entities/organization.entity';\r\nimport {\r\n EnumAdminActivityRecordType,\r\n EnumLanguage,\r\n EnumUserAuthorizationType,\r\n EnumUserNotificationMethods,\r\n} from '../../_proxy/enums';\r\nimport { EnumMessageBoxTypes, EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { User, UserAllowedAccount, UserAllowedCompany, UserNotificationTemplate } from '../../_proxy/entities/user.entity';\r\nimport { UserEndpoint } from '../../_proxy/endpoints/user.endpoint';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { CompanyEndpoint } from '../../_proxy/endpoints/company.endpoint';\r\nimport { CompanyGridComponent } from '../company/list/company-grid.component';\r\nimport { NotificationTemplateEndpoint } from '../../_proxy/endpoints/notificationtemplate.endpoint';\r\nimport { AccountEndpoint } from '../../_proxy/endpoints/account.endpoint';\r\nimport { AccountListParams } from '../../_proxy/params/accountlist.param';\r\nimport { AccountGridComponent } from '../account/list/account-grid.component';\r\nimport { LoginService } from '../../../../src/core/framework/login.service';\r\nimport { AdminActivityRecord } from '../../_proxy/entities/adminactivityrecord.entity';\r\nimport { AdminActivityRecordEndpoint } from '../../_proxy/endpoints/adminactivityrecord.endpoint';\r\nimport { CompanyListParams } from '@kraken/_proxy/params/companylist.param';\r\nimport { ContextMenuElement } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { DxDataGridComponent } from 'devextreme-angular';\r\nimport { formatDate } from 'devextreme/localization';\r\nimport DataSource from 'devextreme/data/data_source';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { AccessService } from '@kraken/services/access.service';\r\nimport { memoize, result } from 'lodash';\r\nimport { BillingContractEndpoint } from '../../_proxy/endpoints/billingcontract.endpoint';\r\nimport { AlertTemplateEndpoint } from '@kraken/_proxy/endpoints/alerttemplate.endpoint';\r\nimport { EnumNotificationScheduleType } from '../../../../../../Kraken/Angular/ClientApp/_proxy/enums';\r\nimport { log } from 'console';\r\nimport { ScheduleDialogComponent } from '@kraken/dialogs/schedule-dialog/schedule-dialog.component';\r\n\r\nclass StateNotificationLine {\r\n public NotificationTemplateID: number;\r\n public AlertTemplateID: number;\r\n public NotificationScheduledTime: Date;\r\n public LineID: number;\r\n public NotificationScheduledDay: number[];\r\n public ScheduleType: EnumNotificationScheduleType;\r\n public DaysOfMonth: string;\r\n public DaysOfYear: string;\r\n}\r\n\r\nclass State extends BaseState {\r\n Organization: Organization = new Organization;\r\n AllowedCompaniesKeys: number[];\r\n AllowedAccountsKeys: number[];\r\n Lines: StateNotificationLine[];\r\n LineChanges: any[];\r\n UserNotificationMethods: any[];\r\n}\r\n\r\nlet rowKey = 0;\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-user',\r\n templateUrl: './user.component.html'\r\n})\r\nexport class UserComponent extends BasePageCRUDComponent {\r\n\r\n @ViewChild('messageBox') messageBox;\r\n @ViewChild('companyGrid') companyGrid: CompanyGridComponent;\r\n @ViewChild('accountGrid') accountGrid: AccountGridComponent;\r\n @ViewChild('linesGrid') linesGrid: DxDataGridComponent;\r\n @ViewChild(ScheduleDialogComponent) scheduleDialog: ScheduleDialogComponent;\r\n\r\n isTemplateRequired = true;\r\n\r\n constructor(A: ServiceBagService,\r\n public accessService: AccessService,\r\n private endpoint: UserEndpoint,\r\n private organizationEndpoint: OrganizationEndpoint,\r\n private notificationTemplateEndpoint: NotificationTemplateEndpoint, \r\n private alertTemplateEndpoint: AlertTemplateEndpoint, \r\n private companyEndpoint: CompanyEndpoint,\r\n private accountEndpoint: AccountEndpoint, \r\n private loginService: LoginService, \r\n private adminActivityRecordEndpoint: AdminActivityRecordEndpoint,\r\n private billingContractEndpoint: BillingContractEndpoint,) {\r\n super(A, 'UserComponent', User, State, endpoint, EnumPageDisplayModes.Window);\r\n\r\n }\r\n\r\n override OnInitState() {\r\n this.State.LineChanges = [];\r\n this.State.UserNotificationMethods = this.LIST('UserNotificationMethods');\r\n }\r\n\r\n override OnInitComponent() {\r\n this.Do(this.organizationEndpoint.Get(this.QueryParams.OrganizationID), false,\r\n (response: BaseEntityResponse) => this.State.Organization = response.Entity);\r\n this.LoadCompanies();\r\n this.LoadAccounts();\r\n this.LoadNotificationTemplates();\r\n this.LoadAlertTemplates();\r\n }\r\n\r\n override OnInitContextMenus(): ContextMenuElement[] {\r\n if (this.IsAddMode) return undefined;\r\n return [{\r\n text: this.RC('titleDelete'),\r\n visible: true,\r\n onClick: () => {\r\n this.Entity.IsDeleted = true;\r\n this.OnSave();\r\n }\r\n }];\r\n }\r\n\r\n\r\n get showIsOnlyAssociatedBankPass () {\r\n return this.Entity.NotificationMethodBankPass != EnumUserNotificationMethods.None;\r\n }\r\n\r\n LoadCompanies() {\r\n const params = new CompanyListParams();\r\n params.OrganizationID = this.QueryParams.OrganizationID;\r\n params.LoadActive = true;\r\n\r\n this.DataSources['Companies'] = new DataSourceCustomAction((options: DataLoadOptions) =>\r\n this.companyEndpoint.ListEx(params, options));\r\n }\r\n\r\n private LoadBillingContracts(organizationID: number) {\r\n this.DataSources['BillingContracts'] = new DataSourceCustomAction((options: DataLoadOptions) => this.billingContractEndpoint.ListEx(organizationID, true, options),\r\n undefined,\r\n (data) => {\r\n if (this.IsAddMode && data.length === 1) {\r\n this.Entity.BillingContractID = data[0].EntryID;\r\n }\r\n });\r\n this.DS('BillingContracts').Reload();\r\n }\r\n\r\n LoadAccounts() {\r\n const params = new AccountListParams();\r\n params.OrganizationID = this.QueryParams.OrganizationID;\r\n params.LoadActive = true;\r\n\r\n this.DataSources['Accounts'] = new DataSourceCustomAction((options: DataLoadOptions) =>\r\n this.accountEndpoint.ListEx(params, options));\r\n }\r\n\r\n LoadNotificationTemplates() {\r\n this.Do(this.notificationTemplateEndpoint.ListEx(this.QueryParams.OrganizationID, null), false, ({ Entities }) => {\r\n this.DataSources['NotificationTemplates'] = Entities;\r\n });\r\n }\r\n\r\n LoadAlertTemplates() {\r\n this.Do(this.alertTemplateEndpoint.ListEx(this.QueryParams.OrganizationID, null), false, ({ Entities }) => {\r\n this.DataSources['AlertTemplates'] = Entities;\r\n });\r\n }\r\n\r\n override OnEntityInitObjectName() {\r\n return this.Entity && this.Entity.Name;\r\n }\r\n\r\n override OnEntityNew() {\r\n this.Entity.OrganizationID = this.QueryParams.OrganizationID;\r\n this.Entity.IsAllowSyncLogs = this.Entity.IsAllowReports = this.Entity.IsAllowSettings =\r\n this.Entity.IsAllowSyncLogs = this.Entity.IsAllowLoans = this.Entity.IsAllowCCProcessing =\r\n this.Entity.IsAllowCashflow = this.Entity.IsAllowAccountingReports = this.Entity.IsActive = true;\r\n\r\n this.Entity.NotificationMethod = EnumUserNotificationMethods.None;\r\n this.Entity.NotificationMethodBankPass = EnumUserNotificationMethods.Email;\r\n this.Entity.NotificationLanguage = EnumLanguage.Hebrew;\r\n this.LoadBillingContracts(this.Entity.OrganizationID);\r\n }\r\n\r\n override OnEntityLoaded() {\r\n this.State.AllowedCompaniesKeys = this.Entity.AllowedCompanies.map(item => item.CompanyID);\r\n this.State.AllowedAccountsKeys = this.Entity.AllowedAccounts.map(item => item.AccountID);\r\n this.State.Lines = this.Entity.Lines.map(line => {\r\n const newLine = new StateNotificationLine();\r\n newLine.LineID = line.LineID;\r\n newLine.NotificationScheduledTime = line.NotificationScheduledTime;\r\n newLine.NotificationTemplateID = line.NotificationTemplateID;\r\n newLine.AlertTemplateID = line.AlertTemplateID;\r\n newLine.ScheduleType = line.ScheduleType;\r\n newLine.DaysOfMonth = line.DaysOfMonth;\r\n newLine.DaysOfYear = line.DaysOfYear;\r\n newLine.NotificationScheduledDay = [];\r\n\r\n let i = 1;\r\n while (i < 7) {\r\n const value = line[`IsNotificationScheduledDay${i}`];\r\n if (value) {\r\n newLine.NotificationScheduledDay.push(i);\r\n }\r\n i++;\r\n }\r\n\r\n return newLine;\r\n });\r\n this.LoadBillingContracts(this.Entity.OrganizationID);\r\n }\r\n\r\n protected override OnEntityPrepareForSave(): void {\r\n this.Entity.AllowedCompanies = this.Entity.AuthorizationType !== EnumUserAuthorizationType.Companies\r\n ? []\r\n : this.companyGrid.G.GetSelectedRowKeys().map(key => Object.assign({},\r\n {\r\n EntryID: this.Entity.AllowedCompanies.find(item => item.CompanyID === key)?.EntryID,\r\n CompanyID: key\r\n } as UserAllowedCompany));\r\n this.Entity.AllowedAccounts = this.Entity.AuthorizationType !== EnumUserAuthorizationType.Accounts\r\n ? []\r\n : this.accountGrid.G.GetSelectedRowKeys().map(key => Object.assign({},\r\n {\r\n EntryID: this.Entity.AllowedAccounts.find(item => item.AccountID === key)?.EntryID,\r\n AccountID: key\r\n } as UserAllowedAccount));\r\n }\r\n\r\n override OnEntitySaved() {\r\n if (!this.IsAddMode) {\r\n this.NavigateBack();\r\n return;\r\n }\r\n this.OnManageCredentials();\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 OnManageCredentials() {\r\n this.Navigate(['/pages/passwordmanage'], this.GetLinkParams());\r\n }\r\n\r\n OnImpersonateClicked() {\r\n this.loginService.ImpersonateLogin(this.Entity.EntryID).subscribe(result => {\r\n if (!result) return;\r\n\r\n const record = new AdminActivityRecord();\r\n record.ActivityType = EnumAdminActivityRecordType.LoginImpersonation;\r\n record.OrganizationID = this.Entity.OrganizationID;\r\n\r\n this.Do(this.adminActivityRecordEndpoint.Save(record), false);\r\n });\r\n }\r\n\r\n GetLinkParams() {\r\n return { CredentialID: this.Entity.EntryID, Type: 1 };\r\n }\r\n\r\n OnGridSelectionChanged() {\r\n this.SetDirty();\r\n }\r\n\r\n DaysCellTemplate(container, options) {\r\n const noBreakSpace = '\\u00A0';\r\n const text = (options.value || []).map((element) => options.column.lookup.calculateCellValue(element)).join(', ');\r\n container.textContent = text || noBreakSpace;\r\n container.title = text;\r\n }\r\n\r\n OnSavingLine(e) {\r\n const { changes } = e;\r\n\r\n const validate = changes.map(({ type, data }) => {\r\n if (type === 'update' || type === 'insert') {\r\n const value = data.NotificationScheduledTime;\r\n\r\n return new Promise(resolve => {\r\n const limit = new Date(value);\r\n limit.setHours(9, 0, 0);\r\n\r\n if (new Date(value) < limit) {\r\n this.messageBox.Type = EnumMessageBoxTypes.YesNo;\r\n this.messageBox.Prompt = this.RC('NotificationScheduledTimeQuestion');\r\n this.messageBox.ShowDialogShort(() => resolve(true));\r\n } else {\r\n resolve(true);\r\n }\r\n });\r\n }\r\n\r\n return Promise.resolve(true);\r\n });\r\n\r\n const insert = ({ data, key }) => {\r\n this.State.Lines.unshift({ ...data, LineID: --rowKey });\r\n };\r\n const update = ({ data, key }) => {\r\n const line = this.State.Lines.find(l => l.LineID === key);\r\n if (line) Object.assign(line, data);\r\n };\r\n const remove = ({ key }) => {\r\n this.State.Lines = this.State.Lines.filter(l => l.LineID !== key);\r\n };\r\n\r\n e.cancel = true;\r\n e.promise = Promise.all(validate).then(() => {\r\n changes.forEach((change) => {\r\n switch (change.type) {\r\n case 'insert':\r\n return insert(change);\r\n case 'update':\r\n return update(change);\r\n case 'remove':\r\n return remove(change);\r\n }\r\n });\r\n this.State.LineChanges = [];\r\n this.UpdateEntity();\r\n });\r\n }\r\n\r\n UpdateEntity() {\r\n this.Entity.Lines = this.State.Lines.map(line => {\r\n const newLine = new UserNotificationTemplate();\r\n newLine.NotificationScheduledTime = line.NotificationScheduledTime;\r\n newLine.NotificationTemplateID = line.NotificationTemplateID;\r\n \r\n newLine.AlertTemplateID = line.AlertTemplateID;\r\n newLine.ScheduleType = line.ScheduleType;\r\n newLine.DaysOfMonth = line.DaysOfMonth;\r\n newLine.DaysOfYear = line.DaysOfYear;\r\n\r\n if (line.LineID >= 0) newLine.LineID = line.LineID;\r\n\r\n line.NotificationScheduledDay?.forEach(v => {\r\n newLine[`IsNotificationScheduledDay${v}`] = true;\r\n });\r\n\r\n return newLine;\r\n });\r\n }\r\n\r\n OnEditorPreparing = (e) => {\r\n const { setValue, dataField, parentType } = e;\r\n if (dataField === 'NotificationScheduledTime' && parentType === 'dataRow') {\r\n e.editorOptions.onValueChanged = (args) => { // Override the default handler\r\n setValue(formatDate(args.value, this.F.DateFormatFull));\r\n };\r\n }\r\n if ((dataField === 'NotificationTemplateID' || dataField === 'AlertTemplateID') && parentType === 'dataRow') {\r\n e.editorOptions.onValueChanged = (args) => {\r\n this.isTemplateRequired = !args.value ? true : false;\r\n setValue(args.value);\r\n };\r\n }\r\n };\r\n\r\n\r\n CalculateScheduleCellValue = memoize((rowData: StateNotificationLine) => {\r\n let value;\r\n switch (rowData.ScheduleType) {\r\n case EnumNotificationScheduleType.DailyWeekly:\r\n value = rowData.NotificationScheduledDay;\r\n break;\r\n case EnumNotificationScheduleType.Monthly:\r\n value = rowData.DaysOfMonth;\r\n break;\r\n case EnumNotificationScheduleType.Yearly:\r\n value = rowData.DaysOfYear;\r\n break;\r\n } \r\n return value; \r\n });\r\n\r\n public async OnCellClick(event) {\r\n if (event.column.name === 'Schedule') { \r\n await event.component.saveEditData(); \r\n this.scheduleDialog.RowIndex = event.rowIndex;\r\n this.scheduleDialog.ScheduleType = event.data.ScheduleType;\r\n this.scheduleDialog.DaysOfMonth = event.data.DaysOfMonth;\r\n this.scheduleDialog.DaysOfYear = event.data.DaysOfYear;\r\n this.scheduleDialog.DaysOfWeek = event.data.NotificationScheduledDay;\r\n this.scheduleDialog.ShowDialogShort(async (result) => {\r\n if (event.row.isNewRow && this.State.Lines.length !== event.component.getVisibleRows().length) {\r\n event.row.data.ScheduleType = result.ScheduleType;\r\n event.row.data.DaysOfMonth = result.DaysOfMonth;\r\n event.row.data.DaysOfYear = result.DaysOfYear;\r\n event.row.data.NotificationScheduledDay = result.DaysOfWeek;\r\n } else{\r\n this.State.Lines[event.rowIndex].ScheduleType = result.ScheduleType;\r\n this.State.Lines[event.rowIndex].DaysOfMonth = result.DaysOfMonth;\r\n this.State.Lines[event.rowIndex].DaysOfYear = result.DaysOfYear;\r\n this.State.Lines[event.rowIndex].NotificationScheduledDay = result.DaysOfWeek;\r\n this.UpdateEntity();\r\n } \r\n await event.component.refresh();\r\n this.SetDirty(); \r\n });\r\n }\r\n }\r\n\r\n public CalculateScheduleDisplayCellValue = (rowData: StateNotificationLine) => {\r\n const scheduleType = rowData.ScheduleType;\r\n let daysOfMonth = rowData.DaysOfMonth;\r\n const daysOfYear = rowData.DaysOfYear;\r\n const daysOfWeek = rowData.NotificationScheduledDay;\r\n\r\n const list = this.LIST('Days');\r\n const days = daysOfWeek?.map(day => list.find(x => x.Value.toString() === day.toString())?.Text).join(', ');\r\n\r\n if (daysOfMonth) {\r\n const lastDay = this.RC('lblLastDay');\r\n const lastDayIndex = daysOfMonth.indexOf('100');\r\n if (lastDayIndex !== -1) {\r\n daysOfMonth = daysOfMonth.substring(0, lastDayIndex) + lastDay + daysOfMonth.substring(lastDayIndex + 3);\r\n }\r\n }\r\n\r\n let result = '';\r\n switch (scheduleType) {\r\n case EnumNotificationScheduleType.DailyWeekly:\r\n result = days !== '' ? this.RC('lblEveryWeekOn') + days : '';\r\n break;\r\n case EnumNotificationScheduleType.Monthly:\r\n result = daysOfMonth !== '' ? this.RC('lblEveryMonthOn') + daysOfMonth : '';\r\n break;\r\n case EnumNotificationScheduleType.Yearly:\r\n result = daysOfYear !== '' ? this.RC('lblEveryYearOn') + daysOfYear : '';\r\n break;\r\n }\r\n return result;\r\n };\r\n}\r\n","export default \"\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\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\nimport { InjectedComponentsBaseService } from '@m4u-angular/core/framework/injected-components-base.service';\r\n\r\n@Injectable()\r\nexport class InjectedComponentsService extends InjectedComponentsBaseService {\r\n\r\n override GetComponents(destination: string): Type[] {\r\n switch (destination) {\r\n case 'toolbar':\r\n return [\r\n //COMMENT BEFORE REDESIGN IT\r\n //ProblemIndicatorComponent\r\n ];\r\n default: return [];\r\n }\r\n }\r\n}\r\n","\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { SyncStatusContractView } from './../views/syncstatuscontract.view';\r\nimport { SyncStatusContractListParams } from './../params/syncstatuscontractlist.param';\r\n@Injectable()\r\nexport class SyncStatusContractEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(api: APIGatewayService) {super(\"SyncStatusContract\", api);}\r\n\t\r\n\r\n public ListEx(Params: SyncStatusContractListParams, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListEx', Params, options?.GetLoadOptions() );\r\n }\r\n}\r\n\r\n","import { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\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\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-transaction-category-list-page',\r\n templateUrl: './transaction-category-list-page.component.html'\r\n})\r\nexport class TransactionCategoryListPageComponent extends BasePageComponent \r\n{\r\n constructor(A: ServiceBagService) \r\n {\r\n super(A, 'TransactionCategoryListPageComponent', BaseEntity, BaseState);\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 { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { TransactionCategory } from '@kraken/_proxy/entities/transactioncategory.entity';\r\nimport { AccessService } from '@kraken/services/access.service';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-transaction-category-grid',\r\n templateUrl: './transaction-category-grid.component.html'\r\n})\r\nexport class TransactionCategoryGridComponent extends BaseGridComponent {\r\n @Input() IsShowCompanyID: boolean = false;\r\n @Input() CompanyID: number;\r\n @Input() IsLoadGlobal: boolean = false;\r\n @Input() IsShowIsLoadGlobalCheckox: boolean = false;\r\n @Output() IsLoadGlobalChange = new EventEmitter();\r\n\r\n @Input() IsShowIsLoadActiveOnlyCheckox: boolean = false;\r\n @Input() IsLoadActiveOnly: boolean = true;\r\n @Input() IsSelectionMode: boolean = false;\r\n @Input() SelectedRows: number[];\r\n\r\n @Output() IsLoadActiveOnlyChange = new EventEmitter();\r\n @Output() OnSelectionChanged = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService,\r\n private accessService: AccessService) {\r\n super(A, 'TransactionCategoryGridComponent', TransactionCategory, BaseState);\r\n }\r\n\r\n OnNavigate(e) {\r\n if (!this.IsSelectionMode) this.Navigate(['/pages/transaction-category', e.data.EntryID], { CompanyID: this.CompanyID }, true);\r\n }\r\n\r\n OnToolbarPreparing(e) {\r\n if (this.IsShowIsLoadGlobalCheckox) {\r\n e.toolbarOptions.items.unshift({\r\n location: 'after',\r\n template: 'showGlobalSettings',\r\n isCustom: true\r\n });\r\n }\r\n\r\n if (this.IsShowIsLoadActiveOnlyCheckox) {\r\n e.toolbarOptions.items.unshift({\r\n location: 'after',\r\n template: 'showActiveOnlySettings',\r\n isCustom: true\r\n });\r\n }\r\n }\r\n\r\n OnGridSelectionChanged(e) {\r\n this.OnSelectionChanged.emit(e);\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\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.Company.Name}}\\r\\n {{'lblGlobal' | 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\";","import { Component } from '@angular/core';\r\nimport { ContextMenuElement, ToolbarSettings } 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 { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { AccessService } from '@kraken/services/access.service';\r\nimport { TransactionCategoryEndpoint } from '../../_proxy/endpoints/transactioncategory.endpoint';\r\nimport { TransactionCategory } from '../../_proxy/entities/transactioncategory.entity';\r\nimport { Company } from '@kraken/_proxy/entities/company.entity';\r\nimport { CompanyEndpoint } from '@kraken/_proxy/endpoints/company.endpoint';\r\nimport { ParentCategory } from '@kraken/_proxy/entities/parentcategory.entity';\r\n\r\nclass State extends BaseState {\r\n Company: Company;\r\n IsInitiatedEntity: boolean;\r\n CurrentTabIndex: number = 0;\r\n Tabs: any[];\r\n CompanyID: number;\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-transaction-category',\r\n templateUrl: './transaction-category.component.html',\r\n styleUrls: ['./transaction-category.component.scss']\r\n})\r\nexport class TransactionCategoryComponent extends BasePageCRUDComponent {\r\n\r\n private _defaultIconFileName: string = 'misc.png';\r\n\r\n constructor(A: ServiceBagService,\r\n private TransactionCategoryEndpoint: TransactionCategoryEndpoint,\r\n private companyEndpoint: CompanyEndpoint,\r\n public accessService: AccessService) {\r\n super(A, 'TransactionCategoryComponent', TransactionCategory, State, TransactionCategoryEndpoint, EnumPageDisplayModes.Window);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.State.Tabs = this.LIST('TransactionCategoryTabs');\r\n this.State.Tabs[1].visible = this.accessService.IsAllowJournalEntryPosting();\r\n }\r\n\r\n get IsGlobal() {\r\n return !(this.Entity.CompanyID || this.accessService.IsSuperAdmin());\r\n }\r\n\r\n override OnEntityNew() {\r\n this.Entity.IsActive = true;\r\n this.Entity.CompanyID = this.QueryParams.CompanyID;\r\n this.State.CompanyID = this.QueryParams.CompanyID;\r\n this.State.IsInitiatedEntity = true;\r\n this.SetDefaultIcon();\r\n this.LoadCompany();\r\n }\r\n\r\n SetDefaultIcon() {\r\n if (!this.Entity.Icon) {\r\n this.Entity.Icon = this._defaultIconFileName;\r\n this.RefreshEntityOriginal();\r\n }\r\n }\r\n\r\n override OnEntityLoaded() {\r\n this.State.IsInitiatedEntity = true;\r\n this.State.CompanyID = this.Entity.CompanyID ?? this.QueryParams.CompanyID;\r\n this.SetDefaultIcon();\r\n }\r\n\r\n override OnEntitySaved() {\r\n this.NavigateBack();\r\n }\r\n\r\n override OnInitContextMenus(): ContextMenuElement[] {\r\n if (this.IsAddMode || this.IsGlobal) return undefined;\r\n\r\n const menus: ContextMenuElement[] =\r\n [\r\n {\r\n text: this.RC('titleDelete'),\r\n visible: true,\r\n onClick: () => {\r\n this.OnDelete();\r\n }\r\n }\r\n ];\r\n\r\n return menus;\r\n }\r\n\r\n override OnEntityInitObjectName() {\r\n return this.Entity && this.Entity.Name;\r\n }\r\n\r\n private LoadCompany() {\r\n if (!this.Entity.CompanyID) return;\r\n\r\n this.Do(this.companyEndpoint.Get(this.Entity.CompanyID), false, (response) => this.State.Company = response.Entity);\r\n }\r\n\r\n GetIconPath(iconFileName: string) {\r\n const urlPathPrefix = 'assets/projects/kraken/';\r\n return `${urlPathPrefix}${iconFileName}`;\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\";","import { ListTransactionCategoriesParams } from './../../../_proxy/params/listtransactioncategories.param';\r\nimport { TransactionCategoryEndpoint } from '../../../_proxy/endpoints/transactioncategory.endpoint';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState, BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { TransactionCategory } from '../../../_proxy/entities/transactioncategory.entity';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { TransactionCategoryGridComponent } from './transaction-category-grid.component';\r\nimport { debounce } from 'lodash';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-transaction-category-list',\r\n templateUrl: './transaction-category-list.component.html'\r\n})\r\nexport class TransactionCategoryListComponent extends BaseComponent {\r\n\r\n private _companyID: number;\r\n @Input() set CompanyID(value: number) {\r\n this._companyID = value;\r\n if (this._companyID > -1) this.LoadDataSource();\r\n }\r\n get CompanyID() {\r\n return this._companyID;\r\n }\r\n\r\n private _isLoadGlobal: boolean = false;\r\n @Input() set IsLoadGlobal(value: boolean) {\r\n if (this._isLoadGlobal !== value) {\r\n this._isLoadGlobal = value;\r\n this.LoadDataSource();\r\n }\r\n }\r\n get IsLoadGlobal() {\r\n return this._isLoadGlobal;\r\n }\r\n\r\n private _isLoadActiveOnly: boolean;\r\n @Input() set IsLoadActiveOnly(value: boolean) {\r\n if (this._isLoadActiveOnly !== value) {\r\n this._isLoadActiveOnly = value;\r\n this.LoadDataSource();\r\n }\r\n }\r\n get IsLoadActiveOnly() {\r\n return this._isLoadActiveOnly;\r\n }\r\n\r\n firstLoad = true;\r\n\r\n @Input() IsShowIsLoadGlobalCheckox: boolean = false;\r\n @Input() IsShowIsLoadActiveOnlyCheckox: boolean = false;\r\n @Input() IsAutoHeight: boolean = false;\r\n @Input() Title: string;\r\n @Input() ShowAddButton: boolean = true;\r\n @Input() IsSelectionMode: boolean = false;\r\n @Input() SelectedRows: number[];\r\n @Output() OnUpdateCount = new EventEmitter();\r\n @Output() OnSelectionChanged = new EventEmitter();\r\n @ViewChild('grid') grid: TransactionCategoryGridComponent;\r\n\r\n constructor(A: ServiceBagService,\r\n private transactionCategoryEndpoint: TransactionCategoryEndpoint) {\r\n super(A, 'TransactionCategoryListComponent', BaseState);\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity,\r\n ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n if (ExternalEntityType == TransactionCategory) this.LoadDataSource();\r\n }\r\n\r\n OnIsShowGlobalChanges(e) {\r\n this.IsLoadGlobal = e;\r\n }\r\n\r\n private LoadDataSource() {\r\n if (this.IsLoadActiveOnly === undefined || this.IsLoadActiveOnly === null) return;\r\n\r\n const params = new ListTransactionCategoriesParams();\r\n params.Companies = this.CompanyID ? [this.CompanyID] : [];\r\n params.LoadActive = this.IsLoadActiveOnly;\r\n params.LoadGlobal = this._isLoadGlobal;\r\n\r\n this.DataSources['TransactionCategories'] = new DataSourceCustomAction(\r\n (options: DataLoadOptions) => this.transactionCategoryEndpoint.ListEx(params, options), null, (data) => {\r\n if (this.firstLoad) {\r\n this.firstLoad = false;\r\n } else {\r\n this.OnUpdateCount.emit(data.length);\r\n }\r\n });\r\n }\r\n\r\n\r\n GetLinkParams() {\r\n return { CompanyID: this.CompanyID };\r\n }\r\n\r\n OnGridSelectionChanged(e) {\r\n this.OnSelectionChanged.emit(e);\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { Component } from '@angular/core';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-classification-rule-list-page',\r\n templateUrl: './classification-rule-list-page.component.html'\r\n})\r\nexport class ClassificationRuleListPageComponent extends BasePageComponent \r\n{\r\n\r\n constructor(A: ServiceBagService) \r\n {\r\n super(A, 'ClassificationRuleListPageComponent', 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\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseParamsFilter } from './../entities/baseparamsfilter.entity';\r\nexport class ClassificationRuleParams extends BaseParamsFilter {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ClassificationRuleParams';\r\n }\r\n \r\n public LoadGlobal: boolean; \r\n public TransactionCategoryID: number; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ClassificationRuleParams } from '../../../_proxy/params/classificationrule.param';\r\nimport { TransactionClassificationRule } from '@kraken/_proxy/entities/transactionclassificationrule.entity';\r\nimport { TransactionClassificationRuleEndpoint } from '@kraken/_proxy/endpoints/transactionclassificationrule.endpoint';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-classification-rule-list',\r\n templateUrl: './classification-rule-list.component.html'\r\n})\r\nexport class ClassificationRuleListComponent extends BaseComponent {\r\n\r\n @Input() CompanyID: number;\r\n @Input() IsLoadGlobal: boolean = false;\r\n @Input() IsActiveOnly: boolean = true;\r\n @Input() IsShowIsLoadGlobalCheckox: boolean = false;\r\n @Input() IsShowIsActiveOnlyCheckbox: boolean = false;\r\n @Input() IsShowAddButtonHover: boolean = false;\r\n @Input() IsAutoHeight: boolean = false;\r\n @Input() TransactionCategoryID: number;\r\n @Input() GridName = 'ClassificationRulesGrid';\r\n @Input() Title: string;\r\n @Output() OnUpdateCount = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService,\r\n private classificationRuleEndpoint: TransactionClassificationRuleEndpoint) {\r\n super(A, 'ClassificationRuleListComponent', BaseState);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n protected override OnExternalEntitySaved(\r\n ExternalEntity: BaseEntity,\r\n ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions\r\n ) {\r\n if (ExternalEntityType == TransactionClassificationRule) this.LoadDataSource();\r\n }\r\n\r\n OnIsShowGlobalChanges(e) {\r\n this.IsLoadGlobal = e;\r\n this.LoadDataSource();\r\n }\r\n\r\n OnIsActiveOnlyChanged(e) {\r\n this.IsActiveOnly = e;\r\n this.LoadDataSource();\r\n }\r\n\r\n LoadDataSource() {\r\n let companyIDParam = this.CompanyID;\r\n\r\n if (!companyIDParam || companyIDParam <= 0) {\r\n companyIDParam = this.A.Navigator.GetQueryParams(true).CompanyID;\r\n companyIDParam = companyIDParam > 0 ? companyIDParam : undefined;\r\n }\r\n\r\n const params = new ClassificationRuleParams();\r\n params.Companies = companyIDParam ? [companyIDParam] : [];\r\n params.LoadActive = this.IsActiveOnly;\r\n params.LoadGlobal = this.IsLoadGlobal;\r\n params.TransactionCategoryID = this.TransactionCategoryID;\r\n\r\n this.DataSources['ClassificationRules'] = new DataSourceCustomAction(\r\n (options: DataLoadOptions) => this.classificationRuleEndpoint.ListEx(params, options), null, (data) => {\r\n this.OnUpdateCount.emit(data.length);\r\n });\r\n }\r\n\r\n GetLinkParams() {\r\n return { CompanyID: this.CompanyID, TransactionCategoryID: this.TransactionCategoryID };\r\n }\r\n\r\n}\r\n","export default \"\\r\\n\\r\\n\";","import { EnumMatchingRelationship } from './../../_proxy/enums';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { TransactionClassificationRuleEndpoint } from '../../_proxy/endpoints/transactionclassificationrule.endpoint';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { Component, ViewChild } from '@angular/core';\r\nimport { ContextMenuElement, ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { RecategorizeDialogComponent } from '@kraken/dialogs/recategorize-dialog/recategorize-dialog.component';\r\nimport { AccessService } from '@kraken/services/access.service';\r\nimport { TransactionClassificationRule } from '@kraken/_proxy/entities/transactionclassificationrule.entity';\r\n\r\nclass State extends BaseState {\r\n IsInitiatedEntity: boolean;\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-classification-rule',\r\n templateUrl: './classification-rule.component.html'\r\n})\r\nexport class ClassificationRuleComponent\r\n extends BasePageCRUDComponent {\r\n\r\n @ViewChild(RecategorizeDialogComponent) recategorizeDialog: RecategorizeDialogComponent;\r\n\r\n constructor(A: ServiceBagService,\r\n private accessService: AccessService,\r\n private classificationRuleEndpoint: TransactionClassificationRuleEndpoint) {\r\n super(A, 'ClassificationRuleComponent', TransactionClassificationRule, State, classificationRuleEndpoint);\r\n }\r\n\r\n override OnEntityNew() {\r\n this.Entity.IsActive = true;\r\n this.Entity.IsDebit = true;\r\n this.Entity.IsCredit = true;\r\n this.Entity.IsApplyToSubTypeCurrent = true;\r\n this.Entity.IsApplyToSubTypeCredit = true;\r\n if (this.QueryParams.TransactionCategoryID) {\r\n this.Entity.TransactionCategoryID = parseInt(this.QueryParams.TransactionCategoryID, 0);\r\n\r\n }\r\n if (this.QueryParams.CompanyID) {\r\n this.Entity.CompanyID = parseInt(this.QueryParams.CompanyID, 0); \r\n }\r\n this.Entity.Priority = 1;\r\n this.Entity.MatchingRelationship = EnumMatchingRelationship.And;\r\n\r\n this.OnInitNewPriotity();\r\n }\r\n\r\n\r\n get IsGlobal() {\r\n return !(this.Entity.CompanyID || this.accessService.IsSuperAdmin());\r\n }\r\n\r\n override OnEntityLoaded() {\r\n this.State.IsInitiatedEntity = true;\r\n }\r\n\r\n override OnEntityValidate(): boolean {\r\n if (!this.Entity.BankGroup) this.Entity.BankGroup = undefined;\r\n\r\n return true;\r\n }\r\n\r\n override OnEntitySaved() {\r\n if (this.Entity.CompanyID) {\r\n this.recategorizeDialog.RecategorizeByCompany(this.Entity.CompanyID, () => {\r\n this.NavigateBack(); \r\n }, () => {\r\n this.NavigateBack(); \r\n });\r\n } else {\r\n this.NavigateBack(); \r\n }\r\n }\r\n\r\n override OnInitContextMenus(): ContextMenuElement[] {\r\n if (this.IsAddMode || this.IsGlobal) return undefined;\r\n\r\n const menus: ContextMenuElement[] =\r\n [\r\n {\r\n text: this.RC('titleDelete'),\r\n visible: true,\r\n onClick: () => {\r\n this.OnDelete(); \r\n }\r\n }\r\n ];\r\n\r\n return menus;\r\n }\r\n\r\n override OnEntityInitObjectName() {\r\n return this.Entity && this.Entity.Name;\r\n }\r\n\r\n OnInitNewPriotity() {\r\n this.Do(this.classificationRuleEndpoint.GetNextPossiblePriority(this.QueryParams.CompanyID), false, (response) => {\r\n this.Entity.Priority = response.Data;\r\n\r\n this.State.IsInitiatedEntity = true;\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\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class ClassificationRuleMovePriorityParams extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ClassificationRuleMovePriorityParams';\r\n }\r\n \r\n public ClassificationRuleID: number; \r\n public NewPriority: 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 { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { ClassificationRuleMovePriorityParams } from '../../../_proxy/params/classificationrulemovepriority.param';\r\nimport { AccessService } from '@kraken/services/access.service';\r\nimport { TransactionClassificationRule } from '@kraken/_proxy/entities/transactionclassificationrule.entity';\r\nimport { TransactionClassificationRuleEndpoint } from '@kraken/_proxy/endpoints/transactionclassificationrule.endpoint';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-classification-rule-grid',\r\n templateUrl: './classification-rule-grid.component.html'\r\n})\r\nexport class ClassificationRuleGridComponent extends BaseGridComponent {\r\n\r\n @Input() CompanyID: number;\r\n @Input() IsShowCompanyID: boolean = false;\r\n @Input() TransactionCategoryID: number;\r\n @Input() GridName: string;\r\n @Input() IsLoadGlobal: boolean = false;\r\n @Input() IsShowIsLoadGlobalCheckox: boolean = false;\r\n @Output() IsLoadGlobalChange = new EventEmitter();\r\n @Output() OnShowGlobalChanges: EventEmitter = new EventEmitter();\r\n\r\n @Input() IsShowIsActiveOnlyCheckbox: boolean = false;\r\n @Input() IsActiveOnly: boolean = true;\r\n @Output() IsActiveOnlyChange: EventEmitter = new EventEmitter();\r\n\r\n searchText: string;\r\n\r\n constructor(A: ServiceBagService,\r\n private classificationRuleEndpoint: TransactionClassificationRuleEndpoint,\r\n private accessService: AccessService) {\r\n super(A, 'ClassificationRuleGridComponent', TransactionClassificationRule, BaseState);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.ComponentName = `${this.GridName}Component`;\r\n }\r\n\r\n OnNavigate(e) {\r\n this.Navigate(['/pages/classification-rule', e.data.EntryID],\r\n { CompanyID: this.CompanyID, TransactionCategoryID: this.TransactionCategoryID });\r\n }\r\n\r\n OnToolbarPreparing(e) {\r\n if (this.IsShowIsLoadGlobalCheckox) {\r\n e.toolbarOptions.items.unshift({\r\n location: 'after',\r\n template: 'showGlobalSettings',\r\n isCustom: true\r\n });\r\n }\r\n\r\n if (this.IsShowIsActiveOnlyCheckbox) {\r\n e.toolbarOptions.items.unshift({\r\n location: 'after',\r\n template: 'showActiveSettings',\r\n isCustom: true\r\n });\r\n }\r\n }\r\n\r\n OnIsShowGlobalChanges(e) {\r\n this.OnShowGlobalChanges.emit(e.value);\r\n }\r\n\r\n OnReorder = (e) => {\r\n const params = new ClassificationRuleMovePriorityParams();\r\n params.ClassificationRuleID = e.itemData.EntryID;\r\n params.NewPriority = e.component.getVisibleRows()[e.toIndex].data.Priority;\r\n\r\n this.Do(this.classificationRuleEndpoint.MovePriority(params), false, () => {\r\n this.NotifyEntitySaved(e.itemData, TransactionClassificationRule);\r\n });\r\n };\r\n\r\n CalculateFilterExpression(filterValue, selectedFilterOperations, target) {\r\n if (!filterValue) return null;\r\n\r\n return function (data) {\r\n return data.Lines.some(line => \r\n (line.FieldType && line.FieldType.toString().toLowerCase().includes(filterValue.toLowerCase())) ||\r\n (line.MatchType && line.MatchType.toString().toLowerCase().includes(filterValue.toLowerCase())) ||\r\n (line.MatchData && line.MatchData.toString().toLowerCase().includes(filterValue.toLowerCase()))\r\n );\r\n };\r\n }\r\n\r\n OnGridOptionChanged(e) {\r\n if (e.name === 'searchPanel') {\r\n this.searchText = e.value || '';\r\n }\r\n }\r\n \r\n // We'll split match text to multiple spans. Devextreme will highlight matched text for us\r\n HighlightMatch(value: string, searchText: string): string {\r\n if (!searchText || !value) {\r\n return value;\r\n }\r\n \r\n const re = new RegExp(`(${searchText})`, 'gi');\r\n return value.replace(re, '$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 {{cell.data.Company.Name}}\\r\\n {{'lblGlobal' | 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
\";","import { PostingTemplateEndpoint } from './../../../_proxy/endpoints/postingtemplate.endpoint';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { PostingTemplate } from '../../../_proxy/entities/postingtemplate.entity';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { PostingTemplateListParams } from '../../../_proxy/params/postingtemplatelist.param';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-posting-template-list',\r\n templateUrl: './posting-template-list.component.html'\r\n})\r\nexport class PostingTemplateListComponent extends BaseComponent\r\n{\r\n @Input() CompanyID: number;\r\n @Input() OrganizationID: number;\r\n @Input() TransactionCategoryID: number;\r\n @Output() OnUpdateCount = new EventEmitter();\r\n\r\n private _isActiveOnly: boolean = true;\r\n @Input() IsShowActiveOnlyCheckbox: boolean = false;\r\n @Input() set IsActiveOnly(value: boolean) {\r\n if(this._isActiveOnly !== value) {\r\n this._isActiveOnly = value;\r\n this.LoadDataSource();\r\n }\r\n }\r\n get IsActiveOnly() {return this._isActiveOnly; }\r\n\r\n constructor(A: ServiceBagService,\r\n private postingTemplateEndpoint: PostingTemplateEndpoint) \r\n {\r\n super(A, 'PostingTemplateListComponent', 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 == PostingTemplate) this.LoadDataSource();\r\n }\r\n\r\n private LoadDataSource()\r\n {\r\n const params = new PostingTemplateListParams();\r\n params.Companies = this.CompanyID ? [this.CompanyID] : [];\r\n params.Categories = this.TransactionCategoryID ? [this.TransactionCategoryID] : [];\r\n params.LoadActive = this.IsActiveOnly;\r\n\r\n this.DataSources['PostingTemplates'] = new DataSourceCustomAction((options: DataLoadOptions) => this.postingTemplateEndpoint.ListEx(params, options), null, (data) => {\r\n this.OnUpdateCount.emit(data.length);\r\n });\r\n }\r\n\r\n GetLinkParams() {\r\n return { CompanyID: this.CompanyID, OrganizationID: this.OrganizationID, TransactionCategoryID: this.TransactionCategoryID };\r\n }\r\n\r\n}\r\n","export default \"\\r\\n\\r\\n\";","import { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { PostingTemplate } from '@kraken/_proxy/entities/postingtemplate.entity';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-posting-template-grid',\r\n templateUrl: './posting-template-grid.component.html'\r\n})\r\nexport class PostingTemplateGridComponent extends BaseGridComponent {\r\n\r\n @Input() CompanyID: number;\r\n @Input() OrganizationID: number;\r\n @Input() TransactionCategoryID: number;\r\n\r\n @Input() IsShowActiveOnlyCheckbox: boolean;\r\n @Input() IsActiveOnly: boolean = true;\r\n @Output() IsActiveOnlyChange: EventEmitter = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService) \r\n { \r\n super(A, 'PostingTemplateGridComponent', PostingTemplate, BaseState);\r\n }\r\n\r\n OnNavigate(e)\r\n {\r\n this.Navigate([\"/pages/posting-template\", e.data.EntryID], { CompanyID: this.CompanyID, OrganizationID: this.OrganizationID, TransactionCategoryID: this.TransactionCategoryID });\r\n }\r\n\r\n OnToolbarPreparing(e) {\r\n if (this.IsShowActiveOnlyCheckbox) {\r\n e.toolbarOptions.items.unshift({\r\n location: 'after',\r\n template: 'showActiveOnlySettings',\r\n isCustom: true\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 {{'lblAll' | RC:THIS}}\\r\\n
\\r\\n
\\r\\n {{ ('lblCurrencyBookingAccounts' | RC:THIS).replace('{0}', (cell.data.ApplyToBookingAccountsInCurrency | LookupList:LIST('Currencies'))) }}\\r\\n
\\r\\n
\\r\\n
4\\\">\\r\\n {{cell.data.BookingAccounts.length}} {{'lblBookingAccountsLowerCase' | RC:THIS}}\\r\\n
\\r\\n
\\r\\n
\\r\\n {{ bookingAccountLine.BookingAccount.AccountName }} {{ bookingAccountLine.BookingAccount.BookingAccountName }} {{bookingAccountLine.BookingAccount.BookingAccountCode}}\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n
\";","import { ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { PostingTemplateEndpoint } from '../../_proxy/endpoints/postingtemplate.endpoint';\r\nimport { PostingTemplate } from '../../_proxy/entities/postingtemplate.entity';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { Component, ViewChild } from '@angular/core';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { ContextMenuElement, ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { EnumApplyToBookingAccountsTypes } from '../../_proxy/enums';\r\nimport { GenerateJournalEntryDialogComponent } from '@kraken/dialogs/generate-journal-entry-dialog/generate-journal-entry-dialog.component';\r\nimport { Company } from '@kraken/_proxy/entities/company.entity';\r\n\r\nclass State extends BaseState {\r\n IsInitedEntity: boolean;\r\n OrganizationID: number;\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-posting-template',\r\n templateUrl: './posting-template.component.html'\r\n})\r\nexport class PostingTemplateComponent extends BasePageCRUDComponent {\r\n\r\n @ViewChild(GenerateJournalEntryDialogComponent) generateJournalEntryDialog: GenerateJournalEntryDialogComponent;\r\n\r\n constructor(A: ServiceBagService,\r\n private postingTemplateEndpoint: PostingTemplateEndpoint) {\r\n super(A, 'PostingTemplateComponent', PostingTemplate, State, postingTemplateEndpoint);\r\n }\r\n\r\n protected override OnInitComponent(): void {\r\n this.State.OrganizationID = parseInt(this.QueryParams.OrganizationID);\r\n }\r\n\r\n override OnEntityNew() {\r\n this.Entity.IsActive = true;\r\n if(this.QueryParams.CompanyID) {this.Entity.CompanyID = parseInt(this.QueryParams.CompanyID); }\r\n this.Entity.TransactionCategoryID = parseInt(this.QueryParams.TransactionCategoryID);\r\n this.Entity.ApplyToBookingAccounts = EnumApplyToBookingAccountsTypes.All;\r\n this.State.IsInitedEntity = true;\r\n }\r\n\r\n override OnEntityLoaded() {\r\n this.State.IsInitedEntity = true;\r\n\r\n if (!this.State.OrganizationID) { this.State.OrganizationID = this.Entity.OrganizationID; } \r\n }\r\n\r\n override OnEntitySaved() {\r\n if (!this.Entity.IsActive) {\r\n this.NavigateBack();\r\n return;\r\n }\r\n\r\n this.generateJournalEntryDialog.RegenarateJournalEntriesByOrganization(this.State.OrganizationID, () => { this.NavigateBack(); }, () => { this.NavigateBack(); });\r\n this.generateJournalEntryDialog.State.Templates = [this.Entity.EntryID];\r\n this.generateJournalEntryDialog.State.DateFrom = this.Entity.ValidFromDate;\r\n }\r\n\r\n override OnEntityDeleted() {\r\n this.NavigateBack();\r\n }\r\n\r\n override OnInitContextMenus(): ContextMenuElement[] {\r\n if (this.IsAddMode) return undefined;\r\n const menus: ContextMenuElement[] =\r\n [\r\n {\r\n text: this.RC('lblRegenarateJournalEntries'),\r\n visible: this.Entity.IsActive,\r\n onClick: this.OnShowDialogRegenarateJournalEntries.bind(this)\r\n },\r\n {\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 return menus;\r\n }\r\n\r\n OnShowDialogRegenarateJournalEntries()\r\n {\r\n this.generateJournalEntryDialog.RegenarateJournaleEntriesByPostingTemplate(this.Entity.EntryID, this.Entity.TransactionCategoryID, this.Entity.ValidFromDate, this.State.OrganizationID);\r\n }\r\n\r\n OnCompanyChanged(company: Company){\r\n if(company) { this.State.OrganizationID = company.OrganizationID; }\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\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 { JournalEntryView } from './../views/journalentry.view';\r\nimport { JournalEntryReportParams } from './../params/journalentryreport.param';\r\nimport { EnumJournalExportType } from './../enums';\r\n@Injectable()\r\nexport class JournalEntryEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"JournalEntry\", api);}\r\n\t\r\n\r\n public ListEx(Params: JournalEntryReportParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListEx', Params, undefined );\r\n }\r\n\r\n public GetMoveInFile(Params: JournalEntryReportParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'GetMoveInFile', Params, undefined );\r\n }\r\n\r\n public GetMoveInConfig(JournalExportType: EnumJournalExportType) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetMoveInConfig', {JournalExportType: JournalExportType} );\r\n }\r\n\r\n public MarkAsIsExportedManually(Params: JournalEntryReportParams) : Observable\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'MarkAsIsExportedManually', 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 { EnumJournalEntrySources } from './../enums';\r\nimport { EnumJournalEntryStatuses } from './../enums';\r\nimport { Company } from './../entities/company.entity';\r\nexport class JournalEntry extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'JournalEntry';\r\n }\r\n \r\n public CompanyID: number; \r\n public PostingTemplateID: number; \r\n public DownloadID: number; \r\n public UploadID: number; \r\n public Currency: string; \r\n public ReferenceDate: Date; \r\n public DueDate: Date; \r\n public Notes1: string; \r\n public Reference: string; \r\n public Reference2: string; \r\n public IsEditedManually: boolean; \r\n public BookingDocumentNumber: number; \r\n public PostedDate: Date; \r\n public Source: EnumJournalEntrySources; \r\n public Status: EnumJournalEntryStatuses; \r\n public Exception: string; \r\n public Company: Company = new Company; \r\n public Lines: JournalEntryLine[] = []; \r\n public IsExported: boolean; \r\n\tpublic CreatedBy: number;\r\n\tpublic CreatedDate: Date;\r\n}\r\n\r\nexport class JournalEntryLine extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'JournalEntryLine';\r\n }\r\n \r\n public BookingAccountCode: string; \r\n public Credit: number; \r\n public Debit: number; \r\n public ReferenceDate: Date; \r\n public DueDate: Date; \r\n public Notes1: string; \r\n public Reference: string; \r\n public Reference2: 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 { JournalEntry } from './../entities/journalentry.entity';\r\nimport { EnumJournalExportType } from './../enums';\r\nexport class JournalEntryView extends JournalEntry {\r\n constructor() {\r\n super();\r\n this.TypeName = 'JournalEntryView';\r\n }\r\n \r\n public PostingTemplateName: string; \r\n public CompanyName: string; \r\n public Credit: number; \r\n public Debit: number; \r\n public BookingAccountCode: string; \r\n public JournalExportType: EnumJournalExportType; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { MessageBoxDialogComponent } from '@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { JournalEntryReportParams } from '../../../_proxy/params/journalentryreport.param';\r\nimport { JournalEntryEndpoint } from '../../../_proxy/endpoints/journalentry.endpoint';\r\nimport { Component, ViewChild } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { Globals } from '../../../_globals';\r\nimport { EnumCRUDActions, EnumMessageBoxTypes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { JournalEntry } from '../../../_proxy/entities/journalentry.entity';\r\nimport { FilterSettings } from '../../../components/filter/filter.component';\r\nimport { BaseReportComponent, BaseReportState } from '../../base-report/base-report.component';\r\nimport { JournalEntryGridComponent } from './journal-entry-grid.component';\r\nimport { JournalEntryView } from '@kraken/_proxy/views/journalentry.view';\r\nimport { EnumBookingAccountSubtypes, EnumJournalEntrySources, EnumJournalEntryStatuses } from '@kraken/_proxy/enums';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { QuickFilterSettings } from '@kraken/components/quick-filter/quick-filter.component';\r\nimport { ListTransactionCategoriesParams } from '@kraken/_proxy/params/listtransactioncategories.param';\r\nimport { TransactionCategoryEndpoint } from '@kraken/_proxy/endpoints/transactioncategory.endpoint';\r\nimport { EnumJournalExportType } from '../../../../../../../Kraken/Angular/ClientApp/_proxy/enums';\r\n\r\nclass State extends BaseReportState {\r\n IsNotExportedOnly = true;\r\n EnumMessageBoxTypes = EnumMessageBoxTypes;\r\n SelectedJournalEntriesIDs: number[] = [];\r\n ReferenceDateFrom = Globals.ThirtyDaysAgoDate;\r\n ReferenceDateTo = Globals.Today;\r\n CreatedDateFrom = Globals.ThirtyDaysAgoDate;\r\n CreatedDateTo = Globals.Today;\r\n PostingDateFrom = Globals.ThirtyDaysAgoDate;\r\n PostingDateTo = Globals.Today;\r\n Sources: EnumJournalEntrySources[];\r\n Statuses: EnumJournalEntryStatuses[];\r\n JournalEntries: JournalEntryView[] = [];\r\n TransactionCategoriesDataSource;\r\n TransactionCategory: number[];\r\n JournalExportType: EnumJournalExportType;\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-journal-entry-list',\r\n templateUrl: './journal-entry-list.component.html'\r\n})\r\nexport class JournalEntryListComponent extends BaseReportComponent {\r\n @ViewChild('reportGrid') reportGrid: JournalEntryGridComponent;\r\n @ViewChild('messageBox') messageBox: MessageBoxDialogComponent;\r\n\r\n constructor(A: ServiceBagService, private Endpoint: JournalEntryEndpoint, public screenService: ScreenService,\r\n private transactionCategoryEndpoint: TransactionCategoryEndpoint) {\r\n super(A, 'JournalEntryListComponent', State);\r\n }\r\n\r\n protected override OnGetCustomFilterSettings() {\r\n return {\r\n Company: { IsVisible: true, IsMultiple: true },\r\n Account: { IsVisible: true, IsMultiple: true },\r\n BookingAccount: {\r\n IsVisible: true, IsMultiple: true,\r\n Params: { BookingAccountSubtypes: [EnumBookingAccountSubtypes.Current, EnumBookingAccountSubtypes.CreditCard] }\r\n },\r\n CurrencyFilter: { IsVisible: true },\r\n AccountGroup: { IsVisible: true, IsMultiple: true },\r\n\r\n IsAmountsVisible: true,\r\n MaxReportDate: Globals.Today\r\n } as FilterSettings;\r\n }\r\n\r\n protected override OnResetFilterValues() {\r\n super.OnResetFilterValues();\r\n this.State.FilterValues.Currency = null;\r\n this.State.ReferenceDateFrom = Globals.ThirtyDaysAgoDate;\r\n this.State.ReferenceDateTo = Globals.Today;\r\n this.State.CreatedDateFrom = null;\r\n this.State.CreatedDateTo = null;\r\n this.State.PostingDateFrom = null;\r\n this.State.PostingDateTo = null;\r\n this.State.IsNotExportedOnly = true;\r\n this.State.Sources = [];\r\n this.State.Statuses = [];\r\n }\r\n\r\n protected override OnGetCustomQuickFilterSettings() {\r\n return {\r\n Company: { IsVisible: true, IsMultiple: true },\r\n Account: { IsVisible: true, IsMultiple: true },\r\n BookingAccount: {\r\n IsVisible: true, IsMultiple: true,\r\n Params: { BookingAccountSubtypes: [EnumBookingAccountSubtypes.Current, EnumBookingAccountSubtypes.CreditCard] }\r\n },\r\n } as QuickFilterSettings;\r\n }\r\n\r\n protected override OnGetToolbarSettings(): ToolbarSettings {\r\n const toolbarSettings = super.OnGetToolbarSettings();\r\n toolbarSettings && (toolbarSettings.IsAllowPrint = false);\r\n return toolbarSettings;\r\n }\r\n\r\n override OnInitComponentFinished() {\r\n super.OnInitComponentFinished();\r\n if (Object.entries(this.QueryParams).length >= 0) this.G && this.G.grid.instance.clearFilter();\r\n this.LoadTransactionCategories();\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity,\r\n ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n if (ExternalEntityType == JournalEntry || ExternalEntityType == JournalEntryView) this.OnLoadData();\r\n }\r\n\r\n protected override InitStateFromQuery() {\r\n super.InitStateFromQuery();\r\n if (this.QueryParams.Date) this.State.FilterValues.DateTo = new Date(this.QueryParams.Date);\r\n if (this.State.FilterValues.DateTo) {\r\n this.State.FilterValues.DateFrom = new Date(this.State.FilterValues.DateTo.getFullYear(),\r\n this.State.FilterValues.DateTo.getMonth(), this.State.FilterValues.DateTo.getDate() - 30);\r\n }\r\n }\r\n\r\n protected override OnLoadData() {\r\n if (!Globals.OrganizationID) {\r\n this.DataSources['JournalEntries'] = undefined;\r\n return;\r\n }\r\n\r\n const params = this.GetParams();\r\n params.DateFrom = this.State.CreatedDateFrom;\r\n params.DateTo = this.State.CreatedDateTo;\r\n params.IsNotExportedOnly = this.State.IsNotExportedOnly;\r\n params.ReferenceDateFrom = this.State.ReferenceDateFrom;\r\n params.ReferenceDateTo = this.State.ReferenceDateTo;\r\n params.PostingDateFrom = this.State.PostingDateFrom;\r\n params.PostingDateTo = this.State.PostingDateTo;\r\n params.Sources = this.State.Sources;\r\n params.Statuses = this.State.Statuses;\r\n params.Categories = this.State.TransactionCategory;\r\n\r\n this.State.IsLoading = true;\r\n this.DataSources['JournalEntries'] = new DataSourceCustomAction(\r\n () => this.Endpoint.ListEx(params), undefined, (data: JournalEntryView[]) => {\r\n const uniqueCompanies = Array.from(new Set(data.map(entry => entry.CompanyID)));\r\n if (uniqueCompanies?.length === 1 && data[0].JournalExportType !== EnumJournalExportType.Automatic) {\r\n this.State.JournalExportType = data[0].JournalExportType;\r\n } else {\r\n this.State.JournalExportType = null;\r\n }\r\n this.State.IsLoading = false;\r\n }, false, undefined, ['EntryID', 'LineID']);\r\n }\r\n\r\n protected override OnOrganizationChanged(v: number) {\r\n this.State.FilterValues.OrganizationID = v;\r\n this.State.FilterValues.Currency = null;\r\n super.OnOrganizationChanged();\r\n this.LoadTransactionCategories();\r\n }\r\n\r\n OnSelectionChanged(selectedJournalEntries: number[]) {\r\n this.State.SelectedJournalEntriesIDs = selectedJournalEntries;\r\n }\r\n\r\n OnSourcesChanged() {\r\n this.State.TransactionCategory = null;\r\n }\r\n\r\n OnLoadMoveInDat(data?: JournalEntryView) {\r\n if (!Globals.OrganizationID) return;\r\n\r\n const params = this.GetParams();\r\n params.IsNotExportedOnly = this.State.IsNotExportedOnly;\r\n params.JournalEntries = data?.EntryID ? [data.EntryID] : this.State.SelectedJournalEntriesIDs;\r\n params.JournalExportType = this.State.JournalExportType ?? data.JournalExportType;\r\n\r\n this.Do(this.Endpoint.GetMoveInFile(params), true, (response: BaseDataResponse) => {\r\n // Load file\r\n const oBlob = Utils.ConvertToBlob(response.Data, 'octet/stream');\r\n const oLink = document.createElement('a');\r\n oLink.href = window.URL.createObjectURL(oBlob);\r\n oLink.download = params.JournalExportType === EnumJournalExportType.Movein1 ? 'MOVEIN.DOC' : 'MOVEIN.DAT';\r\n oLink.click();\r\n\r\n this.Do(this.Endpoint.GetMoveInConfig(params.JournalExportType), false, (response) => {\r\n // Load file\r\n if(response.Data){\r\n const oBlob = Utils.ConvertToBlob(response.Data, 'octet/stream');\r\n const oLink = document.createElement('a');\r\n oLink.href = window.URL.createObjectURL(oBlob);\r\n oLink.download = 'MOVEIN.PRM';\r\n oLink.click();\r\n }\r\n });\r\n\r\n // Save IsExportedManual\r\n this.messageBox.ShowDialogShort(() => {\r\n this.Do(this.Endpoint.MarkAsIsExportedManually(params), true, () => {\r\n this.OnLoadData();\r\n });\r\n });\r\n });\r\n }\r\n\r\n LoadTransactionCategories() {\r\n if (!this.State.FilterValues.OrganizationID) {\r\n return;\r\n }\r\n\r\n const params = new ListTransactionCategoriesParams();\r\n params.OrganizationID = this.State.FilterValues.OrganizationID;\r\n params.LoadGlobal = true;\r\n params.Companies = this.State.FilterValues.Company as number[];\r\n // params.Sides = [this.Side];\r\n\r\n this.Do(this.transactionCategoryEndpoint.ListEx(params, null), false, (response) => {\r\n this.State.TransactionCategoriesDataSource = response.Entities;\r\n });\r\n }\r\n\r\n OnExportMoveInDat(data: JournalEntryView) {\r\n this.OnLoadMoveInDat(data);\r\n }\r\n\r\n OnReferenceDateRangeSelected(e) {\r\n if (!e.itemData) return;\r\n this.State.ReferenceDateFrom = e.itemData.DateFrom;\r\n this.State.ReferenceDateTo = e.itemData.DateTo;\r\n }\r\n\r\n OnReferenceDateFromChange(dateFrom) {\r\n if (dateFrom && dateFrom.value) {\r\n this.State.ReferenceDateFrom = new Date(dateFrom.value.setHours(0, 0, 0));\r\n } else {\r\n this.State.ReferenceDateFrom = null;\r\n }\r\n\r\n }\r\n\r\n OnReferenceDateToChange(dateTo) {\r\n if (dateTo && dateTo.value) {\r\n this.State.ReferenceDateTo = new Date(dateTo.value.setHours(23, 59, 59, 999));\r\n } else {\r\n this.State.ReferenceDateTo = null;\r\n }\r\n\r\n }\r\n\r\n OnCreatedDateRangeSelected(e) {\r\n if (!e.itemData) {\r\n return;\r\n }\r\n this.State.CreatedDateFrom = e.itemData.DateFrom;\r\n this.State.CreatedDateTo = e.itemData.DateTo;\r\n }\r\n\r\n OnCreatedDateFromChange(dateFrom) {\r\n if (dateFrom && dateFrom.value) {\r\n this.State.CreatedDateFrom = new Date(dateFrom.value.setHours(0, 0, 0));\r\n } else {\r\n this.State.CreatedDateFrom = null;\r\n }\r\n\r\n }\r\n\r\n OnCreatedDateToChange(dateTo) {\r\n if (dateTo && dateTo.value) {\r\n this.State.CreatedDateTo = new Date(dateTo.value.setHours(23, 59, 59, 999));\r\n } else {\r\n this.State.CreatedDateTo = null;\r\n }\r\n }\r\n\r\n OnPostingDateRangeSelected(e) {\r\n if (!e.itemData) {\r\n return;\r\n }\r\n this.State.PostingDateFrom = e.itemData.DateFrom;\r\n this.State.PostingDateTo = e.itemData.DateTo;\r\n }\r\n\r\n OnPostingDateFromChange(dateFrom) {\r\n if (dateFrom && dateFrom.value) {\r\n this.State.PostingDateFrom = new Date(dateFrom.value.setHours(0, 0, 0));\r\n } else {\r\n this.State.PostingDateFrom = null;\r\n }\r\n }\r\n\r\n OnPostingDateToChange(dateTo) {\r\n if (dateTo && dateTo.value) {\r\n this.State.PostingDateTo = new Date(dateTo.value.setHours(23, 59, 59, 999));\r\n } else {\r\n this.State.PostingDateTo = null;\r\n }\r\n }\r\n\r\n OnStatusesChanged(e) {\r\n if (this.State.Statuses && this.State.Statuses.length > 0 && this.State.IsNotExportedOnly) {\r\n this.State.IsNotExportedOnly = 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\";","import { EventEmitter } from '@angular/core';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, Input, Output } from '@angular/core';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { JournalEntry } from '@kraken/_proxy/entities/journalentry.entity';\r\nimport { ContextMenuElement } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { JournalEntryView } from '@kraken/_proxy/views/journalentry.view';\r\nimport { CellPreparedEvent } from 'devextreme/ui/tree_list';\r\nimport { EnumJournalExportType } from '../../../../../../../Kraken/Angular/ClientApp/_proxy/enums';\r\n\r\nclass State extends BaseState {\r\n SelectedJournalEntries: number[] = [];\r\n SelectedRows: any[] = [];\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-journal-entry-grid',\r\n templateUrl: './journal-entry-grid.component.html',\r\n styleUrls: ['./journal-entry-grid.component.scss']\r\n})\r\nexport class JournalEntryGridComponent extends BaseGridComponent{\r\n @Input() IsGrouped: boolean;\r\n @Input() IsLoading: boolean;\r\n @Input() IsFlatMode: boolean;\r\n\r\n @Output() SelectionChanged: EventEmitter = new EventEmitter();\r\n @Output() OnExportMoveInDat = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'JournalEntryGridComponent', JournalEntry, State);\r\n }\r\n\r\n OnInitialized(e) {\r\n e.component.columnOption(\"command:adaptive\", \"visible\", true);\r\n e.component.option(\"scrolling.timeout\", 0);\r\n }\r\n\r\n OnNavigate(e) {\r\n if (!e.data.EntryID) return;\r\n this.Navigate(['/pages/journal-entry', e.data.EntryID]);\r\n }\r\n\r\n OnSelectionChanged(e) {\r\n // Select/Deselect all lines of a journal entry\r\n // We should to check the case when we select/unselect only one row\r\n if (e.currentSelectedRowKeys.length === 1) {\r\n // Find all lines for a current Journal entry\r\n let lines = this.GetItemItems(e.component.getDataSource().items()).filter(x => x.EntryID === e.currentSelectedRowKeys[0].EntryID);\r\n // Filter lines which not selected yet\r\n lines = lines.filter(line => !this.State.SelectedRows.find(selectedLine => selectedLine.EntryID === line.EntryID && selectedLine.LineID === line.LineID));\r\n if (lines.length > 0) {\r\n // Select other lines \r\n this.State.SelectedRows = this.State.SelectedRows.concat(lines);\r\n }\r\n } else if (e.currentDeselectedRowKeys.length === 1) {\r\n // Find all lines for a current Journal entry\r\n let lines = this.GetItemItems(e.component.getDataSource().items()).filter(x => x.EntryID === e.currentDeselectedRowKeys[0].EntryID);\r\n // Filter lines which selected yet\r\n lines = lines.filter(line => this.State.SelectedRows.find(selectedLine => selectedLine.EntryID === line.EntryID && selectedLine.LineID === line.LineID));\r\n if (lines.length > 0) {\r\n // Deselect other lines\r\n this.State.SelectedRows = this.State.SelectedRows.filter(selectedLine => !lines.find(line => selectedLine.EntryID === line.EntryID && selectedLine.LineID === line.LineID));\r\n }\r\n }\r\n\r\n this.State.SelectedJournalEntries = this.State.SelectedRows.map(x => x.EntryID);\r\n this.SelectionChanged.emit(this.State.SelectedJournalEntries);\r\n }\r\n\r\n private GetItemItems(items: any[]) {\r\n let result = [];\r\n\r\n for (let i = 0; i < items.length; i++) {\r\n if (items[i].items) {\r\n result.push(this.GetItemItems(items[i].items));\r\n } else {\r\n result.push([items[i]]);\r\n }\r\n }\r\n\r\n return result.flat(1);\r\n }\r\n\r\n GetStatusColor(data) {\r\n switch (data.Status) {\r\n case this.Enums.EnumJournalEntryStatuses.Posted:\r\n case this.Enums.EnumJournalEntryStatuses.PostedInJournalVoucher:\r\n case this.Enums.EnumJournalEntryStatuses.PostedAndReconcilled:\r\n return 'green-cyan';\r\n case this.Enums.EnumJournalEntryStatuses.ExportedManually:\r\n case this.Enums.EnumJournalEntryStatuses.SkippedAlreadyReconcilled:\r\n return 'base-color';\r\n case this.Enums.EnumJournalEntryStatuses.Exception:\r\n return 'cinnabar';\r\n case this.Enums.EnumJournalEntryStatuses.Draft:\r\n return 'olive';\r\n }\r\n }\r\n\r\n ExportMoveInDat(row: JournalEntryView) {\r\n this.OnExportMoveInDat.emit(row);\r\n }\r\n\r\n protected override GetGridRowContextMenu(options?:any): ContextMenuElement[] { \r\n return [{\r\n text: options?.data?.JournalExportType === EnumJournalExportType.Movein1 ? this.RC('lblExportMoveInDoc'): this.RC('lblExportMoveInDat'),\r\n visible: true,\r\n onClick: () => this.ExportMoveInDat(options.data)\r\n }];\r\n }\r\n\r\n OnCellPrepared(event: CellPreparedEvent) {\r\n const { rowType, row, cellElement, column } = event;\r\n if (rowType === 'data') {\r\n const data = row.data as JournalEntryView;\r\n if (data.JournalExportType === EnumJournalExportType.Automatic && column.type === 'buttons'\r\n && column.name == 'gridRowContextMenu') {\r\n cellElement.innerHTML='';\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
{{cell.data.Debit | formatNumberSum }}
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
{{cell.data.Credit | 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 {{data.displayValue}}\\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 { BaseParamsFilter } from './../entities/baseparamsfilter.entity';\r\nimport { EnumJournalEntrySources } from './../enums';\r\nimport { EnumJournalEntryStatuses } from './../enums';\r\nimport { EnumJournalExportType } from '../../../../../../Kraken/Angular/ClientApp/_proxy/enums';\r\nexport class JournalEntryReportParams extends BaseParamsFilter {\r\n constructor() {\r\n super();\r\n this.TypeName = 'JournalEntryReportParams';\r\n }\r\n \r\n public DateFrom: Date; \r\n public DateTo: Date; \r\n public ReferenceDateFrom: Date; \r\n public ReferenceDateTo: Date; \r\n public PostingDateFrom: Date; \r\n public PostingDateTo: Date; \r\n public AmountFrom: number; \r\n public AmountTo: number; \r\n public Categories: number[]; \r\n public IsNotExportedOnly: boolean; \r\n public JournalEntries: number[]; \r\n public Sources: EnumJournalEntrySources[]; \r\n public Statuses: EnumJournalEntryStatuses[]; \r\n public JournalExportType: EnumJournalExportType; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { JournalEntryEndpoint } from '../../_proxy/endpoints/journalentry.endpoint';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { Component, ViewChild } from '@angular/core';\r\nimport { BaseDataResponse, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { JournalEntryView } from '../../_proxy/views/journalentry.view';\r\nimport DxDataGrid from \"devextreme/ui/data_grid\";\r\nimport { ContextMenuElement, ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { JournalEntryReportParams } from '@kraken/_proxy/params/journalentryreport.param';\r\nimport { MessageBoxDialogComponent } from '@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\nimport { EnumMessageBoxTypes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { JournalEntry } from '@kraken/_proxy/entities/journalentry.entity';\r\nimport { EnumJournalExportType } from '../../../../../../Kraken/Angular/ClientApp/_proxy/enums';\r\n\r\nclass State extends BaseState {\r\n IsValidGrid: boolean = true;\r\n IsReadOnly: boolean = false;\r\n EnumMessageBoxTypes = EnumMessageBoxTypes;\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-journal-entry',\r\n templateUrl: './journal-entry.component.html'\r\n})\r\nexport class JournalEntryComponent extends BasePageCRUDComponent {\r\n @ViewChild('grid') grid: DxDataGrid;\r\n @ViewChild('messageBox') messageBox: MessageBoxDialogComponent;\r\n\r\n constructor(A: ServiceBagService,\r\n Endpoint: JournalEntryEndpoint) {\r\n super(A, 'JournalEntryComponent', JournalEntryView, State, Endpoint);\r\n }\r\n\r\n override OnEntityLoaded() {\r\n if (this.Entity.IsExported) this.State.IsReadOnly = true;\r\n }\r\n\r\n override OnInitComponent() {\r\n if (this.IsAddMode) this.NavigateBack();\r\n }\r\n\r\n override OnEntitySaved() {\r\n this.NavigateBack();\r\n }\r\n\r\n\r\n override OnIsDirtyDisabled() { return true; };\r\n\r\n override OnGetToolbarSettings() {\r\n return {\r\n IsSupportHistory: true,\r\n } as ToolbarSettings;\r\n }\r\n\r\n override OnInitContextMenus(): ContextMenuElement[] {\r\n const menus: ContextMenuElement[] =[];\r\n if (this.Entity.JournalExportType !== EnumJournalExportType.Automatic) {\r\n const menuName = this.Entity.JournalExportType === EnumJournalExportType.Movein1 ? this.RC('lblExportMoveInDoc') : this.RC('lblExportMoveInDat');\r\n menus.push( {\r\n text: menuName,\r\n visible: true,\r\n onClick: this.OnExportMoveInDat.bind(this)\r\n });\r\n }\r\n\r\n return menus;\r\n }\r\n\r\n OnExportMoveInDat() {\r\n this.OnLoadMoveInDat(this.Entity.EntryID);\r\n }\r\n\r\n OnLoadMoveInDat(EntryID?: number) {\r\n\r\n const params = new JournalEntryReportParams();\r\n params.JournalEntries = [EntryID];\r\n params.JournalExportType = this.Entity.JournalExportType;\r\n\r\n this.Do(this.Endpoint.GetMoveInFile(params), true, (response: BaseDataResponse) => {\r\n // Load file\r\n let oBlob = Utils.ConvertToBlob(response.Data, 'octet/stream');\r\n let oLink = document.createElement('a');\r\n oLink.href = window.URL.createObjectURL(oBlob);\r\n oLink.download = params.JournalExportType === EnumJournalExportType.Movein1 ? \"MOVEIN.DOC\" : \"MOVEIN.DAT\";\r\n oLink.click();\r\n\r\n this.Do(this.Endpoint.GetMoveInConfig(this.Entity.JournalExportType), false, (response) => {\r\n // Load file\r\n if (response.Data) {\r\n let oBlob = Utils.ConvertToBlob(response.Data, 'octet/stream');\r\n let oLink = document.createElement('a');\r\n oLink.href = window.URL.createObjectURL(oBlob);\r\n oLink.download = \"MOVEIN.PRM\";\r\n oLink.click();\r\n }\r\n });\r\n\r\n // Save IsExportedManual\r\n this.messageBox.ShowDialogShort(() => {\r\n this.Do(this.Endpoint.MarkAsIsExportedManually(params), true, () => {\r\n this.NotifyEntitySaved(new JournalEntry, JournalEntry);\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\";","import { Component, ViewChild } 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 { BalanceEndpoint } from '../../_proxy/endpoints/balance.endpoint';\r\nimport { Globals } from '../../_globals';\r\nimport { EnumBalanceHistoryReportMode, EnumBanks, EnumBookingAccountSubtypes } from '../../_proxy/enums';\r\nimport { BalanceReportParams } from '../../_proxy/params/balancereport.param';\r\nimport { BalanceHistoryReportGridComponent } from './balance-history-report-grid/balance-history-report-grid.component';\r\nimport { BalanceByPeriodView } from '../../_proxy/views/balancebyperiod.view';\r\nimport { FilterSettings } from '../../components/filter/filter.component';\r\nimport { BaseReportComponent, BaseReportState } from '../base-report/base-report.component';\r\nimport { QuickFilterSettings } from '@kraken/components/quick-filter/quick-filter.component';\r\n\r\nclass State extends BaseReportState {\r\n MaxReportDate: Date = Globals.Yesterday;\r\n Periods: BalanceByPeriodView[] = [];\r\n BalancesByPeriods: any[];\r\n IsShowOriginalAmount = false;\r\n Mode: EnumBalanceHistoryReportMode = EnumBalanceHistoryReportMode.Monthly;\r\n CountDateRanges: number = 1;\r\n BalanceType = 'Actual';\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-balance-history-report',\r\n templateUrl: './balance-history-report.component.html',\r\n styleUrls: ['./balance-history-report.component.scss']\r\n})\r\nexport class BalanceHistoryReportComponent extends BaseReportComponent {\r\n\r\n @ViewChild('reportGrid') reportGrid: BalanceHistoryReportGridComponent;\r\n\r\n constructor(A: ServiceBagService, private balanceEndpoint: BalanceEndpoint, screenService: ScreenService) {\r\n super(A, 'BalanceHistoryReportComponent', State);\r\n }\r\n\r\n protected override OnGetCustomFilterSettings() {\r\n return {\r\n Company: { IsVisible: true, IsMultiple: true },\r\n AccountGroup: { IsVisible: true, IsMultiple: true },\r\n Account: { IsVisible: true, IsMultiple: true },\r\n CurrencyFilter: { IsVisible: true, IsMultiple: true },\r\n BookingAccountSubtype: { IsVisible: true, IsMultiple: true },\r\n BookingAccount: { IsVisible: true, IsMultiple: true },\r\n Bank: { IsVisible: true, IsMultiple: true },\r\n Currency: { IsVisible: true }\r\n } as FilterSettings;\r\n }\r\n\r\n protected override OnGetCustomQuickFilterSettings(): QuickFilterSettings {\r\n return {\r\n Company: { IsVisible: true, IsMultiple: true },\r\n Account: { IsVisible: true, IsMultiple: true },\r\n BookingAccount: { IsVisible: true, IsMultiple: true }\r\n } as QuickFilterSettings;\r\n }\r\n\r\n protected override OnResetFilterValues() {\r\n super.OnResetFilterValues();\r\n this.State.FilterValues.DateFrom = Globals.BeginningOfYear;\r\n this.State.FilterValues.DateTo = Globals.Yesterday;\r\n }\r\n\r\n protected override OnBeforeLoadData() {\r\n super.OnBeforeLoadData();\r\n this.reportGrid.IsShowOriginalAmount = this.State.IsShowOriginalAmount;\r\n }\r\n\r\n protected override OnLoadData() {\r\n if (!this.State.FilterValues.OrganizationID) {\r\n this.State.Periods = this.State.BalancesByPeriods = [];\r\n return;\r\n }\r\n this.State.IsLoading = true;\r\n const params = this.GetParams();\r\n params.Mode = this.State.Mode;\r\n params.DateFrom = this.State.FilterValues.DateFrom;\r\n params.DateTo = this.State.FilterValues.DateTo;\r\n params.Date = this.State.FilterValues.DateTo;\r\n\r\n this.Do(this.balanceEndpoint.ListForPeriods(params, null), false, (data) => {\r\n this.State.Periods = data.Entities.length ? data.Entities[0].BalancesByPeriods : [];\r\n this.State.BalancesByPeriods = data.Entities;\r\n this.State.IsLoading = false;\r\n });\r\n }\r\n\r\n OnBalanceTypeChanged() {\r\n this.OnLoadData();\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\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 { Balance } from '@kraken/_proxy/entities/balance.entity';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { ServiceBagService, ServiceBagServices } 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 { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { formatNumber } from 'devextreme/localization';\r\nimport { BalanceByPeriodView } from '../../../_proxy/views/balancebyperiod.view';\r\n\r\nclass State extends BaseState {\r\n IsExporting = false;\r\n TotalSum = 0;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-balance-history-report-grid',\r\n templateUrl: './balance-history-report-grid.component.html',\r\n styleUrls: ['./balance-history-report-grid.component.scss']\r\n})\r\nexport class BalanceHistoryReportGridComponent extends BaseGridComponent {\r\n\r\n @Input() DisplayCurrency: string;\r\n @Input() DateFrom: Date;\r\n @Input() DateTo: Date;\r\n @Input() Periods: BalanceByPeriodView[];\r\n @Input() IsShowOriginalAmount: boolean;\r\n @Input() IsFlatMode: boolean;\r\n @Input() IsLoading: boolean = false;\r\n @Input() BalanceType: string;\r\n\r\n private _isClearingGrouping: boolean;\r\n\r\n constructor(A: ServiceBagService, public screenService: ScreenService) {\r\n super(A, 'BalanceHistoryReportGridComponent', Balance, State);\r\n this.BindHandler('OnGoToTransactions');\r\n this.BindHandler('OnCalculateSummary');\r\n this.BindHandler('GetGroupRowCaption');\r\n this.BindHandler('GetBalanceAmountSummaryDisplayFormat');\r\n }\r\n\r\n OnInitialized(e) {\r\n e.component.columnOption('command:adaptive', 'visible', true);\r\n }\r\n\r\n OnOptionChanged(e) {\r\n if (e.fullName.endsWith('.groupIndex') && e.previousValue != null && !e.value) this._isClearingGrouping = true;\r\n }\r\n\r\n OnContentReady(e) {\r\n if (this.IsFlatMode || this._isClearingGrouping) {\r\n this._isClearingGrouping = false;\r\n return;\r\n }\r\n\r\n const gridInstance = e.component.instance();\r\n const currentState = e.component.state();\r\n\r\n if (currentState && Object.keys(currentState).length) {\r\n const stateStoring = e.component.option('stateStoring');\r\n const savedState = stateStoring.customLoad();\r\n if (savedState && !Utils.IsEquals(currentState, savedState, true)) {\r\n const columns = gridInstance.option('columns');\r\n columns.forEach(x => {\r\n const savedColumn = savedState.columns.find(c => c.name === x.name);\r\n if (!savedColumn || savedColumn.groupIndex == null || savedColumn.groupIndex === x.groupIndex) return;\r\n\r\n gridInstance.columnOption(x.name, 'groupIndex', savedColumn.groupIndex);\r\n });\r\n }\r\n return;\r\n }\r\n\r\n gridInstance.columnOption('CompanyName', 'groupIndex', 0);\r\n gridInstance.columnOption('AccountName', 'groupIndex', 1);\r\n gridInstance.columnOption('Subtype', 'groupIndex', 2);\r\n // TODO: if needed to other grids -> move to BaseGridComponent + add abitility to override GetDefaultGridgroupings() in child\r\n // with some structure such { 'ColumnName' : groupIndex , 'ColumnName1': groupIndex1, ... }\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 GetGroupRowCaption(e) {\r\n const summaryItem = e.summaryItems && e.summaryItems[0];\r\n if (!summaryItem || !summaryItem.value || !summaryItem.valueFormat) return e.displayValue;\r\n const value = summaryItem.value;\r\n const currencyText = this.DisplayCurrency ? (this.LISTITEMX('Currencies', this.DisplayCurrency) as any).Symbol : '';\r\n return `${e.displayValue} (${formatNumber(value, summaryItem.valueFormat)} ${currencyText || e.displayValue})`;\r\n }\r\n\r\n OnGoToTransactions(cell) {\r\n if (cell.rowType !== 'data' || !cell.column.name) return;\r\n\r\n const currentPeriodBalance = this.GetCurrentPeriodBalance(cell);\r\n if (!currentPeriodBalance) return;\r\n\r\n const row = cell.data;\r\n this.Navigate(['/pages/transaction-report'], {\r\n OrganizationID: row.OrganizationID,\r\n CompanyID: row.CompanyID,\r\n AccountID: row.AccountID,\r\n BookingAccountID: row.BookingAccountID,\r\n DateFrom: currentPeriodBalance.PeriodDateFrom,\r\n DateTo: currentPeriodBalance.PeriodDateTo\r\n });\r\n }\r\n\r\n GetCurrentPeriodBalance(cell): BalanceByPeriodView {\r\n const currentPeriodTitle = cell.column.name;\r\n return cell.data.BalancesByPeriods.find(x => x.PeriodTitle === currentPeriodTitle);\r\n }\r\n\r\n GetValueForCurrentPeriod(cell, fieldName) {\r\n const currentPeriodBalance = this.GetCurrentPeriodBalance(cell);\r\n\r\n switch (fieldName) {\r\n case 'BalanceAmount':\r\n fieldName = this.BalanceType === 'Actual' ? 'BalanceAmount' : 'BalanceAmountNominal';\r\n break;\r\n case 'BalanceAmountdDifference':\r\n fieldName = this.BalanceType === 'Actual' ? 'BalanceAmountdDifference' : 'BalanceAmountdDifferenceNominal';\r\n break;\r\n }\r\n\r\n return currentPeriodBalance && currentPeriodBalance[fieldName];\r\n }\r\n\r\n calculateCellValue(data) {\r\n const currentPeriodTitle = this['name'];\r\n const currentPeriodBalance = data.BalancesByPeriods.find(x => x.PeriodTitle === currentPeriodTitle);\r\n\r\n if(!currentPeriodBalance) {\r\n return;\r\n }\r\n \r\n return this.BalanceType === 'Actual'\r\n ? currentPeriodBalance.BalanceAmount\r\n : currentPeriodBalance.BalanceAmountNominal;\r\n }\r\n\r\n calculateBalanceDifference(data) {\r\n const currentPeriodTitle = this['name'].replace('Difference_', '');\r\n const currentPeriodBalance = data.BalancesByPeriods.find(x => x.PeriodTitle === currentPeriodTitle);\r\n\r\n if(!currentPeriodBalance) {\r\n return;\r\n }\r\n\r\n return this.BalanceType === 'Actual'\r\n ? currentPeriodBalance.BalanceAmountdDifference\r\n : currentPeriodBalance.BalanceAmountdDifferenceNominal;\r\n }\r\n\r\n OnCalculateSummary(e) {\r\n const [type, colName] = e.name.split('|');\r\n\r\n if (type !== 'totalDifference') { \r\n const currencyGroupIndex = this.G.grid.instance.columnOption('Currency', 'groupIndex');\r\n if (this.DisplayCurrency || e.groupIndex == currencyGroupIndex) {\r\n if (e.summaryProcess == 'start') e.totalValue = 0;\r\n if (e.summaryProcess == 'calculate') e.totalValue += e.value;\r\n }\r\n } else {\r\n if (e.summaryProcess === 'start') {\r\n e.totalValue = 0;\r\n if(this.Periods && colName == this.Periods[0]?.PeriodTitle) {\r\n this.State.TotalSum = 0;\r\n }\r\n }\r\n if (e.summaryProcess === 'calculate') {\r\n e.totalValue += e.value;\r\n }\r\n if (e.summaryProcess === 'finalize') {\r\n const currentTotal = e.totalValue;\r\n e.totalValue = currentTotal - this.State.TotalSum;\r\n this.State.TotalSum = currentTotal;\r\n }\r\n } \r\n }\r\n\r\n OnCellPrepared(e) {\r\n if (e.rowType === 'totalFooter' && e.column.index > 1) {\r\n const { summaryItems } = e;\r\n if (!summaryItems) {\r\n return;\r\n }\r\n\r\n const [filtered] = summaryItems.filter(i => i.name.startsWith('totalDifference'));\r\n\r\n if (!filtered || (typeof filtered.value !== 'number')) {\r\n return;\r\n }\r\n\r\n e.cellElement.classList.add(\r\n filtered.value < 0 ? 'negative-amount' : (\r\n filtered.value == 0 ? 'zero-amount' : 'positive-amount'\r\n )\r\n );\r\n }\r\n }\r\n\r\n GetBalanceAmountSummaryDisplayFormat(e) {\r\n const currencyText = this.DisplayCurrency ? (this.LISTITEMX('Currencies', this.DisplayCurrency) as any).Symbol : '';\r\n return `${e.valueText} ${currencyText}`;\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n {{GetGroupRowCaption(data) | LookupList: LIST('BookingAccountSubTypes')}}\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\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 ? 'positive-amount' : 'negative-amount'\\\">\\r\\n
\\r\\n {{GetValueForCurrentPeriod(cell, 'BalanceAmount') | formatNumberSum}}\\r\\n
\\r\\n {{DisplayCurrency || cell.data.Currency |\\r\\n LookupList:LIST('Currencies'):'Symbol' }}\\r\\n
\\r\\n
0 ? 'positive-amount' : 'negative-amount'\\\">\\r\\n
\\r\\n {{GetValueForCurrentPeriod(cell, 'BalanceAmountdDifference') > 0 ? '+' :\\r\\n ''}}{{GetValueForCurrentPeriod(cell, 'BalanceAmountdDifference') | formatNumberSum}}\\r\\n
\\r\\n {{DisplayCurrency || cell.data.Currency |\\r\\n LookupList:LIST('Currencies'):'Symbol' }}\\r\\n
\\r\\n \\r\\n
\\r\\n
0 ? 'positive-amount' : 'negative-amount'\\\">\\r\\n
\\r\\n {{GetValueForCurrentPeriod(cell, 'BalanceOriginal') | formatNumberSum}}\\r\\n
\\r\\n {{cell.data.Currency | LookupList:LIST('Currencies'):'Symbol' }}\\r\\n
\\r\\n
\\r\\n {{GetValueForCurrentPeriod(cell, 'CurrencyRate')}}\\r\\n
\\r\\n
\\r\\n \\r\\n\\r\\n
\\r\\n {{GetGroupRowCaption(data)}}\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n
\";","\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { ChequeView } from './../views/cheque.view';\r\nimport { ChequeListParams } from './../params/chequelist.param';\r\n@Injectable()\r\nexport class ChequeEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(api: APIGatewayService) {super(\"Cheque\", api);}\r\n\t\r\n\r\n public ListEx(TransactionID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'ListEx', {TransactionID: TransactionID} );\r\n }\r\n\r\n public ListChequesWithImages(TransactionID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'ListChequesWithImages', {TransactionID: TransactionID} );\r\n }\r\n\r\n public ListForReport(Params: ChequeListParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListForReport', Params, undefined );\r\n }\r\n}\r\n\r\n","import { Component, ElementRef, Input, ViewChild } from '@angular/core';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntityResponse, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Transaction } from '../../../_proxy/entities/transaction.entity';\r\nimport { EnumPageDisplayModes } 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 { ChequeImage } from '../../../_proxy/entities/chequeimage.entity';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { ChequeEndpoint } from '../../../_proxy/endpoints/cheque.endpoint';\r\nimport { ChequeImageEndpoint } from '../../../_proxy/endpoints/chequeimage.endpoint';\r\nimport jsPDF from 'jspdf';\r\n\r\nclass State extends BaseState {\r\n LoadedChequeID: number;\r\n CurrentChequeID: number;\r\n Image1: {} = null;\r\n Image2: {} = null;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-cheque-list-dialog',\r\n templateUrl: './cheque-list-dialog.component.html',\r\n styleUrls: ['./cheque-list-dialog.component.scss']\r\n})\r\nexport class ChequeListDialogComponent extends BasePageComponent {\r\n\r\n @Input() TransactionID: number;\r\n\r\n @ViewChild('img1') img1!: ElementRef;\r\n @ViewChild('img2') img2: ElementRef;\r\n\r\n constructor(A: ServiceBagService, private endpoint: ChequeEndpoint, private imagesEndpoint: ChequeImageEndpoint,\r\n public screenService: ScreenService) {\r\n super(A, 'ChequeListComponent', Transaction, State, EnumPageDisplayModes.Dialog);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.LoadCheques();\r\n }\r\n\r\n private LoadCheques() {\r\n this.State.LoadedChequeID = undefined;\r\n this.DataSources['Cheques'] = new DataSourceCustomAction(\r\n (options: DataLoadOptions) => this.endpoint.ListEx(this.TransactionID), undefined,\r\n (data) => {\r\n if (data.length) {\r\n if (this.State.LoadedChequeID == undefined) this.LoadCheque(data[0].EntryID);\r\n }\r\n });\r\n this.DS('Cheques').Reload();\r\n }\r\n\r\n OnItemSelected(e) {\r\n var id = e.EntryID;\r\n if (this.State.LoadedChequeID == id) return;\r\n this.LoadCheque(id);\r\n }\r\n\r\n LoadCheque(id: number) {\r\n this.State.LoadedChequeID = id;\r\n this.Do(this.imagesEndpoint.Get(id), false, (response: BaseEntityResponse) => {\r\n\r\n const data = response.Entity;\r\n\r\n if (data === undefined) {\r\n this.State.Image1 = this.State.Image2 = null;\r\n return;\r\n }\r\n\r\n const imageBlob1 = Utils.ConvertToBlob(data.Image1, 'image/png');\r\n if (imageBlob1) Utils.ConvertBlobToImage(imageBlob1, image => {\r\n this.State.Image1 = image;\r\n }); else this.State.Image1 = null;\r\n\r\n const imageBlob2 = Utils.ConvertToBlob(data.Image2, 'image/png');\r\n if (imageBlob2) Utils.ConvertBlobToImage(imageBlob2, image => this.State.Image2 = image); else this.State.Image2 = null;\r\n });\r\n }\r\n\r\n PrintCheques() {\r\n const printWindow = window.open('', '_blank');\r\n if (printWindow) {\r\n printWindow.document.write(`\r\n \r\n \r\n Print Cheques\r\n \r\n \r\n \r\n \"Image\r\n \"Image\r\n \r\n \r\n `);\r\n printWindow.document.close();\r\n printWindow.focus();\r\n printWindow.print();\r\n // printWindow.close();\r\n }\r\n }\r\n\r\n DownloadCheques() {\r\n const pdf = new jsPDF();\r\n const imgElement = this.img1.nativeElement;\r\n // The width of A4 is 210, so 180 will fit into it\r\n const imgWidth = 180;\r\n // Recalculate heigth to keep the same aspect ratio\r\n const imgHeight = (imgElement.height * imgWidth) / imgElement.width;\r\n\r\n pdf.addImage(this.State.Image1 as any, 'JPEG', 15, 10, imgWidth, imgHeight);\r\n \r\n if(this.img2 && this.img2.nativeElement) {\r\n const img2Element = this.img2.nativeElement;\r\n\r\n const imgHeight2 = (img2Element.height * imgWidth) / img2Element.width;\r\n\r\n pdf.addImage(this.State.Image2 as any, 'JPEG', 15, 10 + imgHeight, imgWidth, imgHeight2);\r\n }\r\n\r\n pdf.save(`Cheques_${this.TransactionID}.pdf`);\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\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 { EnumNotificationRequestStatuses } from './../enums';\r\nexport class NotificationRequest extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'NotificationRequest';\r\n }\r\n \r\n public NotificationTemplateID: number; \r\n public ReceiverUserId: number; \r\n public Email: string; \r\n public Status: EnumNotificationRequestStatuses; \r\n\tpublic CreatedBy: number;\r\n\tpublic CreatedDate: Date;\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { NotificationRequest } from './../entities/notificationrequest.entity';\r\n@Injectable()\r\nexport class NotificationRequestEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(api: APIGatewayService) {super(\"NotificationRequest\", api);}\r\n\t\r\n}\r\n\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\";","import {\r\n EnumDataExportType,\r\n EnumExportTransactionsMethod,\r\n EnumFinancialReportRangeType,\r\n EnumJournalEntryCurrencyTypes,\r\n EnumLedgerAccountType,\r\n EnumReplicationStatuses,\r\n EnumReplicationObjectTypes,\r\n EnumPaymentMeansTypes,\r\n EnumDocumentType,\r\n EnumUserAuthorizationType,\r\n EnumSide,\r\n EnumSource,\r\n EnumAccountingSoftwares,\r\n EnumBanks,\r\n EnumBookingAccountDepositTypes,\r\n EnumBookingAccountStockTypes,\r\n EnumBookingAccountSubtypes,\r\n EnumUserNotificationMethods,\r\n EnumDownloadStatuses,\r\n EnumDownloadTaskStatuses,\r\n EnumDownloadStepStatuses,\r\n EnumUploadStatuses,\r\n EnumBankGroups,\r\n EnumOrganizationChildEntityTypes,\r\n EnumDashboardGroupBy,\r\n EnumBankPassCredentialValidity,\r\n EnumClassificarionRuleFieldType,\r\n EnumClassificarionRuleMatchType,\r\n EnumCompanyChildEntityTypes,\r\n EnumBalanceHistoryReportMode,\r\n EnumSummaryLevel,\r\n EnumCashflowSummarizedAggregationLevel,\r\n EnumShowInCurrencyOptions,\r\n EnumNotificationTemplateSectionFields,\r\n EnumYesNo,\r\n EnumMatchingRelationship,\r\n EnumPeriodType,\r\n EnumIncreaseType,\r\n EnumBankTypes,\r\n Enums,\r\n EnumLoanStatus,\r\n EnumAmortizationType,\r\n EnumInterestType,\r\n EnumLoanSide,\r\n EnumLoanPaymentFrequencyType,\r\n EnumLoanInterestPeriodCalculationType,\r\n EnumVisibilitySetting,\r\n EnumCustomFieldsetFieldInputType,\r\n EnumExpenseStatus,\r\n EnumSecurityStatus,\r\n EnumSecurityType,\r\n EnumLoanPostPaymentRecalculationOptions,\r\n EnumFinancialReportDateType,\r\n EnumFinancialReportCurrencyType,\r\n EnumCCProcessingCompanies,\r\n EnumCCBrands,\r\n EnumApplyToBookingAccountsTypes,\r\n EnumCCInvoiceStatuses,\r\n EnumCCTransferStatuses,\r\n EnumNoteFieldTypes,\r\n EnumNoteMatchTypes,\r\n EnumNotesExportAdjustments,\r\n EnumAccountFullNameDisplayType,\r\n EnumFileImportEncodings,\r\n EnumFileImportTypes,\r\n EnumFileImportAccountMappingTypes,\r\n EnumFileImportColumns,\r\n EnumFileImportRowDelimiters,\r\n EnumFileImportCurrencyDenominations,\r\n EnumFileImportRowsSortOrders,\r\n EnumJournalEntryUploadLevel,\r\n EnumExportType,\r\n EnumJournalEntrySources,\r\n EnumAdminActivityRecordType,\r\n EnumAdminAccessRequestStatus,\r\n EnumAdminAccessRequestDurationType,\r\n EnumPositiveNegative,\r\n EnumJournalEntryStatuses,\r\n EnumBookingAccountSelectionMethods,\r\n EnumBankPassTwoFactorMethod,\r\n EnumFutureChequeStatus,\r\n EnumLoanPaymentInterestPrincipalType,\r\n EnumNotificationBalanceSummaryType,\r\n EnumForecastDateRelevance,\r\n EnumForecastSystemSource,\r\n EnumRecommendationPeriodType,\r\n EnumFutureForecastGroupBy,\r\n EnumLanguage,\r\n EnumGenerationTypeJournalEntry,\r\n EnumPostingTemplateBookingAccountTypes,\r\n EnumDownloadRetryStatus,\r\n EnumBillingContractsReportModule,\r\n EnumBalanceDetailsSortType,\r\n EnumRelevantFilteringTypes,\r\n EnumPeriod,\r\n EnumIncomingPaymentStatus,\r\n EnumIncomingPaymentInvoiceLineTypes,\r\n EnumIncomingPaymentUploadLevel,\r\n EnumIncomingPaymentDocumentType,\r\n EnumUploadType,\r\n EnumSumSide,\r\n EnumLoanHandlingType,\r\n EnumBankPassAccessTypes,\r\n EnumBankPassAutoDiscoverModes,\r\n} from '../_proxy/enums';\r\n\r\nimport { Globals } from '../_globals';\r\nimport { EnumLanguages } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { EnumShareWith } from '../dialogs/share-information-dialog/share-information-dialog.component';\r\nimport { EnumPredefinedNotificationTemplates } from '../pages/notification-template/list/notification-template-list.component';\r\nimport { IncomingPaymentActions } from '@kraken/_client.enums';\r\nimport { EnumCategoryClassificationFieldType, EnumExportSFTPGroupingMode, EnumExternalAccountMappingStatus, EnumJournalExportType, EnumNotificationScheduleType } from '../../../../../Kraken/Angular/ClientApp/_proxy/enums';\r\n\r\nexport const Lists_EN =\r\n{\r\n Properties: {\r\n Language: EnumLanguages.English\r\n },\r\n AccountingSoftwares:\r\n [\r\n {\r\n Value: EnumAccountingSoftwares.Hashavshevet,\r\n Text: 'Hashavshevet',\r\n SortOrder: 1\r\n },\r\n {\r\n Value: EnumAccountingSoftwares.Priority,\r\n Text: 'Priority',\r\n SortOrder: 2\r\n },\r\n {\r\n Value: EnumAccountingSoftwares.SBO,\r\n Text: 'SAP Business One',\r\n SortOrder: 3\r\n },\r\n {\r\n Value: EnumAccountingSoftwares.Standalone,\r\n Text: 'Standalone',\r\n SortOrder: 4\r\n },\r\n {\r\n Value: EnumAccountingSoftwares.SAPByDesign,\r\n Text: 'SAP By Design',\r\n SortOrder: 5\r\n },\r\n {\r\n Value: EnumAccountingSoftwares.NetSuite,\r\n Text: 'NetSuite',\r\n SortOrder: 6\r\n },\r\n {\r\n Value: EnumAccountingSoftwares.WizCloud,\r\n Text: 'WizCloud',\r\n SortOrder: 7\r\n },\r\n {\r\n Value: EnumAccountingSoftwares.Ardani,\r\n Text: 'Ardani',\r\n SortOrder: 8\r\n },\r\n {\r\n Value: EnumAccountingSoftwares.Rivhit,\r\n Text: 'Rivhit 12',\r\n SortOrder: 9\r\n },\r\n {\r\n Value: EnumAccountingSoftwares.Rivhit8,\r\n Text: 'Rivhit 8',\r\n SortOrder: 10\r\n },\r\n {\r\n Value: EnumAccountingSoftwares.Comax,\r\n Text: 'Comax',\r\n SortOrder: 11\r\n },\r\n {\r\n Value: EnumAccountingSoftwares.Intentia,\r\n Text: 'Intentia',\r\n SortOrder: 12\r\n },\r\n {\r\n Value: EnumAccountingSoftwares.Unknown,\r\n Text: 'Unknown',\r\n SortOrder: 13\r\n }\r\n ],\r\n Banks:\r\n [\r\n {\r\n Value: EnumBanks.Yahav,\r\n Text: '4 - Yahav',\r\n TextShort: 'Yahav',\r\n BankCode: 4,\r\n Color: '#0097F0',\r\n Icon: '$$$'\r\n },\r\n {\r\n Value: EnumBanks.Leumi,\r\n Text: '10 - Leumi',\r\n TextShort: 'Leumi',\r\n BankCode: 10,\r\n Color: '#0097F0',\r\n Icon: 'leumi.png'\r\n },\r\n {\r\n Value: EnumBanks.Discount,\r\n Text: '11 - Discount',\r\n TextShort: 'Discount',\r\n BankCode: 11,\r\n Color: '#008E90',\r\n Icon: 'discount.png'\r\n },\r\n {\r\n Value: EnumBanks.Poalim,\r\n Text: '12 - Poalim',\r\n TextShort: 'Poalim',\r\n BankCode: 12,\r\n Color: '#E84545',\r\n Icon: 'poalim.png'\r\n },\r\n {\r\n Value: EnumBanks.Egud,\r\n Text: '13 - Egud',\r\n TextShort: 'Egud',\r\n BankCode: 13,\r\n Color: '#7888E5',\r\n Icon: 'egud.png'\r\n },\r\n {\r\n Value: EnumBanks.OtsarHaHayal,\r\n Text: '14 - Otsar HaHayal',\r\n TextShort: 'Otsar HaHayal',\r\n BankCode: 14,\r\n Color: '#2E75B5',\r\n Icon: 'benleumi.png'\r\n },\r\n {\r\n Value: EnumBanks.Merkantil,\r\n Text: '17 - Merkantil',\r\n TextShort: 'Merkantil',\r\n BankCode: 17,\r\n Color: '#0FBE7B',\r\n Icon: 'merkantil.png'\r\n },\r\n {\r\n Value: EnumBanks.Mizrahi,\r\n Text: '20 - Mizrahi',\r\n TextShort: 'Mizrahi',\r\n BankCode: 20,\r\n Color: '#FF8F5F',\r\n Icon: 'mizrahi.png'\r\n },\r\n {\r\n Value: EnumBanks.CityBank,\r\n Text: '22 - CityBank',\r\n TextShort: 'CityBank',\r\n BankCode: 22,\r\n Color: '#017EC8'\r\n },\r\n {\r\n Value: EnumBanks.HSBC,\r\n Text: '23 - HSBC',\r\n TextShort: 'HSBC',\r\n BankCode: 23,\r\n Color: '#017EC8'\r\n },\r\n {\r\n Value: EnumBanks.Ubank,\r\n Text: '26 - Ubank',\r\n TextShort: 'Ubank',\r\n BankCode: 26,\r\n Color: '#CC9B00'\r\n },\r\n {\r\n Value: EnumBanks.BenLeumi,\r\n Text: '31 - BenLeumi',\r\n TextShort: 'BenLeumi',\r\n BankCode: 31,\r\n Color: '#2B2E4A',\r\n Icon: 'benleumi.png'\r\n },\r\n {\r\n Value: EnumBanks.Masad,\r\n Text: '46 - Masad',\r\n TextShort: 'Masad',\r\n BankCode: 46,\r\n Color: '#E7B200',\r\n Icon: 'masad.png'\r\n },\r\n {\r\n Value: EnumBanks.Pagi,\r\n Text: '52 - Pagi',\r\n TextShort: 'Pagi',\r\n BankCode: 52,\r\n Color: '#575757'\r\n },\r\n {\r\n Value: EnumBanks.Doar,\r\n Text: '9 - Doar',\r\n TextShort: 'Doar',\r\n BankCode: 9,\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.Jerusalem,\r\n Text: '54 - Jerusalem',\r\n TextShort: 'Jerusalem',\r\n BankCode: 54,\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.Isracard,\r\n Text: 'Isracard',\r\n TextShort: 'Isracard',\r\n Color: '#111111',\r\n Icon: 'cc-brand-isracard.svg'\r\n },\r\n {\r\n Value: EnumBanks.VisaCal,\r\n Text: 'VisaCal',\r\n TextShort: 'VisaCal',\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.LeumiMax,\r\n Text: 'LeumiMax',\r\n TextShort: 'LeumiMax',\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.Amex,\r\n Text: 'Amex',\r\n TextShort: 'Amex',\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.ForeignPlaceholder1,\r\n Text: 'ForeignPlaceholder1',\r\n TextShort: 'ForeignPlaceholder1',\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.ForeignPlaceholder2,\r\n Text: 'ForeignPlaceholder2',\r\n TextShort: 'ForeignPlaceholder2',\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.ForeignPlaceholder3,\r\n Text: 'ForeignPlaceholder3',\r\n TextShort: 'ForeignPlaceholder3',\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.ExternalLoanerMisc,\r\n Text: 'Misc',\r\n TextShort: 'Misc',\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.ExternalLoanerVisa,\r\n Text: 'Visa - Loans',\r\n TextShort: 'Visa - Loans',\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.ExternalLoanerIsracard,\r\n Text: 'Isracard - Loans',\r\n TextShort: 'Isracard - Loans',\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.ExternalLoanerLeumiMax,\r\n Text: 'LeumiMax - Loans',\r\n TextShort: 'LeumiMax - Loans',\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.ExternalLoanerMimunYashir,\r\n Text: 'MimunYashir',\r\n TextShort: 'MimunYashir',\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.ExternalLoanerHarel,\r\n Text: 'Harel',\r\n TextShort: 'Harel',\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.ExternalLoanerMigdal,\r\n Text: 'Migdal',\r\n TextShort: 'Migdal',\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.ExternalLoanerAltshuler,\r\n Text: 'Altshuler',\r\n TextShort: 'Altshuler',\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.ExternalLoanerFenix,\r\n Text: 'Fenix',\r\n TextShort: 'Fenix',\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.ExternalLoanerMeitav,\r\n Text: 'Meitav',\r\n TextShort: 'Meitav',\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.CCIsracard,\r\n Text: 'Isracard Processing',\r\n TextShort: 'Isracard Processing',\r\n Color: '#111111',\r\n Icon: 'cc-brand-isracard.svg'\r\n },\r\n {\r\n Value: EnumBanks.CCVisaCal,\r\n Text: ' VisaProcessing',\r\n TextShort: 'Visa Processing',\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.CCLeumiMax,\r\n Text: 'LeumiMax Processing' ,\r\n TextShort: 'LeumiMax Processing',\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.Plaid,\r\n Text: 'Plaid' ,\r\n TextShort: 'Plaid',\r\n Color: '#111111'\r\n },\r\n ],\r\n DepositTypes:\r\n [\r\n {\r\n Value: EnumBookingAccountDepositTypes.All,\r\n Text: 'All'\r\n },\r\n {\r\n Value: EnumBookingAccountDepositTypes.Daily,\r\n Text: 'Daily'\r\n },\r\n {\r\n Value: EnumBookingAccountDepositTypes.Regular,\r\n Text: 'Regular'\r\n }\r\n ],\r\n StockTypes:\r\n [\r\n {\r\n Value: EnumBookingAccountStockTypes.All,\r\n Text: 'All'\r\n },\r\n {\r\n Value: EnumBookingAccountStockTypes.Commodities,\r\n Text: 'Commodities'\r\n },\r\n {\r\n Value: EnumBookingAccountStockTypes.CorporateBonds,\r\n Text: 'CorporateBonds'\r\n },\r\n {\r\n Value: EnumBookingAccountStockTypes.ETFs,\r\n Text: 'ETFs'\r\n },\r\n {\r\n Value: EnumBookingAccountStockTypes.GovermentBonds,\r\n Text: 'GovermentBonds'\r\n },\r\n {\r\n Value: EnumBookingAccountStockTypes.GovermentBondsMakam,\r\n Text: 'GovermentBondsMakam'\r\n },\r\n {\r\n Value: EnumBookingAccountStockTypes.Other,\r\n Text: 'Other'\r\n },\r\n {\r\n Value: EnumBookingAccountStockTypes.Stocks,\r\n Text: 'Stocks'\r\n },\r\n {\r\n Value: EnumBookingAccountStockTypes.TrustFunds,\r\n Text: 'TrustFunds'\r\n }\r\n ],\r\n Currencies:\r\n [\r\n {\r\n Value: 'ILS',\r\n Text: 'Israeli Shekel',\r\n Symbol: '₪',\r\n SortOrder: 0\r\n },\r\n {\r\n Value: 'USD',\r\n Text: 'Dollar',\r\n Symbol: '$',\r\n SortOrder: 1\r\n },\r\n {\r\n Value: 'EUR',\r\n Text: 'Euro',\r\n Symbol: '€',\r\n SortOrder: 2\r\n },\r\n {\r\n Value: 'GBP',\r\n Text: 'British Pound',\r\n Symbol: '£',\r\n SortOrder: 3\r\n },\r\n {\r\n Value: 'AUD',\r\n Text: 'Australian Dollar',\r\n Symbol: 'A$',\r\n SortOrder: 4\r\n },\r\n {\r\n Value: 'CAD',\r\n Text: 'Canadian Dollar',\r\n Symbol: 'C$',\r\n SortOrder: 5\r\n },\r\n {\r\n Value: 'CHF',\r\n Text: 'Swiss Franc',\r\n Symbol: 'CHF',\r\n SortOrder: 6\r\n },\r\n {\r\n Value: 'DKK',\r\n Text: 'Danish Krone',\r\n Symbol: 'kr',\r\n SortOrder: 7\r\n },\r\n {\r\n Value: 'EGP',\r\n Text: 'Egyptian Pound',\r\n Symbol: 'E£',\r\n SortOrder: 8\r\n },\r\n {\r\n Value: 'JOD',\r\n Text: 'Jordanian Lira',\r\n Symbol: 'JD',\r\n SortOrder: 9\r\n },\r\n {\r\n Value: 'LBP',\r\n Text: 'Lebanese Pound',\r\n Symbol: 'LL',\r\n SortOrder: 10\r\n },\r\n {\r\n Value: 'NOK',\r\n Text: 'Norwegian Krone',\r\n Symbol: 'kr',\r\n SortOrder: 11\r\n },\r\n {\r\n Value: 'SEK',\r\n Text: 'Sweden Krone',\r\n Symbol: 'kr',\r\n SortOrder: 12\r\n },\r\n {\r\n Value: 'RUB',\r\n Text: 'Ruble',\r\n Symbol: '₽',\r\n SortOrder: 13\r\n },\r\n {\r\n Value: 'HKD',\r\n Text: 'Hong-Kong Dollar',\r\n Symbol: 'HK$',\r\n SortOrder: 14\r\n },\r\n {\r\n Value: 'ZAR',\r\n Text: 'South African Rand',\r\n Symbol: 'R',\r\n SortOrder: 15\r\n },\r\n {\r\n Value: 'JPY',\r\n Text: 'Japanese Yen',\r\n Symbol: '¥',\r\n SortOrder: 16\r\n },\r\n {\r\n Value: 'SGD',\r\n Text: 'Singapore Dollar',\r\n Symbol: 'S$',\r\n SortOrder: 17\r\n },\r\n {\r\n Value: 'CNH',\r\n Text: 'Chinese Yuan',\r\n Symbol: '¥',\r\n SortOrder: 18\r\n },\r\n {\r\n Value: 'NZD',\r\n Text: 'New Zealand Dollar',\r\n Symbol: 'NZ$',\r\n SortOrder: 19\r\n },\r\n {\r\n Value: 'PLN',\r\n Text: 'Polish Złoty',\r\n Symbol: 'zł',\r\n SortOrder: 20\r\n },\r\n {\r\n Value: 'THB',\r\n Text: 'Thai Baht',\r\n Symbol: '฿',\r\n SortOrder: 21\r\n },\r\n {\r\n Value: 'HUF',\r\n Text: 'Hungarian Forint',\r\n Symbol: 'Ft',\r\n SortOrder: 22\r\n },\r\n {\r\n Value: 'CZK',\r\n Text: 'Czech Koruna',\r\n Symbol: 'Kč',\r\n SortOrder: 23\r\n },\r\n {\r\n Value: 'AED',\r\n Text: 'Dirham',\r\n Symbol: 'د.إ',\r\n SortOrder: 24\r\n },\r\n {\r\n Value: 'RON',\r\n Text: 'Romanian Leu',\r\n Symbol: 'lei',\r\n SortOrder: 25\r\n },\r\n {\r\n Value: 'GEL',\r\n Text: 'Georgian Lari',\r\n Symbol: '₾',\r\n SortOrder: 26\r\n },\r\n {\r\n Value: 'TRY',\r\n Text: 'Turkish Lire',\r\n Symbol: '₺',\r\n SortOrder: 27\r\n }\r\n ],\r\n BookingAccountSubTypes:\r\n [\r\n {\r\n Value: EnumBookingAccountSubtypes.Current,\r\n text: 'Current',\r\n Text: 'Current',\r\n SortOrder: 0,\r\n Color: Globals.DashboardPalette[0]\r\n },\r\n {\r\n Value: EnumBookingAccountSubtypes.CreditCard,\r\n text: 'Credit cards',\r\n Text: 'Credit cards',\r\n SortOrder: 1,\r\n Color: Globals.DashboardPalette[4]\r\n },\r\n {\r\n Value: EnumBookingAccountSubtypes.Deposits,\r\n text: 'Deposits',\r\n Text: 'Deposits',\r\n SortOrder: 2,\r\n Color: Globals.DashboardPalette[1]\r\n },\r\n {\r\n Value: EnumBookingAccountSubtypes.Stocks,\r\n text: 'Stocks',\r\n Text: 'Stocks',\r\n SortOrder: 3,\r\n Color: Globals.DashboardPalette[2]\r\n },\r\n {\r\n Value: EnumBookingAccountSubtypes.Loans,\r\n text: 'Loans',\r\n Text: 'Loans',\r\n SortOrder: 4,\r\n Color: Globals.DashboardPalette[3]\r\n },\r\n {\r\n Value: EnumBookingAccountSubtypes.Guarantee,\r\n text: 'Guarantees',\r\n Text: 'Guarantees',\r\n SortOrder: 5,\r\n Color: Globals.DashboardPalette[5]\r\n }\r\n ],\r\n OrganizationTabs:\r\n [\r\n {\r\n index: 0,\r\n text: 'Companies',\r\n Type: EnumOrganizationChildEntityTypes.Company,\r\n Name: 'CompanyTab'\r\n },\r\n {\r\n index: 1,\r\n text: 'Bank Access Credentials',\r\n Type: EnumOrganizationChildEntityTypes.BankPass,\r\n Name: 'BankAccessCredentialTab'\r\n },\r\n {\r\n index: 2,\r\n text: 'Accounts',\r\n Type: EnumOrganizationChildEntityTypes.Account,\r\n Name: 'AccountTab'\r\n },\r\n {\r\n index: 3,\r\n text: 'Users',\r\n Type: EnumOrganizationChildEntityTypes.User,\r\n Name: 'UserTab'\r\n },\r\n {\r\n index: 4,\r\n text: 'Deployments',\r\n Type: EnumOrganizationChildEntityTypes.Deployment,\r\n Name: 'DeploymentTab'\r\n },\r\n {\r\n index: 5,\r\n text: 'External API Keys',\r\n Name: 'ExternalApiKeyTab',\r\n Type: EnumOrganizationChildEntityTypes.ExternalAPIKey,\r\n },\r\n {\r\n index: 6,\r\n text: 'Billing Contracts',\r\n Type: EnumOrganizationChildEntityTypes.BillingContract,\r\n Name: 'BillingContractTab'\r\n },\r\n {\r\n index: 7,\r\n text: 'Account Groups',\r\n Type: EnumOrganizationChildEntityTypes.AccountGroup,\r\n Name: 'AccountGroupTab'\r\n },\r\n {\r\n index: 8,\r\n text: 'Notification Templates',\r\n Type: EnumOrganizationChildEntityTypes.NotificationTemplate,\r\n Name: 'NotificationTemplateTab'\r\n },\r\n {\r\n index: 9,\r\n text: 'Alert Templates',\r\n Type: EnumOrganizationChildEntityTypes.AlertTemplate,\r\n Name: 'AlertTemplateTab'\r\n },\r\n {\r\n index: 10,\r\n text: 'File Import Templates',\r\n Type: EnumOrganizationChildEntityTypes.FileImportTemplate,\r\n Name: 'FileImportTemplatesTab'\r\n },\r\n {\r\n index: 11,\r\n text: 'Scenarios',\r\n Type: EnumOrganizationChildEntityTypes.Scenario,\r\n Name: 'ScenarioTab'\r\n },\r\n {\r\n index: 12,\r\n text: 'Probability Levels',\r\n Type: EnumOrganizationChildEntityTypes.ProbabilityLevel,\r\n Name: 'ProbabilityLevelTab'\r\n },\r\n {\r\n index: 13,\r\n text: 'Deposit Categories',\r\n Type: EnumOrganizationChildEntityTypes.DepositCategory,\r\n Name: 'DepositCategoriesTab'\r\n },\r\n {\r\n index: 14,\r\n text: 'Deposit Classification rules',\r\n Type: EnumOrganizationChildEntityTypes.DepositClassificationRule,\r\n Name: 'DepositClassificationRulesTab'\r\n },\r\n {\r\n index: 15,\r\n text: 'Loan Categories',\r\n Type: EnumOrganizationChildEntityTypes.LoanCategory,\r\n Name: 'LoanCategoriesTab'\r\n },\r\n {\r\n index: 16,\r\n text: 'Loan Classification rules',\r\n Type: EnumOrganizationChildEntityTypes.LoanClassificationRule,\r\n Name: 'LoanClassificationRulesTab'\r\n },\r\n {\r\n index: 17,\r\n text: 'Stock Categories',\r\n Type: EnumOrganizationChildEntityTypes.StockCategory,\r\n Name: 'StockCategoriesTab'\r\n },\r\n {\r\n index: 18,\r\n text: 'Stock Classification rules',\r\n Type: EnumOrganizationChildEntityTypes.StockClassificationRule,\r\n Name: 'StockClassificationRulesTab'\r\n },\r\n {\r\n index: 19,\r\n text: 'Guarantee Categories',\r\n Type: EnumOrganizationChildEntityTypes.GuaranteeCategory,\r\n Name: 'GuaranteeCategoriesTab'\r\n },\r\n {\r\n index: 20,\r\n text: 'Guarantee Classification rules',\r\n Type: EnumOrganizationChildEntityTypes.GuaratneeClassificationRule,\r\n Name: 'GuaranteeClassificationRulesTab'\r\n },\r\n {\r\n index: 21,\r\n text: 'Admin Settings',\r\n Name: 'AdminSettingsTab'\r\n }\r\n ],\r\n\r\n\r\n OrganizationGroupingTabs: [\r\n {\r\n name: 'Finance',\r\n text: 'Finance',\r\n tabs: [{\r\n index: 0,\r\n badge: null,\r\n text: 'Companies',\r\n Type: EnumOrganizationChildEntityTypes.Company,\r\n Name: 'CompanyTab'},\r\n {\r\n index: 1,\r\n badge: null,\r\n text: 'Bank Access Credentials',\r\n Type: EnumOrganizationChildEntityTypes.BankPass,\r\n Name: 'BankAccessCredentialTab'\r\n },\r\n {\r\n index: 2,\r\n badge: null,\r\n text: 'Accounts',\r\n Type: EnumOrganizationChildEntityTypes.Account,\r\n Name: 'AccountTab'\r\n },\r\n {\r\n index: 7,\r\n badge: null,\r\n text: 'Account Groups',\r\n Type: EnumOrganizationChildEntityTypes.AccountGroup,\r\n Name: 'AccountGroupTab'\r\n },\r\n ]\r\n },\r\n {\r\n name: 'Authentication',\r\n text: 'Authentication',\r\n tabs: [\r\n {\r\n index: 3,\r\n badge: null,\r\n text: 'Users',\r\n Type: EnumOrganizationChildEntityTypes.User,\r\n Name: 'UserTab'\r\n },\r\n {\r\n index: 5,\r\n badge: null,\r\n text: 'External API Keys',\r\n Name: 'ExternalApiKeyTab',\r\n Type: EnumOrganizationChildEntityTypes.ExternalAPIKey,\r\n },\r\n ]\r\n },\r\n {\r\n name: 'Notifications',\r\n text: 'Notifications',\r\n tabs: [\r\n {\r\n index: 8,\r\n badge: null,\r\n text: 'Notification Templates',\r\n Type: EnumOrganizationChildEntityTypes.NotificationTemplate,\r\n Name: 'NotificationTemplateTab'\r\n },\r\n {\r\n index: 9,\r\n badge: null,\r\n text: 'Alert Templates',\r\n Type: EnumOrganizationChildEntityTypes.AlertTemplate,\r\n Name: 'AlertTemplateTab'\r\n },\r\n ]\r\n },\r\n {\r\n name: 'Import & Export',\r\n text: 'Import & Export',\r\n tabs: [\r\n {\r\n index: 4,\r\n badge: null,\r\n text: 'Deployments',\r\n Type: EnumOrganizationChildEntityTypes.Deployment,\r\n Name: 'DeploymentTab'\r\n },\r\n {\r\n index: 10,\r\n badge: null,\r\n text: 'File Import Templates',\r\n Type: EnumOrganizationChildEntityTypes.FileImportTemplate,\r\n Name: 'FileImportTemplatesTab'\r\n },\r\n ]\r\n },\r\n {\r\n name: 'Cashflow',\r\n text: 'Cashflow',\r\n tabs: [\r\n {\r\n index: 11,\r\n badge: null,\r\n text: 'Scenarios',\r\n Type: EnumOrganizationChildEntityTypes.Scenario,\r\n Name: 'ScenarioTab'\r\n },\r\n {\r\n index: 12,\r\n badge: null,\r\n text: 'Probability Levels',\r\n Type: EnumOrganizationChildEntityTypes.ProbabilityLevel,\r\n Name: 'ProbabilityLevelTab'\r\n },\r\n ]\r\n },\r\n {\r\n name: 'Data Categorization',\r\n text: 'Data Categorization',\r\n tabs: [\r\n {\r\n index: 13,\r\n badge: null,\r\n text: 'Deposit Categories',\r\n Type: EnumOrganizationChildEntityTypes.DepositCategory,\r\n Name: 'DepositCategoriesTab'\r\n },\r\n {\r\n index: 14,\r\n badge: null,\r\n text: 'Deposit Classification rules',\r\n Type: EnumOrganizationChildEntityTypes.DepositClassificationRule,\r\n Name: 'DepositClassificationRulesTab'\r\n },\r\n {\r\n index: 15,\r\n badge: null,\r\n text: 'Loan Categories',\r\n Type: EnumOrganizationChildEntityTypes.LoanCategory,\r\n Name: 'LoanCategoriesTab'\r\n },\r\n {\r\n index: 16,\r\n badge: null,\r\n text: 'Loan Classification rules',\r\n Type: EnumOrganizationChildEntityTypes.LoanClassificationRule,\r\n Name: 'LoanClassificationRulesTab'\r\n },\r\n {\r\n index: 17,\r\n badge: null,\r\n text: 'Stock Categories',\r\n Type: EnumOrganizationChildEntityTypes.StockCategory,\r\n Name: 'StockCategoriesTab'\r\n },\r\n {\r\n index: 18,\r\n badge: null,\r\n text: 'Stock Classification rules',\r\n Type: EnumOrganizationChildEntityTypes.StockClassificationRule,\r\n Name: 'StockClassificationRulesTab'\r\n },\r\n {\r\n index: 19,\r\n badge: null,\r\n text: 'Guarantee Categories',\r\n Type: EnumOrganizationChildEntityTypes.GuaranteeCategory,\r\n Name: 'GuaranteeCategoriesTab'\r\n },\r\n {\r\n index: 20,\r\n badge: null,\r\n text: 'Guarantee Classification rules',\r\n Type: EnumOrganizationChildEntityTypes.GuaratneeClassificationRule,\r\n Name: 'GuaranteeClassificationRulesTab'\r\n },\r\n ]\r\n },\r\n {\r\n name: 'Admin',\r\n text: 'Admin ',\r\n tabs: [\r\n {\r\n index: 21,\r\n badge: null,\r\n text: 'Admin Settings',\r\n Type: null,\r\n Name: 'AdminSettingsTab'\r\n },\r\n {\r\n index: 6,\r\n badge: null,\r\n text: 'Billing Contracts',\r\n Type: EnumOrganizationChildEntityTypes.BillingContract,\r\n Name: 'BillingContractTab'\r\n },\r\n ]\r\n },\r\n ],\r\n\r\n\r\n DashboardTabs: [\r\n {\r\n index: 0,\r\n text: 'Data'\r\n },\r\n {\r\n index: 1,\r\n text: 'Chart'\r\n }\r\n ],\r\n RecurringForecastTabs: [\r\n {\r\n index: 0,\r\n text: 'Forecast Operations'\r\n },\r\n {\r\n index: 1,\r\n text: 'Recurring Forecast'\r\n },\r\n {\r\n index: 2,\r\n text: 'Accounting Forecasts'\r\n }\r\n ],\r\n UserNotificationMethods:\r\n [\r\n {\r\n Value: EnumUserNotificationMethods.Email,\r\n Text: 'Email'\r\n },\r\n {\r\n Value: EnumUserNotificationMethods.Phone,\r\n Text: 'SMS Message'\r\n },\r\n {\r\n Value: EnumUserNotificationMethods.None,\r\n Text: 'None'\r\n }\r\n ],\r\n BankPassProblemNotificationMethods:\r\n [\r\n {\r\n Value: EnumUserNotificationMethods.Email,\r\n Text: 'Email'\r\n },\r\n {\r\n Value: EnumUserNotificationMethods.Phone,\r\n Text: 'SMS Message'\r\n },\r\n {\r\n Value: EnumUserNotificationMethods.None,\r\n Text: 'None'\r\n },\r\n {\r\n Value: EnumUserNotificationMethods.EmailAndPhone,\r\n Text: 'Email & SMS Message'\r\n }\r\n ],\r\n DownloadStatuses:\r\n [\r\n {\r\n Value: EnumDownloadStatuses.Pending,\r\n Text: 'Pending'\r\n },\r\n {\r\n Value: EnumDownloadStatuses.NoData,\r\n Text: 'No Data'\r\n },\r\n {\r\n Value: EnumDownloadStatuses.Failure,\r\n Text: 'Failure'\r\n },\r\n {\r\n Value: EnumDownloadStatuses.Success,\r\n Text: 'Success'\r\n },\r\n {\r\n Value: EnumDownloadStatuses.BrowserStartFailure,\r\n Text: 'Browser Start Failure'\r\n },\r\n {\r\n Value: EnumDownloadStatuses.LoginFailure,\r\n Text: 'Login Failure'\r\n }\r\n ],\r\n DownloadTaskStatuses:\r\n [\r\n {\r\n Value: EnumDownloadTaskStatuses.Pending,\r\n Text: 'Pending'\r\n },\r\n {\r\n Value: EnumDownloadTaskStatuses.NoData,\r\n Text: 'No Data'\r\n },\r\n {\r\n Value: EnumDownloadTaskStatuses.Failure,\r\n Text: 'Failure'\r\n },\r\n {\r\n Value: EnumDownloadTaskStatuses.Success,\r\n Text: 'Success'\r\n },\r\n {\r\n Value: EnumDownloadTaskStatuses.NotSynched,\r\n Text: 'Not Synched'\r\n },\r\n {\r\n Value: EnumDownloadTaskStatuses.Reviewed,\r\n Text: 'Reviewed'\r\n }\r\n ],\r\n DownloadStepStatuses:\r\n [\r\n {\r\n Value: EnumDownloadStepStatuses.Pending,\r\n Text: 'Pending'\r\n },\r\n {\r\n Value: EnumDownloadStepStatuses.Exception,\r\n Text: 'Exception'\r\n },\r\n {\r\n Value: EnumDownloadStepStatuses.Failure,\r\n Text: 'Failure'\r\n },\r\n {\r\n Value: EnumDownloadStepStatuses.Success,\r\n Text: 'Success'\r\n }\r\n ],\r\n CCTransferStatuses: [\r\n {\r\n Value: EnumCCTransferStatuses.Future,\r\n Text: 'Future'\r\n },\r\n {\r\n Value: EnumCCTransferStatuses.Actual,\r\n Text: 'Actual'\r\n },\r\n {\r\n Value: EnumCCTransferStatuses.Invoiced,\r\n Text: 'Invoiced'\r\n },\r\n ],\r\n UploadStatuses:\r\n [\r\n {\r\n Value: EnumUploadStatuses.Initiated,\r\n Text: 'Initiated'\r\n },\r\n {\r\n Value: EnumUploadStatuses.NoData,\r\n Text: 'No Data'\r\n },\r\n {\r\n Value: EnumUploadStatuses.Exception,\r\n Text: 'Exception'\r\n },\r\n {\r\n Value: EnumUploadStatuses.Success,\r\n Text: 'Success'\r\n },\r\n {\r\n Value: EnumUploadStatuses.DataSent,\r\n Text: 'Data sent'\r\n },\r\n {\r\n Value: EnumUploadStatuses.BalanceMismatch,\r\n Text: 'Balance mismatch'\r\n },\r\n {\r\n Value: EnumUploadStatuses.BalanceNotExistsForDate,\r\n Text: 'Balance not exists for date'\r\n },\r\n {\r\n Value: EnumUploadStatuses.CompanyNotFound,\r\n Text: 'Company not found'\r\n },\r\n {\r\n Value: EnumUploadStatuses.AccountNotFound,\r\n Text: 'Account not found'\r\n },\r\n {\r\n Value: EnumUploadStatuses.NotSynched,\r\n Text: 'Not Synched'\r\n },\r\n {\r\n Value: EnumUploadStatuses.FileExported,\r\n Text: 'File Exported'\r\n }\r\n ],\r\n HistoryDateRanges:\r\n [\r\n {\r\n DateFrom: Globals.Yesterday,\r\n DateTo: Globals.Today,\r\n Text: 'Yesterday'\r\n },\r\n {\r\n DateFrom: Globals.DayBeforeYesterday,\r\n DateTo: Globals.Today,\r\n Text: 'Last 2 days'\r\n },\r\n {\r\n DateFrom: Globals.ThisMonthFirstDate,\r\n DateTo: Globals.Today,\r\n Text: 'This month'\r\n },\r\n {\r\n DateFrom: Globals.LastMonthFirstDate,\r\n DateTo: Globals.LastMonthLastDate,\r\n Text: 'Last month'\r\n }\r\n ],\r\n CreditCardsDateRanges:\r\n [\r\n {\r\n SortOrder: 1,\r\n DateFrom: Globals.Today,\r\n DateTo: new Date(Globals.Today.getFullYear(), Globals.Today.getMonth() + 1, Globals.Today.getDate()),\r\n Text: 'Future charge'\r\n },\r\n {\r\n SortOrder: 2,\r\n DateFrom: new Date(Globals.Today.getFullYear(), Globals.Today.getMonth() - 1, Globals.Today.getDate()),\r\n DateTo: Globals.Today,\r\n Text: 'Previous charge'\r\n }\r\n ],\r\n ReportDateRanges:\r\n [\r\n {\r\n DateFrom: Globals.Yesterday,\r\n DateTo: Globals.Yesterday,\r\n Text: 'Yesterday'\r\n },\r\n {\r\n DateFrom: Globals.SevenDaysAgoDate,\r\n DateTo: Globals.Yesterday,\r\n Text: 'Last 7 days'\r\n },\r\n {\r\n DateFrom: Globals.ThirtyDaysAgoDate,\r\n DateTo: Globals.Yesterday,\r\n Text: 'Last 30 days'\r\n },\r\n {\r\n DateFrom: Globals.NinetyDaysAgoDate,\r\n DateTo: Globals.Yesterday,\r\n Text: 'Last 90 days'\r\n },\r\n {\r\n DateFrom: Globals.BeginningOfQuater,\r\n DateTo: Globals.Yesterday,\r\n Text: 'This quarter'\r\n },\r\n {\r\n DateFrom: Globals.BeginningOfYear,\r\n DateTo: Globals.Yesterday,\r\n Text: 'This year'\r\n }\r\n ],\r\n LoanTransactionFilterDateRanges: [\r\n {\r\n Value: 1,\r\n Text: '+/- 1 day'\r\n },\r\n {\r\n Value: 3,\r\n Text: '+/- 3 days'\r\n },\r\n {\r\n Value: 7,\r\n Text: '+/- 7 days'\r\n }\r\n ],\r\n BalanceReportDates:\r\n [\r\n {\r\n Date: Globals.LastMonthLastDate,\r\n Text: 'End of last month'\r\n },\r\n {\r\n Date: Globals.LastQuarterLastDate,\r\n Text: 'End of last quarter'\r\n },\r\n {\r\n Date: Globals.LastYearLastDate,\r\n Text: 'End of last year'\r\n }\r\n ],\r\n FinancialReportDates:\r\n [\r\n {\r\n DateFrom: Globals.ThisMonthFirstDate,\r\n DateTo: Globals.ThisMonthLastDate,\r\n Text: 'Current month'\r\n },\r\n {\r\n DateFrom: Globals.BeginningOfQuater,\r\n DateTo: Globals.ThisQuarterLastDate,\r\n Text: 'Current quarter'\r\n },\r\n {\r\n DateFrom: Globals.BeginningOfYear,\r\n DateTo: Globals.ThisYearLastDate,\r\n Text: 'Current year'\r\n },\r\n\r\n {\r\n DateFrom: Globals.LastMonthFirstDate,\r\n DateTo: Globals.LastMonthLastDate,\r\n Text: 'Previous month'\r\n },\r\n {\r\n DateFrom: Globals.LastQuarterFirstDate,\r\n DateTo: Globals.LastQuarterLastDate,\r\n Text: 'Previous quarter'\r\n },\r\n {\r\n DateFrom: Globals.LastYearFirstDate,\r\n DateTo: Globals.LastYearLastDate,\r\n Text: 'Previous year'\r\n }\r\n ],\r\n BalanceSheetReportDates:\r\n [\r\n {\r\n Date: Globals.ThisMonthLastDate,\r\n Text: 'End of month'\r\n },\r\n {\r\n Date: Globals.ThisQuarterLastDate,\r\n Text: 'End of quarter'\r\n },\r\n {\r\n Date: Globals.ThisYearLastDate,\r\n Text: 'End of year'\r\n },\r\n\r\n {\r\n Date: Globals.LastMonthLastDate,\r\n Text: 'End of previous month'\r\n },\r\n {\r\n Date: Globals.LastQuarterLastDate,\r\n Text: 'End of previous quarter'\r\n },\r\n {\r\n Date: Globals.LastYearLastDate,\r\n Text: 'End of previous year'\r\n }\r\n ],\r\n ForecastSources:\r\n [\r\n {\r\n Value: Enums.EnumSource.Automatic,\r\n Text: 'Automatic'\r\n },\r\n {\r\n Value: Enums.EnumSource.Manual,\r\n Text: 'Manual'\r\n },\r\n ],\r\n CashflowReportDates:\r\n [\r\n {\r\n Value: 1,\r\n Text: 'Tomorrow'\r\n },\r\n {\r\n Value: 2,\r\n Text: 'Continuos'\r\n },\r\n {\r\n Value: 7,\r\n Text: 'Next 7 days'\r\n },\r\n {\r\n Value: 30,\r\n Text: 'Next 30 days'\r\n },\r\n {\r\n Value: 90,\r\n Text: 'Next 90 days'\r\n }\r\n ],\r\n ReconciliationDates:\r\n [\r\n {\r\n SortOrder: 1,\r\n Value: 7,\r\n Text: '7 days'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: 30,\r\n Text: '30 days'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: 90,\r\n Text: '90 days'\r\n }\r\n ],\r\n RecurringPeriods:\r\n [\r\n {\r\n SortOrder: 1,\r\n Value: EnumPeriodType.Daily,\r\n Text: 'Daily'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumPeriodType.ScheduledDays,\r\n Text: 'Scheduled Days'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumPeriodType.Weekly,\r\n Text: 'Weekly'\r\n },\r\n {\r\n SortOrder: 4,\r\n Value: EnumPeriodType.BiWeekly,\r\n Text: 'BiWeekly'\r\n },\r\n {\r\n SortOrder: 5,\r\n Value: EnumPeriodType.Monthly,\r\n Text: 'Monthly'\r\n },\r\n {\r\n SortOrder: 6,\r\n Value: EnumPeriodType.BiMonthly,\r\n Text: 'BiMonthly'\r\n },\r\n {\r\n SortOrder: 7,\r\n Value: EnumPeriodType.Quarterly,\r\n Text: 'Quarterly'\r\n }\r\n ],\r\n LoanStatuses:\r\n [\r\n {\r\n SortOrder: 1,\r\n Value: EnumLoanStatus.Canceled,\r\n Text: 'Canceled'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumLoanStatus.Draft,\r\n Text: 'Draft'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumLoanStatus.Finished,\r\n Text: 'Finished'\r\n },\r\n {\r\n SortOrder: 4,\r\n Value: EnumLoanStatus.Funded,\r\n Text: 'Funded'\r\n },\r\n {\r\n SortOrder: 5,\r\n Value: EnumLoanStatus.Recycled,\r\n Text: 'Recycled'\r\n }\r\n ],\r\n InvoiceStatuses:\r\n [\r\n {\r\n SortOrder: 1,\r\n Value: EnumCCInvoiceStatuses.Draft,\r\n Text: 'Draft'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumCCInvoiceStatuses.Posted,\r\n Text: 'Posted'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumCCInvoiceStatuses.Removed,\r\n Text: 'Removed'\r\n }\r\n ],\r\n SecurityTypes:\r\n [\r\n {\r\n SortOrder: 1,\r\n Value: EnumSecurityType.BankGuarantee,\r\n Text: 'BankGuarantee'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumSecurityType.Cash,\r\n Text: 'Cash'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumSecurityType.InsurancePolicy,\r\n Text: 'InsurancePolicy'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumSecurityType.Mortgage,\r\n Text: 'Mortgage'\r\n },\r\n ],\r\n SecurityStatuses:\r\n [\r\n {\r\n SortOrder: 1,\r\n Value: EnumSecurityStatus.Requested,\r\n Text: 'Requested'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumSecurityStatus.Received,\r\n Text: 'Received'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumSecurityStatus.Cancelled,\r\n Text: 'Cancelled'\r\n }\r\n ],\r\n AmortizationTypes:\r\n [\r\n {\r\n Value: EnumAmortizationType.AnnuityShpizer,\r\n Text: 'Annuity/Shpizer'\r\n },\r\n {\r\n Value: EnumAmortizationType.Baloon,\r\n Text: 'Baloon'\r\n },\r\n {\r\n Value: EnumAmortizationType.StraightLine,\r\n Text: 'StraightLine'\r\n },\r\n {\r\n Value: EnumAmortizationType.OnCall,\r\n Text: 'OnCall'\r\n },\r\n ],\r\n InterestTypes:\r\n [\r\n {\r\n Value: EnumInterestType.Flat,\r\n Text: 'Flat'\r\n },\r\n {\r\n Value: EnumInterestType.Linked,\r\n Text: 'Linked'\r\n },\r\n ],\r\n RecurringIncreaseTypes:\r\n [\r\n {\r\n SortOrder: 1,\r\n Value: EnumIncreaseType.None,\r\n Text: 'None'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumIncreaseType.Percent,\r\n Text: 'Percent'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumIncreaseType.FixedAmount,\r\n Text: 'FixedAmount'\r\n }\r\n ],\r\n BankGroups:\r\n [\r\n {\r\n Value: EnumBankGroups.Poalim,\r\n Text: 'Poliam'\r\n },\r\n {\r\n Value: EnumBankGroups.Leumi,\r\n Text: 'Leumi'\r\n },\r\n {\r\n Value: EnumBankGroups.Discount,\r\n Text: 'Discount'\r\n },\r\n {\r\n Value: EnumBankGroups.Mizrahi,\r\n Text: 'Mizrahi'\r\n },\r\n {\r\n Value: EnumBankGroups.BenLeumi,\r\n Text: 'BenLeumi'\r\n },\r\n {\r\n Value: EnumBankGroups.CityBank,\r\n Text: 'CityBank'\r\n },\r\n {\r\n Value: EnumBankGroups.Doar,\r\n Text: 'Doar',\r\n },\r\n {\r\n Value: EnumBankGroups.Jerusalem,\r\n Text: 'Jerusalem',\r\n },\r\n {\r\n Value: EnumBankGroups.HSBC,\r\n Text: 'HSBC'\r\n },\r\n {\r\n Value: EnumBankGroups.CCProcessors,\r\n Text: 'CCProcessors'\r\n }\r\n ],\r\n DashboardGroupBy:\r\n [\r\n {\r\n Value: EnumDashboardGroupBy.Account,\r\n Text: 'Account'\r\n },\r\n {\r\n Value: EnumDashboardGroupBy.AccountGroup,\r\n Text: 'Account Group'\r\n },\r\n {\r\n Value: EnumDashboardGroupBy.Bank,\r\n Text: 'Bank'\r\n },\r\n {\r\n Value: EnumDashboardGroupBy.Company,\r\n Text: 'Company'\r\n },\r\n {\r\n Value: EnumDashboardGroupBy.Currency,\r\n Text: 'Currency'\r\n }\r\n ],\r\n Quarters:\r\n [\r\n {\r\n Text: 'Quarter 1',\r\n Value: 1,\r\n DateFrom: Globals.FirstQuarterFromDate,\r\n DateTo: Globals.FirstQuarterToDate\r\n },\r\n {\r\n Text: 'Quarter 2',\r\n Value: 2,\r\n DateFrom: Globals.SecondQuarterFromDate,\r\n DateTo: Globals.SecondQuarterToDate\r\n },\r\n {\r\n Text: 'Quarter 3',\r\n Value: 3,\r\n DateFrom: Globals.ThirdQuarterFromDate,\r\n DateTo: Globals.ThirdQuarterToDate\r\n },\r\n {\r\n Text: 'Quarter 4',\r\n Value: 4,\r\n DateFrom: Globals.FourthQuarterFromDate,\r\n DateTo: Globals.FourthQuarterToDate\r\n }\r\n ],\r\n BankPassCredentialValidity:\r\n [\r\n {\r\n Value: EnumBankPassCredentialValidity.Unknown,\r\n Text: 'Unknown'\r\n },\r\n {\r\n Value: EnumBankPassCredentialValidity.Valid,\r\n Text: 'Valid'\r\n },\r\n {\r\n Value: EnumBankPassCredentialValidity.Invalid,\r\n Text: 'Invalid'\r\n }\r\n ],\r\n ClassificarionRuleFieldTypes:\r\n [\r\n {\r\n Value: EnumClassificarionRuleFieldType.Notes1,\r\n Text: 'Notes 1'\r\n },\r\n {\r\n Value: EnumClassificarionRuleFieldType.Notes2,\r\n Text: 'Notes 2'\r\n },\r\n {\r\n Value: EnumClassificarionRuleFieldType.Reference,\r\n Text: 'Reference'\r\n }\r\n ],\r\n ClassificarionRuleMatchTypes:\r\n [\r\n {\r\n SortOrder: 0,\r\n Value: EnumClassificarionRuleMatchType.Equal,\r\n Text: 'Equal'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumClassificarionRuleMatchType.StartWith,\r\n Text: 'Starts with'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumClassificarionRuleMatchType.Contains,\r\n Text: 'Contains'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumClassificarionRuleMatchType.MatchRegex,\r\n Text: 'Matches RegEx'\r\n },\r\n {\r\n SortOrder: 10,\r\n Value: EnumClassificarionRuleMatchType.NotEqual,\r\n Text: 'Not Equal'\r\n },\r\n {\r\n SortOrder: 11,\r\n Value: EnumClassificarionRuleMatchType.NotStartWith,\r\n Text: 'Doesn\\'t start with'\r\n },\r\n {\r\n SortOrder: 12,\r\n Value: EnumClassificarionRuleMatchType.NotContains,\r\n Text: 'Doesn\\'t contain'\r\n },\r\n {\r\n SortOrder: 13,\r\n Value: EnumClassificarionRuleMatchType.NotMatchRegex,\r\n Text: 'Doesn\\'t match RegEx'\r\n }\r\n ],\r\n CompanyTabs:\r\n [\r\n {\r\n index: 0,\r\n text: 'Bank Accounts',\r\n Type: EnumCompanyChildEntityTypes.Account,\r\n Name: 'AccountTab'\r\n },\r\n {\r\n index: 1,\r\n text: 'Booking posting templates',\r\n Type: EnumCompanyChildEntityTypes.PostingTemplate,\r\n Name: 'PostingTemplateTab'\r\n },\r\n {\r\n index: 2,\r\n text: 'Transaction Categories',\r\n Type: EnumCompanyChildEntityTypes.Category,\r\n Name: 'CategoryTab'\r\n },\r\n {\r\n index: 3,\r\n text: 'Parent Categories',\r\n Type: EnumCompanyChildEntityTypes.ParentCategory,\r\n Name: 'ParentCategoryTab'\r\n },\r\n {\r\n index: 4,\r\n text: 'Transaction Classification rules',\r\n Type: EnumCompanyChildEntityTypes.ClassificationRule,\r\n Name: 'ClassificationrRuleTab'\r\n },\r\n {\r\n index: 5,\r\n text: 'Cashflow settings',\r\n Type: EnumCompanyChildEntityTypes.ForecastMapper,\r\n Name: 'ForecastMapperTab'\r\n },\r\n {\r\n index: 6,\r\n text: 'Credit Card Processing Contracts',\r\n Type: EnumCompanyChildEntityTypes.CCContract,\r\n Name: 'CreditCardProcessingContractsTab'\r\n }\r\n ],\r\n NotificationTemplatesTabs: [\r\n {\r\n index: 0,\r\n text: 'Balances',\r\n Name: 'BalancesTab'\r\n },\r\n {\r\n index: 1,\r\n text: 'Transaction',\r\n Name: 'TransactionTab'\r\n },\r\n {\r\n index: 2,\r\n text: 'Balance Details',\r\n Name: 'BalanceDetailsTab'\r\n },\r\n {\r\n index: 3,\r\n text: 'Loan Payments',\r\n Name: 'LoanPaymentsTab'\r\n }\r\n ],\r\n CashflowTabs:\r\n [\r\n {\r\n Value: 0,\r\n Text: 'Detailed view',\r\n Name: 'DetailedTab'\r\n },\r\n {\r\n Value: 1,\r\n Text: 'Summarized view',\r\n Name: 'SummarizedTab'\r\n },\r\n {\r\n Value: 2,\r\n Text: 'Graph view',\r\n Name: 'ChartTab'\r\n },\r\n {\r\n Value: 3,\r\n Text: 'Category view',\r\n Name: 'CategoryTab'\r\n },\r\n {\r\n Value: 4,\r\n Text: 'Category Dynamic view',\r\n Name: 'CategoryDynamicTab'\r\n }\r\n\r\n ],\r\n LoanTabs: [\r\n {\r\n index: 0,\r\n text: 'Loan Details',\r\n Name: 'GeneralTab'\r\n },\r\n {\r\n index: 1,\r\n text: 'Payment Schedule',\r\n Name: 'PaymentsTab'\r\n },\r\n {\r\n index: 2,\r\n text: 'Securities',\r\n Name: 'SecuritiesTab'\r\n },\r\n ],\r\n BalanceHistoryReportDateRanges:\r\n [\r\n {\r\n DateFrom: Globals.BeginningOfLastYear,\r\n DateTo: Globals.LastYearLastDate,\r\n Text: 'Last year'\r\n },\r\n {\r\n DateFrom: Globals.BeginningOfYear,\r\n DateTo: Globals.Yesterday,\r\n Text: 'This year'\r\n },\r\n {\r\n DateFrom: Globals.BeginningOfQuater,\r\n DateTo: Globals.Yesterday,\r\n Text: 'This quarter'\r\n },\r\n {\r\n DateFrom: Globals.LastMonthFirstDate,\r\n DateTo: Globals.LastMonthLastDate,\r\n Text: 'Last month'\r\n },\r\n {\r\n DateFrom: Globals.ThisMonthFirstDate,\r\n DateTo: Globals.Today,\r\n Text: 'This month'\r\n }\r\n ],\r\n BalanceHistoryReportMode:\r\n [\r\n {\r\n Value: EnumBalanceHistoryReportMode.Daily,\r\n Text: 'Daily'\r\n },\r\n {\r\n Value: EnumBalanceHistoryReportMode.Monthly,\r\n Text: 'Monthly'\r\n },\r\n {\r\n Value: EnumBalanceHistoryReportMode.Weekly,\r\n Text: 'Weekly'\r\n }\r\n ],\r\n Sources:\r\n [\r\n {\r\n Value: EnumSource.Automatic,\r\n Text: 'Automatic'\r\n },\r\n {\r\n Value: EnumSource.Manual,\r\n Text: 'Manual'\r\n }\r\n ],\r\n Sides:\r\n [\r\n {\r\n Value: EnumSide.Expense,\r\n Text: 'Expense'\r\n },\r\n {\r\n Value: EnumSide.Income,\r\n Text: 'Income'\r\n }\r\n ],\r\n LoanSides:\r\n [\r\n {\r\n Value: EnumLoanSide.Outgoing,\r\n Text: 'Outgoing'\r\n },\r\n {\r\n Value: EnumLoanSide.Incoming,\r\n Text: 'Incoming'\r\n }\r\n ],\r\n LoanPaymentFrequencyTypes:\r\n [\r\n {\r\n SortOrder: 0,\r\n Value: EnumLoanPaymentFrequencyType.Weekly,\r\n Text: 'Weekly',\r\n Count: 1,\r\n UnitType: EnumLoanPaymentFrequencyType.Weekly\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumLoanPaymentFrequencyType.BiWeekly,\r\n Text: 'Bi-Weekly',\r\n Count: 2,\r\n UnitType: EnumLoanPaymentFrequencyType.Weekly\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumLoanPaymentFrequencyType.Monthly,\r\n Text: 'Monthly',\r\n Count: 1,\r\n UnitType: EnumLoanPaymentFrequencyType.Monthly\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumLoanPaymentFrequencyType.BiMonthly,\r\n Text: 'Bi-Monthly',\r\n Count: 2,\r\n UnitType: EnumLoanPaymentFrequencyType.Monthly\r\n },\r\n {\r\n SortOrder: 4,\r\n Value: EnumLoanPaymentFrequencyType.Quorterly,\r\n Text: 'Quarterly',\r\n Count: 3,\r\n UnitType: EnumLoanPaymentFrequencyType.Monthly\r\n },\r\n {\r\n SortOrder: 5,\r\n Value: EnumLoanPaymentFrequencyType.SemiAnnual,\r\n Text: 'Semi Annual',\r\n Count: 6,\r\n UnitType: EnumLoanPaymentFrequencyType.Monthly\r\n },\r\n {\r\n SortOrder: 6,\r\n Value: EnumLoanPaymentFrequencyType.Annual,\r\n Text: 'Annual',\r\n Count: 12,\r\n UnitType: EnumLoanPaymentFrequencyType.Monthly\r\n },\r\n {\r\n SortOrder: 7,\r\n Value: EnumLoanPaymentFrequencyType.OneTimePayment,\r\n Text: 'One Time payment',\r\n Count: 0,\r\n UnitType: EnumLoanPaymentFrequencyType.OneTimePayment\r\n }\r\n ],\r\n LoanInterestPeriodCalculationTypes:\r\n [\r\n {\r\n Value: EnumLoanInterestPeriodCalculationType.Daily,\r\n Text: 'Daily'\r\n },\r\n {\r\n Value: EnumLoanInterestPeriodCalculationType.Monthly,\r\n Text: 'Monthly'\r\n }\r\n ],\r\n UserAuthorizationTypes:\r\n [\r\n {\r\n Value: EnumUserAuthorizationType.All,\r\n Text: 'All'\r\n },\r\n {\r\n Value: EnumUserAuthorizationType.Companies,\r\n Text: 'Companies'\r\n },\r\n {\r\n Value: EnumUserAuthorizationType.Accounts,\r\n Text: 'Accounts'\r\n }\r\n ],\r\n ShareInformationWith:\r\n [\r\n {\r\n Value: EnumShareWith.Myself,\r\n Text: 'Myself'\r\n },\r\n {\r\n Value: EnumShareWith.Users,\r\n Text: 'Users in my organization'\r\n },\r\n {\r\n Value: EnumShareWith.Emails,\r\n Text: '3rd party'\r\n },\r\n ],\r\n SummaryLevels:\r\n [\r\n {\r\n Value: EnumSummaryLevel.Day,\r\n Text: 'Day',\r\n SortOrder: 0\r\n },\r\n {\r\n Value: EnumSummaryLevel.Week,\r\n Text: 'Week',\r\n SortOrder: 1\r\n },\r\n {\r\n Value: EnumSummaryLevel.Month,\r\n Text: 'Month',\r\n SortOrder: 2\r\n },\r\n ],\r\n CashflowSummarizedAggregationLevels:\r\n [\r\n {\r\n Value: EnumCashflowSummarizedAggregationLevel.Company,\r\n Text: 'Company'\r\n },\r\n {\r\n Value: EnumCashflowSummarizedAggregationLevel.Account,\r\n Text: 'Account'\r\n },\r\n {\r\n Value: EnumCashflowSummarizedAggregationLevel.BookingAccount,\r\n Text: 'Booking Account'\r\n },\r\n {\r\n Value: EnumCashflowSummarizedAggregationLevel.AccountGroup,\r\n Text: 'Account Group'\r\n },\r\n {\r\n Value: EnumCashflowSummarizedAggregationLevel.Bank,\r\n Text: 'Bank'\r\n },\r\n {\r\n Value: EnumCashflowSummarizedAggregationLevel.BankGroup,\r\n Text: 'Bank Group'\r\n },\r\n {\r\n Value: EnumCashflowSummarizedAggregationLevel.Currency,\r\n Text: 'Currency'\r\n },\r\n {\r\n Value: EnumCashflowSummarizedAggregationLevel.Category,\r\n Text: 'Category'\r\n },\r\n ],\r\n ShowInCurrencyOptions:\r\n [\r\n {\r\n Value: EnumShowInCurrencyOptions.Original,\r\n Text: 'Original',\r\n SortOrder: 0\r\n },\r\n {\r\n Value: EnumShowInCurrencyOptions.ILS,\r\n Text: 'ILS',\r\n SortOrder: 1\r\n },\r\n {\r\n Value: EnumShowInCurrencyOptions.Both,\r\n Text: 'Original & ILS',\r\n SortOrder: 2\r\n },\r\n {\r\n Value: EnumShowInCurrencyOptions.OriginalAndDollar,\r\n Text: 'Original & Dollar',\r\n SortOrder: 3\r\n },\r\n {\r\n Value: EnumShowInCurrencyOptions.OriginalAndDefault,\r\n Text: 'Original & Default',\r\n SortOrder: 4\r\n },\r\n {\r\n Value: EnumShowInCurrencyOptions.Default,\r\n Text: 'Default',\r\n SortOrder: 5\r\n },\r\n\r\n ],\r\n EnumNotificationTemplateSectionFields:\r\n [\r\n {\r\n Value: EnumNotificationTemplateSectionFields.AccountGroup,\r\n Text: 'Account group'\r\n },\r\n {\r\n Value: EnumNotificationTemplateSectionFields.BankGroup,\r\n Text: 'Bank group'\r\n },\r\n {\r\n Value: EnumNotificationTemplateSectionFields.Bank,\r\n Text: 'Bank'\r\n },\r\n {\r\n Value: EnumNotificationTemplateSectionFields.Company,\r\n Text: 'Company'\r\n },\r\n {\r\n Value: EnumNotificationTemplateSectionFields.BookingAccount,\r\n Text: 'Booking account'\r\n },\r\n {\r\n Value: EnumNotificationTemplateSectionFields.BankAccount,\r\n Text: 'Bank account'\r\n },\r\n {\r\n Value: EnumNotificationTemplateSectionFields.BookingAccountType,\r\n Text: 'Booking account type'\r\n },\r\n {\r\n Value: EnumNotificationTemplateSectionFields.Currency,\r\n Text: 'Currency'\r\n },\r\n {\r\n Value: EnumNotificationTemplateSectionFields.HasCheques,\r\n Text: 'Has Cheques'\r\n },\r\n {\r\n Value: EnumNotificationTemplateSectionFields.Category,\r\n Text: 'Category'\r\n },\r\n {\r\n Value: EnumNotificationTemplateSectionFields.DepositTypes,\r\n Text: 'Deposit Types'\r\n },\r\n {\r\n Value: EnumNotificationTemplateSectionFields.StockTypes,\r\n Text: 'Stock Types'\r\n },\r\n {\r\n Value: EnumNotificationTemplateSectionFields.AmortizationType,\r\n Text: 'Amortization Types'\r\n },\r\n {\r\n Value: EnumNotificationTemplateSectionFields.InterestType,\r\n Text: 'Interest Types'\r\n },\r\n {\r\n Value: EnumNotificationTemplateSectionFields.NextDays,\r\n Text: 'Next Days'\r\n },\r\n {\r\n Value: EnumNotificationTemplateSectionFields.NextWeeks,\r\n Text: 'Next Weeks'\r\n },\r\n {\r\n Value: EnumNotificationTemplateSectionFields.NextMonths,\r\n Text: 'Next Months'\r\n },\r\n {\r\n Value: EnumNotificationTemplateSectionFields.SumSide,\r\n Text: 'Transaction Side'\r\n }\r\n ],\r\n PredefinedNotificationTemplatesMenuItems:\r\n [\r\n {\r\n Value: EnumPredefinedNotificationTemplates.General,\r\n Text: 'General'\r\n },\r\n {\r\n Value: EnumPredefinedNotificationTemplates.Detailed,\r\n Text: 'Detailed'\r\n },\r\n {\r\n Value: EnumPredefinedNotificationTemplates.TotalBalance,\r\n Text: 'Total Balance'\r\n },\r\n {\r\n Value: EnumPredefinedNotificationTemplates.Empty,\r\n Text: 'Empty'\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 MatchingRelationships: [\r\n {\r\n Value: EnumMatchingRelationship.And,\r\n Text: 'And'\r\n },\r\n {\r\n Value: EnumMatchingRelationship.Or,\r\n Text: 'Or'\r\n },\r\n ],\r\n BillingReportTabs:\r\n [\r\n {\r\n index: 0,\r\n text: 'Dashboard view',\r\n Name: 'DashboardsViewTab'\r\n },\r\n {\r\n index: 1,\r\n text: 'Grid view',\r\n Name: 'GridViewTab'\r\n }\r\n ],\r\n BankTypes:\r\n [\r\n {\r\n Value: EnumBankTypes.Local,\r\n Text: '1. Israeli Bank'\r\n },\r\n {\r\n Value: EnumBankTypes.ExternalCreditCard,\r\n Text: '2. External Credit Card'\r\n },\r\n {\r\n Value: EnumBankTypes.Foreign,\r\n Text: '3. Foreign Bank'\r\n },\r\n {\r\n Value: EnumBankTypes.ExternalLoaner,\r\n Text: '4. External Loaner'\r\n },\r\n {\r\n Value: EnumBankTypes.CCProcessor,\r\n Text: '5. Credit Card Processor'\r\n },\r\n ],\r\n ReplicationStatuses:\r\n [\r\n {\r\n Value: EnumReplicationStatuses.Initiated,\r\n Text: 'Initiated'\r\n },\r\n {\r\n Value: EnumReplicationStatuses.NoData,\r\n Text: 'No data'\r\n },\r\n {\r\n Value: EnumReplicationStatuses.Exception,\r\n Text: 'Exception'\r\n },\r\n {\r\n Value: EnumReplicationStatuses.Success,\r\n Text: 'Success'\r\n },\r\n {\r\n Value: EnumReplicationStatuses.CompanyNotFound,\r\n Text: 'Company not found'\r\n }\r\n ],\r\n ReplicationObjectTypes:\r\n [\r\n {\r\n Value: EnumReplicationObjectTypes.AccountingJournalEntry,\r\n Text: 'Journal entry'\r\n },\r\n {\r\n Value: EnumReplicationObjectTypes.BusinessPartner,\r\n Text: 'Business partner'\r\n },\r\n {\r\n Value: EnumReplicationObjectTypes.BusinessPartnerGroup,\r\n Text: 'Business partner group'\r\n },\r\n {\r\n Value: EnumReplicationObjectTypes.DimensionCode1,\r\n Text: 'Dimension code 1'\r\n },\r\n {\r\n Value: EnumReplicationObjectTypes.DimensionCode2,\r\n Text: 'Dimension code 2'\r\n },\r\n {\r\n Value: EnumReplicationObjectTypes.DimensionCode3,\r\n Text: 'Dimension code 3'\r\n },\r\n {\r\n Value: EnumReplicationObjectTypes.DimensionCode4,\r\n Text: 'Dimension code 4'\r\n },\r\n {\r\n Value: EnumReplicationObjectTypes.DimensionCode5,\r\n Text: 'Dimension code 5'\r\n },\r\n {\r\n Value: EnumReplicationObjectTypes.Document,\r\n Text: 'Document'\r\n },\r\n {\r\n Value: EnumReplicationObjectTypes.AccountingForecast,\r\n Text: 'Accounting Forecast'\r\n },\r\n {\r\n Value: EnumReplicationObjectTypes.AccountingForecastCategory,\r\n Text: 'Accounting Forecast category'\r\n },\r\n {\r\n Value: EnumReplicationObjectTypes.Item,\r\n Text: 'Item'\r\n },\r\n {\r\n Value: EnumReplicationObjectTypes.ItemGroup,\r\n Text: 'Item group'\r\n },\r\n {\r\n Value: EnumReplicationObjectTypes.LedgerAccount,\r\n Text: 'Ledger account'\r\n },\r\n {\r\n Value: EnumReplicationObjectTypes.LedgerAccountGroup,\r\n Text: 'Ledger account group'\r\n },\r\n {\r\n Value: EnumReplicationObjectTypes.Payment,\r\n Text: 'Payment'\r\n },\r\n {\r\n Value: EnumReplicationObjectTypes.Project,\r\n Text: 'Project'\r\n },\r\n {\r\n Value: EnumReplicationObjectTypes.SalesPerson,\r\n Text: 'Sales person'\r\n },\r\n {\r\n Value: EnumReplicationObjectTypes.PaymentGroup,\r\n Text: 'Payment group'\r\n },\r\n {\r\n Value: EnumReplicationObjectTypes.CompanyMetadata,\r\n Text: 'Company metadata'\r\n }\r\n\r\n ],\r\n PaymentMeansTypes:\r\n [\r\n {\r\n Value: EnumPaymentMeansTypes.Cach,\r\n Text: 'Cash'\r\n },\r\n {\r\n Value: EnumPaymentMeansTypes.Cheque,\r\n Text: 'Cheque'\r\n },\r\n {\r\n Value: EnumPaymentMeansTypes.CreditCard,\r\n Text: 'Credit card'\r\n },\r\n {\r\n Value: EnumPaymentMeansTypes.WireTransfer,\r\n Text: 'Wire transfer'\r\n },\r\n {\r\n Value: EnumPaymentMeansTypes.Multiple,\r\n Text: 'Multiple'\r\n }\r\n ],\r\n TransactionCategoryIcons:\r\n [\r\n {\r\n Value: 'cheques.png',\r\n Text: 'Cheques'\r\n },\r\n {\r\n Value: 'transfer.png',\r\n Text: 'Transfer'\r\n },\r\n {\r\n Value: 'deposit-payment.png',\r\n Text: 'Deposit Payment'\r\n },\r\n {\r\n Value: 'interest-payment.png',\r\n Text: 'Interest Payment'\r\n },\r\n {\r\n Value: 'commission.png',\r\n Text: 'Commission'\r\n },\r\n {\r\n Value: 'credit-card.png',\r\n Text: 'Credit Card Charge'\r\n },\r\n {\r\n Value: 'management-fee.png',\r\n Text: 'Management Fee'\r\n },\r\n {\r\n Value: 'misc.png',\r\n Text: 'Other'\r\n }\r\n ],\r\n DocumentTypes:\r\n [\r\n {\r\n Value: EnumDocumentType.Invoice,\r\n Text: 'Invoice'\r\n },\r\n {\r\n Value: EnumDocumentType.Refund,\r\n Text: 'Credit Memo'\r\n },\r\n {\r\n Value: EnumDocumentType.PurchaseInvoice,\r\n Text: 'Purchase Invoice'\r\n },\r\n {\r\n Value: EnumDocumentType.PurchaseReservationInvoice,\r\n Text: 'Credit Purchase Invoice'\r\n },\r\n ],\r\n BusinessPartnerTabs:\r\n [\r\n {\r\n index: 0,\r\n text: 'Documents'\r\n },\r\n {\r\n index: 1,\r\n text: 'Payments'\r\n },\r\n {\r\n index: 2,\r\n text: 'Ledger'\r\n }\r\n ],\r\n BusinessPartnerTypes:\r\n [\r\n {\r\n Value: EnumSide.Expense,\r\n Text: 'Vendor'\r\n },\r\n {\r\n Value: EnumSide.Income,\r\n Text: 'Customer'\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 ExpenseManagementTabs:\r\n [\r\n {\r\n index: 0,\r\n text: 'Departments',\r\n Name: 'DepartmentTab'\r\n },\r\n {\r\n index: 1,\r\n text: 'Branches',\r\n Name: 'BranchTab'\r\n },\r\n {\r\n index: 2,\r\n text: 'Workers',\r\n Name: 'WorkerTab'\r\n },\r\n {\r\n index: 3,\r\n text: 'Expense Categories',\r\n Name: 'ExpenseCategoriesTab'\r\n },\r\n {\r\n index: 4,\r\n text: 'Custom fields',\r\n Name: 'CustomFieldsTab'\r\n },\r\n {\r\n index: 5,\r\n text: 'Approval rules',\r\n Name: 'ApprovalRulesTab'\r\n }\r\n ],\r\n VisibilitySettings:\r\n [\r\n {\r\n Value: EnumVisibilitySetting.Hide,\r\n Text: 'Hide'\r\n },\r\n {\r\n Value: EnumVisibilitySetting.Mandatory,\r\n Text: 'Mandatory'\r\n },\r\n {\r\n Value: EnumVisibilitySetting.Show,\r\n Text: 'Show'\r\n }\r\n ],\r\n CustomFieldsetFieldInputTypes:\r\n [\r\n {\r\n index: 0,\r\n Value: EnumCustomFieldsetFieldInputType.Text,\r\n Text: 'Text'\r\n },\r\n {\r\n index: 1,\r\n Value: EnumCustomFieldsetFieldInputType.Number,\r\n Text: 'Number'\r\n },\r\n {\r\n index: 2,\r\n Value: EnumCustomFieldsetFieldInputType.Memo,\r\n Text: 'Memo'\r\n },\r\n {\r\n index: 3,\r\n Value: EnumCustomFieldsetFieldInputType.Dropdown,\r\n Text: 'Dropdown'\r\n },\r\n {\r\n index: 4,\r\n Value: EnumCustomFieldsetFieldInputType.Checkbox,\r\n Text: 'Checkbox'\r\n }\r\n ],\r\n ExpenseStatuses:\r\n [\r\n {\r\n SortOrder: 0,\r\n Value: EnumExpenseStatus.Submitted,\r\n Text: 'Submitted'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumExpenseStatus.Canceled,\r\n Text: 'Canceled'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumExpenseStatus.Approved,\r\n Text: 'Approved'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumExpenseStatus.Rejected,\r\n Text: 'Rejected'\r\n },\r\n {\r\n SortOrder: 4,\r\n Value: EnumExpenseStatus.Posted,\r\n Text: 'Posted'\r\n }\r\n ],\r\n LoanPostPaymentRecalculationOptions: [\r\n {\r\n SortOrder: 0,\r\n Value: EnumLoanPostPaymentRecalculationOptions.Payment,\r\n Text: 'Add difference to next payment'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumLoanPostPaymentRecalculationOptions.Loan,\r\n Text: 'Re-calculate loan'\r\n }\r\n ],\r\n PostPaymentActions: [\r\n {\r\n SortOrder: 0,\r\n Value: 0,\r\n Text: 'Add to principal',\r\n Linkage: false,\r\n },\r\n {\r\n SortOrder: 0,\r\n Value: 1,\r\n Text: 'Add to interest',\r\n Linkage: false,\r\n },\r\n {\r\n SortOrder: 0,\r\n Value: 2,\r\n Text: 'Add to comission',\r\n Linkage: false,\r\n },\r\n {\r\n SortOrder: 0,\r\n Value: 3,\r\n Text: 'Add to linkage surplus',\r\n Linkage: true,\r\n },\r\n {\r\n SortOrder: 0,\r\n Value: 4,\r\n Text: 'Add to interest surplus',\r\n Linkage: true,\r\n }\r\n ],\r\n FinancialReportDateTypes:\r\n [\r\n {\r\n SortOrder: 0,\r\n Value: EnumFinancialReportDateType.PostingDate,\r\n Text: 'Posting date'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumFinancialReportDateType.DueDate,\r\n Text: 'Due date'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumFinancialReportDateType.TaxDate,\r\n Text: 'Tax date'\r\n },\r\n ],\r\n FinancialReportCurrencyTypes: [\r\n {\r\n SortOrder: 0,\r\n Value: EnumFinancialReportCurrencyType.Local,\r\n Text: 'Local'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumFinancialReportCurrencyType.System,\r\n Text: 'System'\r\n },\r\n ],\r\n FinancialReportRangeTypes: [\r\n {\r\n SortOrder: 0,\r\n Value: EnumFinancialReportRangeType.All,\r\n Text: 'All'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumFinancialReportRangeType.Month,\r\n Text: 'Month'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumFinancialReportRangeType.Quarter,\r\n Text: 'Quarter'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumFinancialReportRangeType.Year,\r\n Text: 'Year'\r\n },\r\n ],\r\n LastTransactionsDateOptions: [\r\n {\r\n SortOrder: 0,\r\n Value: 1,\r\n Text: '24 hours'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: 3,\r\n Text: '3 last days'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: 7,\r\n Text: 'Past week'\r\n }\r\n ],\r\n DataExportTypes: [\r\n {\r\n Value: EnumDataExportType.Automatic,\r\n Text: 'Automatic'\r\n },\r\n {\r\n Value: EnumDataExportType.BAI2File,\r\n Text: 'BAI2 File'\r\n },\r\n {\r\n Value: EnumDataExportType.ExcelFile,\r\n Text: 'Excel File'\r\n },\r\n {\r\n Value: EnumDataExportType.BezeqZahav14File,\r\n Text: 'BezeqZahav 14 File'\r\n },\r\n {\r\n Value: EnumDataExportType.BezeqZahav24File,\r\n Text: 'BezeqZahav 24 File'\r\n },\r\n {\r\n Value: EnumDataExportType.BezeqZahav48File,\r\n Text: 'BezeqZahav 48 File'\r\n },\r\n {\r\n Value: EnumDataExportType.MT940File,\r\n Text: 'MT940 File'\r\n },\r\n {\r\n Value: EnumDataExportType.IntentiaFile,\r\n Text: 'Intentia File'\r\n }\r\n ],\r\n ExportTransactionsMethods: [\r\n {\r\n SortOrder: 0,\r\n Value: EnumExportTransactionsMethod.ExportNewTransactions,\r\n Text: 'New Transactions'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumExportTransactionsMethod.ExportTransactionsFromDate,\r\n Text: 'From Date'\r\n }\r\n ],\r\n LedgerAccountTypes: [\r\n {\r\n SortOrder: 0,\r\n Value: EnumLedgerAccountType.Income,\r\n Text: 'Income'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumLedgerAccountType.Expense,\r\n Text: 'Expense'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumLedgerAccountType.Other,\r\n Text: 'Other'\r\n }\r\n ],\r\n JournalEntryCurrencyTypes: [\r\n {\r\n SortOrder: 0,\r\n Value: EnumJournalEntryCurrencyTypes.Local,\r\n Text: 'Local'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumJournalEntryCurrencyTypes.System,\r\n Text: 'System'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumJournalEntryCurrencyTypes.Foreign,\r\n Text: 'Foreign'\r\n }\r\n ],\r\n ChequesReportTabs:\r\n [\r\n {\r\n index: 0,\r\n text: 'Incoming',\r\n Name: 'Incoming'\r\n },\r\n {\r\n index: 1,\r\n text: 'Outgoing',\r\n Name: 'Outgoing'\r\n }\r\n ],\r\n ProcessingCompanies:\r\n [\r\n {\r\n Value: EnumCCProcessingCompanies.Isracard,\r\n Text: 'Isracard'\r\n },\r\n {\r\n Value: EnumCCProcessingCompanies.VisaCal,\r\n Text: ''\r\n },\r\n {\r\n Value: EnumCCProcessingCompanies.LeumiMax,\r\n Text: 'LeumiMax'\r\n }\r\n ],\r\n Brands:\r\n [\r\n {\r\n Value: EnumCCBrands.All,\r\n Text: 'All',\r\n Icon: 'assets/projects/kraken/cc-brand-generic.svg'\r\n },\r\n {\r\n Value: EnumCCBrands.MasterCard,\r\n Text: 'MasterCard',\r\n Icon: 'assets/projects/kraken/cc-brand-mastercard.svg'\r\n },\r\n {\r\n Value: EnumCCBrands.Visa,\r\n Text: 'Visa',\r\n Icon: 'assets/projects/kraken/cc-brand-visa.svg'\r\n },\r\n {\r\n Value: EnumCCBrands.Amex,\r\n Text: 'Amex',\r\n Icon: 'assets/projects/kraken/cc-brand-american-express.svg'\r\n },\r\n {\r\n Value: EnumCCBrands.Diners,\r\n Text: 'Diners',\r\n Icon: 'assets/projects/kraken/cc-brand-diners.svg'\r\n },\r\n {\r\n Value: EnumCCBrands.Isracard,\r\n Text: 'Isracard',\r\n Icon: 'assets/projects/kraken/cc-brand-isracard.svg'\r\n }\r\n ],\r\n UploadHistoryTabs:\r\n [\r\n {\r\n index: 0,\r\n text: 'Bank pages'\r\n },\r\n {\r\n index: 1,\r\n text: 'Journal entries'\r\n },\r\n {\r\n index: 2,\r\n text: 'Incoming payments'\r\n },\r\n ],\r\n ApplyToBookingAccountsTypes: [\r\n {\r\n SortOrder: 1,\r\n Value: EnumApplyToBookingAccountsTypes.All,\r\n Text: 'All accounts'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumApplyToBookingAccountsTypes.SpecificCurrency,\r\n Text: 'Accounts with specific currency'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumApplyToBookingAccountsTypes.Specific,\r\n Text: 'Specific account'\r\n }\r\n ],\r\n NoteFieldTypes: [\r\n {\r\n SortIndex: 1,\r\n Value: EnumNoteFieldTypes.Note1,\r\n Text: 'Note 1'\r\n },\r\n {\r\n SortIndex: 2,\r\n Value: EnumNoteFieldTypes.Note2,\r\n Text: 'Note 2'\r\n }\r\n ],\r\n NoteMatchTypes: [\r\n {\r\n SortOrder: 1,\r\n Value: EnumNoteMatchTypes.Equal,\r\n Text: 'Equal'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumNoteMatchTypes.StartWith,\r\n Text: 'Start with'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumNoteMatchTypes.EndsWith,\r\n Text: 'Ends with'\r\n },\r\n {\r\n SortOrder: 4,\r\n Value: EnumNoteMatchTypes.Contains,\r\n Text: 'Contains'\r\n },\r\n ],\r\n NotesExportAdjustments: [\r\n {\r\n SortOrder: 1,\r\n Value: EnumNotesExportAdjustments.None,\r\n Text: 'None',\r\n Description: 'Nothing to do'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumNotesExportAdjustments.Notes2Append,\r\n Text: 'Notes 1 + Notes 2',\r\n Description: 'Add Note 2 in the end of Note 1'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumNotesExportAdjustments.Notes2Override,\r\n Text: 'Notes 1 <> Notes 2',\r\n Description: 'Rewrite Note 1 as Note 2'\r\n },\r\n {\r\n SortOrder: 4,\r\n Value: EnumNotesExportAdjustments.Notes2Prepend,\r\n Text: 'Notes 2 + Notes 1',\r\n Description: 'Add Note 2 in the start of Note 1'\r\n }\r\n ],\r\n AccountFullNameDisplayType: [\r\n {\r\n Value: EnumAccountFullNameDisplayType.Full,\r\n Text: 'Full name'\r\n },\r\n {\r\n Value: EnumAccountFullNameDisplayType.NumberAndBranch,\r\n Text: 'Number and Branch'\r\n },\r\n {\r\n Value: EnumAccountFullNameDisplayType.NumberOnly,\r\n Text: 'Number only'\r\n },\r\n {\r\n Value: EnumAccountFullNameDisplayType.BankAndNumber,\r\n Text: 'Bank and Number'\r\n }\r\n ],\r\n SyncStatusTabs: [\r\n {\r\n index: 0,\r\n text: 'Account',\r\n Value: 'Account'\r\n },\r\n {\r\n index: 1,\r\n text: 'Contract',\r\n Value: 'Contract'\r\n }\r\n ],\r\n BillingContractsReportTabs: [\r\n {\r\n index: 0,\r\n text: 'Summary'\r\n },\r\n {\r\n index: 1,\r\n text: 'Billing'\r\n }\r\n ],\r\n JournalEntryUploadLevels: [\r\n {\r\n SortOrder: 1,\r\n Value: EnumJournalEntryUploadLevel.None,\r\n Text: 'None'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumJournalEntryUploadLevel.JournalVoucher,\r\n Text: 'Journal voucher'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumJournalEntryUploadLevel.JournalEntry,\r\n Text: 'Journal entry'\r\n },\r\n {\r\n SortOrder: 4,\r\n Value: EnumJournalEntryUploadLevel.JournalEntryAndReconciliation,\r\n Text: 'Journal entry and reconciliation'\r\n }\r\n ],\r\n TransationJEInfoTabs: [\r\n {\r\n SortOrder: 0,\r\n text: 'Journal entry'\r\n },\r\n {\r\n SortOrder: 1,\r\n text: 'Posting template'\r\n },\r\n ],\r\n FileEncodings: [\r\n {\r\n SortOrder: 1,\r\n Value: EnumFileImportEncodings.Windows1255,\r\n Text: 'Windows-1255'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumFileImportEncodings.OEM862,\r\n Text: 'OEM-862'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumFileImportEncodings.ISO88598,\r\n Text: 'ISO-8859-8'\r\n },\r\n {\r\n SortOrder: 4,\r\n Value: EnumFileImportEncodings.UTF8,\r\n Text: 'UTF-8'\r\n },\r\n {\r\n SortOrder: 5,\r\n Value: EnumFileImportEncodings.ANSI,\r\n Text: 'ANSI'\r\n }\r\n ],\r\n FileTypes: [\r\n {\r\n SortOrder: 1,\r\n Value: EnumFileImportTypes.Excel,\r\n Text: 'Excel'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumFileImportTypes.Csv,\r\n Text: 'CSV'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumFileImportTypes.Tab,\r\n Text: 'Tab'\r\n },\r\n {\r\n SortOrder: 4,\r\n Value: EnumFileImportTypes.FixedWidth,\r\n Text: 'Fixed width'\r\n },\r\n {\r\n SortOrder: 5,\r\n Value: EnumFileImportTypes.Custom,\r\n Text: 'Custom'\r\n },\r\n {\r\n SortOrder: 6,\r\n Value: EnumFileImportTypes.BAI2,\r\n Text: 'BAI2'\r\n }\r\n ],\r\n FileRowDelimiters: [\r\n {\r\n SortOrder: 1,\r\n Value: EnumFileImportRowDelimiters.VbCr,\r\n Text: '10'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumFileImportRowDelimiters.VbCrLf,\r\n Text: '13+10'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumFileImportRowDelimiters.VbLf,\r\n Text: '13'\r\n }\r\n ],\r\n FileRowsSortOrders: [\r\n {\r\n SortOrder: 1,\r\n Value: EnumFileImportRowsSortOrders.Ascending,\r\n Text: 'Ascending'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumFileImportRowsSortOrders.Descending,\r\n Text: 'Descending'\r\n },\r\n ],\r\n OrganizationAccountMappingTypes: [\r\n {\r\n SortOrder: 1,\r\n Value: EnumFileImportAccountMappingTypes.ByBookingAccount,\r\n Text: 'By booking account'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumFileImportAccountMappingTypes.ByAccountNumber,\r\n Text: 'By account number'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumFileImportAccountMappingTypes.ByAccountAndCurrency,\r\n Text: 'By account + currency'\r\n },\r\n {\r\n SortOrder: 4,\r\n Value: EnumFileImportAccountMappingTypes.FixedBookingAccount,\r\n Text: 'Fixed booking account'\r\n },\r\n {\r\n SortOrder: 5,\r\n Value: EnumFileImportAccountMappingTypes.AskEveryTime,\r\n Text: 'Ask every time'\r\n }\r\n ],\r\n AccountMappingTypes: [\r\n {\r\n SortOrder: 1,\r\n Value: EnumFileImportAccountMappingTypes.ByBookingAccount,\r\n Text: 'By booking account'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumFileImportAccountMappingTypes.ByAccountNumber,\r\n Text: 'By account number'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumFileImportAccountMappingTypes.ByAccountAndCurrency,\r\n Text: 'By account + currency'\r\n },\r\n {\r\n SortOrder: 5,\r\n Value: EnumFileImportAccountMappingTypes.AskEveryTime,\r\n Text: 'Ask every time'\r\n }\r\n ],\r\n FileColumns: [\r\n {\r\n SortOrder: 1,\r\n Value: EnumFileImportColumns.A,\r\n Text: 'A'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumFileImportColumns.B,\r\n Text: 'B'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumFileImportColumns.C,\r\n Text: 'C'\r\n },\r\n {\r\n SortOrder: 4,\r\n Value: EnumFileImportColumns.D,\r\n Text: 'D'\r\n },\r\n {\r\n SortOrder: 5,\r\n Value: EnumFileImportColumns.E,\r\n Text: 'E'\r\n },\r\n {\r\n SortOrder: 6,\r\n Value: EnumFileImportColumns.F,\r\n Text: 'F'\r\n },\r\n {\r\n SortOrder: 7,\r\n Value: EnumFileImportColumns.G,\r\n Text: 'G'\r\n },\r\n {\r\n SortOrder: 8,\r\n Value: EnumFileImportColumns.H,\r\n Text: 'H'\r\n },\r\n {\r\n SortOrder: 9,\r\n Value: EnumFileImportColumns.I,\r\n Text: 'I'\r\n },\r\n {\r\n SortOrder: 10,\r\n Value: EnumFileImportColumns.J,\r\n Text: 'J'\r\n },\r\n {\r\n SortOrder: 11,\r\n Value: EnumFileImportColumns.K,\r\n Text: 'K'\r\n },\r\n {\r\n SortOrder: 12,\r\n Value: EnumFileImportColumns.L,\r\n Text: 'L'\r\n },\r\n {\r\n SortOrder: 13,\r\n Value: EnumFileImportColumns.M,\r\n Text: 'M'\r\n },\r\n {\r\n SortOrder: 14,\r\n Value: EnumFileImportColumns.N,\r\n Text: 'N'\r\n },\r\n {\r\n SortOrder: 15,\r\n Value: EnumFileImportColumns.O,\r\n Text: 'O'\r\n },\r\n {\r\n SortOrder: 16,\r\n Value: EnumFileImportColumns.P,\r\n Text: 'P'\r\n },\r\n {\r\n SortOrder: 17,\r\n Value: EnumFileImportColumns.Q,\r\n Text: 'Q'\r\n },\r\n {\r\n SortOrder: 18,\r\n Value: EnumFileImportColumns.R,\r\n Text: 'R'\r\n },\r\n {\r\n SortOrder: 19,\r\n Value: EnumFileImportColumns.S,\r\n Text: 'S'\r\n },\r\n {\r\n SortOrder: 20,\r\n Value: EnumFileImportColumns.T,\r\n Text: 'T'\r\n },\r\n {\r\n SortOrder: 21,\r\n Value: EnumFileImportColumns.U,\r\n Text: 'U'\r\n },\r\n {\r\n SortOrder: 22,\r\n Value: EnumFileImportColumns.V,\r\n Text: 'V'\r\n },\r\n {\r\n SortOrder: 23,\r\n Value: EnumFileImportColumns.W,\r\n Text: 'W'\r\n },\r\n {\r\n SortOrder: 24,\r\n Value: EnumFileImportColumns.X,\r\n Text: 'X'\r\n },\r\n {\r\n SortOrder: 25,\r\n Value: EnumFileImportColumns.Y,\r\n Text: 'Y'\r\n },\r\n {\r\n SortOrder: 26,\r\n Value: EnumFileImportColumns.Z,\r\n Text: 'Z'\r\n }\r\n ],\r\n CurrencyDenominations: [\r\n {\r\n SortOrder: 1,\r\n Value: EnumFileImportCurrencyDenominations.Dollar,\r\n Text: 'Dollar'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumFileImportCurrencyDenominations.Cent,\r\n Text: 'Cent'\r\n }\r\n ],\r\n ExportTypes: [\r\n {\r\n index: 0,\r\n Text: 'InEmail',\r\n Value: EnumExportType.InEmail\r\n },\r\n {\r\n index: 1,\r\n Text: 'Excel',\r\n Value: EnumExportType.Excel\r\n },\r\n {\r\n index: 2,\r\n Text: 'Both',\r\n Value: EnumExportType.Both\r\n },\r\n ],\r\n PositiveNegatives: [\r\n {\r\n index: 0,\r\n Text: 'Positive',\r\n Value: EnumPositiveNegative.Positive\r\n },\r\n {\r\n index: 1,\r\n Text: 'Negative',\r\n Value: EnumPositiveNegative.Negative\r\n },\r\n {\r\n index: 2,\r\n Text: 'Both',\r\n Value: EnumPositiveNegative.Both\r\n },\r\n {\r\n index: 3,\r\n Text: 'Both without zero',\r\n Value: EnumPositiveNegative.BothWithoutZero\r\n },\r\n ],\r\n JournalEntrySources: [\r\n {\r\n SortOrder: 1,\r\n Value: EnumJournalEntrySources.TransactionAutoPosting,\r\n Text: 'Based on transactions'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumJournalEntrySources.Loans,\r\n Text: 'Loans'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumJournalEntrySources.CC,\r\n Text: 'Credit Card Processing'\r\n },\r\n {\r\n SortOrder: 4,\r\n Value: EnumJournalEntrySources.CCAutoPosting,\r\n Text: 'Based on credit cards transactions'\r\n },\r\n ],\r\n ActivityTypes: [\r\n {\r\n SortOrder: 1,\r\n Value: EnumAdminActivityRecordType.ViewOrganization,\r\n Text: 'View Organization'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumAdminActivityRecordType.LoginImpersonation,\r\n Text: 'Login Impersonation'\r\n }\r\n ],\r\n AdminAccessRequestStatuses: [\r\n {\r\n SortOrder: 1,\r\n Value: EnumAdminAccessRequestStatus.Requested,\r\n Text: 'Requested'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumAdminAccessRequestStatus.Approved,\r\n Text: 'Approved'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumAdminAccessRequestStatus.Denied,\r\n Text: 'Denied'\r\n },\r\n {\r\n SortOrder: 4,\r\n Value: EnumAdminAccessRequestStatus.Expired,\r\n Text: 'Expired'\r\n },\r\n {\r\n SortOrder: 5,\r\n Value: EnumAdminAccessRequestStatus.Canceled,\r\n Text: 'Canceled'\r\n }\r\n ],\r\n AdminAccessRequestDurationTypes: [\r\n {\r\n SortOrder: 1,\r\n Value: EnumAdminAccessRequestDurationType.Minutes30,\r\n Text: '30 minutes'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumAdminAccessRequestDurationType.Hours2,\r\n Text: '2 hours'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumAdminAccessRequestDurationType.Hours4,\r\n Text: '4 hours'\r\n },\r\n {\r\n SortOrder: 4,\r\n Value: EnumAdminAccessRequestDurationType.Hours12,\r\n Text: '12 hours'\r\n },\r\n {\r\n SortOrder: 5,\r\n Value: EnumAdminAccessRequestDurationType.Hours24,\r\n Text: '24 hours'\r\n },\r\n {\r\n SortOrder: 6,\r\n Value: EnumAdminAccessRequestDurationType.Days7,\r\n Text: '7 days'\r\n },\r\n {\r\n SortOrder: 7,\r\n Value: EnumAdminAccessRequestDurationType.Days30,\r\n Text: '30 days'\r\n }\r\n ],\r\n TransactionCategoryTabs: [\r\n {\r\n index: 0,\r\n text: 'Related rules',\r\n },\r\n {\r\n index: 1,\r\n text: 'Posting templates',\r\n },\r\n ],\r\n ParentCategoryTabs: [\r\n {\r\n index: 0,\r\n text: 'Transaction categories',\r\n },\r\n {\r\n index: 1,\r\n text: 'Forecast categories',\r\n },\r\n {\r\n index: 2,\r\n text: 'Static categories',\r\n }\r\n ],\r\n CCContractTabs: [\r\n {\r\n index: 0,\r\n text: 'Transfers Map',\r\n },\r\n {\r\n index: 1,\r\n text: 'Invoices Map',\r\n },\r\n ],\r\n JournalEntryStatuses: [\r\n {\r\n SortOrder: 1,\r\n Value: EnumJournalEntryStatuses.Draft,\r\n Text: 'Draft'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumJournalEntryStatuses.Exception,\r\n Text: 'Exception'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumJournalEntryStatuses.ExportedManually,\r\n Text: 'Exported manually'\r\n },\r\n {\r\n SortOrder: 4,\r\n Value: EnumJournalEntryStatuses.Posted,\r\n Text: 'Journal entry created'\r\n },\r\n {\r\n SortOrder: 5,\r\n Value: EnumJournalEntryStatuses.PostedAndReconcilled,\r\n Text: 'Journal entry created & reconcilled'\r\n },\r\n {\r\n SortOrder: 6,\r\n Value: EnumJournalEntryStatuses.PostedInJournalVoucher,\r\n Text: 'Journal voucher created'\r\n },\r\n {\r\n SortOrder: 7,\r\n Value: EnumJournalEntryStatuses.SkippedAlreadyReconcilled,\r\n Text: 'Skipped. Already reconcilled'\r\n },\r\n ],\r\n BookingAccountSelectionMethods:\r\n [\r\n {\r\n SortOrder: 1,\r\n Value: EnumBookingAccountSelectionMethods.TextInput,\r\n Text: 'Manual Entry'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumBookingAccountSelectionMethods.ListRecommend,\r\n Text: 'Choose from list without validation'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumBookingAccountSelectionMethods.ListValidate,\r\n Text: 'Choose from list'\r\n },\r\n ],\r\n BankPassTwoFactorMethods: [{\r\n SortOrder: 1,\r\n Value: EnumBankPassTwoFactorMethod.None,\r\n Text: 'Primary phone for Finsite'\r\n }, {\r\n SortOrder: 2,\r\n Value: EnumBankPassTwoFactorMethod.DedicatedPhone,\r\n Text: 'Dedicated phone'\r\n }, {\r\n SortOrder: 3,\r\n Value: EnumBankPassTwoFactorMethod.CustomerManualEntry,\r\n Text: 'Customer manual entry'\r\n }\r\n ],\r\n LoanPaymentInterestPrincipalType: [\r\n {\r\n Text: 'Interest',\r\n Value: EnumLoanPaymentInterestPrincipalType.Interest\r\n },\r\n {\r\n Text: 'Principal',\r\n Value: EnumLoanPaymentInterestPrincipalType.Principal\r\n },\r\n {\r\n Text: 'Interest/Principal',\r\n Value: EnumLoanPaymentInterestPrincipalType.InterestPrincipal\r\n },\r\n {\r\n Text: 'Principal Acumulation',\r\n Value: EnumLoanPaymentInterestPrincipalType.PrincipalAcumulation\r\n }\r\n ],\r\n FutureChequeStatuses:\r\n [\r\n {\r\n Value: EnumFutureChequeStatus.Deposited,\r\n Text: 'Deposited'\r\n },\r\n {\r\n Value: EnumFutureChequeStatus.Future,\r\n Text: 'Future'\r\n }\r\n ],\r\n NotificationBalanceSummaryTypes:\r\n [\r\n {\r\n SortOrder: 1,\r\n Value: EnumNotificationBalanceSummaryType.Total,\r\n Text: 'Total Amount'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumNotificationBalanceSummaryType.CurrentOnly,\r\n Text: 'Current Only'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumNotificationBalanceSummaryType.None,\r\n Text: 'None'\r\n },\r\n ],\r\n Days: [\r\n {\r\n SortOrder: 1,\r\n Text: 'Sunday',\r\n Value: 1\r\n },\r\n {\r\n SortOrder: 2,\r\n Text: 'Monday',\r\n Value: 2\r\n }, {\r\n SortOrder: 3,\r\n Text: 'Tuesday',\r\n Value: 3\r\n }, {\r\n SortOrder: 4,\r\n Text: 'Wednesday',\r\n Value: 4\r\n }, {\r\n SortOrder: 5,\r\n Text: 'Thursday',\r\n Value: 5\r\n }, {\r\n SortOrder: 6,\r\n Text: 'Friday',\r\n Value: 6\r\n },\r\n ],\r\n WeekDays: [\r\n {\r\n SortOrder: 1,\r\n Text: 'Sunday',\r\n Value: 1\r\n },\r\n {\r\n SortOrder: 2,\r\n Text: 'Monday',\r\n Value: 2\r\n }, {\r\n SortOrder: 3,\r\n Text: 'Tuesday',\r\n Value: 3\r\n }, {\r\n SortOrder: 4,\r\n Text: 'Wednesday',\r\n Value: 4\r\n }, {\r\n SortOrder: 5,\r\n Text: 'Thursday',\r\n Value: 5\r\n }, {\r\n SortOrder: 6,\r\n Text: 'Friday',\r\n Value: 6\r\n }, {\r\n SortOrder: 7,\r\n Text: 'Saturday',\r\n Value: 7\r\n }\r\n ],\r\n NotificationLanguages: [{\r\n SortOrder: 1,\r\n Value: EnumLanguage.Hebrew,\r\n Text: 'Hebrew'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumLanguage.English,\r\n Text: 'English'\r\n }],\r\n BookingAccountTypes: [{\r\n SortOrder: 1,\r\n Value: EnumPostingTemplateBookingAccountTypes.LedgerAccount,\r\n Text: 'Ledger account'\r\n }, {\r\n SortOrder: 2,\r\n Value: EnumPostingTemplateBookingAccountTypes.BusinessPartner,\r\n Text: 'Business partner'\r\n }],\r\n DateRelevance: [{\r\n SortOrder: 1,\r\n Value: EnumForecastDateRelevance.Past,\r\n Text: 'Past'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumForecastDateRelevance.NotReconcilledAccounting,\r\n Text: 'Past accounting transactions not paid/reconciled'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumForecastDateRelevance.NotReconcilledForecast,\r\n Text: 'Past manual transactions not paid/reconciled'\r\n },\r\n {\r\n SortOrder: 4,\r\n Value: EnumForecastDateRelevance.Future,\r\n Text: 'Future'\r\n }],\r\n SystemSource: [{\r\n SortOrder: 1,\r\n Value: EnumForecastSystemSource.AccountingForecast,\r\n Text: 'Accounting Forecast'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumForecastSystemSource.CCExpense,\r\n Text: 'Expense'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumForecastSystemSource.CCIncome,\r\n Text: 'Income'\r\n },\r\n {\r\n SortOrder: 4,\r\n Value: EnumForecastSystemSource.Deposits,\r\n Text: 'Deposits'\r\n },\r\n {\r\n SortOrder: 5,\r\n Value: EnumForecastSystemSource.ForecastOperation,\r\n Text: 'Forecast Operation'\r\n },\r\n {\r\n SortOrder: 6,\r\n Value: EnumForecastSystemSource.Loans,\r\n Text: 'Loans'\r\n },\r\n {\r\n SortOrder: 7,\r\n Value: EnumForecastSystemSource.Transactions,\r\n Text: 'Transactions'\r\n }],\r\n RecommendationPeriodTypes: [\r\n {\r\n SortOrder: 1,\r\n Value: EnumRecommendationPeriodType.Daily,\r\n Text: 'Daily'\r\n }, {\r\n SortOrder: 2,\r\n Value: EnumRecommendationPeriodType.Weekly,\r\n Text: 'Weekly'\r\n }, {\r\n SortOrder: 3,\r\n Value: EnumRecommendationPeriodType.BiWeekly,\r\n Text: 'BiWeekly'\r\n },\r\n {\r\n SortOrder: 4,\r\n Value: EnumRecommendationPeriodType.Monthly,\r\n Text: 'Monthly'\r\n },\r\n {\r\n SortOrder: 5,\r\n Value: EnumRecommendationPeriodType.BiMonthly,\r\n Text: 'BiMonthly'\r\n }, {\r\n SortOrder: 6,\r\n Value: EnumRecommendationPeriodType.Quarterly,\r\n Text: 'Quarterly'\r\n }, {\r\n SortOrder: 7,\r\n Value: EnumRecommendationPeriodType.Variable,\r\n Text: 'Variable'\r\n }\r\n ],\r\n CashflowChartTabs: [\r\n {\r\n index: 0,\r\n value: 'income_expences',\r\n text: 'Income & Expenses'\r\n }, {\r\n index: 1,\r\n value: 'balance_growth',\r\n text: 'Balance Growth'\r\n }, {\r\n index: 2,\r\n value: 'forecast_operations',\r\n text: 'Forecast operations'\r\n }\r\n ],\r\n FutureForecastGroupBy: [\r\n {\r\n SortOrder: 1,\r\n Text: 'Categories',\r\n Value: EnumFutureForecastGroupBy.Category\r\n },\r\n {\r\n SortOrder: 2,\r\n Text: 'Parent Categories',\r\n Value: EnumFutureForecastGroupBy.ParentCategory\r\n },\r\n {\r\n SortOrder: 3,\r\n Text: 'Data Source',\r\n Value: EnumFutureForecastGroupBy.DataSource\r\n }\r\n ],\r\n GlobalDownloadStatuses: [\r\n {\r\n Text: 'New',\r\n Value: EnumDownloadRetryStatus.New\r\n },\r\n {\r\n Text: 'Done',\r\n Value: EnumDownloadRetryStatus.Done\r\n }\r\n ],\r\n GenerationJETypes: [\r\n {\r\n SortOrder: 1,\r\n Text: 'Transactions',\r\n Value: EnumGenerationTypeJournalEntry.TransactionsAutoPosting\r\n },\r\n {\r\n SortOrder: 2,\r\n Text: 'Credit Cards',\r\n Value: EnumGenerationTypeJournalEntry.CCAutoPosting\r\n }\r\n ],\r\n TransactionViews: [\r\n {\r\n Text: 'Month view',\r\n Value: 0\r\n },\r\n {\r\n Text: 'Detailed view',\r\n Value: 1\r\n }\r\n ],\r\n BillingContractsReportModules: [\r\n {\r\n Text: 'Journal Entries',\r\n Value: EnumBillingContractsReportModule.JournalEntries\r\n },\r\n {\r\n Text: 'Cashflow',\r\n Value: EnumBillingContractsReportModule.Cashflow\r\n },\r\n {\r\n Text: 'Loans',\r\n Value: EnumBillingContractsReportModule.Loans\r\n },\r\n {\r\n Text: 'Base',\r\n Value: EnumBillingContractsReportModule.Base\r\n }\r\n ],\r\n MobileDashboardTabs: [\r\n {\r\n index: 0,\r\n text: 'Balance details',\r\n Value: 'BalanceDetails'\r\n },\r\n {\r\n index: 1,\r\n text: 'Transactions by category',\r\n Value: 'TransactionsByCategory'\r\n },\r\n {\r\n index: 2,\r\n text: 'Assets',\r\n Value: 'Assets'\r\n },\r\n {\r\n index: 3,\r\n text: 'Liabilities',\r\n Value: 'Liabilities'\r\n },\r\n {\r\n index: 4,\r\n text: 'Last Transactions',\r\n Value: 'LastTransactions'\r\n }\r\n ],\r\n TransactionsGroupOptions: [\r\n {\r\n index: 0,\r\n text: 'Credit',\r\n Value: 'Credit'\r\n },\r\n {\r\n index: 1,\r\n text: 'Debit',\r\n Value: 'Debit'\r\n }\r\n ],\r\n BalanceDetailsSortTypes: [\r\n {\r\n Text: 'Sort by name',\r\n Value: EnumBalanceDetailsSortType.SortByName\r\n },\r\n {\r\n Text: 'Sort by sum',\r\n Value: EnumBalanceDetailsSortType.SortBySum\r\n }\r\n ],\r\n RelevantFilteringTypes: [\r\n {\r\n Text: 'None',\r\n Value: EnumRelevantFilteringTypes.None\r\n },\r\n {\r\n Text: 'Accounts',\r\n Value: EnumRelevantFilteringTypes.Accounts\r\n },\r\n {\r\n Text: 'Companies',\r\n Value: EnumRelevantFilteringTypes.Companies\r\n }\r\n ],\r\n TransactionPeriodTypes:\r\n [\r\n {\r\n SortOrder: 1,\r\n Value: EnumPeriod.Day,\r\n Text: 'Day'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumPeriod.Month,\r\n Text: 'Month'\r\n },\r\n ],\r\n IncomingPaymentStatuses: [\r\n {\r\n Text: 'Match None',\r\n Value: EnumIncomingPaymentStatus.MatchNone\r\n },\r\n {\r\n Text: 'Match Business Partner',\r\n Value: EnumIncomingPaymentStatus.MatchBusinessPartner\r\n },\r\n {\r\n Text: 'Match Full',\r\n Value: EnumIncomingPaymentStatus.MatchFull\r\n },\r\n {\r\n Text: 'Pending',\r\n Value: EnumIncomingPaymentStatus.Pending\r\n },\r\n {\r\n Text: 'Posted',\r\n Value: EnumIncomingPaymentStatus.Posted\r\n },\r\n {\r\n Text: 'Irrelevant',\r\n Value: EnumIncomingPaymentStatus.Irrelevant\r\n },\r\n {\r\n Text: 'Exception',\r\n Value: EnumIncomingPaymentStatus.Exception\r\n },\r\n {\r\n Text: 'Saved',\r\n Value: EnumIncomingPaymentStatus.Saved\r\n },\r\n {\r\n Text: 'Handle Manually',\r\n Value: EnumIncomingPaymentStatus.HandleManually\r\n },\r\n ],\r\n IncomingPaymentDocumentTypes: [\r\n {\r\n Text: 'Document',\r\n Value: EnumIncomingPaymentInvoiceLineTypes.Document\r\n },\r\n {\r\n Text: 'Accounting Journal Entry',\r\n Value: EnumIncomingPaymentInvoiceLineTypes.AccountingJournalEntry\r\n }\r\n ],\r\n IncomingPaymentDocumentType: [\r\n {\r\n Text: 'Invoice',\r\n Value: EnumIncomingPaymentDocumentType.Invoice\r\n },\r\n {\r\n Text: 'Refund',\r\n Value: EnumIncomingPaymentDocumentType.Refund\r\n },\r\n {\r\n Text: 'Journal Entry',\r\n Value: EnumIncomingPaymentDocumentType.JournalEntry\r\n }\r\n ],\r\n IncomingPaymentProcessingActions: [\r\n {\r\n Text: 'Save & Post',\r\n Value: IncomingPaymentActions.Post\r\n },\r\n {\r\n Text: 'Handle Manually',\r\n Value: IncomingPaymentActions.HandleManually\r\n },\r\n {\r\n Text: 'Save',\r\n Value: IncomingPaymentActions.Save\r\n },\r\n {\r\n Text: 'Move to the Next',\r\n Value: IncomingPaymentActions.MoveToTheNext\r\n },\r\n {\r\n Text: 'Mark as Irrelevant',\r\n Value: IncomingPaymentActions.MarkAsIrrelevant\r\n }\r\n ],\r\n IncomingPaymentUploadLevel: [\r\n {\r\n Text: 'None',\r\n Value: EnumIncomingPaymentUploadLevel.None\r\n },\r\n {\r\n Text: 'Incoming Payment',\r\n Value: EnumIncomingPaymentUploadLevel.IncomingPayment\r\n },\r\n {\r\n Text: 'Incoming Payment and Reconcilliation',\r\n Value: EnumIncomingPaymentUploadLevel.IncomingPaymentAndReconcilliation\r\n },\r\n ],\r\n IncomingPaymentMarkIrrelevantAction: [\r\n {\r\n Text: 'Mark Irrelevant',\r\n Value: 'SingleRecord'\r\n },\r\n {\r\n Text: 'Mark Irrelevant & Rule',\r\n Value: 'Rule'\r\n }\r\n ],\r\n JournalExportTypes: [\r\n {\r\n Value: EnumJournalExportType.Automatic,\r\n Text: 'Automatic'\r\n },\r\n {\r\n Value: EnumJournalExportType.Movein1,\r\n Text: 'Movein Hash'\r\n },\r\n {\r\n Value: EnumJournalExportType.Movein2,\r\n Text: 'Movein Priority'\r\n }\r\n ],\r\n CashflowStaticCategories: [\r\n {\r\n SortOrder: 1,\r\n Value: EnumForecastSystemSource.CCExpense,\r\n Text: 'Credit Card Expenses'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumForecastSystemSource.CCIncome,\r\n Text: 'Credit Card Incomes'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumForecastSystemSource.Loans,\r\n Text: 'Loans'\r\n },\r\n {\r\n SortOrder: 4,\r\n Value: EnumForecastSystemSource.Deposits,\r\n Text: 'Deposits'\r\n },\r\n {\r\n SortOrder: 5,\r\n Value: EnumForecastSystemSource.FutureCheques,\r\n Text: 'Future Cheques'\r\n }],\r\n UploadTypes:\r\n [\r\n {\r\n SortOrder: 1,\r\n Value: EnumUploadType.New,\r\n Text: 'New'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumUploadType.Dates,\r\n Text: 'Dates'\r\n },\r\n ],\r\n SumSides:\r\n [\r\n {\r\n Value: EnumSumSide.Debit,\r\n Text: 'Debit'\r\n },\r\n {\r\n Value: EnumSumSide.Credit,\r\n Text: 'Credit'\r\n }\r\n ],\r\n LoanHandlingTypes:\r\n [\r\n {\r\n SortOrder: 1,\r\n Value: EnumLoanHandlingType.LoansModule,\r\n Text: 'Loans module'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumLoanHandlingType.BankInformation,\r\n Text: 'Banking information'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumLoanHandlingType.Combine,\r\n Text: 'Combine'\r\n }\r\n ],\r\n ExportSFTPGroupingModes: [\r\n {\r\n Value: EnumExportSFTPGroupingMode.Single,\r\n Text: 'Single file'\r\n },\r\n {\r\n Value: EnumExportSFTPGroupingMode.PerBookingAccount,\r\n Text: 'File per booking account'\r\n },\r\n {\r\n Value: EnumExportSFTPGroupingMode.PerAccountSubtype,\r\n Text: 'File per account subtype'\r\n },\r\n {\r\n Value: EnumExportSFTPGroupingMode.PerCompany,\r\n Text: 'File per company'\r\n }\r\n\r\n ],\r\n CategoryClassificationFieldTypes: [\r\n {\r\n Value: EnumCategoryClassificationFieldType.Name,\r\n Text: 'Name',\r\n SortOrder: 1\r\n },\r\n {\r\n Value: EnumCategoryClassificationFieldType.Type,\r\n Text: 'Type',\r\n SortOrder: 2\r\n },\r\n {\r\n Value: EnumCategoryClassificationFieldType.LinkageType,\r\n Text: 'Linkage Type',\r\n SortOrder: 3\r\n }\r\n ],\r\n BalanceTypes: [\r\n {\r\n Value: 'Actual',\r\n Text: 'Actual',\r\n SortOrder: 1\r\n },\r\n {\r\n Value: 'Nominal',\r\n Text: 'Nominal',\r\n SortOrder: 2\r\n }\r\n ],\r\n BankPassAccessTypes:\r\n [\r\n {\r\n Text: 'Bank\\'s website',\r\n Value: EnumBankPassAccessTypes.Scrapping\r\n },\r\n {\r\n Text: 'File Import',\r\n Value: EnumBankPassAccessTypes.FileImport\r\n },\r\n // {\r\n // Text: 'Open Banking',\r\n // Value: EnumBankPassAccessTypes.PSD\r\n // },\r\n {\r\n Text: 'Plaid',\r\n Value: EnumBankPassAccessTypes.Plaid\r\n }\r\n ],\r\n BankPassAutoDiscoverModes:\r\n [\r\n {\r\n Text: 'None',\r\n Value: EnumBankPassAutoDiscoverModes.None\r\n },\r\n {\r\n Text: 'On demand',\r\n Value: EnumBankPassAutoDiscoverModes.OnDemand\r\n },\r\n {\r\n Text: 'Automatic',\r\n Value: EnumBankPassAutoDiscoverModes.Automatic\r\n }\r\n ],\r\n ExternalAccountMappingStatus:\r\n [\r\n {\r\n Text: 'Mapped',\r\n Value: EnumExternalAccountMappingStatus.Mapped\r\n },\r\n {\r\n Text: 'Mapped in another Bank Pass',\r\n Value: EnumExternalAccountMappingStatus.MappedInAnother\r\n },\r\n {\r\n Text: 'Not mapped',\r\n Value: EnumExternalAccountMappingStatus.NotMapped\r\n }\r\n ],\r\n ScheduleTypes:\r\n [\r\n {\r\n Text: 'Daily/Weekly',\r\n Value: EnumNotificationScheduleType.DailyWeekly\r\n },\r\n {\r\n Text: 'Monthly',\r\n Value: EnumNotificationScheduleType.Monthly\r\n },\r\n {\r\n Text: 'Yearly',\r\n Value: EnumNotificationScheduleType.Yearly\r\n }\r\n ],\r\n DeploymentTabs:\r\n [\r\n {\r\n index: 0,\r\n text: 'Main',\r\n Value: 'Main'\r\n },\r\n {\r\n index: 1,\r\n text: 'Current',\r\n Value: 'Current'\r\n },\r\n {\r\n index: 2,\r\n text: 'Credit Card',\r\n Value: 'CC'\r\n }\r\n ],\r\n};\r\n","import {\r\n EnumAccountFullNameDisplayType,\r\n EnumAccountingSoftwares,\r\n EnumAdminAccessRequestDurationType,\r\n EnumAdminAccessRequestStatus,\r\n EnumAdminActivityRecordType,\r\n EnumAmortizationType,\r\n EnumApplyToBookingAccountsTypes,\r\n EnumBalanceHistoryReportMode,\r\n EnumBankGroups,\r\n EnumBankPassCredentialValidity,\r\n EnumBanks,\r\n EnumBankTypes,\r\n EnumBookingAccountDepositTypes,\r\n EnumBookingAccountStockTypes,\r\n EnumBookingAccountSubtypes,\r\n EnumCashflowSummarizedAggregationLevel,\r\n EnumCCBrands,\r\n EnumCCProcessingCompanies,\r\n EnumCCTransferStatuses,\r\n EnumClassificarionRuleFieldType,\r\n EnumClassificarionRuleMatchType,\r\n EnumCompanyChildEntityTypes,\r\n EnumCustomFieldsetFieldInputType,\r\n EnumDashboardGroupBy,\r\n EnumDataExportType,\r\n EnumDocumentType,\r\n EnumDownloadStatuses,\r\n EnumDownloadStepStatuses,\r\n EnumDownloadTaskStatuses,\r\n EnumExpenseStatus,\r\n EnumExportTransactionsMethod,\r\n EnumExportType,\r\n EnumFileImportAccountMappingTypes,\r\n EnumFileImportColumns,\r\n EnumFileImportCurrencyDenominations,\r\n EnumFileImportEncodings,\r\n EnumFileImportRowDelimiters,\r\n EnumFileImportTypes,\r\n EnumFinancialReportCurrencyType,\r\n EnumFinancialReportDateType,\r\n EnumFinancialReportRangeType,\r\n EnumIncreaseType,\r\n EnumInterestType,\r\n EnumJournalEntryCurrencyTypes,\r\n EnumJournalEntrySources,\r\n EnumJournalEntryStatuses,\r\n EnumJournalEntryUploadLevel,\r\n EnumLedgerAccountType,\r\n EnumLoanInterestPeriodCalculationType,\r\n EnumLoanPaymentFrequencyType,\r\n EnumLoanPostPaymentRecalculationOptions,\r\n EnumLoanSide,\r\n EnumLoanStatus,\r\n EnumMatchingRelationship,\r\n EnumNoteFieldTypes,\r\n EnumNoteMatchTypes,\r\n EnumNotesExportAdjustments,\r\n EnumNotificationTemplateSectionFields,\r\n EnumOrganizationChildEntityTypes,\r\n EnumPaymentMeansTypes,\r\n EnumPeriodType,\r\n EnumPositiveNegative,\r\n EnumReplicationObjectTypes,\r\n EnumReplicationStatuses,\r\n EnumSecurityStatus,\r\n EnumSecurityType,\r\n EnumShowInCurrencyOptions,\r\n EnumSide,\r\n EnumSource,\r\n EnumSummaryLevel,\r\n EnumUploadStatuses,\r\n EnumUserAuthorizationType,\r\n EnumUserNotificationMethods,\r\n EnumVisibilitySetting,\r\n EnumYesNo,\r\n EnumBookingAccountSelectionMethods,\r\n EnumBankPassTwoFactorMethod,\r\n EnumCCInvoiceStatuses,\r\n EnumFileImportRowsSortOrders,\r\n EnumNotificationBalanceSummaryType,\r\n EnumFutureChequeStatus,\r\n EnumLoanPaymentInterestPrincipalType,\r\n EnumLanguage,\r\n EnumForecastDateRelevance,\r\n EnumForecastSystemSource,\r\n EnumRecommendationPeriodType,\r\n EnumFutureForecastGroupBy,\r\n EnumDownloadRetryStatus,\r\n EnumPostingTemplateBookingAccountTypes,\r\n EnumGenerationTypeJournalEntry,\r\n EnumBillingContractsReportModule,\r\n EnumBalanceDetailsSortType,\r\n EnumRelevantFilteringTypes,\r\n EnumPeriod,\r\n EnumIncomingPaymentStatus,\r\n EnumIncomingPaymentInvoiceLineTypes,\r\n EnumIncomingPaymentUploadLevel,\r\n EnumIncomingPaymentDocumentType,\r\n EnumUploadType,\r\n EnumSumSide,\r\n EnumLoanHandlingType,\r\n EnumBankPassAccessTypes,\r\n EnumBankPassAutoDiscoverModes,\r\n} from '../_proxy/enums';\r\nimport { Globals } from '../_globals';\r\nimport { EnumLanguages } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { EnumShareWith } from '../dialogs/share-information-dialog/share-information-dialog.component';\r\nimport {\r\n EnumPredefinedNotificationTemplates\r\n} from '../pages/notification-template/list/notification-template-list.component';\r\nimport { IncomingPaymentActions } from '@kraken/_client.enums';\r\nimport { EnumCategoryClassificationFieldType, EnumExportSFTPGroupingMode, EnumExternalAccountMappingStatus, EnumJournalExportType, EnumNotificationScheduleType } from '../../../../../Kraken/Angular/ClientApp/_proxy/enums';\r\n\r\nexport const Lists_HE =\r\n{\r\n Properties: {\r\n Language: EnumLanguages.Hebrew\r\n },\r\n AccountingSoftwares:\r\n [\r\n {\r\n Value: EnumAccountingSoftwares.SBO,\r\n Text: 'SAP Business One',\r\n SortOrder: 1\r\n },\r\n {\r\n Value: EnumAccountingSoftwares.Hashavshevet,\r\n Text: 'חשבשבת',\r\n SortOrder: 2\r\n },\r\n {\r\n Value: EnumAccountingSoftwares.Priority,\r\n Text: 'Priority',\r\n SortOrder: 3\r\n },\r\n {\r\n Value: EnumAccountingSoftwares.SAPByDesign,\r\n Text: 'SAP By Design',\r\n SortOrder: 4\r\n },\r\n {\r\n Value: EnumAccountingSoftwares.NetSuite,\r\n Text: 'NetSuite',\r\n SortOrder: 5\r\n },\r\n {\r\n Value: EnumAccountingSoftwares.Standalone,\r\n Text: 'ללא תוכנה',\r\n SortOrder: 6\r\n },\r\n {\r\n Value: EnumAccountingSoftwares.WizCloud,\r\n Text: 'חשבשבת בענן',\r\n SortOrder: 7\r\n },\r\n {\r\n Value: EnumAccountingSoftwares.Ardani,\r\n Text: 'Ardani',\r\n SortOrder: 8\r\n },\r\n {\r\n Value: EnumAccountingSoftwares.Rivhit,\r\n Text: 'ריווחית 12',\r\n SortOrder: 9\r\n },\r\n {\r\n Value: EnumAccountingSoftwares.Rivhit8,\r\n Text: 'ריווחית 8',\r\n SortOrder: 10\r\n },\r\n {\r\n Value: EnumAccountingSoftwares.Comax,\r\n Text: 'Comax',\r\n SortOrder: 11\r\n },\r\n {\r\n Value: EnumAccountingSoftwares.Intentia,\r\n Text: 'Intentia',\r\n SortOrder: 12\r\n },\r\n {\r\n Value: EnumAccountingSoftwares.Unknown,\r\n Text: 'לא ידוע',\r\n SortOrder: 12\r\n }\r\n ],\r\n Banks:\r\n [\r\n {\r\n Value: EnumBanks.Yahav,\r\n Text: '4 - יהב',\r\n TextShort: 'יהב',\r\n BankCode: 4,\r\n Color: '#0097F0',\r\n Icon: '$$$'\r\n },\r\n {\r\n Value: EnumBanks.Leumi,\r\n Text: '10 - לאומי',\r\n TextShort: 'לאומי',\r\n BankCode: 10,\r\n Color: '#5B9CD6',\r\n Icon: 'leumi.png'\r\n },\r\n {\r\n Value: EnumBanks.Discount,\r\n Text: '11 - דיסקונט',\r\n TextShort: 'דיסקונט',\r\n BankCode: 11,\r\n Color: '#A8D18D',\r\n Icon: 'discount.png'\r\n },\r\n {\r\n Value: EnumBanks.Poalim,\r\n Text: '12 - פועלים',\r\n TextShort: 'פועלים',\r\n BankCode: 12,\r\n Color: '#C00000',\r\n Icon: 'poalim.png'\r\n },\r\n {\r\n Value: EnumBanks.Egud,\r\n Text: '13 - איגוד',\r\n TextShort: 'איגוד',\r\n BankCode: 13,\r\n Color: '#8739C0',\r\n Icon: 'egud.png'\r\n },\r\n {\r\n Value: EnumBanks.OtsarHaHayal,\r\n Text: '14 - אוצר החייל',\r\n TextShort: 'אוצר החייל',\r\n BankCode: 14,\r\n Color: '#2E75B5',\r\n Icon: 'benleumi.png'\r\n },\r\n {\r\n Value: EnumBanks.Merkantil,\r\n Text: '17 - מרכנתיל',\r\n TextShort: 'מרכנתיל',\r\n BankCode: 17,\r\n Color: '#395723',\r\n Icon: 'merkantil.png'\r\n },\r\n {\r\n Value: EnumBanks.Mizrahi,\r\n Text: '20 - מזרחי',\r\n TextShort: 'מזרחי',\r\n BankCode: 20,\r\n Color: '#BFBFBF',\r\n Icon: 'mizrahi.png'\r\n },\r\n {\r\n Value: EnumBanks.CityBank,\r\n Text: '22 - סיטיבנק',\r\n TextShort: 'סיטיבנק',\r\n BankCode: 22,\r\n Color: '#017EC8'\r\n },\r\n {\r\n Value: EnumBanks.HSBC,\r\n Text: '23 - HSBC',\r\n TextShort: 'HSBC',\r\n BankCode: 23,\r\n Color: '#017EC8'\r\n },\r\n {\r\n Value: EnumBanks.Ubank,\r\n Text: '26 - יובנק',\r\n TextShort: 'יובנק',\r\n BankCode: 26,\r\n Color: '#CC9B00'\r\n },\r\n {\r\n Value: EnumBanks.BenLeumi,\r\n Text: '31 - בינלאומי',\r\n TextShort: 'בינלאומי',\r\n BankCode: 31,\r\n Color: '#FED966',\r\n Icon: 'benleumi.png'\r\n },\r\n {\r\n Value: EnumBanks.Masad,\r\n Text: '46 - מסד',\r\n TextShort: 'מסד',\r\n BankCode: 46,\r\n Color: '#FED966',\r\n Icon: 'masad.png'\r\n },\r\n {\r\n Value: EnumBanks.Pagi,\r\n Text: '52 - פאג\"י',\r\n TextShort: 'פאג\"י',\r\n BankCode: 52,\r\n Color: '#575757'\r\n },\r\n {\r\n Value: EnumBanks.Doar,\r\n Text: '9 - הדואר',\r\n TextShort: 'הדואר',\r\n BankCode: 9,\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.Jerusalem,\r\n Text: '54 - ירושלים',\r\n TextShort: 'ירושלים',\r\n BankCode: 54,\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.VisaCal,\r\n Text: 'ויזה כאל',\r\n TextShort: 'ויזה כאל',\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.Isracard,\r\n Text: 'ישראכרט',\r\n TextShort: 'ישראכרט',\r\n Color: '#111111',\r\n Icon: 'cc-brand-isracard.svg'\r\n },\r\n {\r\n Value: EnumBanks.LeumiMax,\r\n Text: 'לאומי מקס',\r\n TextShort: 'לאומי מקס',\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.Amex,\r\n Text: 'אמריקן אקספרס',\r\n TextShort: 'אמריקן אקספרס',\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.ForeignPlaceholder1,\r\n Text: 'בנק זר 1',\r\n TextShort: 'בנק זר 1',\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.ForeignPlaceholder2,\r\n Text: 'בנק זר 2',\r\n TextShort: 'בנק זר 2',\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.ForeignPlaceholder3,\r\n Text: 'בנק זר 3',\r\n TextShort: 'בנק זר 3',\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.ExternalLoanerMisc,\r\n Text: 'גוף מימון אחר',\r\n TextShort: 'גוף מימון אחר',\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.ExternalLoanerVisa,\r\n Text: 'ויזה - מימון',\r\n TextShort: 'ויזה - מימון',\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.ExternalLoanerIsracard,\r\n Text: 'ישראכרט - מימון',\r\n TextShort: 'ישראכרט - מימון',\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.ExternalLoanerLeumiMax,\r\n Text: 'לאומי מקס - מימון',\r\n TextShort: 'לאומי מקס - מימון',\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.ExternalLoanerMimunYashir,\r\n Text: 'מימון ישיר',\r\n TextShort: 'מימון ישיר',\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.ExternalLoanerHarel,\r\n Text: 'הראל',\r\n TextShort: 'הראל',\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.ExternalLoanerMigdal,\r\n Text: 'מגדל',\r\n TextShort: 'מגדל',\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.ExternalLoanerAltshuler,\r\n Text: 'אלטשולר שחם',\r\n TextShort: 'אלטשולר שחם',\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.ExternalLoanerFenix,\r\n Text: 'הפניקס',\r\n TextShort: 'הפניקס',\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.ExternalLoanerMeitav,\r\n Text: 'מיטב דש',\r\n TextShort: 'מיטב דש',\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.CCVisaCal,\r\n Text: 'ויזה כאל - סליקה',\r\n TextShort: 'ויזה כאל - סליקה',\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.CCIsracard,\r\n Text: 'ישראכרט - סליקה',\r\n TextShort: 'ישראכרט - סליקה',\r\n Color: '#111111',\r\n Icon: 'cc-brand-isracard.svg'\r\n },\r\n {\r\n Value: EnumBanks.CCLeumiMax,\r\n Text: 'לאומי מקס - סליקה',\r\n TextShort: 'לאומי מקס - סליקה',\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.Plaid,\r\n Text: 'Plaid' ,\r\n TextShort: 'Plaid',\r\n Color: '#111111'\r\n },\r\n ],\r\n DepositTypes:\r\n [\r\n {\r\n Value: EnumBookingAccountDepositTypes.All,\r\n Text: 'כולם'\r\n },\r\n {\r\n Value: EnumBookingAccountDepositTypes.Daily,\r\n Text: 'פר\"י'\r\n },\r\n {\r\n Value: EnumBookingAccountDepositTypes.Regular,\r\n Text: 'תקופתי'\r\n }\r\n ],\r\n StockTypes:\r\n [\r\n {\r\n Value: EnumBookingAccountStockTypes.All,\r\n Text: 'כולם'\r\n },\r\n {\r\n Value: EnumBookingAccountStockTypes.Commodities,\r\n Text: 'סחורות'\r\n },\r\n {\r\n Value: EnumBookingAccountStockTypes.CorporateBonds,\r\n Text: 'אג\"ח קונצרני'\r\n },\r\n {\r\n Value: EnumBookingAccountStockTypes.ETFs,\r\n Text: 'תעודות סל'\r\n },\r\n {\r\n Value: EnumBookingAccountStockTypes.GovermentBonds,\r\n Text: 'אג\"ח ממשלתי'\r\n },\r\n {\r\n Value: EnumBookingAccountStockTypes.GovermentBondsMakam,\r\n Text: 'מק\"מ'\r\n },\r\n {\r\n Value: EnumBookingAccountStockTypes.Stocks,\r\n Text: 'מניות'\r\n },\r\n {\r\n Value: EnumBookingAccountStockTypes.TrustFunds,\r\n Text: 'קרנות נאמנות'\r\n },\r\n {\r\n Value: EnumBookingAccountStockTypes.Other,\r\n Text: 'אחר'\r\n }\r\n ],\r\n Currencies:\r\n [\r\n {\r\n Value: 'ILS',\r\n Text: 'ש\"ח',\r\n Symbol: '₪',\r\n SortOrder: 0\r\n },\r\n {\r\n Value: 'USD',\r\n Text: 'דולר',\r\n Symbol: '$',\r\n SortOrder: 1\r\n },\r\n {\r\n Value: 'EUR',\r\n Text: 'אירו',\r\n Symbol: '€',\r\n SortOrder: 2\r\n },\r\n {\r\n Value: 'GBP',\r\n Text: 'ליש\"ט',\r\n Symbol: '£',\r\n SortOrder: 3\r\n },\r\n {\r\n Value: 'AUD',\r\n Text: 'דולר אוסטרלי',\r\n Symbol: 'A$',\r\n SortOrder: 4\r\n },\r\n {\r\n Value: 'CAD',\r\n Text: 'דולר קנדי',\r\n Symbol: 'C$',\r\n SortOrder: 5\r\n },\r\n {\r\n Value: 'CHF',\r\n Text: 'פרנק שוויצרי',\r\n Symbol: 'CHF',\r\n SortOrder: 6\r\n },\r\n {\r\n Value: 'DKK',\r\n Text: 'כתר דנמרק',\r\n Symbol: 'kr',\r\n SortOrder: 7\r\n },\r\n {\r\n Value: 'EGP',\r\n Text: 'לירה מצרית',\r\n Symbol: 'E£',\r\n SortOrder: 8\r\n },\r\n {\r\n Value: 'JOD',\r\n Text: 'דינר ירדני',\r\n Symbol: 'JD',\r\n SortOrder: 9\r\n },\r\n {\r\n Value: 'LBP',\r\n Text: 'לירה לבנונית',\r\n Symbol: 'LL',\r\n SortOrder: 10\r\n },\r\n {\r\n Value: 'NOK',\r\n Text: 'כתר נורווגי',\r\n Symbol: 'kr',\r\n SortOrder: 11\r\n },\r\n {\r\n Value: 'SEK',\r\n Text: 'כתר שוודי',\r\n Symbol: 'kr',\r\n SortOrder: 12\r\n },\r\n {\r\n Value: 'RUB',\r\n Text: 'רובל',\r\n Symbol: '₽',\r\n SortOrder: 13\r\n },\r\n {\r\n Value: 'HKD',\r\n Text: 'דולר הונג-קונגי',\r\n Symbol: 'HK$',\r\n SortOrder: 14\r\n },\r\n {\r\n Value: 'ZAR',\r\n Text: 'ראנד דרום אפריקאי',\r\n Symbol: 'R',\r\n SortOrder: 15\r\n },\r\n {\r\n Value: 'JPY',\r\n Text: 'יין יפני',\r\n Symbol: '¥',\r\n SortOrder: 16\r\n },\r\n {\r\n Value: 'SGD',\r\n Text: 'דולר סינגפורי',\r\n Symbol: 'S$',\r\n SortOrder: 17\r\n },\r\n {\r\n Value: 'CNH',\r\n Text: 'יואן סיני',\r\n Symbol: '¥',\r\n SortOrder: 18\r\n },\r\n {\r\n Value: 'NZD',\r\n Text: 'דולר ניו זילנדי',\r\n Symbol: 'NZ$',\r\n SortOrder: 19\r\n },\r\n {\r\n Value: 'PLN',\r\n Text: 'זלוטי פולני',\r\n Symbol: 'zł',\r\n SortOrder: 20\r\n },\r\n {\r\n Value: 'THB',\r\n Text: 'באט תאילנדי',\r\n Symbol: '฿',\r\n SortOrder: 21\r\n },\r\n {\r\n Value: 'HUF',\r\n Text: 'פורינט הונגרי',\r\n Symbol: 'Ft',\r\n SortOrder: 22\r\n },\r\n {\r\n Value: 'CZK',\r\n Text: 'קורונה צ\\'כי',\r\n Symbol: 'Kč',\r\n SortOrder: 23\r\n },\r\n {\r\n Value: 'AED',\r\n Text: 'דירהם',\r\n Symbol: 'د.إ',\r\n SortOrder: 24\r\n },\r\n {\r\n Value: 'RON',\r\n Text: 'לאו רומני',\r\n Symbol: 'lei',\r\n SortOrder: 25\r\n },\r\n {\r\n Value: 'GEL',\r\n Text: 'לארי גיאורגי',\r\n Symbol: '₾',\r\n SortOrder: 26\r\n },\r\n {\r\n Value: 'TRY',\r\n Text: 'לירה טורקית',\r\n Symbol: '₺',\r\n SortOrder: 27\r\n }\r\n ],\r\n BookingAccountSubTypes:\r\n [\r\n {\r\n Value: EnumBookingAccountSubtypes.Current,\r\n text: 'עו\"ש',\r\n Text: 'עו\"ש',\r\n SortOrder: 0,\r\n Color: Globals.DashboardPalette[0]\r\n },\r\n {\r\n Value: EnumBookingAccountSubtypes.CreditCard,\r\n text: 'כרטיסי אשראי',\r\n Text: 'כרטיסי אשראי',\r\n SortOrder: 1,\r\n Color: Globals.DashboardPalette[4]\r\n },\r\n {\r\n Value: EnumBookingAccountSubtypes.Deposits,\r\n text: 'פקדונות',\r\n Text: 'פקדונות',\r\n SortOrder: 2,\r\n Color: Globals.DashboardPalette[1]\r\n },\r\n {\r\n Value: EnumBookingAccountSubtypes.Stocks,\r\n text: 'ניירות ערך',\r\n Text: 'ניירות ערך',\r\n SortOrder: 3,\r\n Color: Globals.DashboardPalette[2]\r\n },\r\n {\r\n Value: EnumBookingAccountSubtypes.Loans,\r\n text: 'הלוואות',\r\n Text: 'הלוואות',\r\n SortOrder: 4,\r\n Color: Globals.DashboardPalette[3]\r\n },\r\n {\r\n Value: EnumBookingAccountSubtypes.Guarantee,\r\n text: 'ערבויות',\r\n Text: 'ערבויות',\r\n SortOrder: 5,\r\n Color: Globals.DashboardPalette[5]\r\n }\r\n ],\r\n OrganizationTabs:\r\n [\r\n {\r\n index: 0,\r\n text: 'חברות',\r\n Type: EnumOrganizationChildEntityTypes.Company,\r\n Name: 'CompanyTab'\r\n },\r\n {\r\n index: 1,\r\n text: 'פרטי גישה לבנק',\r\n Type: EnumOrganizationChildEntityTypes.BankPass,\r\n Name: 'BankAccessCredentialTab'\r\n },\r\n {\r\n index: 2,\r\n text: 'חשבונות',\r\n Type: EnumOrganizationChildEntityTypes.Account,\r\n Name: 'AccountTab'\r\n },\r\n {\r\n index: 3,\r\n text: 'משתמשים',\r\n Type: EnumOrganizationChildEntityTypes.User,\r\n Name: 'UserTab'\r\n },\r\n {\r\n index: 4,\r\n text: 'סביבות',\r\n Type: EnumOrganizationChildEntityTypes.Deployment,\r\n Name: 'DeploymentTab'\r\n },\r\n {\r\n index: 5,\r\n text: 'API חיצוני',\r\n Name: 'ExternalApiKeyTab',\r\n Type: EnumOrganizationChildEntityTypes.ExternalAPIKey,\r\n },\r\n {\r\n index: 6,\r\n text: 'הוראת חיוב',\r\n Type: EnumOrganizationChildEntityTypes.BillingContract,\r\n Name: 'BillingContractTab'\r\n },\r\n {\r\n index: 7,\r\n text: 'קבוצות חשבונות',\r\n Type: EnumOrganizationChildEntityTypes.AccountGroup,\r\n Name: 'AccountGroupTab'\r\n },\r\n {\r\n index: 8,\r\n text: 'תבניות התראות',\r\n Type: EnumOrganizationChildEntityTypes.NotificationTemplate,\r\n Name: 'NotificationTemplateTab'\r\n },\r\n {\r\n index: 9,\r\n text: 'התראות',\r\n Type: EnumOrganizationChildEntityTypes.AlertTemplate,\r\n Name: 'AlertTemplateTab'\r\n },\r\n {\r\n index: 10,\r\n text: 'תבניות יבוא קבצים',\r\n Type: EnumOrganizationChildEntityTypes.FileImportTemplate,\r\n Name: 'FileImportTemplatesTab'\r\n },\r\n {\r\n index: 11,\r\n text: 'תרחישי תזרים',\r\n Type: EnumOrganizationChildEntityTypes.Scenario,\r\n Name: 'ScenarioTab'\r\n },\r\n {\r\n index: 12,\r\n text: 'רמות וודאות תזרים',\r\n Type: EnumOrganizationChildEntityTypes.ProbabilityLevel,\r\n Name: 'ProbabilityLevelTab'\r\n },\r\n {\r\n index: 13,\r\n text: 'סיווגי פיקדונות',\r\n Type: EnumOrganizationChildEntityTypes.DepositCategory,\r\n Name: 'DepositCategoriesTab'\r\n },\r\n {\r\n index: 14,\r\n text: 'כללי סיווג פיקדונות',\r\n Type: EnumOrganizationChildEntityTypes.DepositClassificationRule,\r\n Name: 'DepositClassificationRulesTab'\r\n },\r\n {\r\n index: 15,\r\n text: 'סיווגי הלוואות',\r\n Type: EnumOrganizationChildEntityTypes.LoanCategory,\r\n Name: 'LoanCategoriesTab'\r\n },\r\n {\r\n index: 16,\r\n text: 'כללי סיווג הלוואות',\r\n Type: EnumOrganizationChildEntityTypes.LoanClassificationRule,\r\n Name: 'LoanClassificationRulesTab'\r\n },\r\n {\r\n index: 17,\r\n text: 'סיווגי ניירות ערך',\r\n Type: EnumOrganizationChildEntityTypes.StockCategory,\r\n Name: 'StockCategoriesTab'\r\n },\r\n {\r\n index: 18,\r\n text: 'כללי סיווג ניירות ערך',\r\n Type: EnumOrganizationChildEntityTypes.StockClassificationRule,\r\n Name: 'StockClassificationRulesTab'\r\n },\r\n {\r\n index: 19,\r\n text: 'סיווגי ערבויות',\r\n Type: EnumOrganizationChildEntityTypes.GuaranteeCategory,\r\n Name: 'GuaranteeCategoriesTab'\r\n },\r\n {\r\n index: 20,\r\n text: 'כללי סיווג ערבויות',\r\n Type: EnumOrganizationChildEntityTypes.GuaratneeClassificationRule,\r\n Name: 'GuaranteeClassificationRulesTab'\r\n },\r\n {\r\n index: 21,\r\n text: 'רישוי וניהול',\r\n Name: 'AdminSettingsTab'\r\n }\r\n ],\r\n\r\n OrganizationGroupingTabs: [\r\n {\r\n name: 'Finance',\r\n text: 'כספים',\r\n tabs: [{\r\n index: 0,\r\n badge: null,\r\n text: 'חברות',\r\n Type: EnumOrganizationChildEntityTypes.Company,\r\n Name: 'CompanyTab'},\r\n {\r\n index: 1,\r\n badge: null,\r\n text: 'פרטי גישה לבנק',\r\n Type: EnumOrganizationChildEntityTypes.BankPass,\r\n Name: 'BankAccessCredentialTab'\r\n },\r\n {\r\n index: 2,\r\n badge: null,\r\n text: 'חשבונות',\r\n Type: EnumOrganizationChildEntityTypes.Account,\r\n Name: 'AccountTab'\r\n },\r\n {\r\n index: 7,\r\n badge: null,\r\n text: 'קבוצות חשבונות',\r\n Type: EnumOrganizationChildEntityTypes.AccountGroup,\r\n Name: 'AccountGroupTab'\r\n },\r\n ]\r\n },\r\n {\r\n name: 'Authentication',\r\n text: 'ניהול הזדהות',\r\n tabs: [\r\n {\r\n index: 3,\r\n badge: null,\r\n text: 'משתמשים',\r\n Type: EnumOrganizationChildEntityTypes.User,\r\n Name: 'UserTab'\r\n },\r\n {\r\n index: 5,\r\n badge: null,\r\n text: 'API חיצוני',\r\n Name: 'ExternalApiKeyTab',\r\n Type: EnumOrganizationChildEntityTypes.ExternalAPIKey,\r\n },\r\n ]\r\n },\r\n {\r\n name: 'Notifications',\r\n text: 'התראות',\r\n tabs: [\r\n {\r\n index: 8,\r\n badge: null,\r\n text: 'תבניות התראות',\r\n Type: EnumOrganizationChildEntityTypes.NotificationTemplate,\r\n Name: 'NotificationTemplateTab'\r\n },\r\n {\r\n index: 9,\r\n badge: null,\r\n text: 'התראות',\r\n Type: EnumOrganizationChildEntityTypes.AlertTemplate,\r\n Name: 'AlertTemplateTab'\r\n },\r\n ]\r\n },\r\n {\r\n name: 'Import & Export',\r\n text: 'ייבוא וייצוא נתונים',\r\n tabs: [\r\n {\r\n index: 4,\r\n badge: null,\r\n text: 'סביבות',\r\n Type: EnumOrganizationChildEntityTypes.Deployment,\r\n Name: 'DeploymentTab'\r\n },\r\n {\r\n index: 10,\r\n badge: null,\r\n text: 'תבניות יבוא קבצים',\r\n Type: EnumOrganizationChildEntityTypes.FileImportTemplate,\r\n Name: 'FileImportTemplatesTab'\r\n },\r\n ]\r\n },\r\n {\r\n name: 'Cashflow',\r\n text: 'תזרים מזומנים',\r\n tabs: [\r\n {\r\n index: 11,\r\n badge: null,\r\n text: 'תרחישי תזרים',\r\n Type: EnumOrganizationChildEntityTypes.Scenario,\r\n Name: 'ScenarioTab'\r\n },\r\n {\r\n index: 12,\r\n badge: null,\r\n text: 'רמות וודאות תזרים',\r\n Type: EnumOrganizationChildEntityTypes.ProbabilityLevel,\r\n Name: 'ProbabilityLevelTab'\r\n },\r\n ]\r\n },\r\n {\r\n name: 'Data Categorization',\r\n text: 'סיווגי מידע',\r\n tabs: [\r\n {\r\n index: 13,\r\n badge: null,\r\n text: 'סיווגי פיקדונות',\r\n Type: EnumOrganizationChildEntityTypes.DepositCategory,\r\n Name: 'DepositCategoriesTab'\r\n },\r\n {\r\n index: 14,\r\n badge: null,\r\n text: 'כללי סיווג פיקדונות',\r\n Type: EnumOrganizationChildEntityTypes.DepositClassificationRule,\r\n Name: 'DepositClassificationRulesTab'\r\n },\r\n {\r\n index: 15,\r\n badge: null,\r\n text: 'סיווגי הלוואות',\r\n Type: EnumOrganizationChildEntityTypes.LoanCategory,\r\n Name: 'LoanCategoriesTab'\r\n },\r\n {\r\n index: 16,\r\n badge: null,\r\n text: 'כללי סיווג הלוואות',\r\n Type: EnumOrganizationChildEntityTypes.LoanClassificationRule,\r\n Name: 'LoanClassificationRulesTab'\r\n },\r\n {\r\n index: 17,\r\n badge: null,\r\n text: 'סיווגי ניירות ערך',\r\n Type: EnumOrganizationChildEntityTypes.StockCategory,\r\n Name: 'StockCategoriesTab'\r\n },\r\n {\r\n index: 18,\r\n badge: null,\r\n text: 'כללי סיווג ניירות ערך',\r\n Type: EnumOrganizationChildEntityTypes.StockClassificationRule,\r\n Name: 'StockClassificationRulesTab'\r\n },\r\n {\r\n index: 19,\r\n badge: null,\r\n text: 'סיווגי ערבויות',\r\n Type: EnumOrganizationChildEntityTypes.GuaranteeCategory,\r\n Name: 'GuaranteeCategoriesTab'\r\n },\r\n {\r\n index: 20,\r\n badge: null,\r\n text: 'כללי סיווג ערבויות',\r\n Type: EnumOrganizationChildEntityTypes.GuaratneeClassificationRule,\r\n Name: 'GuaranteeClassificationRulesTab'\r\n },\r\n ]\r\n },\r\n {\r\n name: 'Admin',\r\n text: 'הגדרות כלליות',\r\n tabs: [\r\n {\r\n index: 21,\r\n badge: null,\r\n text: 'רישוי וניהול',\r\n Type: null,\r\n Name: 'AdminSettingsTab'\r\n },\r\n {\r\n index: 6,\r\n badge: null,\r\n text: 'הוראת חיוב',\r\n Type: EnumOrganizationChildEntityTypes.BillingContract,\r\n Name: 'BillingContractTab'\r\n },\r\n ]\r\n },\r\n ],\r\n\r\n DashboardTabs: [\r\n {\r\n index: 0,\r\n text: 'נתונים'\r\n },\r\n {\r\n index: 1,\r\n text: 'גרף'\r\n }\r\n ],\r\n RecurringForecastTabs: [\r\n {\r\n index: 0,\r\n text: 'חד פעמיות'\r\n },\r\n {\r\n index: 1,\r\n text: 'מחזוריות'\r\n },\r\n {\r\n index: 2,\r\n text: 'הנהלת חשבונות'\r\n }\r\n ],\r\n UserNotificationMethods:\r\n [\r\n {\r\n Value: EnumUserNotificationMethods.Email,\r\n Text: 'אימייל'\r\n },\r\n {\r\n Value: EnumUserNotificationMethods.Phone,\r\n Text: 'הודעת SMS'\r\n },\r\n {\r\n Value: EnumUserNotificationMethods.None,\r\n Text: 'לא לשלוח'\r\n }\r\n ],\r\n BankPassProblemNotificationMethods:\r\n [\r\n {\r\n Value: EnumUserNotificationMethods.Email,\r\n Text: 'אימייל'\r\n },\r\n {\r\n Value: EnumUserNotificationMethods.Phone,\r\n Text: 'הודעת SMS'\r\n },\r\n {\r\n Value: EnumUserNotificationMethods.None,\r\n Text: 'לא לשלוח'\r\n }\r\n ,\r\n {\r\n Value: EnumUserNotificationMethods.EmailAndPhone,\r\n Text: 'הודעת אימייל ו-SMS'\r\n }\r\n ],\r\n DownloadStatuses:\r\n [\r\n {\r\n Value: EnumDownloadStatuses.Pending,\r\n Text: 'ממתין'\r\n },\r\n {\r\n Value: EnumDownloadStatuses.NoData,\r\n Text: 'אין נתונים'\r\n },\r\n {\r\n Value: EnumDownloadStatuses.Failure,\r\n Text: 'נכשל'\r\n },\r\n {\r\n Value: EnumDownloadStatuses.Success,\r\n Text: 'הצליח'\r\n },\r\n {\r\n Value: EnumDownloadStatuses.BrowserStartFailure,\r\n Text: 'שגיאת הפעלת דפדפן'\r\n },\r\n {\r\n Value: EnumDownloadStatuses.LoginFailure,\r\n Text: 'שגיאת הזדהות'\r\n }\r\n ],\r\n DownloadTaskStatuses:\r\n [\r\n {\r\n Value: EnumDownloadTaskStatuses.Pending,\r\n Text: 'ממתין'\r\n },\r\n {\r\n Value: EnumDownloadTaskStatuses.NoData,\r\n Text: 'אין נתונים'\r\n },\r\n {\r\n Value: EnumDownloadTaskStatuses.Failure,\r\n Text: 'נכשל'\r\n },\r\n {\r\n Value: EnumDownloadTaskStatuses.Success,\r\n Text: 'הצליח'\r\n },\r\n {\r\n Value: EnumDownloadTaskStatuses.NotSynched,\r\n Text: 'לא סונכרן'\r\n },\r\n {\r\n Value: EnumDownloadTaskStatuses.Reviewed,\r\n Text: 'נצפה'\r\n }\r\n ],\r\n DownloadStepStatuses:\r\n [\r\n {\r\n Value: EnumDownloadStepStatuses.Pending,\r\n Text: 'ממתין'\r\n },\r\n {\r\n Value: EnumDownloadStepStatuses.Exception,\r\n Text: 'נכשל עם חריגה'\r\n },\r\n {\r\n Value: EnumDownloadStepStatuses.Failure,\r\n Text: 'נכשל'\r\n },\r\n {\r\n Value: EnumDownloadStepStatuses.Success,\r\n Text: 'הצליח'\r\n }\r\n ],\r\n CCTransferStatuses: [\r\n {\r\n Value: EnumCCTransferStatuses.Future,\r\n Text: 'עתידי'\r\n },\r\n {\r\n Value: EnumCCTransferStatuses.Actual,\r\n Text: 'בפועל'\r\n },\r\n {\r\n Value: EnumCCTransferStatuses.Invoiced,\r\n Text: 'נוצרה חשבונית'\r\n },\r\n ],\r\n UploadStatuses:\r\n [\r\n {\r\n Value: EnumUploadStatuses.Initiated,\r\n Text: 'איתחול'\r\n },\r\n {\r\n Value: EnumUploadStatuses.NoData,\r\n Text: 'אין תנועות'\r\n },\r\n {\r\n Value: EnumUploadStatuses.Exception,\r\n Text: 'נכשל'\r\n },\r\n {\r\n Value: EnumUploadStatuses.Success,\r\n Text: 'הצליח'\r\n },\r\n {\r\n Value: EnumUploadStatuses.DataSent,\r\n Text: 'נשלחו נתונים'\r\n },\r\n {\r\n Value: EnumUploadStatuses.BalanceMismatch,\r\n Text: 'חוסר התאמה ביתרה'\r\n },\r\n {\r\n Value: EnumUploadStatuses.BalanceNotExistsForDate,\r\n Text: 'אין נתונים לתאריך'\r\n },\r\n {\r\n Value: EnumUploadStatuses.CompanyNotFound,\r\n Text: 'חברה לא קיימת'\r\n },\r\n {\r\n Value: EnumUploadStatuses.AccountNotFound,\r\n Text: 'חשבון הנהח\"ש לא קיים'\r\n },\r\n {\r\n Value: EnumUploadStatuses.NotSynched,\r\n Text: 'לא סונכרן'\r\n },\r\n {\r\n Value: EnumUploadStatuses.FileExported,\r\n Text: 'הקובץ נשמר'\r\n }\r\n ],\r\n HistoryDateRanges:\r\n [\r\n {\r\n DateFrom: Globals.Yesterday,\r\n DateTo: Globals.Today,\r\n Text: 'אתמול'\r\n },\r\n {\r\n DateFrom: Globals.DayBeforeYesterday,\r\n DateTo: Globals.Today,\r\n Text: 'יומיים אחרונים'\r\n },\r\n {\r\n DateFrom: Globals.ThisMonthFirstDate,\r\n DateTo: Globals.Today,\r\n Text: 'החודש'\r\n },\r\n {\r\n DateFrom: Globals.LastMonthFirstDate,\r\n DateTo: Globals.LastMonthLastDate,\r\n Text: 'חודש שעבר'\r\n }\r\n ],\r\n CreditCardsDateRanges:\r\n [\r\n {\r\n SortOrder: 1,\r\n DateFrom: Globals.Today,\r\n DateTo: new Date(Globals.Today.getFullYear(), Globals.Today.getMonth() + 1, Globals.Today.getDate()),\r\n Text: 'חיוב עתידי'\r\n },\r\n {\r\n SortOrder: 2,\r\n DateFrom: new Date(Globals.Today.getFullYear(), Globals.Today.getMonth() - 1, Globals.Today.getDate()),\r\n DateTo: Globals.Today,\r\n Text: 'חיוב עבר'\r\n }\r\n ],\r\n ReportDateRanges:\r\n [\r\n {\r\n DateFrom: Globals.Yesterday,\r\n DateTo: Globals.Yesterday,\r\n Text: 'אתמול'\r\n },\r\n {\r\n DateFrom: Globals.SevenDaysAgoDate,\r\n DateTo: Globals.Yesterday,\r\n Text: '7 ימים אחרונים'\r\n },\r\n {\r\n DateFrom: Globals.ThirtyDaysAgoDate,\r\n DateTo: Globals.Yesterday,\r\n Text: '30 ימים אחרונים'\r\n },\r\n {\r\n DateFrom: Globals.NinetyDaysAgoDate,\r\n DateTo: Globals.Yesterday,\r\n Text: '90 ימים אחרונים'\r\n },\r\n {\r\n DateFrom: Globals.BeginningOfQuater,\r\n DateTo: Globals.Yesterday,\r\n Text: 'רבעון נוכחי'\r\n },\r\n {\r\n DateFrom: Globals.BeginningOfYear,\r\n DateTo: Globals.Yesterday,\r\n Text: 'שנה נוכחית'\r\n }\r\n ],\r\n LoanTransactionFilterDateRanges: [\r\n {\r\n Value: 1,\r\n Text: '+/- יום'\r\n },\r\n {\r\n Value: 3,\r\n Text: '+/- 3 ימים'\r\n },\r\n {\r\n Value: 7,\r\n Text: '+/- 7 ימים'\r\n }\r\n ],\r\n BalanceReportDates:\r\n [\r\n {\r\n Date: Globals.LastMonthLastDate,\r\n Text: 'סוף חודש קודם'\r\n },\r\n {\r\n Date: Globals.LastQuarterLastDate,\r\n Text: 'סוף רבעון קודם'\r\n },\r\n {\r\n Date: Globals.LastYearLastDate,\r\n Text: 'סוף שנה קודמת'\r\n }\r\n ],\r\n FinancialReportDates:\r\n [\r\n {\r\n DateFrom: Globals.ThisMonthFirstDate,\r\n DateTo: Globals.ThisMonthLastDate,\r\n Text: 'חודש נוכחי'\r\n },\r\n {\r\n DateFrom: Globals.BeginningOfQuater,\r\n DateTo: Globals.ThisQuarterLastDate,\r\n Text: 'רבעון נוכחי'\r\n },\r\n {\r\n DateFrom: Globals.BeginningOfYear,\r\n DateTo: Globals.ThisYearLastDate,\r\n Text: 'שנה נוכחית'\r\n },\r\n\r\n {\r\n DateFrom: Globals.LastMonthFirstDate,\r\n DateTo: Globals.LastMonthLastDate,\r\n Text: 'חודש קודם'\r\n },\r\n {\r\n DateFrom: Globals.LastQuarterFirstDate,\r\n DateTo: Globals.LastQuarterLastDate,\r\n Text: 'רבעון קודם'\r\n },\r\n {\r\n DateFrom: Globals.LastYearFirstDate,\r\n DateTo: Globals.LastYearLastDate,\r\n Text: 'שנה קודמת'\r\n }\r\n ],\r\n BalanceSheetReportDates:\r\n [\r\n {\r\n Date: Globals.ThisMonthLastDate,\r\n Text: 'סוף חודש נוכחי'\r\n },\r\n {\r\n Date: Globals.ThisQuarterLastDate,\r\n Text: 'סוף רבעון נוכחי'\r\n },\r\n {\r\n Date: Globals.ThisYearLastDate,\r\n Text: 'סוף שנה נוכחית'\r\n },\r\n\r\n {\r\n Date: Globals.LastMonthLastDate,\r\n Text: 'סוף חודש קודם'\r\n },\r\n {\r\n Date: Globals.LastQuarterLastDate,\r\n Text: 'סוף רבעון קודם'\r\n },\r\n {\r\n Date: Globals.LastYearLastDate,\r\n Text: 'סוף שנה קודמת'\r\n }\r\n ],\r\n ForecastSources:\r\n [\r\n {\r\n Value: EnumSource.Automatic,\r\n Text: 'אוטומטית'\r\n },\r\n {\r\n Value: EnumSource.Manual,\r\n Text: 'ידנית'\r\n },\r\n ],\r\n CashflowReportDates:\r\n [\r\n {\r\n Value: 1,\r\n Text: 'מחר'\r\n },\r\n {\r\n Value: 2,\r\n Text: 'רצף'\r\n },\r\n {\r\n Value: 7,\r\n Text: '7 ימים הבאים'\r\n },\r\n {\r\n Value: 30,\r\n Text: '30 ימים הבאים'\r\n },\r\n {\r\n Value: 90,\r\n Text: '90 ימים הבאים'\r\n }\r\n ],\r\n ReconciliationDates:\r\n [\r\n {\r\n SortOrder: 1,\r\n Value: 7,\r\n Text: '7 ימים'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: 30,\r\n Text: '30 ימים'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: 90,\r\n Text: '90 ימים'\r\n }\r\n ],\r\n RecurringPeriods:\r\n [\r\n {\r\n SortOrder: 1,\r\n Value: EnumPeriodType.Daily,\r\n Text: 'יומי'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumPeriodType.ScheduledDays,\r\n Text: 'לפי ימים'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumPeriodType.Weekly,\r\n Text: 'שבועי'\r\n },\r\n {\r\n SortOrder: 4,\r\n Value: EnumPeriodType.BiWeekly,\r\n Text: 'דו-שבועי'\r\n },\r\n {\r\n SortOrder: 5,\r\n Value: EnumPeriodType.Monthly,\r\n Text: 'חודשי'\r\n },\r\n {\r\n SortOrder: 6,\r\n Value: EnumPeriodType.BiMonthly,\r\n Text: 'דו-חודשי'\r\n },\r\n {\r\n SortOrder: 7,\r\n Value: EnumPeriodType.Quarterly,\r\n Text: 'רבעוני'\r\n }\r\n ],\r\n LoanStatuses:\r\n [\r\n {\r\n SortOrder: 1,\r\n Value: EnumLoanStatus.Canceled,\r\n Text: 'מבוטלת'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumLoanStatus.Draft,\r\n Text: 'טיוטא'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumLoanStatus.Finished,\r\n Text: 'הסתיימה'\r\n },\r\n {\r\n SortOrder: 4,\r\n Value: EnumLoanStatus.Funded,\r\n Text: 'מומנה'\r\n },\r\n {\r\n SortOrder: 5,\r\n Value: EnumLoanStatus.Recycled,\r\n Text: 'מוחזרה'\r\n }\r\n ],\r\n InvoiceStatuses:\r\n [\r\n {\r\n SortOrder: 1,\r\n Value: EnumCCInvoiceStatuses.Draft,\r\n Text: 'טיוטא'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumCCInvoiceStatuses.Posted,\r\n Text: 'הופק'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumCCInvoiceStatuses.Removed,\r\n Text: 'הוסר'\r\n }\r\n ],\r\n SecurityTypes:\r\n [\r\n {\r\n SortOrder: 1,\r\n Value: EnumSecurityType.BankGuarantee,\r\n Text: 'ערבות בנקאית'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumSecurityType.Cash,\r\n Text: 'מזומן'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumSecurityType.InsurancePolicy,\r\n Text: 'ביטוח'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumSecurityType.Mortgage,\r\n Text: 'משכון'\r\n },\r\n ],\r\n SecurityStatuses:\r\n [\r\n {\r\n SortOrder: 1,\r\n Value: EnumSecurityStatus.Requested,\r\n Text: 'נדרשה'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumSecurityStatus.Received,\r\n Text: 'התקבלה'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumSecurityStatus.Cancelled,\r\n Text: 'בוטלה'\r\n }\r\n ],\r\n AmortizationTypes:\r\n [\r\n {\r\n Value: EnumAmortizationType.AnnuityShpizer,\r\n Text: 'שפיצר'\r\n },\r\n {\r\n Value: EnumAmortizationType.Baloon,\r\n Text: 'בלון'\r\n },\r\n {\r\n Value: EnumAmortizationType.StraightLine,\r\n Text: 'קרן שווה'\r\n },\r\n {\r\n Value: EnumAmortizationType.OnCall,\r\n Text: 'OnCall'\r\n },\r\n ],\r\n InterestTypes:\r\n [\r\n {\r\n Value: EnumInterestType.Flat,\r\n Text: 'קבועה'\r\n },\r\n {\r\n Value: EnumInterestType.Linked,\r\n Text: 'צמודה'\r\n },\r\n ],\r\n RecurringIncreaseTypes:\r\n [\r\n {\r\n SortOrder: 1,\r\n Value: EnumIncreaseType.None,\r\n Text: 'ללא'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumIncreaseType.Percent,\r\n Text: 'אחוז'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumIncreaseType.FixedAmount,\r\n Text: 'סכום קבוע'\r\n }\r\n ],\r\n BankGroups:\r\n [\r\n {\r\n Value: EnumBankGroups.Poalim,\r\n Text: 'פועלים'\r\n },\r\n {\r\n Value: EnumBankGroups.Leumi,\r\n Text: 'לאומי'\r\n },\r\n {\r\n Value: EnumBankGroups.Discount,\r\n Text: 'דיסקונט'\r\n },\r\n {\r\n Value: EnumBankGroups.Mizrahi,\r\n Text: 'מזרחי'\r\n },\r\n {\r\n Value: EnumBankGroups.BenLeumi,\r\n Text: 'בינלאומי'\r\n },\r\n {\r\n Value: EnumBankGroups.CityBank,\r\n Text: 'סיטיבנק'\r\n },\r\n {\r\n Value: EnumBankGroups.Doar,\r\n Text: 'הדואר',\r\n },\r\n {\r\n Value: EnumBankGroups.Jerusalem,\r\n Text: 'ירושלים',\r\n },\r\n {\r\n Value: EnumBankGroups.HSBC,\r\n Text: 'HSBC'\r\n },\r\n {\r\n Value: EnumBankGroups.CCProcessors,\r\n Text: 'CCProcessors'\r\n }\r\n ],\r\n DashboardGroupBy:\r\n [\r\n {\r\n Value: EnumDashboardGroupBy.AccountGroup,\r\n Text: 'קבוצת חשבונות'\r\n },\r\n {\r\n Value: EnumDashboardGroupBy.Account,\r\n Text: 'חשבון'\r\n },\r\n {\r\n Value: EnumDashboardGroupBy.Bank,\r\n Text: 'בנק'\r\n },\r\n {\r\n Value: EnumDashboardGroupBy.Company,\r\n Text: 'חברה'\r\n },\r\n {\r\n Value: EnumDashboardGroupBy.Currency,\r\n Text: 'מטבע'\r\n }\r\n ],\r\n Quarters:\r\n [\r\n {\r\n Text: 'רבעון 1',\r\n Value: 1,\r\n DateFrom: Globals.FirstQuarterFromDate,\r\n DateTo: Globals.FirstQuarterToDate\r\n },\r\n {\r\n Text: 'רבעון 2',\r\n Value: 2,\r\n DateFrom: Globals.SecondQuarterFromDate,\r\n DateTo: Globals.SecondQuarterToDate\r\n },\r\n {\r\n Text: 'רבעון 3',\r\n Value: 3,\r\n DateFrom: Globals.ThirdQuarterFromDate,\r\n DateTo: Globals.ThirdQuarterToDate\r\n },\r\n {\r\n Text: 'רבעון 4',\r\n Value: 4,\r\n DateFrom: Globals.FourthQuarterFromDate,\r\n DateTo: Globals.FourthQuarterToDate\r\n }\r\n ],\r\n BankPassCredentialValidity:\r\n [\r\n {\r\n Value: EnumBankPassCredentialValidity.Unknown,\r\n Text: 'לא ידוע'\r\n },\r\n {\r\n Value: EnumBankPassCredentialValidity.Valid,\r\n Text: 'תקין'\r\n },\r\n {\r\n Value: EnumBankPassCredentialValidity.Invalid,\r\n Text: 'לא תקין'\r\n }\r\n ],\r\n ClassificarionRuleFieldTypes:\r\n [\r\n {\r\n Value: EnumClassificarionRuleFieldType.Notes1,\r\n Text: 'הערות 1'\r\n },\r\n {\r\n Value: EnumClassificarionRuleFieldType.Notes2,\r\n Text: 'הערות 2'\r\n },\r\n {\r\n Value: EnumClassificarionRuleFieldType.Reference,\r\n Text: 'אסמכתא'\r\n }\r\n ],\r\n ClassificarionRuleMatchTypes:\r\n [\r\n {\r\n SortOrder: 0,\r\n Value: EnumClassificarionRuleMatchType.Equal,\r\n Text: 'שווה'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumClassificarionRuleMatchType.StartWith,\r\n Text: 'מתחיל ב'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumClassificarionRuleMatchType.Contains,\r\n Text: 'מכיל'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumClassificarionRuleMatchType.MatchRegex,\r\n Text: 'מתאים לתבנית RegEx'\r\n },\r\n {\r\n SortOrder: 10,\r\n Value: EnumClassificarionRuleMatchType.NotEqual,\r\n Text: 'שונה מ'\r\n },\r\n {\r\n SortOrder: 11,\r\n Value: EnumClassificarionRuleMatchType.NotStartWith,\r\n Text: 'לא מתחיל ב'\r\n },\r\n {\r\n SortOrder: 12,\r\n Value: EnumClassificarionRuleMatchType.NotContains,\r\n Text: 'לא מכיל'\r\n },\r\n {\r\n SortOrder: 13,\r\n Value: EnumClassificarionRuleMatchType.NotMatchRegex,\r\n Text: 'לא מתאים לתבנית RegEx'\r\n }\r\n ],\r\n CompanyTabs:\r\n [\r\n {\r\n index: 0,\r\n text: 'חשבונות בנק',\r\n Type: EnumCompanyChildEntityTypes.Account,\r\n Name: 'AccountTab'\r\n },\r\n {\r\n index: 1,\r\n text: 'תבניות לרישום תנועות',\r\n Type: EnumCompanyChildEntityTypes.PostingTemplate,\r\n Name: 'PostingTemplateTab'\r\n },\r\n {\r\n index: 2,\r\n text: 'קטגוריות תנועה',\r\n Type: EnumCompanyChildEntityTypes.Category,\r\n Name: 'CategoryTab'\r\n },\r\n {\r\n index: 3,\r\n text: 'קטגוריית אב',\r\n Type: EnumCompanyChildEntityTypes.ParentCategory,\r\n Name: 'ParentCategoryTab'\r\n },\r\n {\r\n index: 4,\r\n text: 'כללי סיווג',\r\n Type: EnumCompanyChildEntityTypes.ClassificationRule,\r\n Name: 'ClassificationrRuleTab'\r\n },\r\n {\r\n index: 5,\r\n text: 'הגדרות תזרים',\r\n Type: EnumCompanyChildEntityTypes.ForecastMapper,\r\n Name: 'ForecastMapperTab'\r\n },\r\n {\r\n index: 6,\r\n text: 'הסכמי סליקת כ. אשראי',\r\n Type: EnumCompanyChildEntityTypes.CCContract,\r\n Name: 'CreditCardProcessingContractsTab'\r\n }\r\n ],\r\n NotificationTemplatesTabs: [\r\n {\r\n index: 0,\r\n text: 'יתרות',\r\n Name: 'BalancesTab'\r\n },\r\n {\r\n index: 1,\r\n text: 'תנועות',\r\n Name: 'TransactionTab'\r\n },\r\n {\r\n index: 2,\r\n text: 'פרטי יתרה',\r\n Name: 'BalanceDetailsTab'\r\n },\r\n {\r\n index: 3,\r\n text: 'תשלומי הלוואה',\r\n Name: 'LoanPaymentsTab'\r\n }\r\n ],\r\n CashflowTabs:\r\n [\r\n {\r\n Value: 0,\r\n Text: 'תצוגה מפורטת',\r\n Name: 'DetailedTab'\r\n },\r\n {\r\n Value: 1,\r\n Text: 'תצוגה מרוכזת',\r\n Name: 'SummarizedTab'\r\n },\r\n {\r\n Value: 2,\r\n Text: 'תצוגת גרף',\r\n Name: 'ChartTab'\r\n },\r\n {\r\n Value: 3,\r\n Text: 'תצוגת קטגוריות',\r\n Name: 'CategoryTab'\r\n },\r\n {\r\n Value: 4,\r\n Text: 'תצוגת קטגוריות דינמית',\r\n Name: 'CategoryDynamicTab'\r\n }\r\n ],\r\n LoanTabs: [\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: 'PaymentsTab'\r\n },\r\n {\r\n index: 2,\r\n text: 'בטוחות',\r\n Name: 'SecuritiesTab'\r\n },\r\n ],\r\n BalanceHistoryReportDateRanges:\r\n [\r\n {\r\n DateFrom: Globals.BeginningOfLastYear,\r\n DateTo: Globals.LastYearLastDate,\r\n Text: 'שנה שעברה'\r\n },\r\n {\r\n DateFrom: Globals.BeginningOfYear,\r\n DateTo: Globals.Yesterday,\r\n Text: 'שנה נוכחית'\r\n },\r\n {\r\n DateFrom: Globals.BeginningOfQuater,\r\n DateTo: Globals.Yesterday,\r\n Text: 'רבעון נוכחי'\r\n },\r\n {\r\n DateFrom: Globals.LastMonthFirstDate,\r\n DateTo: Globals.LastMonthLastDate,\r\n Text: 'חודש שעבר'\r\n },\r\n {\r\n DateFrom: Globals.ThisMonthFirstDate,\r\n DateTo: Globals.Yesterday,\r\n Text: 'החודש'\r\n }\r\n ],\r\n BalanceHistoryReportMode:\r\n [\r\n {\r\n Value: EnumBalanceHistoryReportMode.Daily,\r\n Text: 'יומי'\r\n },\r\n {\r\n Value: EnumBalanceHistoryReportMode.Monthly,\r\n Text: 'חודשי'\r\n },\r\n {\r\n Value: EnumBalanceHistoryReportMode.Weekly,\r\n Text: 'שבועי'\r\n }\r\n ],\r\n Sources:\r\n [\r\n {\r\n Value: EnumSource.Automatic,\r\n Text: 'אוטומטי'\r\n },\r\n {\r\n Value: EnumSource.Manual,\r\n Text: 'ידני'\r\n }\r\n ],\r\n Sides:\r\n [\r\n {\r\n Value: EnumSide.Expense,\r\n Text: 'הוצאה'\r\n },\r\n {\r\n Value: EnumSide.Income,\r\n Text: 'הכנסה'\r\n }\r\n ],\r\n LoanSides:\r\n [\r\n {\r\n Value: EnumLoanSide.Outgoing,\r\n Text: 'הלוואה שניתנה'\r\n },\r\n {\r\n Value: EnumLoanSide.Incoming,\r\n Text: 'הלוואה שנלקחה'\r\n }\r\n ],\r\n LoanPaymentFrequencyTypes:\r\n [\r\n {\r\n SortOrder: 0,\r\n Value: EnumLoanPaymentFrequencyType.Weekly,\r\n Text: 'שבועי',\r\n Count: 1,\r\n UnitType: EnumLoanPaymentFrequencyType.Weekly\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumLoanPaymentFrequencyType.BiWeekly,\r\n Text: 'דו-שבועי',\r\n Count: 2,\r\n UnitType: EnumLoanPaymentFrequencyType.Weekly\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumLoanPaymentFrequencyType.Monthly,\r\n Text: 'חודשית',\r\n Count: 1,\r\n UnitType: EnumLoanPaymentFrequencyType.Monthly\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumLoanPaymentFrequencyType.BiMonthly,\r\n Text: 'דו-חודשית',\r\n Count: 2,\r\n UnitType: EnumLoanPaymentFrequencyType.Monthly\r\n },\r\n {\r\n SortOrder: 4,\r\n Value: EnumLoanPaymentFrequencyType.Quorterly,\r\n Text: 'רבעונית',\r\n Count: 3,\r\n UnitType: EnumLoanPaymentFrequencyType.Monthly\r\n },\r\n {\r\n SortOrder: 5,\r\n Value: EnumLoanPaymentFrequencyType.SemiAnnual,\r\n Text: 'חצי שנתית',\r\n Count: 6,\r\n UnitType: EnumLoanPaymentFrequencyType.Monthly\r\n },\r\n {\r\n SortOrder: 6,\r\n Value: EnumLoanPaymentFrequencyType.Annual,\r\n Text: 'שנתית',\r\n Count: 12,\r\n UnitType: EnumLoanPaymentFrequencyType.Monthly\r\n },\r\n {\r\n SortOrder: 7,\r\n Value: EnumLoanPaymentFrequencyType.OneTimePayment,\r\n Text: 'תשלום חד פעמי',\r\n Count: 0,\r\n UnitType: EnumLoanPaymentFrequencyType.OneTimePayment\r\n }\r\n ],\r\n LoanInterestPeriodCalculationTypes:\r\n [\r\n {\r\n Value: EnumLoanInterestPeriodCalculationType.Daily,\r\n Text: 'יומי'\r\n },\r\n {\r\n Value: EnumLoanInterestPeriodCalculationType.Monthly,\r\n Text: 'חודשי'\r\n }\r\n ],\r\n UserAuthorizationTypes:\r\n [\r\n {\r\n Value: EnumUserAuthorizationType.All,\r\n Text: 'הכל'\r\n },\r\n {\r\n Value: EnumUserAuthorizationType.Companies,\r\n Text: 'לפי חברה'\r\n },\r\n {\r\n Value: EnumUserAuthorizationType.Accounts,\r\n Text: 'לפי חשבון'\r\n }\r\n ],\r\n ShareInformationWith:\r\n [\r\n {\r\n Value: EnumShareWith.Myself,\r\n Text: 'אלי'\r\n },\r\n {\r\n Value: EnumShareWith.Users,\r\n Text: 'משתמשים בארגון'\r\n },\r\n {\r\n Value: EnumShareWith.Emails,\r\n Text: 'גורם חיצוני'\r\n },\r\n ],\r\n SummaryLevels:\r\n [\r\n {\r\n Value: EnumSummaryLevel.Day,\r\n Text: 'יום',\r\n SortOrder: 0\r\n },\r\n {\r\n Value: EnumSummaryLevel.Week,\r\n Text: 'שבוע',\r\n SortOrder: 1\r\n },\r\n {\r\n Value: EnumSummaryLevel.Month,\r\n Text: 'חודש',\r\n SortOrder: 2\r\n },\r\n ],\r\n CashflowSummarizedAggregationLevels:\r\n [\r\n {\r\n Value: EnumCashflowSummarizedAggregationLevel.Company,\r\n Text: 'חברה'\r\n },\r\n {\r\n Value: EnumCashflowSummarizedAggregationLevel.Account,\r\n Text: 'חשבון בנק'\r\n },\r\n {\r\n Value: EnumCashflowSummarizedAggregationLevel.BookingAccount,\r\n Text: 'חשבון הנהלת חשבונות'\r\n },\r\n {\r\n Value: EnumCashflowSummarizedAggregationLevel.AccountGroup,\r\n Text: 'קבוצת חשבונות'\r\n },\r\n {\r\n Value: EnumCashflowSummarizedAggregationLevel.Bank,\r\n Text: 'בנק'\r\n },\r\n {\r\n Value: EnumCashflowSummarizedAggregationLevel.BankGroup,\r\n Text: 'קבוצת בנקים'\r\n },\r\n {\r\n Value: EnumCashflowSummarizedAggregationLevel.Currency,\r\n Text: 'מטבע'\r\n },\r\n {\r\n Value: EnumCashflowSummarizedAggregationLevel.Category,\r\n Text: 'קטגוריה'\r\n },\r\n ],\r\n ShowInCurrencyOptions:\r\n [\r\n {\r\n Value: EnumShowInCurrencyOptions.Original,\r\n Text: 'מטבע חשבון',\r\n SortOrder: 0\r\n },\r\n {\r\n Value: EnumShowInCurrencyOptions.ILS,\r\n Text: 'ש\"ח',\r\n SortOrder: 1\r\n },\r\n {\r\n Value: EnumShowInCurrencyOptions.Both,\r\n Text: 'מטבע החשבון ושקל',\r\n SortOrder: 2\r\n },\r\n {\r\n Value: EnumShowInCurrencyOptions.OriginalAndDollar,\r\n Text: 'מקורי ודולר',\r\n SortOrder: 3\r\n },\r\n {\r\n Value: EnumShowInCurrencyOptions.OriginalAndDefault,\r\n Text: 'מקורי וברירת מחדל של הארגון',\r\n SortOrder: 4\r\n },\r\n {\r\n Value: EnumShowInCurrencyOptions.Default,\r\n Text: 'ברירת מחדל של הארגון',\r\n SortOrder: 5\r\n },\r\n\r\n ],\r\n EnumNotificationTemplateSectionFields:\r\n [\r\n {\r\n Value: EnumNotificationTemplateSectionFields.AccountGroup,\r\n Text: 'קבוצת חשבונות'\r\n },\r\n {\r\n Value: EnumNotificationTemplateSectionFields.BankGroup,\r\n Text: 'קבוצת בנקים'\r\n },\r\n {\r\n Value: EnumNotificationTemplateSectionFields.Bank,\r\n Text: 'בנק'\r\n },\r\n {\r\n Value: EnumNotificationTemplateSectionFields.Company,\r\n Text: 'חברה'\r\n },\r\n {\r\n Value: EnumNotificationTemplateSectionFields.BookingAccount,\r\n Text: 'חשבון הנהח\"ש'\r\n },\r\n {\r\n Value: EnumNotificationTemplateSectionFields.BankAccount,\r\n Text: 'חשבון בנק'\r\n },\r\n {\r\n Value: EnumNotificationTemplateSectionFields.BookingAccountType,\r\n Text: 'סוג חשבון הנהח\"ש'\r\n },\r\n {\r\n Value: EnumNotificationTemplateSectionFields.Currency,\r\n Text: 'מטבע'\r\n },\r\n {\r\n Value: EnumNotificationTemplateSectionFields.HasCheques,\r\n Text: 'שורת שיק'\r\n },\r\n {\r\n Value: EnumNotificationTemplateSectionFields.Category,\r\n Text: 'קטגוריה'\r\n },\r\n {\r\n Value: EnumNotificationTemplateSectionFields.DepositTypes,\r\n Text: 'סוג פקדון'\r\n },\r\n {\r\n Value: EnumNotificationTemplateSectionFields.StockTypes,\r\n Text: 'סוג ניירות ערך'\r\n },\r\n {\r\n Value: EnumNotificationTemplateSectionFields.AmortizationType,\r\n Text: 'סוגי הפחתות'\r\n },\r\n {\r\n Value: EnumNotificationTemplateSectionFields.InterestType,\r\n Text: 'סוגי ריבית'\r\n },\r\n {\r\n Value: EnumNotificationTemplateSectionFields.NextDays,\r\n Text: 'ימים הבאים'\r\n },\r\n {\r\n Value: EnumNotificationTemplateSectionFields.NextWeeks,\r\n Text: 'שבועות הבאים'\r\n },\r\n {\r\n Value: EnumNotificationTemplateSectionFields.NextMonths,\r\n Text: 'חודשים הבאים'\r\n },\r\n {\r\n Value: EnumNotificationTemplateSectionFields.SumSide,\r\n Text: 'צד עסקה'\r\n }\r\n ],\r\n PredefinedNotificationTemplatesMenuItems:\r\n [\r\n {\r\n Value: EnumPredefinedNotificationTemplates.General,\r\n Text: 'כללי'\r\n },\r\n {\r\n Value: EnumPredefinedNotificationTemplates.Detailed,\r\n Text: 'מפורט'\r\n },\r\n {\r\n Value: EnumPredefinedNotificationTemplates.TotalBalance,\r\n Text: 'סיכום יתרות'\r\n },\r\n {\r\n Value: EnumPredefinedNotificationTemplates.Empty,\r\n Text: 'ריק'\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 MatchingRelationships: [\r\n {\r\n Value: EnumMatchingRelationship.And,\r\n Text: 'וגם'\r\n },\r\n {\r\n Value: EnumMatchingRelationship.Or,\r\n Text: 'או'\r\n }\r\n ],\r\n BillingReportTabs:\r\n [\r\n {\r\n index: 0,\r\n text: 'תצוגה גרפית',\r\n Name: 'DashboardsViewTab'\r\n },\r\n {\r\n index: 1,\r\n text: 'תצוגת טבלה',\r\n Name: 'GridViewTab'\r\n }\r\n ],\r\n BankTypes:\r\n [\r\n {\r\n Value: EnumBankTypes.Local,\r\n Text: '1. בנק ישראלי'\r\n },\r\n {\r\n Value: EnumBankTypes.ExternalCreditCard,\r\n Text: '2. כרטיס אשראי חוץ בנקאי'\r\n },\r\n {\r\n Value: EnumBankTypes.Foreign,\r\n Text: '3. בנק זר'\r\n },\r\n {\r\n Value: EnumBankTypes.ExternalLoaner,\r\n Text: '4. נותן הלוואות חיצוניות'\r\n },\r\n {\r\n Value: EnumBankTypes.CCProcessor,\r\n Text: '5. חברת סליקת אשראי'\r\n }\r\n ],\r\n ReplicationStatuses:\r\n [\r\n {\r\n Value: EnumReplicationStatuses.Initiated,\r\n Text: 'איתחול'\r\n },\r\n {\r\n Value: EnumReplicationStatuses.NoData,\r\n Text: 'אין נתונים'\r\n },\r\n {\r\n Value: EnumReplicationStatuses.Exception,\r\n Text: 'נכשל'\r\n },\r\n {\r\n Value: EnumReplicationStatuses.Success,\r\n Text: 'הצליח'\r\n },\r\n {\r\n Value: EnumReplicationStatuses.CompanyNotFound,\r\n Text: 'חברה לא קיימת'\r\n }\r\n ],\r\n ReplicationObjectTypes:\r\n [\r\n {\r\n Value: EnumReplicationObjectTypes.AccountingJournalEntry,\r\n Text: 'תנועת יומן'\r\n },\r\n {\r\n Value: EnumReplicationObjectTypes.BusinessPartner,\r\n Text: 'כרטיס לקוח/ספק'\r\n },\r\n {\r\n Value: EnumReplicationObjectTypes.BusinessPartnerGroup,\r\n Text: 'קבוצת השתייכות'\r\n },\r\n {\r\n Value: EnumReplicationObjectTypes.DimensionCode1,\r\n Text: 'מימד 1'\r\n },\r\n {\r\n Value: EnumReplicationObjectTypes.DimensionCode2,\r\n Text: 'מימד 2'\r\n },\r\n {\r\n Value: EnumReplicationObjectTypes.DimensionCode3,\r\n Text: 'מימד 3'\r\n },\r\n {\r\n Value: EnumReplicationObjectTypes.DimensionCode4,\r\n Text: 'מימד 4'\r\n },\r\n {\r\n Value: EnumReplicationObjectTypes.DimensionCode5,\r\n Text: 'מימד 5'\r\n },\r\n {\r\n Value: EnumReplicationObjectTypes.Document,\r\n Text: 'מסמך'\r\n },\r\n {\r\n Value: EnumReplicationObjectTypes.AccountingForecast,\r\n Text: 'תחזית תזרים הנהח\"ש'\r\n },\r\n {\r\n Value: EnumReplicationObjectTypes.AccountingForecastCategory,\r\n Text: 'קטגורית תזרים הנהח\"ש'\r\n },\r\n {\r\n Value: EnumReplicationObjectTypes.Item,\r\n Text: 'פריט'\r\n },\r\n {\r\n Value: EnumReplicationObjectTypes.ItemGroup,\r\n Text: 'קבוצת פריטים'\r\n },\r\n {\r\n Value: EnumReplicationObjectTypes.LedgerAccount,\r\n Text: 'חשבון לוח חשבונות'\r\n },\r\n {\r\n Value: EnumReplicationObjectTypes.LedgerAccountGroup,\r\n Text: 'כותרת לוח חשבונות'\r\n },\r\n {\r\n Value: EnumReplicationObjectTypes.Payment,\r\n Text: 'תשלום'\r\n },\r\n {\r\n Value: EnumReplicationObjectTypes.Project,\r\n Text: 'פרויקט'\r\n },\r\n {\r\n Value: EnumReplicationObjectTypes.SalesPerson,\r\n Text: 'איש מכירות'\r\n },\r\n {\r\n Value: EnumReplicationObjectTypes.PaymentGroup,\r\n Text: 'תנאי תשלום'\r\n },\r\n {\r\n Value: EnumReplicationObjectTypes.CompanyMetadata,\r\n Text: 'נתונים ראשיים לחברה'\r\n }\r\n ],\r\n PaymentMeansTypes:\r\n [\r\n {\r\n Value: EnumPaymentMeansTypes.Cach,\r\n Text: 'מזומן'\r\n },\r\n {\r\n Value: EnumPaymentMeansTypes.Cheque,\r\n Text: 'שיק'\r\n },\r\n {\r\n Value: EnumPaymentMeansTypes.CreditCard,\r\n Text: 'כרטיס אשראי'\r\n },\r\n {\r\n Value: EnumPaymentMeansTypes.WireTransfer,\r\n Text: 'העברה בנקאית'\r\n },\r\n {\r\n Value: EnumPaymentMeansTypes.Multiple,\r\n Text: 'כמה אמצעים'\r\n }\r\n\r\n ],\r\n TransactionCategoryIcons:\r\n [\r\n {\r\n Value: 'cheques.png',\r\n Text: 'שיקים'\r\n },\r\n {\r\n Value: 'transfer.png',\r\n Text: 'העברה בנקאית'\r\n },\r\n {\r\n Value: 'deposit-payment.png',\r\n Text: 'פקדון'\r\n },\r\n {\r\n Value: 'interest-payment.png',\r\n Text: 'ריבית'\r\n },\r\n {\r\n Value: 'commission.png',\r\n Text: 'עמלה'\r\n },\r\n {\r\n Value: 'credit-card.png',\r\n Text: 'כרטיס אשראי'\r\n },\r\n {\r\n Value: 'management-fee.png',\r\n Text: 'דמי ניהול'\r\n },\r\n {\r\n Value: 'misc.png',\r\n Text: 'שונות'\r\n }\r\n ],\r\n DocumentTypes:\r\n [\r\n {\r\n Value: EnumDocumentType.Invoice,\r\n Text: 'חשבונית מס'\r\n },\r\n {\r\n Value: EnumDocumentType.Refund,\r\n Text: 'חשבונית זיכוי'\r\n },\r\n {\r\n Value: EnumDocumentType.PurchaseInvoice,\r\n Text: 'תעודת רכש'\r\n },\r\n {\r\n Value: EnumDocumentType.PurchaseReservationInvoice,\r\n Text: 'חשבונית שריון רכש'\r\n },\r\n ],\r\n BusinessPartnerTabs:\r\n [\r\n {\r\n index: 0,\r\n text: 'מסמכים'\r\n },\r\n {\r\n index: 1,\r\n text: 'תשלומים'\r\n },\r\n {\r\n index: 2,\r\n text: 'כרטסת'\r\n }\r\n ],\r\n BusinessPartnerTypes:\r\n [\r\n {\r\n Value: EnumSide.Expense,\r\n Text: 'ספק'\r\n },\r\n {\r\n Value: EnumSide.Income,\r\n Text: 'לקוח'\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 ExpenseManagementTabs:\r\n [\r\n {\r\n index: 0,\r\n text: 'מחלקות',\r\n Name: 'DepartmentTab'\r\n },\r\n {\r\n index: 1,\r\n text: 'סניפים',\r\n Name: 'BranchTab'\r\n },\r\n {\r\n index: 2,\r\n text: 'עובדים',\r\n Name: 'WorkerTab'\r\n },\r\n {\r\n index: 3,\r\n text: 'קטגוריות הוצאה',\r\n Name: 'ExpenseCategoriesTab'\r\n },\r\n {\r\n index: 4,\r\n text: 'שדות מוגדרי משתמש',\r\n Name: 'CustomFieldsTab'\r\n },\r\n {\r\n index: 5,\r\n text: 'כללי אישור',\r\n Name: 'ApprovalRulesTab'\r\n }\r\n ],\r\n VisibilitySettings:\r\n [\r\n {\r\n Value: EnumVisibilitySetting.Hide,\r\n Text: 'הסתר'\r\n },\r\n {\r\n Value: EnumVisibilitySetting.Mandatory,\r\n Text: 'חובה'\r\n },\r\n {\r\n Value: EnumVisibilitySetting.Show,\r\n Text: 'הצג'\r\n }\r\n ],\r\n CustomFieldsetFieldInputTypes:\r\n [\r\n {\r\n index: 0,\r\n Value: EnumCustomFieldsetFieldInputType.Text,\r\n Text: 'טקסט'\r\n },\r\n {\r\n index: 1,\r\n Value: EnumCustomFieldsetFieldInputType.Number,\r\n Text: 'מספר'\r\n },\r\n {\r\n index: 2,\r\n Value: EnumCustomFieldsetFieldInputType.Memo,\r\n Text: 'טקסט ארוך'\r\n },\r\n {\r\n index: 3,\r\n Value: EnumCustomFieldsetFieldInputType.Dropdown,\r\n Text: 'בחירה מתוך רשימה'\r\n },\r\n {\r\n index: 4,\r\n Value: EnumCustomFieldsetFieldInputType.Checkbox,\r\n Text: 'צ\\'ק בוקס'\r\n }\r\n ],\r\n ExpenseStatuses:\r\n [\r\n {\r\n SortOrder: 0,\r\n Value: EnumExpenseStatus.Submitted,\r\n Text: 'הוגשה'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumExpenseStatus.Canceled,\r\n Text: 'בוטלה'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumExpenseStatus.Approved,\r\n Text: 'אושרה'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumExpenseStatus.Rejected,\r\n Text: 'נדחתה'\r\n },\r\n {\r\n SortOrder: 4,\r\n Value: EnumExpenseStatus.Posted,\r\n Text: 'נרשמה בספרים'\r\n }\r\n ],\r\n LoanPostPaymentRecalculationOptions: [\r\n {\r\n SortOrder: 0,\r\n Value: EnumLoanPostPaymentRecalculationOptions.Payment,\r\n Text: 'הוסף הפרש לתשלום הבא'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumLoanPostPaymentRecalculationOptions.Loan,\r\n Text: 'חשב הלוואה מחדש'\r\n }\r\n ],\r\n PostPaymentActions: [\r\n {\r\n SortOrder: 0,\r\n Value: 0,\r\n Text: 'הוסף לקרן',\r\n Linkage: false,\r\n },\r\n {\r\n SortOrder: 0,\r\n Value: 1,\r\n Text: 'הוסף לריבית',\r\n Linkage: false,\r\n },\r\n {\r\n SortOrder: 0,\r\n Value: 2,\r\n Text: 'הוסף לעמלה',\r\n Linkage: false,\r\n },\r\n {\r\n SortOrder: 0,\r\n Value: 3,\r\n Text: 'הוסף להצמדת קרן',\r\n Linkage: true,\r\n },\r\n {\r\n SortOrder: 0,\r\n Value: 4,\r\n Text: 'הוסף להצמדת ריבית',\r\n Linkage: true,\r\n }\r\n ],\r\n FinancialReportDateTypes:\r\n [\r\n {\r\n SortOrder: 0,\r\n Value: EnumFinancialReportDateType.PostingDate,\r\n Text: 'תאריך אסמכתא'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumFinancialReportDateType.DueDate,\r\n Text: 'תאריך ערך'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumFinancialReportDateType.TaxDate,\r\n Text: 'תאריך מס'\r\n },\r\n ],\r\n FinancialReportCurrencyTypes: [\r\n {\r\n SortOrder: 0,\r\n Value: EnumFinancialReportCurrencyType.Local,\r\n Text: 'מקומי'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumFinancialReportCurrencyType.System,\r\n Text: 'מערכת'\r\n },\r\n ],\r\n FinancialReportRangeTypes: [\r\n {\r\n SortOrder: 0,\r\n Value: EnumFinancialReportRangeType.All,\r\n Text: 'הכל'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumFinancialReportRangeType.Month,\r\n Text: 'חודש'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumFinancialReportRangeType.Quarter,\r\n Text: 'רבעון'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumFinancialReportRangeType.Year,\r\n Text: 'שנה'\r\n },\r\n ],\r\n LastTransactionsDateOptions: [\r\n {\r\n SortOrder: 0,\r\n Value: 1,\r\n Text: '24 שעות'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: 3,\r\n Text: '3 ימים אחרונים'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: 7,\r\n Text: '7 ימים אחרונים'\r\n }\r\n ],\r\n DataExportTypes: [\r\n {\r\n Value: EnumDataExportType.Automatic,\r\n Text: 'אוטומטי'\r\n },\r\n {\r\n Value: EnumDataExportType.BAI2File,\r\n Text: 'BAI2 File'\r\n },\r\n {\r\n Value: EnumDataExportType.ExcelFile,\r\n Text: 'קובץ אקסל'\r\n },\r\n {\r\n Value: EnumDataExportType.BezeqZahav14File,\r\n Text: 'בזק זהב - 14 תווים'\r\n },\r\n {\r\n Value: EnumDataExportType.BezeqZahav24File,\r\n Text: 'בזק זהב - 24 תווים'\r\n },\r\n {\r\n Value: EnumDataExportType.BezeqZahav48File,\r\n Text: 'בזק זהב- 48 תווים'\r\n },\r\n {\r\n Value: EnumDataExportType.MT940File,\r\n Text: 'MT940 File'\r\n },\r\n {\r\n Value: EnumDataExportType.IntentiaFile,\r\n Text: 'קובץ אינטנטיה'\r\n }\r\n ],\r\n ExportTransactionsMethods: [\r\n {\r\n SortOrder: 0,\r\n Value: EnumExportTransactionsMethod.ExportNewTransactions,\r\n Text: 'ייצא תנועות חדשות'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumExportTransactionsMethod.ExportTransactionsFromDate,\r\n Text: 'ייצא תנועות מתאריך'\r\n }\r\n ],\r\n LedgerAccountTypes: [\r\n {\r\n SortOrder: 0,\r\n Value: EnumLedgerAccountType.Income,\r\n Text: 'הכנסות'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumLedgerAccountType.Expense,\r\n Text: 'הוצאות'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumLedgerAccountType.Other,\r\n Text: 'אחר'\r\n }\r\n ],\r\n JournalEntryCurrencyTypes: [\r\n {\r\n SortOrder: 0,\r\n Value: EnumJournalEntryCurrencyTypes.Local,\r\n Text: 'מקומי'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumJournalEntryCurrencyTypes.System,\r\n Text: 'מערכת'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumJournalEntryCurrencyTypes.Foreign,\r\n Text: 'מט\"ח'\r\n }\r\n ],\r\n ChequesReportTabs:\r\n [\r\n {\r\n index: 0,\r\n text: 'שיקים נכנסים',\r\n Name: 'שיקים נכנסים'\r\n },\r\n {\r\n index: 1,\r\n text: 'שיקים יוצאים',\r\n Name: 'שיקים יוצאים'\r\n }\r\n ],\r\n ProcessingCompanies:\r\n [\r\n {\r\n Value: EnumCCProcessingCompanies.Isracard,\r\n Text: 'ישראכרט'\r\n },\r\n {\r\n Value: EnumCCProcessingCompanies.VisaCal,\r\n Text: 'ויזה כאל'\r\n },\r\n {\r\n Value: EnumCCProcessingCompanies.LeumiMax,\r\n Text: 'לאומי מקס'\r\n }\r\n ],\r\n Brands:\r\n [\r\n {\r\n Value: EnumCCBrands.All,\r\n Text: 'כל המותגים',\r\n Icon: 'assets/projects/kraken/cc-brand-generic.svg'\r\n },\r\n {\r\n Value: EnumCCBrands.MasterCard,\r\n Text: 'מאסטרקארד',\r\n Icon: 'assets/projects/kraken/cc-brand-mastercard.svg'\r\n },\r\n {\r\n Value: EnumCCBrands.Visa,\r\n Text: 'ויזה',\r\n Icon: 'assets/projects/kraken/cc-brand-visa.svg'\r\n },\r\n {\r\n Value: EnumCCBrands.Amex,\r\n Text: 'אמריקן אקספרס',\r\n Icon: 'assets/projects/kraken/cc-brand-american-express.svg'\r\n },\r\n {\r\n Value: EnumCCBrands.Diners,\r\n Text: 'דיינרס',\r\n Icon: 'assets/projects/kraken/cc-brand-diners.svg'\r\n },\r\n {\r\n Value: EnumCCBrands.Isracard,\r\n Text: 'ישראכרט',\r\n Icon: 'assets/projects/kraken/cc-brand-isracard.svg'\r\n }\r\n ],\r\n UploadHistoryTabs:\r\n [\r\n {\r\n index: 0,\r\n text: 'דפי בנק'\r\n },\r\n {\r\n index: 1,\r\n text: 'תנועת יומן'\r\n },\r\n {\r\n index: 2,\r\n text: 'תקבולים נכנסים'\r\n },\r\n ],\r\n ApplyToBookingAccountsTypes: [\r\n {\r\n SortOrder: 1,\r\n Value: EnumApplyToBookingAccountsTypes.All,\r\n Text: 'כל החשבונות'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumApplyToBookingAccountsTypes.SpecificCurrency,\r\n Text: 'כל החשבונות במטבע'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumApplyToBookingAccountsTypes.Specific,\r\n Text: 'חשבון ספציפי'\r\n }\r\n ],\r\n NoteFieldTypes: [\r\n {\r\n SortIndex: 1,\r\n Value: EnumNoteFieldTypes.Note1,\r\n Text: 'הערות 1'\r\n },\r\n {\r\n SortIndex: 2,\r\n Value: EnumNoteFieldTypes.Note2,\r\n Text: 'הערות 2'\r\n }\r\n ],\r\n NoteMatchTypes: [\r\n {\r\n SortOrder: 1,\r\n Value: EnumNoteMatchTypes.Equal,\r\n Text: 'שווה'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumNoteMatchTypes.StartWith,\r\n Text: 'מתחיל ב'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumNoteMatchTypes.EndsWith,\r\n Text: 'מסתיים ב'\r\n },\r\n {\r\n SortOrder: 4,\r\n Value: EnumNoteMatchTypes.Contains,\r\n Text: 'מכיל'\r\n },\r\n ],\r\n NotesExportAdjustments: [\r\n {\r\n SortOrder: 1,\r\n Value: EnumNotesExportAdjustments.None,\r\n Text: 'השאר מצב קיים',\r\n Description: 'הערות 1 והערות 2 לעמודות נפרדות בדף בנק'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumNotesExportAdjustments.Notes2Append,\r\n Text: 'הערות 1 + הערות 2',\r\n Description: 'שרשור הערות 1 + הערות 2 לעמודת פרטים בדף בנק'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumNotesExportAdjustments.Notes2Override,\r\n Text: '> הערות 2 במידה ומלא, אחרת הערות 1',\r\n Description: 'טעינת הערות 2 במידה ושדה זה מלא, אחרת תתבצע טעינת הערות 1'\r\n },\r\n {\r\n SortOrder: 4,\r\n Value: EnumNotesExportAdjustments.Notes2Prepend,\r\n Text: 'הערות 2 + הערות 1',\r\n Description: '> שרשור הערות 2 + הערות 1 לעמודת פרטים בדף בנק'\r\n }\r\n ],\r\n AccountFullNameDisplayType: [\r\n {\r\n Value: EnumAccountFullNameDisplayType.Full,\r\n Text: 'שם חשבון מלא'\r\n },\r\n {\r\n Value: EnumAccountFullNameDisplayType.NumberAndBranch,\r\n Text: 'מספר חשבון וסניף'\r\n },\r\n {\r\n Value: EnumAccountFullNameDisplayType.NumberOnly,\r\n Text: 'מספר חשבון בלבד'\r\n },\r\n {\r\n Value: EnumAccountFullNameDisplayType.BankAndNumber,\r\n Text: 'שם בנק ומספר חשבון'\r\n }\r\n ],\r\n SyncStatusTabs: [\r\n {\r\n index: 0,\r\n text: 'חשבון בנק',\r\n Value: 'Account'\r\n },\r\n {\r\n index: 1,\r\n text: 'סליקה',\r\n Value: 'Contract'\r\n }\r\n ],\r\n BillingContractsReportTabs: [\r\n {\r\n index: 0,\r\n text: 'סיכום'\r\n },\r\n {\r\n index: 1,\r\n text: 'חיוב'\r\n }\r\n ],\r\n JournalEntryUploadLevels: [\r\n {\r\n SortOrder: 1,\r\n Value: EnumJournalEntryUploadLevel.None,\r\n Text: 'לא לבצע העלאה לתנועות'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumJournalEntryUploadLevel.JournalVoucher,\r\n Text: 'פקודת יומן'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumJournalEntryUploadLevel.JournalEntry,\r\n Text: 'תנועת יומן'\r\n },\r\n {\r\n SortOrder: 4,\r\n Value: EnumJournalEntryUploadLevel.JournalEntryAndReconciliation,\r\n Text: 'תנועת יומן והתאמה'\r\n }\r\n ],\r\n TransationJEInfoTabs: [\r\n {\r\n SortOrder: 0,\r\n text: 'תנועת יומן'\r\n },\r\n {\r\n SortOrder: 1,\r\n text: 'תבנית לרישום תנועות'\r\n },\r\n ],\r\n FileEncodings: [\r\n {\r\n SortOrder: 1,\r\n Value: EnumFileImportEncodings.Windows1255,\r\n Text: 'Windows-1255'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumFileImportEncodings.OEM862,\r\n Text: 'OEM-862'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumFileImportEncodings.ISO88598,\r\n Text: 'ISO-8859-8'\r\n },\r\n {\r\n SortOrder: 4,\r\n Value: EnumFileImportEncodings.UTF8,\r\n Text: 'UTF-8'\r\n },\r\n {\r\n SortOrder: 5,\r\n Value: EnumFileImportEncodings.ANSI,\r\n Text: 'ANSI'\r\n }\r\n ],\r\n FileTypes: [\r\n {\r\n SortOrder: 1,\r\n Value: EnumFileImportTypes.Excel,\r\n Text: 'Excel'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumFileImportTypes.Csv,\r\n Text: 'CSV'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumFileImportTypes.Tab,\r\n Text: 'Tab'\r\n },\r\n {\r\n SortOrder: 4,\r\n Value: EnumFileImportTypes.FixedWidth,\r\n Text: 'מבנה ברוחב קבוע'\r\n },\r\n {\r\n SortOrder: 5,\r\n Value: EnumFileImportTypes.Custom,\r\n Text: 'מותאם אישית'\r\n },\r\n {\r\n SortOrder: 6,\r\n Value: EnumFileImportTypes.BAI2,\r\n Text: 'BAI2'\r\n }\r\n ],\r\n FileRowDelimiters: [\r\n {\r\n SortOrder: 1,\r\n Value: EnumFileImportRowDelimiters.VbCr,\r\n Text: '10'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumFileImportRowDelimiters.VbCrLf,\r\n Text: '13+10'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumFileImportRowDelimiters.VbLf,\r\n Text: '13'\r\n }\r\n ],\r\n FileRowsSortOrders: [\r\n {\r\n SortOrder: 1,\r\n Value: EnumFileImportRowsSortOrders.Ascending,\r\n Text: 'עולה'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumFileImportRowsSortOrders.Descending,\r\n Text: 'יורד'\r\n },\r\n ],\r\n OrganizationAccountMappingTypes: [\r\n {\r\n SortOrder: 1,\r\n Value: EnumFileImportAccountMappingTypes.ByBookingAccount,\r\n Text: 'לפי חשבון הנהלת חשבונות'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumFileImportAccountMappingTypes.ByAccountNumber,\r\n Text: 'לפי מספר חשבון'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumFileImportAccountMappingTypes.ByAccountAndCurrency,\r\n Text: 'לפי חשבון ומטבע'\r\n },\r\n {\r\n SortOrder: 4,\r\n Value: EnumFileImportAccountMappingTypes.FixedBookingAccount,\r\n Text: 'חשבון הנהלת חשבונות קבוע'\r\n },\r\n {\r\n SortOrder: 5,\r\n Value: EnumFileImportAccountMappingTypes.AskEveryTime,\r\n Text: 'תשאל לפני טעינת הקובץ'\r\n }\r\n ],\r\n AccountMappingTypes: [\r\n {\r\n SortOrder: 1,\r\n Value: EnumFileImportAccountMappingTypes.ByBookingAccount,\r\n Text: 'לפי חשבון הנהלת חשבונות'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumFileImportAccountMappingTypes.ByAccountNumber,\r\n Text: 'לפי מספר חשבון'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumFileImportAccountMappingTypes.ByAccountAndCurrency,\r\n Text: 'לפי חשבון ומטבע'\r\n },\r\n {\r\n SortOrder: 5,\r\n Value: EnumFileImportAccountMappingTypes.AskEveryTime,\r\n Text: 'תשאל לפני טעינת הקובץ'\r\n }\r\n ],\r\n FileColumns: [\r\n {\r\n SortOrder: 1,\r\n Value: EnumFileImportColumns.A,\r\n Text: 'A'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumFileImportColumns.B,\r\n Text: 'B'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumFileImportColumns.C,\r\n Text: 'C'\r\n },\r\n {\r\n SortOrder: 4,\r\n Value: EnumFileImportColumns.D,\r\n Text: 'D'\r\n },\r\n {\r\n SortOrder: 5,\r\n Value: EnumFileImportColumns.E,\r\n Text: 'E'\r\n },\r\n {\r\n SortOrder: 6,\r\n Value: EnumFileImportColumns.F,\r\n Text: 'F'\r\n },\r\n {\r\n SortOrder: 7,\r\n Value: EnumFileImportColumns.G,\r\n Text: 'G'\r\n },\r\n {\r\n SortOrder: 8,\r\n Value: EnumFileImportColumns.H,\r\n Text: 'H'\r\n },\r\n {\r\n SortOrder: 9,\r\n Value: EnumFileImportColumns.I,\r\n Text: 'I'\r\n },\r\n {\r\n SortOrder: 10,\r\n Value: EnumFileImportColumns.J,\r\n Text: 'J'\r\n },\r\n {\r\n SortOrder: 11,\r\n Value: EnumFileImportColumns.K,\r\n Text: 'K'\r\n },\r\n {\r\n SortOrder: 12,\r\n Value: EnumFileImportColumns.L,\r\n Text: 'L'\r\n },\r\n {\r\n SortOrder: 13,\r\n Value: EnumFileImportColumns.M,\r\n Text: 'M'\r\n },\r\n {\r\n SortOrder: 14,\r\n Value: EnumFileImportColumns.N,\r\n Text: 'N'\r\n },\r\n {\r\n SortOrder: 15,\r\n Value: EnumFileImportColumns.O,\r\n Text: 'O'\r\n },\r\n {\r\n SortOrder: 16,\r\n Value: EnumFileImportColumns.P,\r\n Text: 'P'\r\n },\r\n {\r\n SortOrder: 17,\r\n Value: EnumFileImportColumns.Q,\r\n Text: 'Q'\r\n },\r\n {\r\n SortOrder: 18,\r\n Value: EnumFileImportColumns.R,\r\n Text: 'R'\r\n },\r\n {\r\n SortOrder: 19,\r\n Value: EnumFileImportColumns.S,\r\n Text: 'S'\r\n },\r\n {\r\n SortOrder: 20,\r\n Value: EnumFileImportColumns.T,\r\n Text: 'T'\r\n },\r\n {\r\n SortOrder: 21,\r\n Value: EnumFileImportColumns.U,\r\n Text: 'U'\r\n },\r\n {\r\n SortOrder: 22,\r\n Value: EnumFileImportColumns.V,\r\n Text: 'V'\r\n },\r\n {\r\n SortOrder: 23,\r\n Value: EnumFileImportColumns.W,\r\n Text: 'W'\r\n },\r\n {\r\n SortOrder: 24,\r\n Value: EnumFileImportColumns.X,\r\n Text: 'X'\r\n },\r\n {\r\n SortOrder: 25,\r\n Value: EnumFileImportColumns.Y,\r\n Text: 'Y'\r\n },\r\n {\r\n SortOrder: 26,\r\n Value: EnumFileImportColumns.Z,\r\n Text: 'Z'\r\n }\r\n ],\r\n CurrencyDenominations: [\r\n {\r\n SortOrder: 1,\r\n Value: EnumFileImportCurrencyDenominations.Dollar,\r\n Text: 'סכומים בשקלים'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumFileImportCurrencyDenominations.Cent,\r\n Text: 'סכומים באגורות'\r\n }\r\n ],\r\n ExportTypes: [\r\n {\r\n index: 0,\r\n Text: 'מייל',\r\n Value: EnumExportType.InEmail\r\n },\r\n {\r\n index: 1,\r\n Text: 'קובץ אקסל',\r\n Value: EnumExportType.Excel\r\n },\r\n {\r\n index: 2,\r\n Text: 'אימייל וקובץ אקסל מצורף',\r\n Value: EnumExportType.Both\r\n },\r\n ],\r\n PositiveNegatives: [\r\n {\r\n index: 0,\r\n Text: 'יתרה חיובית',\r\n Value: EnumPositiveNegative.Positive\r\n },\r\n {\r\n index: 1,\r\n Text: 'יתרה שלילית',\r\n Value: EnumPositiveNegative.Negative\r\n },\r\n {\r\n index: 2,\r\n Text: 'שניהם',\r\n Value: EnumPositiveNegative.Both\r\n },\r\n {\r\n index: 3,\r\n Text: 'שניהם ללא יתרה באפס',\r\n Value: EnumPositiveNegative.BothWithoutZero\r\n },\r\n ],\r\n JournalEntrySources: [\r\n {\r\n SortOrder: 1,\r\n Value: EnumJournalEntrySources.TransactionAutoPosting,\r\n Text: 'תנועות דפי בנק'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumJournalEntrySources.Loans,\r\n Text: 'מודול הלוואות'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumJournalEntrySources.CC,\r\n Text: 'סליקת כרטיסי אשראי'\r\n },\r\n {\r\n SortOrder: 4,\r\n Value: EnumJournalEntrySources.CCAutoPosting,\r\n Text: 'מבוסס על תנועות כ.אשראי'\r\n }\r\n ],\r\n ActivityTypes: [\r\n {\r\n SortOrder: 1,\r\n Value: EnumAdminActivityRecordType.ViewOrganization,\r\n Text: 'גישה לארגון'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumAdminActivityRecordType.LoginImpersonation,\r\n Text: 'התחזות למשתמש אחר'\r\n }\r\n ],\r\n AdminAccessRequestStatuses: [\r\n {\r\n SortOrder: 1,\r\n Value: EnumAdminAccessRequestStatus.Requested,\r\n Text: 'בקשה ממתינה לאישור'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumAdminAccessRequestStatus.Approved,\r\n Text: 'בקשה אושרה'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumAdminAccessRequestStatus.Denied,\r\n Text: 'הבקשה נדחתה'\r\n },\r\n {\r\n SortOrder: 4,\r\n Value: EnumAdminAccessRequestStatus.Expired,\r\n Text: 'גישה פגה תוקף'\r\n },\r\n {\r\n SortOrder: 5,\r\n Value: EnumAdminAccessRequestStatus.Canceled,\r\n Text: 'מבוטל'\r\n }\r\n ],\r\n AdminAccessRequestDurationTypes: [\r\n {\r\n SortOrder: 1,\r\n Value: EnumAdminAccessRequestDurationType.Minutes30,\r\n Text: '30 דקות'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumAdminAccessRequestDurationType.Hours2,\r\n Text: 'שעתיים'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumAdminAccessRequestDurationType.Hours4,\r\n Text: '4 שעות'\r\n },\r\n {\r\n SortOrder: 4,\r\n Value: EnumAdminAccessRequestDurationType.Hours12,\r\n Text: '12 שעות'\r\n },\r\n {\r\n SortOrder: 5,\r\n Value: EnumAdminAccessRequestDurationType.Hours24,\r\n Text: '24 שעות'\r\n },\r\n {\r\n SortOrder: 6,\r\n Value: EnumAdminAccessRequestDurationType.Days7,\r\n Text: '7 ימים'\r\n },\r\n {\r\n SortOrder: 7,\r\n Value: EnumAdminAccessRequestDurationType.Days30,\r\n Text: '30 ימים'\r\n }\r\n ],\r\n TransactionCategoryTabs: [\r\n {\r\n index: 0,\r\n text: 'כללי סיווג',\r\n },\r\n {\r\n index: 1,\r\n text: 'תבנית לרישום תנועות',\r\n },\r\n ],\r\n ParentCategoryTabs: [\r\n {\r\n index: 0,\r\n text: 'קטגוריות תנועה',\r\n },\r\n {\r\n index: 1,\r\n text: 'קטגוריות תזרים',\r\n },\r\n {\r\n index: 2,\r\n text: 'קטגוריות תחזיות בנק',\r\n }\r\n ],\r\n CCContractTabs: [\r\n {\r\n index: 0,\r\n text: 'מיפוי חשבונות זיכוי',\r\n },\r\n {\r\n index: 1,\r\n text: 'מיפוי חשבונות לרישום חשבוניות',\r\n },\r\n ],\r\n JournalEntryStatuses: [\r\n {\r\n SortOrder: 1,\r\n Value: EnumJournalEntryStatuses.Draft,\r\n Text: 'טיוטה'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumJournalEntryStatuses.Exception,\r\n Text: 'שגיאה'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumJournalEntryStatuses.ExportedManually,\r\n Text: 'יצוא ידני'\r\n },\r\n {\r\n SortOrder: 4,\r\n Value: EnumJournalEntryStatuses.Posted,\r\n Text: 'נוצרה תנועה'\r\n },\r\n {\r\n SortOrder: 5,\r\n Value: EnumJournalEntryStatuses.PostedAndReconcilled,\r\n Text: 'נוצרה תנועה והתאמה'\r\n },\r\n {\r\n SortOrder: 6,\r\n Value: EnumJournalEntryStatuses.PostedInJournalVoucher,\r\n Text: 'נוצרה פקודת יומן'\r\n },\r\n {\r\n SortOrder: 7,\r\n Value: EnumJournalEntryStatuses.SkippedAlreadyReconcilled,\r\n Text: 'לא נוצרה כי כבר מותאמת'\r\n },\r\n ],\r\n BookingAccountSelectionMethods:\r\n [\r\n {\r\n SortOrder: 1,\r\n Value: EnumBookingAccountSelectionMethods.TextInput,\r\n Text: 'הקלדה ידנית'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumBookingAccountSelectionMethods.ListRecommend,\r\n Text: 'בחירה מתוך רשימה או הקלדה'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumBookingAccountSelectionMethods.ListValidate,\r\n Text: 'בחירה מרשימה סגורה'\r\n },\r\n ],\r\n BankPassTwoFactorMethods: [{\r\n SortOrder: 1,\r\n Value: EnumBankPassTwoFactorMethod.None,\r\n Text: 'מספר ראשי של Finsite'\r\n }, {\r\n SortOrder: 2,\r\n Value: EnumBankPassTwoFactorMethod.DedicatedPhone,\r\n Text: 'מספר טלפון וירטואלי (אתר סמסים)'\r\n }, {\r\n SortOrder: 3,\r\n Value: EnumBankPassTwoFactorMethod.CustomerManualEntry,\r\n Text: 'מחובר לטלפון הלקוח'\r\n }\r\n ],\r\n LoanPaymentInterestPrincipalType: [\r\n {\r\n Text: 'ריבית',\r\n Value: EnumLoanPaymentInterestPrincipalType.Interest\r\n },\r\n {\r\n Text: 'קרן',\r\n Value: EnumLoanPaymentInterestPrincipalType.Principal\r\n },\r\n {\r\n Text: 'ריבית וקרן',\r\n Value: EnumLoanPaymentInterestPrincipalType.InterestPrincipal\r\n },\r\n {\r\n Text: 'יתרה צוברת לקרן',\r\n Value: EnumLoanPaymentInterestPrincipalType.PrincipalAcumulation\r\n }\r\n ],\r\n FutureChequeStatuses:\r\n [\r\n {\r\n Value: EnumFutureChequeStatus.Deposited,\r\n Text: 'הופקד'\r\n },\r\n {\r\n Value: EnumFutureChequeStatus.Future,\r\n Text: 'לפרעון'\r\n }\r\n ],\r\n NotificationBalanceSummaryTypes:\r\n [\r\n {\r\n SortOrder: 1,\r\n Value: EnumNotificationBalanceSummaryType.Total,\r\n Text: 'סכום כולל'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumNotificationBalanceSummaryType.CurrentOnly,\r\n Text: 'עו\"ש בלבד'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumNotificationBalanceSummaryType.None,\r\n Text: 'ללא'\r\n },\r\n ],\r\n Days: [\r\n {\r\n SortOrder: 1,\r\n Text: 'יום ראשון',\r\n Value: 1\r\n },\r\n {\r\n SortOrder: 2,\r\n Text: 'יום שני',\r\n Value: 2\r\n },\r\n {\r\n SortOrder: 3,\r\n Text: 'יום שלישי',\r\n Value: 3\r\n },\r\n {\r\n SortOrder: 4,\r\n Text: 'יום רביעי',\r\n Value: 4\r\n },\r\n {\r\n SortOrder: 5,\r\n Text: 'יום חמישי',\r\n Value: 5\r\n },\r\n {\r\n SortOrder: 6,\r\n Text: 'יום שישי',\r\n Value: 6\r\n },\r\n ],\r\n WeekDays: [\r\n {\r\n SortOrder: 1,\r\n Text: 'יום ראשון',\r\n Value: 1\r\n },\r\n {\r\n SortOrder: 2,\r\n Text: 'יום שני',\r\n Value: 2\r\n },\r\n {\r\n SortOrder: 3,\r\n Text: 'יום שלישי',\r\n Value: 3\r\n },\r\n {\r\n SortOrder: 4,\r\n Text: 'יום רביעי',\r\n Value: 4\r\n },\r\n {\r\n SortOrder: 5,\r\n Text: 'יום חמישי',\r\n Value: 5\r\n },\r\n {\r\n SortOrder: 6,\r\n Text: 'יום שישי',\r\n Value: 6\r\n },\r\n {\r\n SortOrder: 7,\r\n Text: 'יום שבת',\r\n Value: 7\r\n }\r\n ],\r\n NotificationLanguages: [{\r\n SortOrder: 1,\r\n Value: EnumLanguage.Hebrew,\r\n Text: 'עברית'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumLanguage.English,\r\n Text: 'אנגלית'\r\n }],\r\n BookingAccountTypes: [{\r\n SortOrder: 1,\r\n Value: EnumPostingTemplateBookingAccountTypes.LedgerAccount,\r\n Text: 'חשבונות'\r\n }, {\r\n SortOrder: 2,\r\n Value: EnumPostingTemplateBookingAccountTypes.BusinessPartner,\r\n Text: 'כרטיסים'\r\n }],\r\n DateRelevance: [{\r\n SortOrder: 1,\r\n Value: EnumForecastDateRelevance.Past,\r\n Text: 'תנועות עבר'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumForecastDateRelevance.NotReconcilledAccounting,\r\n Text: 'תנועות עבר הנהח\"ש שטרם נפרעו/הותאמו'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumForecastDateRelevance.NotReconcilledForecast,\r\n Text: 'תנועות עבר ידניות שטרם נפרעו/הותאמו'\r\n },\r\n {\r\n SortOrder: 4,\r\n Value: EnumForecastDateRelevance.Future,\r\n Text: 'תנועות עתידיות'\r\n }],\r\n SystemSource: [{\r\n SortOrder: 1,\r\n Value: EnumForecastSystemSource.AccountingForecast,\r\n Text: 'תחזית הנהלת חשבונות'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumForecastSystemSource.CCExpense,\r\n Text: 'הוצאה'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumForecastSystemSource.CCIncome,\r\n Text: 'הכנסה'\r\n },\r\n {\r\n SortOrder: 4,\r\n Value: EnumForecastSystemSource.Deposits,\r\n Text: 'פקדונות'\r\n },\r\n {\r\n SortOrder: 5,\r\n Value: EnumForecastSystemSource.ForecastOperation,\r\n Text: 'תחזיות'\r\n },\r\n {\r\n SortOrder: 6,\r\n Value: EnumForecastSystemSource.Loans,\r\n Text: 'הלוואות'\r\n },\r\n {\r\n SortOrder: 7,\r\n Value: EnumForecastSystemSource.Transactions,\r\n Text: 'תנועות בנק'\r\n }],\r\n RecommendationPeriodTypes: [\r\n {\r\n SortOrder: 1,\r\n Value: EnumRecommendationPeriodType.Daily,\r\n Text: 'יומי'\r\n }, {\r\n SortOrder: 2,\r\n Value: EnumRecommendationPeriodType.Weekly,\r\n Text: 'שבועי'\r\n }, {\r\n SortOrder: 3,\r\n Value: EnumRecommendationPeriodType.BiWeekly,\r\n Text: 'דו-שבועי'\r\n },\r\n {\r\n SortOrder: 4,\r\n Value: EnumRecommendationPeriodType.Monthly,\r\n Text: 'חודשי'\r\n },\r\n {\r\n SortOrder: 5,\r\n Value: EnumRecommendationPeriodType.BiMonthly,\r\n Text: 'דו-חודשי'\r\n }, {\r\n SortOrder: 6,\r\n Value: EnumRecommendationPeriodType.Quarterly,\r\n Text: 'רבעוני'\r\n }, {\r\n SortOrder: 7,\r\n Value: EnumRecommendationPeriodType.Variable,\r\n Text: 'משתנה'\r\n }\r\n ],\r\n CashflowChartTabs: [\r\n {\r\n index: 0,\r\n value: 'income_expences',\r\n text: 'הוצאות והכנסות'\r\n }, {\r\n index: 1,\r\n value: 'balance_growth',\r\n text: 'התפתחות יתרה'\r\n }, {\r\n index: 2,\r\n value: 'forecast_operations',\r\n text: 'פירוט תחזיות'\r\n }\r\n ],\r\n FutureForecastGroupBy: [\r\n {\r\n SortOrder: 1,\r\n Text: 'קטגוריה',\r\n Value: EnumFutureForecastGroupBy.Category\r\n },\r\n {\r\n SortOrder: 2,\r\n Text: 'קטגוריות אב',\r\n Value: EnumFutureForecastGroupBy.ParentCategory\r\n },\r\n {\r\n SortOrder: 3,\r\n Text: 'מקור מידע',\r\n Value: EnumFutureForecastGroupBy.DataSource\r\n }\r\n ],\r\n GlobalDownloadStatuses: [\r\n {\r\n Text: 'חדש',\r\n Value: EnumDownloadRetryStatus.New\r\n },\r\n {\r\n Text: 'בוצע',\r\n Value: EnumDownloadRetryStatus.Done\r\n }\r\n ],\r\n GenerationJETypes: [\r\n {\r\n SortOrder: 1,\r\n Text: 'תנועות',\r\n Value: EnumGenerationTypeJournalEntry.TransactionsAutoPosting\r\n },\r\n {\r\n SortOrder: 2,\r\n Text: 'כרטיסי אשראי',\r\n Value: EnumGenerationTypeJournalEntry.CCAutoPosting\r\n }\r\n ],\r\n BillingContractsReportModules: [\r\n {\r\n Text: 'תנועות יומן',\r\n Value: EnumBillingContractsReportModule.JournalEntries\r\n },\r\n {\r\n Text: 'תזרים מזומנים',\r\n Value: EnumBillingContractsReportModule.Cashflow\r\n },\r\n {\r\n Text: 'הלוואות',\r\n Value: EnumBillingContractsReportModule.Loans\r\n },\r\n {\r\n Text: 'בסיס',\r\n Value: EnumBillingContractsReportModule.Base\r\n }\r\n ],\r\n TransactionViews: [\r\n {\r\n Text: 'תצוגה חודשית',\r\n Value: 0\r\n },\r\n {\r\n Text: 'תצוגה מפורטת',\r\n Value: 1\r\n }\r\n ],\r\n MobileDashboardTabs: [\r\n {\r\n index: 0,\r\n text: 'פירוט היתרה',\r\n Value: 'BalanceDetails'\r\n },\r\n {\r\n index: 1,\r\n text: 'ריכוז תנועות',\r\n Value: 'TransactionsByCategory'\r\n },\r\n {\r\n index: 2,\r\n text: 'נכסים',\r\n Value: 'Assets'\r\n },\r\n {\r\n index: 3,\r\n text: 'התחייבויות',\r\n Value: 'Liabilities'\r\n },\r\n {\r\n index: 4,\r\n text: 'פעולות אחרונות',\r\n Value: 'LastTransactions'\r\n }\r\n ],\r\n TransactionsGroupOptions: [\r\n {\r\n index: 0,\r\n text: 'זכות',\r\n Value: 'Credit'\r\n },\r\n {\r\n index: 1,\r\n text: 'חובה',\r\n Value: 'Debit'\r\n }\r\n ],\r\n BalanceDetailsSortTypes: [\r\n {\r\n Text: 'מיון לפי שם',\r\n Value: EnumBalanceDetailsSortType.SortByName\r\n },\r\n {\r\n Text: 'מיון לפי סכום',\r\n Value: EnumBalanceDetailsSortType.SortBySum\r\n }\r\n ],\r\n RelevantFilteringTypes: [\r\n {\r\n Text: 'אף אחד',\r\n Value: EnumRelevantFilteringTypes.None\r\n },\r\n {\r\n Text: 'חשבונות',\r\n Value: EnumRelevantFilteringTypes.Accounts\r\n },\r\n {\r\n Text: 'חברות',\r\n Value: EnumRelevantFilteringTypes.Companies\r\n }\r\n ],\r\n TransactionPeriodTypes:\r\n [\r\n {\r\n SortOrder: 1,\r\n Value: EnumPeriod.Day,\r\n Text: 'יום'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumPeriod.Month,\r\n Text: 'חודש'\r\n },\r\n\r\n ],\r\n IncomingPaymentStatuses: [\r\n {\r\n Text: 'לא נמצא כרטיס',\r\n Value: EnumIncomingPaymentStatus.MatchNone\r\n },\r\n {\r\n Text: 'נמצא כרטיס תואם',\r\n Value: EnumIncomingPaymentStatus.MatchBusinessPartner\r\n },\r\n {\r\n Text: 'התאמה מלאה',\r\n Value: EnumIncomingPaymentStatus.MatchFull\r\n },\r\n {\r\n Text: 'ממתין',\r\n Value: EnumIncomingPaymentStatus.Pending\r\n },\r\n {\r\n Text: 'נרשמה קבלה',\r\n Value: EnumIncomingPaymentStatus.Posted\r\n },\r\n {\r\n Text: 'לא רלוונטי',\r\n Value: EnumIncomingPaymentStatus.Irrelevant\r\n },\r\n {\r\n Text: 'שגיאה',\r\n Value: EnumIncomingPaymentStatus.Exception\r\n },\r\n {\r\n Text: 'נשמר',\r\n Value: EnumIncomingPaymentStatus.Saved\r\n },\r\n {\r\n Text: 'טיפול ידני',\r\n Value: EnumIncomingPaymentStatus.HandleManually\r\n },\r\n ],\r\n IncomingPaymentDocumentTypes: [\r\n {\r\n Text: 'מסמך',\r\n Value: EnumIncomingPaymentInvoiceLineTypes.Document\r\n },\r\n {\r\n Text: 'תנועת יומן',\r\n Value: EnumIncomingPaymentInvoiceLineTypes.AccountingJournalEntry\r\n }\r\n ],\r\n IncomingPaymentDocumentType: [\r\n {\r\n Text: 'חשבונית מס',\r\n Value: EnumIncomingPaymentDocumentType.Invoice\r\n },\r\n {\r\n Text: 'חשבונית זיכוי',\r\n Value: EnumIncomingPaymentDocumentType.Refund\r\n },\r\n {\r\n Text: 'תנועת יומן',\r\n Value: EnumIncomingPaymentDocumentType.JournalEntry\r\n }\r\n ],\r\n IncomingPaymentProcessingActions: [\r\n {\r\n Text: 'רישום קבלה',\r\n Value: IncomingPaymentActions.Post\r\n },\r\n {\r\n Text: 'טיפול ידני',\r\n Value: IncomingPaymentActions.HandleManually\r\n },\r\n {\r\n Text: 'שמירה',\r\n Value: IncomingPaymentActions.Save\r\n },\r\n {\r\n Text: 'דלג למסמך הבא',\r\n Value: IncomingPaymentActions.MoveToTheNext\r\n },\r\n {\r\n Text: 'סמן כלא רלוונטי',\r\n Value: IncomingPaymentActions.MarkAsIrrelevant\r\n }\r\n ],\r\n IncomingPaymentUploadLevel: [\r\n {\r\n Text: 'ללא',\r\n Value: EnumIncomingPaymentUploadLevel.None\r\n },\r\n {\r\n Text: 'תקבול',\r\n Value: EnumIncomingPaymentUploadLevel.IncomingPayment\r\n },\r\n {\r\n Text: 'תקבולים והתאמות',\r\n Value: EnumIncomingPaymentUploadLevel.IncomingPaymentAndReconcilliation\r\n },\r\n ],\r\n IncomingPaymentMarkIrrelevantAction: [\r\n {\r\n Text: 'סמן חד פעמי כלא רלוונטי',\r\n Value: 'SingleRecord'\r\n },\r\n {\r\n Text: 'שמירת כלל כלא רלוונטי',\r\n Value: 'Rule'\r\n }\r\n ],\r\n JournalExportTypes: [\r\n {\r\n Value: EnumJournalExportType.Automatic,\r\n Text: 'אוטומטי'\r\n },\r\n {\r\n Value: EnumJournalExportType.Movein1,\r\n Text: 'Movein Hash'\r\n },\r\n {\r\n Value: EnumJournalExportType.Movein2,\r\n Text: 'Movein Priority'\r\n }\r\n ],\r\n CashflowStaticCategories: [\r\n {\r\n SortOrder: 1,\r\n Value: EnumForecastSystemSource.CCExpense,\r\n Text: 'כ.אשראי הוצאות'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumForecastSystemSource.CCIncome,\r\n Text: 'כ.אשראי הכנסות'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumForecastSystemSource.Loans,\r\n Text: 'הלוואות'\r\n },\r\n {\r\n SortOrder: 4,\r\n Value: EnumForecastSystemSource.Deposits,\r\n Text: 'פקדונות'\r\n },\r\n {\r\n SortOrder: 5,\r\n Value: EnumForecastSystemSource.FutureCheques,\r\n Text: 'שיקים למשמרת'\r\n }],\r\n UploadTypes:\r\n [\r\n {\r\n SortOrder: 1,\r\n Value: EnumUploadType.New,\r\n Text: 'חדש'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumUploadType.Dates,\r\n Text: 'תאריכים'\r\n },\r\n ],\r\n SumSides:\r\n [\r\n {\r\n Value: EnumSumSide.Debit,\r\n Text: 'חובה'\r\n },\r\n {\r\n Value: EnumSumSide.Credit,\r\n Text: 'זכות'\r\n }\r\n ],\r\n LoanHandlingTypes:\r\n [\r\n {\r\n SortOrder: 1,\r\n Value: EnumLoanHandlingType.LoansModule,\r\n Text: 'Loans module'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumLoanHandlingType.BankInformation,\r\n Text: 'Banking information'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumLoanHandlingType.Combine,\r\n Text: 'Combine'\r\n }\r\n ],\r\n ExportSFTPGroupingModes: [\r\n {\r\n Value: EnumExportSFTPGroupingMode.Single,\r\n Text: 'קובץ אחד'\r\n },\r\n {\r\n Value: EnumExportSFTPGroupingMode.PerBookingAccount,\r\n Text: 'קובץ לכל חשבון הנהח'\r\n },\r\n {\r\n Value: EnumExportSFTPGroupingMode.PerAccountSubtype,\r\n Text: 'קובץ נפרד לעוש ולכרטיסי אשראי'\r\n },\r\n {\r\n Value: EnumExportSFTPGroupingMode.PerCompany,\r\n Text: 'קובץ נפרד לכל חברה'\r\n }\r\n ],\r\n CategoryClassificationFieldTypes: [\r\n {\r\n Value: EnumCategoryClassificationFieldType.Name,\r\n Text: 'שם',\r\n SortOrder: 1\r\n },\r\n {\r\n Value: EnumCategoryClassificationFieldType.Type,\r\n Text: 'סוג',\r\n SortOrder: 2\r\n },\r\n {\r\n Value: EnumCategoryClassificationFieldType.LinkageType,\r\n Text: 'סוג הצמדה',\r\n SortOrder: 3\r\n }\r\n ],\r\n BalanceTypes: [\r\n {\r\n Value: 'Actual',\r\n Text: 'עדכנית',\r\n SortOrder: 1\r\n },\r\n {\r\n Value: 'Nominal',\r\n Text: 'נומינלית',\r\n SortOrder: 2\r\n }\r\n ],\r\n BankPassAccessTypes:\r\n [\r\n {\r\n Text: 'באמצעות אתר הבנק',\r\n Value: EnumBankPassAccessTypes.Scrapping\r\n },\r\n {\r\n Text: 'קריאה מקובץ',\r\n Value: EnumBankPassAccessTypes.FileImport\r\n },\r\n // {\r\n // Text: 'בנקאות פתוחה',\r\n // Value: EnumBankPassAccessTypes.PSD\r\n // },\r\n {\r\n Text: 'Plaid',\r\n Value: EnumBankPassAccessTypes.Plaid\r\n }\r\n ],\r\n BankPassAutoDiscoverModes:\r\n [\r\n {\r\n Text: 'ללא',\r\n Value: EnumBankPassAutoDiscoverModes.None\r\n },\r\n {\r\n Text: 'בהפעלה יזומה',\r\n Value: EnumBankPassAutoDiscoverModes.OnDemand\r\n },\r\n {\r\n Text: 'אוטומטית',\r\n Value: EnumBankPassAutoDiscoverModes.Automatic\r\n }\r\n ],\r\n ExternalAccountMappingStatus:\r\n [\r\n {\r\n Text: 'Mapped',\r\n Value: EnumExternalAccountMappingStatus.Mapped\r\n },\r\n {\r\n Text: 'Mapped in another Bank Pass',\r\n Value: EnumExternalAccountMappingStatus.MappedInAnother\r\n },\r\n {\r\n Text: 'Not mapped',\r\n Value: EnumExternalAccountMappingStatus.NotMapped\r\n }\r\n ],\r\n ScheduleTypes:\r\n [\r\n {\r\n Text: 'יומי/שבועי',\r\n Value: EnumNotificationScheduleType.DailyWeekly\r\n },\r\n {\r\n Text: 'חודשי',\r\n Value: EnumNotificationScheduleType.Monthly\r\n },\r\n {\r\n Text: 'שנתי',\r\n Value: EnumNotificationScheduleType.Yearly\r\n }\r\n ],\r\n DeploymentTabs:\r\n [\r\n {\r\n index: 0,\r\n text: 'ראשי',\r\n Value: 'Main'\r\n },\r\n {\r\n index: 1,\r\n text: 'עו\"ש',\r\n Value: 'Current'\r\n },\r\n {\r\n index: 2,\r\n text: 'כרטיסי אשראי',\r\n Value: 'CC'\r\n }\r\n ],\r\n};","import {\r\n EnumDataExportType,\r\n EnumExportTransactionsMethod,\r\n EnumFinancialReportRangeType,\r\n EnumJournalEntryCurrencyTypes,\r\n EnumLedgerAccountType,\r\n EnumReplicationStatuses,\r\n EnumReplicationObjectTypes,\r\n EnumPaymentMeansTypes,\r\n EnumDocumentType,\r\n EnumUserAuthorizationType,\r\n EnumSide,\r\n EnumSource,\r\n EnumAccountingSoftwares,\r\n EnumBanks,\r\n EnumBookingAccountDepositTypes,\r\n EnumBookingAccountStockTypes,\r\n EnumBookingAccountSubtypes,\r\n EnumUserNotificationMethods,\r\n EnumDownloadStatuses,\r\n EnumDownloadTaskStatuses,\r\n EnumDownloadStepStatuses,\r\n EnumUploadStatuses,\r\n EnumBankGroups,\r\n EnumOrganizationChildEntityTypes,\r\n EnumDashboardGroupBy,\r\n EnumBankPassCredentialValidity,\r\n EnumClassificarionRuleFieldType,\r\n EnumClassificarionRuleMatchType,\r\n EnumCompanyChildEntityTypes,\r\n EnumBalanceHistoryReportMode,\r\n EnumSummaryLevel,\r\n EnumCashflowSummarizedAggregationLevel,\r\n EnumShowInCurrencyOptions,\r\n EnumNotificationTemplateSectionFields,\r\n EnumYesNo,\r\n EnumMatchingRelationship,\r\n EnumPeriodType,\r\n EnumIncreaseType,\r\n EnumBankTypes,\r\n Enums,\r\n EnumLoanStatus,\r\n EnumAmortizationType,\r\n EnumInterestType,\r\n EnumLoanSide,\r\n EnumLoanPaymentFrequencyType,\r\n EnumLoanInterestPeriodCalculationType,\r\n EnumVisibilitySetting,\r\n EnumCustomFieldsetFieldInputType,\r\n EnumExpenseStatus,\r\n EnumSecurityStatus,\r\n EnumSecurityType,\r\n EnumLoanPostPaymentRecalculationOptions,\r\n EnumFinancialReportDateType,\r\n EnumFinancialReportCurrencyType,\r\n EnumCCProcessingCompanies,\r\n EnumCCBrands,\r\n EnumApplyToBookingAccountsTypes,\r\n EnumCCInvoiceStatuses,\r\n EnumCCTransferStatuses,\r\n EnumNoteFieldTypes,\r\n EnumNoteMatchTypes,\r\n EnumNotesExportAdjustments,\r\n EnumAccountFullNameDisplayType,\r\n EnumFileImportEncodings,\r\n EnumFileImportTypes,\r\n EnumFileImportAccountMappingTypes,\r\n EnumFileImportColumns,\r\n EnumFileImportRowDelimiters,\r\n EnumFileImportCurrencyDenominations,\r\n EnumFileImportRowsSortOrders,\r\n EnumJournalEntryUploadLevel,\r\n EnumExportType,\r\n EnumJournalEntrySources,\r\n EnumAdminActivityRecordType,\r\n EnumAdminAccessRequestStatus,\r\n EnumAdminAccessRequestDurationType,\r\n EnumPositiveNegative,\r\n EnumJournalEntryStatuses,\r\n EnumBookingAccountSelectionMethods,\r\n EnumBankPassTwoFactorMethod,\r\n EnumFutureChequeStatus,\r\n EnumLoanPaymentInterestPrincipalType,\r\n EnumNotificationBalanceSummaryType,\r\n EnumForecastDateRelevance,\r\n EnumForecastSystemSource,\r\n EnumRecommendationPeriodType,\r\n EnumFutureForecastGroupBy,\r\n EnumLanguage,\r\n EnumGenerationTypeJournalEntry,\r\n EnumPostingTemplateBookingAccountTypes,\r\n EnumDownloadRetryStatus,\r\n EnumBillingContractsReportModule,\r\n EnumBalanceDetailsSortType,\r\n EnumRelevantFilteringTypes,\r\n EnumPeriod,\r\n EnumIncomingPaymentStatus,\r\n EnumIncomingPaymentInvoiceLineTypes,\r\n EnumIncomingPaymentUploadLevel,\r\n EnumIncomingPaymentDocumentType,\r\n EnumUploadType,\r\n EnumSumSide,\r\n EnumLoanHandlingType,\r\n EnumBankPassAccessTypes,\r\n EnumBankPassAutoDiscoverModes,\r\n EnumNotificationScheduleType,\r\n} from '../_proxy/enums';\r\n\r\nimport { Globals } from '../_globals';\r\nimport { EnumLanguages } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { EnumShareWith } from '../dialogs/share-information-dialog/share-information-dialog.component';\r\nimport { EnumPredefinedNotificationTemplates } from '../pages/notification-template/list/notification-template-list.component';\r\nimport { IncomingPaymentActions } from '@kraken/_client.enums';\r\nimport { EnumCategoryClassificationFieldType, EnumExportSFTPGroupingMode, EnumExternalAccountMappingStatus, EnumJournalExportType } from '../../../../../Kraken/Angular/ClientApp/_proxy/enums';\r\n\r\nexport const Lists_ES =\r\n{\r\n Properties: {\r\n Language: EnumLanguages.Spanish\r\n },\r\n AccountingSoftwares:\r\n [\r\n {\r\n Value: EnumAccountingSoftwares.Hashavshevet,\r\n Text: 'Hashavshevet',\r\n SortOrder: 1\r\n },\r\n {\r\n Value: EnumAccountingSoftwares.Priority,\r\n Text: 'Priority',\r\n SortOrder: 2\r\n },\r\n {\r\n Value: EnumAccountingSoftwares.SBO,\r\n Text: 'SAP Business One',\r\n SortOrder: 3\r\n },\r\n {\r\n Value: EnumAccountingSoftwares.Standalone,\r\n Text: 'Standalone',\r\n SortOrder: 4\r\n },\r\n {\r\n Value: EnumAccountingSoftwares.SAPByDesign,\r\n Text: 'SAP By Design',\r\n SortOrder: 5\r\n },\r\n {\r\n Value: EnumAccountingSoftwares.NetSuite,\r\n Text: 'NetSuite',\r\n SortOrder: 6\r\n },\r\n {\r\n Value: EnumAccountingSoftwares.WizCloud,\r\n Text: 'WizCloud',\r\n SortOrder: 7\r\n },\r\n {\r\n Value: EnumAccountingSoftwares.Ardani,\r\n Text: 'Ardani',\r\n SortOrder: 8\r\n },\r\n {\r\n Value: EnumAccountingSoftwares.Rivhit,\r\n Text: 'Rivhit 12',\r\n SortOrder: 9\r\n },\r\n {\r\n Value: EnumAccountingSoftwares.Rivhit8,\r\n Text: 'Rivhit 8',\r\n SortOrder: 10\r\n },\r\n {\r\n Value: EnumAccountingSoftwares.Comax,\r\n Text: 'Comax',\r\n SortOrder: 11\r\n },\r\n {\r\n Value: EnumAccountingSoftwares.Intentia,\r\n Text: 'Intentia',\r\n SortOrder: 12\r\n },\r\n {\r\n Value: EnumAccountingSoftwares.Unknown,\r\n Text: 'Desconocido',\r\n SortOrder: 13\r\n }\r\n ],\r\n Banks:\r\n [\r\n {\r\n Value: EnumBanks.Yahav,\r\n Text: '4 - Yahav',\r\n TextShort: 'Yahav',\r\n BankCode: 4,\r\n Color: '#0097F0',\r\n Icon: '$$$'\r\n },\r\n {\r\n Value: EnumBanks.Leumi,\r\n Text: '10 - Leumi',\r\n TextShort: 'Leumi',\r\n BankCode: 10,\r\n Color: '#0097F0',\r\n Icon: 'leumi.png'\r\n },\r\n {\r\n Value: EnumBanks.Discount,\r\n Text: '11 - Discount',\r\n TextShort: 'Discount',\r\n BankCode: 11,\r\n Color: '#008E90',\r\n Icon: 'discount.png'\r\n },\r\n {\r\n Value: EnumBanks.Poalim,\r\n Text: '12 - Poalim',\r\n TextShort: 'Poalim',\r\n BankCode: 12,\r\n Color: '#E84545',\r\n Icon: 'poalim.png'\r\n },\r\n {\r\n Value: EnumBanks.Egud,\r\n Text: '13 - Egud',\r\n TextShort: 'Egud',\r\n BankCode: 13,\r\n Color: '#7888E5',\r\n Icon: 'egud.png'\r\n },\r\n {\r\n Value: EnumBanks.OtsarHaHayal,\r\n Text: '14 - Otsar HaHayal',\r\n TextShort: 'Otsar HaHayal',\r\n BankCode: 14,\r\n Color: '#2E75B5',\r\n Icon: 'benleumi.png'\r\n },\r\n {\r\n Value: EnumBanks.Merkantil,\r\n Text: '17 - Merkantil',\r\n TextShort: 'Merkantil',\r\n BankCode: 17,\r\n Color: '#0FBE7B',\r\n Icon: 'merkantil.png'\r\n },\r\n {\r\n Value: EnumBanks.Mizrahi,\r\n Text: '20 - Mizrahi',\r\n TextShort: 'Mizrahi',\r\n BankCode: 20,\r\n Color: '#FF8F5F',\r\n Icon: 'mizrahi.png'\r\n },\r\n {\r\n Value: EnumBanks.CityBank,\r\n Text: '22 - CityBank',\r\n TextShort: 'CityBank',\r\n BankCode: 22,\r\n Color: '#017EC8'\r\n },\r\n {\r\n Value: EnumBanks.HSBC,\r\n Text: '23 - HSBC',\r\n TextShort: 'HSBC',\r\n BankCode: 23,\r\n Color: '#017EC8'\r\n },\r\n {\r\n Value: EnumBanks.Ubank,\r\n Text: '26 - Ubank',\r\n TextShort: 'Ubank',\r\n BankCode: 26,\r\n Color: '#CC9B00'\r\n },\r\n {\r\n Value: EnumBanks.BenLeumi,\r\n Text: '31 - BenLeumi',\r\n TextShort: 'BenLeumi',\r\n BankCode: 31,\r\n Color: '#2B2E4A',\r\n Icon: 'benleumi.png'\r\n },\r\n {\r\n Value: EnumBanks.Masad,\r\n Text: '46 - Masad',\r\n TextShort: 'Masad',\r\n BankCode: 46,\r\n Color: '#E7B200',\r\n Icon: 'masad.png'\r\n },\r\n {\r\n Value: EnumBanks.Pagi,\r\n Text: '52 - Pagi',\r\n TextShort: 'Pagi',\r\n BankCode: 52,\r\n Color: '#575757'\r\n },\r\n {\r\n Value: EnumBanks.Doar,\r\n Text: '9 - Doar',\r\n TextShort: 'Doar',\r\n BankCode: 9,\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.Jerusalem,\r\n Text: '54 - Jerusalem',\r\n TextShort: 'Jerusalem',\r\n BankCode: 54,\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.Isracard,\r\n Text: 'Isracard',\r\n TextShort: 'Isracard',\r\n Color: '#111111',\r\n Icon: 'cc-brand-isracard.svg'\r\n },\r\n {\r\n Value: EnumBanks.VisaCal,\r\n Text: 'VisaCal',\r\n TextShort: 'VisaCal',\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.LeumiMax,\r\n Text: 'LeumiMax',\r\n TextShort: 'LeumiMax',\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.Amex,\r\n Text: 'Amex',\r\n TextShort: 'Amex',\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.ForeignPlaceholder1,\r\n Text: 'ForeignPlaceholder1',\r\n TextShort: 'ForeignPlaceholder1',\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.ForeignPlaceholder2,\r\n Text: 'ForeignPlaceholder2',\r\n TextShort: 'ForeignPlaceholder2',\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.ForeignPlaceholder3,\r\n Text: 'ForeignPlaceholder3',\r\n TextShort: 'ForeignPlaceholder3',\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.ExternalLoanerMisc,\r\n Text: 'Misc',\r\n TextShort: 'Misc',\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.ExternalLoanerVisa,\r\n Text: 'Visa - Préstamos',\r\n TextShort: 'Visa - Loans',\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.ExternalLoanerIsracard,\r\n Text: 'Isracard - Préstamos',\r\n TextShort: 'Isracard - Loans',\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.ExternalLoanerLeumiMax,\r\n Text: 'LeumiMax - Préstamos',\r\n TextShort: 'LeumiMax - Loans',\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.ExternalLoanerMimunYashir,\r\n Text: 'MimunYashir',\r\n TextShort: 'MimunYashir',\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.ExternalLoanerHarel,\r\n Text: 'Harel',\r\n TextShort: 'Harel',\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.ExternalLoanerMigdal,\r\n Text: 'Migdal',\r\n TextShort: 'Migdal',\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.ExternalLoanerAltshuler,\r\n Text: 'Altshuler',\r\n TextShort: 'Altshuler',\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.ExternalLoanerFenix,\r\n Text: 'Fenix',\r\n TextShort: 'Fenix',\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.ExternalLoanerMeitav,\r\n Text: 'Meitav',\r\n TextShort: 'Meitav',\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.CCIsracard,\r\n Text: 'Procesamiento de Isracard',\r\n TextShort: 'Isracard Processing',\r\n Color: '#111111',\r\n Icon: 'cc-brand-isracard.svg'\r\n },\r\n {\r\n Value: EnumBanks.CCVisaCal,\r\n Text: ' VisaProcessing',\r\n TextShort: 'Visa Processing',\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.CCLeumiMax,\r\n Text: 'LeumiMax Processing' ,\r\n TextShort: 'LeumiMax Processing',\r\n Color: '#111111'\r\n },\r\n {\r\n Value: EnumBanks.Plaid,\r\n Text: 'Plaid' ,\r\n TextShort: 'Plaid',\r\n Color: '#111111'\r\n },\r\n ],\r\n DepositTypes:\r\n [\r\n {\r\n Value: EnumBookingAccountDepositTypes.All,\r\n Text: 'Todos'\r\n },\r\n {\r\n Value: EnumBookingAccountDepositTypes.Daily,\r\n Text: 'Diariamente'\r\n },\r\n {\r\n Value: EnumBookingAccountDepositTypes.Regular,\r\n Text: 'Regular'\r\n }\r\n ],\r\n StockTypes:\r\n [\r\n {\r\n Value: EnumBookingAccountStockTypes.All,\r\n Text: 'Todos'\r\n },\r\n {\r\n Value: EnumBookingAccountStockTypes.Commodities,\r\n Text: 'Commodities'\r\n },\r\n {\r\n Value: EnumBookingAccountStockTypes.CorporateBonds,\r\n Text: 'CorporateBonds'\r\n },\r\n {\r\n Value: EnumBookingAccountStockTypes.ETFs,\r\n Text: 'ETFs'\r\n },\r\n {\r\n Value: EnumBookingAccountStockTypes.GovermentBonds,\r\n Text: 'GovermentBonds'\r\n },\r\n {\r\n Value: EnumBookingAccountStockTypes.GovermentBondsMakam,\r\n Text: 'GovermentBondsMakam'\r\n },\r\n {\r\n Value: EnumBookingAccountStockTypes.Other,\r\n Text: 'Other'\r\n },\r\n {\r\n Value: EnumBookingAccountStockTypes.Stocks,\r\n Text: 'Stocks'\r\n },\r\n {\r\n Value: EnumBookingAccountStockTypes.TrustFunds,\r\n Text: 'TrustFunds'\r\n }\r\n ],\r\n Currencies:\r\n [\r\n {\r\n Value: 'ILS',\r\n Text: 'Shekel israelí',\r\n Symbol: '₪',\r\n SortOrder: 0\r\n },\r\n {\r\n Value: 'USD',\r\n Text: 'Dólar',\r\n Symbol: '$',\r\n SortOrder: 1\r\n },\r\n {\r\n Value: 'EUR',\r\n Text: 'Euro',\r\n Symbol: '€',\r\n SortOrder: 2\r\n },\r\n {\r\n Value: 'GBP',\r\n Text: 'Libra esterlina',\r\n Symbol: '£',\r\n SortOrder: 3\r\n },\r\n {\r\n Value: 'AUD',\r\n Text: 'Dólar australiano',\r\n Symbol: 'A$',\r\n SortOrder: 4\r\n },\r\n {\r\n Value: 'CAD',\r\n Text: 'Dólar canadiense',\r\n Symbol: 'C$',\r\n SortOrder: 5\r\n },\r\n {\r\n Value: 'CHF',\r\n Text: 'Franco suizo',\r\n Symbol: 'CHF',\r\n SortOrder: 6\r\n },\r\n {\r\n Value: 'DKK',\r\n Text: 'Corona danesa',\r\n Symbol: 'kr',\r\n SortOrder: 7\r\n },\r\n {\r\n Value: 'EGP',\r\n Text: 'Libra egipcia',\r\n Symbol: 'E£',\r\n SortOrder: 8\r\n },\r\n {\r\n Value: 'JOD',\r\n Text: 'Lira jordana',\r\n Symbol: 'JD',\r\n SortOrder: 9\r\n },\r\n {\r\n Value: 'LBP',\r\n Text: 'Libra libanesa',\r\n Symbol: 'LL',\r\n SortOrder: 10\r\n },\r\n {\r\n Value: 'NOK',\r\n Text: 'Corona noruega',\r\n Symbol: 'kr',\r\n SortOrder: 11\r\n },\r\n {\r\n Value: 'SEK',\r\n Text: 'Corona sueca',\r\n Symbol: 'kr',\r\n SortOrder: 12\r\n },\r\n {\r\n Value: 'RUB',\r\n Text: 'Rublo',\r\n Symbol: '₽',\r\n SortOrder: 13\r\n },\r\n {\r\n Value: 'HKD',\r\n Text: 'Dólar de Hong-Kong',\r\n Symbol: 'HK$',\r\n SortOrder: 14\r\n },\r\n {\r\n Value: 'ZAR',\r\n Text: 'Rand sudafricano',\r\n Symbol: 'R',\r\n SortOrder: 15\r\n },\r\n {\r\n Value: 'JPY',\r\n Text: 'Yen japonés',\r\n Symbol: '¥',\r\n SortOrder: 16\r\n },\r\n {\r\n Value: 'SGD',\r\n Text: 'Dólar de Singapur',\r\n Symbol: 'S$',\r\n SortOrder: 17\r\n },\r\n {\r\n Value: 'CNH',\r\n Text: 'Yuan chino',\r\n Symbol: '¥',\r\n SortOrder: 18\r\n },\r\n {\r\n Value: 'NZD',\r\n Text: 'Dólar neozelandés',\r\n Symbol: 'NZ$',\r\n SortOrder: 19\r\n },\r\n {\r\n Value: 'PLN',\r\n Text: 'Złoty polaco',\r\n Symbol: 'zł',\r\n SortOrder: 20\r\n },\r\n {\r\n Value: 'THB',\r\n Text: 'Baht tailandés',\r\n Symbol: '฿',\r\n SortOrder: 21\r\n },\r\n {\r\n Value: 'HUF',\r\n Text: 'Florín húngaro',\r\n Symbol: 'Ft',\r\n SortOrder: 22\r\n },\r\n {\r\n Value: 'CZK',\r\n Text: 'Corona checa',\r\n Symbol: 'Kč',\r\n SortOrder: 23\r\n },\r\n {\r\n Value: 'AED',\r\n Text: 'Dirham',\r\n Symbol: 'د.إ',\r\n SortOrder: 24\r\n },\r\n {\r\n Value: 'RON',\r\n Text: 'Leu rumano',\r\n Symbol: 'lei',\r\n SortOrder: 25\r\n },\r\n {\r\n Value: 'GEL',\r\n Text: 'Lari georgiano',\r\n Symbol: '₾',\r\n SortOrder: 26\r\n }\r\n ],\r\n BookingAccountSubTypes:\r\n [\r\n {\r\n Value: EnumBookingAccountSubtypes.Current,\r\n text: 'Corriente',\r\n Text: 'Corriente',\r\n SortOrder: 0,\r\n Color: Globals.DashboardPalette[0]\r\n },\r\n {\r\n Value: EnumBookingAccountSubtypes.CreditCard,\r\n text: 'Tarjetas de crédito',\r\n Text: 'Tarjetas de crédito',\r\n SortOrder: 1,\r\n Color: Globals.DashboardPalette[4]\r\n },\r\n {\r\n Value: EnumBookingAccountSubtypes.Deposits,\r\n text: 'Depósitos',\r\n Text: 'Depósitos',\r\n SortOrder: 2,\r\n Color: Globals.DashboardPalette[1]\r\n },\r\n {\r\n Value: EnumBookingAccountSubtypes.Stocks,\r\n text: 'Acciones',\r\n Text: 'Acciones',\r\n SortOrder: 3,\r\n Color: Globals.DashboardPalette[2]\r\n },\r\n {\r\n Value: EnumBookingAccountSubtypes.Loans,\r\n text: 'Préstamos',\r\n Text: 'Préstamos',\r\n SortOrder: 4,\r\n Color: Globals.DashboardPalette[3]\r\n },\r\n {\r\n Value: EnumBookingAccountSubtypes.Guarantee,\r\n text: 'Garantías',\r\n Text: 'Garantías',\r\n SortOrder: 5,\r\n Color: Globals.DashboardPalette[5]\r\n }\r\n ],\r\n OrganizationTabs:\r\n [\r\n {\r\n index: 0,\r\n text: 'Empresas',\r\n Type: EnumOrganizationChildEntityTypes.Company,\r\n Name: 'CompanyTab'\r\n },\r\n {\r\n index: 1,\r\n text: 'Credenciales de acceso al banco',\r\n Type: EnumOrganizationChildEntityTypes.BankPass,\r\n Name: 'BankAccessCredentialTab'\r\n },\r\n {\r\n index: 2,\r\n text: 'Cuentas',\r\n Type: EnumOrganizationChildEntityTypes.Account,\r\n Name: 'AccountTab'\r\n },\r\n {\r\n index: 3,\r\n text: 'Usuarios',\r\n Type: EnumOrganizationChildEntityTypes.User,\r\n Name: 'UserTab'\r\n },\r\n {\r\n index: 4,\r\n text: 'Despliegues',\r\n Type: EnumOrganizationChildEntityTypes.Deployment,\r\n Name: 'DeploymentTab'\r\n },\r\n {\r\n index: 5,\r\n text: 'Claves API externas',\r\n Name: 'ExternalApiKeyTab',\r\n Type: EnumOrganizationChildEntityTypes.ExternalAPIKey,\r\n },\r\n {\r\n index: 6,\r\n text: 'Contratos de facturación',\r\n Type: EnumOrganizationChildEntityTypes.BillingContract,\r\n Name: 'BillingContractTab'\r\n },\r\n {\r\n index: 7,\r\n text: 'Grupos de cuentas',\r\n Type: EnumOrganizationChildEntityTypes.AccountGroup,\r\n Name: 'AccountGroupTab'\r\n },\r\n {\r\n index: 8,\r\n text: 'Plantillas de notificación',\r\n Type: EnumOrganizationChildEntityTypes.NotificationTemplate,\r\n Name: 'NotificationTemplateTab'\r\n },\r\n {\r\n index: 9,\r\n text: 'Plantillas de alerta',\r\n Type: EnumOrganizationChildEntityTypes.AlertTemplate,\r\n Name: 'AlertTemplateTab'\r\n },\r\n {\r\n index: 10,\r\n text: 'Plantillas de importación de archivos',\r\n Type: EnumOrganizationChildEntityTypes.FileImportTemplate,\r\n Name: 'FileImportTemplatesTab'\r\n },\r\n {\r\n index: 11,\r\n text: 'Escenarios',\r\n Type: EnumOrganizationChildEntityTypes.Scenario,\r\n Name: 'ScenarioTab'\r\n },\r\n {\r\n index: 12,\r\n text: 'Niveles de probabilidad',\r\n Type: EnumOrganizationChildEntityTypes.ProbabilityLevel,\r\n Name: 'ProbabilityLevelTab'\r\n },\r\n {\r\n index: 13,\r\n text: 'Categorías de depósitos',\r\n Type: EnumOrganizationChildEntityTypes.DepositCategory,\r\n Name: 'DepositCategoriesTab'\r\n },\r\n {\r\n index: 14,\r\n text: 'Reglas de clasificación de depósitos',\r\n Type: EnumOrganizationChildEntityTypes.DepositClassificationRule,\r\n Name: 'DepositClassificationRulesTab'\r\n },\r\n {\r\n index: 15,\r\n text: 'Categorías de préstamos',\r\n Type: EnumOrganizationChildEntityTypes.LoanCategory,\r\n Name: 'LoanCategoriesTab'\r\n },\r\n {\r\n index: 16,\r\n text: 'Reglas de clasificación de préstamos',\r\n Type: EnumOrganizationChildEntityTypes.LoanClassificationRule,\r\n Name: 'LoanClassificationRulesTab'\r\n },\r\n {\r\n index: 17,\r\n text: 'Categorías de acciones',\r\n Type: EnumOrganizationChildEntityTypes.StockCategory,\r\n Name: 'StockCategoriesTab'\r\n },\r\n {\r\n index: 18,\r\n text: 'Reglas de clasificación de las acciones',\r\n Type: EnumOrganizationChildEntityTypes.StockClassificationRule,\r\n Name: 'StockClassificationRulesTab'\r\n },\r\n {\r\n index: 19,\r\n text: 'Categorías de garantías',\r\n Type: EnumOrganizationChildEntityTypes.GuaranteeCategory,\r\n Name: 'GuaranteeCategoriesTab'\r\n },\r\n {\r\n index: 20,\r\n text: 'Reglas de clasificación de garantías',\r\n Type: EnumOrganizationChildEntityTypes.GuaratneeClassificationRule,\r\n Name: 'GuaranteeClassificationRulesTab'\r\n },\r\n {\r\n index: 21,\r\n text: 'Ajustes de administrador',\r\n Name: 'AdminSettingsTab'\r\n }\r\n ],\r\n\r\n\r\n OrganizationGroupingTabs: [\r\n {\r\n name: 'Finance',\r\n text: 'Finanzas',\r\n tabs: [{\r\n index: 0,\r\n badge: null,\r\n text: 'Empresas',\r\n Type: EnumOrganizationChildEntityTypes.Company,\r\n Name: 'CompanyTab'},\r\n {\r\n index: 1,\r\n badge: null,\r\n text: 'Credenciales de acceso al banco',\r\n Type: EnumOrganizationChildEntityTypes.BankPass,\r\n Name: 'BankAccessCredentialTab'\r\n },\r\n {\r\n index: 2,\r\n badge: null,\r\n text: 'Cuentas',\r\n Type: EnumOrganizationChildEntityTypes.Account,\r\n Name: 'AccountTab'\r\n },\r\n {\r\n index: 7,\r\n badge: null,\r\n text: 'Grupos de cuentas',\r\n Type: EnumOrganizationChildEntityTypes.AccountGroup,\r\n Name: 'AccountGroupTab'\r\n },\r\n ]\r\n },\r\n {\r\n name: 'Authentication',\r\n text: 'Autentificación',\r\n tabs: [\r\n {\r\n index: 3,\r\n badge: null,\r\n text: 'Usuarios',\r\n Type: EnumOrganizationChildEntityTypes.User,\r\n Name: 'UserTab'\r\n },\r\n {\r\n index: 5,\r\n badge: null,\r\n text: 'Claves API externas',\r\n Name: 'ExternalApiKeyTab',\r\n Type: EnumOrganizationChildEntityTypes.ExternalAPIKey,\r\n },\r\n ]\r\n },\r\n {\r\n name: 'Notifications',\r\n text: 'Notificaciones',\r\n tabs: [\r\n {\r\n index: 8,\r\n badge: null,\r\n text: 'Plantillas de notificación',\r\n Type: EnumOrganizationChildEntityTypes.NotificationTemplate,\r\n Name: 'NotificationTemplateTab'\r\n },\r\n {\r\n index: 9,\r\n badge: null,\r\n text: 'Plantillas de alerta',\r\n Type: EnumOrganizationChildEntityTypes.AlertTemplate,\r\n Name: 'AlertTemplateTab'\r\n },\r\n ]\r\n },\r\n {\r\n name: 'Import & Export',\r\n text: 'Importación y exportación',\r\n tabs: [\r\n {\r\n index: 4,\r\n badge: null,\r\n text: 'Despliegues',\r\n Type: EnumOrganizationChildEntityTypes.Deployment,\r\n Name: 'DeploymentTab'\r\n },\r\n {\r\n index: 10,\r\n badge: null,\r\n text: 'Plantillas de importación de archivos',\r\n Type: EnumOrganizationChildEntityTypes.FileImportTemplate,\r\n Name: 'FileImportTemplatesTab'\r\n },\r\n ]\r\n },\r\n {\r\n name: 'Cashflow',\r\n text: 'Flujo de caja',\r\n tabs: [\r\n {\r\n index: 11,\r\n badge: null,\r\n text: 'Escenarios',\r\n Type: EnumOrganizationChildEntityTypes.Scenario,\r\n Name: 'ScenarioTab'\r\n },\r\n {\r\n index: 12,\r\n badge: null,\r\n text: 'Niveles de probabilidad',\r\n Type: EnumOrganizationChildEntityTypes.ProbabilityLevel,\r\n Name: 'ProbabilityLevelTab'\r\n },\r\n ]\r\n },\r\n {\r\n name: 'Data Categorization',\r\n text: 'Categorización de datos',\r\n tabs: [\r\n {\r\n index: 13,\r\n badge: null,\r\n text: 'Categorías de depósitos',\r\n Type: EnumOrganizationChildEntityTypes.DepositCategory,\r\n Name: 'DepositCategoriesTab'\r\n },\r\n {\r\n index: 14,\r\n badge: null,\r\n text: 'Reglas de clasificación de depósitos',\r\n Type: EnumOrganizationChildEntityTypes.DepositClassificationRule,\r\n Name: 'DepositClassificationRulesTab'\r\n },\r\n {\r\n index: 15,\r\n badge: null,\r\n text: 'Categorías de préstamos',\r\n Type: EnumOrganizationChildEntityTypes.LoanCategory,\r\n Name: 'LoanCategoriesTab'\r\n },\r\n {\r\n index: 16,\r\n badge: null,\r\n text: 'Reglas de clasificación de préstamos',\r\n Type: EnumOrganizationChildEntityTypes.LoanClassificationRule,\r\n Name: 'LoanClassificationRulesTab'\r\n },\r\n {\r\n index: 17,\r\n badge: null,\r\n text: 'Categorías de acciones',\r\n Type: EnumOrganizationChildEntityTypes.StockCategory,\r\n Name: 'StockCategoriesTab'\r\n },\r\n {\r\n index: 18,\r\n badge: null,\r\n text: 'Reglas de clasificación de acciones',\r\n Type: EnumOrganizationChildEntityTypes.StockClassificationRule,\r\n Name: 'StockClassificationRulesTab'\r\n },\r\n {\r\n index: 19,\r\n badge: null,\r\n text: 'Categorías de garantías',\r\n Type: EnumOrganizationChildEntityTypes.GuaranteeCategory,\r\n Name: 'GuaranteeCategoriesTab'\r\n },\r\n {\r\n index: 20,\r\n badge: null,\r\n text: 'Reglas de clasificación de garantías',\r\n Type: EnumOrganizationChildEntityTypes.GuaratneeClassificationRule,\r\n Name: 'GuaranteeClassificationRulesTab'\r\n },\r\n ]\r\n },\r\n {\r\n name: 'Administrador',\r\n text: 'Admin ',\r\n tabs: [\r\n {\r\n index: 21,\r\n badge: null,\r\n text: 'Ajustes del administrador',\r\n Type: null,\r\n Name: 'AdminSettingsTab'\r\n },\r\n {\r\n index: 6,\r\n badge: null,\r\n text: 'Contratos de facturación',\r\n Type: EnumOrganizationChildEntityTypes.BillingContract,\r\n Name: 'BillingContractTab'\r\n },\r\n ]\r\n },\r\n ],\r\n\r\n\r\n DashboardTabs: [\r\n {\r\n index: 0,\r\n text: 'Datos'\r\n },\r\n {\r\n index: 1,\r\n text: 'Gráfica'\r\n }\r\n ],\r\n RecurringForecastTabs: [\r\n {\r\n index: 0,\r\n text: 'Previsión de operaciones'\r\n },\r\n {\r\n index: 1,\r\n text: 'Previsión recurrente'\r\n },\r\n {\r\n index: 2,\r\n text: 'Previsiones contables'\r\n }\r\n ],\r\n UserNotificationMethods:\r\n [\r\n {\r\n Value: EnumUserNotificationMethods.Email,\r\n Text: 'Correo electrónico'\r\n },\r\n {\r\n Value: EnumUserNotificationMethods.Phone,\r\n Text: 'Mensaje SMS'\r\n },\r\n {\r\n Value: EnumUserNotificationMethods.None,\r\n Text: 'Ninguno'\r\n }\r\n ],\r\n BankPassProblemNotificationMethods:\r\n [\r\n {\r\n Value: EnumUserNotificationMethods.Email,\r\n Text: 'Correo electrónico'\r\n },\r\n {\r\n Value: EnumUserNotificationMethods.Phone,\r\n Text: 'Mensaje SMS'\r\n },\r\n {\r\n Value: EnumUserNotificationMethods.None,\r\n Text: 'Ninguno'\r\n },\r\n {\r\n Value: EnumUserNotificationMethods.EmailAndPhone,\r\n Text: 'Correo electrónico y mensaje SMS'\r\n }\r\n ],\r\n DownloadStatuses:\r\n [\r\n {\r\n Value: EnumDownloadStatuses.Pending,\r\n Text: 'Pendiente'\r\n },\r\n {\r\n Value: EnumDownloadStatuses.NoData,\r\n Text: 'Sin datos'\r\n },\r\n {\r\n Value: EnumDownloadStatuses.Failure,\r\n Text: 'Fallo'\r\n },\r\n {\r\n Value: EnumDownloadStatuses.Success,\r\n Text: 'Éxito'\r\n },\r\n {\r\n Value: EnumDownloadStatuses.BrowserStartFailure,\r\n Text: 'Fallo en el inicio del navegador'\r\n },\r\n {\r\n Value: EnumDownloadStatuses.LoginFailure,\r\n Text: 'Fallo al iniciar sesión'\r\n }\r\n ],\r\n DownloadTaskStatuses:\r\n [\r\n {\r\n Value: EnumDownloadTaskStatuses.Pending,\r\n Text: 'Pendiente'\r\n },\r\n {\r\n Value: EnumDownloadTaskStatuses.NoData,\r\n Text: 'Sin datos'\r\n },\r\n {\r\n Value: EnumDownloadTaskStatuses.Failure,\r\n Text: 'Fallo'\r\n },\r\n {\r\n Value: EnumDownloadTaskStatuses.Success,\r\n Text: 'Éxito'\r\n },\r\n {\r\n Value: EnumDownloadTaskStatuses.NotSynched,\r\n Text: 'No sincronizado'\r\n },\r\n {\r\n Value: EnumDownloadTaskStatuses.Reviewed,\r\n Text: 'Revisado'\r\n }\r\n ],\r\n DownloadStepStatuses:\r\n [\r\n {\r\n Value: EnumDownloadStepStatuses.Pending,\r\n Text: 'Pendiente'\r\n },\r\n {\r\n Value: EnumDownloadStepStatuses.Exception,\r\n Text: 'Excepción'\r\n },\r\n {\r\n Value: EnumDownloadStepStatuses.Failure,\r\n Text: 'Fallo'\r\n },\r\n {\r\n Value: EnumDownloadStepStatuses.Success,\r\n Text: 'Éxito'\r\n }\r\n ],\r\n CCTransferStatuses: [\r\n {\r\n Value: EnumCCTransferStatuses.Future,\r\n Text: 'Futuro'\r\n },\r\n {\r\n Value: EnumCCTransferStatuses.Actual,\r\n Text: 'Actual'\r\n },\r\n {\r\n Value: EnumCCTransferStatuses.Invoiced,\r\n Text: 'Facturado'\r\n },\r\n ],\r\n UploadStatuses:\r\n [\r\n {\r\n Value: EnumUploadStatuses.Initiated,\r\n Text: 'Iniciado'\r\n },\r\n {\r\n Value: EnumUploadStatuses.NoData,\r\n Text: 'Sin datos'\r\n },\r\n {\r\n Value: EnumUploadStatuses.Exception,\r\n Text: 'Excepción'\r\n },\r\n {\r\n Value: EnumUploadStatuses.Success,\r\n Text: 'Éxito'\r\n },\r\n {\r\n Value: EnumUploadStatuses.DataSent,\r\n Text: 'Datos enviados'\r\n },\r\n {\r\n Value: EnumUploadStatuses.BalanceMismatch,\r\n Text: 'Desajuste de saldo'\r\n },\r\n {\r\n Value: EnumUploadStatuses.BalanceNotExistsForDate,\r\n Text: 'No existe saldo para la fecha'\r\n },\r\n {\r\n Value: EnumUploadStatuses.CompanyNotFound,\r\n Text: 'Empresa no encontrada'\r\n },\r\n {\r\n Value: EnumUploadStatuses.AccountNotFound,\r\n Text: 'Cuenta no encontrada'\r\n },\r\n {\r\n Value: EnumUploadStatuses.NotSynched,\r\n Text: 'No sincronizado'\r\n },\r\n {\r\n Value: EnumUploadStatuses.FileExported,\r\n Text: 'Archivo exportado'\r\n }\r\n ],\r\n HistoryDateRanges:\r\n [\r\n {\r\n DateFrom: Globals.Yesterday,\r\n DateTo: Globals.Today,\r\n Text: 'Ayer'\r\n },\r\n {\r\n DateFrom: Globals.DayBeforeYesterday,\r\n DateTo: Globals.Today,\r\n Text: 'Últimos 2 días'\r\n },\r\n {\r\n DateFrom: Globals.ThisMonthFirstDate,\r\n DateTo: Globals.Today,\r\n Text: 'Este mes'\r\n },\r\n {\r\n DateFrom: Globals.LastMonthFirstDate,\r\n DateTo: Globals.LastMonthLastDate,\r\n Text: 'El mes pasado'\r\n }\r\n ],\r\n CreditCardsDateRanges:\r\n [\r\n {\r\n SortOrder: 1,\r\n DateFrom: Globals.Today,\r\n DateTo: new Date(Globals.Today.getFullYear(), Globals.Today.getMonth() + 1, Globals.Today.getDate()),\r\n Text: 'Cargo futuro'\r\n },\r\n {\r\n SortOrder: 2,\r\n DateFrom: new Date(Globals.Today.getFullYear(), Globals.Today.getMonth() - 1, Globals.Today.getDate()),\r\n DateTo: Globals.Today,\r\n Text: 'Cargo anterior'\r\n }\r\n ],\r\n ReportDateRanges:\r\n [\r\n {\r\n DateFrom: Globals.Yesterday,\r\n DateTo: Globals.Yesterday,\r\n Text: 'Ayer'\r\n },\r\n {\r\n DateFrom: Globals.SevenDaysAgoDate,\r\n DateTo: Globals.Yesterday,\r\n Text: 'Últimos 7 días'\r\n },\r\n {\r\n DateFrom: Globals.ThirtyDaysAgoDate,\r\n DateTo: Globals.Yesterday,\r\n Text: 'Últimos 30 días'\r\n },\r\n {\r\n DateFrom: Globals.NinetyDaysAgoDate,\r\n DateTo: Globals.Yesterday,\r\n Text: 'Últimos 90 días'\r\n },\r\n {\r\n DateFrom: Globals.BeginningOfQuater,\r\n DateTo: Globals.Yesterday,\r\n Text: 'Este trimestre'\r\n },\r\n {\r\n DateFrom: Globals.BeginningOfYear,\r\n DateTo: Globals.Yesterday,\r\n Text: 'Este año'\r\n }\r\n ],\r\n LoanTransactionFilterDateRanges: [\r\n {\r\n Value: 1,\r\n Text: '+/- 1 día'\r\n },\r\n {\r\n Value: 3,\r\n Text: '+/- 3 días'\r\n },\r\n {\r\n Value: 7,\r\n Text: '+/- 7 días'\r\n }\r\n ],\r\n BalanceReportDates:\r\n [\r\n {\r\n Date: Globals.LastMonthLastDate,\r\n Text: 'Fin del mes pasado'\r\n },\r\n {\r\n Date: Globals.LastQuarterLastDate,\r\n Text: 'Fin del último trimestre'\r\n },\r\n {\r\n Date: Globals.LastYearLastDate,\r\n Text: 'Fin del último año'\r\n }\r\n ],\r\n FinancialReportDates:\r\n [\r\n {\r\n DateFrom: Globals.ThisMonthFirstDate,\r\n DateTo: Globals.ThisMonthLastDate,\r\n Text: 'Mes en curso'\r\n },\r\n {\r\n DateFrom: Globals.BeginningOfQuater,\r\n DateTo: Globals.ThisQuarterLastDate,\r\n Text: 'Trimestre en curso'\r\n },\r\n {\r\n DateFrom: Globals.BeginningOfYear,\r\n DateTo: Globals.ThisYearLastDate,\r\n Text: 'Año en curso'\r\n },\r\n\r\n {\r\n DateFrom: Globals.LastMonthFirstDate,\r\n DateTo: Globals.LastMonthLastDate,\r\n Text: 'Mes anterior'\r\n },\r\n {\r\n DateFrom: Globals.LastQuarterFirstDate,\r\n DateTo: Globals.LastQuarterLastDate,\r\n Text: 'Trimestre anterior'\r\n },\r\n {\r\n DateFrom: Globals.LastYearFirstDate,\r\n DateTo: Globals.LastYearLastDate,\r\n Text: 'Año anterior'\r\n }\r\n ],\r\n BalanceSheetReportDates:\r\n [\r\n {\r\n Date: Globals.ThisMonthLastDate,\r\n Text: 'Fin de mes'\r\n },\r\n {\r\n Date: Globals.ThisQuarterLastDate,\r\n Text: 'Fin de trimestre'\r\n },\r\n {\r\n Date: Globals.ThisYearLastDate,\r\n Text: 'Fin de año'\r\n },\r\n\r\n {\r\n Date: Globals.LastMonthLastDate,\r\n Text: 'Fin del mes anterior'\r\n },\r\n {\r\n Date: Globals.LastQuarterLastDate,\r\n Text: 'Fin del trimestre anterior'\r\n },\r\n {\r\n Date: Globals.LastYearLastDate,\r\n Text: 'Fin del año anterior'\r\n }\r\n ],\r\n ForecastSources:\r\n [\r\n {\r\n Value: Enums.EnumSource.Automatic,\r\n Text: 'Automático'\r\n },\r\n {\r\n Value: Enums.EnumSource.Manual,\r\n Text: 'Manual'\r\n },\r\n ],\r\n CashflowReportDates:\r\n [\r\n {\r\n Value: 1,\r\n Text: 'Mañana'\r\n },\r\n {\r\n Value: 2,\r\n Text: 'Continuos'\r\n },\r\n {\r\n Value: 7,\r\n Text: 'Próximos 7 días'\r\n },\r\n {\r\n Value: 30,\r\n Text: 'Próximos 30 días'\r\n },\r\n {\r\n Value: 90,\r\n Text: 'Próximos 90 días'\r\n }\r\n ],\r\n ReconciliationDates:\r\n [\r\n {\r\n SortOrder: 1,\r\n Value: 7,\r\n Text: '7 días'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: 30,\r\n Text: '30 días'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: 90,\r\n Text: '90 días'\r\n }\r\n ],\r\n RecurringPeriods:\r\n [\r\n {\r\n SortOrder: 1,\r\n Value: EnumPeriodType.Daily,\r\n Text: 'Diariamente'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumPeriodType.ScheduledDays,\r\n Text: 'Días programados'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumPeriodType.Weekly,\r\n Text: 'Semanalmente'\r\n },\r\n {\r\n SortOrder: 4,\r\n Value: EnumPeriodType.BiWeekly,\r\n Text: 'Cada dos semanas'\r\n },\r\n {\r\n SortOrder: 5,\r\n Value: EnumPeriodType.Monthly,\r\n Text: 'Mensualmente'\r\n },\r\n {\r\n SortOrder: 6,\r\n Value: EnumPeriodType.BiMonthly,\r\n Text: 'Cada dos meses'\r\n },\r\n {\r\n SortOrder: 7,\r\n Value: EnumPeriodType.Quarterly,\r\n Text: 'Trimestralmente'\r\n }\r\n ],\r\n LoanStatuses:\r\n [\r\n {\r\n SortOrder: 1,\r\n Value: EnumLoanStatus.Canceled,\r\n Text: 'Cancelado'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumLoanStatus.Draft,\r\n Text: 'Borrador'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumLoanStatus.Finished,\r\n Text: 'Terminado'\r\n },\r\n {\r\n SortOrder: 4,\r\n Value: EnumLoanStatus.Funded,\r\n Text: 'Financiado'\r\n },\r\n {\r\n SortOrder: 5,\r\n Value: EnumLoanStatus.Recycled,\r\n Text: 'Reciclado'\r\n }\r\n ],\r\n InvoiceStatuses:\r\n [\r\n {\r\n SortOrder: 1,\r\n Value: EnumCCInvoiceStatuses.Draft,\r\n Text: 'Borrador'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumCCInvoiceStatuses.Posted,\r\n Text: 'Publicado'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumCCInvoiceStatuses.Removed,\r\n Text: 'Eliminado'\r\n }\r\n ],\r\n SecurityTypes:\r\n [\r\n {\r\n SortOrder: 1,\r\n Value: EnumSecurityType.BankGuarantee,\r\n Text: 'BankGuarantee'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumSecurityType.Cash,\r\n Text: 'Cash'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumSecurityType.InsurancePolicy,\r\n Text: 'InsurancePolicy'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumSecurityType.Mortgage,\r\n Text: 'Mortgage'\r\n },\r\n ],\r\n SecurityStatuses:\r\n [\r\n {\r\n SortOrder: 1,\r\n Value: EnumSecurityStatus.Requested,\r\n Text: 'Solicitado'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumSecurityStatus.Received,\r\n Text: 'Recibido'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumSecurityStatus.Cancelled,\r\n Text: 'Cancelado'\r\n }\r\n ],\r\n AmortizationTypes:\r\n [\r\n {\r\n Value: EnumAmortizationType.AnnuityShpizer,\r\n Text: 'Annuity/Shpizer'\r\n },\r\n {\r\n Value: EnumAmortizationType.Baloon,\r\n Text: 'Baloon'\r\n },\r\n {\r\n Value: EnumAmortizationType.StraightLine,\r\n Text: 'StraightLine'\r\n },\r\n {\r\n Value: EnumAmortizationType.OnCall,\r\n Text: 'OnCall'\r\n },\r\n ],\r\n InterestTypes:\r\n [\r\n {\r\n Value: EnumInterestType.Flat,\r\n Text: 'Plano'\r\n },\r\n {\r\n Value: EnumInterestType.Linked,\r\n Text: 'Vinculado'\r\n },\r\n ],\r\n RecurringIncreaseTypes:\r\n [\r\n {\r\n SortOrder: 1,\r\n Value: EnumIncreaseType.None,\r\n Text: 'Ninguno'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumIncreaseType.Percent,\r\n Text: 'Porcentaje'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumIncreaseType.FixedAmount,\r\n Text: 'FixedAmount'\r\n }\r\n ],\r\n BankGroups:\r\n [\r\n {\r\n Value: EnumBankGroups.Poalim,\r\n Text: 'Poliam'\r\n },\r\n {\r\n Value: EnumBankGroups.Leumi,\r\n Text: 'Leumi'\r\n },\r\n {\r\n Value: EnumBankGroups.Discount,\r\n Text: 'Discount'\r\n },\r\n {\r\n Value: EnumBankGroups.Mizrahi,\r\n Text: 'Mizrahi'\r\n },\r\n {\r\n Value: EnumBankGroups.BenLeumi,\r\n Text: 'BenLeumi'\r\n },\r\n {\r\n Value: EnumBankGroups.CityBank,\r\n Text: 'CityBank'\r\n },\r\n {\r\n Value: EnumBankGroups.Doar,\r\n Text: 'Doar',\r\n },\r\n {\r\n Value: EnumBankGroups.Jerusalem,\r\n Text: 'Jerusalem',\r\n },\r\n {\r\n Value: EnumBankGroups.HSBC,\r\n Text: 'HSBC'\r\n },\r\n {\r\n Value: EnumBankGroups.CCProcessors,\r\n Text: 'CCProcessors'\r\n }\r\n ],\r\n DashboardGroupBy:\r\n [\r\n {\r\n Value: EnumDashboardGroupBy.Account,\r\n Text: 'Cuenta'\r\n },\r\n {\r\n Value: EnumDashboardGroupBy.AccountGroup,\r\n Text: 'Grupo de cuentas'\r\n },\r\n {\r\n Value: EnumDashboardGroupBy.Bank,\r\n Text: 'Banco'\r\n },\r\n {\r\n Value: EnumDashboardGroupBy.Company,\r\n Text: 'Empresa'\r\n },\r\n {\r\n Value: EnumDashboardGroupBy.Currency,\r\n Text: 'Divisa'\r\n }\r\n ],\r\n Quarters:\r\n [\r\n {\r\n Text: 'Trimestre 1',\r\n Value: 1,\r\n DateFrom: Globals.FirstQuarterFromDate,\r\n DateTo: Globals.FirstQuarterToDate\r\n },\r\n {\r\n Text: 'Trimestre 2',\r\n Value: 2,\r\n DateFrom: Globals.SecondQuarterFromDate,\r\n DateTo: Globals.SecondQuarterToDate\r\n },\r\n {\r\n Text: 'Trimestre 3',\r\n Value: 3,\r\n DateFrom: Globals.ThirdQuarterFromDate,\r\n DateTo: Globals.ThirdQuarterToDate\r\n },\r\n {\r\n Text: 'Trimestre 4',\r\n Value: 4,\r\n DateFrom: Globals.FourthQuarterFromDate,\r\n DateTo: Globals.FourthQuarterToDate\r\n }\r\n ],\r\n BankPassCredentialValidity:\r\n [\r\n {\r\n Value: EnumBankPassCredentialValidity.Unknown,\r\n Text: 'Desconocido'\r\n },\r\n {\r\n Value: EnumBankPassCredentialValidity.Valid,\r\n Text: 'Válido'\r\n },\r\n {\r\n Value: EnumBankPassCredentialValidity.Invalid,\r\n Text: 'No válido'\r\n }\r\n ],\r\n ClassificarionRuleFieldTypes:\r\n [\r\n {\r\n Value: EnumClassificarionRuleFieldType.Notes1,\r\n Text: 'Notas 1'\r\n },\r\n {\r\n Value: EnumClassificarionRuleFieldType.Notes2,\r\n Text: 'Notas 2'\r\n },\r\n {\r\n Value: EnumClassificarionRuleFieldType.Reference,\r\n Text: 'Referencia'\r\n }\r\n ],\r\n ClassificarionRuleMatchTypes:\r\n [\r\n {\r\n SortOrder: 0,\r\n Value: EnumClassificarionRuleMatchType.Equal,\r\n Text: 'Igual'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumClassificarionRuleMatchType.StartWith,\r\n Text: 'Comienza por'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumClassificarionRuleMatchType.Contains,\r\n Text: 'Contiene'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumClassificarionRuleMatchType.MatchRegex,\r\n Text: 'Coincide con RegEx'\r\n },\r\n {\r\n SortOrder: 10,\r\n Value: EnumClassificarionRuleMatchType.NotEqual,\r\n Text: 'No es igual'\r\n },\r\n {\r\n SortOrder: 11,\r\n Value: EnumClassificarionRuleMatchType.NotStartWith,\r\n Text: 'No comienza por'\r\n },\r\n {\r\n SortOrder: 12,\r\n Value: EnumClassificarionRuleMatchType.NotContains,\r\n Text: 'No contiene'\r\n },\r\n {\r\n SortOrder: 13,\r\n Value: EnumClassificarionRuleMatchType.NotMatchRegex,\r\n Text: 'No coincide con el RegEx'\r\n }\r\n ],\r\n CompanyTabs:\r\n [\r\n {\r\n index: 0,\r\n text: 'Cuentas bancarias',\r\n Type: EnumCompanyChildEntityTypes.Account,\r\n Name: 'AccountTab'\r\n },\r\n {\r\n index: 1,\r\n text: 'Plantillas de contabilización de reservas',\r\n Type: EnumCompanyChildEntityTypes.PostingTemplate,\r\n Name: 'PostingTemplateTab'\r\n },\r\n {\r\n index: 2,\r\n text: 'Categorías de transacción',\r\n Type: EnumCompanyChildEntityTypes.Category,\r\n Name: 'CategoryTab'\r\n },\r\n {\r\n index: 3,\r\n text: 'Categorías superiores',\r\n Type: EnumCompanyChildEntityTypes.ParentCategory,\r\n Name: 'ParentCategoryTab'\r\n },\r\n {\r\n index: 4,\r\n text: 'Reglas de clasificación de transacciones',\r\n Type: EnumCompanyChildEntityTypes.ClassificationRule,\r\n Name: 'ClassificationrRuleTab'\r\n },\r\n {\r\n index: 5,\r\n text: 'Ajustes de flujo de caja',\r\n Type: EnumCompanyChildEntityTypes.ForecastMapper,\r\n Name: 'ForecastMapperTab'\r\n },\r\n {\r\n index: 6,\r\n text: 'Contratos de procesamiento de tarjetas de crédito',\r\n Type: EnumCompanyChildEntityTypes.CCContract,\r\n Name: 'CreditCardProcessingContractsTab'\r\n }\r\n ],\r\n NotificationTemplatesTabs: [\r\n {\r\n index: 0,\r\n text: 'Saldos',\r\n Name: 'BalancesTab'\r\n },\r\n {\r\n index: 1,\r\n text: 'Transacción',\r\n Name: 'TransactionTab'\r\n },\r\n {\r\n index: 2,\r\n text: 'Detalles del saldo',\r\n Name: 'BalanceDetailsTab'\r\n },\r\n {\r\n index: 3,\r\n text: 'Pagos de préstamos',\r\n Name: 'LoanPaymentsTab'\r\n }\r\n ],\r\n CashflowTabs:\r\n [\r\n {\r\n Value: 0,\r\n Text: 'Vista detallada',\r\n Name: 'DetailedTab'\r\n },\r\n {\r\n Value: 1,\r\n Text: 'Vista resumida',\r\n Name: 'SummarizedTab'\r\n },\r\n {\r\n Value: 2,\r\n Text: 'Vista del gráfico',\r\n Name: 'ChartTab'\r\n },\r\n {\r\n Value: 3,\r\n Text: 'Vista de categoría',\r\n Name: 'CategoryTab'\r\n },\r\n {\r\n Value: 4,\r\n Text: '$$$Category Dynamic view',\r\n Name: 'CategoryDynamicTab'\r\n }\r\n ],\r\n LoanTabs: [\r\n {\r\n index: 0,\r\n text: 'Detalles del préstamo',\r\n Name: 'GeneralTab'\r\n },\r\n {\r\n index: 1,\r\n text: 'Calendario de pagos',\r\n Name: 'PaymentsTab'\r\n },\r\n {\r\n index: 2,\r\n text: 'Valores',\r\n Name: 'SecuritiesTab'\r\n },\r\n ],\r\n BalanceHistoryReportDateRanges:\r\n [\r\n {\r\n DateFrom: Globals.BeginningOfLastYear,\r\n DateTo: Globals.LastYearLastDate,\r\n Text: 'El año pasado'\r\n },\r\n {\r\n DateFrom: Globals.BeginningOfYear,\r\n DateTo: Globals.Yesterday,\r\n Text: 'Este año'\r\n },\r\n {\r\n DateFrom: Globals.BeginningOfQuater,\r\n DateTo: Globals.Yesterday,\r\n Text: 'Este trimestre'\r\n },\r\n {\r\n DateFrom: Globals.LastMonthFirstDate,\r\n DateTo: Globals.LastMonthLastDate,\r\n Text: 'El mes pasado'\r\n },\r\n {\r\n DateFrom: Globals.ThisMonthFirstDate,\r\n DateTo: Globals.Today,\r\n Text: 'Este mes'\r\n }\r\n ],\r\n BalanceHistoryReportMode:\r\n [\r\n {\r\n Value: EnumBalanceHistoryReportMode.Daily,\r\n Text: 'Diariamente'\r\n },\r\n {\r\n Value: EnumBalanceHistoryReportMode.Monthly,\r\n Text: 'Mensualmente'\r\n },\r\n {\r\n Value: EnumBalanceHistoryReportMode.Weekly,\r\n Text: 'Semanalmente'\r\n }\r\n ],\r\n Sources:\r\n [\r\n {\r\n Value: EnumSource.Automatic,\r\n Text: 'Automático'\r\n },\r\n {\r\n Value: EnumSource.Manual,\r\n Text: 'Manual'\r\n }\r\n ],\r\n Sides:\r\n [\r\n {\r\n Value: EnumSide.Expense,\r\n Text: 'Gasto'\r\n },\r\n {\r\n Value: EnumSide.Income,\r\n Text: 'Ingreso'\r\n }\r\n ],\r\n LoanSides:\r\n [\r\n {\r\n Value: EnumLoanSide.Outgoing,\r\n Text: 'Saliente'\r\n },\r\n {\r\n Value: EnumLoanSide.Incoming,\r\n Text: 'Entrante'\r\n }\r\n ],\r\n LoanPaymentFrequencyTypes:\r\n [\r\n {\r\n SortOrder: 0,\r\n Value: EnumLoanPaymentFrequencyType.Weekly,\r\n Text: 'Semanalmente',\r\n Count: 1,\r\n UnitType: EnumLoanPaymentFrequencyType.Weekly\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumLoanPaymentFrequencyType.BiWeekly,\r\n Text: 'Cada dos semanas',\r\n Count: 2,\r\n UnitType: EnumLoanPaymentFrequencyType.Weekly\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumLoanPaymentFrequencyType.Monthly,\r\n Text: 'Mensualmente',\r\n Count: 1,\r\n UnitType: EnumLoanPaymentFrequencyType.Monthly\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumLoanPaymentFrequencyType.BiMonthly,\r\n Text: 'Cada dos meses',\r\n Count: 2,\r\n UnitType: EnumLoanPaymentFrequencyType.Monthly\r\n },\r\n {\r\n SortOrder: 4,\r\n Value: EnumLoanPaymentFrequencyType.Quorterly,\r\n Text: 'Trimestral',\r\n Count: 3,\r\n UnitType: EnumLoanPaymentFrequencyType.Monthly\r\n },\r\n {\r\n SortOrder: 5,\r\n Value: EnumLoanPaymentFrequencyType.SemiAnnual,\r\n Text: 'Semestral',\r\n Count: 6,\r\n UnitType: EnumLoanPaymentFrequencyType.Monthly\r\n },\r\n {\r\n SortOrder: 6,\r\n Value: EnumLoanPaymentFrequencyType.Annual,\r\n Text: 'Anual',\r\n Count: 12,\r\n UnitType: EnumLoanPaymentFrequencyType.Monthly\r\n },\r\n {\r\n SortOrder: 7,\r\n Value: EnumLoanPaymentFrequencyType.OneTimePayment,\r\n Text: 'Pago único',\r\n Count: 0,\r\n UnitType: EnumLoanPaymentFrequencyType.OneTimePayment\r\n }\r\n ],\r\n LoanInterestPeriodCalculationTypes:\r\n [\r\n {\r\n Value: EnumLoanInterestPeriodCalculationType.Daily,\r\n Text: 'Diariamente'\r\n },\r\n {\r\n Value: EnumLoanInterestPeriodCalculationType.Monthly,\r\n Text: 'Mensualmente'\r\n }\r\n ],\r\n UserAuthorizationTypes:\r\n [\r\n {\r\n Value: EnumUserAuthorizationType.All,\r\n Text: 'Todos'\r\n },\r\n {\r\n Value: EnumUserAuthorizationType.Companies,\r\n Text: 'Empresas'\r\n },\r\n {\r\n Value: EnumUserAuthorizationType.Accounts,\r\n Text: 'Cuentas'\r\n }\r\n ],\r\n ShareInformationWith:\r\n [\r\n {\r\n Value: EnumShareWith.Myself,\r\n Text: 'Yo mismo'\r\n },\r\n {\r\n Value: EnumShareWith.Users,\r\n Text: 'Usuarios en mi organización'\r\n },\r\n {\r\n Value: EnumShareWith.Emails,\r\n Text: 'Terceros'\r\n },\r\n ],\r\n SummaryLevels:\r\n [\r\n {\r\n Value: EnumSummaryLevel.Day,\r\n Text: 'Día',\r\n SortOrder: 0\r\n },\r\n {\r\n Value: EnumSummaryLevel.Week,\r\n Text: 'Semana',\r\n SortOrder: 1\r\n },\r\n {\r\n Value: EnumSummaryLevel.Month,\r\n Text: 'Mes',\r\n SortOrder: 2\r\n },\r\n ],\r\n CashflowSummarizedAggregationLevels:\r\n [\r\n {\r\n Value: EnumCashflowSummarizedAggregationLevel.Company,\r\n Text: 'Empresa'\r\n },\r\n {\r\n Value: EnumCashflowSummarizedAggregationLevel.Account,\r\n Text: 'Cuenta'\r\n },\r\n {\r\n Value: EnumCashflowSummarizedAggregationLevel.BookingAccount,\r\n Text: 'Cuenta de reservas'\r\n },\r\n {\r\n Value: EnumCashflowSummarizedAggregationLevel.AccountGroup,\r\n Text: 'Grupo de cuentas'\r\n },\r\n {\r\n Value: EnumCashflowSummarizedAggregationLevel.Bank,\r\n Text: 'Banco'\r\n },\r\n {\r\n Value: EnumCashflowSummarizedAggregationLevel.BankGroup,\r\n Text: 'Grupo bancario'\r\n },\r\n {\r\n Value: EnumCashflowSummarizedAggregationLevel.Currency,\r\n Text: 'Divisa'\r\n },\r\n {\r\n Value: EnumCashflowSummarizedAggregationLevel.Category,\r\n Text: 'Categoría'\r\n },\r\n ],\r\n ShowInCurrencyOptions:\r\n [\r\n {\r\n Value: EnumShowInCurrencyOptions.Original,\r\n Text: 'Original',\r\n SortOrder: 0\r\n },\r\n {\r\n Value: EnumShowInCurrencyOptions.ILS,\r\n Text: 'ILS',\r\n SortOrder: 1\r\n },\r\n {\r\n Value: EnumShowInCurrencyOptions.Both,\r\n Text: 'Original e ILS',\r\n SortOrder: 2\r\n },\r\n {\r\n Value: EnumShowInCurrencyOptions.OriginalAndDollar,\r\n Text: 'Original y Dollar',\r\n SortOrder: 3\r\n },\r\n {\r\n Value: EnumShowInCurrencyOptions.OriginalAndDefault,\r\n Text: 'Original y por defecto',\r\n SortOrder: 4\r\n },\r\n {\r\n Value: EnumShowInCurrencyOptions.Default,\r\n Text: 'Por defecto',\r\n SortOrder: 5\r\n },\r\n\r\n ],\r\n EnumNotificationTemplateSectionFields:\r\n [\r\n {\r\n Value: EnumNotificationTemplateSectionFields.AccountGroup,\r\n Text: 'Grupo de cuentas'\r\n },\r\n {\r\n Value: EnumNotificationTemplateSectionFields.BankGroup,\r\n Text: 'Grupo bancario'\r\n },\r\n {\r\n Value: EnumNotificationTemplateSectionFields.Bank,\r\n Text: 'Banco'\r\n },\r\n {\r\n Value: EnumNotificationTemplateSectionFields.Company,\r\n Text: 'Empresa'\r\n },\r\n {\r\n Value: EnumNotificationTemplateSectionFields.BookingAccount,\r\n Text: 'Cuenta de reservas'\r\n },\r\n {\r\n Value: EnumNotificationTemplateSectionFields.BankAccount,\r\n Text: 'Cuenta bancaria'\r\n },\r\n {\r\n Value: EnumNotificationTemplateSectionFields.BookingAccountType,\r\n Text: 'Tipo de cuenta de reservas'\r\n },\r\n {\r\n Value: EnumNotificationTemplateSectionFields.Currency,\r\n Text: 'Divisa'\r\n },\r\n {\r\n Value: EnumNotificationTemplateSectionFields.HasCheques,\r\n Text: 'Tiene cheques'\r\n },\r\n {\r\n Value: EnumNotificationTemplateSectionFields.Category,\r\n Text: 'Categoría'\r\n },\r\n {\r\n Value: EnumNotificationTemplateSectionFields.DepositTypes,\r\n Text: 'Tipos de depósito'\r\n },\r\n {\r\n Value: EnumNotificationTemplateSectionFields.StockTypes,\r\n Text: 'Tipos de acciones'\r\n },\r\n {\r\n Value: EnumNotificationTemplateSectionFields.AmortizationType,\r\n Text: 'Tipos de amortización'\r\n },\r\n {\r\n Value: EnumNotificationTemplateSectionFields.InterestType,\r\n Text: 'Tipos de interés'\r\n },\r\n {\r\n Value: EnumNotificationTemplateSectionFields.NextDays,\r\n Text: 'Días siguientes'\r\n },\r\n {\r\n Value: EnumNotificationTemplateSectionFields.NextWeeks,\r\n Text: 'Semanas siguientes'\r\n },\r\n {\r\n Value: EnumNotificationTemplateSectionFields.NextMonths,\r\n Text: 'Meses siguientes'\r\n },\r\n {\r\n Value: EnumNotificationTemplateSectionFields.SumSide,\r\n Text: 'Lado de la transacción'\r\n }\r\n ],\r\n PredefinedNotificationTemplatesMenuItems:\r\n [\r\n {\r\n Value: EnumPredefinedNotificationTemplates.General,\r\n Text: 'General'\r\n },\r\n {\r\n Value: EnumPredefinedNotificationTemplates.Detailed,\r\n Text: 'Detallado'\r\n },\r\n {\r\n Value: EnumPredefinedNotificationTemplates.TotalBalance,\r\n Text: 'Saldo total'\r\n },\r\n {\r\n Value: EnumPredefinedNotificationTemplates.Empty,\r\n Text: 'Vacío'\r\n }\r\n ],\r\n YesNo:\r\n [\r\n {\r\n Value: EnumYesNo.Yes,\r\n Text: 'Sí'\r\n },\r\n {\r\n Value: EnumYesNo.No,\r\n Text: 'No'\r\n }\r\n ],\r\n MatchingRelationships: [\r\n {\r\n Value: EnumMatchingRelationship.And,\r\n Text: 'Y'\r\n },\r\n {\r\n Value: EnumMatchingRelationship.Or,\r\n Text: 'O'\r\n },\r\n ],\r\n BillingReportTabs:\r\n [\r\n {\r\n index: 0,\r\n text: 'Vista del panel de control',\r\n Name: 'DashboardsViewTab'\r\n },\r\n {\r\n index: 1,\r\n text: 'Vista en cuadrícula',\r\n Name: 'GridViewTab'\r\n }\r\n ],\r\n BankTypes:\r\n [\r\n {\r\n Value: EnumBankTypes.Local,\r\n Text: '1. Banco israelí'\r\n },\r\n {\r\n Value: EnumBankTypes.ExternalCreditCard,\r\n Text: '2. Tarjeta de crédito externa'\r\n },\r\n {\r\n Value: EnumBankTypes.Foreign,\r\n Text: '3. Banco extranjero'\r\n },\r\n {\r\n Value: EnumBankTypes.ExternalLoaner,\r\n Text: '4. Prestamista externo'\r\n },\r\n {\r\n Value: EnumBankTypes.CCProcessor,\r\n Text: '5. Procesador de tarjetas de crédito'\r\n },\r\n ],\r\n ReplicationStatuses:\r\n [\r\n {\r\n Value: EnumReplicationStatuses.Initiated,\r\n Text: 'Iniciado'\r\n },\r\n {\r\n Value: EnumReplicationStatuses.NoData,\r\n Text: 'Sin datos'\r\n },\r\n {\r\n Value: EnumReplicationStatuses.Exception,\r\n Text: 'Excepción'\r\n },\r\n {\r\n Value: EnumReplicationStatuses.Success,\r\n Text: 'Éxito'\r\n },\r\n {\r\n Value: EnumReplicationStatuses.CompanyNotFound,\r\n Text: 'Empresa no encontrada'\r\n }\r\n ],\r\n ReplicationObjectTypes:\r\n [\r\n {\r\n Value: EnumReplicationObjectTypes.AccountingJournalEntry,\r\n Text: 'Entrada en el diario'\r\n },\r\n {\r\n Value: EnumReplicationObjectTypes.BusinessPartner,\r\n Text: 'Socio comercial'\r\n },\r\n {\r\n Value: EnumReplicationObjectTypes.BusinessPartnerGroup,\r\n Text: 'Grupo de socios comerciales'\r\n },\r\n {\r\n Value: EnumReplicationObjectTypes.DimensionCode1,\r\n Text: 'Código de dimensión 1'\r\n },\r\n {\r\n Value: EnumReplicationObjectTypes.DimensionCode2,\r\n Text: 'Código de dimensión 2'\r\n },\r\n {\r\n Value: EnumReplicationObjectTypes.DimensionCode3,\r\n Text: 'Código de dimensión 3'\r\n },\r\n {\r\n Value: EnumReplicationObjectTypes.DimensionCode4,\r\n Text: 'Código de dimensión 4'\r\n },\r\n {\r\n Value: EnumReplicationObjectTypes.DimensionCode5,\r\n Text: 'Código de dimensión 5'\r\n },\r\n {\r\n Value: EnumReplicationObjectTypes.Document,\r\n Text: 'Documento'\r\n },\r\n {\r\n Value: EnumReplicationObjectTypes.AccountingForecast,\r\n Text: 'Previsión contable'\r\n },\r\n {\r\n Value: EnumReplicationObjectTypes.AccountingForecastCategory,\r\n Text: 'Categoría de previsión contable'\r\n },\r\n {\r\n Value: EnumReplicationObjectTypes.Item,\r\n Text: 'Artículo'\r\n },\r\n {\r\n Value: EnumReplicationObjectTypes.ItemGroup,\r\n Text: 'Grupo de artículos'\r\n },\r\n {\r\n Value: EnumReplicationObjectTypes.LedgerAccount,\r\n Text: 'Cuenta de libro contable'\r\n },\r\n {\r\n Value: EnumReplicationObjectTypes.LedgerAccountGroup,\r\n Text: 'Grupo de cuentas del libro contable'\r\n },\r\n {\r\n Value: EnumReplicationObjectTypes.Payment,\r\n Text: 'Pago'\r\n },\r\n {\r\n Value: EnumReplicationObjectTypes.Project,\r\n Text: 'Proyecto'\r\n },\r\n {\r\n Value: EnumReplicationObjectTypes.SalesPerson,\r\n Text: 'Vendedor'\r\n },\r\n {\r\n Value: EnumReplicationObjectTypes.PaymentGroup,\r\n Text: 'Grupo de pago'\r\n },\r\n {\r\n Value: EnumReplicationObjectTypes.CompanyMetadata,\r\n Text: 'Metadatos de la empresa'\r\n }\r\n\r\n ],\r\n PaymentMeansTypes:\r\n [\r\n {\r\n Value: EnumPaymentMeansTypes.Cach,\r\n Text: 'Efectivo'\r\n },\r\n {\r\n Value: EnumPaymentMeansTypes.Cheque,\r\n Text: 'Cheque'\r\n },\r\n {\r\n Value: EnumPaymentMeansTypes.CreditCard,\r\n Text: 'Tarjeta de crédito'\r\n },\r\n {\r\n Value: EnumPaymentMeansTypes.WireTransfer,\r\n Text: 'Transferencia bancaria'\r\n },\r\n {\r\n Value: EnumPaymentMeansTypes.Multiple,\r\n Text: 'Múltiple'\r\n }\r\n ],\r\n TransactionCategoryIcons:\r\n [\r\n {\r\n Value: 'cheques.png',\r\n Text: 'Cheques'\r\n },\r\n {\r\n Value: 'transfer.png',\r\n Text: 'Transferencia'\r\n },\r\n {\r\n Value: 'deposit-payment.png',\r\n Text: 'Pago del depósito'\r\n },\r\n {\r\n Value: 'interest-payment.png',\r\n Text: 'Pago de intereses'\r\n },\r\n {\r\n Value: 'commission.png',\r\n Text: 'Comisión'\r\n },\r\n {\r\n Value: 'credit-card.png',\r\n Text: 'Cargo en tarjeta de crédito'\r\n },\r\n {\r\n Value: 'management-fee.png',\r\n Text: 'Tarifa de gestión'\r\n },\r\n {\r\n Value: 'misc.png',\r\n Text: 'Otros'\r\n }\r\n ],\r\n DocumentTypes:\r\n [\r\n {\r\n Value: EnumDocumentType.Invoice,\r\n Text: 'Factura'\r\n },\r\n {\r\n Value: EnumDocumentType.Refund,\r\n Text: 'Nota de crédito'\r\n },\r\n {\r\n Value: EnumDocumentType.PurchaseInvoice,\r\n Text: 'Factura de compra'\r\n },\r\n {\r\n Value: EnumDocumentType.PurchaseReservationInvoice,\r\n Text: 'Factura de compra a crédito'\r\n },\r\n ],\r\n BusinessPartnerTabs:\r\n [\r\n {\r\n index: 0,\r\n text: 'Documentos'\r\n },\r\n {\r\n index: 1,\r\n text: 'Pagos'\r\n },\r\n {\r\n index: 2,\r\n text: 'Libro contable'\r\n }\r\n ],\r\n BusinessPartnerTypes:\r\n [\r\n {\r\n Value: EnumSide.Expense,\r\n Text: 'Comercio'\r\n },\r\n {\r\n Value: EnumSide.Income,\r\n Text: 'Cliente'\r\n }\r\n ],\r\n LedgerIsOpenStatuses:\r\n [\r\n {\r\n Text: 'Abierto',\r\n Value: true\r\n },\r\n {\r\n Text: 'Cerrado',\r\n Value: false\r\n }\r\n ],\r\n ExpenseManagementTabs:\r\n [\r\n {\r\n index: 0,\r\n text: 'Departamentos',\r\n Name: 'DepartmentTab'\r\n },\r\n {\r\n index: 1,\r\n text: 'Sucursales',\r\n Name: 'BranchTab'\r\n },\r\n {\r\n index: 2,\r\n text: 'Trabajadores',\r\n Name: 'WorkerTab'\r\n },\r\n {\r\n index: 3,\r\n text: 'Categorías de gasto',\r\n Name: 'ExpenseCategoriesTab'\r\n },\r\n {\r\n index: 4,\r\n text: 'Campos personalizados',\r\n Name: 'CustomFieldsTab'\r\n },\r\n {\r\n index: 5,\r\n text: 'Reglas de aprobación',\r\n Name: 'ApprovalRulesTab'\r\n }\r\n ],\r\n VisibilitySettings:\r\n [\r\n {\r\n Value: EnumVisibilitySetting.Hide,\r\n Text: 'Ocultar'\r\n },\r\n {\r\n Value: EnumVisibilitySetting.Mandatory,\r\n Text: 'Obligatorio'\r\n },\r\n {\r\n Value: EnumVisibilitySetting.Show,\r\n Text: 'Mostrar'\r\n }\r\n ],\r\n CustomFieldsetFieldInputTypes:\r\n [\r\n {\r\n index: 0,\r\n Value: EnumCustomFieldsetFieldInputType.Text,\r\n Text: 'Texto'\r\n },\r\n {\r\n index: 1,\r\n Value: EnumCustomFieldsetFieldInputType.Number,\r\n Text: 'Número'\r\n },\r\n {\r\n index: 2,\r\n Value: EnumCustomFieldsetFieldInputType.Memo,\r\n Text: 'Nota'\r\n },\r\n {\r\n index: 3,\r\n Value: EnumCustomFieldsetFieldInputType.Dropdown,\r\n Text: 'Desplegable'\r\n },\r\n {\r\n index: 4,\r\n Value: EnumCustomFieldsetFieldInputType.Checkbox,\r\n Text: 'Casilla de verificación'\r\n }\r\n ],\r\n ExpenseStatuses:\r\n [\r\n {\r\n SortOrder: 0,\r\n Value: EnumExpenseStatus.Submitted,\r\n Text: 'Enviado'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumExpenseStatus.Canceled,\r\n Text: 'Cancelado'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumExpenseStatus.Approved,\r\n Text: 'Aprobado'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumExpenseStatus.Rejected,\r\n Text: 'Rechazado'\r\n },\r\n {\r\n SortOrder: 4,\r\n Value: EnumExpenseStatus.Posted,\r\n Text: 'Publicado'\r\n }\r\n ],\r\n LoanPostPaymentRecalculationOptions: [\r\n {\r\n SortOrder: 0,\r\n Value: EnumLoanPostPaymentRecalculationOptions.Payment,\r\n Text: 'Añadir la diferencia al próximo pago'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumLoanPostPaymentRecalculationOptions.Loan,\r\n Text: 'Volver a calcular el préstamo'\r\n }\r\n ],\r\n PostPaymentActions: [\r\n {\r\n SortOrder: 0,\r\n Value: 0,\r\n Text: 'Añadir al principal',\r\n Linkage: false,\r\n },\r\n {\r\n SortOrder: 0,\r\n Value: 1,\r\n Text: 'Añadir al interés',\r\n Linkage: false,\r\n },\r\n {\r\n SortOrder: 0,\r\n Value: 2,\r\n Text: 'Añadir a la comisión',\r\n Linkage: false,\r\n },\r\n {\r\n SortOrder: 0,\r\n Value: 3,\r\n Text: 'Añadir al excedente de vinculación',\r\n Linkage: true,\r\n },\r\n {\r\n SortOrder: 0,\r\n Value: 4,\r\n Text: 'Añadir al excedente de interés',\r\n Linkage: true,\r\n }\r\n ],\r\n FinancialReportDateTypes:\r\n [\r\n {\r\n SortOrder: 0,\r\n Value: EnumFinancialReportDateType.PostingDate,\r\n Text: 'Fecha de publicación'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumFinancialReportDateType.DueDate,\r\n Text: 'Fecha de vencimiento'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumFinancialReportDateType.TaxDate,\r\n Text: 'Fecha fiscal'\r\n },\r\n ],\r\n FinancialReportCurrencyTypes: [\r\n {\r\n SortOrder: 0,\r\n Value: EnumFinancialReportCurrencyType.Local,\r\n Text: 'Local'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumFinancialReportCurrencyType.System,\r\n Text: 'Sistema'\r\n },\r\n ],\r\n FinancialReportRangeTypes: [\r\n {\r\n SortOrder: 0,\r\n Value: EnumFinancialReportRangeType.All,\r\n Text: 'Todos'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumFinancialReportRangeType.Month,\r\n Text: 'Mes'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumFinancialReportRangeType.Quarter,\r\n Text: 'Trimestre'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumFinancialReportRangeType.Year,\r\n Text: 'Año'\r\n },\r\n ],\r\n LastTransactionsDateOptions: [\r\n {\r\n SortOrder: 0,\r\n Value: 1,\r\n Text: '24 horas'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: 3,\r\n Text: '3 últimos días'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: 7,\r\n Text: 'La última semana'\r\n }\r\n ],\r\n DataExportTypes: [\r\n {\r\n Value: EnumDataExportType.Automatic,\r\n Text: 'Automático'\r\n },\r\n {\r\n Value: EnumDataExportType.BAI2File,\r\n Text: 'Archivo BAI2'\r\n },\r\n {\r\n Value: EnumDataExportType.ExcelFile,\r\n Text: 'Archivo Excel'\r\n },\r\n {\r\n Value: EnumDataExportType.BezeqZahav14File,\r\n Text: 'Archivo BezeqZahav 14'\r\n },\r\n {\r\n Value: EnumDataExportType.BezeqZahav24File,\r\n Text: 'Archivo BezeqZahav 24'\r\n },\r\n {\r\n Value: EnumDataExportType.BezeqZahav48File,\r\n Text: 'Archivo BezeqZahav 48'\r\n },\r\n {\r\n Value: EnumDataExportType.MT940File,\r\n Text: 'Archivo MT940'\r\n },\r\n {\r\n Value: EnumDataExportType.IntentiaFile,\r\n Text: 'Archivo Intentia'\r\n }\r\n ],\r\n ExportTransactionsMethods: [\r\n {\r\n SortOrder: 0,\r\n Value: EnumExportTransactionsMethod.ExportNewTransactions,\r\n Text: 'Nuevas transacciones'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumExportTransactionsMethod.ExportTransactionsFromDate,\r\n Text: 'Desde la Fecha'\r\n }\r\n ],\r\n LedgerAccountTypes: [\r\n {\r\n SortOrder: 0,\r\n Value: EnumLedgerAccountType.Income,\r\n Text: 'Ingresos'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumLedgerAccountType.Expense,\r\n Text: 'Gastos'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumLedgerAccountType.Other,\r\n Text: 'Otros'\r\n }\r\n ],\r\n JournalEntryCurrencyTypes: [\r\n {\r\n SortOrder: 0,\r\n Value: EnumJournalEntryCurrencyTypes.Local,\r\n Text: 'Local'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumJournalEntryCurrencyTypes.System,\r\n Text: 'Sistema'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumJournalEntryCurrencyTypes.Foreign,\r\n Text: 'Extranjero'\r\n }\r\n ],\r\n ChequesReportTabs:\r\n [\r\n {\r\n index: 0,\r\n text: 'Entrante',\r\n Name: 'Incoming'\r\n },\r\n {\r\n index: 1,\r\n text: 'Saliente',\r\n Name: 'Outgoing'\r\n }\r\n ],\r\n ProcessingCompanies:\r\n [\r\n {\r\n Value: EnumCCProcessingCompanies.Isracard,\r\n Text: 'Isracard'\r\n },\r\n {\r\n Value: EnumCCProcessingCompanies.VisaCal,\r\n Text: ''\r\n },\r\n {\r\n Value: EnumCCProcessingCompanies.LeumiMax,\r\n Text: 'LeumiMax'\r\n }\r\n ],\r\n Brands:\r\n [\r\n {\r\n Value: EnumCCBrands.All,\r\n Text: 'Todos',\r\n Icon: 'assets/projects/kraken/cc-brand-generic.svg'\r\n },\r\n {\r\n Value: EnumCCBrands.MasterCard,\r\n Text: 'MasterCard',\r\n Icon: 'assets/projects/kraken/cc-brand-mastercard.svg'\r\n },\r\n {\r\n Value: EnumCCBrands.Visa,\r\n Text: 'Visa',\r\n Icon: 'assets/projects/kraken/cc-brand-visa.svg'\r\n },\r\n {\r\n Value: EnumCCBrands.Amex,\r\n Text: 'Amex',\r\n Icon: 'assets/projects/kraken/cc-brand-american-express.svg'\r\n },\r\n {\r\n Value: EnumCCBrands.Diners,\r\n Text: 'Diners',\r\n Icon: 'assets/projects/kraken/cc-brand-diners.svg'\r\n },\r\n {\r\n Value: EnumCCBrands.Isracard,\r\n Text: 'Isracard',\r\n Icon: 'assets/projects/kraken/cc-brand-isracard.svg'\r\n }\r\n ],\r\n UploadHistoryTabs:\r\n [\r\n {\r\n index: 0,\r\n text: 'Páginas bancarias'\r\n },\r\n {\r\n index: 1,\r\n text: 'Entradas del diario'\r\n },\r\n {\r\n index: 2,\r\n text: 'Pagos entrantes'\r\n },\r\n ],\r\n ApplyToBookingAccountsTypes: [\r\n {\r\n SortOrder: 1,\r\n Value: EnumApplyToBookingAccountsTypes.All,\r\n Text: 'Todas las cuentas'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumApplyToBookingAccountsTypes.SpecificCurrency,\r\n Text: 'Cuentas con una divisa específica'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumApplyToBookingAccountsTypes.Specific,\r\n Text: 'Cuenta específica'\r\n }\r\n ],\r\n NoteFieldTypes: [\r\n {\r\n SortIndex: 1,\r\n Value: EnumNoteFieldTypes.Note1,\r\n Text: 'Nota 1'\r\n },\r\n {\r\n SortIndex: 2,\r\n Value: EnumNoteFieldTypes.Note2,\r\n Text: 'Nota 2'\r\n }\r\n ],\r\n NoteMatchTypes: [\r\n {\r\n SortOrder: 1,\r\n Value: EnumNoteMatchTypes.Equal,\r\n Text: 'Igual'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumNoteMatchTypes.StartWith,\r\n Text: 'Empieza por'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumNoteMatchTypes.EndsWith,\r\n Text: 'Termina en'\r\n },\r\n {\r\n SortOrder: 4,\r\n Value: EnumNoteMatchTypes.Contains,\r\n Text: 'Contiene'\r\n },\r\n ],\r\n NotesExportAdjustments: [\r\n {\r\n SortOrder: 1,\r\n Value: EnumNotesExportAdjustments.None,\r\n Text: 'Ninguno',\r\n Description: 'Nada que hacer'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumNotesExportAdjustments.Notes2Append,\r\n Text: 'Notas 1 + Notas 2',\r\n Description: 'Añade la Nota 2 al final de la Nota 1'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumNotesExportAdjustments.Notes2Override,\r\n Text: 'Notas 1 <> Notas 2',\r\n Description: 'Reescribe la Nota 1 como Nota 2'\r\n },\r\n {\r\n SortOrder: 4,\r\n Value: EnumNotesExportAdjustments.Notes2Prepend,\r\n Text: 'Notas 2 + Notas 1',\r\n Description: 'Añade la Nota 2 al principio de la Nota 1'\r\n }\r\n ],\r\n AccountFullNameDisplayType: [\r\n {\r\n Value: EnumAccountFullNameDisplayType.Full,\r\n Text: 'Nombre completo'\r\n },\r\n {\r\n Value: EnumAccountFullNameDisplayType.NumberAndBranch,\r\n Text: 'Número y sucursal'\r\n },\r\n {\r\n Value: EnumAccountFullNameDisplayType.NumberOnly,\r\n Text: 'Solo número'\r\n },\r\n {\r\n Value: EnumAccountFullNameDisplayType.BankAndNumber,\r\n Text: 'Banco y número'\r\n }\r\n ],\r\n SyncStatusTabs: [\r\n {\r\n index: 0,\r\n text: 'Cuenta',\r\n Value: 'Account'\r\n },\r\n {\r\n index: 1,\r\n text: 'Contrato',\r\n Value: 'Contract'\r\n }\r\n ],\r\n BillingContractsReportTabs: [\r\n {\r\n index: 0,\r\n text: 'Resumen'\r\n },\r\n {\r\n index: 1,\r\n text: 'Facturación'\r\n }\r\n ],\r\n JournalEntryUploadLevels: [\r\n {\r\n SortOrder: 1,\r\n Value: EnumJournalEntryUploadLevel.None,\r\n Text: 'Ninguno'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumJournalEntryUploadLevel.JournalVoucher,\r\n Text: 'Cupón de diario'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumJournalEntryUploadLevel.JournalEntry,\r\n Text: 'Entrada en el diario'\r\n },\r\n {\r\n SortOrder: 4,\r\n Value: EnumJournalEntryUploadLevel.JournalEntryAndReconciliation,\r\n Text: 'Entrada y conciliación en el diario'\r\n }\r\n ],\r\n TransationJEInfoTabs: [\r\n {\r\n SortOrder: 0,\r\n text: 'Entrada en el diario'\r\n },\r\n {\r\n SortOrder: 1,\r\n text: 'Plantilla de contabilización'\r\n },\r\n ],\r\n FileEncodings: [\r\n {\r\n SortOrder: 1,\r\n Value: EnumFileImportEncodings.Windows1255,\r\n Text: 'Windows-1255'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumFileImportEncodings.OEM862,\r\n Text: 'OEM-862'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumFileImportEncodings.ISO88598,\r\n Text: 'ISO-8859-8'\r\n },\r\n {\r\n SortOrder: 4,\r\n Value: EnumFileImportEncodings.UTF8,\r\n Text: 'UTF-8'\r\n },\r\n {\r\n SortOrder: 5,\r\n Value: EnumFileImportEncodings.ANSI,\r\n Text: 'ANSI'\r\n }\r\n ],\r\n FileTypes: [\r\n {\r\n SortOrder: 1,\r\n Value: EnumFileImportTypes.Excel,\r\n Text: 'Excel'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumFileImportTypes.Csv,\r\n Text: 'CSV'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumFileImportTypes.Tab,\r\n Text: 'Tab'\r\n },\r\n {\r\n SortOrder: 4,\r\n Value: EnumFileImportTypes.FixedWidth,\r\n Text: 'Anchura fija'\r\n },\r\n {\r\n SortOrder: 5,\r\n Value: EnumFileImportTypes.Custom,\r\n Text: 'Personalizado'\r\n },\r\n {\r\n SortOrder: 6,\r\n Value: EnumFileImportTypes.BAI2,\r\n Text: 'BAI2'\r\n }\r\n ],\r\n FileRowDelimiters: [\r\n {\r\n SortOrder: 1,\r\n Value: EnumFileImportRowDelimiters.VbCr,\r\n Text: '10'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumFileImportRowDelimiters.VbCrLf,\r\n Text: '13+10'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumFileImportRowDelimiters.VbLf,\r\n Text: '13'\r\n }\r\n ],\r\n FileRowsSortOrders: [\r\n {\r\n SortOrder: 1,\r\n Value: EnumFileImportRowsSortOrders.Ascending,\r\n Text: 'Ascendente'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumFileImportRowsSortOrders.Descending,\r\n Text: 'Descendente'\r\n },\r\n ],\r\n OrganizationAccountMappingTypes: [\r\n {\r\n SortOrder: 1,\r\n Value: EnumFileImportAccountMappingTypes.ByBookingAccount,\r\n Text: 'Por cuenta de reservas'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumFileImportAccountMappingTypes.ByAccountNumber,\r\n Text: 'Por número de cuenta'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumFileImportAccountMappingTypes.ByAccountAndCurrency,\r\n Text: 'Por cuenta + divisa'\r\n },\r\n {\r\n SortOrder: 4,\r\n Value: EnumFileImportAccountMappingTypes.FixedBookingAccount,\r\n Text: 'Cuenta de reservas fija'\r\n },\r\n {\r\n SortOrder: 5,\r\n Value: EnumFileImportAccountMappingTypes.AskEveryTime,\r\n Text: 'Preguntar cada vez'\r\n }\r\n ],\r\n AccountMappingTypes: [\r\n {\r\n SortOrder: 1,\r\n Value: EnumFileImportAccountMappingTypes.ByBookingAccount,\r\n Text: 'Por cuenta de reservas'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumFileImportAccountMappingTypes.ByAccountNumber,\r\n Text: 'Por número de cuenta'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumFileImportAccountMappingTypes.ByAccountAndCurrency,\r\n Text: 'Por cuenta + divisa'\r\n },\r\n {\r\n SortOrder: 5,\r\n Value: EnumFileImportAccountMappingTypes.AskEveryTime,\r\n Text: 'Preguntar cada vez'\r\n }\r\n ],\r\n FileColumns: [\r\n {\r\n SortOrder: 1,\r\n Value: EnumFileImportColumns.A,\r\n Text: 'A'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumFileImportColumns.B,\r\n Text: 'B'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumFileImportColumns.C,\r\n Text: 'C'\r\n },\r\n {\r\n SortOrder: 4,\r\n Value: EnumFileImportColumns.D,\r\n Text: 'D'\r\n },\r\n {\r\n SortOrder: 5,\r\n Value: EnumFileImportColumns.E,\r\n Text: 'E'\r\n },\r\n {\r\n SortOrder: 6,\r\n Value: EnumFileImportColumns.F,\r\n Text: 'F'\r\n },\r\n {\r\n SortOrder: 7,\r\n Value: EnumFileImportColumns.G,\r\n Text: 'G'\r\n },\r\n {\r\n SortOrder: 8,\r\n Value: EnumFileImportColumns.H,\r\n Text: 'H'\r\n },\r\n {\r\n SortOrder: 9,\r\n Value: EnumFileImportColumns.I,\r\n Text: 'I'\r\n },\r\n {\r\n SortOrder: 10,\r\n Value: EnumFileImportColumns.J,\r\n Text: 'J'\r\n },\r\n {\r\n SortOrder: 11,\r\n Value: EnumFileImportColumns.K,\r\n Text: 'K'\r\n },\r\n {\r\n SortOrder: 12,\r\n Value: EnumFileImportColumns.L,\r\n Text: 'L'\r\n },\r\n {\r\n SortOrder: 13,\r\n Value: EnumFileImportColumns.M,\r\n Text: 'M'\r\n },\r\n {\r\n SortOrder: 14,\r\n Value: EnumFileImportColumns.N,\r\n Text: 'N'\r\n },\r\n {\r\n SortOrder: 15,\r\n Value: EnumFileImportColumns.O,\r\n Text: 'O'\r\n },\r\n {\r\n SortOrder: 16,\r\n Value: EnumFileImportColumns.P,\r\n Text: 'P'\r\n },\r\n {\r\n SortOrder: 17,\r\n Value: EnumFileImportColumns.Q,\r\n Text: 'Q'\r\n },\r\n {\r\n SortOrder: 18,\r\n Value: EnumFileImportColumns.R,\r\n Text: 'R'\r\n },\r\n {\r\n SortOrder: 19,\r\n Value: EnumFileImportColumns.S,\r\n Text: 'S'\r\n },\r\n {\r\n SortOrder: 20,\r\n Value: EnumFileImportColumns.T,\r\n Text: 'T'\r\n },\r\n {\r\n SortOrder: 21,\r\n Value: EnumFileImportColumns.U,\r\n Text: 'U'\r\n },\r\n {\r\n SortOrder: 22,\r\n Value: EnumFileImportColumns.V,\r\n Text: 'V'\r\n },\r\n {\r\n SortOrder: 23,\r\n Value: EnumFileImportColumns.W,\r\n Text: 'W'\r\n },\r\n {\r\n SortOrder: 24,\r\n Value: EnumFileImportColumns.X,\r\n Text: 'X'\r\n },\r\n {\r\n SortOrder: 25,\r\n Value: EnumFileImportColumns.Y,\r\n Text: 'Y'\r\n },\r\n {\r\n SortOrder: 26,\r\n Value: EnumFileImportColumns.Z,\r\n Text: 'Z'\r\n }\r\n ],\r\n CurrencyDenominations: [\r\n {\r\n SortOrder: 1,\r\n Value: EnumFileImportCurrencyDenominations.Dollar,\r\n Text: 'Dólar'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumFileImportCurrencyDenominations.Cent,\r\n Text: 'Céntimo'\r\n }\r\n ],\r\n ExportTypes: [\r\n {\r\n index: 0,\r\n Text: 'InEmail',\r\n Value: EnumExportType.InEmail\r\n },\r\n {\r\n index: 1,\r\n Text: 'Excel',\r\n Value: EnumExportType.Excel\r\n },\r\n {\r\n index: 2,\r\n Text: 'Ambos',\r\n Value: EnumExportType.Both\r\n },\r\n ],\r\n PositiveNegatives: [\r\n {\r\n index: 0,\r\n Text: 'Positivo',\r\n Value: EnumPositiveNegative.Positive\r\n },\r\n {\r\n index: 1,\r\n Text: 'Negativo',\r\n Value: EnumPositiveNegative.Negative\r\n },\r\n {\r\n index: 2,\r\n Text: 'Ambos',\r\n Value: EnumPositiveNegative.Both\r\n },\r\n {\r\n index: 3,\r\n Text: 'Ambos sin cero',\r\n Value: EnumPositiveNegative.BothWithoutZero\r\n },\r\n ],\r\n JournalEntrySources: [\r\n {\r\n SortOrder: 1,\r\n Value: EnumJournalEntrySources.TransactionAutoPosting,\r\n Text: 'En función de las transacciones'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumJournalEntrySources.Loans,\r\n Text: 'Préstamos'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumJournalEntrySources.CC,\r\n Text: 'Procesamiento de tarjetas de crédito'\r\n },\r\n {\r\n SortOrder: 4,\r\n Value: EnumJournalEntrySources.CCAutoPosting,\r\n Text: 'En función de transacciones con tarjetas de crédito'\r\n },\r\n ],\r\n ActivityTypes: [\r\n {\r\n SortOrder: 1,\r\n Value: EnumAdminActivityRecordType.ViewOrganization,\r\n Text: 'Ver organización'\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: EnumAdminActivityRecordType.LoginImpersonation,\r\n Text: 'Personificación del acceso'\r\n }\r\n ],\r\n AdminAccessRequestStatuses: [\r\n {\r\n SortOrder: 1,\r\n Value: EnumAdminAccessRequestStatus.Requested,\r\n Text: 'Solicitado'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumAdminAccessRequestStatus.Approved,\r\n Text: 'Aprobado'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumAdminAccessRequestStatus.Denied,\r\n Text: 'Denegado'\r\n },\r\n {\r\n SortOrder: 4,\r\n Value: EnumAdminAccessRequestStatus.Expired,\r\n Text: 'Caducado'\r\n },\r\n {\r\n SortOrder: 5,\r\n Value: EnumAdminAccessRequestStatus.Canceled,\r\n Text: 'Cancelado'\r\n }\r\n ],\r\n AdminAccessRequestDurationTypes: [\r\n {\r\n SortOrder: 1,\r\n Value: EnumAdminAccessRequestDurationType.Minutes30,\r\n Text: '30 minutos'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumAdminAccessRequestDurationType.Hours2,\r\n Text: '2 horas'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumAdminAccessRequestDurationType.Hours4,\r\n Text: '4 horas'\r\n },\r\n {\r\n SortOrder: 4,\r\n Value: EnumAdminAccessRequestDurationType.Hours12,\r\n Text: '12 hours'\r\n },\r\n {\r\n SortOrder: 5,\r\n Value: EnumAdminAccessRequestDurationType.Hours24,\r\n Text: '24 horas'\r\n },\r\n {\r\n SortOrder: 6,\r\n Value: EnumAdminAccessRequestDurationType.Days7,\r\n Text: '7 días'\r\n },\r\n {\r\n SortOrder: 7,\r\n Value: EnumAdminAccessRequestDurationType.Days30,\r\n Text: '30 días'\r\n }\r\n ],\r\n TransactionCategoryTabs: [\r\n {\r\n index: 0,\r\n text: 'Reglas relacionadas',\r\n },\r\n {\r\n index: 1,\r\n text: 'Plantillas de contabilización',\r\n },\r\n ],\r\n ParentCategoryTabs: [\r\n {\r\n index: 0,\r\n text: 'Categorías de transacción',\r\n },\r\n {\r\n index: 1,\r\n text: 'Categorías de previsión',\r\n },\r\n {\r\n index: 2,\r\n text: 'Categorías estáticas',\r\n }\r\n ],\r\n CCContractTabs: [\r\n {\r\n index: 0,\r\n text: 'Mapa de transferencias',\r\n },\r\n {\r\n index: 1,\r\n text: 'Mapa de facturas',\r\n },\r\n ],\r\n JournalEntryStatuses: [\r\n {\r\n SortOrder: 1,\r\n Value: EnumJournalEntryStatuses.Draft,\r\n Text: 'Borrador'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumJournalEntryStatuses.Exception,\r\n Text: 'Excepción'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumJournalEntryStatuses.ExportedManually,\r\n Text: 'Exportado manualmente'\r\n },\r\n {\r\n SortOrder: 4,\r\n Value: EnumJournalEntryStatuses.Posted,\r\n Text: 'Entrada en el diario creada'\r\n },\r\n {\r\n SortOrder: 5,\r\n Value: EnumJournalEntryStatuses.PostedAndReconcilled,\r\n Text: 'Entrada en el diario creada y conciliada'\r\n },\r\n {\r\n SortOrder: 6,\r\n Value: EnumJournalEntryStatuses.PostedInJournalVoucher,\r\n Text: 'Cupón del diario creado'\r\n },\r\n {\r\n SortOrder: 7,\r\n Value: EnumJournalEntryStatuses.SkippedAlreadyReconcilled,\r\n Text: 'Omitido. Ya conciliado'\r\n },\r\n ],\r\n BookingAccountSelectionMethods:\r\n [\r\n {\r\n SortOrder: 1,\r\n Value: EnumBookingAccountSelectionMethods.TextInput,\r\n Text: 'Entrada manual'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumBookingAccountSelectionMethods.ListRecommend,\r\n Text: 'Elegir de la lista sin validación'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumBookingAccountSelectionMethods.ListValidate,\r\n Text: 'Elegir de la lista'\r\n },\r\n ],\r\n BankPassTwoFactorMethods: [{\r\n SortOrder: 1,\r\n Value: EnumBankPassTwoFactorMethod.None,\r\n Text: 'Teléfono principal para Finsite'\r\n }, {\r\n SortOrder: 2,\r\n Value: EnumBankPassTwoFactorMethod.DedicatedPhone,\r\n Text: 'Teléfono dedicado'\r\n }, {\r\n SortOrder: 3,\r\n Value: EnumBankPassTwoFactorMethod.CustomerManualEntry,\r\n Text: 'Entrada manual de clientes'\r\n }\r\n ],\r\n LoanPaymentInterestPrincipalType: [\r\n {\r\n Text: 'Interés',\r\n Value: EnumLoanPaymentInterestPrincipalType.Interest\r\n },\r\n {\r\n Text: 'Principal',\r\n Value: EnumLoanPaymentInterestPrincipalType.Principal\r\n },\r\n {\r\n Text: 'Interés/Principal',\r\n Value: EnumLoanPaymentInterestPrincipalType.InterestPrincipal\r\n },\r\n {\r\n Text: 'Acumulación de principal',\r\n Value: EnumLoanPaymentInterestPrincipalType.PrincipalAcumulation\r\n }\r\n ],\r\n FutureChequeStatuses:\r\n [\r\n {\r\n Value: EnumFutureChequeStatus.Deposited,\r\n Text: 'Depositado'\r\n },\r\n {\r\n Value: EnumFutureChequeStatus.Future,\r\n Text: 'Futuro'\r\n }\r\n ],\r\n NotificationBalanceSummaryTypes:\r\n [\r\n {\r\n SortOrder: 1,\r\n Value: EnumNotificationBalanceSummaryType.Total,\r\n Text: 'Cantidad total'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumNotificationBalanceSummaryType.CurrentOnly,\r\n Text: 'Solo corriente'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumNotificationBalanceSummaryType.None,\r\n Text: 'Ninguno'\r\n },\r\n ],\r\n Days: [\r\n {\r\n SortOrder: 1,\r\n Text: 'Domingo',\r\n Value: 1\r\n },\r\n {\r\n SortOrder: 2,\r\n Text: 'Lunes',\r\n Value: 2\r\n }, {\r\n SortOrder: 3,\r\n Text: 'Martes',\r\n Value: 3\r\n }, {\r\n SortOrder: 4,\r\n Text: 'Miércoles',\r\n Value: 4\r\n }, {\r\n SortOrder: 5,\r\n Text: 'Jueves',\r\n Value: 5\r\n }, {\r\n SortOrder: 6,\r\n Text: 'Viernes',\r\n Value: 6\r\n },\r\n ],\r\n WeekDays: [\r\n {\r\n SortOrder: 1,\r\n Text: 'Domingo',\r\n Value: 1\r\n },\r\n {\r\n SortOrder: 2,\r\n Text: 'Lunes',\r\n Value: 2\r\n }, {\r\n SortOrder: 3,\r\n Text: 'Martes',\r\n Value: 3\r\n }, {\r\n SortOrder: 4,\r\n Text: 'Miércoles',\r\n Value: 4\r\n }, {\r\n SortOrder: 5,\r\n Text: 'Jueves',\r\n Value: 5\r\n }, {\r\n SortOrder: 6,\r\n Text: 'Viernes',\r\n Value: 6\r\n }, {\r\n SortOrder: 7,\r\n Text: 'Sábado',\r\n Value: 7\r\n }\r\n ],\r\n NotificationLanguages: [{\r\n SortOrder: 1,\r\n Value: EnumLanguage.Hebrew,\r\n Text: 'Hebreo'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumLanguage.English,\r\n Text: 'Inglés'\r\n }],\r\n BookingAccountTypes: [{\r\n SortOrder: 1,\r\n Value: EnumPostingTemplateBookingAccountTypes.LedgerAccount,\r\n Text: 'Cuenta de libro contable'\r\n }, {\r\n SortOrder: 2,\r\n Value: EnumPostingTemplateBookingAccountTypes.BusinessPartner,\r\n Text: 'Socio comercial'\r\n }],\r\n DateRelevance: [{\r\n SortOrder: 1,\r\n Value: EnumForecastDateRelevance.Past,\r\n Text: 'Pasado'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumForecastDateRelevance.NotReconcilledAccounting,\r\n Text: 'Transacciones contables pasadas no pagadas/conciliadas'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumForecastDateRelevance.NotReconcilledForecast,\r\n Text: 'Transacciones manuales anteriores no pagadas/conciliadas'\r\n },\r\n {\r\n SortOrder: 4,\r\n Value: EnumForecastDateRelevance.Future,\r\n Text: 'Futuro'\r\n }],\r\n SystemSource: [{\r\n SortOrder: 1,\r\n Value: EnumForecastSystemSource.AccountingForecast,\r\n Text: 'Previsión contable'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumForecastSystemSource.CCExpense,\r\n Text: 'Gastos'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumForecastSystemSource.CCIncome,\r\n Text: 'Ingresos'\r\n },\r\n {\r\n SortOrder: 4,\r\n Value: EnumForecastSystemSource.Deposits,\r\n Text: 'Depósitos'\r\n },\r\n {\r\n SortOrder: 5,\r\n Value: EnumForecastSystemSource.ForecastOperation,\r\n Text: 'Operación de previsión'\r\n },\r\n {\r\n SortOrder: 6,\r\n Value: EnumForecastSystemSource.Loans,\r\n Text: 'Préstamos'\r\n },\r\n {\r\n SortOrder: 7,\r\n Value: EnumForecastSystemSource.Transactions,\r\n Text: 'Transacciones'\r\n }],\r\n RecommendationPeriodTypes: [\r\n {\r\n SortOrder: 1,\r\n Value: EnumRecommendationPeriodType.Daily,\r\n Text: 'Diariamente'\r\n }, {\r\n SortOrder: 2,\r\n Value: EnumRecommendationPeriodType.Weekly,\r\n Text: 'Semanalmente'\r\n }, {\r\n SortOrder: 3,\r\n Value: EnumRecommendationPeriodType.BiWeekly,\r\n Text: 'Cada dos semanas'\r\n },\r\n {\r\n SortOrder: 4,\r\n Value: EnumRecommendationPeriodType.Monthly,\r\n Text: 'Mensualmente'\r\n },\r\n {\r\n SortOrder: 5,\r\n Value: EnumRecommendationPeriodType.BiMonthly,\r\n Text: 'Cada dos meses'\r\n }, {\r\n SortOrder: 6,\r\n Value: EnumRecommendationPeriodType.Quarterly,\r\n Text: 'Trimestralmente'\r\n }, {\r\n SortOrder: 7,\r\n Value: EnumRecommendationPeriodType.Variable,\r\n Text: 'Variable'\r\n }\r\n ],\r\n CashflowChartTabs: [\r\n {\r\n index: 0,\r\n value: 'income_expences',\r\n text: 'Ingresos y gastos'\r\n }, {\r\n index: 1,\r\n value: 'balance_growth',\r\n text: 'Crecimiento del saldo'\r\n }, {\r\n index: 2,\r\n value: 'forecast_operations',\r\n text: 'Operaciones de previsión'\r\n }\r\n ],\r\n FutureForecastGroupBy: [\r\n {\r\n SortOrder: 1,\r\n Text: 'Categorías',\r\n Value: EnumFutureForecastGroupBy.Category\r\n },\r\n {\r\n SortOrder: 2,\r\n Text: 'Categorías superiores',\r\n Value: EnumFutureForecastGroupBy.ParentCategory\r\n },\r\n {\r\n SortOrder: 3,\r\n Text: 'Fuente de datos',\r\n Value: EnumFutureForecastGroupBy.DataSource\r\n }\r\n ],\r\n GlobalDownloadStatuses: [\r\n {\r\n Text: 'Nuevo',\r\n Value: EnumDownloadRetryStatus.New\r\n },\r\n {\r\n Text: 'Hecho',\r\n Value: EnumDownloadRetryStatus.Done\r\n }\r\n ],\r\n GenerationJETypes: [\r\n {\r\n SortOrder: 1,\r\n Text: 'Transacciones',\r\n Value: EnumGenerationTypeJournalEntry.TransactionsAutoPosting\r\n },\r\n {\r\n SortOrder: 2,\r\n Text: 'Tarjetas de crédito',\r\n Value: EnumGenerationTypeJournalEntry.CCAutoPosting\r\n }\r\n ],\r\n TransactionViews: [\r\n {\r\n Text: 'Vista mensual',\r\n Value: 0\r\n },\r\n {\r\n Text: 'Vista detallada',\r\n Value: 1\r\n }\r\n ],\r\n BillingContractsReportModules: [\r\n {\r\n Text: 'Entradas del diario',\r\n Value: EnumBillingContractsReportModule.JournalEntries\r\n },\r\n {\r\n Text: 'Flujo de caja',\r\n Value: EnumBillingContractsReportModule.Cashflow\r\n },\r\n {\r\n Text: 'Préstamos',\r\n Value: EnumBillingContractsReportModule.Loans\r\n },\r\n {\r\n Text: 'Base',\r\n Value: EnumBillingContractsReportModule.Base\r\n }\r\n ],\r\n MobileDashboardTabs: [\r\n {\r\n index: 0,\r\n text: 'Detalles del saldo',\r\n Value: 'BalanceDetails'\r\n },\r\n {\r\n index: 1,\r\n text: 'Transacciones por categoría',\r\n Value: 'TransactionsByCategory'\r\n },\r\n {\r\n index: 2,\r\n text: 'Activos',\r\n Value: 'Assets'\r\n },\r\n {\r\n index: 3,\r\n text: 'Pasivos',\r\n Value: 'Liabilities'\r\n },\r\n {\r\n index: 4,\r\n text: 'Últimas transacciones',\r\n Value: 'LastTransactions'\r\n }\r\n ],\r\n TransactionsGroupOptions: [\r\n {\r\n index: 0,\r\n text: 'Crédito',\r\n Value: 'Credit'\r\n },\r\n {\r\n index: 1,\r\n text: 'Débito',\r\n Value: 'Debit'\r\n }\r\n ],\r\n BalanceDetailsSortTypes: [\r\n {\r\n Text: 'Ordenar por nombre',\r\n Value: EnumBalanceDetailsSortType.SortByName\r\n },\r\n {\r\n Text: 'Ordenar por suma',\r\n Value: EnumBalanceDetailsSortType.SortBySum\r\n }\r\n ],\r\n RelevantFilteringTypes: [\r\n {\r\n Text: 'Ninguno',\r\n Value: EnumRelevantFilteringTypes.None\r\n },\r\n {\r\n Text: 'Cuentas',\r\n Value: EnumRelevantFilteringTypes.Accounts\r\n },\r\n {\r\n Text: 'Empresas',\r\n Value: EnumRelevantFilteringTypes.Companies\r\n }\r\n ],\r\n TransactionPeriodTypes:\r\n [\r\n {\r\n SortOrder: 1,\r\n Value: EnumPeriod.Day,\r\n Text: 'Día'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumPeriod.Month,\r\n Text: 'Mes'\r\n },\r\n ],\r\n IncomingPaymentStatuses: [\r\n {\r\n Text: 'Ninguna coincidencia',\r\n Value: EnumIncomingPaymentStatus.MatchNone\r\n },\r\n {\r\n Text: 'Coincidencia de socio comercial',\r\n Value: EnumIncomingPaymentStatus.MatchBusinessPartner\r\n },\r\n {\r\n Text: 'Coincidencia completa',\r\n Value: EnumIncomingPaymentStatus.MatchFull\r\n },\r\n {\r\n Text: 'Pendiente',\r\n Value: EnumIncomingPaymentStatus.Pending\r\n },\r\n {\r\n Text: 'Publicado',\r\n Value: EnumIncomingPaymentStatus.Posted\r\n },\r\n {\r\n Text: 'Irrelevante',\r\n Value: EnumIncomingPaymentStatus.Irrelevant\r\n },\r\n {\r\n Text: 'Excepción',\r\n Value: EnumIncomingPaymentStatus.Exception\r\n },\r\n {\r\n Text: 'Guardado',\r\n Value: EnumIncomingPaymentStatus.Saved\r\n },\r\n {\r\n Text: 'Gestionar manualmente',\r\n Value: EnumIncomingPaymentStatus.HandleManually\r\n },\r\n ],\r\n IncomingPaymentDocumentTypes: [\r\n {\r\n Text: 'Documento',\r\n Value: EnumIncomingPaymentInvoiceLineTypes.Document\r\n },\r\n {\r\n Text: 'Entrada en el diario contable',\r\n Value: EnumIncomingPaymentInvoiceLineTypes.AccountingJournalEntry\r\n }\r\n ],\r\n IncomingPaymentDocumentType: [\r\n {\r\n Text: 'Factura',\r\n Value: EnumIncomingPaymentDocumentType.Invoice\r\n },\r\n {\r\n Text: 'Reembolso',\r\n Value: EnumIncomingPaymentDocumentType.Refund\r\n },\r\n {\r\n Text: 'Entrada en el diario',\r\n Value: EnumIncomingPaymentDocumentType.JournalEntry\r\n }\r\n ],\r\n IncomingPaymentProcessingActions: [\r\n {\r\n Text: 'Guardar y publicar',\r\n Value: IncomingPaymentActions.Post\r\n },\r\n {\r\n Text: 'Gestionar manualmente',\r\n Value: IncomingPaymentActions.HandleManually\r\n },\r\n {\r\n Text: 'Guardar',\r\n Value: IncomingPaymentActions.Save\r\n },\r\n {\r\n Text: 'Pasar al Siguiente',\r\n Value: IncomingPaymentActions.MoveToTheNext\r\n },\r\n {\r\n Text: 'Marcar como Irrelevante',\r\n Value: IncomingPaymentActions.MarkAsIrrelevant\r\n }\r\n ],\r\n IncomingPaymentUploadLevel: [\r\n {\r\n Text: 'Ninguno',\r\n Value: EnumIncomingPaymentUploadLevel.None\r\n },\r\n {\r\n Text: 'Pago recibido',\r\n Value: EnumIncomingPaymentUploadLevel.IncomingPayment\r\n },\r\n {\r\n Text: 'Pago entrante y conciliación',\r\n Value: EnumIncomingPaymentUploadLevel.IncomingPaymentAndReconcilliation\r\n },\r\n ],\r\n IncomingPaymentMarkIrrelevantAction: [\r\n {\r\n Text: 'Marcar como Irrelevante',\r\n Value: 'SingleRecord'\r\n },\r\n {\r\n Text: 'Marcar como Irrelevante y Regular',\r\n Value: 'Rule'\r\n }\r\n ],\r\n JournalExportTypes: [\r\n {\r\n Value: EnumJournalExportType.Automatic,\r\n Text: 'Automático'\r\n },\r\n {\r\n Value: EnumJournalExportType.Movein1,\r\n Text: 'Movein Hash'\r\n },\r\n {\r\n Value: EnumJournalExportType.Movein2,\r\n Text: 'Movein Priority'\r\n }\r\n ],\r\n CashflowStaticCategories: [\r\n {\r\n SortOrder: 1,\r\n Value: EnumForecastSystemSource.CCExpense,\r\n Text: 'Gastos de la tarjeta de crédito'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumForecastSystemSource.CCIncome,\r\n Text: 'Ingresos por tarjeta de crédito'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumForecastSystemSource.Loans,\r\n Text: 'Préstamos'\r\n },\r\n {\r\n SortOrder: 4,\r\n Value: EnumForecastSystemSource.Deposits,\r\n Text: 'Depósitos'\r\n },\r\n {\r\n SortOrder: 5,\r\n Value: EnumForecastSystemSource.FutureCheques,\r\n Text: 'Cheques futuros'\r\n }],\r\n UploadTypes:\r\n [\r\n {\r\n SortOrder: 1,\r\n Value: EnumUploadType.New,\r\n Text: 'Nuevo'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumUploadType.Dates,\r\n Text: 'Fechas'\r\n },\r\n ],\r\n SumSides:\r\n [\r\n {\r\n Value: EnumSumSide.Debit,\r\n Text: 'Débito'\r\n },\r\n {\r\n Value: EnumSumSide.Credit,\r\n Text: 'Crédito'\r\n }\r\n ],\r\n LoanHandlingTypes:\r\n [\r\n {\r\n SortOrder: 1,\r\n Value: EnumLoanHandlingType.LoansModule,\r\n Text: 'Módulo de préstamos'\r\n },\r\n {\r\n SortOrder: 2,\r\n Value: EnumLoanHandlingType.BankInformation,\r\n Text: 'Información bancaria'\r\n },\r\n {\r\n SortOrder: 3,\r\n Value: EnumLoanHandlingType.Combine,\r\n Text: 'Combinar'\r\n }\r\n ],\r\n ExportSFTPGroupingModes: [\r\n {\r\n Value: EnumExportSFTPGroupingMode.Single,\r\n Text: 'Archivo único'\r\n },\r\n {\r\n Value: EnumExportSFTPGroupingMode.PerBookingAccount,\r\n Text: 'Archivo por cuenta de reservas'\r\n },\r\n {\r\n Value: EnumExportSFTPGroupingMode.PerAccountSubtype,\r\n Text: 'Archivo por subtipo de cuenta'\r\n },\r\n {\r\n Value: EnumExportSFTPGroupingMode.PerCompany,\r\n Text: 'Archivo por empresa'\r\n }\r\n\r\n ],\r\n CategoryClassificationFieldTypes: [\r\n {\r\n Value: EnumCategoryClassificationFieldType.Name,\r\n Text: 'Nombre',\r\n SortOrder: 1\r\n },\r\n {\r\n Value: EnumCategoryClassificationFieldType.Type,\r\n Text: 'Tipo',\r\n SortOrder: 2\r\n },\r\n {\r\n Value: EnumCategoryClassificationFieldType.LinkageType,\r\n Text: 'Tipo de enlace',\r\n SortOrder: 3\r\n }\r\n ],\r\n BalanceTypes: [\r\n {\r\n Value: 'Actual',\r\n Text: 'Real',\r\n SortOrder: 1\r\n },\r\n {\r\n Value: 'Nominal',\r\n Text: 'Nominal',\r\n SortOrder: 2\r\n }\r\n ],\r\n BankPassAccessTypes:\r\n [\r\n {\r\n Text: 'La web del Banco',\r\n Value: EnumBankPassAccessTypes.Scrapping\r\n },\r\n {\r\n Text: 'Importación de archivos',\r\n Value: EnumBankPassAccessTypes.FileImport\r\n },\r\n // {\r\n // Text: 'Open Banking',\r\n // Value: EnumBankPassAccessTypes.PSD\r\n // },\r\n {\r\n Text: 'Plaid',\r\n Value: EnumBankPassAccessTypes.Plaid\r\n }\r\n ],\r\n BankPassAutoDiscoverModes:\r\n [\r\n {\r\n Text: 'Ninguno',\r\n Value: EnumBankPassAutoDiscoverModes.None\r\n },\r\n {\r\n Text: 'Bajo demanda',\r\n Value: EnumBankPassAutoDiscoverModes.OnDemand\r\n },\r\n {\r\n Text: 'Automático',\r\n Value: EnumBankPassAutoDiscoverModes.Automatic\r\n }\r\n ],\r\n ExternalAccountMappingStatus:\r\n [\r\n {\r\n Text: 'Mapeado',\r\n Value: EnumExternalAccountMappingStatus.Mapped\r\n },\r\n {\r\n Text: 'Mapeado en otro pase bancario',\r\n Value: EnumExternalAccountMappingStatus.MappedInAnother\r\n },\r\n {\r\n Text: 'No mapeado',\r\n Value: EnumExternalAccountMappingStatus.NotMapped\r\n }\r\n ],\r\n ScheduleTypes:\r\n [\r\n {\r\n Text: '$$$Daily/Weekly',\r\n Value: EnumNotificationScheduleType.DailyWeekly\r\n },\r\n {\r\n Text: '$$$Monthly',\r\n Value: EnumNotificationScheduleType.Monthly\r\n },\r\n {\r\n Text: '$$$Yearly',\r\n Value: EnumNotificationScheduleType.Yearly\r\n }\r\n ],\r\n DeploymentTabs:\r\n [\r\n {\r\n index: 0,\r\n text: '$$$Main',\r\n Value: 'Main'\r\n },\r\n {\r\n index: 1,\r\n text: '$$$Current',\r\n Value: 'Current'\r\n },\r\n {\r\n index: 2,\r\n text: '$$$CC',\r\n Value: 'CC'\r\n }\r\n ],\r\n};\r\n","\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { Scenario } from './../entities/scenario.entity';\r\n@Injectable()\r\nexport class ScenarioEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(api: APIGatewayService) {super(\"Scenario\", api);}\r\n\t\r\n\r\n public ListEx(OrganizationID: number, LoadActive: boolean, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'ListEx', {OrganizationID: OrganizationID, LoadActive: LoadActive, options:options?.GetLoadOptions()} );\r\n }\r\n}\r\n\r\n","import { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ScenarioEndpoint } from '../../../_proxy/endpoints/scenario.endpoint';\r\nimport { Scenario } from '../../../_proxy/entities/scenario.entity';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\n\r\nclass State extends BaseState {\r\n LoadActive: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-scenario-list',\r\n templateUrl: './scenario-list.component.html'\r\n})\r\nexport class ScenarioListComponent extends BaseComponent {\r\n\r\n @Input() OrganizationID: number;\r\n @Input() IsAutoHeight: boolean = false;\r\n @Output() OnUpdateCount = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService,\r\n private scenarioEndpoint: ScenarioEndpoint) {\r\n super(A, 'ScenarioListComponent', State);\r\n }\r\n\r\n protected override OnInitState(): void {\r\n this.State.LoadActive = true;\r\n }\r\n\r\n 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 == Scenario) this.LoadDataSource();\r\n }\r\n\r\n OnIsShowGlobalChanges() {\r\n this.LoadDataSource();\r\n }\r\n\r\n OnAdd() {\r\n this.Navigate(['/pages/scenario/new'], { OrganizationID: this.OrganizationID });\r\n }\r\n\r\n LoadDataSource() {\r\n this.DataSources['Scenarios'] = new DataSourceCustomAction((options: DataLoadOptions) => \r\n this.scenarioEndpoint.ListEx(this.OrganizationID, this.State.LoadActive, options), null, (data) => {\r\n this.OnUpdateCount.emit(data.length);\r\n });\r\n this.DS('Scenarios').Reload();\r\n }\r\n\r\n GetLinkParams() {\r\n return { OrganizationID: this.OrganizationID };\r\n }\r\n\r\n OnLoadActive(value: boolean) {\r\n this.State.LoadActive = value;\r\n this.LoadDataSource();\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { Scenario } from '@kraken/_proxy/entities/scenario.entity';\r\n\r\nclass State extends BaseState {\r\n ShowActiveOnly: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-scenario-grid',\r\n templateUrl: './scenario-grid.component.html'\r\n})\r\nexport class ScenarioGridComponent extends BaseGridComponent {\r\n @Input() OrganizationID: number;\r\n @Output() OnLoadActive = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'ScenarioGridComponent', Scenario, State);\r\n }\r\n\r\n protected override OnInitState() {\r\n this.State.ShowActiveOnly = true;\r\n this.OnLoadActive.emit(this.State.ShowActiveOnly);\r\n }\r\n\r\n OnNavigate(e) {\r\n this.Navigate(['/pages/scenario', e.data.EntryID], { OrganizationID: this.OrganizationID });\r\n }\r\n \r\n OnToolbarPreparing(e) {\r\n e.toolbarOptions.items.unshift({\r\n location: 'after',\r\n widget: 'dxCheckBox',\r\n isCustom: true,\r\n options: {\r\n text: this.RC('lblShowActiveOnly'),\r\n value: this.State.ShowActiveOnly,\r\n onValueChanged: (e) => {\r\n this.State.ShowActiveOnly = e.value;\r\n this.OnLoadActive.emit(this.State.ShowActiveOnly);\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\";","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 { OrganizationEndpoint } from \"../../_proxy/endpoints/organization.endpoint\";\r\nimport { BaseState, BaseEntityResponse } from \"@m4u-angular/base/entities/BaseEntities\";\r\nimport { Organization } from \"../../_proxy/entities/organization.entity\";\r\nimport { EnumPageDisplayModes } from \"@m4u-angular/core/framework/sysenums.enum\";\r\nimport { ScenarioEndpoint } from \"../../_proxy/endpoints/scenario.endpoint\";\r\nimport { Scenario } from \"../../_proxy/entities/scenario.entity\";\r\nimport { ContextMenuElement, ToolbarSettings } from \"@m4u-angular/base/classes/BaseClasses\";\r\n\r\nclass State extends BaseState {\r\n Organization: Organization = new Organization;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-scenario',\r\n templateUrl: './scenario.component.html'\r\n})\r\nexport class ScenarioComponent extends BasePageCRUDComponent\r\n{\r\n constructor(A: ServiceBagService, private endpoint: ScenarioEndpoint, private organizationEndpoint: OrganizationEndpoint) {\r\n super(A, 'ScenarioComponent', Scenario, State, endpoint, EnumPageDisplayModes.Window);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.Do(this.organizationEndpoint.Get(this.QueryParams.OrganizationID), false, (response: BaseEntityResponse) => this.State.Organization = response.Entity);\r\n }\r\n\r\n override OnEntityInitObjectName() {\r\n return this.Entity && this.Entity.Name;\r\n }\r\n\r\n override OnEntityNew() {\r\n this.Entity.IsActive = true;\r\n this.Entity.IsDefault = false;\r\n this.Entity.OrganizationID = this.QueryParams.OrganizationID;\r\n }\r\n\r\n override OnEntitySaved() {\r\n this.NavigateBack();\r\n }\r\n\r\n override OnEntityDeleted()\r\n {\r\n this.NavigateBack();\r\n }\r\n \r\n override OnInitContextMenus(): ContextMenuElement[] {\r\n if (this.IsAddMode) return undefined;\r\n const menus: ContextMenuElement[] =\r\n [\r\n {\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 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}","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\";","\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { ProbabilityLevel } from './../entities/probabilitylevel.entity';\r\n@Injectable()\r\nexport class ProbabilityLevelEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(api: APIGatewayService) {super(\"ProbabilityLevel\", api);}\r\n\t\r\n\r\n public ListEx(OrganizationID: number, LoadActive: boolean, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'ListEx', {OrganizationID: OrganizationID, LoadActive: LoadActive, options:options?.GetLoadOptions()} );\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 { OrganizationEndpoint } from \"../../_proxy/endpoints/organization.endpoint\";\r\nimport { BaseState, BaseEntityResponse } from \"@m4u-angular/base/entities/BaseEntities\";\r\nimport { Organization } from \"../../_proxy/entities/organization.entity\";\r\nimport { EnumPageDisplayModes } from \"@m4u-angular/core/framework/sysenums.enum\";\r\nimport { ProbabilityLevel } from \"../../_proxy/entities/probabilitylevel.entity\";\r\nimport { ProbabilityLevelEndpoint } from \"../../_proxy/endpoints/probabilitylevel.endpoint\";\r\nimport { ContextMenuElement, ToolbarSettings } from \"@m4u-angular/base/classes/BaseClasses\";\r\n\r\nclass State extends BaseState {\r\n Organization: Organization = new Organization;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-probability-level',\r\n templateUrl: './probability-level.component.html'\r\n})\r\nexport class ProbabilityLevelComponent extends BasePageCRUDComponent\r\n{\r\n constructor(A: ServiceBagService, private endpoint: ProbabilityLevelEndpoint, private organizationEndpoint: OrganizationEndpoint) {\r\n super(A, 'ProbabilityLevelComponent', ProbabilityLevel, State, endpoint, EnumPageDisplayModes.Window);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.Do(this.organizationEndpoint.Get(this.QueryParams.OrganizationID), false, (response: BaseEntityResponse) => this.State.Organization = response.Entity);\r\n }\r\n\r\n override OnEntityInitObjectName() {\r\n return this.Entity && this.Entity.Name;\r\n }\r\n\r\n override OnEntityNew() {\r\n this.Entity.IsActive = true;\r\n this.Entity.OrganizationID = this.QueryParams.OrganizationID;\r\n }\r\n\r\n override OnEntitySaved() {\r\n this.NavigateBack();\r\n }\r\n \r\n \r\n override OnInitContextMenus(): ContextMenuElement[] {\r\n if (this.IsAddMode) return undefined;\r\n const menus: ContextMenuElement[] =\r\n [\r\n {\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 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}","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { ProbabilityLevel } from '@kraken/_proxy/entities/probabilitylevel.entity';\r\nimport { AccessService } from '@kraken/services/access.service';\r\n\r\nclass State extends BaseState {\r\n ShowActiveOnly: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-probability-level-grid',\r\n templateUrl: './probability-level-grid.component.html'\r\n})\r\nexport class ProbabilityLevelGridComponent extends BaseGridComponent {\r\n\r\n @Input() OrganizationID: number;\r\n @Output() OnLoadActive = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService,\r\n private accessService: AccessService) { \r\n super(A, 'ProbabilitylevelGridComponent', ProbabilityLevel, State);\r\n }\r\n\r\n protected override OnInitState() {\r\n this.State.ShowActiveOnly = true;\r\n this.OnLoadActive.emit(this.State.ShowActiveOnly);\r\n }\r\n\r\n OnNavigate(e) {\r\n if(e.data.OrganizationID || this.accessService.IsAdmin()) {\r\n this.Navigate(['/pages/probability-level', e.data.EntryID], { OrganizationID: this.OrganizationID });\r\n }\r\n }\r\n\r\n OnToolbarPreparing(e) {\r\n e.toolbarOptions.items.unshift({\r\n location: 'after',\r\n widget: 'dxCheckBox',\r\n isCustom: true,\r\n options: {\r\n text: this.RC('lblShowActiveOnly'),\r\n value: this.State.ShowActiveOnly,\r\n onValueChanged: (e) => {\r\n this.State.ShowActiveOnly = e.value;\r\n this.OnLoadActive.emit(this.State.ShowActiveOnly);\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\";","import { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ProbabilityLevel } from '../../../_proxy/entities/probabilitylevel.entity';\r\nimport { ProbabilityLevelEndpoint } from '../../../_proxy/endpoints/probabilitylevel.endpoint';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\n\r\nclass State extends BaseState {\r\n LoadActive: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-probability-level-list',\r\n templateUrl: './probability-level-list.component.html'\r\n})\r\nexport class ProbabilityLevelListComponent extends BaseComponent {\r\n\r\n @Input() OrganizationID: number;\r\n @Input() IsLoadGlobal: boolean = false;\r\n @Input() IsShowAddButtonInGrid: boolean = false;\r\n @Input() IsAutoHeight: boolean = false;\r\n @Output() OnUpdateCount = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService,\r\n private probabilityEndpoint: ProbabilityLevelEndpoint) {\r\n super(A, 'ProbabilityLevelComponent', State);\r\n }\r\n\r\n protected override OnInitState(): void {\r\n this.State.LoadActive = true;\r\n }\r\n\r\n 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 == ProbabilityLevel) this.LoadDataSource();\r\n }\r\n\r\n OnAdd() {\r\n this.Navigate(['/pages/probability-level/new'], { OrganizationID: this.OrganizationID });\r\n }\r\n\r\n LoadDataSource() {\r\n this.DataSources['ProbabilityLevels'] = new DataSourceCustomAction((options: DataLoadOptions) => \r\n this.probabilityEndpoint.ListEx(this.OrganizationID, this.State.LoadActive, options), null, (data) => {\r\n this.OnUpdateCount.emit(data.length);\r\n });\r\n this.DS('ProbabilityLevels').Reload();\r\n }\r\n\r\n GetLinkParams() {\r\n return { OrganizationID: this.OrganizationID };\r\n }\r\n\r\n OnLoadActive(value: boolean) {\r\n this.State.LoadActive = value;\r\n this.LoadDataSource();\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n\";","import { Component, Input } from \"@angular/core\";\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { ServiceBagServices, ServiceBagService } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { CompanyEndpoint } from \"../../_proxy/endpoints/company.endpoint\";\r\nimport { BaseState, BaseEntityResponse } from \"@m4u-angular/base/entities/BaseEntities\";\r\nimport { Company } from \"../../_proxy/entities/company.entity\";\r\nimport { EnumPageDisplayModes } from \"@m4u-angular/core/framework/sysenums.enum\";\r\nimport { ForecastMapperEndpoint } from \"../../_proxy/endpoints/forecastmapper.endpoint\";\r\nimport { ForecastMapper } from \"../../_proxy/entities/forecastmapper.entity\";\r\nimport { ScenarioEndpoint } from \"../../_proxy/endpoints/scenario.endpoint\";\r\nimport { ProbabilityLevelEndpoint } from \"../../_proxy/endpoints/probabilitylevel.endpoint\";\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { ContextMenuElement, ToolbarSettings } from \"@m4u-angular/base/classes/BaseClasses\";\r\nimport { DateHelpers } from \"@m4u-angular/core/helpers/DateHelpers\";\r\n\r\nclass State extends BaseState {\r\n Company: Company = new Company;\r\n ForecastMapperID: number;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-forecast-mapper',\r\n templateUrl: './forecast-mapper.component.html'\r\n})\r\nexport class ForecastMapperComponent extends BasePageCRUDComponent\r\n{\r\n @Input() OrganizationID: number;\r\n\r\n constructor(\r\n A: ServiceBagService,\r\n private endpoint: ForecastMapperEndpoint,\r\n private companyEndpoint: CompanyEndpoint,\r\n private scenarioEndpoint: ScenarioEndpoint,\r\n private probabilitylevelEndpoint: ProbabilityLevelEndpoint) {\r\n super(A, 'ForecastMapperComponent', ForecastMapper, State, endpoint, EnumPageDisplayModes.Window);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.Do(this.companyEndpoint.Get(this.QueryParams.CompanyID), false, (response: BaseEntityResponse) => {\r\n this.State.Company = response.Entity;\r\n this.LoadScenaries();\r\n this.LoadProbabilityLevels();\r\n });\r\n }\r\n\r\n LoadScenaries() {\r\n this.DataSources[\"Scenaries\"] = new DataSourceCustomAction((options: DataLoadOptions) => this.scenarioEndpoint.ListEx(this.State.Company.OrganizationID, true, options));\r\n }\r\n\r\n LoadProbabilityLevels() {\r\n this.DataSources[\"ProbabilityLevels\"] = new DataSourceCustomAction((options: DataLoadOptions) => this.probabilitylevelEndpoint.ListEx(this.State.Company.OrganizationID, true, options));\r\n }\r\n\r\n override OnEntityInitObjectName() {\r\n return this.Entity && this.Entity.DatasourceName;\r\n }\r\n\r\n override OnEntityNew() {\r\n this.Entity.IsActive = true;\r\n this.Entity.CompanyID = this.QueryParams.CompanyID;\r\n this.Entity.SyncStartDate = DateHelpers.AddDay(new Date(), -180);\r\n }\r\n\r\n override OnEntitySaved() {\r\n this.NavigateBack();\r\n }\r\n\r\n InitStateFromQuery() {\r\n if (Object.entries(this.QueryParams).length <= 0) return;\r\n if (this.QueryParams.ForecastMapperID) this.State.ForecastMapperID = +this.QueryParams.ForecastMapperID;\r\n }\r\n\r\n\r\n override OnInitContextMenus(): ContextMenuElement[] {\r\n if (this.IsAddMode) return undefined;\r\n const menus: ContextMenuElement[] =\r\n [\r\n {\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 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}","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { ForecastMapper } from '@kraken/_proxy/entities/forecastmapper.entity';\r\n\r\nclass State extends BaseState {\r\n ShowActiveOnly: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-forecast-mapper-grid',\r\n templateUrl: './forecast-mapper-grid.component.html'\r\n})\r\nexport class ForecastMapperGridComponent extends BaseGridComponent {\r\n @Input() IsShowActiveOnlyCheckbox: boolean = false;\r\n @Output() OnLoadActive = new EventEmitter();\r\n @Input() CompanyID: number;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'ForecastMapperGridComponent', ForecastMapper, State);\r\n }\r\n\r\n protected override OnInitState() {\r\n if (this.IsShowActiveOnlyCheckbox) {\r\n this.State.ShowActiveOnly = true;\r\n this.OnLoadActive.emit(this.State.ShowActiveOnly);\r\n }\r\n }\r\n\r\n OnNavigate(e) {\r\n this.Navigate(['/pages/forecast-mapper', e.data.EntryID], { CompanyID: this.CompanyID });\r\n }\r\n\r\n OnToolbarPreparing(e) {\r\n if (this.IsShowActiveOnlyCheckbox) {\r\n e.toolbarOptions.items.unshift({\r\n location: 'after',\r\n widget: 'dxCheckBox',\r\n isCustom: true,\r\n options: {\r\n text: this.RC('lblShowActiveOnly'),\r\n value: this.State.ShowActiveOnly,\r\n onValueChanged: (e) => {\r\n this.State.ShowActiveOnly = e.value;\r\n this.OnLoadActive.emit(this.State.ShowActiveOnly);\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\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class Cheque extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'Cheque';\r\n }\r\n \r\n public Bank: number; \r\n public Branch: number; \r\n public AccountNumber: string; \r\n public ChequeNumber: string; \r\n public CheckSum: number; \r\n public Notes: string; \r\n public TransactionID: number; \r\n public TempTransactionId: number; \r\n public FrontSideImg: number[]; \r\n public BackSideImg: number[]; \r\n public IsVoucher: number; \r\n public BookingAccountID: number; \r\n public OrganizationID: number; \r\n public BankDisplayValue: string; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import {Component, EventEmitter, Input, Output} from '@angular/core';\r\nimport {BaseGridComponent} from '@m4u-angular/base/component/BaseGridComponent';\r\nimport {BaseState} from '@m4u-angular/base/entities/BaseEntities';\r\nimport {ServiceBagServices} from '@m4u-angular/base/component/ServiceBag';\r\nimport {ServiceBagService} from '@m4u-angular/base/component/ServiceBag';\r\nimport { Cheque } from '../../../_proxy/entities/cheque.entity';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-cheque-grid',\r\n templateUrl: './cheque-grid.component.html'\r\n})\r\nexport class ChequeGridComponent extends BaseGridComponent {\r\n\r\n public selectedKeys: number[];\r\n\r\n @Input() set CurrentChequeID(value: number) {\r\n this.selectedKeys = [value];\r\n }\r\n\r\n @Output() OnItemClicked = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'ChequeGridComponent', Cheque, BaseState);\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 OnRowClick($event: any) {\r\n if ($event.data) {\r\n this.OnItemClicked.emit($event.data);\r\n }\r\n }\r\n\r\n GetBankText(bank: string) {\r\n return this.LISTITEMX('Banks', bank)?.Text || bank;\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n
\\r\\n {{GetBankText(cell.data.BankDisplayValue)}}\\r\\n
\\r\\n
\\r\\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 {BaseGridComponent} from '@m4u-angular/base/component/BaseGridComponent';\r\nimport {BaseState} from '@m4u-angular/base/entities/BaseEntities';\r\nimport {ServiceBagServices} from '@m4u-angular/base/component/ServiceBag';\r\nimport {ServiceBagService} from '@m4u-angular/base/component/ServiceBag';\r\nimport { Cheque } from '@kraken/_proxy/entities/cheque.entity';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-cheque-mobile-list',\r\n templateUrl: './cheque-mobile-list.component.html',\r\n styleUrls: ['./cheque-mobile-list.component.scss']\r\n})\r\nexport class ChequeMobileListComponent extends BaseGridComponent {\r\n\r\n public selectedKeys: number[];\r\n\r\n @Input() set CurrentChequeID(value: number)\r\n {\r\n this.selectedKeys = [value];\r\n }\r\n\r\n @Output() OnItemClicked = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'ChequeGridComponent', Cheque, BaseState);\r\n }\r\n\r\n OnItemClick(e: any) {\r\n this.OnItemClicked.emit(e.itemData);\r\n }\r\n}\r\n","export default \"\\r\\n
\\r\\n
\\r\\n
\\r\\n
{{'lblChequeNumber' | RC:THIS}}: {{cheque.ChequeNumber}}
\\r\\n
{{'lblAccountNumber' | RC:THIS}}: {{cheque.AccountNumber}}
\\r\\n
{{cheque.BankDisplayValue | LookupList:LIST('Banks')}} ({{cheque.Branch}})
\\r\\n
{{'lblNotes' | RC:THIS}}: {{cheque.Notes}}
\\r\\n
\\r\\n
\\r\\n
{{cheque.CheckSum | formatNumberSum}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\";","import { Injectable } from '@angular/core';\r\nimport { EnumCashflowSummarizedAggregationLevel, EnumSummaryLevel } from '../../../../../Kraken/Angular/ClientApp/_proxy/enums';\r\nimport { AccessService } from './access.service';\r\nimport { LocalStorageService } from '@m4u-angular/core/framework/local-storage.service';\r\n\r\n@Injectable()\r\nexport class CashflowService {\r\n\r\n private _contextUser: string;\r\n private _pivotView: boolean = false;\r\n private _summaryLevel = EnumSummaryLevel.Day;\r\n private _aggregationLevel = EnumCashflowSummarizedAggregationLevel.BookingAccount;\r\n private _currentTabIndex: number = 1;\r\n private _dateTo: Date;\r\n private _dateFrom: Date;\r\n public ShowParentCategories: boolean;\r\n\r\n CalculationDate: Date;\r\n\r\n constructor(accessService: AccessService, private localStorageService: LocalStorageService) {\r\n this._contextUser = accessService.UserInfo.Name;\r\n this._pivotView = this.localStorageService.GetItem(`${this._contextUser}_pivotView`) === 'true';\r\n this._summaryLevel = this.localStorageService.GetItem(`${this._contextUser}_summaryLevel`) as EnumSummaryLevel ?? \r\n EnumSummaryLevel.Day;\r\n this._aggregationLevel = this.localStorageService.GetItem(\r\n `${this._contextUser}_aggregationLevel`) as EnumCashflowSummarizedAggregationLevel ??\r\n EnumCashflowSummarizedAggregationLevel.BookingAccount;\r\n this._currentTabIndex = this.localStorageService.GetItem(`${this._contextUser}_currentTabIndex`) ?\r\n Number(this.localStorageService.GetItem(`${this._contextUser}_currentTabIndex`)) : 1;\r\n const dateToStr = this.localStorageService.GetItem(`${this._contextUser}_dateTo`);\r\n this._dateTo = dateToStr && !isNaN(new Date(dateToStr) as any) ? new Date(dateToStr) : null;\r\n const dateFromStr = this.localStorageService.GetItem(`${this._contextUser}_dateFrom`);\r\n this._dateFrom = dateFromStr && !isNaN(new Date(dateFromStr) as any) ? new Date(dateFromStr) : null;\r\n }\r\n\r\n public get PivotView() {\r\n return this._pivotView;\r\n }\r\n public set PivotView(pivotView: boolean) {\r\n this.localStorageService.SetItem(`${this._contextUser}_pivotView`, pivotView.toString());\r\n this._pivotView = pivotView;\r\n }\r\n\r\n public get SummaryLevel() {\r\n return this._summaryLevel;\r\n }\r\n public set SummaryLevel(summaryLevel: EnumSummaryLevel) {\r\n this.localStorageService.SetItem(`${this._contextUser}_summaryLevel`, summaryLevel);\r\n this._summaryLevel = summaryLevel;\r\n }\r\n\r\n public get AggregationLevel() {\r\n return this._aggregationLevel;\r\n }\r\n public set AggregationLevel(aggregationLevel: EnumCashflowSummarizedAggregationLevel) {\r\n this.localStorageService.SetItem(`${this._contextUser}_aggregationLevel`, aggregationLevel);\r\n this._aggregationLevel = aggregationLevel;\r\n }\r\n\r\n public get CurrentTabIndex() {\r\n return this._currentTabIndex;\r\n }\r\n public set CurrentTabIndex(currentTabIndex: number) {\r\n this.localStorageService.SetItem(`${this._contextUser}_currentTabIndex`, currentTabIndex.toString());\r\n this._currentTabIndex = currentTabIndex;\r\n }\r\n\r\n public get DateTo() {\r\n return this._dateTo;\r\n }\r\n public set DateTo(dateTo: Date) {\r\n if (dateTo) {\r\n this.localStorageService.SetItem(`${this._contextUser}_dateTo`, dateTo?.toString());\r\n } else {\r\n this.localStorageService.RemoveItem(`${this._contextUser}_dateTo`);\r\n }\r\n this._dateTo = dateTo;\r\n }\r\n\r\n public get DateFrom() {\r\n return this._dateFrom;\r\n }\r\n public set DateFrom(dateFrom: Date) {\r\n if (dateFrom) {\r\n this.localStorageService.SetItem(`${this._contextUser}_dateFrom`, dateFrom?.toString());\r\n } else {\r\n this.localStorageService.RemoveItem(`${this._contextUser}_dateFrom`);\r\n }\r\n this._dateFrom = dateFrom;\r\n }\r\n\r\n ClearDates() {\r\n this.DateTo = undefined;\r\n this.DateFrom = undefined;\r\n }\r\n}","\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { ForecastOperationView } from './../views/forecastoperation.view';\r\nimport { ForecastOperationParams } from './../params/forecastoperation.param';\r\nimport { UpdateForecastOperationsView } from './../views/updateforecastoperations.view';\r\n@Injectable()\r\nexport class ForecastOperationEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(api: APIGatewayService) {super(\"ForecastOperation\", api);}\r\n\t\r\n\r\n public ListEx(Params: ForecastOperationParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListEx', Params, undefined );\r\n }\r\n\r\n public UpdateForecastOperations(Params: UpdateForecastOperationsView) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'UpdateForecastOperations', Params, undefined );\r\n }\r\n\r\n public override Get(ForecastOperationID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'Get', {ForecastOperationID: ForecastOperationID} );\r\n }\r\n}\r\n\r\n","import { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumSide } from '../../_proxy/enums';\r\n\r\nexport class BaseCashflowGridComponent extends BaseGridComponent {\r\n contextMenuItems = {\r\n newExpense: (params) => ({\r\n text: this.RC('lblNewExpense'),\r\n onClick: () => null,\r\n items: [\r\n {\r\n text: this.RC('lblOneTime'),\r\n onClick: () => {\r\n params.Side = EnumSide.Expense;\r\n this.Navigate(['/pages/forecast-operation/new'], params);\r\n }\r\n }, {\r\n text: this.RC('lblRecurring'),\r\n onClick: () => {\r\n params.Side = EnumSide.Expense;\r\n this.Navigate(['/pages/recurring-forecast/new'], params, true);\r\n }\r\n }\r\n ]\r\n }),\r\n newIncome: (params) => ({\r\n text: this.RC('lblNewIncome'),\r\n onClick: () => null,\r\n items: [\r\n {\r\n text: this.RC('lblOneTime'),\r\n onClick: () => {\r\n params.Side = EnumSide.Income;\r\n this.Navigate(['/pages/forecast-operation/new'], params);\r\n }\r\n }, {\r\n text: this.RC('lblRecurring'),\r\n onClick: () => {\r\n params.Side = EnumSide.Income;\r\n this.Navigate(['/pages/recurring-forecast/new'], params, true);\r\n }\r\n }\r\n ]\r\n }),\r\n duplicate: (params) => ({\r\n text: this.RC('lblDuplicate'),\r\n onItemClick: () => {\r\n this.Navigate(['/pages/forecast-operation/new'], params, true);\r\n }\r\n }),\r\n editCategory: (categoryId: number) => ({\r\n text: this.RC('lblParentCategorySet'),\r\n onClick: () => {\r\n this.Navigate([`/pages/transaction-category/${categoryId}`]);\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 UpdateForecastOperationsView extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'UpdateForecastOperationsView';\r\n }\r\n \r\n public ForecastOperations: number[]; \r\n public DelayDate: Date; \r\n public Exclude: boolean; \r\n public Include: boolean; \r\n public AllRecurrings: 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 { AccountingForecast } from './../entities/accountingforecast.entity';\r\nimport { AccountingForecastView } from './../views/accountingforecast.view';\r\nimport { AccountingForecastParams } from './../params/accountingforecast.param';\r\nimport { UpdateAccountingForecastParams } from './../params/updateaccountingforecast.param';\r\n@Injectable()\r\nexport class AccountingForecastEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"AccountingForecast\", api);}\r\n\t\r\n\r\n public ListEx(Params: AccountingForecastParams, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListEx', Params, options?.GetLoadOptions() );\r\n }\r\n\r\n public Update(Params: UpdateAccountingForecastParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'Update', 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 UpdateAccountingForecastParams extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'UpdateAccountingForecastParams';\r\n }\r\n \r\n public EntryID: number; \r\n public Date: Date; \r\n public IsExcluded: boolean; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { FutureChequeImage } from './../entities/futurechequeimage.entity';\r\n@Injectable()\r\nexport class FutureChequeImageEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(api: APIGatewayService) {super(\"FutureChequeImage\", api);}\r\n\t\r\n}\r\n\r\n","import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { CashflowReportRowView } from '../../../../_proxy/views/cashflowreportrow.view';\r\nimport {\r\n EnumCredentialTypes,\r\n EnumForecastDateRelevance,\r\n EnumForecastSystemSource,\r\n EnumSide\r\n} from '../../../../_proxy/enums';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { Globals } from '../../../../_globals';\r\nimport { DxDataGridComponent } from 'devextreme-angular';\r\nimport { CashflowReportEndpoint } from '../../../../_proxy/endpoints/cashflowreport.endpoint';\r\nimport { ForecastOperationEndpoint } from '../../../../_proxy/endpoints/forecastoperation.endpoint';\r\nimport { InputBoxDialogComponent } from '@m4u-angular/ui/dialogs/inputbox-dialog/inputboxdialog.component';\r\nimport { BaseCashflowGridComponent } from '../../../../pages/base-cashflow-grid/base-cashflow-grid.component';\r\nimport { MessageBoxDialogComponent } from '@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\nimport { EnumMessageBoxTypes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { MessageBoxCustomButton } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { UpdateForecastOperationsView } from '@kraken/_proxy/views/updateforecastoperations.view';\r\nimport { memoize, uniq } from 'lodash';\r\nimport { Format, formatNumber, parseNumber } from 'devextreme/localization';\r\nimport { AccountingForecastEndpoint } from '@kraken/_proxy/endpoints/accountingforecast.endpoint';\r\nimport { UpdateAccountingForecastParams } from '@kraken/_proxy/params/updateaccountingforecast.param';\r\nimport { DateHelpers } from '@m4u-angular/core/helpers/DateHelpers';\r\nimport { FutureChequeImageEndpoint } from '@kraken/_proxy/endpoints/futurechequeimage.endpoint';\r\nimport { ImageBoxDialogComponent } from '@m4u-angular/ui/dialogs/imagebox-dialog/imageboxdialog.component';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { ChequeListDialogComponent } from '@kraken/dialogs/cheque-dialog/list/cheque-list-dialog.component';\r\n\r\nclass State extends BaseState {\r\n GridHasChanges: boolean = false;\r\n SelectedRowsData: CashflowReportRowView[] = [];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-cashflow-detailed-grid',\r\n templateUrl: './cashflow-detailed-grid.component.html',\r\n styleUrls: ['./cashflow-detailed-grid.component.scss']\r\n})\r\nexport class CashflowDetailedGridComponent extends BaseCashflowGridComponent {\r\n @Input() MinDate!: Date;\r\n @Input() IsSelectionMode: boolean = false;\r\n @Input() IsAllowInlineEditing: boolean = false;\r\n @Input() CalculationDate!: Date;\r\n @Input() DataItems!: any;\r\n @Input() Currency: string;\r\n\r\n @Output() reload: EventEmitter = new EventEmitter();\r\n @Output() SelectionChanged = new EventEmitter();\r\n @ViewChild('messageBox') messageBoxDialog: MessageBoxDialogComponent;\r\n @ViewChild('reccuringBox') reccuringBoxDialog: MessageBoxDialogComponent;\r\n\r\n @ViewChild('dateInputDialog') dateInputDialog: InputBoxDialogComponent;\r\n @ViewChild('grid', { static: false }) dataGrid: DxDataGridComponent;\r\n @ViewChild('transactionChequeListDialog') transactionChequeListDialog: ChequeListDialogComponent;\r\n\r\n EnumMessageBoxTypes = EnumMessageBoxTypes;\r\n MessageBoxButtons: MessageBoxCustomButton[] = [\r\n { ButtonID: 1, Text: this.RC('lblOneTransaction') },\r\n { ButtonID: 2, Text: this.RC('lblRecurring') }\r\n ];\r\n\r\n get CurrencySymbol() {\r\n // @ts-ignore\r\n return this.LISTITEMX('Currencies', this.Currency)?.Symbol;\r\n }\r\n\r\n get DateRelevanceList() {\r\n const result = this.LIST('DateRelevance').map(item => {\r\n if (item.Value == EnumForecastDateRelevance.NotReconcilledForecast) {\r\n return {\r\n SortOrder: item.SortOrder,\r\n Value: item.Value,\r\n Text: this.RC('lblPastTransactionsNotPaid'),\r\n };\r\n }\r\n return item;\r\n });\r\n return result;\r\n }\r\n\r\n @ViewChild(ImageBoxDialogComponent) chequeViewDialog: ImageBoxDialogComponent;\r\n private currentChequeImages: Blob[] = [];\r\n private currentChequeImageIndex: number;\r\n\r\n constructor(\r\n A: ServiceBagService,\r\n private _casflowReportEndpoint: CashflowReportEndpoint,\r\n private forecastOperationEndpoint: ForecastOperationEndpoint,\r\n private accountingForecastEndpoint: AccountingForecastEndpoint,\r\n private screenService: ScreenService,\r\n private futureChequeImageEndpoint: FutureChequeImageEndpoint\r\n ) {\r\n super(A, 'CashflowDetailedGridComponent', BaseEntity, State);\r\n this.BindHandler('OnEditForecastOperation');\r\n this.BindHandler('IsForecast');\r\n }\r\n\r\n // EnumForecastType = EnumForecastType;\r\n\r\n GetForecastCategories(side: EnumSide) {\r\n return this.DataItems.ForecastCategoriesItems.filter(a => a.Side == side);\r\n }\r\n\r\n OnInitialized(e: any) {\r\n e.component.option('scrolling.timeout', 0);\r\n }\r\n\r\n override OnInitComponentFinished() {\r\n super.OnInitComponentFinished();\r\n this.G.grid.columnHidingEnabled = false;\r\n }\r\n\r\n OnRowPrepared(row: any): void {\r\n // Clear group values for expanded group rows\r\n if (row.rowType === 'group' && row.isExpanded) {\r\n row.summaryCells.forEach(cells => {\r\n if (!cells.length) return;\r\n\r\n cells.forEach(cell => {\r\n cell.value = '';\r\n });\r\n });\r\n }\r\n\r\n if (row.rowType === 'data') {\r\n // TODO: cashflow\r\n // switch (row.data.Type) {\r\n // case EnumCashFlowReportRowType.FutureForecastOperation:\r\n // row.rowElement.classList.add(\"future-forecast-operation-row\");\r\n // break;\r\n // case EnumCashFlowReportRowType.PastForecastOperation:\r\n // row.rowElement.classList.add(\"past-forecast-operation-row\");\r\n // break;\r\n // case EnumCashFlowReportRowType.Transaction:\r\n // row.rowElement.classList.add(\"transaction-row\");\r\n // break;\r\n // }\r\n\r\n if (row.data.IsExcluded) {\r\n row.rowElement.classList.add('forecast-operation-excluded');\r\n }\r\n if (row.data.BalanceWarning) {\r\n row.rowElement.classList.add('balance-warning');\r\n }\r\n }\r\n }\r\n\r\n UpdateAllReccuringOrOne(request: UpdateForecastOperationsView, RecurringForecastID?: number) {\r\n const update = (request: UpdateForecastOperationsView) => {\r\n this.Do(this.forecastOperationEndpoint.UpdateForecastOperations(request), true, () => {\r\n this.reload.emit();\r\n });\r\n };\r\n\r\n if (request.ForecastOperations.length === 1 && RecurringForecastID) {\r\n this.reccuringBoxDialog.ShowDialogShort(\r\n () => {\r\n request.AllRecurrings = true;\r\n update(request);\r\n },\r\n () => update(request)\r\n );\r\n } else {\r\n update(request);\r\n }\r\n }\r\n\r\n DeleteForecastOperation(row: CashflowReportRowView) {\r\n this.Do(this.forecastOperationEndpoint.Delete(row.SourceEntryId), true, () => {\r\n this.reload.emit();\r\n });\r\n }\r\n\r\n OnExcludeForecastOperation(\r\n rows: CashflowReportRowView[],\r\n IsExcluded: boolean,\r\n RecurringForecastID?: number\r\n ) {\r\n const request = new UpdateForecastOperationsView();\r\n request.ForecastOperations = rows.map(r => r.SourceEntryId);\r\n request.Exclude = !IsExcluded;\r\n request.Include = IsExcluded;\r\n\r\n this.UpdateAllReccuringOrOne(request, RecurringForecastID);\r\n }\r\n\r\n OnExcludAccountingForecast(rows: CashflowReportRowView[], IsExcluded: boolean) {\r\n if (rows.length > 1) {\r\n throw new Error('Multiple update is not implemented!');\r\n }\r\n\r\n const [row] = rows;\r\n\r\n const params = new UpdateAccountingForecastParams();\r\n params.EntryID = row.SourceEntryId;\r\n params.IsExcluded = !IsExcluded;\r\n params.Date = row.ActualDate;\r\n\r\n this.Do(this.accountingForecastEndpoint.Update(params), true, () => {\r\n this.reload.emit();\r\n });\r\n }\r\n\r\n onDelayAccountingForecast(rows: CashflowReportRowView[], date: Date) {\r\n if (rows.length > 1) {\r\n throw new Error('Multiple update is not implemented!');\r\n }\r\n\r\n const [row] = rows;\r\n\r\n const params = new UpdateAccountingForecastParams();\r\n params.EntryID = row.SourceEntryId;\r\n params.Date = date;\r\n params.IsExcluded = row.IsExcluded;\r\n\r\n this.Do(this.accountingForecastEndpoint.Update(params), true, () => {\r\n this.reload.emit();\r\n });\r\n }\r\n\r\n onDelayForecastOperation(\r\n rows: CashflowReportRowView[],\r\n value: Date,\r\n RecurringForecastID?: number\r\n ) {\r\n const request = new UpdateForecastOperationsView();\r\n request.ForecastOperations = rows.map(r => r.SourceEntryId);\r\n request.DelayDate = value;\r\n\r\n this.UpdateAllReccuringOrOne(request, RecurringForecastID);\r\n }\r\n\r\n OnEditorPreparing(e: any) {\r\n if (!this.IsAllowInlineEditing || e.command) return;\r\n\r\n const { editorOptions, setValue, dataField, row } = e;\r\n\r\n editorOptions.onValueChanged = ({ value }) => {\r\n setValue(value);\r\n this.State.GridHasChanges = this.G.HasEditData();\r\n };\r\n\r\n if (!row) return;\r\n\r\n const { IsDebit } = row.data as CashflowReportRowView;\r\n\r\n if (dataField === 'CategoryID') {\r\n const side = IsDebit ? EnumSide.Expense : EnumSide.Income;\r\n editorOptions.dataSource = this.GetForecastCategories(side);\r\n }\r\n }\r\n\r\n OnEditingStart(e: any) {\r\n if (!this.IsAllowInlineEditing) return;\r\n const { data, column } = e;\r\n\r\n if (!data || !column) return;\r\n\r\n const { dataField } = column;\r\n const { IsDebit, IsEditable } = data as CashflowReportRowView;\r\n\r\n if (dataField !== 'ActualDate' && dataField !== 'IsExcluded') {\r\n e.cancel = true;\r\n return;\r\n }\r\n\r\n // hide editor if\r\n e.cancel =\r\n !IsEditable ||\r\n (dataField === 'Debit' && !IsDebit) ||\r\n (dataField === 'Credit' && IsDebit);\r\n }\r\n\r\n collectGridChanges(changes: any[]): CashflowReportRowView[] {\r\n const fieldsToChange = [\r\n 'IsExcluded',\r\n 'CategoryID',\r\n 'Notes1',\r\n 'Notes2',\r\n 'Reference',\r\n 'ActualDate',\r\n 'Debit',\r\n 'Credit'\r\n ];\r\n const fieldsToCollect = ['EntryID', ...fieldsToChange];\r\n\r\n return changes.reduce((rows: any[], row: any) => {\r\n if (!row.data) return rows;\r\n\r\n const collectedValues = fieldsToCollect.reduce(\r\n (values, fieldName) => ({\r\n ...values,\r\n [fieldName]: row.data[fieldName] ?? row.key[fieldName]\r\n }),\r\n {}\r\n );\r\n\r\n return [...rows, collectedValues];\r\n }, []);\r\n }\r\n\r\n onSaving(e: any) {\r\n e.cancel = true;\r\n\r\n if (e.changes.length) {\r\n e.promise = new Promise((resolve, reject) => {\r\n this.Do(\r\n this._casflowReportEndpoint.SaveBatch(this.collectGridChanges(e.changes)),\r\n true,\r\n async () => {\r\n this.State.GridHasChanges = false;\r\n this.reload.emit();\r\n\r\n resolve(true);\r\n },\r\n reject\r\n );\r\n });\r\n }\r\n }\r\n\r\n saveGridChanges() {\r\n const gridInstance = this.grid.instance as any;\r\n\r\n if (this.G.HasEditData()) {\r\n const validationgCtrl = gridInstance.getController('validating');\r\n\r\n validationgCtrl.validate(true).then(isValid => {\r\n if (!isValid) return Promise.reject();\r\n this.G.AcceptChanges();\r\n });\r\n }\r\n }\r\n\r\n cancelGridChanges() {\r\n this.G.CancelEditData();\r\n this.State.GridHasChanges = false;\r\n }\r\n\r\n validateAmounts(e: { value: String | Number; column: any; data: CashflowReportRowView }) {\r\n const {\r\n column: { dataField },\r\n data: { IsDebit },\r\n value\r\n } = e;\r\n\r\n if (dataField === 'Credit' && !IsDebit) {\r\n return +value > 0;\r\n }\r\n\r\n if (dataField === 'Debit' && IsDebit) {\r\n return +value > 0;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n validateNotesAndCategory(e: {\r\n value: String | Number;\r\n column: any;\r\n data: CashflowReportRowView;\r\n }) {\r\n const {\r\n data: { Notes1 }\r\n } = e;\r\n return [Notes1].some(Boolean);\r\n }\r\n\r\n GetDate(entity: CashflowReportRowView) {\r\n if (entity.TrailedDaysCount) {\r\n return entity.Date;\r\n }\r\n\r\n return entity.ActualDate;\r\n }\r\n\r\n GetForecastTypeInfo(entity: CashflowReportRowView) {\r\n // const forecastType = this.resourcesService.LIST('ForecastTypes', this.ModuleName).find(item => item.Value === entity.ForecastType);\r\n // switch (entity.ForecastType) {\r\n // case EnumForecastType.Manual: return { class: \"mdi-account-box\", title: forecastType.Text };\r\n // case EnumForecastType.Accounting: return { class: \"mdi-dns\", title: forecastType.Text };\r\n // case EnumForecastType.CCExpense: return { class: \"mdi-wallet\", title: forecastType.Text };\r\n // case EnumForecastType.CCIncome: return { class: \"mdi-hand-coin\", title: forecastType.Text };\r\n // case EnumForecastType.Loans: return { class: \"mdi-credit-card\", title: forecastType.Text };\r\n // case EnumForecastType.Recurring: return { class: \"mdi-history\", title: forecastType.Text };\r\n // }\r\n }\r\n\r\n GetGroupCellCaption(cell) {\r\n const [sortValue, caption] = cell.text.split(';');\r\n return caption ? caption : sortValue;\r\n }\r\n\r\n CalculateDateRelavanceValue = rowData => {\r\n const item = this.LISTITEMX('DateRelevance', rowData.DateRelevance);\r\n var text = item.Text;\r\n if (item.Value == EnumForecastDateRelevance.NotReconcilledForecast) {\r\n text = this.RC('lblPastTransactionsNotPaid');\r\n }\r\n return `${item.SortOrder};${text};${rowData.DateRelevance}`;\r\n };\r\n\r\n OpenEditForecastOperationModal(entity: CashflowReportRowView) {\r\n const params = {\r\n CompanyID: entity.CompanyID,\r\n AccountID: entity.AccountID,\r\n BookingAccountID: entity.BookingAccountID,\r\n OrganizationID: entity.OrganizationID,\r\n Side: entity.Credit ? EnumSide.Income : EnumSide.Expense\r\n };\r\n\r\n this.oneOrRecurringAction(\r\n entity,\r\n () => this.Navigate([`/pages/forecast-operation/${entity.SourceEntryId}`], params),\r\n () => this.Navigate([`/pages/recurring-forecast/${entity.RecurringForecastID}`], params)\r\n );\r\n }\r\n\r\n oneOrRecurringAction(entity: any, oneActionFunc, recurringActionFunc) {\r\n if (entity.RecurringForecastID) {\r\n this.messageBoxDialog.ShowDialogShort((buttonId: number) => {\r\n switch (buttonId) {\r\n case 1:\r\n oneActionFunc();\r\n break;\r\n case 2:\r\n recurringActionFunc();\r\n break;\r\n }\r\n });\r\n } else {\r\n oneActionFunc();\r\n }\r\n }\r\n\r\n OnEditForecastOperation(e: any) {\r\n const entity = e?.row?.data as CashflowReportRowView;\r\n this.OpenEditForecastOperationModal(entity);\r\n }\r\n\r\n IsForecast(entity: CashflowReportRowView) {\r\n // return entity.Type !== EnumCashFlowReportRowType.Transaction;\r\n }\r\n\r\n OnSelectionChanged(event: { selectedRowsData: CashflowReportRowView[] }) {\r\n this.State.SelectedRowsData = event.selectedRowsData;\r\n this.SelectionChanged.emit(event.selectedRowsData);\r\n }\r\n\r\n get IsCompanyColumnHidden(): boolean {\r\n if (!this.DataSource) return false;\r\n return (\r\n Array.isArray(this.DataSource) &&\r\n Utils.UniqueBy(this.DataSource, x => x.CompanyID).size === 1\r\n );\r\n }\r\n\r\n get IsAccountColumnHidden(): boolean {\r\n if (!this.DataSource) return false;\r\n return (\r\n Array.isArray(this.DataSource) &&\r\n Utils.UniqueBy(this.DataSource, x => x.AccountID).size === 1\r\n );\r\n }\r\n get IsBookingAccountColumnHidden(): boolean {\r\n if (!this.DataSource) return false;\r\n return (\r\n Array.isArray(this.DataSource) &&\r\n Utils.UniqueBy(this.DataSource, x => x.BookingAccountID).size === 1\r\n );\r\n }\r\n\r\n get IsScenarioColumnHidden(): boolean {\r\n if (!this.DataSource) return false;\r\n return (\r\n Array.isArray(this.DataSource) &&\r\n Utils.UniqueBy(\r\n this.DataSource.filter(x => x.ScenarioID),\r\n x => x.ScenarioID\r\n ).size === 1\r\n );\r\n }\r\n\r\n get IsProbalilityLevelColumnHidden(): boolean {\r\n if (!this.DataSource) return false;\r\n return (\r\n Array.isArray(this.DataSource) &&\r\n Utils.UniqueBy(\r\n this.DataSource.filter(x => x.ProbabilityLevelID),\r\n x => x.ProbabilityLevelID\r\n ).size === 1\r\n );\r\n }\r\n\r\n GetForecastOperationParams(e) {\r\n const entity = e?.row?.data as CashflowReportRowView;\r\n\r\n if (!entity) return null;\r\n\r\n return {\r\n OrganizationID: entity.OrganizationID,\r\n CompanyID: entity.CompanyID,\r\n AccountID: entity.AccountID,\r\n BookingAccountID: entity.BookingAccountID\r\n };\r\n }\r\n\r\n CustomTextGroup = e => {\r\n if (!e.value) return;\r\n\r\n return `${formatNumber(e.value, this.F.NumberSum)} ${this.CurrencySymbol}`;\r\n };\r\n\r\n CalculateCustomSummary = options => {\r\n const { name, summaryProcess, value, totalValue } = options;\r\n\r\n if (name === 'lastChild') {\r\n switch (summaryProcess) {\r\n case 'calculate':\r\n options.totalValue = value;\r\n break;\r\n }\r\n }\r\n };\r\n\r\n protected override GetGridRowContextMenu(e?: any) {\r\n const row = (e?.row.data || {}) as CashflowReportRowView;\r\n const {\r\n Date,\r\n OrganizationID,\r\n BookingAccountID,\r\n CompanyID,\r\n AccountID,\r\n ProbabilityLevelID,\r\n IsExcluded,\r\n ScenarioID,\r\n SystemSource,\r\n RecurringForecastID,\r\n IsEditable\r\n } = row;\r\n\r\n const hasSelected = this.State.SelectedRowsData.length > 1;\r\n const isSelectedForecastOperation = this.State.SelectedRowsData.every(\r\n r => r.SystemSource === EnumForecastSystemSource.ForecastOperation\r\n );\r\n const isForecastOperation = SystemSource === EnumForecastSystemSource.ForecastOperation;\r\n const isAccountingForecast = SystemSource === EnumForecastSystemSource.AccountingForecast;\r\n\r\n const rows = hasSelected ? this.State.SelectedRowsData : [row];\r\n const recurringForecastID = hasSelected ? null : RecurringForecastID;\r\n\r\n const items = [];\r\n\r\n items.push(\r\n //edit menu item\r\n {\r\n text: this.RC('lblEdit'),\r\n visible: !hasSelected && isForecastOperation && IsEditable,\r\n onClick: () => {\r\n this.OpenEditForecastOperationModal(row);\r\n }\r\n },\r\n {\r\n text: this.RC('lblDelete'),\r\n visible: !hasSelected && isForecastOperation && IsEditable,\r\n onClick: () => {\r\n this.DeleteForecastOperation(row);\r\n }\r\n },\r\n //exclude|include menu item\r\n {\r\n text: IsExcluded ? this.RC('lblInclude') : this.RC('lblExclude'),\r\n visible: hasSelected\r\n ? isSelectedForecastOperation\r\n : isForecastOperation || isAccountingForecast,\r\n onClick: () => {\r\n if (isAccountingForecast) {\r\n this.OnExcludAccountingForecast(rows, IsExcluded);\r\n return;\r\n }\r\n\r\n this.OnExcludeForecastOperation(rows, IsExcluded, recurringForecastID);\r\n }\r\n }\r\n );\r\n\r\n if (this.CalculationDate) {\r\n const calculationDate = DateHelpers.AddDay(this.CalculationDate, 0);\r\n //delay menu item\r\n items.push({\r\n text: this.RC('lblDelay'),\r\n visible: hasSelected\r\n ? isSelectedForecastOperation\r\n : isForecastOperation || isAccountingForecast,\r\n items: [\r\n {\r\n text: this.RC('lblToday'),\r\n onClick: () => {\r\n const date = calculationDate;\r\n date.setDate(date.getDate() + 1);\r\n\r\n if (isAccountingForecast) {\r\n this.onDelayAccountingForecast(rows, date);\r\n return;\r\n }\r\n\r\n this.onDelayForecastOperation(rows, date, recurringForecastID);\r\n }\r\n },\r\n {\r\n text: `7 ${this.RC('days')}`,\r\n onClick: () => {\r\n const date = Globals.SevenDaysAfterDate;\r\n\r\n if (isAccountingForecast) {\r\n this.onDelayAccountingForecast(rows, date);\r\n return;\r\n }\r\n\r\n this.onDelayForecastOperation(rows, date, recurringForecastID);\r\n }\r\n },\r\n {\r\n text: `30 ${this.RC('days')}`,\r\n onClick: () => {\r\n const date = Globals.ThirtyDaysAfterDate;\r\n\r\n if (isAccountingForecast) {\r\n this.onDelayAccountingForecast(rows, date);\r\n return;\r\n }\r\n\r\n this.onDelayForecastOperation(rows, date, recurringForecastID);\r\n }\r\n },\r\n {\r\n text: `90 ${this.RC('days')}`,\r\n onClick: () => {\r\n const date = Globals.NinetyDaysAfterDate;\r\n\r\n if (isAccountingForecast) {\r\n this.onDelayAccountingForecast(rows, date);\r\n return;\r\n }\r\n\r\n this.onDelayForecastOperation(rows, date, recurringForecastID);\r\n }\r\n },\r\n {\r\n text: this.RC('lblCustom'),\r\n onClick: () => {\r\n this.dateInputDialog.ShowDialogShort((value: Date) => {\r\n if (isAccountingForecast) {\r\n this.onDelayAccountingForecast(rows, value);\r\n return;\r\n }\r\n\r\n this.onDelayForecastOperation(rows, value, recurringForecastID);\r\n });\r\n }\r\n }\r\n ]\r\n });\r\n }\r\n\r\n\r\n if (\r\n !hasSelected &&\r\n (this.UserInfo?.Type === EnumCredentialTypes.Admin ||\r\n this.UserInfo?.IsOrganizationLicensedForCashflow)\r\n ) {\r\n const params = {\r\n AccountID,\r\n CompanyID,\r\n OrganizationID,\r\n BookingAccountID,\r\n ScenarioID,\r\n ProbabilityLevelID,\r\n StartDate: Date,\r\n Date,\r\n MinDate: this.MinDate\r\n };\r\n\r\n //new expense menu item\r\n items.push({\r\n ...this.contextMenuItems.newExpense(params),\r\n visible: isForecastOperation\r\n });\r\n\r\n //new income menu item\r\n items.push({\r\n ...this.contextMenuItems.newIncome(params),\r\n visible: isForecastOperation\r\n });\r\n }\r\n\r\n return items;\r\n }\r\n\r\n OnCellPrepared(e) {\r\n const { rowType, column, cellElement, data } = e;\r\n\r\n if (rowType === 'group' && column.name === 'gridRowContextMenu') {\r\n const { key } = data;\r\n const value: [string, string, EnumForecastDateRelevance] = key.split(';');\r\n\r\n if (EnumForecastDateRelevance.Past !== value[2]) return;\r\n\r\n const link = document.createElement('i');\r\n link.className = 'cashflow-drill-icon';\r\n const icon = document.createElement('img');\r\n icon.className = 'dx-link dx-icon';\r\n icon.src = 'assets/projects/kraken/file-link.svg';\r\n link.title = this.RC('btnTransactionsReport');\r\n link.append(icon);\r\n cellElement.append(link);\r\n\r\n link.addEventListener('click', e => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n this.OnDrillDown();\r\n });\r\n }\r\n }\r\n\r\n OnDrillDown() {\r\n if (!Array.isArray(this.DataSource)) return;\r\n const arr = this.DataSource.filter(\r\n view => view.SystemSource === EnumForecastSystemSource.Transactions\r\n );\r\n const first = arr.at(0);\r\n const last = arr.at(-1);\r\n\r\n const params = {\r\n OrganizationID: first.OrganizationID,\r\n BookingAccountID: uniq(arr.map(item => item.BookingAccountID)),\r\n AccountID: uniq(arr.map(item => item.AccountID)),\r\n Companies: uniq(arr.map(item => item.CompanyID)),\r\n Categories: uniq(arr.filter(item => !!item.CategoryID).map(item => item.CategoryID)),\r\n DateFrom: first.ActualDate,\r\n DateTo: last.ActualDate\r\n };\r\n\r\n this.Navigate(['/pages/transaction-report'], params);\r\n }\r\n\r\n DisplayCellValue = memoize((col: string) => {\r\n return rowData => {\r\n if (col === 'Debit' && rowData['NotReconciledSum'] !== 0 \r\n && rowData['Debit'] !== null && rowData['Debit'] !== -999 && rowData['Debit'] !== 0) {\r\n return rowData['NotReconciledSum'];\r\n }\r\n\r\n if (col === 'Credit' && rowData['NotReconciledSum'] !== 0 \r\n && rowData['Credit'] !== null && rowData['Credit'] !== -999 && rowData['Credit'] !== 0) {\r\n return rowData['NotReconciledSum'];\r\n }\r\n\r\n return '';\r\n };\r\n });\r\n\r\n ShowChequeBtn(e) {\r\n return e?.row?.data?.IsChequesExist;\r\n }\r\n\r\n OnViewChequeClick = (e) => {\r\n if(e?.row?.data?.SystemSource === 'Transactions') {\r\n this.transactionChequeListDialog.TransactionID = e.row.data.SourceEntryId;\r\n this.transactionChequeListDialog.ShowDialogShort(e => { });\r\n\r\n return;\r\n }\r\n\r\n const oChequeId = (e?.row?.data.SourceEntryId as number);\r\n this.Do(this.futureChequeImageEndpoint.Get(oChequeId), false, (response) => {\r\n this.currentChequeImages = [];\r\n if (response.Entity.Image1) {\r\n this.currentChequeImages.push(Utils.ConvertToBlob(response.Entity.Image1, 'image/png'));\r\n }\r\n if (response.Entity.Image2) {\r\n this.currentChequeImages.push(Utils.ConvertToBlob(response.Entity.Image2, 'image/png'));\r\n }\r\n\r\n this.chequeViewDialog.Title = `${this.RC('lblChequeNumber')}: ${response.Entity.ChequeNumber}`;\r\n this.currentChequeImageIndex = 0;\r\n this.chequeViewDialog.ImageSource = this.currentChequeImages[this.currentChequeImageIndex];\r\n this.chequeViewDialog.ShowDialogShort(() => { });\r\n });\r\n };\r\n\r\n ChequeOnPrevClick() {\r\n if (this.currentChequeImageIndex === 0) {\r\n this.currentChequeImageIndex = this.currentChequeImages.length - 1;\r\n } else {\r\n this.currentChequeImageIndex--;\r\n }\r\n this.chequeViewDialog.ImageSource = this.currentChequeImages[this.currentChequeImageIndex];\r\n }\r\n\r\n ChequeOnNextClick() {\r\n if (this.currentChequeImageIndex === this.currentChequeImages.length - 1) {\r\n this.currentChequeImageIndex = 0;\r\n } else {\r\n this.currentChequeImageIndex++;\r\n }\r\n this.chequeViewDialog.ImageSource = this.currentChequeImages[this.currentChequeImageIndex];\r\n }\r\n\r\n ShowIsExcludedCheckbox(cell: any) {\r\n if(cell.value) {\r\n return true;\r\n }\r\n\r\n const row = (cell?.data || {}) as CashflowReportRowView;\r\n\r\n const hasSelected = this.State.SelectedRowsData.length > 1;\r\n const isSelectedForecastOperation = this.State.SelectedRowsData.every(\r\n r => r.SystemSource === EnumForecastSystemSource.ForecastOperation\r\n );\r\n const isForecastOperation = row.SystemSource === EnumForecastSystemSource.ForecastOperation;\r\n const isAccountingForecast = row.SystemSource === EnumForecastSystemSource.AccountingForecast;\r\n\r\n return hasSelected ? isSelectedForecastOperation : isForecastOperation || isAccountingForecast;\r\n }\r\n\r\n customizeExcelCell = (options) => {\r\n const { gridCell, excelCell } = options;\r\n const { column, value, rowType } = gridCell;\r\n\r\n if (rowType === 'header') return;\r\n\r\n const cellFormat = this.GetFormatWithCurrency(this.F.NumberSum);\r\n const excelFormat = this.GetFormatWithCurrency(this.F.NumberSum, true);\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 switch (column.name) {\r\n case 'Debit':\r\n case 'Balance':\r\n case 'Credit': {\r\n excelCell.numFmt = excelFormat;\r\n excelCell.value = parseNumberValue(value, cellFormat);\r\n break;\r\n }\r\n }\r\n };\r\n\r\n GetFormatWithCurrency = (format = this.F.NumberSum, forExcel = false) => {\r\n const symbol = this.CurrencySymbol;\r\n const formats = format.split(';');\r\n\r\n if (forExcel) {\r\n const [positiveFormat] = formats;\r\n return this.screenService.IsRTL()\r\n ? `${symbol} ${positiveFormat};${symbol} -${positiveFormat}`\r\n : `${positiveFormat} ${symbol}`;\r\n }\r\n\r\n // Put currency symbol to the end: 12 345.00 $; 12 345.00- $\r\n return formats.map(f => `${f} ${symbol}`).join(';');\r\n };\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\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.Date | formatDateShort }}\\r\\n  \\r\\n \\r\\n (O.D. {{ cell.data.ActualDate | formatDateShort }})\\r\\n \\r\\n\\r\\n 0\\\"\\r\\n [target]=\\\"cell.cellElement\\\"\\r\\n class=\\\"tooltip-light\\\"\\r\\n showEvent=\\\"mouseenter\\\"\\r\\n hideEvent=\\\"mouseleave\\\"\\r\\n [hideOnOutsideClick]=\\\"false\\\">\\r\\n \\r\\n {{ RC('lblTrailedDays', cell.data.TrailedDaysCount) }}\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n {{ GetGroupCellCaption(groupObj) }}\\r\\n
\\r\\n\\r\\n
\\r\\n {{ cell.value | formatPriceWithCurrency: CurrencySymbol }}\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\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\\\"\\r\\n Mode=\\\"transparent\\\"\\r\\n Text=\\\"{{'btnPrev' | RC:THIS}}\\\"\\r\\n (OnClick)=\\\"ChequeOnPrevClick()\\\">\\r\\n \\r\\n 1\\\"\\r\\n Mode=\\\"solid\\\"\\r\\n Type=\\\"normal\\\"\\r\\n Text=\\\"{{'btnNext' | RC:THIS}}\\\"\\r\\n (OnClick)=\\\"ChequeOnNextClick()\\\">\\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 { CashflowReportParams } from './../params/cashflowreport.param';\r\nimport { EnumSummaryLevel } from './../enums';\r\nimport { EnumCashflowSummarizedAggregationLevel } from './../enums';\r\nexport class CashflowSummarizedParams extends CashflowReportParams {\r\n constructor() {\r\n super();\r\n this.TypeName = 'CashflowSummarizedParams';\r\n }\r\n \r\n public SummaryLevel: EnumSummaryLevel; \r\n public AggregationLevel: EnumCashflowSummarizedAggregationLevel; \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 { BookingAccount } from './../entities/bookingaccount.entity';\r\nimport { EnumPeriodType } from './../enums';\r\nimport { EnumIncreaseType } from './../enums';\r\nexport class RecurringForecast extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'RecurringForecast';\r\n }\r\n \r\n public BookingAccountID: number; \r\n public BookingAccount: BookingAccount = new BookingAccount; \r\n public ScenarioID: number; \r\n public ProbabilityLevelID: number; \r\n public TransactionCategoryID: number; \r\n public BusinessPartnerID: number; \r\n public Notes1: string; \r\n public Notes2: string; \r\n public Debit: number; \r\n public Credit: number; \r\n public StartDate: Date; \r\n public EndDate: Date; \r\n public PeriodType: EnumPeriodType; \r\n public PeriodMultiple: number; \r\n public RepeatTimes: number; \r\n public IncreaseType: EnumIncreaseType; \r\n public IncreaseValue: number; \r\n public IsFixForEOM: boolean; \r\n public IsSetPaymentNumbers: boolean; \r\n public IsActive: boolean; \r\n public IsDayActive1: boolean; \r\n public IsDayActive2: boolean; \r\n public IsDayActive3: boolean; \r\n public IsDayActive4: boolean; \r\n public IsDayActive5: boolean; \r\n public IsDayActive6: boolean; \r\n public IsDayActive7: boolean; \r\n public EditOnlyFutureForecasts: boolean; \r\n public OrganizationID: number; \r\n public AccoutID: number; \r\n public CompanyID: number; \r\n public AccountFullName: string; \r\n public CategoryName: string; \r\n public IsExcluded: boolean; \r\n public NextForecastDate: Date; \r\n\tpublic CreatedBy: number;\r\n\tpublic CreatedDate: Date;\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class ForecastOperation extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ForecastOperation';\r\n }\r\n \r\n public BookingAccountID: number; \r\n public ScenarioID: number; \r\n public ProbabilityLevelID: number; \r\n public BusinessPartnerID: number; \r\n public RecurringForecastID: number; \r\n public ReconciliationID: number; \r\n public ForecastMapperID: number; \r\n public TransactionCategoryID: number; \r\n public Notes1: string; \r\n public Notes2: string; \r\n public Reference: string; \r\n public Date: Date; \r\n public Debit: number; \r\n public Credit: number; \r\n public IsExcluded: boolean; \r\n public IsFullyReconcilled: boolean; \r\n public CategoryName: string; \r\n public CategoryID: number; \r\n public ScenarioName: string; \r\n public ProbabilityLevelName: string; \r\n public BusinessPartnerName: string; \r\n public AccoutID: number; \r\n public CompanyID: number; \r\n public AccountFullName: string; \r\n public Lines: ForecastOperationReconcilliation[] = []; \r\n public Sum: number; \r\n\tpublic CreatedBy: number;\r\n\tpublic CreatedDate: Date;\r\n}\r\n\r\nexport class ForecastOperationReconcilliation extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ForecastOperationReconcilliation';\r\n }\r\n \r\n public ReconcilliationID: number; \r\n public Sum: 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 { ForecastOperation } from './../entities/forecastoperation.entity';\r\nexport class ForecastOperationView extends ForecastOperation {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ForecastOperationView';\r\n }\r\n \r\n public AdjustedDate: Date; \r\n public NotReconciledSum: number; \r\n public BookingAccountCode: string; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { CashflowReportParams } from './../params/cashflowreport.param';\r\nimport { EnumFutureForecastGroupBy } from './../enums';\r\nexport class CashflowFutureForecastOperationParams extends CashflowReportParams {\r\n constructor() {\r\n super();\r\n this.TypeName = 'CashflowFutureForecastOperationParams';\r\n }\r\n \r\n public GroupBy: EnumFutureForecastGroupBy; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { Component, Input, ViewChild } from '@angular/core';\r\nimport { BalanceView } from '@kraken/_proxy/views/balance.view';\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 } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { DxDataGridComponent, DxDataGridTypes } from 'devextreme-angular/ui/data-grid';\r\n\r\ntype GroupedBalanceViewByDate = Record;\r\n\r\nexport class State extends BaseState {\r\n SelectedRowKeys : number[] = [];\r\n GroupedBalancesByDate: GroupedBalanceViewByDate;\r\n BalanceToDateMap: Map = new Map();\r\n ManualBalances: Set = new Set();\r\n CurrentSelectedGroupKey: string;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-cashflow-balances-error-dialog',\r\n templateUrl: './cashflow-balances-error-dialog.component.html',\r\n styleUrls: ['./cashflow-balances-error-dialog.component.scss']\r\n})\r\nexport class CashflowBalancesErrorDialogComponent extends BasePageComponent {\r\n @Input() Balances: BalanceView[] = [];\r\n @Input() OrganizationID: number;\r\n @Input() Error: string;\r\n\r\n @ViewChild('grid') dataGrid!: DxDataGridComponent;\r\n\r\n get ShowForSelectedAccountsDisabled(): boolean {\r\n return !this.State.SelectedRowKeys.length;\r\n }\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'CashflowBalancesErrorDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.State.GroupedBalancesByDate = this.Balances.reduce((acc, item) => {\r\n const dateKey = item.Date.toISOString().split('T')[0];\r\n\r\n if (!acc[dateKey]) {\r\n acc[dateKey] = [];\r\n }\r\n\r\n acc[dateKey].push(item);\r\n\r\n return acc;\r\n }, \r\n {});\r\n\r\n this.Balances.forEach(b => {\r\n this.State.BalanceToDateMap.set(b.EntryID, b.Date);\r\n\r\n if(b.IsManualBalancesEntry) {\r\n this.State.ManualBalances.add(b.EntryID);\r\n }\r\n });\r\n }\r\n\r\n OnSelectionChanged(e: DxDataGridTypes.SelectionChangedEvent) {\r\n if( e.currentSelectedRowKeys.length > 0) {\r\n\r\n const currentSelectedRowKey = e.currentSelectedRowKeys[0];\r\n\r\n // Add manual balance and do not uncheck other balances\r\n if(this.State.ManualBalances.has(currentSelectedRowKey)) {\r\n this.State.SelectedRowKeys.push(currentSelectedRowKey);\r\n } else {\r\n // Check all the group of regular balances, but not uncheck manual balances\r\n\r\n // 1. Get group\r\n const currentRowId = currentSelectedRowKey;\r\n const groupKey = this.State.BalanceToDateMap.get(currentRowId)?.toISOString().split('T')[0];\r\n const group = this.State.GroupedBalancesByDate[groupKey] || [];\r\n\r\n // 2. If row is in already selected group of regular accounts only select account\r\n if(this.State.CurrentSelectedGroupKey == groupKey) {\r\n this.State.SelectedRowKeys.push(currentSelectedRowKey);\r\n } else {\r\n // 3. If new selected row is not in the already selected group - select new group and leave manual balances selected\r\n const selectedManualBalancesIds = e.selectedRowKeys.filter(r => this.State.ManualBalances.has(r));\r\n \r\n this.State.SelectedRowKeys.length = 0;\r\n this.State.SelectedRowKeys.push(...group.map(i => i.EntryID));\r\n this.State.SelectedRowKeys.push(...selectedManualBalancesIds);\r\n\r\n this.State.CurrentSelectedGroupKey = groupKey;\r\n\r\n // Refresh grid selection\r\n this.dataGrid.instance.selectRows(this.State.SelectedRowKeys, false);\r\n }\r\n\r\n }\r\n\r\n\r\n } \r\n }\r\n\r\n OnGoToSyncStatus() {\r\n const accountIds = Array.from(new Set(this.Balances.map(b => b.AccountID)));\r\n const companyIds = Array.from(new Set(this.Balances.map(b => b.CompanyID)));\r\n this.Navigate(['/pages/sync-status'], { \r\n OrganizationID: this.OrganizationID,\r\n CompanyIDs: companyIds,\r\n Accounts: accountIds\r\n });\r\n }\r\n\r\n OnShowForSelectedAccounts() {\r\n this.CloseDialogWithSuccess(this.State.SelectedRowKeys);\r\n }\r\n}","export default \"\\r\\n \\r\\n \\r\\n
{{'lblBalanceTotalCalculationError' | 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
\";","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseSelectorComponent, BaseSelectorState, SelectorSettings } from '../base-selector.component';\r\nimport { CashflowReportEndpoint } from '@kraken/_proxy/endpoints/cashflowreport.endpoint';\r\nimport { ValueText } from '@kraken/_proxy/entities/valuetext.entity';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-cashflow-category-selector',\r\n templateUrl: './cashflow-category-selector.component.html',\r\n styleUrls: ['./cashflow-category-selector.component.scss']\r\n})\r\nexport class CashflowCategorySelectorComponent extends BaseSelectorComponent, number, number, ValueText[]> {\r\n\r\n @Input() Settings: SelectorSettings;\r\n @Input() Value: number | number[];\r\n @Output() ValueChange: EventEmitter = new EventEmitter();\r\n\r\n @Input() override IsMinor = false;\r\n\r\n constructor(A: ServiceBagService,\r\n private endpoint: CashflowReportEndpoint) {\r\n super(A, 'CashflowCategorySelectorComponent', BaseSelectorState);\r\n }\r\n\r\n public override GetDefaultDataSource() { return []; }\r\n\r\n public override LoadDataSource() {\r\n return new Promise((resolve, reject) => {\r\n const { Companies, OrganizationID } = this.GetParams();\r\n\r\n if(!OrganizationID) resolve([]);\r\n\r\n this.Do(this.endpoint.ListCategories(OrganizationID, Companies), false, (response) => {\r\n const categories = response.Entities;\r\n if (response.Entities.length === 1) {\r\n this.OnValueChanged(response.Entities[0].EntryID);\r\n }\r\n resolve(categories);\r\n }, reject);\r\n });\r\n }\r\n\r\n}\r\n","export default \"\\r\\n\";","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseSelectorComponent, BaseSelectorState, SelectorSettings } from '../base-selector.component';\r\nimport { CashflowReportEndpoint } from '@kraken/_proxy/endpoints/cashflowreport.endpoint';\r\nimport { ValueText } from '@kraken/_proxy/entities/valuetext.entity';\r\nimport ArrayStore from 'devextreme/data/array_store';\r\nimport DataSource from 'devextreme/data/data_source';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-cashflow-datasource-selector',\r\n templateUrl: './cashflow-datasource-selector.component.html',\r\n styleUrls: ['./cashflow-datasource-selector.component.scss']\r\n})\r\nexport class CashflowDataSourceSelectorComponent \r\n extends BaseSelectorComponent, number, number, ValueText[]> {\r\n\r\n @Input() Settings: SelectorSettings;\r\n @Input() Value: number | number[];\r\n @Output() ValueChange: EventEmitter = new EventEmitter();\r\n\r\n @Input() override IsMinor = false;\r\n\r\n constructor(A: ServiceBagService,\r\n private endpoint: CashflowReportEndpoint) {\r\n super(A, 'CashflowDataSourceSelectorComponent', BaseSelectorState);\r\n }\r\n\r\n public override GetDefaultDataSource() {\r\n return []; \r\n }\r\n\r\n public override LoadDataSource() {\r\n return new Promise((resolve, reject) => {\r\n const { dynamicOnly, Companies, OrganizationID } = this.GetParams();\r\n\r\n if(!OrganizationID) resolve([]);\r\n\r\n this.Do(this.endpoint.ListDataSources(OrganizationID, Companies, dynamicOnly), false, (response) => {\r\n const sources= response.Entities.map(entity => ({\r\n ...entity,\r\n Group: this.GetGroup(entity.Value),\r\n }));\r\n\r\n if (sources.length === 1) {\r\n this.OnValueChanged(sources[0].Value);\r\n } \r\n \r\n const groupedSources = new DataSource({\r\n store: new ArrayStore({\r\n data: this.GetPregroupedSources(sources),\r\n key: 'Value',\r\n }),\r\n map(item) {\r\n item.key = item.Group;\r\n item.items = item.Items;\r\n return item;\r\n },\r\n });\r\n \r\n resolve(groupedSources);\r\n }, reject);\r\n });\r\n }\r\n\r\n private GetGroup(value: string): string {\r\n switch (value) {\r\n case 'CreditCardExpence':\r\n case 'CreditCardIncome':\r\n case 'LoanPayment':\r\n case 'Deposits':\r\n case 'FutureCheques':\r\n return 'BankData';\r\n case 'OneTimeExpence':\r\n case 'OneTimeIncome':\r\n case 'RecurringExpence':\r\n case 'RecurringIncome':\r\n return 'ForecastsData'; \r\n default:\r\n return 'ERPData'; \r\n } \r\n }\r\n\r\n private GetPregroupedSources(sources: ValueText[]): any[] {\r\n const sourcesWithGroup = sources.map(entity => ({\r\n ...entity,\r\n Group: this.GetGroup(entity.Value),\r\n }));\r\n \r\n return [{\r\n Group: this.RC('lblBankData'),\r\n Items: sourcesWithGroup.filter(source => source.Group === 'BankData'),\r\n }, \r\n {\r\n Group: this.RC('lblForecastsData'), \r\n Items: sourcesWithGroup.filter(source => source.Group === 'ForecastsData'),\r\n },\r\n {\r\n Group: this.RC('lblERPData'),\r\n Items: sourcesWithGroup.filter(source => source.Group === 'ERPData'),\r\n },\r\n ];\r\n }\r\n}\r\n","export default \"\\r\\n\";","import { Component, ViewChild } from '@angular/core';\r\nimport {\r\n ServiceBagServices,\r\n ServiceBagService,\r\n} from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState, BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport {\r\n EnumBookingAccountSubtypes, EnumCashflowSummarizedAggregationLevel,\r\n EnumForecastSystemSource,\r\n EnumFutureForecastGroupBy, EnumSide\r\n} from '../../_proxy/enums';\r\nimport { Globals } from '../../_globals';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { CashflowReportRowView } from '../../_proxy/views/cashflowreportrow.view';\r\nimport { CashflowReportParams } from '../../_proxy/params/cashflowreport.param';\r\nimport { CashflowReportEndpoint } from '../../_proxy/endpoints/cashflowreport.endpoint';\r\nimport { CashflowSummarizedParams } from '../../_proxy/params/cashflowsummarized.param';\r\nimport { CashflowReportSummarizedGroup } from '../../_proxy/entities/cashflowreportsummarizedgroup.entity';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { RecurringForecast } from '../../_proxy/entities/recurringforecast.entity';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { DxTabsComponent } from 'devextreme-angular';\r\nimport { FilterComponent, FilterSettings, FilterValues } from '../../components/filter/filter.component';\r\nimport { ForecastOperationView } from '../../_proxy/views/forecastoperation.view';\r\nimport { Company } from '../../_proxy/entities/company.entity';\r\nimport { Account } from '../../_proxy/entities/account.entity';\r\nimport { BookingAccount } from '../../_proxy/entities/bookingaccount.entity';\r\nimport { Scenario } from '../../_proxy/entities/scenario.entity';\r\nimport { ProbabilityLevel } from '../../_proxy/entities/probabilitylevel.entity';\r\nimport { FilterService } from '@kraken/services/filter.service';\r\nimport { Subscription } from 'rxjs';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { QuickFilterSettings } from '@kraken/components/quick-filter/quick-filter.component';\r\nimport { formatDate } from 'devextreme/localization';\r\nimport { CashflowFutureForecastOperationParams } from '@kraken/_proxy/params/cashflowfutureforecastoperation.param';\r\nimport { CashflowFutureForecastGroups } from '@kraken/_proxy/entities/cashflowfutureforecastgroups.entity';\r\nimport { debounce } from 'lodash';\r\nimport { BalanceReportParams } from '@kraken/_proxy/params/balancereport.param';\r\nimport { ValueText } from '@kraken/_proxy/entities/valuetext.entity';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { CashflowService } from '@kraken/services/cashflow.service';\r\nimport { CompanyEndpoint } from '@kraken/_proxy/endpoints/company.endpoint';\r\nimport { CashflowBalancesErrorDialogComponent } from './cashflow-balances-error-dialog/cashflow-balances-error-dialog.component';\r\nimport { BalanceEndpoint } from '@kraken/_proxy/endpoints/balance.endpoint';\r\nimport { BalanceView } from '@kraken/_proxy/views/balance.view';\r\nimport { CashflowDataSourceSelectorComponent } from '@kraken/components';\r\n\r\nconst resetFilters = (filters: FilterValues, ignore = []) => {\r\n Object.entries(filters).forEach(([key, value]) => {\r\n if (ignore.includes(key)) {\r\n return;\r\n }\r\n\r\n if (Array.isArray(value)) {\r\n filters[key] = [];\r\n return;\r\n }\r\n\r\n filters[key] = null;\r\n });\r\n};\r\n\r\nclass State extends BaseState {\r\n FilterValues: FilterValues;\r\n FilterSettings: FilterSettings;\r\n QuickFilterSettings: QuickFilterSettings;\r\n CompaniesItems: Company[] = [];\r\n AccountsItems: Account[] = [];\r\n BookingAccountsItems: BookingAccount[] = [];\r\n ScenariosItems: Scenario[];\r\n ProbabilityLevelsItems: ProbabilityLevel[];\r\n TransactionCategoriesItems: any[];\r\n BalanceDate: Date = Globals.Yesterday;\r\n BalanceActualDate: Date;\r\n BalanceNotes: string;\r\n SortOrder: string = 'desc';\r\n GridCaption: string;\r\n CurrentTab: string;\r\n CurrentBalance: number = 0;\r\n CurrentCreditBalance: number = 0;\r\n LastDateBalance: number = 0;\r\n FirstDateBalance: number = 0;\r\n LastDateStr: string = '-';\r\n FirstDateStr: string = '-';\r\n CalculationDateStr: string = '-';\r\n SummarizedGridData: any[] = [];\r\n DetailedGridData: CashflowReportRowView[] = [];\r\n SummarizedGroups: CashflowReportSummarizedGroup[] = [];\r\n AggrigationLevels = [];\r\n IsFiltersVisible: boolean;\r\n FutureForecastOperations: CashflowFutureForecastGroups;\r\n CashflowCategories: ValueText[];\r\n FutureForecastGroupBy: EnumFutureForecastGroupBy = EnumFutureForecastGroupBy.Category;\r\n ChartName: string;\r\n IgnorePastUnreconcilledTransactions = false;\r\n ErrorInBalances = false;\r\n BalancesError: string;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-cashflow-report',\r\n templateUrl: './cashflow-report.component.html',\r\n styleUrls: ['./cashflow-report.component.scss'],\r\n})\r\nexport class CashflowReportComponent extends BasePageComponent {\r\n @ViewChild('filter') filter: FilterComponent;\r\n @ViewChild('grid', { static: false }) grid: BaseGridComponent;\r\n @ViewChild('tabs') tabs: DxTabsComponent;\r\n @ViewChild(CashflowDataSourceSelectorComponent) DataSourceSelector: CashflowDataSourceSelectorComponent;\r\n @ViewChild(CashflowBalancesErrorDialogComponent) errorBalancesDialog: CashflowBalancesErrorDialogComponent;\r\n\r\n get DataItems() {\r\n return {\r\n TransactionCategoriesItems: this.State.TransactionCategoriesItems,\r\n CompaniesItems: this.State.CompaniesItems,\r\n AccountsItems: this.State.AccountsItems,\r\n BookingAccountsItems: this.State.BookingAccountsItems,\r\n ScenariosItems: this.State.ScenariosItems,\r\n ProbabilityLevelsItems: this.State.ProbabilityLevelsItems,\r\n };\r\n }\r\n\r\n get IsSummaryLevelVisible() {\r\n return this.cashflowService.CurrentTabIndex != 0 && this.State.ChartName !== 'forecast_operations' ? '' : 'hidden';\r\n }\r\n\r\n get IsAggregationLevelVisible() {\r\n return this.cashflowService.CurrentTabIndex != 3 && this.cashflowService.CurrentTabIndex != 0\r\n && this.State.ChartName !== 'forecast_operations' ? '' : 'hidden';\r\n }\r\n\r\n get IsPivotVisible() {\r\n return this.cashflowService.CurrentTabIndex === 1;\r\n }\r\n\r\n CashflowTabs = this.LIST('CashflowTabs');\r\n\r\n OnReadyFilter() {\r\n this.LoadReportData();\r\n }\r\n\r\n get CashflowReportParams() {\r\n const params = new CashflowReportParams();\r\n\r\n params.OrganizationID = this.State.FilterValues.OrganizationID;\r\n params.Companies = this.State.FilterValues.Company as number[];\r\n params.AccountGroups = this.State.FilterValues.AccountGroup as number[];\r\n params.Accounts = this.State.FilterValues.Account as number[];\r\n params.Currency = this.State.FilterValues.Currency as string;\r\n params.BookingAccounts = this.State.FilterValues.BookingAccount as number[];\r\n params.Scenarios = this.State.FilterValues.Scenario as number[];\r\n params.ProbabilityLevels = this.State.FilterValues.ProbabilityLevel as number[];\r\n params.DateFrom = this.State.FilterValues.DateFrom;\r\n params.DateTo = this.State.FilterValues.DateTo;\r\n params.Categories = this.State.FilterValues.CashflowCategory as string[];\r\n params.DataSources = this.State.FilterValues.CashflowDataSource as string[];\r\n params.CalculationDate = this.cashflowService.CalculationDate;\r\n params.IgnorePastUnreconcilledTransactions = this.State.IgnorePastUnreconcilledTransactions;\r\n params.DoNotShowEmptyCategoriesInSplit = this.cashflowService.CurrentTabIndex == 0;\r\n\r\n return params;\r\n }\r\n\r\n\r\n get CurrencySymbol() {\r\n return (this.LISTITEMX('Currencies', this.State.FilterValues.Currency) as any)?.Symbol;\r\n }\r\n\r\n constructor(\r\n A: ServiceBagService,\r\n public screenService: ScreenService,\r\n private cashflowReportEndpoint: CashflowReportEndpoint,\r\n private filterService: FilterService,\r\n public cashflowService: CashflowService,\r\n public companyEndpoint: CompanyEndpoint,\r\n private balanceEndpoint: BalanceEndpoint,\r\n ) {\r\n super(A, 'CashflowReportComponent', BaseEntity, State);\r\n }\r\n\r\n get BalanceNotes() {\r\n if (!this.State.BalanceNotes) return;\r\n return `(${this.State.BalanceNotes})`;\r\n }\r\n\r\n get TotalBalance() {\r\n return this.State.CurrentBalance + this.State.CurrentCreditBalance;\r\n }\r\n\r\n ExpandButtons = [{\r\n text: this.RC('lblCollapseAll'),\r\n onClick: () => this.grid?.gridAny?.instance?.collapseAll()\r\n }, {\r\n text: this.RC('lblExpandAll'),\r\n onClick: () => this.grid?.gridAny?.instance?.expandAll()\r\n }];\r\n\r\n GetAggrigationLevels() {\r\n if (this.cashflowService.CurrentTabIndex === 1) {\r\n this.State.AggrigationLevels = this.LIST('CashflowSummarizedAggregationLevels')\r\n .filter(l => l.Value !== EnumCashflowSummarizedAggregationLevel.Category);\r\n } else {\r\n this.State.AggrigationLevels = this.LIST('CashflowSummarizedAggregationLevels');\r\n }\r\n }\r\n\r\n override OnInitState() {\r\n this.State.FilterSettings = {\r\n Company: {\r\n IsVisible: true, IsMultiple: true, Params: () => {\r\n return { IsActiveCashFlow: true };\r\n }\r\n },\r\n Account: {\r\n IsVisible: true, IsMultiple: true, Params: () => {\r\n return { IsActiveCashFlow: true };\r\n }\r\n },\r\n BookingAccount: {\r\n IsVisible: true, IsMultiple: true, Params: () => {\r\n return { IsActiveCashFlow: true, BookingAccountSubtypes: [EnumBookingAccountSubtypes.Current], LoadActive: true };\r\n }\r\n },\r\n AccountGroup: { IsVisible: true, IsMultiple: true },\r\n CashflowCategory: { IsVisible: true, IsMultiple: true },\r\n CashflowDataSource: { IsVisible: true, IsMultiple: true },\r\n Scenario: { IsVisible: true, IsMultiple: true },\r\n CurrencyFilter: { IsVisible: true, IsMultiple: true },\r\n ProbabilityLevel: { IsVisible: true, IsMultiple: true },\r\n Currency: { IsVisible: true },\r\n IsDatesVisible: true,\r\n\r\n IsLoadActiveCashflow: true\r\n } as FilterSettings;\r\n\r\n this.State.QuickFilterSettings = {\r\n Company: {\r\n IsVisible: true, IsMultiple: true, Params: () => {\r\n return { IsActiveCashFlow: true };\r\n }\r\n },\r\n Account: {\r\n IsVisible: true, IsMultiple: true, Params: () => {\r\n return { IsActiveCashFlow: true };\r\n }\r\n },\r\n IsDatesVisible: true,\r\n } as QuickFilterSettings;\r\n\r\n this.State.ChartName = 'income_expences';\r\n\r\n this.InitFilterValues();\r\n }\r\n\r\n InitFilterValues() {\r\n if (!this.State.FilterValues) {\r\n this.State.FilterValues = new FilterValues();\r\n } else {\r\n resetFilters(this.State.FilterValues, ['OrganizationID', 'Company']);\r\n }\r\n\r\n this.State.FilterValues.OrganizationID = Globals.OrganizationID;\r\n this.State.FilterValues.Company = Globals.CompanyID > 0 ? [Globals.CompanyID] : [];\r\n this.State.FilterValues.Currency = Globals.OrganizationDefaultCurrency ?? 'ILS';\r\n this.State.FilterValues.DateFrom = this.cashflowService.DateFrom ?? new Date(Globals.Today.setHours(0, 0, 0));\r\n this.State.FilterValues.DateTo = this.cashflowService.DateTo ??\r\n new Date(new Date(Globals.Today.getFullYear(), Globals.Today.getMonth() + 1, 0)\r\n .setHours(23, 59, 59, 999));\r\n this.State.IgnorePastUnreconcilledTransactions = false;\r\n\r\n this.SetCashflowDataSourceFilter();\r\n }\r\n\r\n OnQuickFilterChanged(event: any) {\r\n this.cashflowService.DateTo = this.State.FilterValues.DateTo;\r\n this.cashflowService.DateFrom = this.State.FilterValues.DateFrom;\r\n\r\n this.LoadReportData();\r\n }\r\n\r\n override OnInitComponent() {\r\n this.GetAggrigationLevels();\r\n }\r\n\r\n LoadDataSources() {\r\n const { Company, OrganizationID } = this.State.FilterValues;\r\n this.DataSources['DataSources'] = new DataSourceCustomAction(\r\n (options) => this.cashflowReportEndpoint.ListDataSources(OrganizationID, Company as number[], false));\r\n }\r\n\r\n private _subscriptions: Subscription[] = [];\r\n override OnInitComponentFinished() {\r\n // this.filter.LoadData();\r\n\r\n const sources = this.filterService.Sources(this.ComponentName);\r\n if (sources.CompanyItems$) {\r\n this._subscriptions.push(sources.CompanyItems$.subscribe((companyItems) => {\r\n this.State.CompaniesItems = companyItems;\r\n this.SetCashflowDataSourceFilter();\r\n }));\r\n }\r\n if (sources.TransactionCategoryItems$) {\r\n this._subscriptions.push(sources.TransactionCategoryItems$.subscribe((transactionCategoriesItems) => {\r\n this.State.TransactionCategoriesItems = transactionCategoriesItems;\r\n }));\r\n }\r\n if (sources.AccountItems$) {\r\n this._subscriptions.push(sources.AccountItems$.subscribe((accountItems) => {\r\n this.State.AccountsItems = accountItems;\r\n }));\r\n }\r\n if (sources.BookingAccountItems$) {\r\n this._subscriptions.push(sources.BookingAccountItems$.subscribe((bookingAccountItems) => {\r\n this.State.BookingAccountsItems = bookingAccountItems;\r\n }));\r\n }\r\n if (sources.ScenarioItems$) {\r\n this._subscriptions.push(sources.ScenarioItems$.subscribe((scenarioItems) => {\r\n this.State.ScenariosItems = scenarioItems;\r\n }));\r\n }\r\n if (sources.ProbabilityLevelItems$) {\r\n this._subscriptions.push(sources.ProbabilityLevelItems$.subscribe((probabilityLevelItems) => {\r\n this.State.ProbabilityLevelsItems = probabilityLevelItems;\r\n }));\r\n }\r\n if (sources.CashflowCategories$) {\r\n this._subscriptions.push(sources.CashflowCategories$.subscribe((items) => {\r\n this.State.CashflowCategories = items;\r\n }));\r\n }\r\n }\r\n\r\n override OnDestroyComponent() {\r\n this._subscriptions.forEach(subscription => {\r\n subscription.unsubscribe();\r\n });\r\n }\r\n\r\n OnSummaryLevelChanged(e) {\r\n this.LoadReportData();\r\n }\r\n\r\n OnAggregationLevelChanged(e) {\r\n this.LoadReportData();\r\n }\r\n\r\n\r\n get ShowFirstBalance(): boolean {\r\n return this.cashflowService.CalculationDate >= this.State.FilterValues.DateFrom;\r\n }\r\n\r\n get CurrentTabText() {\r\n return this.LISTITEMX('CashflowTabs', this.cashflowService.CurrentTabIndex)?.Text;\r\n }\r\n\r\n OnTabChanged(event) {\r\n this.State.ChartName = 'income_expences';\r\n this.cashflowService.CurrentTabIndex = event.itemData.Value;\r\n this.GetAggrigationLevels();\r\n this.ReloadToolbar();\r\n const { DateFrom, DateTo } = this.State.FilterValues;\r\n if (!this.State.FilterValues?.OrganizationID || DateFrom > DateTo || !DateFrom || !DateTo) {\r\n this.RepaintToolbar();\r\n return;\r\n }\r\n\r\n this.State.DetailedGridData = [];\r\n this.State.SummarizedGroups = [];\r\n this.State.SummarizedGridData = [];\r\n\r\n switch (this.cashflowService.CurrentTabIndex) {\r\n case 0:\r\n this.LoadDetailedData();\r\n break;\r\n case 1:\r\n case 2:\r\n this.cashflowService.AggregationLevel = EnumCashflowSummarizedAggregationLevel.BookingAccount;\r\n this.LoadSummarizedData();\r\n break;\r\n\r\n case 3:\r\n this.cashflowService.AggregationLevel = EnumCashflowSummarizedAggregationLevel.Category;\r\n this.LoadSummarizedData();\r\n break;\r\n case 4:\r\n this.cashflowService.AggregationLevel = EnumCashflowSummarizedAggregationLevel.Category;\r\n this.LoadSummarizedData();\r\n break; \r\n }\r\n this.RepaintToolbar();\r\n }\r\n\r\n LoadDetailedData() {\r\n if (!this.cashflowService.CalculationDate || !this.State.FilterValues.DateFrom || !this.State.FilterValues.DateTo) return;\r\n\r\n this.Do(\r\n this.cashflowReportEndpoint.ListCashflowReportTransactions(this.CashflowReportParams),\r\n false,\r\n (response) => {\r\n this.State.DetailedGridData = response.Entities;\r\n if (response.Entities.length > 0) {\r\n const lastItem = response.Entities.at(-1);\r\n const firstItem = response.Entities.at(0);\r\n this.State.LastDateBalance = lastItem.Balance;\r\n this.State.FirstDateBalance = firstItem.Balance + firstItem.Debit - firstItem.Credit;\r\n this.State.LastDateStr = formatDate(lastItem.Date, this.F.DateFormatShort);\r\n this.State.FirstDateStr = formatDate(\r\n new Date(firstItem.Date.getFullYear(), firstItem.Date.getMonth(), firstItem.Date.getDate() - 1),\r\n this.F.DateFormatShort);\r\n } else {\r\n this.State.FirstDateBalance = 0;\r\n this.State.FirstDateStr = '-';\r\n this.State.LastDateBalance = this.State.CurrentBalance;\r\n this.State.LastDateStr = formatDate(this.cashflowService.CalculationDate, this.F.DateFormatShort);\r\n }\r\n },\r\n () => {\r\n this.State.DetailedGridData = [];\r\n }\r\n );\r\n }\r\n\r\n LoadBalance() {\r\n const params = new BalanceReportParams();\r\n params.OrganizationID = this.State.FilterValues.OrganizationID;\r\n params.BookingAccounts = this.State.FilterValues.BookingAccount as number[];\r\n params.Companies = this.State.FilterValues.Company as number[];\r\n params.AccountGroups = this.State.FilterValues.AccountGroup as number[];\r\n params.Accounts = this.State.FilterValues.Account as number[];\r\n params.Currency = this.State.FilterValues.Currency as string;\r\n params.BookingAccountSubtypes = [EnumBookingAccountSubtypes.Current];\r\n params.Date = this.State.FilterValues.Date;\r\n params.DateFrom = this.State.FilterValues.DateFrom;\r\n params.DateTo = this.State.FilterValues.DateTo;\r\n params.IsActiveCashflow = true;\r\n params.LoadActive = true;\r\n\r\n return new Promise(resolve => {\r\n this.Do(this.cashflowReportEndpoint.CashflowBalanceView(params), false,\r\n (response) => {\r\n //Set balance\r\n this.State.CurrentCreditBalance = response.Entity.CreditBalance;\r\n this.State.CurrentBalance = response.Entity.CurrentBalance;\r\n this.State.ErrorInBalances = false;\r\n\r\n //See if loading for the first time\r\n let bFirstLoad: boolean;\r\n if (!this.cashflowService.CalculationDate) bFirstLoad = true;\r\n\r\n //Set calculation date\r\n this.cashflowService.CalculationDate = response.Entity.CalculationDate;\r\n this.State.CalculationDateStr = formatDate(this.cashflowService.CalculationDate, this.F.DateFormatShort);\r\n\r\n //Set default filter dates when loading first time\r\n if (bFirstLoad) {\r\n const dateFrom = this.GetNextDayFromDate(response.Entity.CalculationDate);\r\n this.State.FilterValues.DateFrom = dateFrom;\r\n this.State.FilterValues.DateTo = new Date(new Date(Globals.Today.getFullYear(),\r\n Globals.Today.getMonth() + 1, 0).setHours(23, 59, 59, 999));\r\n }\r\n resolve(true);\r\n },\r\n (response) => {\r\n this.State.CurrentCreditBalance = 0;\r\n this.State.CurrentBalance = 0;\r\n this.cashflowService.CalculationDate = null;\r\n this.State.ErrorInBalances = true;\r\n this.State.BalancesError = response.ResponseMessage;\r\n this.State.DetailedGridData = [];\r\n this.State.SummarizedGridData = []; \r\n this.State.SummarizedGroups = [];\r\n this.State.FutureForecastOperations = null;\r\n \r\n this.HandleError(params, response.ResponseMessage);\r\n }\r\n );\r\n });\r\n }\r\n\r\n LoadSummarizedData() {\r\n if (!this.cashflowService.CalculationDate) return;\r\n\r\n const params = new CashflowSummarizedParams();\r\n params.OrganizationID = this.State.FilterValues.OrganizationID;\r\n params.Companies = this.State.FilterValues.Company as number[];\r\n params.AccountGroups = this.State.FilterValues.AccountGroup as number[];\r\n params.Accounts = this.State.FilterValues.Account as number[];\r\n params.Currency = this.State.FilterValues.Currency as string;\r\n params.BookingAccounts = this.State.FilterValues.BookingAccount as number[];\r\n params.Scenarios = this.State.FilterValues.Scenario as number[];\r\n params.ProbabilityLevels = this.State.FilterValues.ProbabilityLevel as number[];\r\n params.DateFrom = this.State.FilterValues.DateFrom;\r\n params.DateTo = this.State.FilterValues.DateTo;\r\n params.AggregationLevel = this.cashflowService.AggregationLevel;\r\n params.SummaryLevel = this.cashflowService.SummaryLevel;\r\n params.CalculationDate = this.cashflowService.CalculationDate;\r\n params.Categories = this.State.FilterValues.CashflowCategory as string[];\r\n params.DataSources = this.State.FilterValues.CashflowDataSource as string[];\r\n params.IgnorePastUnreconcilledTransactions = this.State.IgnorePastUnreconcilledTransactions;\r\n\r\n this.Do(\r\n this.cashflowReportEndpoint.ListCashflowReportSummarizedTransactions(params),\r\n false,\r\n (response) => {\r\n if (response.Entities.length == 0) {\r\n this.State.SummarizedGroups = [];\r\n this.State.SummarizedGridData = [];\r\n this.State.LastDateBalance = this.State.CurrentBalance;\r\n this.State.LastDateStr = formatDate(this.cashflowService.CalculationDate, this.F.DateFormatShort);\r\n } else {\r\n const data = response.Entities[0].Rows.map(r => {\r\n return { DatePeriodTitle: r.DatePeriodTitle, DateFrom: r.DateFrom, DateTo: r.DateTo };\r\n });\r\n for (let i = 0; i < response.Entities.length; i++) {\r\n for (let j = 0; j < data.length; j++) {\r\n const entity = response.Entities[i].Rows[j];\r\n data[j][`Credit${i}`] = entity.Credit;\r\n data[j][`Debit${i}`] = entity.Debit * -1;\r\n data[j][`Balance${i}`] = entity.Balance;\r\n data[j]['BalanceWarning'] = data[j]['BalanceWarning'] || entity.BalanceWarning;\r\n }\r\n }\r\n\r\n this.State.SummarizedGroups = response.Entities;\r\n this.State.SummarizedGridData = data;\r\n const summaryGroup = response.Entities.at(-1);\r\n const lastItem = summaryGroup.Rows.at(-1);\r\n const firstItem = summaryGroup.Rows.at(0);\r\n this.State.LastDateBalance = lastItem.Balance;\r\n this.State.LastDateStr = formatDate(lastItem.DateTo, this.F.DateFormatShort);\r\n\r\n this.State.FirstDateBalance = firstItem.Balance + firstItem.Debit - firstItem.Credit;\r\n this.State.FirstDateStr = formatDate(new Date(firstItem.DateFrom.getFullYear(),\r\n firstItem.DateFrom.getMonth(), firstItem.DateFrom.getDate() - 1), this.F.DateFormatShort);\r\n }\r\n }\r\n );\r\n }\r\n\r\n LoadFutureForecastOperations() {\r\n if (!this.cashflowService.CalculationDate) return;\r\n\r\n const params = new CashflowFutureForecastOperationParams();\r\n\r\n params.OrganizationID = this.State.FilterValues.OrganizationID;\r\n params.Companies = this.State.FilterValues.Company as number[];\r\n params.AccountGroups = this.State.FilterValues.AccountGroup as number[];\r\n params.Accounts = this.State.FilterValues.Account as number[];\r\n params.Currency = this.State.FilterValues.Currency as string;\r\n params.BookingAccounts = this.State.FilterValues.BookingAccount as number[];\r\n params.Scenarios = this.State.FilterValues.Scenario as number[];\r\n params.ProbabilityLevels = this.State.FilterValues.ProbabilityLevel as number[];\r\n params.DateFrom = this.State.FilterValues.DateFrom;\r\n params.DateTo = this.State.FilterValues.DateTo;\r\n params.GroupBy = this.State.FutureForecastGroupBy;\r\n params.CalculationDate = this.cashflowService.CalculationDate;\r\n\r\n this.Do(this.cashflowReportEndpoint.ListFutureForecastOperations(params), false, (response) => {\r\n this.State.FutureForecastOperations = response.Entity;\r\n });\r\n }\r\n\r\n OnNavigateBalanceReport() {\r\n if (!this.State.FilterValues.OrganizationID) return;\r\n\r\n const params: any = {\r\n OrganizationID: this.State.FilterValues.OrganizationID,\r\n CompanyID: this.State.FilterValues.Company,\r\n Accounts: this.State.FilterValues.Account as number[],\r\n BookingAccounts: this.State.FilterValues.BookingAccount as number[]\r\n };\r\n\r\n this.Navigate(['/pages/balance-report'], params, true);\r\n }\r\n\r\n OnNavigateCreditLimit() {\r\n if (!this.State.FilterValues.OrganizationID) return;\r\n const params: any = {\r\n OrganizationID: this.State.FilterValues.OrganizationID,\r\n CompanyID: this.GetSingleOrDefaultFilterValue('Company'),\r\n Accounts: this.State.FilterValues.Account as number[],\r\n BookingAccounts: this.State.FilterValues.BookingAccount as number[]\r\n };\r\n\r\n // const bookingAccounts = this.State.FilterValues.BookingAccount as number[];\r\n // if (this.DS('BookingAccounts')?.Items.length === 1) {\r\n // params.BookingAccountID = this.DS('BookingAccounts').Items[0].EntryID;\r\n // }\r\n // else if (bookingAccounts && bookingAccounts.length === 1) {\r\n // params.BookingAccountID = bookingAccounts[0];\r\n // }\r\n this.Navigate(['/pages/credit-limits'], params, true);\r\n }\r\n\r\n GetSingleOrDefaultFilterValue = (objectName: 'Company' | 'Account' | 'BookingAccount') => {\r\n const value = this.State.FilterValues[objectName];\r\n\r\n if (Array.isArray(value)) {\r\n return value.length ? value[0] : null;\r\n } else {\r\n return value;\r\n }\r\n };\r\n\r\n GetForecastOperationParams(side: EnumSide): any {\r\n const params: any = {\r\n OrganizationID: this.State.FilterValues.OrganizationID,\r\n Side: side\r\n };\r\n\r\n\r\n\r\n const company = this.GetSingleOrDefaultFilterValue('Company');\r\n const account = this.GetSingleOrDefaultFilterValue('Account');\r\n const bookingAccount = this.GetSingleOrDefaultFilterValue('BookingAccount');\r\n\r\n if (company) params.CompanyID = company;\r\n\r\n if (account) params.AccountID = account;\r\n\r\n if (bookingAccount) params.BookingAccountID = bookingAccount;\r\n\r\n return params;\r\n }\r\n\r\n OnAddNewExpense(event: any) {\r\n const params = this.GetForecastOperationParams(EnumSide.Expense);\r\n\r\n switch (event.itemData.Value) {\r\n case 'OneTime':\r\n this.Navigate(['/pages/forecast-operation/new'], params, true);\r\n break;\r\n case 'Recurring':\r\n this.Navigate(['/pages/recurring-forecast/new'], params, true);\r\n break;\r\n }\r\n }\r\n\r\n OnAddNewIncome(event: any) {\r\n const params = this.GetForecastOperationParams(EnumSide.Income);\r\n\r\n switch (event.itemData.Value) {\r\n case 'OneTime':\r\n this.Navigate(['/pages/forecast-operation/new'], params, true);\r\n break;\r\n case 'Recurring':\r\n this.Navigate(['/pages/recurring-forecast/new'], params, true);\r\n break;\r\n }\r\n }\r\n\r\n OnReconciliation() {\r\n this.Navigate(['/pages/reconciliation-form'], null, true);\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity,\r\n ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n if (ExternalEntityType == ForecastOperationView || ExternalEntityType == RecurringForecast) {\r\n this.LoadReportData();\r\n }\r\n }\r\n\r\n GetNextDayFromDate(date: Date) {\r\n if (!date) return;\r\n\r\n return new Date(date.getFullYear(), date.getMonth(), date.getDate() + 1);\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n const settings = new ToolbarSettings;\r\n settings.IsAllowFilter = true;\r\n settings.IsAllowExport = false;\r\n settings.GridExtender = () => this.grid?.G;\r\n\r\n return settings;\r\n }\r\n\r\n override OnApplyFilter() {\r\n this.cashflowService.DateTo = this.State.FilterValues.DateTo;\r\n this.cashflowService.DateFrom = this.State.FilterValues.DateFrom;\r\n this.LoadReportData();\r\n }\r\n\r\n override OnClearFilter() {\r\n this.cashflowService.ClearDates();\r\n this.InitFilterValues();\r\n this.LoadReportData();\r\n }\r\n\r\n OnOrganizationChanged() {\r\n this.cashflowService.CalculationDate = undefined;\r\n this.LoadReportData();\r\n this.SetCashflowDataSourceFilter();\r\n }\r\n\r\n OnFilterCompanyChanged() {\r\n this.UpdateDataSources();\r\n this.SetCashflowDataSourceFilter();\r\n }\r\n\r\n UpdateDataSources = debounce(async () => {\r\n await this.DataSourceSelector?.LoadDataSource();\r\n }, 700);\r\n\r\n LoadReportData = debounce(async () => {\r\n const { Company, DateFrom, DateTo } = this.State.FilterValues;\r\n \r\n if (!this.State.FilterValues?.OrganizationID || DateFrom > DateTo || !DateFrom || !DateTo) {\r\n return;\r\n }\r\n\r\n if ((Company as number) < 0) {\r\n this.State.FilterValues.Company = [];\r\n }\r\n\r\n await this.LoadBalance();\r\n\r\n if (this.State.ErrorInBalances) {\r\n return;\r\n }\r\n\r\n switch (this.cashflowService.CurrentTabIndex) {\r\n case 0:\r\n this.LoadDetailedData();\r\n break;\r\n\r\n case 1:\r\n case 3:\r\n case 4:\r\n this.LoadSummarizedData();\r\n break;\r\n\r\n case 2:\r\n if (this.State.ChartName === 'income_expences' || this.State.ChartName === 'balance_growth') {\r\n this.LoadSummarizedData();\r\n } else if (this.State.ChartName === 'forecast_operations') {\r\n this.LoadFutureForecastOperations();\r\n }\r\n\r\n break;\r\n }\r\n }, 700);\r\n\r\n OnGroupByChanged() {\r\n this.LoadReportData();\r\n }\r\n\r\n OnChartChange(e) {\r\n this.State.ChartName = e;\r\n this.LoadReportData();\r\n }\r\n\r\n OnViewChange({ GroupBy, type, IsOther }) {\r\n const getOneOrOthers = () => {\r\n if (GroupBy.length === 1) return GroupBy;\r\n\r\n return this.State.CashflowCategories\r\n .filter(c => !GroupBy.includes(c.Value))\r\n .map(c => c.Value);\r\n };\r\n\r\n const params = { ...this.CashflowReportParams, type };\r\n\r\n if (this.State.FutureForecastGroupBy === EnumFutureForecastGroupBy.Category) {\r\n params.Categories = getOneOrOthers();\r\n }\r\n\r\n if (this.State.FutureForecastGroupBy === EnumFutureForecastGroupBy.ParentCategory) {\r\n params.ParentCategories = IsOther ? [null] : getOneOrOthers();\r\n }\r\n\r\n if (this.State.FutureForecastGroupBy === EnumFutureForecastGroupBy.DataSource) {\r\n params.DataSources = getOneOrOthers();\r\n }\r\n\r\n // Not universal solution.\r\n this.Navigate(['/pages/cashflow-report-grid'], params, false, true);\r\n }\r\n\r\n OnUploadExcel() {\r\n this.Navigate(['/pages/import-forecasts']);\r\n }\r\n\r\n OnDownloadExcel() {\r\n const gridExtender = this.grid?.G;\r\n if (!gridExtender) {\r\n return;\r\n }\r\n\r\n gridExtender && gridExtender.ExportExcel();\r\n }\r\n\r\n private SetCashflowDataSourceFilter() {\r\n const companyIDs = this.State.FilterValues.Company as number[];\r\n\r\n const companies = companyIDs.length > 0\r\n ? this.State.CompaniesItems.filter(c => companyIDs.includes(c.EntryID))\r\n : this.State.CompaniesItems;\r\n\r\n const sourceMapping: { [key: string]: keyof typeof companies[0] } = {\r\n CreditCardExpence: 'IsCashflowSourceCCExpensesActive',\r\n CreditCardIncome: 'IsCashflowSourceCCIncomesActive',\r\n Deposits: 'IsCashflowSourceDepositsActive',\r\n LoanPayment: 'IsCashflowSourceLoansActive',\r\n FutureCheques: 'IsCashflowSourceFutureChequesActive',\r\n };\r\n\r\n const needToExclude = Object.keys(sourceMapping).filter(source =>\r\n companies.every(company => !company[sourceMapping[source]])\r\n );\r\n\r\n const organizationId = this.State.FilterValues.OrganizationID | Globals.OrganizationID;\r\n\r\n if(!organizationId) {\r\n return;\r\n }\r\n\r\n this.Do(this.cashflowReportEndpoint.ListDataSources(organizationId, companies.map(c => c.EntryID), false),\r\n false, (response) => {\r\n this.State.FilterValues.CashflowDataSource = response.Entities\r\n .filter(source => !needToExclude.includes(source.Value))\r\n .map(source => source.Value);\r\n });\r\n }\r\n\r\n private HandleError(balanceParams: BalanceReportParams, originalError: string) {\r\n this.Do(\r\n this.balanceEndpoint.ListForDate(balanceParams),\r\n false,\r\n (response) => {\r\n\r\n if(!response?.Entities?.length) {\r\n this.UI.StopMessage(originalError);\r\n return;\r\n }\r\n \r\n this.ShowBalancesErrorDialog(response.Entities, originalError);\r\n },\r\n undefined\r\n );\r\n }\r\n \r\n private ShowBalancesErrorDialog(balances: BalanceView[], originalError: string) {\r\n this.errorBalancesDialog.Balances = balances;\r\n this.errorBalancesDialog.OrganizationID = this.State.FilterValues.OrganizationID;\r\n this.errorBalancesDialog.Error = originalError;\r\n\r\n this.errorBalancesDialog.ShowDialogShort((balanceIds: number[]) => {\r\n const balancesFiltered = balances.filter(e => balanceIds.includes(e.EntryID));\r\n \r\n const bookingAccountIds = Array.from(new Set(balancesFiltered.map(b => b.BookingAccountID)));\r\n this.State.FilterValues.BookingAccount = bookingAccountIds;\r\n\r\n const companyIds = Array.from(new Set(balancesFiltered.map(b => b.CompanyID)));\r\n this.State.FilterValues.Company = companyIds;\r\n\r\n const accountIds = Array.from(new Set(balancesFiltered.map(b => b.AccountID)));\r\n this.State.FilterValues.Account = accountIds;\r\n\r\n this.filter.OnCompanyChanged(companyIds);\r\n this.SetCashflowDataSourceFilter();\r\n this.LoadReportData();\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 {{ 'lblPivot' | 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\";","import { Component, Input } from '@angular/core';\r\nimport { BaseGridComponent } from '@m4u-angular//base/component/BaseGridComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular//base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@m4u-angular//base/entities/BaseEntities';\r\nimport { EnumBookingAccountSubtypes } from '../../_proxy/enums';\r\nimport { ScreenService } from '@m4u-angular//core/framework/screen.service';\r\nimport { AssetsLiabilitiesReportView } from '../../_proxy/views/assetsliabilitiesreport.view';\r\nimport { memoize } from 'lodash';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { ExportingEvent } from 'devextreme/ui/data_grid';\r\n\r\nclass State extends BaseState {\r\n DisplayCurrency: string;\r\n GroupByCompany = true;\r\n GroupByBank = true;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-assets-liabilities-report-grid',\r\n templateUrl: './assets-liabilities-report-grid.component.html',\r\n styleUrls: ['./assets-liabilities-report-grid.component.scss']\r\n})\r\nexport class AssetsLiabilitiesReportGridComponent extends BaseGridComponent\r\n{\r\n @Input() set DisplayCurrency(value: string) {\r\n this.State.DisplayCurrency = value;\r\n }\r\n @Input() Date: Date;\r\n @Input() IsLoading: boolean = false;\r\n @Input() IsFlatMode: boolean;\r\n @Input() ReportView: AssetsLiabilitiesReportView;\r\n @Input() BalanceType: string;\r\n\r\n constructor(A: ServiceBagService, public screenService: ScreenService) {\r\n super(A, 'AssetsLiabilitiesReportGridComponent', BaseEntity, State);\r\n this.BindHandler('OnGoToBalance');\r\n this.BindHandler('GetBalanceAmountSummaryDisplayFormat');\r\n }\r\n\r\n OnExporting({ component }: ExportingEvent) {\r\n component.columnOption('CurrentBalance.Notes', 'visible', true);\r\n }\r\n\r\n\r\n OnExported({ component }: ExportingEvent) {\r\n component.columnOption('CurrentBalance.Notes', 'visible', false);\r\n }\r\n\r\n OnInitialized(e) {\r\n e.component.columnOption('command:adaptive', 'visible', true);\r\n e.component.option('scrolling.timeout', 0);\r\n }\r\n\r\n OnGoToBalance(e) {\r\n if (!this.CanDrillDown(e)) return;\r\n\r\n let subtypes = [EnumBookingAccountSubtypes.Unknown];\r\n switch (e.column.name) {\r\n case 'CurrentBalance':\r\n subtypes = [EnumBookingAccountSubtypes.Current];\r\n break;\r\n case 'DepositsBalance':\r\n subtypes = [EnumBookingAccountSubtypes.Deposits];\r\n break;\r\n case 'StocksBalance':\r\n subtypes = [EnumBookingAccountSubtypes.Stocks];\r\n break;\r\n case 'LoansBalance':\r\n subtypes = [EnumBookingAccountSubtypes.Loans];\r\n break;\r\n case 'CreditCardBalance':\r\n subtypes = [EnumBookingAccountSubtypes.CreditCard];\r\n break;\r\n case 'GuaranteeBalance':\r\n subtypes = [EnumBookingAccountSubtypes.Guarantee];\r\n break;\r\n case 'TotalAssets':\r\n subtypes = [EnumBookingAccountSubtypes.Current, EnumBookingAccountSubtypes.Deposits, EnumBookingAccountSubtypes.Stocks];\r\n break;\r\n case 'TotalLiabilities':\r\n subtypes = [EnumBookingAccountSubtypes.Loans, EnumBookingAccountSubtypes.CreditCard];\r\n break;\r\n case 'Total':\r\n subtypes = [EnumBookingAccountSubtypes.Current, EnumBookingAccountSubtypes.Deposits, \r\n EnumBookingAccountSubtypes.Stocks, EnumBookingAccountSubtypes.Loans, EnumBookingAccountSubtypes.CreditCard];\r\n break;\r\n case 'TotalAssetsNominal':\r\n subtypes = [EnumBookingAccountSubtypes.Current, EnumBookingAccountSubtypes.Deposits, EnumBookingAccountSubtypes.Stocks];\r\n break;\r\n case 'TotalLiabilitiesNominal':\r\n subtypes = [EnumBookingAccountSubtypes.Loans, EnumBookingAccountSubtypes.CreditCard];\r\n break;\r\n case 'TotalNominal':\r\n subtypes = [EnumBookingAccountSubtypes.Current, EnumBookingAccountSubtypes.Deposits,\r\n EnumBookingAccountSubtypes.Stocks, EnumBookingAccountSubtypes.Loans, EnumBookingAccountSubtypes.CreditCard];\r\n break; \r\n }\r\n\r\n const row = e.row.data;\r\n const params = {\r\n OrganizationID: row.OrganizationID, Accounts: [row.AccountID], Date: this.Date, BookingAccountSubtypes: subtypes,\r\n IsFlatMode: this.IsFlatMode, GroupByBookingAccountSubtype: false, CompanyID: row.CompanyID, BalanceType: this.BalanceType\r\n };\r\n this.Navigate(['/pages/balance-report'], params, true, true);\r\n }\r\n\r\n CanDrillDown(e) {\r\n //switch (e.column.name) {\r\n // case 'CurrentBalanceAmountButtons':\r\n // return e.row.data.CurrentBalance.Amount !== 0;\r\n // case 'DepositsBalanceAmountButtons':\r\n // return e.row.data.DepositsBalance.Amount !== 0;\r\n // case 'StocksBalanceAmountButtons':\r\n // return e.row.data.StocksBalance.Amount !== 0;\r\n // case 'LoansBalanceAmountButtons':\r\n // return e.row.data.LoansBalance.Amount !== 0;\r\n // case 'CreditCardBalanceAmountButtons':\r\n // return e.row.data.CreditCardBalance.Amount !== 0;\r\n //}\r\n\r\n return this.NormalizeAmount(e) !== 0;\r\n }\r\n\r\n GetTransactionReportIcon() {\r\n return this.screenService.IsRTL() ? 'mdi mdi-clipboard-arrow-left-outline' : 'mdi mdi-clipboard-arrow-right-outline';\r\n }\r\n\r\n GetBalanceAmountSummaryDisplayFormat(e) {\r\n const currencyText = this.State.DisplayCurrency ? (this.LISTITEMX('Currencies', this.State.DisplayCurrency) as any).Symbol : '';\r\n return `${e.valueText} ${currencyText}`;\r\n }\r\n\r\n NormalizeAmount(cell) {\r\n const { dataField } = cell.column;\r\n const amount = cell.data[dataField];\r\n\r\n if (typeof amount === 'undefined') return 0;\r\n\r\n const amountValue = this.BalanceType == 'Actual' ? amount.Amount : amount.NominalBalance;\r\n\r\n return typeof amount === 'number' ? amount : amountValue ;\r\n }\r\n\r\n CalculateCellValue = memoize((colName: string) => {\r\n return (rowData) => {\r\n if (this.BalanceType == 'Actual'){\r\n return rowData[colName]?.Amount;\r\n } else {\r\n return rowData[colName]?.NominalBalance;\r\n }\r\n };\r\n });\r\n\r\n GetTotalAssetsName() {\r\n if (this.BalanceType == 'Actual'){\r\n return 'TotalAssets';\r\n } else {\r\n return 'TotalAssetsNominal';\r\n }\r\n }\r\n\r\n GetTotalLiabilitiesName() {\r\n if (this.BalanceType == 'Actual'){\r\n return 'TotalLiabilities';\r\n } else {\r\n return 'TotalLiabilitiesNominal';\r\n }\r\n }\r\n\r\n GetTotalName() {\r\n if (this.BalanceType == 'Actual'){\r\n return 'Total';\r\n } else {\r\n return 'TotalNominal';\r\n }\r\n }\r\n\r\n GetAmountCellClass(cell) {\r\n const classList = [];\r\n const amount = this.NormalizeAmount(cell) || 0;\r\n if (amount !== 0) {\r\n classList.push(amount > 0 ? 'positive-amount' : 'negative-amount');\r\n }\r\n if (this.CanDrillDown(cell)) classList.push('amount-cell-clickable');\r\n return classList.join(' ');\r\n }\r\n\r\n get IsAccountGroupColumnHidden(): boolean {\r\n if (!this.DataSource) return false;\r\n return Array.isArray(this.DataSource) && Utils.UniqueBy(this.DataSource, (x) => x.AccountGroupName).size === 1;\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.displayValue}}\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n
{{ NormalizeAmount(cell) | formatNumberSum}}
\\r\\n {{State.DisplayCurrency || cell.data.Currency |\\r\\n LookupList:LIST('Currencies'):'Symbol' }}\\r\\n {{cell?.data[cell.column.dataField]?.Notes ? '(' + cell.data[cell.column.dataField].Notes + ')' :\\r\\n ''}}\\r\\n
\\r\\n
\\r\\n
\";","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { AssetsLiabilitiesReportRowView } from './../views/assetsliabilitiesreportrow.view';\r\nexport class AssetsLiabilitiesReportView extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'AssetsLiabilitiesReportView';\r\n }\r\n \r\n public HasCurrent: boolean; \r\n public HasCreditCard: boolean; \r\n public HasDeposits: boolean; \r\n public HasLoans: boolean; \r\n public HasStocks: boolean; \r\n public HasGuarantees: boolean; \r\n public ReportRows: AssetsLiabilitiesReportRowView[] = []; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { Component, ViewChild } from '@angular/core';\r\nimport { QuickFilterSettings } from '@kraken/components/quick-filter/quick-filter.component';\r\nimport { EnumBanks } from '@kraken/_proxy/enums';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { FilterSettings } from '../../components/filter/filter.component';\r\nimport { Globals } from '../../_globals';\r\nimport { BalanceEndpoint } from '../../_proxy/endpoints/balance.endpoint';\r\nimport { BalanceReportParams } from '../../_proxy/params/balancereport.param';\r\nimport { AssetsLiabilitiesReportView } from '../../_proxy/views/assetsliabilitiesreport.view';\r\nimport { BaseReportComponent, BaseReportState } from '../base-report/base-report.component';\r\nimport { AssetsLiabilitiesReportGridComponent } from './assets-liabilities-report-grid.component';\r\n\r\nclass State extends BaseReportState {\r\n IsFromDashboard: boolean;\r\n ReportView: AssetsLiabilitiesReportView = new AssetsLiabilitiesReportView;\r\n GroupByBank = true;\r\n BalanceType = 'Actual';\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-assets-liabilities-report',\r\n templateUrl: './assets-liabilities-report.component.html',\r\n styleUrls: ['./assets-liabilities-report.component.scss']\r\n})\r\nexport class AssetsLiabilitiesReportComponent extends BaseReportComponent {\r\n @ViewChild('reportGrid') reportGrid: AssetsLiabilitiesReportGridComponent;\r\n\r\n constructor(A: ServiceBagService, public screen: ScreenService, private balanceEndpoint: BalanceEndpoint) {\r\n super(A, 'AssetsLiabilitiesReportComponent', State);\r\n }\r\n\r\n protected override InitStateFromQuery() {\r\n super.InitStateFromQuery();\r\n if (this.QueryParams.IsFromDashboard) { this.State.IsFromDashboard = !!this.QueryParams.IsFromDashboard; }\r\n }\r\n\r\n protected override OnGetCustomFilterSettings(): FilterSettings {\r\n return {\r\n Company: { IsVisible: true, IsMultiple: true },\r\n AccountGroup: { IsVisible: true, IsMultiple: true },\r\n Account: { IsVisible: true, IsMultiple: true },\r\n CurrencyFilter: { IsVisible: true, IsMultiple: true },\r\n Bank: { IsVisible: true, IsMultiple: true },\r\n Currency: { IsVisible: true },\r\n IsDateVisible: true,\r\n MaxReportDate: Globals.Yesterday\r\n } as FilterSettings;\r\n }\r\n\r\n protected override OnGetCustomQuickFilterSettings(): QuickFilterSettings {\r\n return {\r\n Company: { IsVisible: true, IsMultiple: true },\r\n Account: { IsVisible: true, IsMultiple: true },\r\n Bank: { IsVisible: true, IsMultiple: true },\r\n IsDateVisible: true\r\n } as QuickFilterSettings;\r\n }\r\n\r\n protected override OnResetFilterValues() {\r\n super.OnResetFilterValues();\r\n this.State.FilterValues.Date = Globals.Yesterday;\r\n this.State.GroupByBank = true;\r\n }\r\n\r\n protected override OnBeforeLoadData() {\r\n super.OnBeforeLoadData();\r\n }\r\n\r\n protected override OnLoadData() {\r\n if (!this.State.FilterValues.OrganizationID) {\r\n this.State.ReportView = new AssetsLiabilitiesReportView;\r\n return;\r\n }\r\n const params = this.GetParams();\r\n this.State.IsLoading = true;\r\n this.Do(this.balanceEndpoint.ListForAssetsVsLiabilitiesReport(params, null),\r\n false, (response) => {\r\n this.State.IsLoading = false;\r\n this.State.ReportView = response.Entity;\r\n });\r\n }\r\n\r\n OnBalanceTypeChanged() {\r\n this.OnLoadData();\r\n }\r\n\r\n //override OnNavigateBack(): NavigateBackParams {\r\n // return {\r\n // IsAllowNavigateBack: this.State.IsFromDashboard || super.OnNavigateBack().IsAllowNavigateBack,\r\n // Callback: () => this.Navigate(['/pages/dashboard'])\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, Input, ViewChild } from \"@angular/core\";\r\nimport {\r\n ServiceBagServices,\r\n ServiceBagService,\r\n} from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { BaseState, BaseEntity } from \"@m4u-angular/base/entities/BaseEntities\";\r\nimport { BasePageComponent } from \"@m4u-angular/base/component/BasePageComponent\";\r\nimport { CashflowReportParams } from \"../../../../_proxy/params/cashflowreport.param\";\r\nimport { CashflowReportEndpoint } from \"../../../../_proxy/endpoints/cashflowreport.endpoint\";\r\nimport { CashflowReportRowView } from \"../../../../_proxy/views/cashflowreportrow.view\";\r\nimport { CashflowDetailedGridComponent } from \"../grid/cashflow-detailed-grid.component\";\r\nimport { GridExtender } from \"@m4u-angular/base/grid/Grid.extender\";\r\nimport { Account } from \"../../../../_proxy/entities/account.entity\";\r\nimport { BookingAccount } from \"../../../../_proxy/entities/bookingaccount.entity\";\r\nimport { Company } from \"../../../../_proxy/entities/company.entity\";\r\nimport { ProbabilityLevel } from \"../../../../_proxy/entities/probabilitylevel.entity\";\r\nimport { Scenario } from \"../../../../_proxy/entities/scenario.entity\";\r\nimport { Globals } from \"../../../../_globals\";\r\nimport { EnumBookingAccountSubtypes, EnumSide } from \"../../../../_proxy/enums\";\r\nimport { AccountEndpoint } from \"../../../../_proxy/endpoints/account.endpoint\";\r\nimport { BookingAccountEndpoint } from \"../../../../_proxy/endpoints/bookingaccount.endpoint\";\r\nimport { CompanyEndpoint } from \"../../../../_proxy/endpoints/company.endpoint\";\r\nimport { ProbabilityLevelEndpoint } from \"../../../../_proxy/endpoints/probabilitylevel.endpoint\";\r\nimport { ScenarioEndpoint } from \"../../../../_proxy/endpoints/scenario.endpoint\";\r\nimport { AccountListParams } from \"../../../../_proxy/params/accountlist.param\";\r\nimport { BookingAccountListParams } from \"../../../../_proxy/params/bookingaccountlist.param\";\r\nimport { CompanyListParams } from \"@kraken/_proxy/params/companylist.param\";\r\nimport { ListTransactionCategoriesParams } from \"@kraken/_proxy/params/listtransactioncategories.param\";\r\nimport { TransactionCategoryEndpoint } from \"@kraken/_proxy/endpoints/transactioncategory.endpoint\";\r\nimport { TransactionCategory } from \"@kraken/_proxy/entities/transactioncategory.entity\";\r\n\r\nclass State extends BaseState {\r\n GridData: CashflowReportRowView[];\r\n TransactionCategoriesItems: TransactionCategory[] = [];\r\n CompaniesItems: Company[] = [];\r\n AccountsItems: Account[] = [];\r\n BookingAccountsItems: BookingAccount[] = [];\r\n ScenariosItems: Scenario[] = [];\r\n ProbabilityLevelsItems: ProbabilityLevel[] = [];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: \"app-cashflow-detailed-list\",\r\n templateUrl: \"./cashflow-detailed-list.component.html\"\r\n})\r\nexport class CashflowDetailedListComponent extends BasePageComponent {\r\n @Input() SelectionType: string;\r\n @ViewChild('grid') grid: CashflowDetailedGridComponent;\r\n\r\n constructor(\r\n A: ServiceBagService,\r\n private cashflowReportEndpoint: CashflowReportEndpoint,\r\n private companyEndpoint: CompanyEndpoint,\r\n private accountEndpoint: AccountEndpoint,\r\n private bookingAccountEndpoint: BookingAccountEndpoint,\r\n private transactionCategoriesEndpoint: TransactionCategoryEndpoint,\r\n private scenarioEndpoint: ScenarioEndpoint,\r\n private probabilityLevelEndpoint: ProbabilityLevelEndpoint\r\n ) {\r\n super(A, \"CashflowDetailedListComponent\", BaseEntity, State);\r\n }\r\n\r\n private _params: CashflowReportParams;\r\n\r\n @Input() set Params(value: CashflowReportParams) {\r\n this._params = value;\r\n this.LoadForecastOperations();\r\n }\r\n\r\n public get G(): GridExtender {\r\n return this.grid?.G;\r\n }\r\n\r\n get Params(): CashflowReportParams {\r\n return this._params ?? new CashflowReportParams();\r\n }\r\n\r\n public LoadForecastOperations() {\r\n if (!this.Params) return;\r\n\r\n this.Do(\r\n this.cashflowReportEndpoint.ListCashflowReportTransactions(this.Params),\r\n false,\r\n (response) => {\r\n this.State.GridData = this.SelectionType === \"debit\"\r\n ? response.Entities.filter((x) => x.Debit)\r\n : this.SelectionType === \"credit\"\r\n ? response.Entities.filter((x) => x.Credit) : response.Entities;\r\n }\r\n );\r\n }\r\n\r\n get DataItems() {\r\n return {\r\n TransactionCategoriesItems: this.State.TransactionCategoriesItems,\r\n CompaniesItems: this.State.CompaniesItems,\r\n AccountsItems: this.State.AccountsItems,\r\n BookingAccountsItems: this.State.BookingAccountsItems,\r\n ScenariosItems: this.State.ScenariosItems,\r\n ProbabilityLevelsItems: this.State.ProbabilityLevelsItems,\r\n };\r\n }\r\n\r\n override OnInitComponent() {\r\n this.LoadCompanies();\r\n this.LoadCategories();\r\n this.LoadAccounts();\r\n this.LoadBookingAccounts();\r\n this.LoadScenarios();\r\n this.LoadProbabilityLevels();\r\n }\r\n\r\n LoadCompanies() {\r\n if (!Globals.OrganizationID) {\r\n this.State.CompaniesItems = [];\r\n return;\r\n }\r\n\r\n const params = new CompanyListParams();\r\n params.OrganizationID = Globals.OrganizationID;\r\n params.LoadActive = true;\r\n params.IsActiveCashFlow = true;\r\n\r\n this.Do(this.companyEndpoint.ListEx(params, null), false, (response) => {\r\n this.State.CompaniesItems = response.Entities;\r\n });\r\n }\r\n\r\n LoadScenarios() {\r\n if (!Globals.OrganizationID) {\r\n this.State.ScenariosItems = [];\r\n return;\r\n }\r\n\r\n this.Do(this.scenarioEndpoint.ListEx(Globals.OrganizationID, true, null), false, (response) => {\r\n this.State.ScenariosItems = response.Entities;\r\n });\r\n }\r\n\r\n LoadProbabilityLevels() {\r\n if (!Globals.OrganizationID) {\r\n this.State.ProbabilityLevelsItems = [];\r\n return;\r\n }\r\n\r\n this.Do(this.probabilityLevelEndpoint.ListEx(Globals.OrganizationID, true, null), false, (response) => {\r\n this.State.ProbabilityLevelsItems = response.Entities;\r\n });\r\n }\r\n\r\n LoadAccounts() {\r\n if (!Globals.OrganizationID) {\r\n this.State.AccountsItems = [];\r\n return;\r\n }\r\n\r\n const params = new AccountListParams();\r\n params.OrganizationID = Globals.OrganizationID;\r\n params.Companies = this.Params.Companies;\r\n params.AccountGroups = this.Params.AccountGroups;\r\n params.Banks = this.Params.Banks;\r\n params.BookingAccountSubtypes = [EnumBookingAccountSubtypes.Current];\r\n params.IsActiveCashFlow = true;\r\n params.LoadActive = true;\r\n\r\n this.Do(this.accountEndpoint.ListEx(params, null), false, (response) => {\r\n this.State.AccountsItems = response.Entities;\r\n });\r\n }\r\n\r\n LoadBookingAccounts() {\r\n if (!Globals.OrganizationID) {\r\n this.State.BookingAccountsItems = [];\r\n return;\r\n }\r\n\r\n const params = new BookingAccountListParams();\r\n params.OrganizationID = Globals.OrganizationID;\r\n params.AccountGroups = this.Params.AccountGroups;\r\n params.BookingAccountSubtypes = [EnumBookingAccountSubtypes.Current];\r\n params.Companies = this.Params.Companies;\r\n params.Accounts = this.Params.Accounts;\r\n params.Banks = this.Params.Banks;\r\n params.IsActiveCashFlow = true;\r\n\r\n this.Do(this.bookingAccountEndpoint.ListEx(params), false, (response) => {\r\n this.State.BookingAccountsItems = response.Entities;\r\n });\r\n }\r\n\r\n LoadCategories() {\r\n if (!Globals.OrganizationID) {\r\n this.State.TransactionCategoriesItems = [];\r\n return;\r\n }\r\n\r\n const params = new ListTransactionCategoriesParams();\r\n params.OrganizationID = Globals.OrganizationID;\r\n params.LoadActive = true;\r\n params.Companies = this.Params.Companies;\r\n\r\n this.Do(this.transactionCategoriesEndpoint.ListEx(params, null), false, (response) => {\r\n this.State.TransactionCategoriesItems = response.Entities;\r\n });\r\n }\r\n\r\n OnReloadData() {\r\n this.LoadForecastOperations();\r\n }\r\n}\r\n","export default \"\";","import { Component, ViewChild } from '@angular/core';\r\nimport {\r\n ServiceBagServices,\r\n ServiceBagService,\r\n} from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState, BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { CashflowReportParams } from '../../../_proxy/params/cashflowreport.param';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { CashflowDetailedListComponent } from './list/cashflow-detailed-list.component';\r\n\r\nclass State extends BaseState {\r\n Params: CashflowReportParams;\r\n Type: string;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-cashflow-report-detailed',\r\n templateUrl: './cashflow-report-detailed.component.html',\r\n styleUrls: ['./cashflow-report-detailed.component.scss'],\r\n})\r\nexport class CashflowReportDetailedComponent extends BasePageComponent {\r\n @ViewChild(CashflowDetailedListComponent) cashflowDetailedList: CashflowDetailedListComponent;\r\n\r\n constructor(\r\n A: ServiceBagService\r\n ) {\r\n super(A, 'CashflowReportDetailedComponent', BaseEntity, State, EnumPageDisplayModes.Window);\r\n }\r\n override GetTitle() {\r\n return this.GetDefaultTitle();\r\n }\r\n\r\n override OnInitComponent() {\r\n this.InitStateFromQuery();\r\n }\r\n\r\n InitStateFromQuery() {\r\n const mapper = {\r\n OrganizationID: (v: any) => +v,\r\n DateFrom: (v: any) => new Date(v),\r\n DateTo: (v: any) => new Date(v),\r\n CalculationDate: (v: any) => new Date(v),\r\n Companies: (v: any) => v.map(v => +v),\r\n Accounts: (v: any) => v.map(v => +v),\r\n BookingAccounts: (v: any) => v.map(v => +v),\r\n Scenarios: (v: any) => v.map(v => +v),\r\n ProbabilityLevels: (v: any) => v.map(v => +v),\r\n };\r\n\r\n const collectParams = (query) => {\r\n const cashflowParams = new CashflowReportParams();\r\n if (Object.keys(query).length <= 0) return cashflowParams;\r\n\r\n return Object.entries(query).reduce((params, [param, value]) => {\r\n const map = mapper[param];\r\n params[param] = map ? map(value) : value;\r\n\r\n return params;\r\n }, cashflowParams);\r\n };\r\n\r\n this.State.Type = this.QueryParams.type;\r\n this.State.Params = collectParams(this.QueryParams);\r\n }\r\n\r\n protected override OnGetToolbarSettings(): ToolbarSettings {\r\n if (!this.cashflowDetailedList?.G) { \r\n return; \r\n }\r\n\r\n if (this.A.Screen.IsDesktop()) {\r\n const settings = new ToolbarSettings;\r\n settings.IsAllowFilter = false;\r\n settings.IsAllowExport = true;\r\n settings.IsAllowPrint = false;\r\n settings.GridExtender = this.cashflowDetailedList.G;\r\n return settings;\r\n }\r\n \r\n if (this.A.Screen.IsMobile()) {\r\n const settings = new ToolbarSettings;\r\n settings.IsAllowFilter = true;\r\n return settings;\r\n }\r\n }\t\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { Component, Input, ViewChild, ElementRef, Output, EventEmitter } from \"@angular/core\";\r\nimport {\r\n ServiceBagServices,\r\n ServiceBagService,\r\n} from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { BaseState, BaseEntity } from \"@m4u-angular/base/entities/BaseEntities\";\r\nimport { BasePageComponent } from \"@m4u-angular/base/component/BasePageComponent\";\r\nimport { CashflowReportParams } from \"../../../_proxy/params/cashflowreport.param\";\r\nimport { formatNumber } from \"devextreme/localization\";\r\nimport { EnumCashflowSummarizedAggregationLevel, EnumFutureForecastGroupBy, EnumSummaryLevel } from \"../../../_proxy/enums\";\r\nimport { CashflowReportSummarizedGroup } from \"../../../_proxy/entities/cashflowreportsummarizedgroup.entity\";\r\nimport { DxChartComponent } from \"devextreme-angular\";\r\nimport { CashflowFutureForecastGroups } from \"@kraken/_proxy/entities/cashflowfutureforecastgroups.entity\";\r\n\r\nclass State extends BaseState {\r\n Params: CashflowReportParams;\r\n Type: string;\r\n ChartHeight: number;\r\n CurrentTabIndex: number;\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: \"cashflow-chart-view\",\r\n styles: [\r\n `.extra-filters {\r\n position: absolute;\r\n top:0;\r\n width: 100%;\r\n text-align: center;\r\n padding-left: 7px;\r\n }`\r\n ],\r\n templateUrl: \"./cashflow-chart-view.component.html\"\r\n})\r\nexport class CashflowChartViewComponent extends BasePageComponent {\r\n @Input() Params: CashflowReportParams;\r\n @Input() IsFiltersVisible: boolean;\r\n @Input() Page: BasePageComponent;\r\n @Input() AggregationLevel: EnumCashflowSummarizedAggregationLevel;\r\n @Input() SummarizedGroups: CashflowReportSummarizedGroup[] = [];\r\n @Input() FutureForecastOperations: CashflowFutureForecastGroups;\r\n @Input() Currency: string;\r\n\r\n constructor(A: ServiceBagService, public hostRef: ElementRef) {\r\n super(A, \"CashflowChartViewComponent\", BaseEntity, State);\r\n this.BindHandler(\"CustomizeTooltip\");\r\n }\r\n\r\n @ViewChild('#chart') chart: DxChartComponent;\r\n\r\n @Output() OnChartChange = new EventEmitter();\r\n @Output() OnViewChange = new EventEmitter<{ index: number; GroupBy: string[]; }>();\r\n\r\n private _summaryLevel;\r\n @Input() set SummaryLevel(value: EnumSummaryLevel) {\r\n this._summaryLevel = value;\r\n if (this.chart) {\r\n this.chart.instance.render();\r\n }\r\n }\r\n get SummaryLevel() {\r\n return this._summaryLevel;\r\n }\r\n\r\n BalanceSeries: any[];\r\n CreditDebitSeries: any[];\r\n private _balancesData: any[];\r\n private _creditDebitsData: any[];\r\n // @Input() set Data(value: any[]) {\r\n // if (!value) return;\r\n\r\n // this.InitBalanceSeries(value);\r\n // this.InitCreditDebitsSeries();\r\n\r\n // this._balancesData = this.GetBalancesData(value);\r\n // this._creditDebitsData = this.GetCreditDebitsData(value);\r\n // if (this.ShouldBeWarned()) {\r\n // this.UI.StopMessage(this.RC(\"ChartBalanceWarningMessage\"));\r\n // }\r\n // }\r\n\r\n get isCreditSeriesVisible(): boolean {\r\n if (!this._balancesData || !this._balancesData.length) return false;\r\n\r\n return this._balancesData.some(b => b.CreditLimitBalance);\r\n }\r\n\r\n ShouldBeWarned(): boolean {\r\n if (this.BalanceSeries.length === 1) {\r\n return false;\r\n }\r\n\r\n let containsPositive = false;\r\n let containsNegative = false;\r\n this._balancesData.every(item => {\r\n if (item.Balance > 0) {\r\n containsPositive = true;\r\n }\r\n if (item.Balance < 0) {\r\n containsNegative = true;\r\n }\r\n return !(containsNegative && containsPositive);\r\n });\r\n return containsPositive && containsPositive;\r\n }\r\n\r\n get BalancesData() { return this._balancesData; }\r\n\r\n get CreditDebitsData() { return this._creditDebitsData; }\r\n\r\n override OnInitComponentFinished() {\r\n super.OnInitComponentFinished();\r\n\r\n this.State.CurrentTabIndex = 0;\r\n const tab: any = this.LIST('CashflowChartTabs').find((i: any) => i.index === 0);\r\n this.OnChartChange.emit(tab.value);\r\n\r\n this.ResizeChart();\r\n }\r\n\r\n ResizeChart() {\r\n if (!this.hostRef) return;\r\n\r\n const rootEl = this.hostRef.nativeElement;\r\n\r\n setTimeout(() => {\r\n const rect = rootEl.getBoundingClientRect();\r\n const computedStyles = getComputedStyle(rootEl);\r\n const spacesHeight = [computedStyles.paddingBottom, computedStyles.paddingTop].map(parseFloat).reduce((s, n) => s + n, 0);\r\n\r\n console.log(window.innerHeight, rect.top, spacesHeight);\r\n this.State.ChartHeight = window.innerHeight - rect.top - spacesHeight - 110; // marginBottom tabs hardcode\r\n console.log(this.State.ChartHeight); \r\n }, 1000);\r\n }\r\n\r\n GetBalancesData(data: any[]) {\r\n data = data.filter(item => item.GroupKey !== \"summary\");\r\n data.forEach(group => {\r\n group.Rows.forEach(item => item[`Balance${group.GroupKey}`] = item.Balance);\r\n });\r\n\r\n //fetch creditlimit\r\n data.push({ Rows: [] });\r\n data[0].Rows.forEach(item => data[data.length - 1].Rows.push({ DateTo: item.DateTo, CreditLimitBalance: -1 * item.CreditLimit }));\r\n\r\n //flat all groups in one array\r\n return data.reduce((ac, cur) => {\r\n return ac.concat(cur.Rows);\r\n }, []);\r\n }\r\n\r\n InitBalanceSeries(data: any[]) {\r\n data = data.filter(item => item.GroupKey !== \"summary\");\r\n this.BalanceSeries = data.map(item => {\r\n return {\r\n valueField: `Balance${item.GroupKey}`,\r\n name: item.GroupTitle\r\n };\r\n });\r\n }\r\n\r\n GetCreditDebitsData(data: any[]) {\r\n data.forEach(group => {\r\n group.Rows.forEach(item => {\r\n item[`Credit${group.GroupKey}`] = item.Credit;\r\n item[`Debit${group.GroupKey}`] = item.Debit;\r\n });\r\n });\r\n\r\n //flat all groups in one array\r\n data = data.reduce((ac, cur) => {\r\n return ac.concat(cur.Rows);\r\n }, []);\r\n return data;\r\n }\r\n\r\n InitCreditDebitsSeries() {\r\n const series: any[] = [];\r\n series.push({\r\n valueField: `Credit`,\r\n name: this.RC(\"lblCredit\"),\r\n color: \"green\",\r\n });\r\n series.push({\r\n valueField: `Debit`,\r\n name: this.RC(\"lblDebit\"),\r\n color: \"red\",\r\n });\r\n this.CreditDebitSeries = series;\r\n }\r\n\r\n CustomizeTooltip(e: any) {\r\n var valueText = formatNumber(e.value, this.F.NumberSum);\r\n return {\r\n text: `${valueText} ${this.Currency}`\r\n };\r\n }\r\n\r\n HandleChartChange(event) {\r\n this.State.CurrentTabIndex = event.itemData.index;\r\n this.OnChartChange.emit(event.itemData.value);\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n\";","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class CreditLimit extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'CreditLimit';\r\n }\r\n \r\n public BookingAccountID: number; \r\n public Name: string; \r\n public Description: string; \r\n public StartDate: Date; \r\n public EndDate: Date; \r\n public IsActive: boolean; \r\n public Amount: number; \r\n public BookingAccountName: string; \r\n\tpublic CreatedBy: number;\r\n\tpublic CreatedDate: Date;\r\n}\r\n\r\n\r\n\r\n","import { Component, Input } from \"@angular/core\";\r\nimport { AccessService } from \"@kraken/services/access.service\";\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 } from \"@m4u-angular/base/entities/BaseEntities\";\r\nimport { EnumCRUDActions } from \"@m4u-angular/core/framework/sysenums.enum\";\r\nimport { Globals } from \"../../../_globals\";\r\nimport { CreditLimitEndpoint } from \"../../../_proxy/endpoints/creditlimit.endpoint\";\r\nimport { CreditLimit } from \"../../../_proxy/entities/creditlimit.entity\";\r\nimport { CreditLimitsParams } from '../../../_proxy/params/creditlimits.param';\r\nimport { ToolbarSettings } from \"@m4u-angular/base/classes/BaseClasses\";\r\n\r\nclass State extends BaseState {\r\n BookingAccounts: number[] = [];\r\n Accounts: number[] = [];\r\n CompanyID: number;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-credit-limit-list',\r\n templateUrl: './credit-limit-list.component.html'\r\n})\r\nexport class CreditLimitListComponent extends BasePageComponent\r\n{\r\n private _organizationID: number;\r\n @Input() set OrganizationID(value: number) {\r\n this._organizationID = value;\r\n if (this._organizationID > -1) this.LoadDataSource();\r\n }\r\n\r\n get OrganizationID() {\r\n return this._organizationID;\r\n }\r\n\r\n constructor(A: ServiceBagService,\r\n private endpoint: CreditLimitEndpoint,\r\n private accessService: AccessService) {\r\n super(A, 'CreditLimitListComponent', CreditLimit, State);\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n if (ExternalEntityType == CreditLimit) this.LoadDataSource();\r\n }\r\n\r\n override OnInitComponent() {\r\n this.InitStateFromQuery();\r\n if (!!this.OrganizationID) {\r\n if (this.accessService.IsAdmin() && Globals.OrganizationID) this.OrganizationID = Globals.OrganizationID;\r\n if (!this.accessService.IsAdmin()) this.OrganizationID = this.UserInfo?.OrganizationID;\r\n }\r\n }\r\n\r\n public LoadDataSource() {\r\n const params = new CreditLimitsParams();\r\n params.OrganizationID = this.OrganizationID;\r\n params.BookingAccounts = this.State.BookingAccounts;\r\n params.Companies = this.State.CompanyID ? [this.State.CompanyID] : null;\r\n params.Accounts = this.State.Accounts;\r\n params.LoadActive = true;\r\n\r\n this.DataSources['CreditLimits'] = new DataSourceCustomAction((options) => this.endpoint.ListEx(params, options));\r\n this.DS('CreditLimits').Reload();\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 InitStateFromQuery() {\r\n if (Object.entries(this.QueryParams).length <= 0) return;\r\n\r\n if (this.QueryParams.OrganizationID) {\r\n this.OrganizationID = +this.QueryParams.OrganizationID;\r\n }\r\n\r\n if (this.QueryParams.BookingAccounts) {\r\n this.State.BookingAccounts = this.QueryParams.BookingAccounts.map(b => +b);\r\n }\r\n\r\n if (this.QueryParams.Accounts) {\r\n this.State.Accounts = this.QueryParams.Accounts.map(b => +b);\r\n }\r\n console.log(this.QueryParams);\r\n if (this.QueryParams.CompanyID) {\r\n this.State.CompanyID = +this.QueryParams.CompanyID;\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, EventEmitter, Input, Output } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } 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 { EnumGridModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { CreditLimit } from '@kraken/_proxy/entities/creditlimit.entity';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-credit-limit-grid',\r\n templateUrl: './credit-limit-grid.component.html'\r\n})\r\nexport class CreditLimitGridComponent extends BaseGridComponent\r\n{\r\n @Input() OrganizationID: number;\r\n @Input() Mode: EnumGridModes;\r\n @Output() CreditLimitsChanged = new EventEmitter();\r\n\r\n get isEditable(){\r\n return this.Mode === EnumGridModes.Editable\r\n }\r\n\r\n public DeletedCreditLimitEntryIDs: number[] = [];\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'CreditLimitGridComponent', CreditLimit, BaseState);\r\n this.BindHandler('OnDelete');\r\n }\r\n\r\n override OnInitComponentFinished() {\r\n super.OnInitComponentFinished()\r\n if (this.Mode === EnumGridModes.Report) {\r\n setTimeout(() => {\r\n this.G.grid.instance.option({\r\n onRowClick: (e) => this.OnNavigate(e)\r\n });\r\n this.G.grid.searchPanel.visible = true;\r\n setTimeout(() => this.G.Refresh());\r\n }, 200);\r\n }\r\n }\r\n\r\n OnNavigate(e) {\r\n this.Navigate([\"/pages/credit-limit\", e.data.EntryID], { OrganizationID: this.OrganizationID, BookingAccountID: e.data.BookingAccountID });\r\n }\r\n\r\n GetGridHeight() {\r\n return this.grid && this.G && this.G.GetRowCount() >= 30 ? 500 : undefined;\r\n }\r\n\r\n OnInitNewRow(e: any) {\r\n this.G.SetData('Currency', 'ILS', e.data);\r\n this.G.SetData('IsActive', true, e.data);\r\n }\r\n\r\n OnDelete(e) {\r\n this.grid.instance.deleteRow(e.row.rowIndex);\r\n }\r\n\r\n OnRowRemoved(e: any) {\r\n const entryID = e.data && !isNaN(e.data.EntryID) && e.data.EntryID;\r\n if (entryID) { this.DeletedCreditLimitEntryIDs.push(entryID); }\r\n this.CreditLimitsChanged.emit();\r\n }\r\n\r\n OnRowInserted() {\r\n this.CreditLimitsChanged.emit();\r\n }\r\n\r\n OnRowUpdated(e: any) {\r\n this.CreditLimitsChanged.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\";","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 { ContextMenuElement, ToolbarSettings } from \"@m4u-angular/base/classes/BaseClasses\";\r\nimport { CreditLimitEndpoint } from \"../../_proxy/endpoints/creditlimit.endpoint\";\r\nimport { CreditLimit } from \"../../_proxy/entities/creditlimit.entity\";\r\nimport { DataSourceCustomAction } from \"@m4u-angular/base/datalayer/BaseDataSources\";\r\nimport { DataLoadOptions } from \"@m4u-angular/base/datalayer/DataLoadOptions\";\r\nimport { BookingAccountListParams } from \"../../_proxy/params/bookingaccountlist.param\";\r\nimport { EnumBookingAccountSubtypes } from \"../../_proxy/enums\";\r\nimport { BookingAccountEndpoint } from \"../../_proxy/endpoints/bookingaccount.endpoint\";\r\nimport { Globals } from \"../../_globals\";\r\nimport { AccountEndpoint } from \"../../_proxy/endpoints/account.endpoint\";\r\nimport { CompanyEndpoint } from \"../../_proxy/endpoints/company.endpoint\";\r\nimport { AccountListParams } from \"../../_proxy/params/accountlist.param\";\r\nimport { CompanyListParams } from \"@kraken/_proxy/params/companylist.param\";\r\nimport { AccessService } from \"@kraken/services/access.service\";\r\n\r\nclass State extends BaseState {\r\n OrganizationID: number;\r\n Account: number;\r\n Company: number;\r\n BookingAccountID: number;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-credit-limit',\r\n templateUrl: './credit-limit.component.html'\r\n})\r\nexport class CreditLimitComponent extends BasePageCRUDComponent\r\n{\r\n constructor(A: ServiceBagService, endpoint: CreditLimitEndpoint,\r\n private bookingAccountEndpoint: BookingAccountEndpoint,\r\n private accountEndpoint: AccountEndpoint,\r\n private companyEndpoint: CompanyEndpoint,\r\n private accessService: AccessService) {\r\n super(A, 'CreditLimitComponent', CreditLimit, State, endpoint, EnumPageDisplayModes.Window);\r\n }\r\n ignoreCompanyChange: boolean;\r\n ignoreAccountChange: boolean;\r\n\r\n override async OnInitComponent() {\r\n this.InitStateFromQuery();\r\n if (!!this.State.OrganizationID) {\r\n if (this.accessService.IsAdmin() && Globals.OrganizationID) this.State.OrganizationID = Globals.OrganizationID;\r\n if (!this.accessService.IsAdmin()) this.State.OrganizationID = this.UserInfo?.OrganizationID;\r\n }\r\n\r\n if (!this.State.OrganizationID) return;\r\n this.LoadCompanies();\r\n this.LoadAccounts();\r\n this.LoadBookingAccounts();\r\n \r\n if (this.State.BookingAccountID) {\r\n await this.ReloadBookingAccountsDataSources();\r\n const bookingAccount = this.DataSources['BookingAccounts'].Items.find(item => item.EntryID == this.State.BookingAccountID);\r\n\r\n if(bookingAccount) {\r\n this.State.Company = bookingAccount.CompanyID;\r\n this.State.Account = bookingAccount.AccountID;\r\n }\r\n \r\n this.Entity.BookingAccountID = this.State.BookingAccountID;\r\n this.ignoreCompanyChange = true;\r\n this.ignoreAccountChange = true;\r\n this.LoadCompanies();\r\n this.LoadAccounts();\r\n this.LoadBookingAccounts();\r\n await this.ReloadBookingAccountsDataSources();\r\n }\r\n }\r\n\r\n async ReloadBookingAccountsDataSources() {\r\n await Promise.all([this.DS('BookingAccounts').Reload().toPromise(), this.DS('Accounts').Reload().toPromise(), this.DS('Companies').Reload().toPromise()]);\r\n }\r\n\r\n OnCompanyChanged({ value }: any) {\r\n if (this.ignoreCompanyChange) {\r\n this.ignoreCompanyChange = false;\r\n return;\r\n }\r\n\r\n this.State.Company = value;\r\n this.State.Account = null;\r\n this.State.BookingAccountID = null;\r\n this.LoadAccounts();\r\n }\r\n\r\n OnAccountChanged({ value }: any) {\r\n if (this.ignoreAccountChange) {\r\n this.ignoreAccountChange = false;\r\n return;\r\n }\r\n\r\n this.State.Account = value;\r\n this.State.BookingAccountID = null;\r\n this.LoadBookingAccounts();\r\n }\r\n\r\n OnBookingAccountChanged({ value }: any) {\r\n this.State.BookingAccountID = value;\r\n this.Entity.BookingAccountID = value;\r\n\r\n const bookingAccount = this.DataSources['BookingAccounts'].Items.find(item => item.EntryID == value);\r\n\r\n if (bookingAccount) {\r\n this.ignoreCompanyChange = this.State.Company !== bookingAccount.CompanyID\r\n this.State.Company = bookingAccount.CompanyID;\r\n\r\n this.ignoreAccountChange = this.State.Account !== bookingAccount.AccountID\r\n this.State.Account = bookingAccount.AccountID;\r\n }\r\n this.LoadAccounts();\r\n }\r\n\r\n override OnEntityInitObjectName() {\r\n return this.Entity && this.Entity.Name;\r\n }\r\n\r\n LoadAccounts() {\r\n const params = new AccountListParams();\r\n params.OrganizationID = this.State.OrganizationID;\r\n params.Companies = this.State.Company ? [this.State.Company] : [];\r\n params.LoadActive = true;\r\n\r\n this.DataSources['Accounts'] = new DataSourceCustomAction(\r\n (options: DataLoadOptions) => this.accountEndpoint.ListEx(params, options)\r\n );\r\n }\r\n\r\n LoadCompanies() {\r\n const params = new CompanyListParams();\r\n params.OrganizationID = Globals.OrganizationID;\r\n params.LoadActive = true;\r\n params.IsActiveCashFlow = true;\r\n\r\n this.DataSources['Companies'] = new DataSourceCustomAction(\r\n (options: DataLoadOptions) =>\r\n this.companyEndpoint.ListEx(params, options)\r\n );\r\n }\r\n\r\n LoadBookingAccounts() {\r\n const params = new BookingAccountListParams();\r\n params.OrganizationID = this.State.OrganizationID;\r\n params.Companies = this.State.Company ? [this.State.Company] : [];\r\n params.Accounts = this.State.Account ? [this.State.Account] : [];\r\n params.BookingAccountSubtypes = [EnumBookingAccountSubtypes.Current];\r\n\r\n this.DataSources['BookingAccounts'] = new DataSourceCustomAction(() =>\r\n this.bookingAccountEndpoint.ListEx(params)\r\n );\r\n }\r\n\r\n override OnInitContextMenus(): ContextMenuElement[] {\r\n if (this.IsAddMode) return undefined;\r\n const menus: ContextMenuElement[] =\r\n [\r\n {\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 return menus;\r\n }\r\n\r\n override OnEntitySaved() {\r\n this.NavigateBack();\r\n }\r\n\r\n override OnEntityNew() {\r\n this.Entity.IsActive = true;\r\n }\r\n\r\n InitStateFromQuery() {\r\n if (Object.entries(this.QueryParams).length <= 0) return; \r\n if (this.QueryParams.OrganizationID) {\r\n this.State.OrganizationID = +this.QueryParams.OrganizationID;\r\n }\r\n if (this.QueryParams.BookingAccountID) {\r\n this.State.BookingAccountID = +this.QueryParams.BookingAccountID;\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}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\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 { TransactionCategory } from './../entities/transactioncategory.entity';\r\nexport class TransactionCategoryView extends TransactionCategory {\r\n constructor() {\r\n super();\r\n this.TypeName = 'TransactionCategoryView';\r\n }\r\n \r\n public ParentCategoryId: number; \r\n public ParentCategoryName: 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 { BaseParamsFilter } from './../entities/baseparamsfilter.entity';\r\nexport class ParentCategoryListParams extends BaseParamsFilter {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ParentCategoryListParams';\r\n }\r\n \r\n public LoadGlobal: 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 { ParentCategory } from './../entities/parentcategory.entity';\r\nimport { ParentStaticCategoryLineView } from './../views/parentstaticcategoryline.view';\r\nimport { ParentCategoryListParams } from './../params/parentcategorylist.param';\r\nimport { ParentCategoryReorderingParams } from './../params/parentcategoryreordering.param';\r\n@Injectable()\r\nexport class ParentCategoryEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"ParentCategory\", api);}\r\n\t\r\n\r\n public ListEx(Params: ParentCategoryListParams, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListEx', Params, options?.GetLoadOptions() );\r\n }\r\n\r\n public GetStaticParentCategories(companyID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetStaticParentCategories', {companyID: companyID} );\r\n }\r\n\r\n public GetNextPossibleSortingOrder(CompanyID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetNextPossibleSortingOrder', {CompanyID: CompanyID} );\r\n }\r\n\r\n public Reorder(Params: ParentCategoryReorderingParams) : Observable\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'Reorder', Params, undefined );\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 { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { ProbabilityLevelEndpoint } from '../../_proxy/endpoints/probabilitylevel.endpoint';\r\nimport { ScenarioEndpoint } from '../../_proxy/endpoints/scenario.endpoint';\r\nimport { EnumSide } from '../../_proxy/enums';\r\nimport { ForecastOperationEndpoint } from '../../_proxy/endpoints/forecastoperation.endpoint';\r\nimport { BusinessPartnerEndpoint } from '../../_proxy/endpoints/businesspartner.endpoint';\r\nimport { Scenario } from '../../_proxy/entities/scenario.entity';\r\nimport { ProbabilityLevel } from '../../_proxy/entities/probabilitylevel.entity';\r\nimport { ContextMenuElement, ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { formatDate } from 'devextreme/localization';\r\nimport DxValidator from 'devextreme/ui/validator';\r\nimport { ForecastOperationView } from '../../_proxy/views/forecastoperation.view';\r\nimport { BusinessPartnerListParams } from '../../_proxy/params/businesspartnerlist.param';\r\nimport { ResourcesService } from '@m4u-angular/core/framework/resources.service';\r\nimport { AccessService } from '@kraken/services/access.service';\r\nimport { Globals } from '@kraken/_globals';\r\nimport { Company } from '@kraken/_proxy/entities/company.entity';\r\nimport { TransactionCategoryEndpoint } from '@kraken/_proxy/endpoints/transactioncategory.endpoint';\r\nimport { TransactionCategory } from '@kraken/_proxy/entities/transactioncategory.entity';\r\nimport { ListTransactionCategoriesParams } from '@kraken/_proxy/params/listtransactioncategories.param';\r\nimport { TransactionCategoryView } from '@kraken/_proxy/views/transactioncategory.view';\r\nimport { ParentCategoryListParams } from '@kraken/_proxy/params/parentcategorylist.param';\r\nimport { ParentCategoryEndpoint } from '@kraken/_proxy/endpoints/parentcategory.endpoint';\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 OrganizationID: number;\r\n AccountID: number;\r\n CompanyID: number;\r\n MinDate: Date;\r\n Scenaries: Scenario[] = [];\r\n ProbabilityLevels: ProbabilityLevel[] = [];\r\n TransactionCategoryName: string;\r\n SelectedTransactionCategory: TransactionCategoryView;\r\n ParentCategories: any;\r\n ParentCategoryId: number;\r\n TransactionCategoriesSource: TransactionCategoryView[] = [];\r\n TransactionCategories: TransactionCategoryView[] = [];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-forecast-operation',\r\n templateUrl: './forecast-operation.component.html',\r\n styleUrls: ['./forecast-operation.component.scss']\r\n})\r\nexport class ForecastOperationComponent extends BasePageCRUDComponent {\r\n constructor(A: ServiceBagService, public endpoint: ForecastOperationEndpoint,\r\n private resourcesService: ResourcesService,\r\n private scenarioEndpoint: ScenarioEndpoint,\r\n private probabilitylevelEndpoint: ProbabilityLevelEndpoint,\r\n private transactionCategoryEndpoint: TransactionCategoryEndpoint,\r\n private businessPartnerEndpoint: BusinessPartnerEndpoint,\r\n private accessService: AccessService,\r\n private parentCategoryEndpoint: ParentCategoryEndpoint) {\r\n super(A, 'ForecastOperationComponent', ForecastOperationView, State, endpoint, EnumPageDisplayModes.Window);\r\n this.BindHandler('validateCategoryAndNotes');\r\n this.BindHandler('validateNotesAndCategory');\r\n }\r\n\r\n Side: EnumSide;\r\n ignoreCompanyChange: boolean;\r\n ignoreAccountChange: boolean;\r\n fieldValidators: Record = {};\r\n // EnumForecastTypes = EnumForecastType;\r\n\r\n get Currency() {\r\n const bookingAccount = this.DataSources['BookingAccounts']?.Items.find(item => item.EntryID == this.Entity.BookingAccountID);\r\n return bookingAccount?.Currency ? (this.LISTITEMX('Currencies', bookingAccount.Currency) as any).Symbol : '';\r\n }\r\n\r\n get IsDebit() {\r\n return this.Side === EnumSide.Expense;\r\n }\r\n\r\n get IsForecastAccounting() {\r\n // TODO: cashflow\r\n // return this.Entity.ForecastType === EnumForecastType.Accounting\r\n return false;\r\n }\r\n\r\n override OnInitTitle() {\r\n const side = this.resourcesService.LIST('Sides', this.ModuleName).find(item => item.Value === this.Side);\r\n if (!side) return;\r\n\r\n const paramsTitle = this.Entity && (this.Entity.CategoryName || this.Entity.Date) && `${this.Entity.CategoryName || ''} ${formatDate(this.Entity.Date, this.Framework.CompanyInfo.DateFormatShort)}`;\r\n let title = `${this.RC('titleOneTimeForecastOperation')} - ${side.Text}`;\r\n if (paramsTitle) {\r\n title += ' - ' + paramsTitle;\r\n }\r\n return title;\r\n }\r\n\r\n protected override OnEntityLoaded() {\r\n //normalize date for past forecast operations\r\n //this.Entity.Date = this.Entity.ActualDate;\r\n }\r\n\r\n override async OnInitComponent() {\r\n this.InitStateFromQuery();\r\n\r\n if (!this.State.OrganizationID) {\r\n if (this.accessService.IsAdmin() && Globals.OrganizationID) this.State.OrganizationID = Globals.OrganizationID;\r\n if (!this.accessService.IsAdmin()) this.State.OrganizationID = this.UserInfo?.OrganizationID;\r\n }\r\n if (!this.State.OrganizationID) return;\r\n\r\n const promises = [\r\n this.LoadScenaries(),\r\n this.LoadProbabilityLevels(),\r\n this.LoadTransactionCategories()\r\n ];\r\n\r\n this.LoadTransactionCategories(),\r\n this.LoadBusinessPartners();\r\n\r\n await Promise.all(promises);\r\n this.RefreshEntityOriginal();\r\n\r\n this.LoadParentCategories();\r\n }\r\n\r\n override OnInitContextMenus(): ContextMenuElement[] {\r\n // TODO: cashflow\r\n if (this.IsAddMode /*|| (this.Entity && (this.Entity.ForecastType != EnumForecastType.Manual && this.Entity.ForecastType != EnumForecastType.Recurring))*/) return undefined;\r\n const menus: ContextMenuElement[] =\r\n [\r\n {\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 return menus;\r\n }\r\n\r\n OnCompanyChanged(company: number) {\r\n this.Entity.BusinessPartnerID = undefined;\r\n if (this.State.SelectedTransactionCategory) {\r\n this.State.SelectedTransactionCategory.CompanyID = company;\r\n }\r\n\r\n this.LoadTransactionCategories();\r\n this.LoadBusinessPartners();\r\n this.LoadParentCategories(company);\r\n }\r\n\r\n OnBookingAccountChanged() {\r\n this.LoadTransactionCategories();\r\n this.LoadBusinessPartners();\r\n\r\n if(!this.Entity.BookingAccountID) {\r\n this.Entity.TransactionCategoryID = undefined;\r\n this.State.SelectedTransactionCategory = undefined;\r\n }\r\n }\r\n\r\n LoadTransactionCategories() {\r\n if (!this.State.OrganizationID) {\r\n return;\r\n }\r\n\r\n const params = new ListTransactionCategoriesParams();\r\n params.OrganizationID = this.State.OrganizationID;\r\n params.LoadGlobal = true;\r\n params.Companies = this.State.CompanyID ? [this.State.CompanyID] : [];\r\n params.Sides = [this.Side];\r\n\r\n\r\n this.Do(this.transactionCategoryEndpoint.ListEx(params, null), false, (response) => {\r\n const newCategory = new TransactionCategoryView();\r\n newCategory.EntryID = -1;\r\n newCategory.CompanyID = this.State.CompanyID;\r\n newCategory.IsActive = true;\r\n newCategory.Name = this.RC('lblNewTransactionCategory');\r\n response.Entities.unshift(newCategory);\r\n\r\n if (this.State.TransactionCategoryName) {\r\n const category = response.Entities.find(e => e.Name === this.State.TransactionCategoryName);\r\n if (category) this.Entity.TransactionCategoryID = category.EntryID;\r\n this.State.TransactionCategoryName = '';\r\n }\r\n\r\n this.State.TransactionCategoriesSource = response.Entities;\r\n this.State.TransactionCategories = this.State.TransactionCategoriesSource;\r\n\r\n if(!this.IsAddMode && this.Entity?.TransactionCategoryID > 0) {\r\n const selectedCategory = response.Entities.find(c => c.EntryID == this.Entity?.TransactionCategoryID);\r\n this.State.ParentCategoryId = selectedCategory?.ParentCategoryId;\r\n }\r\n });\r\n }\r\n\r\n LoadScenaries() {\r\n return new Promise((resolve, reject) => {\r\n this.Do(this.scenarioEndpoint.ListEx(this.State.OrganizationID, false, null), false, (response) => {\r\n this.State.Scenaries = response.Entities;\r\n const defaultScenario = response.Entities.find(scenario => scenario.IsDefault) || this.State.Scenaries[0];\r\n if (defaultScenario && !this.Entity.ScenarioID) {\r\n this.Entity.ScenarioID = defaultScenario.EntryID;\r\n }\r\n resolve(true);\r\n }, reject);\r\n });\r\n }\r\n\r\n FilterScenarios() {\r\n this.State.Scenaries = (this.State.Scenaries as Scenario[]).filter(x => x.IsActive);\r\n }\r\n\r\n LoadProbabilityLevels() {\r\n return new Promise((resolve, reject) => {\r\n this.Do(this.probabilitylevelEndpoint.ListEx(this.State.OrganizationID, true, null), false, (response) => {\r\n this.State.ProbabilityLevels = response.Entities;\r\n const defaultProbabilityLevel = response.Entities\r\n .find(probabilityLevel => probabilityLevel.IsDefault) || this.State.ProbabilityLevels[0];\r\n if (defaultProbabilityLevel && !this.Entity.ProbabilityLevelID) {\r\n this.Entity.ProbabilityLevelID = defaultProbabilityLevel.EntryID;\r\n }\r\n resolve(true);\r\n }, reject);\r\n });\r\n }\r\n\r\n LoadBusinessPartners() {\r\n const params = new BusinessPartnerListParams;\r\n params.LoadActive = true;\r\n params.Companies = this.State.CompanyID ? [this.State.CompanyID] : [];\r\n params.IncomeExpenseSides = this.Entity.Credit ? [EnumSide.Income] : [EnumSide.Expense];\r\n\r\n this.DataSources['BusinessPartners'] = new DataSourceCustomAction(\r\n (options: DataLoadOptions) => this.businessPartnerEndpoint.ListEx(params, options),\r\n () => this.businessPartnerEndpoint.Get(this.Entity.BusinessPartnerID), null, false);\r\n }\r\n\r\n onValidatorInitialized = (e: any, fieldName: string) => {\r\n this.fieldValidators[fieldName] = e.component;\r\n };\r\n\r\n onFieldValueChanged = (e: any, fieldName: string) => {\r\n if (fieldName === 'Notes1') {\r\n this.fieldValidators.TransactionCategoryID?.validate();\r\n }\r\n\r\n if (fieldName === 'TransactionCategoryID') {\r\n this.fieldValidators.Notes1?.validate();\r\n }\r\n };\r\n\r\n validateNotesAndCategory(e: any) {\r\n return [e.value, this.Entity.TransactionCategoryID].some(Boolean);\r\n }\r\n\r\n validateCategoryAndNotes(e: any) {\r\n return [this.Entity.Notes1, e.value].some(Boolean);\r\n }\r\n\r\n get IsProbabilityLevelHidden() {\r\n return this.State.ProbabilityLevels.length === 1;\r\n }\r\n\r\n override OnEntitySaved() {\r\n this.NavigateBack();\r\n }\r\n\r\n InitStateFromQuery() {\r\n if (Object.entries(this.QueryParams).length <= 0) return;\r\n const params = this.A.Navigator.GetQueryParams(true);\r\n if (params.OrganizationID) {\r\n this.State.OrganizationID = +params.OrganizationID;\r\n }\r\n\r\n if (params.TransactionCategoryName) {\r\n this.State.TransactionCategoryName = params.TransactionCategoryName;\r\n }\r\n\r\n // TODO: cashflow\r\n if (this.IsAddMode /*|| params.Type == EnumCashFlowReportRowType.FutureForecastOperation*/) {\r\n this.State.MinDate = new Date(params.MinDate);\r\n }\r\n\r\n if (params.Side) {\r\n this.Side = params.Side;\r\n }\r\n\r\n if (params.BookingAccountID) {\r\n this.Entity.BookingAccountID = +params.BookingAccountID;\r\n }\r\n\r\n if (params.AccountID) {\r\n this.State.AccountID = +params.AccountID;\r\n }\r\n\r\n if (params.CompanyID) {\r\n this.State.CompanyID = +params.CompanyID;\r\n }\r\n\r\n if (params.Date) {\r\n this.Entity.Date = new Date(params.Date);\r\n }\r\n\r\n if (params.TransactionCategoryID) {\r\n this.Entity.TransactionCategoryID = +params.TransactionCategoryID;\r\n }\r\n\r\n if (params.ScenarioID) {\r\n this.Entity.ScenarioID = +params.ScenarioID;\r\n }\r\n\r\n if (params.ProbabilityLevelID) {\r\n this.Entity.ProbabilityLevelID = +params.ProbabilityLevelID;\r\n }\r\n\r\n if (params.Notes1) {\r\n this.Entity.Notes1 = params.Notes1;\r\n }\r\n\r\n if (params.Reference) {\r\n this.Entity.Reference = params.Reference;\r\n }\r\n\r\n if (params.IsExcluded) {\r\n this.Entity.IsExcluded = params.IsExcluded === 'true';\r\n }\r\n\r\n if (params.BusinessPartnerID) {\r\n this.Entity.BusinessPartnerID = +params.BusinessPartnerID;\r\n }\r\n\r\n if (params.Credit) {\r\n this.Entity.Credit = +params.Credit;\r\n }\r\n\r\n if (params.Debit) {\r\n this.Entity.Debit = +params.Debit;\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 OnTransactionCategoryChanged(e) {\r\n if (e && e.selectedItem) {\r\n this.State.SelectedTransactionCategory = e.selectedItem;\r\n const selectedTransactionParCat = this.State.SelectedTransactionCategory?.ParentCategoryId;\r\n this.LoadParentCategories(e.selectedItem?.CompanyID, () => {\r\n if(selectedTransactionParCat > 0 && this.State.ParentCategoryId != selectedTransactionParCat) {\r\n this.State.ParentCategoryId = selectedTransactionParCat;\r\n }\r\n });\r\n } else {\r\n this.State.SelectedTransactionCategory = undefined;\r\n }\r\n }\r\n\r\n OnParentCategoryChanged(e: any) {\r\n if(e?.value) {\r\n this.State.TransactionCategories = this.State.TransactionCategoriesSource\r\n .filter(t => t.ParentCategoryId == e.value || t.EntryID == -1);\r\n \r\n if(this.State.SelectedTransactionCategory?.ParentCategoryId != e.value) {\r\n this.Entity.TransactionCategoryID = undefined;\r\n this.State.SelectedTransactionCategory = undefined;\r\n }\r\n } else {\r\n this.State.TransactionCategories = this.State.TransactionCategoriesSource;\r\n }\r\n }\r\n\r\n LoadParentCategories(companyID?: number, onLoadAction? : () => void) {\r\n this.State.ParentCategoryId = undefined;\r\n const params = new ParentCategoryListParams();\r\n params.LoadGlobal = true;\r\n params.Companies = companyID > 0 ? [companyID] : [];\r\n this.Do(this.parentCategoryEndpoint.ListEx(params, null), false, (response) => {\r\n\r\n this.State.ParentCategories = new DataSource({\r\n store: new ArrayStore({\r\n data: response.Entities,\r\n key: 'EntryID',\r\n }),\r\n paginate: true,\r\n pageSize: 10\r\n });\r\n\r\n if(onLoadAction) {\r\n onLoadAction();\r\n }\r\n });\r\n }\r\n\r\n protected override OnDoSave(): void {\r\n this.IsSaving = true;\r\n\r\n if (this.State.SelectedTransactionCategory?.EntryID === -1) {\r\n this.Do(this.transactionCategoryEndpoint.Save(this.State.SelectedTransactionCategory as any), false, (response) => {\r\n this.Entity.TransactionCategoryID = response.Entity.EntryID;\r\n\r\n super.OnDoSave();\r\n }, (response) => {\r\n this.UI.StopMessage(response.ResponseMessage);\r\n this.IsSaving = false;\r\n });\r\n } else {\r\n super.OnDoSave();\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\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumNotificationTemplateSectionType } from './../enums';\r\nimport { EnumShowInCurrencyOptions } from './../enums';\r\nimport { EnumExportType } from './../enums';\r\nimport { EnumPositiveNegative } from './../enums';\r\nimport { EnumBookingAccountSubtypes } from './../enums';\r\nimport { EnumBalanceDetailsSortType } from './../enums';\r\nimport { EnumPeriod } from './../enums';\r\nimport { EnumNotificationTemplateSectionFields } from './../enums';\r\nexport class NotificationTemplateSection extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'NotificationTemplateSection';\r\n }\r\n \r\n public SectionType: EnumNotificationTemplateSectionType; \r\n public ShowInCurrency: EnumShowInCurrencyOptions; \r\n public ExportType: EnumExportType; \r\n public BalanceSignType: EnumPositiveNegative; \r\n public Title: string; \r\n public IsShowSubtotals: boolean; \r\n public SortOrder: number; \r\n public NotificationTemplateID: number; \r\n public AmountFrom: number; \r\n public AmountTo: number; \r\n public IsFilterByAmount: boolean; \r\n public BalanceDetailsType: EnumBookingAccountSubtypes; \r\n public BalanceDetailsSortType: EnumBalanceDetailsSortType; \r\n public TransactionsPeriodType: EnumPeriod; \r\n public TransactionsPeriod: number; \r\n public IncludeCreaditLimits: boolean; \r\n public BalancePeriodType: EnumPeriod; \r\n public BalancePeriod: number; \r\n public ShowOnlyLastDaysBalance: boolean; \r\n public IsShowBalancesInTransactions: boolean; \r\n public GroupingLines: NotificationTemplateSectionGroupingLine[] = []; \r\n public FilterLines: NotificationTemplateSectionFilterLine[] = []; \r\n public FilterValueLines: NotificationTemplateSectionFilterValueLine[] = []; \r\n\tpublic CreatedBy: number;\r\n\tpublic CreatedDate: Date;\r\n}\r\n\r\nexport class NotificationTemplateSectionGroupingLine extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'NotificationTemplateSectionGroupingLine';\r\n }\r\n \r\n public DataField: EnumNotificationTemplateSectionFields; \r\n public LineID: number;\r\n}\r\nexport class NotificationTemplateSectionFilterLine extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'NotificationTemplateSectionFilterLine';\r\n }\r\n \r\n public DataField: EnumNotificationTemplateSectionFields; \r\n public LineID: number;\r\n}\r\nexport class NotificationTemplateSectionFilterValueLine extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'NotificationTemplateSectionFilterValueLine';\r\n }\r\n \r\n public FilterLineID: number; \r\n public Value: string; \r\n public LineID: number;\r\n}\r\n\r\n\r\n","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { NotificationTemplateSection } from './../entities/notificationtemplatesection.entity';\r\nimport { EnumNotificationTemplateSectionFields } from './../enums';\r\nimport { NotificationTemplateSectionFilterView } from './../views/notificationtemplatesectionfilter.view';\r\nexport class NotificationTemplateSectionView extends NotificationTemplateSection {\r\n constructor() {\r\n super();\r\n this.TypeName = 'NotificationTemplateSectionView';\r\n }\r\n \r\n public Groupings: EnumNotificationTemplateSectionFields[]; \r\n public Filters: NotificationTemplateSectionFilterView[] = []; \r\n\t\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, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState, GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { NotificationTemplateSectionView } from '../../_proxy/views/notificationtemplatesection.view';\r\nimport { EnumBalanceDetailsSortType, EnumBookingAccountSubtypes, EnumExportType, EnumNotificationTemplateSectionFields, EnumNotificationTemplateSectionType, EnumPeriod, EnumPositiveNegative, EnumShowInCurrencyOptions } from '../../_proxy/enums';\r\nimport { DxAccordionComponent } from 'devextreme-angular';\r\nimport { Organization } from '../../_proxy/entities/organization.entity';\r\nimport { BaseDataSourceAbstract } from '@m4u-angular/base/datalayer/BaseDataSourceAbstract';\r\nimport { NotificationTemplateView } from '../../_proxy/views/notificationtemplate.view';\r\nimport { SectionViewClientSide } from './notification-template.component';\r\n\r\nclass State extends BaseState {\r\n NotificationTemplate: NotificationTemplateView;\r\n Sections: SectionViewClientSide[];\r\n Organization: Organization;\r\n GroupingFields: any;\r\n BalanceDetailsSubtypeList: GenericListEntity[];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-notification-template-accordion',\r\n templateUrl: './notification-template-accordion.component.html',\r\n styleUrls: ['./notification-template-accordion.component.scss']\r\n})\r\nexport class NotificationTemplateAccordionComponent extends BaseComponent {\r\n\r\n @ViewChild('accordion') accordion: DxAccordionComponent;\r\n @Input() set NotificationTemplate(value: NotificationTemplateView) {\r\n this.State.NotificationTemplate = value;\r\n }\r\n @Input() set Organization(value: Organization) {\r\n this.State.Organization = value;\r\n }\r\n\r\n @Input() Sources: BaseDataSourceAbstract[]\r\n\r\n @Input() SectionsType: EnumNotificationTemplateSectionType\r\n\r\n @Input() set NotificationSections(value: NotificationTemplateSectionView[]) {\r\n this.State.Sections = value;\r\n }\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'NotificationTemplateAccordionComponent', State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.State.GroupingFields = this.LIST('EnumNotificationTemplateSectionFields')\r\n .filter(st => st.Value !== EnumNotificationTemplateSectionFields.HasCheques &&\r\n st.Value !== EnumNotificationTemplateSectionFields.Category &&\r\n st.Value !== EnumNotificationTemplateSectionFields.InterestType &&\r\n st.Value !== EnumNotificationTemplateSectionFields.NextDays &&\r\n st.Value !== EnumNotificationTemplateSectionFields.NextWeeks &&\r\n st.Value !== EnumNotificationTemplateSectionFields.NextMonths);\r\n this.State.BalanceDetailsSubtypeList = this.LIST('BookingAccountSubTypes').filter(st => st.Value === EnumBookingAccountSubtypes.Guarantee || st.Value === EnumBookingAccountSubtypes.Stocks || st.Value === EnumBookingAccountSubtypes.Deposits || st.Value === EnumBookingAccountSubtypes.Loans);\r\n }\r\n\r\n OnAddSectionClick() {\r\n const newSection = new NotificationTemplateSectionView() as SectionViewClientSide;\r\n newSection.SectionType = this.SectionsType;\r\n newSection.SortOrder = this.State.Sections.length;\r\n newSection.AmountFrom = undefined;\r\n newSection.AmountTo = undefined;\r\n newSection.IsFilterByAmount = false;\r\n newSection.Groupings = [];\r\n newSection.Filters = [];\r\n newSection.ExportType = EnumExportType.InEmail;\r\n newSection.BalanceSignType = EnumPositiveNegative.Both;\r\n newSection.BalanceDetailsSortType = EnumBalanceDetailsSortType.SortByName;\r\n newSection.TransactionsPeriodType = EnumPeriod.Day;\r\n this.State.Sections.push(newSection);\r\n\r\n\r\n console.log(this.State.Sections);\r\n //setTimeout(() => this.accordion.instance.expandItem(this.State.Sections.length - 1));\r\n }\r\n\r\n OnDeleteSectionClick(event, section: any) {\r\n this.State.Sections.splice(this.State.Sections.indexOf(section), 1);\r\n // we need to refresh SortOrder values\r\n this.AdjustSortOrders();\r\n event.stopPropagation();\r\n }\r\n\r\n OnMoveSectionClick(event, section, direction) {\r\n const index = this.State.Sections.findIndex(s => s === section);\r\n const limitIndex = direction === 'up' ? 0 : this.State.Sections.length - 1;\r\n if (index !== limitIndex) {\r\n console.log(this.State.Sections);\r\n const order = section.SortOrder;\r\n const changeIndex = direction === 'up' ? index - 1 : index + 1;\r\n \r\n section.SortOrder = this.State.Sections[changeIndex].SortOrder;\r\n this.State.Sections[changeIndex].SortOrder = order;\r\n this.State.Sections = this.State.Sections.sort((a, b) => a.SortOrder < b.SortOrder ? -1 : a.SortOrder > b.SortOrder ? 1 : 0);\r\n }\r\n event.stopPropagation();\r\n }\r\n\r\n OnAmountFromChanged(section: SectionViewClientSide, $event: number) {\r\n if (section.AmountTo && section.AmountFrom > section.AmountTo) section.AmountFrom = section.AmountTo;\r\n }\r\n\r\n OnAmountToChanged(section: SectionViewClientSide, $event: number) {\r\n if (section.AmountFrom && section.AmountFrom > section.AmountTo) section.AmountTo = section.AmountFrom;\r\n }\r\n \r\n OnPeriodTypeChanged() {\r\n console.log('TODO');\r\n }\r\n\r\n OnShowInCurrencyChanged(event, section: SectionViewClientSide) {\r\n if (event.value == EnumShowInCurrencyOptions.Both || event.value == EnumShowInCurrencyOptions.OriginalAndDefault \r\n || event.value == EnumShowInCurrencyOptions.OriginalAndDollar) {\r\n this.State.Sections.find(s => s.EntryID == section.EntryID).IncludeCreaditLimits = false;\r\n }\r\n }\r\n\r\n\r\n private AdjustSortOrders() {\r\n for(let i = 0; i < this.State.Sections.length; i++) {\r\n this.State.Sections[i].SortOrder = i;\r\n }\r\n }\r\n}\r\n","export default \"\\r\\n
\\r\\n
{{section.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 \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\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 { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { BaseEntity, BaseState, GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumBookingAccountSubtypes, EnumNotificationTemplateSectionFields, EnumNotificationTemplateSectionType } from '../../_proxy/enums';\r\nimport { BaseDataSourceAbstract } from '@m4u-angular/base/datalayer/BaseDataSourceAbstract';\r\nimport { NotificationTemplateSectionView } from '../../_proxy/views/notificationtemplatesection.view';\r\nimport { Organization } from '../../_proxy/entities/organization.entity';\r\nimport { BookingAccountEndpoint } from '../../_proxy/endpoints/bookingaccount.endpoint';\r\nimport { SectionViewClientSide } from './notification-template.component';\r\nimport { TransactionCategory } from '@kraken/_proxy/entities/transactioncategory.entity';\r\nimport { ListTransactionCategoriesParams } from '@kraken/_proxy/params/listtransactioncategories.param';\r\nimport { TransactionCategoryEndpoint } from '@kraken/_proxy/endpoints/transactioncategory.endpoint';\r\nimport DataSource from 'devextreme/data/data_source';\r\nimport ArrayStore from 'devextreme/data/array_store';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport CustomStore from 'devextreme/data/custom_store';\r\n\r\nclass State extends BaseState {\r\n Organization: Organization;\r\n Section: SectionViewClientSide;\r\n TransactionSubTypes: any;\r\n StockTypes: any;\r\n DepositTypes: any;\r\n FilterFields: GenericListEntity[];\r\n SectionType: EnumNotificationTemplateSectionType;\r\n BalanceDetailsType: EnumBookingAccountSubtypes;\r\n CategoryItems: DataSource;\r\n Changes = []\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-notification-template-section-filters-grid',\r\n templateUrl: './notification-template-section-filters-grid.component.html'\r\n})\r\nexport class NotificationTemplateSectionFiltersGridComponent extends BaseGridComponent {\r\n constructor(A: ServiceBagService,\r\n private transactionCategoryEndpoint: TransactionCategoryEndpoint) {\r\n super(A, 'NotificationTemplateSectionFiltersGridComponent', BaseEntity, State);\r\n }\r\n\r\n @Input() set Section(value: NotificationTemplateSectionView) {\r\n this.State.Section = value;\r\n }\r\n\r\n @Input() set Sources(value: BaseDataSourceAbstract[]) {\r\n if (value) {\r\n this.DataSources = value;\r\n }\r\n }\r\n\r\n @Input() set Organization(value: Organization) {\r\n this.State.Organization = value;\r\n }\r\n\r\n @Input() set SectionType(value: EnumNotificationTemplateSectionType) {\r\n this.State.SectionType = value;\r\n this.UpdateFilterFields();\r\n }\r\n\r\n @Input() set BalanceDetailsType(value: EnumBookingAccountSubtypes) {\r\n this.RemoveMismatchedFilterFields();\r\n this.UpdateFilterFields();\r\n }\r\n\r\n get FilterFields() {\r\n this.State.FilterFields.forEach((field: any) => {\r\n const isHasValue = this.State.Section.Filters.some(filter => filter.FilterField === field.Value);\r\n field.visible = !isHasValue;\r\n });\r\n\r\n return this.State.FilterFields;\r\n }\r\n\r\n private RemoveMismatchedFilterFields() {\r\n switch (this.State.Section.BalanceDetailsType) {\r\n case EnumBookingAccountSubtypes.Loans:\r\n this.State.Section.Filters = this.State.Section.Filters\r\n .filter(f => f.FilterField !== EnumNotificationTemplateSectionFields.StockTypes\r\n && f.FilterField !== EnumNotificationTemplateSectionFields.DepositTypes\r\n && f.FilterField !== EnumNotificationTemplateSectionFields.BookingAccount); break;\r\n case EnumBookingAccountSubtypes.Stocks:\r\n this.State.Section.Filters = this.State.Section.Filters\r\n .filter(f => f.FilterField !== EnumNotificationTemplateSectionFields.DepositTypes\r\n && f.FilterField !== EnumNotificationTemplateSectionFields.BookingAccount); break;\r\n case EnumBookingAccountSubtypes.Deposits:\r\n this.State.Section.Filters = this.State.Section.Filters\r\n .filter(f => f.FilterField !== EnumNotificationTemplateSectionFields.StockTypes\r\n && f.FilterField !== EnumNotificationTemplateSectionFields.BookingAccount); break;\r\n }\r\n }\r\n\r\n private UpdateFilterFields() {\r\n switch (this.State.SectionType) {\r\n case EnumNotificationTemplateSectionType.Balances: this.State.FilterFields = this.GetBalanceFilterFields(); break;\r\n case EnumNotificationTemplateSectionType.Transactions: this.State.FilterFields = this.GetTransactionFilterFields(); break;\r\n case EnumNotificationTemplateSectionType.BalanceDetails: this.State.FilterFields = this.GetBalanceDetailsFilterFields(); break;\r\n case EnumNotificationTemplateSectionType.LoanPayments: this.State.FilterFields = this.GetLoansFilterFields(); break;\r\n }\r\n }\r\n\r\n override OnInitComponent() {\r\n this.State.TransactionSubTypes = this.LIST('BookingAccountSubTypes').filter(st => st.Value === EnumBookingAccountSubtypes.Current\r\n || st.Value === EnumBookingAccountSubtypes.CreditCard);\r\n this.State.DepositTypes = this.LIST('DepositTypes').filter(st => st.Value !== this.Enums.EnumBookingAccountDepositTypes.All);\r\n this.State.StockTypes = this.LIST('StockTypes').filter(st => st.Value !== this.Enums.EnumBookingAccountStockTypes.All);\r\n this.LoadTransactionCategories();\r\n }\r\n\r\n private GetTransactionFilterFields(): GenericListEntity[] {\r\n return this.LIST('EnumNotificationTemplateSectionFields').filter(st =>\r\n st.Value === EnumNotificationTemplateSectionFields.BookingAccountType ||\r\n st.Value === EnumNotificationTemplateSectionFields.Company ||\r\n st.Value === EnumNotificationTemplateSectionFields.AccountGroup ||\r\n st.Value === EnumNotificationTemplateSectionFields.BankGroup ||\r\n st.Value === EnumNotificationTemplateSectionFields.Bank ||\r\n st.Value === EnumNotificationTemplateSectionFields.BankAccount ||\r\n st.Value === EnumNotificationTemplateSectionFields.BookingAccount ||\r\n st.Value === EnumNotificationTemplateSectionFields.Currency ||\r\n st.Value === EnumNotificationTemplateSectionFields.HasCheques ||\r\n st.Value === EnumNotificationTemplateSectionFields.Category ||\r\n st.Value === EnumNotificationTemplateSectionFields.SumSide\r\n );\r\n }\r\n\r\n private GetBalanceFilterFields(): GenericListEntity[] {\r\n return this.LIST('EnumNotificationTemplateSectionFields').filter(st =>\r\n st.Value === EnumNotificationTemplateSectionFields.BookingAccountType ||\r\n st.Value === EnumNotificationTemplateSectionFields.Company ||\r\n st.Value === EnumNotificationTemplateSectionFields.AccountGroup ||\r\n st.Value === EnumNotificationTemplateSectionFields.BankGroup ||\r\n st.Value === EnumNotificationTemplateSectionFields.Bank ||\r\n st.Value === EnumNotificationTemplateSectionFields.BankAccount ||\r\n st.Value === EnumNotificationTemplateSectionFields.BookingAccount ||\r\n st.Value === EnumNotificationTemplateSectionFields.Currency\r\n );\r\n }\r\n\r\n private GetBalanceDetailsFilterFields(): GenericListEntity[] {\r\n return this.LIST('EnumNotificationTemplateSectionFields').filter(st =>\r\n st.Value === EnumNotificationTemplateSectionFields.Company ||\r\n st.Value === EnumNotificationTemplateSectionFields.AccountGroup ||\r\n st.Value === EnumNotificationTemplateSectionFields.BankGroup ||\r\n st.Value === EnumNotificationTemplateSectionFields.Bank ||\r\n st.Value === EnumNotificationTemplateSectionFields.BankAccount ||\r\n st.Value === EnumNotificationTemplateSectionFields.BookingAccount ||\r\n st.Value === EnumNotificationTemplateSectionFields.Currency ||\r\n st.Value === EnumNotificationTemplateSectionFields.StockTypes && this.State.Section.BalanceDetailsType === EnumBookingAccountSubtypes.Stocks ||\r\n st.Value === EnumNotificationTemplateSectionFields.DepositTypes && this.State.Section.BalanceDetailsType === EnumBookingAccountSubtypes.Deposits ||\r\n st.Value === EnumNotificationTemplateSectionFields.NextDays && this.State.Section.BalanceDetailsType === EnumBookingAccountSubtypes.Deposits ||\r\n st.Value === EnumNotificationTemplateSectionFields.NextWeeks && this.State.Section.BalanceDetailsType === EnumBookingAccountSubtypes.Deposits ||\r\n st.Value === EnumNotificationTemplateSectionFields.NextMonths && this.State.Section.BalanceDetailsType === EnumBookingAccountSubtypes.Deposits\r\n );\r\n }\r\n\r\n private GetLoansFilterFields(): GenericListEntity[] {\r\n return this.LIST('EnumNotificationTemplateSectionFields').filter(st => {\r\n return st.Value === EnumNotificationTemplateSectionFields.Company ||\r\n st.Value === EnumNotificationTemplateSectionFields.BankAccount ||\r\n st.Value === EnumNotificationTemplateSectionFields.BookingAccount ||\r\n st.Value === EnumNotificationTemplateSectionFields.AmortizationType ||\r\n st.Value === EnumNotificationTemplateSectionFields.InterestType ||\r\n st.Value === EnumNotificationTemplateSectionFields.NextDays ||\r\n st.Value === EnumNotificationTemplateSectionFields.NextWeeks ||\r\n st.Value === EnumNotificationTemplateSectionFields.NextMonths;\r\n });\r\n }\r\n\r\n getFilterValuesDataSource(cellInfo) {\r\n switch (cellInfo.data.FilterField) {\r\n case EnumNotificationTemplateSectionFields.Currency: return this.LIST('Currencies');\r\n case EnumNotificationTemplateSectionFields.Bank: return this.LIST('Banks');\r\n case EnumNotificationTemplateSectionFields.BankGroup: return this.LIST('BankGroups');\r\n case EnumNotificationTemplateSectionFields.BookingAccountType:\r\n return this.State.Section.SectionType === EnumNotificationTemplateSectionType.Transactions ? this.State.TransactionSubTypes : this.LIST('BookingAccountSubTypes');\r\n case EnumNotificationTemplateSectionFields.DepositTypes: return this.State.DepositTypes;\r\n case EnumNotificationTemplateSectionFields.StockTypes: return this.State.StockTypes;\r\n case EnumNotificationTemplateSectionFields.BookingAccount:\r\n if (this.State.Section.SectionType === EnumNotificationTemplateSectionType.BalanceDetails && this.State.Section.BalanceDetailsType === EnumBookingAccountSubtypes.Deposits) return this.DS('BookingAccountsDeposits')?.Data;\r\n if (this.State.Section.SectionType === EnumNotificationTemplateSectionType.BalanceDetails && this.State.Section.BalanceDetailsType === EnumBookingAccountSubtypes.Stocks) return this.DS('BookingAccountsStocks')?.Data;\r\n if (this.State.Section.SectionType === EnumNotificationTemplateSectionType.BalanceDetails && this.State.Section.BalanceDetailsType === EnumBookingAccountSubtypes.Loans) return this.DS('BookingAccountsLoans')?.Data;\r\n if (this.State.Section.SectionType === EnumNotificationTemplateSectionType.Transactions) return this.DS('BookingAccountsTransactions')?.Data;\r\n if (this.State.Section.SectionType === EnumNotificationTemplateSectionType.LoanPayments) return this.DS('BookingAccountsLoanPayments')?.Data;\r\n if (this.State.Section.SectionType === EnumNotificationTemplateSectionType.Balances) return this.DS('BookingAccount')?.Data;\r\n break;\r\n case EnumNotificationTemplateSectionFields.AmortizationType:\r\n return this.LIST('AmortizationTypes');\r\n\r\n case EnumNotificationTemplateSectionFields.InterestType:\r\n return this.LIST('InterestTypes');\r\n case EnumNotificationTemplateSectionFields.SumSide:\r\n return this.LIST('SumSides');\r\n case EnumNotificationTemplateSectionFields.Category: {\r\n return this.State.CategoryItems;\r\n }\r\n\r\n default: return this.DS(cellInfo.data.FilterField)?.Data;\r\n }\r\n }\r\n getFilterValuesDisplayExpr(cellInfo) {\r\n if (this.IsEnumFilterField(cellInfo.data.FilterField)) return 'Text';\r\n if (cellInfo.data.FilterField === EnumNotificationTemplateSectionFields.BankAccount) return 'AccountFullName';\r\n if (cellInfo.data.FilterField === EnumNotificationTemplateSectionFields.BookingAccount) return 'BookingAccountFullName';\r\n return 'Name';\r\n }\r\n\r\n getFilterValuesValueExpr(cellInfo) {\r\n if (this.IsEnumFilterField(cellInfo.data.FilterField)) { return 'Value'; }\r\n return 'EntryID';\r\n }\r\n\r\n getFilterValuesType({ data }) {\r\n const { FilterField } = data;\r\n\r\n const tags = [\r\n EnumNotificationTemplateSectionFields.BookingAccountType,\r\n EnumNotificationTemplateSectionFields.Company,\r\n EnumNotificationTemplateSectionFields.AccountGroup,\r\n EnumNotificationTemplateSectionFields.BankGroup,\r\n EnumNotificationTemplateSectionFields.Bank,\r\n EnumNotificationTemplateSectionFields.BankAccount,\r\n EnumNotificationTemplateSectionFields.BookingAccount,\r\n EnumNotificationTemplateSectionFields.Currency,\r\n EnumNotificationTemplateSectionFields.Category,\r\n EnumNotificationTemplateSectionFields.DepositTypes,\r\n EnumNotificationTemplateSectionFields.StockTypes,\r\n EnumNotificationTemplateSectionFields.AmortizationType,\r\n EnumNotificationTemplateSectionFields.InterestType,\r\n EnumNotificationTemplateSectionFields.SumSide\r\n ];\r\n\r\n const number = [\r\n EnumNotificationTemplateSectionFields.NextDays,\r\n EnumNotificationTemplateSectionFields.NextWeeks,\r\n EnumNotificationTemplateSectionFields.NextMonths,\r\n ];\r\n\r\n const boolean = [\r\n EnumNotificationTemplateSectionFields.HasCheques\r\n ];\r\n\r\n if (tags.includes(FilterField)) {\r\n return 'tags';\r\n }\r\n\r\n if (number.includes(FilterField)) {\r\n return 'number';\r\n }\r\n if (boolean.includes(FilterField)) {\r\n return 'boolean';\r\n }\r\n }\r\n\r\n IsEnumFilterField(filterField: EnumNotificationTemplateSectionFields): boolean {\r\n return filterField === EnumNotificationTemplateSectionFields.Currency\r\n || filterField === EnumNotificationTemplateSectionFields.Bank\r\n || filterField === EnumNotificationTemplateSectionFields.BankGroup\r\n || filterField === EnumNotificationTemplateSectionFields.BookingAccountType\r\n || filterField === EnumNotificationTemplateSectionFields.HasCheques\r\n || filterField === EnumNotificationTemplateSectionFields.DepositTypes\r\n || filterField === EnumNotificationTemplateSectionFields.StockTypes\r\n || filterField === EnumNotificationTemplateSectionFields.AmortizationType\r\n || filterField === EnumNotificationTemplateSectionFields.InterestType\r\n || filterField === EnumNotificationTemplateSectionFields.SumSide;\r\n }\r\n\r\n OnEditorPreparing(e) {\r\n if (e.dataField === 'FilterField' && e.parentType === 'dataRow') {\r\n const defaultValueChangeHandler = e.editorOptions.onValueChanged;\r\n e.editorOptions.onValueChanged = function (args) {\r\n if (args.value === EnumNotificationTemplateSectionFields.HasCheques) {\r\n e.component.cellValue(e.row.rowIndex, 'Values', [0]);\r\n }\r\n\r\n defaultValueChangeHandler(args);\r\n };\r\n }\r\n }\r\n\r\n LoadTransactionCategories() {\r\n const params = new ListTransactionCategoriesParams();\r\n params.LoadActive = true;\r\n params.LoadGlobal = true;\r\n params.OrganizationID = this.State.Organization.EntryID;\r\n\r\n this.Do(this.transactionCategoryEndpoint.ListCategories(params, null), false, ({ Entities }) => {\r\n const categoryItems = Entities as TransactionCategory[];\r\n const uncategorized = new TransactionCategory();\r\n uncategorized.EntryID = -999;\r\n uncategorized.Name = this.RC('lblUncategorized');\r\n categoryItems.unshift(uncategorized);\r\n\r\n this.State.CategoryItems = new DataSource({\r\n store: new ArrayStore({\r\n data: categoryItems,\r\n key: 'EntryID'\r\n }),\r\n paginate: true,\r\n pageSize: 100\r\n });\r\n });\r\n }\r\n\r\n getFilterValuesSearchEnabled(cellInfo) {\r\n if (cellInfo.data.FilterField === EnumNotificationTemplateSectionFields.Category) return true;\r\n return false;\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\";","\r\n\r\n\r\n\r\n\r\n\r\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 { Reconciliation } from './../entities/reconciliation.entity';\r\nimport { ReconciliationView } from './../views/reconciliation.view';\r\nimport { ReconciliationParams } from './../params/reconciliation.param';\r\nimport { MatchForecastOperationsParams } from './../params/matchforecastoperations.param';\r\n@Injectable()\r\nexport class ReconciliationEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"Reconciliation\", api);}\r\n\t\r\n\r\n public ListReconcilationItems(Params: ReconciliationParams, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListReconcilationItems', Params, options?.GetLoadOptions() );\r\n }\r\n\r\n public MatchForecastOperationsAndTransactions(Params: MatchForecastOperationsParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'MatchForecastOperationsAndTransactions', 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 MatchForecastOperationsParams extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'MatchForecastOperationsParams';\r\n }\r\n \r\n public ForecastOperations: number[]; \r\n public Transactions: number[]; \r\n public BookingAccountID: number; \r\n public MarkAsFullyReconciled: boolean; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumBookingAccountSubtypes } from './../enums';\r\nimport { EnumBanks } from './../enums';\r\nimport { EnumCCBrands } from './../enums';\r\nexport class TransactionView extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'TransactionView';\r\n }\r\n \r\n public AccountName: string; \r\n public AccountID: number; \r\n public CompanyID: number; \r\n public Balance: number; \r\n public BookingAccountCode: string; \r\n public BookingAccountID: number; \r\n public BookingAccountName: string; \r\n public BookingAccountSubtype: EnumBookingAccountSubtypes; \r\n public CompanyName: string; \r\n public Credit: number; \r\n public Currency: string; \r\n public Date: Date; \r\n public Debit: number; \r\n public JournalEntryID: number; \r\n public Notes1: string; \r\n public Notes2: string; \r\n public OriginalCurrency: string; \r\n public OriginalSum: number; \r\n public TransactionCategoryID: number; \r\n public TransactionCategoryName: string; \r\n public TransactionCategoryIcon: string; \r\n public Amount: number; \r\n public Reference: string; \r\n public IsBookingAccountCCPostingAutoGenerate: boolean; \r\n public BankChargeDate: Date; \r\n public IsChequesExist: boolean; \r\n public IsActiveCashflow: boolean; \r\n public IsJEGenerationAvalable: boolean; \r\n public ReconciliationID: number; \r\n public OriginDate: Date; \r\n public Bank: EnumBanks; \r\n public BookingAccountFullName: string; \r\n public CCBrand: EnumCCBrands; \r\n public CC4Digits: string; \r\n public IncomingPaymentID: 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 { BaseParamsFilter } from './../entities/baseparamsfilter.entity';\r\nexport class ForecastOperationParams extends BaseParamsFilter {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ForecastOperationParams';\r\n }\r\n \r\n public DateFrom: Date; \r\n public DateTo: Date; \r\n public IsDebitOnly: boolean; \r\n public IsCreditOnly: boolean; \r\n public IsNotReconcilationed: boolean; \r\n public IsOneTimeOnly: boolean; \r\n public RecurringForecastID: number; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { Component, ViewChild } from '@angular/core';\r\nimport {\r\n ServiceBagServices,\r\n ServiceBagService,\r\n} from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState, BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { EnumBookingAccountSubtypes, EnumSide } from '../../../_proxy/enums';\r\nimport { MessageBoxCustomButton, ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { Globals } from '../../../_globals';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { CashflowReportEndpoint } from '../../../_proxy/endpoints/cashflowreport.endpoint';\r\nimport { CashflowDetailedGridComponent } from '../../cashflow-report/detailed-view/grid/cashflow-detailed-grid.component';\r\nimport { EnumCRUDActions, EnumMessageBoxTypes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { MessageBoxDialogComponent } from '@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\nimport { ReconciliationEndpoint } from '../../../_proxy/endpoints/reconciliation.endpoint';\r\nimport { MatchForecastOperationsParams } from '../../../_proxy/params/matchforecastoperations.param';\r\nimport { TransactionEndpoint } from '../../../_proxy/endpoints/transaction.endpoint';\r\nimport { TransactionReportParams } from '../../../_proxy/params/transactionreport.param';\r\nimport { TransactionView } from '../../../_proxy/views/transaction.view';\r\nimport { ForecastOperationEndpoint } from '../../../_proxy/endpoints/forecastoperation.endpoint';\r\nimport { ForecastOperationParams } from '../../../_proxy/params/forecastoperation.param';\r\nimport { ForecastOperationView } from '../../../_proxy/views/forecastoperation.view';\r\nimport { FilterSettings, FilterValues } from '../../../components/filter/filter.component';\r\nimport { FilterComponent } from '../../../components/filter/filter.component';\r\nimport { AccountListParams } from '@kraken/_proxy/params/accountlist.param';\r\nimport { BookingAccountListParams } from '@kraken/_proxy/params/bookingaccountlist.param';\r\nimport { QuickFilterSettings } from '@kraken/components/quick-filter/quick-filter.component';\r\nimport { formatNumber } from 'devextreme/localization';\r\nimport { DateHelpers } from '@m4u-angular/core/helpers/DateHelpers';\r\nimport { RecurringForecast } from '@kraken/_proxy/entities/recurringforecast.entity';\r\n\r\nclass State extends BaseState {\r\n FilterValues: FilterValues;\r\n FilterSettings: FilterSettings;\r\n QuickFilterSettings: QuickFilterSettings;\r\n Side: EnumSide;\r\n SortOrder: string = 'desc';\r\n GridCaption: string;\r\n ForecastOperations: ForecastOperationView[] = [];\r\n Transactions: TransactionView[] = [];\r\n IsFiltersVisible: boolean;\r\n SelectedForecastOperations: ForecastOperationView[] = [];\r\n SelectedTransactions: TransactionView[] = [];\r\n TransactionID: number;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-reconciliation-form',\r\n templateUrl: './reconciliation-form.component.html',\r\n styleUrls: ['reconciliation-form.component.scss']\r\n})\r\nexport class ReconciliationFormComponent extends BasePageComponent {\r\n @ViewChild('filter') filter: FilterComponent;\r\n @ViewChild('ForecastOperationsGrid') forecastOperationsGrid: CashflowDetailedGridComponent;\r\n @ViewChild('TransactionsGrid') transactionsGrid: CashflowDetailedGridComponent;\r\n @ViewChild('messageBox') messageBoxDialog: MessageBoxDialogComponent;\r\n CashflowTabs = this.LIST('CashflowTabs');\r\n EnumMessageBoxTypes = EnumMessageBoxTypes;\r\n reconciliationConfirmationMsg: string;\r\n\r\n MessageButtons: MessageBoxCustomButton[] = [];\r\n ReconciliationOperations = [{ Text: this.RC('lblOneTime'), Value: 'oneTime' }, { Text: this.RC('lblRecurring'), Value: 'recurring' }];\r\n\r\n constructor(\r\n A: ServiceBagService,\r\n public screenService: ScreenService,\r\n private cashflowReportEndpoint: CashflowReportEndpoint,\r\n private reconcilationEndpoint: ReconciliationEndpoint,\r\n private transactionEndpoint: TransactionEndpoint,\r\n private forecastOperationEndpoint: ForecastOperationEndpoint\r\n ) {\r\n super(A, 'ReconciliationFormComponent', BaseEntity, State);\r\n }\r\n\r\n get ForecastsSum() {\r\n return this.State.SelectedForecastOperations.reduce((acc, view) => acc + (view.NotReconciledSum ?? 0), 0);\r\n }\r\n\r\n get TransactionsSum() {\r\n return this.State.SelectedTransactions.reduce((acc, view) => acc + (view.Credit ?? 0) + (view.Debit ?? 0) * -1, 0);\r\n }\r\n\r\n get DifferenceSum() {\r\n return this.ForecastsSum - this.TransactionsSum;\r\n }\r\n\r\n override OnInitState() {\r\n this.State.FilterSettings = {\r\n Company: { IsVisible: true, IsMultiple: true },\r\n Account: {\r\n IsVisible: true, IsMultiple: true,\r\n Params: { BookingAccountSubtypes: [EnumBookingAccountSubtypes.Current] } as AccountListParams\r\n },\r\n BookingAccount: {\r\n IsVisible: true,\r\n Params: { BookingAccountSubtypes: [EnumBookingAccountSubtypes.Current] } as BookingAccountListParams\r\n },\r\n Scenario: { IsVisible: true, IsMultiple: true },\r\n IsDatesVisible: true,\r\n ProbabilityLevel: { IsVisible: true, IsMultiple: true },\r\n IsLoadActiveCashflow: true\r\n } as FilterSettings;\r\n\r\n this.State.QuickFilterSettings = {\r\n Company: { IsVisible: true, IsMultiple: true },\r\n Account: {\r\n IsVisible: true, IsMultiple: true,\r\n Params: { BookingAccountSubtypes: [EnumBookingAccountSubtypes.Current] } as AccountListParams\r\n },\r\n BookingAccount: {\r\n IsVisible: true,\r\n Params: { BookingAccountSubtypes: [EnumBookingAccountSubtypes.Current] } as BookingAccountListParams\r\n },\r\n IsDatesVisible: true,\r\n } as QuickFilterSettings;\r\n\r\n this.State.FilterValues = {\r\n DateTo: Globals.ThirtyDaysAfterDate,\r\n DateFrom: Globals.ThirtyDaysAgoDate\r\n } as FilterValues;\r\n\r\n if (this.QueryParams?.TransactionID) {\r\n this.State.TransactionID = +this.QueryParams?.TransactionID;\r\n\r\n if (this.QueryParams?.BookingAccountID) {\r\n this.State.FilterValues.BookingAccount = +this.QueryParams?.BookingAccountID;\r\n }\r\n\r\n if (this.QueryParams?.CompanyID) {\r\n this.State.FilterValues.Company = +this.QueryParams?.CompanyID;\r\n }\r\n\r\n if (this.QueryParams?.Date) {\r\n const date = new Date(this.QueryParams?.Date);\r\n this.State.FilterValues.DateFrom = DateHelpers.AddDay(date, -7);\r\n this.State.FilterValues.DateTo = DateHelpers.AddDay(date, 7);\r\n }\r\n\r\n if (this.QueryParams?.IsExpense) {\r\n this.State.Side = EnumSide.Expense;\r\n } else {\r\n this.State.Side = EnumSide.Income;\r\n }\r\n }\r\n\r\n }\r\n\r\n override OnInitComponent() {\r\n this.LoadDetailedData();\r\n\r\n }\r\n override OnInitComponentFinished() {\r\n super.OnInitComponentFinished();\r\n }\r\n\r\n OnBookingAccountChanged(e) { }\r\n\r\n ShowSumInfoMessage() {\r\n const message = `${this.RC('lblForecastsSum')}: ${formatNumber(this.ForecastsSum, this.F.NumberPrice)}\r\n\r\n ${this.RC('lblTransactionsSum')}: ${formatNumber(this.TransactionsSum, this.F.NumberPrice)}\r\n\r\n ${this.RC('lblDifferenceSum')}: ${formatNumber(this.DifferenceSum, this.F.NumberPrice)}`;\r\n\r\n this.UI.InfoMessage(message, null, 15000000);\r\n }\r\n\r\n LoadDetailedData() {\r\n if (!this.State.FilterValues.BookingAccount) {\r\n if (this.State.ForecastOperations.length > 0) {\r\n this.State.ForecastOperations = [];\r\n }\r\n if (this.State.Transactions.length > 0) {\r\n this.State.Transactions = [];\r\n }\r\n return;\r\n }\r\n this.LoadForecasts();\r\n this.LoadTransactions();\r\n }\r\n\r\n LoadTransactions() {\r\n if (this.State.TransactionID) {\r\n this.Do(\r\n this.transactionEndpoint.Get(this.State.TransactionID),\r\n false,\r\n (response) => {\r\n this.State.Transactions = [response.Entity as any];\r\n }\r\n );\r\n return;\r\n }\r\n const transactionParams = this.GetTransactionsParams();\r\n this.Do(\r\n this.transactionEndpoint.ListEx(transactionParams),\r\n false,\r\n (response) => {\r\n this.State.Transactions = response.Entities;\r\n }\r\n );\r\n }\r\n\r\n LoadForecasts() {\r\n const forecastOperationParams = this.GetForecastOperationParams();\r\n this.Do(\r\n this.forecastOperationEndpoint.ListEx(forecastOperationParams),\r\n false,\r\n (response) => {\r\n this.State.ForecastOperations = response.Entities;\r\n }\r\n );\r\n }\r\n\r\n GetForecastOperationParams(): ForecastOperationParams {\r\n const params = new ForecastOperationParams();\r\n params.OrganizationID = Globals.OrganizationID;\r\n params.BookingAccounts = this.State.FilterValues.BookingAccount ? [this.State.FilterValues.BookingAccount as number] : [];\r\n params.DateFrom = this.State.FilterValues.DateFrom;\r\n params.DateTo = this.State.FilterValues.DateTo;\r\n params.IsDebitOnly = this.State.Side === EnumSide.Expense;\r\n params.IsCreditOnly = this.State.Side === EnumSide.Income;\r\n // TODO: cashflow\r\n // params.ForecastTypes = [EnumForecastType.CCExpense,EnumForecastType.CCIncome, EnumForecastType.Loans, EnumForecastType.Manual,\r\n // EnumForecastType.Recurring];\r\n params.Scenarios = this.State.FilterValues.Scenario as number[];\r\n params.ProbabilityLevels = this.State.FilterValues.ProbabilityLevel as number[];\r\n params.IsNotReconcilationed = true;\r\n return params;\r\n }\r\n\r\n GetTransactionsParams(): TransactionReportParams {\r\n const params = new TransactionReportParams();\r\n params.OrganizationID = Globals.OrganizationID;\r\n params.BookingAccounts = this.State.FilterValues.BookingAccount ? [this.State.FilterValues.BookingAccount as number] : [];\r\n params.DateFrom = this.State.FilterValues.DateFrom;\r\n params.DateTo = this.State.FilterValues.DateTo;\r\n params.IsDebitOnly = this.State.Side === EnumSide.Expense;\r\n params.IsCreditOnly = this.State.Side === EnumSide.Income;\r\n params.IsNotReconcilationed = true;\r\n return params;\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity,\r\n ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n if (ExternalEntityType == ForecastOperationView || ExternalEntityType == RecurringForecast) {\r\n this.LoadForecasts();\r\n }\r\n if (ExternalEntityType == TransactionView) {\r\n this.LoadTransactions();\r\n }\r\n }\r\n\r\n GetNextDayFromDate(date: Date) {\r\n if (!date) return;\r\n\r\n return new Date(date.getFullYear(), date.getMonth(), date.getDate() + 1);\r\n }\r\n\r\n OnSelectionForecastOperationsChanged(items: ForecastOperationView[]) {\r\n this.State.SelectedForecastOperations = items;\r\n if (this.State.SelectedForecastOperations.length) {\r\n this.UpdateDialogButtons();\r\n }\r\n }\r\n\r\n OnSelectionTransactionsChanged(items: TransactionView[]) {\r\n this.State.SelectedTransactions = items;\r\n if (this.State.SelectedTransactions.length) {\r\n this.UpdateDialogButtons();\r\n }\r\n }\r\n\r\n get Currency(): string {\r\n const currency = this.State.Transactions.at(0)?.Currency;\r\n return currency ? (this.LISTITEMX('Currencies', currency) as any).Symbol : null;\r\n }\r\n\r\n OnMatch() {\r\n const forecastsSum = this.ForecastsSum;\r\n const transactionsSum = this.TransactionsSum;\r\n\r\n if (forecastsSum != transactionsSum) {\r\n //check if sums have the same sign\r\n if (forecastsSum * transactionsSum < 0) {\r\n this.reconciliationConfirmationMsg = this.RC('msgMatchNotSameAmountAndDifferentTypeQuestion');\r\n } else {\r\n this.reconciliationConfirmationMsg = this.RC('msgMatchNotSameAmountQuestion',\r\n Math.abs(forecastsSum - transactionsSum).toFixed(2));\r\n }\r\n\r\n if (this.State.SelectedForecastOperations?.length < 1) {\r\n this.reconciliationConfirmationMsg = this.RC('msgMatchNotForecast');\r\n }\r\n\r\n if (this.State.SelectedTransactions?.length < 1) {\r\n this.reconciliationConfirmationMsg = this.RC('msgMatchNoTransactions');\r\n }\r\n\r\n this.messageBoxDialog.ShowDialogShort((buttonID: number) => {\r\n if (buttonID === 0) return;\r\n this.MatchForecastOperations(buttonID === 2);\r\n });\r\n } else {\r\n this.MatchForecastOperations();\r\n }\r\n }\r\n\r\n UpdateDialogButtons() {\r\n if (this.State.SelectedForecastOperations.length === 1 && Math.abs(this.ForecastsSum) > Math.abs(this.TransactionsSum)\r\n && this.State.SelectedTransactions.length > 0) {\r\n this.MessageButtons = [\r\n {\r\n Text: this.RC('lblCompletely'),\r\n ButtonID: 2\r\n },\r\n {\r\n Text: this.RC('lblPartially'),\r\n ButtonID: 3\r\n },\r\n {\r\n Text: this.RC('genCancel'),\r\n ButtonID: 0\r\n },\r\n ];\r\n } else {\r\n this.MessageButtons = [\r\n {\r\n Text: this.RC('genCancel'),\r\n ButtonID: 0\r\n },\r\n {\r\n Text: this.RC('genOK'),\r\n ButtonID: 1\r\n },\r\n ];\r\n }\r\n }\r\n\r\n MatchForecastOperations(isFullyReconciled?: boolean) {\r\n const params = new MatchForecastOperationsParams();\r\n params.MarkAsFullyReconciled = this.State.SelectedTransactions?.length < 1 ? true : isFullyReconciled;\r\n params.BookingAccountID = this.State.FilterValues.BookingAccount as number;\r\n params.ForecastOperations = this.State.SelectedForecastOperations.map(f => f.EntryID);\r\n params.Transactions = this.State.SelectedTransactions.map(f => f.EntryID);\r\n this.Do(this.reconcilationEndpoint.MatchForecastOperationsAndTransactions(params), true, () => {\r\n this.LoadDetailedData();\r\n });\r\n }\r\n\r\n get isVisibleMatchBtn(): boolean {\r\n return !!(this.State.SelectedTransactions.length) || !!(this.State.SelectedForecastOperations.length);\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n const settings = new ToolbarSettings;\r\n settings.IsAllowFilter = true;\r\n settings.GridExtender = this.forecastOperationsGrid?.G;\r\n\r\n return settings;\r\n }\r\n\r\n OnReloadForecasts() {\r\n this.LoadForecasts();\r\n }\r\n\r\n OnQuickFilterChanged() {\r\n this.LoadDetailedData();\r\n }\r\n\r\n protected override OnReadyFilter(): void {\r\n this.LoadDetailedData();\r\n }\r\n\r\n override OnApplyFilter() {\r\n this.LoadDetailedData();\r\n }\r\n\r\n override OnClearFilter() {\r\n this.InitState();\r\n // this.filter.LoadData();\r\n this.LoadDetailedData();\r\n }\r\n\r\n override OnInitSubtitle() {\r\n return this.RC('ReconciliationFormComponentSubTitle');\r\n }\r\n\r\n OnAddNewIncome(event: any) {\r\n this.NavigateToForecastCreate(EnumSide.Income, event.itemData.Value);\r\n }\r\n\r\n OnAddNewExpense(event: any) {\r\n this.NavigateToForecastCreate(EnumSide.Expense, event.itemData.Value);\r\n }\r\n\r\n private NavigateToForecastCreate(side: EnumSide, operationType: string) {\r\n const params: any = {\r\n OrganizationID: Globals.OrganizationID,\r\n Side: side,\r\n BookingAccountID: this.State.FilterValues.BookingAccount as number\r\n };\r\n\r\n if (operationType == 'oneTime') {\r\n this.Navigate(['/pages/forecast-operation/new'], params, true);\r\n } else {\r\n this.Navigate(['/pages/recurring-forecast/new'], params, 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 {{ 'lblForecastsSum' | RC:THIS }}:\\r\\n \\r\\n {{ ForecastsSum | formatPriceWithCurrency: Currency: true }}\\r\\n \\r\\n
\\r\\n
\\r\\n {{ 'lblTransactionsSum' | RC:THIS }}:\\r\\n \\r\\n {{ TransactionsSum | formatPriceWithCurrency: Currency: true }}\\r\\n \\r\\n
\\r\\n
\\r\\n {{ 'lblDifferenceSum' | RC:THIS }}:\\r\\n \\r\\n {{ DifferenceSum | formatPriceWithCurrency: Currency: true }}\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n\";","\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { DownloadFailureReview } from './../views/downloadfailurere.view';\r\n@Injectable()\r\nexport class DownloadFailureReviewEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(api: APIGatewayService) {super(\"DownloadFailureReview\", 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 { BaseParamsFilter } from './../entities/baseparamsfilter.entity';\r\nimport { EnumSource } from './../enums';\r\nexport class ReconciliationParams extends BaseParamsFilter {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ReconciliationParams';\r\n }\r\n \r\n public Sources: EnumSource[]; \r\n public DateFrom: Date; \r\n public DateTo: Date; \r\n public Reconciliations: number[]; \r\n public ShowBankSideReconciliation: boolean; \r\n public OperationDateFrom: Date; \r\n public OperationDateTo: Date; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class DateRange {\r\n DateFrom: Date;\r\n DateTo: Date;\r\n}\r\n\r\n@Component({\r\n selector: 'app-date-range',\r\n templateUrl: './date-range.component.html',\r\n styleUrls: ['./date-range.component.scss']\r\n})\r\nexport class DateRangeComponent extends BaseComponent {\r\n @Input() DateFromLable = 'lblDateFrom';\r\n @Input() DateToLable = 'lblDateTo';\r\n\r\n @Input() DateRange: DateRange;\r\n\r\n @Output() DateRangeChanged = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'DateRangeComponent', DateRange);\r\n if(!this.DateRange) {\r\n this.DateRange = new DateRange();\r\n }\r\n }\r\n\r\n OnDateRangeSelected(e) {\r\n if (!e.itemData) return;\r\n\r\n this.SetFromDate(e.itemData.DateFrom);\r\n this.SetDateTo(e.itemData.DateTo);\r\n \r\n this.OnDateRangeChanged(e);\r\n }\r\n\r\n OnDateFromChange(e) {\r\n this.OnDateChange(e, this.SetFromDate);\r\n }\r\n\r\n OnDateToChange(e) {\r\n this.OnDateChange(e, this.SetDateTo);\r\n }\r\n\r\n private OnDateChange(e: any, setter: (date: Date) => void) {\r\n if (e?.value) {\r\n setter.call(this, e.value);\r\n }\r\n\r\n this.OnDateRangeChanged(e);\r\n }\r\n\r\n private SetFromDate(date: Date) {\r\n this.DateRange.DateFrom = new Date(date.setHours(0, 0, 0));\r\n }\r\n\r\n private SetDateTo(date: Date) {\r\n this.DateRange.DateTo = new Date(date.setHours(23, 59, 59, 999));\r\n }\r\n\r\n private OnDateRangeChanged(e) {\r\n if (!this.IsUIEvent(e)) {\r\n return;\r\n }\r\n\r\n this.DateRangeChanged.emit(this.DateRange);\r\n }\r\n}","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\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 { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState, BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { EnumBookingAccountSubtypes, EnumSource } from '../../_proxy/enums';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { Globals } from '../../_globals';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { ReconciliationParams } from '../../_proxy/params/reconciliation.param';\r\nimport { ReconciliationEndpoint } from '../../_proxy/endpoints/reconciliation.endpoint';\r\nimport { ReconciliationView } from '../../_proxy/views/reconciliation.view';\r\nimport { ReconciliationGridComponent } from './reconciliation-grid/reconciliation-grid.component';\r\nimport { FilterComponent, FilterSettings, FilterValues } from '../../components/filter/filter.component';\r\nimport { AccountListParams } from '@kraken/_proxy/params/accountlist.param';\r\nimport { BookingAccountListParams } from '@kraken/_proxy/params/bookingaccountlist.param';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { QuickFilterSettings } from '@kraken/components/quick-filter/quick-filter.component';\r\nimport { DateRange } from '@kraken/components/date-range/date-range.component';\r\n\r\nclass State extends BaseState {\r\n FilterValues: FilterValues;\r\n FilterSettings: FilterSettings;\r\n QuickFilterSettings: QuickFilterSettings = {} as QuickFilterSettings;\r\n Sources: EnumSource[];\r\n SortOrder: string = 'desc';\r\n GridData: ReconciliationView[] = [];\r\n Reconciliations: number[];\r\n ShowBankSideReconciliation: boolean;\r\n MatchDateRange: DateRange;\r\n OperationDateRange: DateRange;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-reconciliation-view',\r\n templateUrl: './reconciliation-view.component.html',\r\n styleUrls: ['reconciliation-view.component.scss']\r\n})\r\nexport class ReconciliationViewComponent extends BasePageComponent {\r\n @ViewChild('filter') filter: FilterComponent;\r\n @ViewChild('grid') reconciliationGrid: ReconciliationGridComponent;\r\n\r\n constructor(A: ServiceBagService, public screenService: ScreenService, private reconciliationEndpoint: ReconciliationEndpoint) {\r\n super(A, 'ReconciliationViewComponent', BaseEntity, State);\r\n }\r\n\r\n override OnInitState() {\r\n const { BookingAccountID, OrganizationID, ReconciliationID } = this.QueryParams;\r\n\r\n this.State.Reconciliations = ReconciliationID ? [ReconciliationID] : [];\r\n this.State.FilterSettings = {\r\n Company: { IsVisible: true, IsMultiple: true },\r\n Account: {\r\n IsVisible: true,\r\n IsMultiple: true,\r\n Params: { BookingAccountSubtypes: [EnumBookingAccountSubtypes.Current] } as AccountListParams\r\n },\r\n BookingAccount: {\r\n IsVisible: true,\r\n Params: { BookingAccountSubtypes: [EnumBookingAccountSubtypes.Current] } as BookingAccountListParams\r\n },\r\n AccountGroup: { IsVisible: true, IsMultiple: true },\r\n Scenario: { IsVisible: true, IsMultiple: true },\r\n ProbabilityLevel: { IsVisible: true, IsMultiple: true },\r\n\r\n IsDatesVisible: false,\r\n IsLoadActiveCashflow: true\r\n } as FilterSettings;\r\n\r\n this.State.FilterValues = {\r\n BookingAccount: BookingAccountID,\r\n OrganizationID\r\n } as FilterValues;\r\n\r\n this.State.MatchDateRange = new DateRange();\r\n this.State.OperationDateRange = new DateRange();\r\n\r\n this.State.MatchDateRange.DateFrom = new Date(Globals.ThirtyDaysAgoDate.setHours(0, 0, 0));\r\n this.State.MatchDateRange.DateTo = new Date(Globals.Today.setHours(23, 59, 59, 999));\r\n }\r\n\r\n override OnInitComponent() {\r\n this.LoadGridData();\r\n }\r\n\r\n override OnInitComponentFinished() {\r\n // this.filter.LoadData();\r\n }\r\n\r\n override OnReadyFilter() {\r\n this.LoadGridData();\r\n }\r\n\r\n OnOrganizationChanged() {\r\n this.LoadGridData();\r\n }\r\n\r\n LoadGridData() {\r\n if (!Globals.OrganizationID) {\r\n this.DataSources['Reconcilations'] = undefined;\r\n return;\r\n }\r\n\r\n const params = new ReconciliationParams();\r\n params.OrganizationID = Globals.OrganizationID;\r\n params.Companies = this.State.FilterValues.Company as number[];\r\n params.AccountGroups = this.State.FilterValues.AccountGroup as number[];\r\n params.Accounts = this.State.FilterValues.Account as number[];\r\n params.BookingAccounts = this.State.FilterValues.BookingAccount ? [this.State.FilterValues.BookingAccount as number] : [];\r\n params.DateFrom = this.State.MatchDateRange.DateFrom;\r\n params.DateTo = this.State.MatchDateRange.DateTo;\r\n params.Sources = this.State.Sources;\r\n params.Reconciliations = this.State.Reconciliations;\r\n params.ShowBankSideReconciliation = this.State.ShowBankSideReconciliation;\r\n params.OperationDateFrom = this.State.OperationDateRange.DateFrom;\r\n params.OperationDateTo = this.State.OperationDateRange.DateTo;\r\n\r\n this.DataSources['Reconcilations'] = new DataSourceCustomAction(\r\n (options: DataLoadOptions) => this.reconciliationEndpoint.ListReconcilationItems(params, options), undefined, undefined, false);\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n const settings = new ToolbarSettings;\r\n settings.IsAllowFilter = true;\r\n settings.GridExtender = this.reconciliationGrid?.G;\r\n settings.IsAllowExport = true;\r\n return settings;\r\n }\r\n\r\n override OnApplyFilter() {\r\n this.LoadGridData();\r\n }\r\n\r\n override OnClearFilter() {\r\n this.InitState();\r\n this.State.ShowBankSideReconciliation = false;\r\n // this.filter.LoadData();\r\n this.LoadGridData();\r\n }\r\n\r\n OnQuickFilterMatchDateRangeChanged() {\r\n this.LoadGridData();\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\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\\r\\n\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n \\r\\n \\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 { EnumSource } from './../enums';\r\nimport { EnumSide } from './../enums';\r\nexport class Reconciliation extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'Reconciliation';\r\n }\r\n \r\n public BookingAccountID: number; \r\n public IsBalanced: boolean; \r\n public Source: EnumSource; \r\n public Type: EnumSide; \r\n public BookingAccountName: string; \r\n public CompanyName: string; \r\n public AccountName: string; \r\n\tpublic CreatedBy: number;\r\n\tpublic CreatedDate: Date;\r\n}\r\n\r\n\r\n\r\n","import { Component, EventEmitter, Output, ViewChild } from '@angular/core';\r\nimport {\r\n ServiceBagServices,\r\n ServiceBagService,\r\n} 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 { DxDataGridComponent } from 'devextreme-angular';\r\nimport { ReconciliationEndpoint } from '../../../_proxy/endpoints/reconciliation.endpoint';\r\nimport { MessageBoxDialogComponent } from '@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\nimport { EnumMessageBoxTypes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { Reconciliation } from '@kraken/_proxy/entities/reconciliation.entity';\r\nimport { formatDate, formatNumber } from 'devextreme/localization';\r\nimport { memoize } from 'lodash';\r\nimport { ExportingEvent } from 'devextreme/ui/data_grid';\r\n\r\nclass State extends BaseState {\r\n GridHasChanges: boolean = false;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-reconciliation-grid',\r\n templateUrl: './reconciliation-grid.component.html',\r\n styleUrls: ['reconciliation-grid.component.scss']\r\n})\r\nexport class ReconciliationGridComponent extends BaseGridComponent {\r\n EnumMessageBoxTypes = EnumMessageBoxTypes;\r\n @ViewChild('grid', { static: false }) dataGrid: DxDataGridComponent;\r\n @Output() reload: EventEmitter = new EventEmitter();\r\n @ViewChild('messageBox') messageBoxDialog: MessageBoxDialogComponent;\r\n\r\n constructor(A: ServiceBagService,\r\n private enpdoint: ReconciliationEndpoint) {\r\n super(A, 'ReconciliationGridComponent', Reconciliation, State);\r\n this.BindHandler('OnDelete');\r\n }\r\n\r\n OnInitialized(e: any) {\r\n e.component.option('scrolling.timeout', 0);\r\n }\r\n\r\n override OnInitComponentFinished() {\r\n super.OnInitComponentFinished();\r\n this.G.grid.columnHidingEnabled = false;\r\n }\r\n\r\n OnDelete(e: any) {\r\n this.messageBoxDialog.ShowDialogShort(() => {\r\n this.Do(this.enpdoint.Delete(e.row.data.EntryID), true, () => this.reload.emit());\r\n });\r\n }\r\n\r\n get IsCompanyColumnHidden(): boolean {\r\n if (!this.DataSource) return false;\r\n return Array.isArray(this.DataSource) && Utils.UniqueBy(this.DataSource, (x) => x.CompanyName).size === 1;\r\n }\r\n\r\n get IsAccountColumnHidden(): boolean {\r\n if (!this.DataSource) return false;\r\n return Array.isArray(this.DataSource) && Utils.UniqueBy(this.DataSource, (x) => x.AccountName).size === 1;\r\n }\r\n\r\n CalculateDateCellValue = memoize((rowData: any) => {\r\n return formatDate(rowData.Date, this.F.DateFormatShort);\r\n });\r\n\r\n CalculateTransactionsCellValue = memoize((rowData: any) => {\r\n let transactions = '';\r\n rowData.Transactions?.forEach(transaction => {\r\n transactions += `${formatNumber(transaction.Amount, this.F.NumberPrice)} ` +\r\n `${formatDate(transaction.Date, this.F.DateFormatShort)} ${transaction.Description}` + '\\n';\r\n });\r\n return transactions;\r\n });\r\n\r\n CalculateForecastOperationsCellValue = memoize((rowData: any) => {\r\n let operations = '';\r\n rowData.ForecastOperations?.forEach(operation => {\r\n operations += `${formatNumber(operation.Amount, this.F.NumberPrice)} ` +\r\n `${formatDate(operation.Date, this.F.DateFormatShort)} ${operation.Description}` + '\\n';\r\n });\r\n return operations;\r\n });\r\n\r\n CalculateAdjustmentDifferenceCellValue = memoize((rowData: any): number => {\r\n\r\n let difference = 0;\r\n\r\n rowData.ForecastOperations?.forEach(forecastOperation => {\r\n difference += forecastOperation.Amount;\r\n });\r\n\r\n rowData.Transactions?.forEach(transaction => {\r\n difference -= transaction.Amount;\r\n });\r\n\r\n return difference;\r\n });\r\n\r\n public onExporting({ component }: ExportingEvent) {\r\n component.columnOption('AdjustmentDifference', 'visible', true);\r\n }\r\n\r\n public onAfterExporting({ component }: ExportingEvent) {\r\n component.columnOption('AdjustmentDifference', 'visible', false);\r\n }\r\n\r\n customizeExcelCell = options => {\r\n const { gridCell, excelCell } = options;\r\n const { rowType, column } = gridCell;\r\n\r\n\r\n if (rowType === 'header') {\r\n if (column.name === 'AdjustmentDifference') {\r\n excelCell._column.width = 22;\r\n }\r\n return;\r\n }\r\n\r\n switch (column.name) {\r\n case 'Transactions': \r\n case 'ForecastOperations': {\r\n excelCell.alignment = {vertical: 'middle', wrapText: true };\r\n break;\r\n }\r\n case 'AdjustmentDifference': {\r\n excelCell.alignment = {vertical: 'middle' };\r\n break;\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
{{forecastOperation.Amount | formatNumberPrice}}{{forecastOperation.Date | formatDateShort}}{{forecastOperation.Description}}
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
{{transaction.Amount | formatNumberPrice}}{{transaction.Date | formatDateShort}}{{transaction.Description}}
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n\";","import { Component, EventEmitter, Output, ViewChild } from '@angular/core';\r\nimport {\r\n ServiceBagServices,\r\n ServiceBagService,\r\n} 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 { DxDataGridComponent } from 'devextreme-angular';\r\nimport { TransactionView } from '../../../_proxy/views/transaction.view';\r\nimport { Transaction } from '@kraken/_proxy/entities/transaction.entity';\r\nimport { memoize } from 'lodash';\r\nimport { formatNumber } from 'devextreme/localization';\r\nimport { CellClickEvent } from 'devextreme/ui/data_grid';\r\nimport { ChequeListDialogComponent } from '@kraken/dialogs/cheque-dialog/list/cheque-list-dialog.component';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-transaction-grid',\r\n templateUrl: './transaction-grid.component.html',\r\n styleUrls: ['./transaction-grid.component.scss']\r\n})\r\nexport class TransactionGridComponent extends BaseGridComponent {\r\n @ViewChild('grid', { static: false }) dataGrid: DxDataGridComponent;\r\n @ViewChild('chequeListDialog') chequeDialog: ChequeListDialogComponent;\r\n @Output() SelectionChanged = new EventEmitter();\r\n\r\n DateSort = 'desc';\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'TransactionGridComponent', Transaction, BaseState);\r\n }\r\n\r\n OnInitialized(e: any) {\r\n e.component.option('scrolling.timeout', 0);\r\n }\r\n\r\n OnCellClicked(event: CellClickEvent) {\r\n if (event.rowType === 'header' && event.column.dataField === 'Date') {\r\n this.DateSort = this.DateSort === 'desc' ? 'asc' : 'desc';\r\n }\r\n }\r\n\r\n getDescription(data: TransactionView) {\r\n return [data.TransactionCategoryName, data.Notes1, data.Notes2].filter(i => !!i);\r\n }\r\n\r\n OnSelectionChanged(event: { selectedRowsData: TransactionView[]; }) {\r\n this.SelectionChanged.emit(event.selectedRowsData);\r\n }\r\n\r\n CalculateCellValue = memoize((col: string) => {\r\n return (data: TransactionView) => {\r\n if (col === 'Description') {\r\n return this.getDescription(data).join(',');\r\n }\r\n\r\n if (col === 'Amount') {\r\n return `${data.Credit > 0 ? data.Credit : data.Debit * -1}`;\r\n }\r\n\r\n if (col === 'Date') {\r\n return data.Date.toDateString();\r\n }\r\n\r\n return data[col];\r\n };\r\n });\r\n\r\n OnCellPrepared({ cellElement, rowType, data, column }) {\r\n if (rowType === 'data' && column.dataField === 'Amount') {\r\n if (data.Credit > 0) {\r\n cellElement.classList.add('credit');\r\n }\r\n\r\n if (data.Debit > 0) {\r\n cellElement.classList.add('debit');\r\n }\r\n }\r\n }\r\n\r\n customHighlightCellTemplate(cellEl, data) {\r\n const { component, displayValue, column } = data;\r\n if (!displayValue) return;\r\n\r\n const searchText = component.option('searchPanel.text');\r\n const value = column.format ? formatNumber(+displayValue, column.format) : displayValue;\r\n\r\n if (!searchText) {\r\n cellEl.innerHTML = value ?? '';\r\n return;\r\n }\r\n\r\n const regExp = searchText.split('').join(',?');\r\n\r\n cellEl.innerHTML = value.replace(new RegExp(regExp), (m) => m ? `${m}` : '');\r\n }\r\n\r\n HasCheques(e) {\r\n return e?.row?.data?.IsChequesExist;\r\n }\r\n\r\n OnGoToCheques = (e) => {\r\n const row = e?.row?.data;\r\n if (!row) return;\r\n\r\n this.chequeDialog.TransactionID = e.row.data.EntryID;\r\n this.chequeDialog.ShowDialogShort(e => { });\r\n };\r\n}","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\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 {\r\n ServiceBagServices,\r\n ServiceBagService,\r\n} from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DxDataGridComponent } from 'devextreme-angular';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { EnumSide } from '../../../_proxy/enums';\r\nimport { ForecastOperationView } from '../../../_proxy/views/forecastoperation.view';\r\nimport { ForecastOperationEndpoint } from '../../../_proxy/endpoints/forecastoperation.endpoint';\r\nimport { Globals } from '../../../_globals';\r\nimport { InputBoxDialogComponent } from '@m4u-angular/ui/dialogs/inputbox-dialog/inputboxdialog.component';\r\nimport { BaseCashflowGridComponent } from '../../../pages/base-cashflow-grid/base-cashflow-grid.component';\r\nimport { ForecastOperation } from '@kraken/_proxy/entities/forecastoperation.entity';\r\nimport { memoize } from 'lodash';\r\nimport { formatNumber } from 'devextreme/localization';\r\nimport { CellClickEvent } from 'devextreme/ui/data_grid';\r\nimport { ContextMenuElement } from '@m4u-angular/base/classes/BaseClasses';\r\n\r\nclass State extends BaseState {\r\n SelectedForecasts: ForecastOperationView[] = [];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-forecast-operation-grid',\r\n templateUrl: './forecast-operation-grid.component.html',\r\n styleUrls: ['./forecast-operation-grid.component.scss']\r\n})\r\nexport class ForecastOperationGridComponent extends BaseCashflowGridComponent {\r\n @ViewChild('grid', { static: false }) dataGrid: DxDataGridComponent;\r\n @Output() SelectionChanged = new EventEmitter();\r\n @Output() reload: EventEmitter = new EventEmitter();\r\n @ViewChild('dateInputDialog') dateInputDialog: InputBoxDialogComponent;\r\n\r\n DateSort = 'desc';\r\n\r\n constructor(A: ServiceBagService, private forecastOperationEndpoint: ForecastOperationEndpoint) {\r\n super(A, 'ForecastOperationGridComponent', ForecastOperation, State);\r\n this.BindHandler('OnEditForecastOperation');\r\n }\r\n\r\n OnSelectionChanged(event: { selectedRowsData: ForecastOperationView[]; }) {\r\n const { selectedRowsData } = event;\r\n this.SelectionChanged.emit(selectedRowsData);\r\n this.State.SelectedForecasts = selectedRowsData;\r\n }\r\n\r\n OnCellClicked(event: CellClickEvent) {\r\n if (event.rowType === 'header' && event.column.dataField === 'ActualDate') {\r\n this.DateSort = this.DateSort === 'desc' ? 'asc' : 'desc';\r\n }\r\n }\r\n\r\n OnInitialized(e: any) {\r\n e.component.option('scrolling.timeout', 0);\r\n }\r\n\r\n getDescription(data: ForecastOperationView) {\r\n return [data.BusinessPartnerName, data.CategoryName, data.Notes1, data.Notes2, data.Reference].filter(i => !!i);\r\n }\r\n\r\n get IsScenarioColumnHidden(): boolean {\r\n if (!this.DataSource) return false;\r\n return Array.isArray(this.DataSource) && Utils.UniqueBy(this.DataSource, (x) => x.ScenarioID).size === 1;\r\n }\r\n\r\n get IsProbalilityLevelColumnHidden(): boolean {\r\n if (!this.DataSource) return false;\r\n return Array.isArray(this.DataSource) && Utils.UniqueBy(this.DataSource, (x) => x.ProbabilityLevelID).size === 1;\r\n }\r\n\r\n GetDate(entity: ForecastOperationView) {\r\n return entity.Date;\r\n }\r\n\r\n CalculateCellValue = memoize((col: string) => {\r\n return (data: ForecastOperationView) => {\r\n if (col === 'Description') {\r\n return this.getDescription(data).join(',');\r\n }\r\n\r\n if (col === 'Amount') {\r\n return `${data.NotReconciledSum}`;\r\n }\r\n\r\n if (col === 'ActualDate') {\r\n return data.Date.toDateString();\r\n }\r\n\r\n return data[col];\r\n };\r\n });\r\n\r\n OnCellPrepared({ cellElement, rowType, data, column }) {\r\n if (rowType === 'data' && column.dataField === 'Amount') {\r\n if (data.Credit && data.Credit !== -999 ) {\r\n cellElement.classList.add('credit');\r\n }\r\n\r\n if (data.Debit && data.Debit !== -999) {\r\n cellElement.classList.add('debit');\r\n }\r\n }\r\n }\r\n\r\n customHighlightCellTemplate(cellEl, data) {\r\n const { component, displayValue, column } = data;\r\n if (!displayValue) return;\r\n\r\n const searchText = component.option('searchPanel.text');\r\n const value = column.format ? formatNumber(+displayValue, column.format) : displayValue;\r\n\r\n if (!searchText) {\r\n cellEl.innerHTML = value ?? '';\r\n return;\r\n }\r\n\r\n const regExp = searchText.split('').join(',?');\r\n\r\n cellEl.innerHTML = value.replace(new RegExp(regExp), (m) => m ? `${m}` : '');\r\n }\r\n\r\n getGroupHeader(groupObj: any) {\r\n // TODO: cashflow\r\n // switch (groupObj.data.key) {\r\n // case EnumCashFlowReportRowType.FutureForecastOperation:\r\n // return this.RC(\"lblFutureForecastOperations\");\r\n // case EnumCashFlowReportRowType.PastForecastOperation:\r\n // return this.RC(\"lblPastForecastOperations\");\r\n // case EnumCashFlowReportRowType.Transaction:\r\n // return this.RC(\"lblTransactions\");\r\n // }\r\n return '';\r\n }\r\n\r\n protected override GetGridRowContextMenu(e?: any): ContextMenuElement[] {\r\n return this.GetMenuItems(e?.row?.data ?? {}, true);\r\n }\r\n\r\n onContextMenuPreparing(e: any) {\r\n if (!e.items) e.items = [];\r\n if (!e.row || e.row.rowType === 'header') return;\r\n\r\n e.items.push(... this.GetMenuItems(e.row.data, false));\r\n }\r\n\r\n private GetMenuItems(data: ForecastOperationView, ignoreMultiselection: boolean = false) {\r\n const entity = { ...data } as ForecastOperationView;\r\n const items = [];\r\n\r\n const params: any = {\r\n OrganizationID: Globals.OrganizationID,\r\n BookingAccountID: entity?.BookingAccountID,\r\n ScenarioID: entity?.ScenarioID,\r\n ProbabilityLevelID: entity?.ProbabilityLevelID,\r\n Date: entity?.Date\r\n };\r\n\r\n const multiSelection = this.State.SelectedForecasts.length > 1;\r\n\r\n if (!multiSelection || ignoreMultiselection) {\r\n //new expense menu item\r\n items.push(this.contextMenuItems.newExpense(params));\r\n\r\n //new income menu item\r\n items.push(this.contextMenuItems.newIncome(params));\r\n\r\n }\r\n\r\n //exclude|include menu item\r\n items.push({\r\n text: entity?.IsExcluded ? this.RC('lblInclude') : this.RC('lblExclude'),\r\n onClick: () => {\r\n const entities = multiSelection && !ignoreMultiselection ? this.State.SelectedForecasts : [entity];\r\n entities.forEach(item => {\r\n item.IsExcluded = !entity?.IsExcluded;\r\n });\r\n this.Do(this.forecastOperationEndpoint.SaveBatch(entities), true, () => {\r\n this.reload.emit();\r\n });\r\n }\r\n });\r\n\r\n if (!multiSelection || ignoreMultiselection) {\r\n //edit menu item\r\n items.push({\r\n text: this.RC('lblEdit'),\r\n onClick: () => {\r\n this.OpenEditForecastOperationModal(entity);\r\n }\r\n });\r\n }\r\n\r\n //delay menu item\r\n items.push({\r\n text: this.RC('lblDelay'),\r\n items: [\r\n {\r\n text: this.RC('lblToday'),\r\n onClick: () => {\r\n const entities = multiSelection && !ignoreMultiselection ? this.State.SelectedForecasts : [entity];\r\n this.onDelayForecastOperation(entities, Globals.Today);\r\n }\r\n },\r\n {\r\n text: `7 ${this.RC('days')}`,\r\n onClick: () => {\r\n const entities = multiSelection && !ignoreMultiselection ? this.State.SelectedForecasts : [entity];\r\n this.onDelayForecastOperation(entities, Globals.SevenDaysAfterDate);\r\n }\r\n },\r\n {\r\n text: `30 ${this.RC('days')}`,\r\n onClick: () => {\r\n const entities = multiSelection && !ignoreMultiselection ? this.State.SelectedForecasts : [entity];\r\n this.onDelayForecastOperation(entities, Globals.ThirtyDaysAfterDate);\r\n }\r\n },\r\n {\r\n text: `90 ${this.RC('days')}`,\r\n onClick: () => {\r\n const entities = multiSelection && !ignoreMultiselection ? this.State.SelectedForecasts : [entity];\r\n this.onDelayForecastOperation(entities, Globals.NinetyDaysAfterDate);\r\n }\r\n },\r\n {\r\n text: this.RC('lblCustom'),\r\n onClick: () => {\r\n this.dateInputDialog.ShowDialogShort((value: Date) => {\r\n const entities = multiSelection && !ignoreMultiselection ? this.State.SelectedForecasts : [entity];\r\n this.onDelayForecastOperation(entities, value);\r\n });\r\n }\r\n }\r\n ]\r\n });\r\n\r\n return items;\r\n }\r\n\r\n OpenEditForecastOperationModal(entity: ForecastOperationView) {\r\n const params = {\r\n BookingAccountID: entity.BookingAccountID,\r\n OrganizationID: Globals.OrganizationID,\r\n Side: entity.Credit ? EnumSide.Income : EnumSide.Expense,\r\n CompanyID: entity.CompanyID,\r\n AccountID: entity.AccoutID\r\n };\r\n this.Navigate([`/pages/forecast-operation/${entity.EntryID}`], params);\r\n }\r\n\r\n onDelayForecastOperation(entities: ForecastOperationView[], value: Date) {\r\n entities.forEach(entity => {\r\n entity.Date = value;\r\n });\r\n this.Do(this.forecastOperationEndpoint.SaveBatch(entities), true, () => {\r\n this.reload.emit();\r\n });\r\n }\r\n\r\n OnEditForecastOperation(e: any) {\r\n const entity = e.row.data as ForecastOperationView;\r\n this.OpenEditForecastOperationModal(entity);\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n {{ GetDate(cell.data) | formatDateShort }}\\r\\n\\r\\n 0\\\">\\r\\n {{ RC('lblTrailedDays', cell.data.TrailedDaysCount) }}\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n {{ cell.data.NotReconciledSum | formatNumberSum }}\\r\\n \\r\\n 0\\\">\\r\\n {{ cell.data.NotReconciledSum | formatNumberSum }}\\r\\n \\r\\n
\\r\\n
\\r\\n ')\\\">\\r\\n
\\r\\n
\\r\\n {{ getGroupHeader(groupObj) }}\\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 { RecurringForecast } from './../entities/recurringforecast.entity';\r\nimport { RecurringForecastRecommendationView } from './../views/recurringforecastrecommendation.view';\r\nimport { ForecastOperation } from './../entities/forecastoperation.entity';\r\nimport { RecurringForecastParams } from './../params/recurringforecast.param';\r\nimport { RecurringForecastSave } from './../entities/recurringforecastsave.entity';\r\nimport { RecurringForecastRecommendationParams } from './../params/recurringforecastrecommendation.param';\r\n@Injectable()\r\nexport class RecurringForecastEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"RecurringForecast\", api);}\r\n\t\r\n\r\n public ListEx(Params: RecurringForecastParams, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListEx', Params, options?.GetLoadOptions() );\r\n }\r\n\r\n public SaveCustom(Params: RecurringForecastSave) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'SaveCustom', Params, undefined );\r\n }\r\n\r\n public Recommendations(Params: RecurringForecastRecommendationParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'Recommendations', Params, undefined );\r\n }\r\n\r\n public GetRelatedOperations(recurringForecastID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetRelatedOperations', {recurringForecastID: recurringForecastID} );\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 { RecurringForecast } from './../entities/recurringforecast.entity';\r\nimport { TransactionCategoryView } from './../views/transactioncategory.view';\r\nexport class RecurringForecastSave extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'RecurringForecastSave';\r\n }\r\n \r\n public Entity: RecurringForecast = new RecurringForecast; \r\n public Transactions: number[]; \r\n public TransactionCategory: TransactionCategoryView = new TransactionCategoryView; \r\n\t\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 { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { ProbabilityLevelEndpoint } from '../../_proxy/endpoints/probabilitylevel.endpoint';\r\nimport { ScenarioEndpoint } from '../../_proxy/endpoints/scenario.endpoint';\r\nimport { EnumIncreaseType, EnumPeriodType, EnumSide } from '../../_proxy/enums';\r\nimport { Globals } from '../../_globals';\r\nimport { BusinessPartnerEndpoint } from '../../_proxy/endpoints/businesspartner.endpoint';\r\nimport { Scenario } from '../../_proxy/entities/scenario.entity';\r\nimport { ProbabilityLevel } from '../../_proxy/entities/probabilitylevel.entity';\r\nimport { ContextMenuElement, ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport DxValidator from 'devextreme/ui/validator';\r\nimport { RecurringForecast } from '../../_proxy/entities/recurringforecast.entity';\r\nimport { RecurringForecastEndpoint } from '../../_proxy/endpoints/recurringforecast.endpoint';\r\nimport { BusinessPartnerListParams } from '../../_proxy/params/businesspartnerlist.param';\r\nimport { DateHelpers } from '@m4u-angular/core/helpers/DateHelpers';\r\nimport { AccessService } from '@kraken/services/access.service';\r\nimport { RecurringForecastSave } from '@kraken/_proxy/entities/recurringforecastsave.entity';\r\nimport { TransactionCategory } from '@kraken/_proxy/entities/transactioncategory.entity';\r\nimport { TransactionCategoryEndpoint } from '@kraken/_proxy/endpoints/transactioncategory.endpoint';\r\nimport { ListTransactionCategoriesParams } from '@kraken/_proxy/params/listtransactioncategories.param';\r\nimport { TransactionCategoryView } from '@kraken/_proxy/views/transactioncategory.view';\r\nimport { ParentCategoryListParams } from '@kraken/_proxy/params/parentcategorylist.param';\r\nimport { ParentCategoryEndpoint } from '@kraken/_proxy/endpoints/parentcategory.endpoint';\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 OrganizationID: number;\r\n AccountID: number;\r\n CompanyID: number;\r\n MinDate: Date;\r\n Scenaries: Scenario[] = [];\r\n ProbabilityLevels: ProbabilityLevel[] = [];\r\n Transactions: number[];\r\n SelectedTransactionCategory: TransactionCategoryView;\r\n TransactionCategoryName: string;\r\n Days: number[] = [];\r\n ParentCategories: any;\r\n TransactionCategoriesSource: TransactionCategoryView[] = [];\r\n TransactionCategories: TransactionCategoryView[] = [];\r\n ParentCategoryId: number;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-recurring-forecast',\r\n templateUrl: './recurring-forecast.component.html',\r\n styleUrls: ['./recurring-forecast.component.scss']\r\n})\r\nexport class RecurringForecastComponent extends BasePageCRUDComponent {\r\n constructor(A: ServiceBagService, public endpoint: RecurringForecastEndpoint,\r\n private scenarioEndpoint: ScenarioEndpoint,\r\n private probabilitylevelEndpoint: ProbabilityLevelEndpoint,\r\n private transactionCategoryEndpoint: TransactionCategoryEndpoint,\r\n private businessPartnerEndpoint: BusinessPartnerEndpoint,\r\n private accessService: AccessService,\r\n private parentCategoryEndpoint: ParentCategoryEndpoint) {\r\n super(A, 'RecurringForecastComponent', RecurringForecast, State, endpoint, EnumPageDisplayModes.Window);\r\n this.BindHandler('validateCategoryAndNotes');\r\n this.BindHandler('validateNotesAndCategory');\r\n }\r\n Side: EnumSide;\r\n fieldValidators: Record = {};\r\n\r\n get Currency(): string {\r\n const bookingAccount = this.DataSources['BookingAccounts']?.Items.find(item => item.EntryID == this.Entity.BookingAccountID);\r\n return !!bookingAccount?.Currency ? (this.LISTITEMX('Currencies', bookingAccount.Currency) as any).Symbol : '';\r\n }\r\n\r\n get IsDebit(): boolean {\r\n return this.Side === EnumSide.Expense;\r\n }\r\n\r\n get showIsFixForEOM(): boolean {\r\n return this.Entity.PeriodType === EnumPeriodType.Monthly;\r\n }\r\n\r\n get IsScheduledDaysType(): boolean {\r\n return this.Entity.PeriodType === EnumPeriodType.ScheduledDays;\r\n }\r\n\r\n override OnInitTitle() {\r\n const titlePrefix = this.RC('lblRecurringForecastOperation');\r\n const sideTitle = this.IsDebit ? this.RC('lblExpense') : this.RC('lblIncome');\r\n return `${titlePrefix} - ${sideTitle}`;\r\n }\r\n\r\n override OnEntityLoaded() {\r\n let i = 1;\r\n this.State.Days = [];\r\n while (i < 8) {\r\n if (this.Entity['IsDayActive' + i]) this.State.Days.push(i);\r\n i++;\r\n }\r\n this.Entity.EditOnlyFutureForecasts = this.QueryParams.EditOnlyFutureForecasts;\r\n }\r\n\r\n override async OnInitComponent() {\r\n this.InitStateFromQuery();\r\n\r\n if (!this.State.OrganizationID) {\r\n if (this.accessService.IsAdmin() && Globals.OrganizationID) this.State.OrganizationID = Globals.OrganizationID;\r\n if (!this.accessService.IsAdmin()) this.State.OrganizationID = this.UserInfo?.OrganizationID;\r\n }\r\n if (!this.State.OrganizationID) return;\r\n\r\n await Promise.all([\r\n this.LoadScenaries(),\r\n this.LoadProbabilityLevels()\r\n ]);\r\n\r\n this.LoadForecastCategories();\r\n this.LoadBusinessPartners();\r\n\r\n this.RefreshEntityOriginal();\r\n if (this.State.Days?.length < 1) {\r\n this.State.Days = [1, 2, 3, 4, 5, 6, 7];\r\n this.State.Days?.forEach(day => {\r\n this.Entity['IsDayActive' + day] = true;\r\n });\r\n }\r\n\r\n this.LoadParentCategories();\r\n }\r\n\r\n protected override OnEntityNew() {\r\n this.Entity.PeriodType = EnumPeriodType.Monthly;\r\n this.Entity.IncreaseType = EnumIncreaseType.None;\r\n this.Entity.IsFixForEOM = false;\r\n this.Entity.PeriodMultiple = 1;\r\n this.Entity.IsActive = true;\r\n }\r\n\r\n override OnInitContextMenus(): ContextMenuElement[] {\r\n if (this.IsAddMode) return undefined;\r\n const menus: ContextMenuElement[] =\r\n [\r\n {\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 return menus;\r\n }\r\n\r\n OnCompanyChanged(company: number) {\r\n this.Entity.BusinessPartnerID = undefined;\r\n if (this.State.SelectedTransactionCategory) {\r\n this.State.SelectedTransactionCategory.CompanyID = company;\r\n }\r\n\r\n this.LoadForecastCategories();\r\n this.LoadBusinessPartners();\r\n this.LoadParentCategories(company);\r\n }\r\n\r\n OnBookingAccountChanged() {\r\n this.LoadForecastCategories();\r\n this.LoadBusinessPartners();\r\n }\r\n\r\n LoadForecastCategories() {\r\n return new Promise((resolve) => {\r\n if (!this.State.OrganizationID) {\r\n return resolve([]);\r\n }\r\n let params = new ListTransactionCategoriesParams();\r\n params.OrganizationID = this.State.OrganizationID;\r\n params.LoadGlobal = true;\r\n params.Companies = this.State.CompanyID ? [this.State.CompanyID] : [];\r\n params.Sides = [this.Side];\r\n\r\n this.Do(this.transactionCategoryEndpoint.ListEx(params, null), false, (response) => {\r\n const newCategory = new TransactionCategoryView();\r\n newCategory.EntryID = -1;\r\n newCategory.CompanyID = this.State.CompanyID;\r\n newCategory.IsActive = true;\r\n newCategory.Name = this.RC('lblNewTransactionCategory');\r\n response.Entities.unshift(newCategory);\r\n\r\n if (this.State.TransactionCategoryName) {\r\n const category = response.Entities.find(e => e.Name === this.State.TransactionCategoryName);\r\n if (category) this.Entity.TransactionCategoryID = category.EntryID;\r\n this.State.TransactionCategoryName = '';\r\n }\r\n\r\n //this.DataSources['TransactionCategories'] = response.Entities;\r\n this.State.TransactionCategoriesSource = response.Entities;\r\n this.State.TransactionCategories = this.State.TransactionCategoriesSource;\r\n\r\n if(!this.IsAddMode && this.Entity?.TransactionCategoryID > 0) {\r\n const selectedCategory = response.Entities.find(c => c.EntryID == this.Entity?.TransactionCategoryID);\r\n this.State.ParentCategoryId = selectedCategory?.ParentCategoryId;\r\n }\r\n\r\n resolve(response.Entities);\r\n });\r\n });\r\n }\r\n\r\n LoadScenaries() {\r\n return new Promise((resolve, reject) => {\r\n this.Do(this.scenarioEndpoint.ListEx(this.State.OrganizationID, false, null), false, (response) => {\r\n this.State.Scenaries = response.Entities;\r\n const defaultScenario = response.Entities.find(scenario => scenario.IsDefault);\r\n if (defaultScenario && !this.Entity.ScenarioID) {\r\n this.Entity.ScenarioID = defaultScenario.EntryID;\r\n }\r\n resolve(true);\r\n }, reject);\r\n });\r\n }\r\n\r\n FilterScenarios() {\r\n this.State.Scenaries = (this.State.Scenaries as Scenario[]).filter(x => x.IsActive);\r\n }\r\n\r\n LoadProbabilityLevels() {\r\n return new Promise((resolve, reject) => {\r\n this.Do(this.probabilitylevelEndpoint.ListEx(this.State.OrganizationID, true, null), false, (response) => {\r\n this.State.ProbabilityLevels = response.Entities;\r\n const defaultProbabilityLevel = response.Entities.find(probabilityLevel => probabilityLevel.IsDefault);\r\n if (defaultProbabilityLevel && !this.Entity.ProbabilityLevelID) {\r\n this.Entity.ProbabilityLevelID = defaultProbabilityLevel.EntryID;\r\n }\r\n\r\n resolve(true);\r\n }, reject);\r\n });\r\n }\r\n\r\n LoadBusinessPartners() {\r\n return new Promise((resolve) => {\r\n const params = new BusinessPartnerListParams;\r\n params.LoadActive = true;\r\n params.Companies = this.State.CompanyID ? [this.State.CompanyID] : [];\r\n params.IncomeExpenseSides = this.Entity.Credit ? [EnumSide.Income] : [EnumSide.Expense];\r\n\r\n this.DataSources['BusinessPartners'] =\r\n new DataSourceCustomAction((options: DataLoadOptions) => this.businessPartnerEndpoint.ListEx(params, options),\r\n () => this.businessPartnerEndpoint.Get(this.Entity.BusinessPartnerID), resolve, false);\r\n });\r\n }\r\n\r\n onValidatorInitialized = (e: any, fieldName: string) => {\r\n this.fieldValidators[fieldName] = e.component;\r\n };\r\n\r\n onFieldValueChanged = (e: any, fieldName: string) => {\r\n if (fieldName === 'Notes1') {\r\n this.fieldValidators.TransactionCategoryID?.validate();\r\n }\r\n\r\n if (fieldName === 'TransactionCategoryID') {\r\n this.fieldValidators.Notes1?.validate();\r\n }\r\n };\r\n\r\n validateNotesAndCategory(e: any) {\r\n return [e.value, this.Entity.TransactionCategoryID].some(Boolean);\r\n }\r\n\r\n validateCategoryAndNotes(e: any) {\r\n return [this.Entity.Notes1, e.value].some(Boolean);\r\n }\r\n\r\n get IsProbabilityLevelHidden() {\r\n return this.State.ProbabilityLevels.length === 1 && this.State.ProbabilityLevels[0].IsDefault;\r\n }\r\n\r\n override OnEntitySaved() {\r\n this.NavigateBack();\r\n }\r\n\r\n OnPeriodMultipleChanged(event: any) {\r\n if (!this.IsUIEvent(event)) return;\r\n this.RecalculateNumberOfRecurrences('count');\r\n }\r\n\r\n OnPeriodTypeChanged(event: any) {\r\n if (!this.IsUIEvent(event)) return;\r\n this.RecalculateNumberOfRecurrences('count');\r\n }\r\n\r\n OnRepeatTimesChanged(event: any) {\r\n if (!this.IsUIEvent(event)) return;\r\n this.RecalculateNumberOfRecurrences('count');\r\n }\r\n\r\n OnStartDateChanged(event: any) {\r\n if (!this.IsUIEvent(event)) return;\r\n this.RecalculateNumberOfRecurrences('count');\r\n }\r\n\r\n OnEndDateChanged(event: any) {\r\n if (!this.IsUIEvent(event)) return;\r\n this.RecalculateNumberOfRecurrences('date');\r\n }\r\n\r\n RecalculateNumberOfRecurrences(type: string) {\r\n if (!this.Entity.StartDate\r\n || !this.Entity.PeriodMultiple\r\n || (!this.Entity.RepeatTimes && !this.Entity.EndDate)\r\n || (this.Entity.EndDate && (this.Entity.StartDate > this.Entity.EndDate))) {\r\n return;\r\n }\r\n\r\n let increaseFunction: ((date: Date, count: number) => Date) | undefined;\r\n\r\n switch (this.Entity.PeriodType) {\r\n case EnumPeriodType.Daily:\r\n increaseFunction = DateHelpers.AddDay;\r\n break;\r\n case EnumPeriodType.Weekly:\r\n increaseFunction = DateHelpers.AddWeek;\r\n break;\r\n case EnumPeriodType.Monthly:\r\n increaseFunction = DateHelpers.AddMonth;\r\n break;\r\n }\r\n\r\n if (!increaseFunction && !this.IsScheduledDaysType) return;\r\n\r\n switch (type) {\r\n case 'date':\r\n const datesCount = this.GetDatesCount(this.Entity.StartDate, this.Entity.EndDate, increaseFunction, this.Entity.PeriodMultiple);\r\n this.Entity.RepeatTimes = datesCount.count;\r\n this.Entity.EndDate = datesCount.realLastDate;\r\n break;\r\n case 'count':\r\n const endDate = this.GetEndDate(increaseFunction);\r\n this.Entity.EndDate = endDate;\r\n break;\r\n }\r\n }\r\n\r\n private GetDatesCount(startDate: Date, stopDate: Date, increaseFunction: (date: Date, count: number) => Date, count: number)\r\n : { count: number, realLastDate: Date; } {\r\n const dateArray = [];\r\n let currentDate = new Date(startDate);\r\n let realLastDate = new Date(startDate);\r\n if (this.Entity.PeriodType === EnumPeriodType.ScheduledDays) {\r\n let count = 0;\r\n while (currentDate <= stopDate) {\r\n if (this.State.Days.includes(currentDate.getDay() + 1)) {\r\n count++;\r\n }\r\n currentDate.setDate(currentDate.getDate() + 1);\r\n }\r\n return { count: count, realLastDate: currentDate };\r\n } else {\r\n while (currentDate <= stopDate) {\r\n dateArray.push(new Date(currentDate));\r\n realLastDate = currentDate;\r\n currentDate = increaseFunction(currentDate, count);\r\n }\r\n return { count: dateArray.length, realLastDate: realLastDate };\r\n }\r\n }\r\n\r\n private GetEndDate(increaseFunction: (date: Date, count: number) => Date): Date {\r\n let currentDate = new Date(this.Entity.StartDate);\r\n let current = 1;\r\n if (this.Entity.PeriodType === EnumPeriodType.ScheduledDays) {\r\n let count = 0;\r\n while (count < this.Entity.RepeatTimes) {\r\n if (this.State.Days.includes(currentDate.getDay() + 1)) {\r\n count++;\r\n }\r\n if (count < this.Entity.RepeatTimes) currentDate.setDate(currentDate.getDate() + 1);\r\n }\r\n } else {\r\n while (current < this.Entity.RepeatTimes) {\r\n currentDate = increaseFunction(currentDate, this.Entity.PeriodMultiple);\r\n current++;\r\n }\r\n }\r\n return currentDate;\r\n }\r\n\r\n OnCustomSave() {\r\n this.ValidateEntity().then(isValid => {\r\n const params = new RecurringForecastSave();\r\n params.Entity = this.Entity;\r\n params.Transactions = this.State.Transactions;\r\n if (this.State.SelectedTransactionCategory && this.State.SelectedTransactionCategory.EntryID === -1) {\r\n params.TransactionCategory = this.State.SelectedTransactionCategory;\r\n }\r\n if (isValid) {\r\n this.IsSaving = true;\r\n\r\n this.Do(this.endpoint.SaveCustom(params), true, () => {\r\n this.RefreshEntityOriginal();\r\n this.ReflectEntitySaved();\r\n }, (response) => {\r\n this.UI.StopMessage(response.ResponseMessage);\r\n this.IsSaving = false;\r\n });\r\n }\r\n });\r\n }\r\n\r\n InitStateFromQuery() {\r\n if (Object.entries(this.QueryParams).length <= 0) return;\r\n const params = this.A.Navigator.GetQueryParams(true);\r\n if (params.OrganizationID) {\r\n this.State.OrganizationID = +params.OrganizationID;\r\n }\r\n\r\n // TODO: cashflow\r\n // if (this.IsAddMode || params.Type == EnumCashFlowReportRowType.FutureForecastOperation) {\r\n // this.State.MinDate = new Date(params.MinDate);\r\n // }\r\n\r\n if (params.Side) {\r\n this.Side = params.Side;\r\n }\r\n\r\n if (params.CompanyID) {\r\n this.State.CompanyID = +params.CompanyID;\r\n }\r\n\r\n if (params.AccountID) {\r\n this.State.AccountID = +params.AccountID;\r\n }\r\n\r\n if (params.BookingAccountID) {\r\n this.Entity.BookingAccountID = +params.BookingAccountID;\r\n }\r\n\r\n if (params.TransactionCategoryID) {\r\n this.Entity.TransactionCategoryID = +params.TransactionCategoryID;\r\n }\r\n\r\n if (params.ScenarioID) {\r\n this.Entity.ScenarioID = +params.ScenarioID;\r\n }\r\n\r\n if (params.ProbabilityLevelID) {\r\n this.Entity.ProbabilityLevelID = +params.ProbabilityLevelID;\r\n }\r\n\r\n if (params.Notes1) {\r\n this.Entity.Notes1 = params.Notes1;\r\n }\r\n\r\n if (params.Notes2) {\r\n this.Entity.Notes2 = params.Notes2;\r\n }\r\n\r\n if (params.BusinessPartnerID) {\r\n this.Entity.BusinessPartnerID = +params.BusinessPartnerID;\r\n }\r\n\r\n if (params.Credit) {\r\n this.Entity.Credit = +params.Credit;\r\n }\r\n\r\n if (params.Debit) {\r\n this.Entity.Debit = +params.Debit;\r\n }\r\n\r\n if (params.PeriodSize) {\r\n this.Entity.PeriodMultiple = +params.PeriodSize;\r\n }\r\n\r\n if (params.PeriodType) {\r\n this.Entity.PeriodType = params.PeriodType;\r\n }\r\n if (params.StartDate) {\r\n this.Entity.StartDate = params.StartDate;\r\n }\r\n\r\n if (params.Transactions) {\r\n this.State.Transactions = params.Transactions;\r\n }\r\n\r\n if (params.TransactionCategoryName) {\r\n this.State.TransactionCategoryName = params.TransactionCategoryName;\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 OnTransactionCategoryChanged(e) {\r\n if (e && e.selectedItem) {\r\n this.State.SelectedTransactionCategory = e.selectedItem;\r\n const selectedTransactionParCat = this.State.SelectedTransactionCategory?.ParentCategoryId;\r\n \r\n this.LoadParentCategories(e.selectedItem?.CompanyID, () => {\r\n if(selectedTransactionParCat > 0 && this.State.ParentCategoryId != selectedTransactionParCat) {\r\n this.State.ParentCategoryId = selectedTransactionParCat;\r\n }\r\n });\r\n } else {\r\n this.State.SelectedTransactionCategory = undefined;\r\n }\r\n }\r\n\r\n OnParentCategoryChanged(e: any) {\r\n if(e?.value) {\r\n this.State.TransactionCategories = this.State.TransactionCategoriesSource\r\n .filter(t => t.ParentCategoryId == e.value || t.EntryID == -1);\r\n \r\n if(this.State.SelectedTransactionCategory?.ParentCategoryId != e.value) {\r\n this.Entity.TransactionCategoryID = undefined;\r\n this.State.SelectedTransactionCategory = undefined;\r\n }\r\n } else {\r\n this.State.TransactionCategories = this.State.TransactionCategoriesSource;\r\n }\r\n }\r\n\r\n OnDailyPeriodTypeChanged() {\r\n let i = 1;\r\n while (i < 8) {\r\n this.Entity['IsDayActive' + i] = this.State.Days.includes(i);\r\n i++;\r\n }\r\n this.RecalculateNumberOfRecurrences('count');\r\n }\r\n\r\n LoadParentCategories(companyID?: number, onLoadAction? : () => void) {\r\n const params = new ParentCategoryListParams();\r\n params.LoadGlobal = true;\r\n params.Companies = companyID > 0 ? [companyID] : [];\r\n this.Do(this.parentCategoryEndpoint.ListEx(params, null), false, (response) => {\r\n\r\n this.State.ParentCategories = new DataSource({\r\n store: new ArrayStore({\r\n data: response.Entities,\r\n key: 'EntryID',\r\n }),\r\n paginate: true,\r\n pageSize: 10\r\n });\r\n\r\n if(onLoadAction) {\r\n onLoadAction();\r\n }\r\n });\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\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 { BaseParamsFilter } from './../entities/baseparamsfilter.entity';\r\nexport class RecurringForecastParams extends BaseParamsFilter {\r\n constructor() {\r\n super();\r\n this.TypeName = 'RecurringForecastParams';\r\n }\r\n \r\n public DateFrom: Date; \r\n public DateTo: Date; \r\n public IsDebitOnly: boolean; \r\n public IsCreditOnly: boolean; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseParamsFilter } from './../entities/baseparamsfilter.entity';\r\nexport class AccountingForecastParams extends BaseParamsFilter {\r\n constructor() {\r\n super();\r\n this.TypeName = 'AccountingForecastParams';\r\n }\r\n \r\n public DateFrom: Date; \r\n public DateTo: Date; \r\n public IsDebitOnly: boolean; \r\n public IsCreditOnly: boolean; \r\n public DataSources: string[]; \r\n public PostingDateFrom: Date; \r\n public PostingDateTo: Date; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { Component, ViewChild } from \"@angular/core\";\r\nimport {\r\n ServiceBagServices,\r\n ServiceBagService,\r\n} from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { BaseState, BaseEntity } from \"@m4u-angular/base/entities/BaseEntities\";\r\nimport { BasePageComponent } from \"@m4u-angular/base/component/BasePageComponent\";\r\nimport { EnumBookingAccountSubtypes, EnumSide } from \"../../../_proxy/enums\";\r\nimport { ToolbarSettings } from \"@m4u-angular/base/classes/BaseClasses\";\r\nimport { Globals } from \"../../../_globals\";\r\nimport { ScreenService } from \"@m4u-angular/core/framework/screen.service\";\r\nimport { RecurringForecast } from \"../../../_proxy/entities/recurringforecast.entity\";\r\nimport { RecurringForecastGridComponent } from \"../recurring-forecast-grid/recurring-forecast-grid.component\";\r\nimport { RecurringForecastParams } from \"../../../_proxy/params/recurringforecast.param\";\r\nimport { RecurringForecastEndpoint } from \"../../../_proxy/endpoints/recurringforecast.endpoint\";\r\nimport { FilterComponent, FilterSettings, FilterValues } from '../../../components/filter/filter.component';\r\nimport { EnumCRUDActions } from \"@m4u-angular/core/framework/sysenums.enum\";\r\nimport { AccountListParams } from \"@kraken/_proxy/params/accountlist.param\";\r\nimport { BookingAccountListParams } from \"@kraken/_proxy/params/bookingaccountlist.param\";\r\nimport { ForecastOperation } from \"@kraken/_proxy/entities/forecastoperation.entity\";\r\nimport { AccountingForecast } from \"@kraken/_proxy/entities/accountingforecast.entity\";\r\nimport { ForecastOperationEndpoint } from \"@kraken/_proxy/endpoints/forecastoperation.endpoint\";\r\nimport { AccountingForecastEndpoint } from \"@kraken/_proxy/endpoints/accountingforecast.endpoint\";\r\nimport { ForecastOperationParams } from \"@kraken/_proxy/params/forecastoperation.param\";\r\nimport { AccountingForecastParams } from \"@kraken/_proxy/params/accountingforecast.param\";\r\nimport { QuickFilterSettings } from \"@kraken/components/quick-filter/quick-filter.component\";\r\nimport { ForecastOperationView } from \"@kraken/_proxy/views/forecastoperation.view\";\r\nimport { CompanyListParams } from \"@kraken/_proxy/params/companylist.param\";\r\nimport { CompanyEndpoint } from \"@kraken/_proxy/endpoints/company.endpoint\";\r\nimport { Company } from \"@kraken/_proxy/entities/company.entity\";\r\nimport { DateRange } from \"@kraken/components/date-range/date-range.component\";\r\n\r\nclass State extends BaseState {\r\n FilterValues: FilterValues;\r\n FilterSettings: FilterSettings;\r\n QuickFilterSettings: QuickFilterSettings;\r\n SortOrder: string = \"desc\";\r\n Side: EnumSide;\r\n RecurringForecasts: RecurringForecast[] = [];\r\n ForecastOperations: ForecastOperation[] = [];\r\n AccountingForecasts: AccountingForecast[] = [];\r\n CurrentTabIndex = 0;\r\n Companies: Company[];\r\n PostingDateRange: DateRange = new DateRange();\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: \"app-recurring-forecast-list\",\r\n templateUrl: \"./recurring-forecast-list.component.html\",\r\n styleUrls: [\"recurring-forecast-list.component.scss\"]\r\n})\r\nexport class RecurringForecastListComponent extends BasePageComponent {\r\n @ViewChild('filter') filter: FilterComponent;\r\n @ViewChild('grid') grid: RecurringForecastGridComponent;\r\n\r\n constructor(\r\n A: ServiceBagService,\r\n private recurringForecastEnpoint: RecurringForecastEndpoint,\r\n private accountingForecastEnpoint: AccountingForecastEndpoint,\r\n private forecastOperationEndpoint: ForecastOperationEndpoint,\r\n private companyEndpoint: CompanyEndpoint,\r\n public screenService: ScreenService,\r\n ) {\r\n super(A, \"RecurringForecastListComponent\", BaseEntity, State);\r\n }\r\n\r\n override OnInitState() {\r\n this.State.FilterSettings = {\r\n Company: { IsVisible: true, IsMultiple: true },\r\n Account: { IsVisible: true, IsMultiple: true, Params: { BookingAccountSubtypes: [EnumBookingAccountSubtypes.Current] } as AccountListParams },\r\n BookingAccount: { IsVisible: true, Params: { BookingAccountSubtypes: [EnumBookingAccountSubtypes.Current] } as BookingAccountListParams },\r\n AccountGroup: { IsVisible: true, IsMultiple: true },\r\n CashflowDataSource: { IsVisible: true, IsMultiple: true, Params: () => ({ dynamicOnly: true }) as any },\r\n IsDatesVisible: true,\r\n IsLoadActiveCashflow: true\r\n } as FilterSettings;\r\n\r\n this.State.QuickFilterSettings = {\r\n Company: { IsVisible: true, IsMultiple: true },\r\n Account: { IsVisible: true, IsMultiple: true, Params: { BookingAccountSubtypes: [EnumBookingAccountSubtypes.Current] } as AccountListParams },\r\n IsDatesVisible: true,\r\n } as QuickFilterSettings;\r\n\r\n this.State.FilterValues ??= {\r\n Date: new Date(Globals.Today.setHours(0, 0, 0)),\r\n DateTo: Globals.ThirtyDaysAfterDate,\r\n DateFrom: Globals.ThirtyDaysAgoDate\r\n } as FilterValues;\r\n\r\n this.State.PostingDateRange = new DateRange();\r\n }\r\n\r\n LoadData() {\r\n switch (this.State.CurrentTabIndex) {\r\n case 0:\r\n this.LoadForecastOperations();\r\n break;\r\n\r\n case 1:\r\n this.LoadRecurringForecasts();\r\n break;\r\n\r\n case 2:\r\n this.LoadAccountingForecasts();\r\n break;\r\n }\r\n\r\n if (Globals.OrganizationID) this.LoadCompanies();\r\n }\r\n\r\n LoadCompanies(){\r\n const params = new CompanyListParams();\r\n params.OrganizationID = Globals.OrganizationID;\r\n params.LoadActive = true;\r\n\r\n this.Do(this.companyEndpoint.ListEx(params, null), false, (response) => {\r\n this.State.Companies = response.Entities;\r\n });\r\n }\r\n\r\n OnTabChange(e) {\r\n this.State.CurrentTabIndex = e.itemData.index;\r\n this.LoadData();\r\n }\r\n\r\n override OnInitComponent() {\r\n this.LoadData();\r\n }\r\n\r\n override OnInitComponentFinished() {\r\n }\r\n\r\n OnOrganizationChanged() {\r\n this.LoadData();\r\n }\r\n\r\n LoadRecurringForecasts() {\r\n if (!Globals.OrganizationID) {\r\n this.State.RecurringForecasts = [];\r\n return;\r\n }\r\n\r\n if (!this.State.FilterValues) this.OnInitState();\r\n\r\n const params = new RecurringForecastParams();\r\n params.OrganizationID = Globals.OrganizationID;\r\n params.Companies = this.State.FilterValues.Company as number[];\r\n params.AccountGroups = this.State.FilterValues.AccountGroup as number[];\r\n params.Accounts = this.State.FilterValues.Account as number[];\r\n params.DateTo = this.State.FilterValues.DateTo;\r\n params.DateFrom = this.State.FilterValues.DateFrom;\r\n params.IsDebitOnly = this.State.Side === EnumSide.Expense;\r\n params.IsCreditOnly = this.State.Side === EnumSide.Income;\r\n params.BookingAccounts = this.State.FilterValues.BookingAccount ? [this.State.FilterValues.BookingAccount as number] : [];\r\n\r\n this.Do(\r\n this.recurringForecastEnpoint.ListEx(params, null),\r\n false,\r\n (response) => {\r\n this.State.RecurringForecasts = response.Entities;\r\n }\r\n );\r\n }\r\n\r\n LoadAccountingForecasts() {\r\n if (!Globals.OrganizationID) {\r\n this.State.AccountingForecasts = [];\r\n return;\r\n }\r\n\r\n if (!this.State.FilterValues) this.OnInitState();\r\n\r\n const params = new AccountingForecastParams();\r\n params.OrganizationID = Globals.OrganizationID;\r\n params.Companies = this.State.FilterValues.Company as number[];\r\n params.AccountGroups = this.State.FilterValues.AccountGroup as number[];\r\n params.Accounts = this.State.FilterValues.Account as number[];\r\n params.DateTo = this.State.FilterValues.DateTo;\r\n params.DateFrom = this.State.FilterValues.DateFrom;\r\n params.IsDebitOnly = this.State.Side === EnumSide.Expense;\r\n params.IsCreditOnly = this.State.Side === EnumSide.Income;\r\n params.BookingAccounts = this.State.FilterValues.BookingAccount ? [this.State.FilterValues.BookingAccount as number] : [];\r\n params.DataSources = this.State.FilterValues.CashflowDataSource as string[];\r\n params.PostingDateFrom = this.State.PostingDateRange.DateFrom;\r\n params.PostingDateTo = this.State.PostingDateRange.DateTo;\r\n\r\n this.Do(\r\n this.accountingForecastEnpoint.ListEx(params, null),\r\n false,\r\n (response) => {\r\n this.State.AccountingForecasts = response.Entities;\r\n }\r\n );\r\n }\r\n\r\n LoadForecastOperations() {\r\n if (!Globals.OrganizationID) {\r\n this.State.ForecastOperations = [];\r\n return;\r\n }\r\n\r\n if (!this.State.FilterValues) this.OnInitState();\r\n\r\n const params = new ForecastOperationParams();\r\n params.OrganizationID = Globals.OrganizationID;\r\n params.Companies = this.State.FilterValues.Company as number[];\r\n params.AccountGroups = this.State.FilterValues.AccountGroup as number[];\r\n params.Accounts = this.State.FilterValues.Account as number[];\r\n params.DateTo = this.State.FilterValues.DateTo;\r\n params.DateFrom = this.State.FilterValues.DateFrom;\r\n params.IsDebitOnly = this.State.Side === EnumSide.Expense;\r\n params.IsCreditOnly = this.State.Side === EnumSide.Income;\r\n params.BookingAccounts = this.State.FilterValues.BookingAccount ? [this.State.FilterValues.BookingAccount as number] : [];\r\n params.IsOneTimeOnly = true;\r\n\r\n this.Do(\r\n this.forecastOperationEndpoint.ListEx(params),\r\n false,\r\n (response) => {\r\n this.State.ForecastOperations = response.Entities;\r\n }\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 settings.IsAllowExport = true;\r\n return settings;\r\n }\r\n\r\n OnAddNewRecurring(event: any) {\r\n const params = this.GetForecastOperationParams(event.itemData.Value == \"expense\" ? EnumSide.Expense : EnumSide.Income);\r\n this.Navigate([\"/pages/recurring-forecast/new\"], params, true);\r\n }\r\n\r\n OnAddNewOneTime(event: any) {\r\n const params = this.GetForecastOperationParams(event.itemData.Value == \"expense\" ? EnumSide.Expense : EnumSide.Income);\r\n this.Navigate([\"/pages/forecast-operation/new\"], params, true);\r\n }\r\n\r\n GetForecastOperationParams(side: EnumSide): any {\r\n const params: any = {\r\n OrganizationID: Globals.OrganizationID,\r\n Side: side,\r\n BookingAccountID: this.State.FilterValues.BookingAccount as number,\r\n\r\n\r\n };\r\n\r\n return params;\r\n }\r\n\r\n protected override OnReadyFilter(): void {\r\n this.LoadData();\r\n }\r\n\r\n override OnApplyFilter() {\r\n this.LoadData();\r\n }\r\n\r\n override OnClearFilter() {\r\n this.InitState();\r\n // this.filter.LoadData();\r\n this.LoadData();\r\n }\r\n\r\n OnQuickFilterChanged() {\r\n this.LoadData();\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n if (ExternalEntityType == RecurringForecast || ExternalEntityType === ForecastOperationView) {\r\n this.LoadData();\r\n }\r\n }\r\n\r\n OnUploadExcel() {\r\n this.Navigate(['/pages/import-forecasts']);\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\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 {\r\n ServiceBagServices,\r\n ServiceBagService,\r\n} 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 { DxDataGridComponent } from 'devextreme-angular';\r\nimport { MessageBoxDialogComponent } from '@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\nimport { EnumMessageBoxTypes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { RecurringForecast } from '../../../_proxy/entities/recurringforecast.entity';\r\nimport { EnumSide } from '../../../_proxy/enums';\r\nimport { RecurringForecastEndpoint } from '../../../_proxy/endpoints/recurringforecast.endpoint';\r\nimport { ContextMenuElement, MessageBoxCustomButton } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { RowClickEvent } from 'devextreme/ui/data_grid';\r\nimport { Globals } from '@kraken/_globals';\r\nimport { DateHelpers } from '@m4u-angular/core/helpers/DateHelpers';\r\n\r\nclass State extends BaseState {\r\n SelectedForecasts: RecurringForecast[];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-recurring-forecast-grid',\r\n templateUrl: './recurring-forecast-grid.component.html',\r\n styleUrls: ['recurring-forecast-grid.component.scss']\r\n})\r\nexport class RecurringForecastGridComponent extends BaseGridComponent {\r\n EnumMessageBoxTypes = EnumMessageBoxTypes;\r\n @ViewChild('grid', { static: false }) dataGrid: DxDataGridComponent;\r\n @Output() reload: EventEmitter = new EventEmitter();\r\n @ViewChild('messageBox') messageBoxDialog: MessageBoxDialogComponent;\r\n @ViewChild('updateBox') updateDialog: MessageBoxDialogComponent;\r\n\r\n EditDialogButtons: MessageBoxCustomButton[] = [\r\n { ButtonID: 1, Text: this.RC('genYes') },\r\n { ButtonID: 2, Text: this.RC('genNo') }\r\n ];\r\n\r\n ConfirmDialogMessage: string;\r\n\r\n constructor(A: ServiceBagService,\r\n private enpdoint: RecurringForecastEndpoint) {\r\n super(A, 'RecurringForecastGridComponent', RecurringForecast, State);\r\n }\r\n\r\n OnInitialized(e: any) {\r\n e.component.option('scrolling.timeout', 0);\r\n }\r\n\r\n override OnInitComponentFinished() {\r\n super.OnInitComponentFinished();\r\n this.G.grid.columnHidingEnabled = false;\r\n }\r\n\r\n OnDelete = (e: any) => {\r\n this.Do(this.enpdoint.GetRelatedOperations(e?.row?.data?.EntryID), false, ({ Entities: forecastOperations }) => {\r\n const relatedReconiliations = forecastOperations.reduce((total, entry) => total + entry.Lines.length, 0);\r\n this.ConfirmDialogMessage = relatedReconiliations > 0 ?\r\n this.RC('msgConfirmDeleteRecurringForecastWithMatches') : this.RC('msgConfirmDeleteRecurringForecast');\r\n this.messageBoxDialog.ShowDialogShort(() => {\r\n this.Do(this.enpdoint.Delete(e?.row?.data?.EntryID), true, () => {\r\n this.reload.emit();\r\n });\r\n });\r\n });\r\n };\r\n\r\n OpenEditForecastOperationModal(entity: RecurringForecast) {\r\n const params: any = {\r\n BookingAccountID: entity.BookingAccountID,\r\n OrganizationID: entity.OrganizationID,\r\n AccountID: entity.AccoutID,\r\n CompanyID: entity.CompanyID,\r\n Side: entity.Credit ? EnumSide.Income : EnumSide.Expense\r\n };\r\n\r\n if (DateHelpers.ToDateOnly(entity.StartDate) < DateHelpers.ToDateOnly(Globals.Today)) {\r\n this.updateDialog.ShowDialogShort((btnId) => {\r\n if (btnId === 1) {\r\n params.EditOnlyFutureForecasts = true;\r\n }\r\n this.Navigate([`/pages/recurring-forecast/${entity.EntryID}`], params);\r\n });\r\n } else {\r\n this.Navigate([`/pages/recurring-forecast/${entity.EntryID}`], params);\r\n }\r\n }\r\n\r\n OnEditForecast = (e: any) => {\r\n const entity = e?.row?.data as RecurringForecast;\r\n if (!entity) return;\r\n\r\n this.OpenEditForecastOperationModal(entity);\r\n };\r\n\r\n OnRowClicked(e: RowClickEvent) {\r\n if (!e.handled && e.rowType === 'data') this.OpenEditForecastOperationModal(e.data);\r\n }\r\n\r\n protected override GetGridRowContextMenu(options?: any): ContextMenuElement[] {\r\n return [{\r\n text: this.RC('titleDelete'),\r\n onClick: () => this.OnDelete(options)\r\n }, {\r\n text: this.RC('lblEdit'),\r\n onClick: () => this.OnEditForecast(options)\r\n }];\r\n }\r\n\r\n OnSelectionChanged(event: { selectedRowsData: RecurringForecast[]; }) {\r\n const { selectedRowsData } = event;\r\n this.State.SelectedForecasts = selectedRowsData;\r\n }\r\n\r\n OnDeleteBatch = (e: any) => {\r\n this.ConfirmDialogMessage = this.RC('msgConfirmDeleteRecurringForecasts');\r\n this.messageBoxDialog.ShowDialogShort(() => {\r\n this.Do(this.enpdoint.DeleteBatch(this.State.SelectedForecasts.map(recod => recod.EntryID)), true, () => {\r\n this.reload.emit();\r\n });\r\n });\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","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\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.Debit | formatNumberSum }}\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n {{ cell.data.Credit | formatNumberSum }}\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n {{ (!data.displayValue || data.displayValue == '')? RC('lblUnknown') : data.displayValue }}\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n 0\\\" Icon=\\\"trash\\\" Mode=\\\"text\\\"\\r\\n (OnClick)=\\\"OnDeleteBatch()\\\">\\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 { BaseParamsFilter } from './../entities/baseparamsfilter.entity';\r\nimport { EnumRecommendationPeriodType } from './../enums';\r\nexport class RecurringForecastRecommendationParams extends BaseParamsFilter {\r\n constructor() {\r\n super();\r\n this.TypeName = 'RecurringForecastRecommendationParams';\r\n }\r\n \r\n public OrganizationID: number; \r\n public RecommendationPeriodTypes: EnumRecommendationPeriodType[]; \r\n public IsDebitOnly: boolean; \r\n public IsCreditOnly: boolean; \r\n public DateFrom: Date; \r\n public DateTo: Date; \r\n\t\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 { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport {\r\n EnumBookingAccountSubtypes,\r\n EnumRecommendationPeriodType,\r\n EnumSide\r\n} from '@kraken/_proxy/enums';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { RecurringForecastEndpoint } from '../../_proxy/endpoints/recurringforecast.endpoint';\r\nimport { RecurringForecastRecommendationParams } from '../../_proxy/params/recurringforecastrecommendation.param';\r\nimport { RecurringForecastRecommendationView } from '../../_proxy/views/recurringforecastrecommendation.view';\r\nimport { RecurringForecastRecommendationGridComponent } from './grid/recurring-forecast-recommendation-grid.component';\r\nimport {\r\n FilterComponent,\r\n FilterSettings,\r\n FilterValues\r\n} from '../../components/filter/filter.component';\r\nimport { Globals } from '../../_globals';\r\nimport { BookingAccountListParams } from '@kraken/_proxy/params/bookingaccountlist.param';\r\nimport { AccountListParams } from '@kraken/_proxy/params/accountlist.param';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { RecurringForecast } from '@kraken/_proxy/entities/recurringforecast.entity';\r\nimport { QuickFilterSettings } from '@kraken/components/quick-filter/quick-filter.component';\r\n\r\nclass State extends BaseState {\r\n FilterValues: FilterValues;\r\n FilterSettings: FilterSettings;\r\n SortOrder: string = 'desc';\r\n GridData: RecurringForecastRecommendationView[] = [];\r\n Side: EnumSide;\r\n RecommendationPeriodTypes: EnumRecommendationPeriodType[];\r\n QuickFilterSettings: QuickFilterSettings;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-recurring-forecast-recommendation',\r\n templateUrl: './recurring-forecast-recommendation.component.html',\r\n styleUrls: ['recurring-forecast-recommendation.component.scss']\r\n})\r\nexport class RecurringForecastRecommendationComponent extends BasePageComponent {\r\n @ViewChild('filter') filter: FilterComponent;\r\n @ViewChild('grid') grid: RecurringForecastRecommendationGridComponent;\r\n\r\n constructor(\r\n A: ServiceBagService,\r\n private recurringForecastEnpoint: RecurringForecastEndpoint,\r\n public screenService: ScreenService\r\n ) {\r\n super(A, 'RecurringForecastRecommendationComponent', BaseEntity, State);\r\n }\r\n\r\n override OnInitState() {\r\n this.State.FilterSettings = {\r\n Company: { IsVisible: true, IsMultiple: true },\r\n Account: {\r\n IsVisible: true,\r\n IsMultiple: true,\r\n Params: {\r\n BookingAccountSubtypes: [EnumBookingAccountSubtypes.Current]\r\n } as AccountListParams\r\n },\r\n BookingAccount: {\r\n IsVisible: true,\r\n Params: {\r\n BookingAccountSubtypes: [EnumBookingAccountSubtypes.Current]\r\n } as BookingAccountListParams\r\n },\r\n AccountGroup: { IsVisible: true, IsMultiple: true },\r\n Side: { IsVisible: true, IsMultiple: false },\r\n IsLoadActiveCashflow: true,\r\n IsDatesVisible: true\r\n } as FilterSettings;\r\n\r\n const dateTo = Globals.Today;\r\n const sixMonthAgo = new Date(dateTo.getFullYear(), dateTo.getMonth() - 6, dateTo.getDate());\r\n\r\n this.State.FilterValues = {\r\n Side: [],\r\n DateFrom: sixMonthAgo,\r\n DateTo: dateTo\r\n } as FilterValues;\r\n\r\n this.State.QuickFilterSettings = {\r\n Company: { IsVisible: true, IsMultiple: true },\r\n Account: {\r\n IsVisible: true,\r\n IsMultiple: true,\r\n Params: {\r\n BookingAccountSubtypes: [EnumBookingAccountSubtypes.Current]\r\n } as AccountListParams\r\n },\r\n BookingAccount: {\r\n IsVisible: true,\r\n Params: {\r\n BookingAccountSubtypes: [EnumBookingAccountSubtypes.Current]\r\n } as BookingAccountListParams\r\n },\r\n IsDatesVisible: true\r\n } as QuickFilterSettings;\r\n\r\n this.State.RecommendationPeriodTypes = [EnumRecommendationPeriodType.Monthly];\r\n }\r\n\r\n protected override OnInitSubtitle(): string {\r\n return this.RC('forecastRecommendationSubtitle');\r\n }\r\n\r\n override OnInitComponent() {\r\n this.LoadGridData();\r\n }\r\n\r\n override OnInitComponentFinished() {\r\n // this.filter.LoadData();\r\n }\r\n\r\n protected OnExternalEntitySaved(\r\n ExternalEntity: BaseEntity,\r\n ExternalEntityType: new () => BaseEntity,\r\n ExternalEntityAction: EnumCRUDActions\r\n ) {\r\n if (ExternalEntityType == RecurringForecast) this.LoadGridData();\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n const settings = new ToolbarSettings();\r\n settings.IsAllowFilter = true;\r\n settings.GridExtender = this.grid?.G;\r\n settings.IsAllowExport = true;\r\n return settings;\r\n }\r\n\r\n OnQuickFilterChanged() {\r\n this.LoadGridData();\r\n }\r\n\r\n override OnApplyFilter() {\r\n this.LoadGridData();\r\n }\r\n\r\n override OnClearFilter() {\r\n this.InitState();\r\n // this.filter.LoadData();\r\n this.LoadGridData();\r\n }\r\n\r\n OnOrganizationChanged() {\r\n this.LoadGridData();\r\n }\r\n\r\n LoadGridData() {\r\n if (!Globals.OrganizationID) {\r\n this.State.GridData = [];\r\n return;\r\n }\r\n\r\n const params = new RecurringForecastRecommendationParams();\r\n params.OrganizationID = Globals.OrganizationID;\r\n params.Companies = this.State.FilterValues.Company as number[];\r\n params.Accounts = this.State.FilterValues.Account as number[];\r\n params.BookingAccounts = this.State.FilterValues.BookingAccount\r\n ? [this.State.FilterValues.BookingAccount as number]\r\n : [];\r\n params.DateFrom = this.State.FilterValues.DateFrom;\r\n params.DateTo = this.State.FilterValues.DateTo;\r\n params.IsCreditOnly = this.State.FilterValues.Side === EnumSide.Income;\r\n params.IsDebitOnly = this.State.FilterValues.Side === EnumSide.Expense;\r\n params.RecommendationPeriodTypes = this.State.RecommendationPeriodTypes;\r\n params.BookingAccountSubtypes = [EnumBookingAccountSubtypes.Current];\r\n\r\n this.Do(this.recurringForecastEnpoint.Recommendations(params), false, response => {\r\n this.State.GridData = response.Entities;\r\n });\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\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 { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DxDataGridComponent } from 'devextreme-angular';\r\nimport { EnumMessageBoxTypes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { RecurringForecastRecommendationView } from '../../../_proxy/views/recurringforecastrecommendation.view';\r\nimport { EnumPeriodType, EnumRecommendationPeriodType, EnumSide } from '../../../_proxy/enums';\r\nimport { DateHelpers } from '@m4u-angular/core/helpers/DateHelpers';\r\nimport { ContextMenuElement } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { FilterService } from '@kraken/services/filter.service';\r\nimport { Company } from '@kraken/_proxy/entities/company.entity';\r\nimport { Subscription } from 'rxjs';\r\nimport { Account } from '@kraken/_proxy/entities/account.entity';\r\nimport { BookingAccount } from '@kraken/_proxy/entities/bookingaccount.entity';\r\nimport { TransactionGroupViewDialogComponent } from '@kraken/pages/transaction-drill-view/transaction-group-view-dialog.component';\r\n\r\nclass State extends BaseState {\r\n RecommendationItem: RecurringForecastRecommendationView;\r\n Companies: Company[];\r\n Accounts: Account[];\r\n BookingAccounts: BookingAccount[];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-recurring-forecast-recommendation-grid',\r\n templateUrl: './recurring-forecast-recommendation-grid.component.html'\r\n})\r\nexport class RecurringForecastRecommendationGridComponent extends BaseGridComponent<\r\n BaseEntity,\r\n State\r\n> {\r\n EnumMessageBoxTypes = EnumMessageBoxTypes;\r\n @ViewChild('grid', { static: false }) dataGrid: DxDataGridComponent;\r\n @ViewChild('detailDialog', { static: false })\r\n recommendationDetailDialog: TransactionGroupViewDialogComponent;\r\n private _subs: Subscription[] = [];\r\n\r\n constructor(A: ServiceBagService, private filterService: FilterService) {\r\n super(A, 'RecurringForecastRecommendationGridComponent', BaseEntity, State);\r\n this.BindHandler('OnShowDetail');\r\n this.BindHandler('OnAddRecurringForecast');\r\n }\r\n\r\n get CurrencySymbol() {\r\n if (!this.State.RecommendationItem) return '';\r\n\r\n // @ts-expect-error LISTITEMX has to be generic\r\n return this.LISTITEMX('Currencies', this.State.RecommendationItem.Currency)?.Symbol;\r\n }\r\n\r\n OnInitialized(e: any) {\r\n e.component.option('scrolling.timeout', 0);\r\n }\r\n\r\n override OnInitComponentFinished() {\r\n super.OnInitComponentFinished();\r\n this.G.grid.columnHidingEnabled = false;\r\n\r\n const sources = this.filterService.Sources('RecurringForecastRecommendationComponent');\r\n if (!sources) return;\r\n\r\n this._subs.push(\r\n sources.CompanyItems$.subscribe(items => {\r\n this.State.Companies = items;\r\n }),\r\n sources.AccountItems$.subscribe(items => {\r\n this.State.Accounts = items;\r\n }),\r\n sources.BookingAccountItems$.subscribe(items => {\r\n this.State.BookingAccounts = items;\r\n })\r\n );\r\n }\r\n\r\n OnShowDetail(e: any) {\r\n const data = e?.row?.data as RecurringForecastRecommendationView;\r\n if (!data) return;\r\n\r\n this.State.RecommendationItem = data;\r\n this.recommendationDetailDialog.Side = data.Side;\r\n this.recommendationDetailDialog.FieldName = 'Notes1';\r\n this.recommendationDetailDialog.FieldValue = data.LastTransaction.Notes1;\r\n this.recommendationDetailDialog.OnInitTitle = () => {\r\n return `${data.Side} - ${data.PeriodSize} ${data.PeriodType} ${data.LastTransaction.Notes1}`;\r\n };\r\n setTimeout(() => {\r\n this.recommendationDetailDialog.ShowDialogShort(({ Amount, Side }) => {\r\n this.GoToAddRecurringForecast(data, { Amount, Side });\r\n });\r\n });\r\n }\r\n\r\n OnAddRecurringForecast(e: any) {\r\n const data = e?.row?.data as RecurringForecastRecommendationView;\r\n if (!data) return;\r\n\r\n this.State.RecommendationItem = data;\r\n this.GoToAddRecurringForecast(data);\r\n }\r\n\r\n GoToAddRecurringForecast(\r\n data: RecurringForecastRecommendationView,\r\n modalData?: { Amount: number; Side: EnumSide }\r\n ) {\r\n const {\r\n OrganizationID,\r\n BookingAccountID,\r\n CompanyID,\r\n AccountID,\r\n PeriodType,\r\n PeriodSize,\r\n RecurringAmount,\r\n LastTransaction,\r\n Transactions\r\n } = data;\r\n const amount = modalData?.Amount ?? RecurringAmount;\r\n const side = modalData?.Side ?? data.Side;\r\n const lastTransactionDate = new Date(LastTransaction.Date);\r\n let increaseFunction = (date: Date, size: number) => date;\r\n\r\n switch (PeriodType) {\r\n case EnumRecommendationPeriodType.Daily:\r\n increaseFunction = DateHelpers.AddDay;\r\n break;\r\n case EnumRecommendationPeriodType.Weekly:\r\n increaseFunction = DateHelpers.AddWeek;\r\n break;\r\n case EnumRecommendationPeriodType.BiWeekly:\r\n increaseFunction = (date: Date, size: number) =>\r\n DateHelpers.AddWeek(date, size * 2);\r\n break;\r\n case EnumRecommendationPeriodType.Monthly:\r\n increaseFunction = DateHelpers.AddMonth;\r\n break;\r\n case EnumRecommendationPeriodType.BiMonthly:\r\n increaseFunction = (date: Date, size: number) =>\r\n DateHelpers.AddMonth(date, size * 2);\r\n break;\r\n case EnumRecommendationPeriodType.Quarterly:\r\n increaseFunction = (date: Date, size: number) =>\r\n DateHelpers.AddMonth(date, size * 4);\r\n break;\r\n }\r\n const startDate = increaseFunction(lastTransactionDate, PeriodSize);\r\n const params: any = {\r\n OrganizationID: OrganizationID,\r\n BookingAccountID: BookingAccountID,\r\n PeriodType: PeriodType,\r\n PeriodSize: PeriodSize,\r\n Credit: side == EnumSide.Income && amount,\r\n Debit: side == EnumSide.Expense && amount,\r\n Side: side,\r\n Notes1: LastTransaction.Notes1,\r\n StartDate: startDate,\r\n Transactions: Transactions.map(t => t.EntryID),\r\n CompanyID,\r\n AccountID\r\n };\r\n\r\n this.Navigate(['/pages/recurring-forecast/new'], params, true);\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n {{ cell.data.LastTransaction.Debit | formatNumberSum }}\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n {{ cell.data.LastTransaction.Credit | formatNumberSum }}\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n\";","import { Component, ViewChild } from '@angular/core';\r\nimport { Globals } from '@kraken/_globals';\r\nimport { ProbabilityLevelEndpoint } from '@kraken/_proxy/endpoints/probabilitylevel.endpoint';\r\nimport { ScenarioEndpoint } from '@kraken/_proxy/endpoints/scenario.endpoint';\r\nimport { ProbabilityLevel } from '@kraken/_proxy/entities/probabilitylevel.entity';\r\nimport { Scenario } from '@kraken/_proxy/entities/scenario.entity';\r\nimport { BookingAccountListParams } from '@kraken/_proxy/params/bookingaccountlist.param';\r\nimport { ForecastOperationView } from '@kraken/_proxy/views/forecastoperation.view';\r\nimport { SelectorSettings } from '@kraken/components/selectors/base-selector.component';\r\nimport { AccessService } from '@kraken/services/access.service';\r\nimport { OrganizationService } from '@kraken/services/organization.service';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseDataResponse, BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { SessionService } from '@m4u-angular/core/framework/session.service';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { DxFileUploaderComponent } from 'devextreme-angular';\r\nimport { of } from 'rxjs';\r\n\r\nclass State extends BaseState {\r\n OrganizationID: number;\r\n AccountID: number;\r\n CompanyID: number;\r\n BookingAccountID: number;\r\n ProbabilityLevelID: number;\r\n ScenarioID: number;\r\n IsSendRefreshEvent = false;\r\n\r\n Scenarios: Scenario[] = [];\r\n ProbabilityLevels: ProbabilityLevel[] = [];\r\n Errors: string[] = [];\r\n\r\n IsFileUploaded: boolean;\r\n IsUploadedWithError: boolean;\r\n UploadingFileInProgress: boolean = false;\r\n UploadingFileProgress: number = 0;\r\n FileStatusMessageEl: string = '';\r\n FileComponentValid: boolean = true;\r\n Files: File[] = [];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n templateUrl: './import-forecasts.component.html',\r\n styleUrls: ['import-forecasts.component.scss']\r\n})\r\nexport class ImportForecastsComponent extends BasePageComponent {\r\n\r\n @ViewChild('fileUploader') fileUploader: DxFileUploaderComponent;\r\n \r\n UploadUrl = `${this.api.GetAPIURL()}/${this.ModuleName}/ImportForecasts/Import?m4u-session=${this.session.SessionID}`;\r\n BookingAccountSettings: SelectorSettings = new SelectorSettings();\r\n\r\n get File() : File {\r\n if(!this.State.Files || this.State.Files.length == 0) {\r\n return undefined;\r\n }\r\n\r\n return this.State.Files[0];\r\n }\r\n\r\n get FileName() : string {\r\n return this.getFileNamePart(0);\r\n }\r\n\r\n get FileExtension() : string {\r\n return this.getFileNamePart(1)?.toLowerCase();\r\n }\r\n\r\n get UploadCustomData() {\r\n return {\r\n CompanyID: this.State.CompanyID,\r\n BookingAccountID: this.State.BookingAccountID,\r\n ProbabilityLevelID: this.State.ProbabilityLevelID,\r\n ScenarioID: this.State.ScenarioID\r\n };\r\n }\r\n\r\n get FileStatusTitle() : string {\r\n if(this.State.IsFileUploaded) {\r\n return this.RC('lblFileUploaded');\r\n }\r\n\r\n return this.RC('titleFile');\r\n }\r\n\r\n get IsScenarioHidden() : boolean {\r\n return this.State.Scenarios.length === 1;\r\n }\r\n\r\n get IsProbabilityLevelHidden() : boolean {\r\n return this.State.ProbabilityLevels.length === 1;\r\n }\r\n\r\n constructor(\r\n A: ServiceBagService,\r\n private api: APIGatewayService,\r\n private scenarioEndpoint: ScenarioEndpoint,\r\n private probabilitylevelEndpoint: ProbabilityLevelEndpoint,\r\n private organizationService: OrganizationService,\r\n private accessService: AccessService,\r\n private session: SessionService) {\r\n super(A, 'ImportForecastsComponent', BaseEntity, State, EnumPageDisplayModes.Window);\r\n }\r\n\r\n public override OnInitComponent() {\r\n const organizationId$ = this.accessService.IsAdmin()?\r\n this.organizationService.Organization$ :\r\n of(Globals.OrganizationID);\r\n \r\n this.RegisterSubscription(\r\n organizationId$.subscribe(organizationId => {\r\n this.State.OrganizationID = organizationId;\r\n\r\n this.LoadScenarios();\r\n this.LoadProbabilityLevels();\r\n })\r\n );\r\n \r\n }\r\n\r\n OnImport() {\r\n if(!this.fileUploader || !this.fileUploader.isValid) {\r\n return;\r\n }\r\n\r\n this.fileUploader.instance.upload();\r\n }\r\n\r\n OnDownloadTemplateClick() {\r\n Utils.DownloadFile('assets/projects/kraken/import-forecasts/ImportForecastsTemplate.xlsx', 'ImportForecastsTemplate.xlsx');\r\n }\r\n\r\n public override OnClose() {\r\n if(this.State.IsSendRefreshEvent) {\r\n this.NotifyEntitySaved(undefined, ForecastOperationView);\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private LoadScenarios() {\r\n this.Do(this.scenarioEndpoint.ListEx(this.State.OrganizationID, true, null), false, (response) => {\r\n this.State.Scenarios = response.Entities;\r\n const defaultScenario = response.Entities.find(scenario => scenario.IsDefault);\r\n if (defaultScenario) {\r\n this.State.ScenarioID = defaultScenario.EntryID;\r\n } else {\r\n this.State.ScenarioID = response.Entities[0]?.EntryID;\r\n }\r\n });\r\n }\r\n\r\n private LoadProbabilityLevels() {\r\n this.Do(this.probabilitylevelEndpoint.ListEx(this.State.OrganizationID, true, null), false, (response) => {\r\n this.State.ProbabilityLevels = response.Entities;\r\n const defaultProbabilityLevel = response.Entities.find(probabilityLevel => probabilityLevel.IsDefault);\r\n if (defaultProbabilityLevel) {\r\n this.State.ProbabilityLevelID = defaultProbabilityLevel.EntryID;\r\n } else {\r\n this.State.ProbabilityLevelID = response.Entities[0]?.EntryID;\r\n }\r\n });\r\n }\r\n \r\n //#region File\r\n OnValueChanged(e) {\r\n this.State.IsFileUploaded = false;\r\n this.State.Errors = [];\r\n\r\n this.State.FileComponentValid = this.isFileComponentValid();\r\n this.State.UploadingFileProgress = 0;\r\n this.State.UploadingFileInProgress = false;\r\n this.State.IsUploadedWithError = false;\r\n this.State.FileStatusMessageEl = this.getFileStatusElement()?.innerHTML;\r\n }\r\n\r\n OnUploadStarted(e) {\r\n this.State.UploadingFileInProgress = true;\r\n }\r\n\r\n OnProgress(e) {\r\n this.State.UploadingFileProgress = Math.floor(e.bytesLoaded * 0.989);\r\n }\r\n\r\n OnUploaded(e) {\r\n this.State.UploadingFileInProgress = false;\r\n const response = JSON.parse(e.request.response) as BaseDataResponse;\r\n this.State.Errors = response.Data;\r\n \r\n if (!response.IsSuccess) {\r\n e.message = response.ResponseMessage;\r\n this.State.IsUploadedWithError = true;\r\n }\r\n\r\n if(!this.State.IsSendRefreshEvent) {\r\n this.State.IsSendRefreshEvent = response.IsSuccess && this.State.Errors.length == 0;\r\n }\r\n\r\n this.updateStatusWithTimeout();\r\n }\r\n\r\n onFilesUploaded(e) {\r\n this.State.IsFileUploaded = true;\r\n }\r\n\r\n onUploadError(e) {\r\n this.updateStatusWithTimeout();\r\n this.State.IsUploadedWithError = true;\r\n this.State.UploadingFileInProgress = false;\r\n }\r\n\r\n OnDeleteFile(e) {\r\n this.State.Files.pop();\r\n }\r\n\r\n // devexpress rises events (onUploadError and OnUploaded) before it updates layout inside of the dx-fileuploader-file-status-message\r\n // so we need some time offset\r\n private updateStatusWithTimeout(timeout: number = 500) {\r\n setTimeout(() => {\r\n this.State.FileStatusMessageEl = this.getFileStatusElement()?.innerHTML;\r\n }, timeout);\r\n }\r\n\r\n private getFileStatusElement() : HTMLElement {\r\n const file = this.getFileComponent();\r\n if(!file || !file['$statusMessage']) {\r\n return undefined;\r\n }\r\n\r\n return file['$statusMessage'][0];\r\n }\r\n\r\n private isFileComponentValid() : boolean {\r\n const file = this.getFileComponent();\r\n\r\n if(!file) {\r\n return false;\r\n }\r\n\r\n return file.isValid();\r\n }\r\n\r\n private getFileComponent() {\r\n if(!this.fileUploader || !this.fileUploader.instance) {\r\n return undefined;\r\n }\r\n \r\n return this.fileUploader.instance['_files'][0];\r\n }\r\n\r\n private getFileNamePart(index: number): string | undefined {\r\n if (!this.File) {\r\n return undefined;\r\n }\r\n\r\n const dotIndex: number = this.File.name.lastIndexOf('.');\r\n if (dotIndex === -1) {\r\n return undefined;\r\n }\r\n\r\n return index === 0 ? this.File.name.substring(0, dotIndex) : this.File.name.substring(dotIndex + 1);\r\n }\r\n //#endregion\r\n}","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
{{ FileStatusTitle }}
\\r\\n
{{FileName}}
\\r\\n
\\r\\n {{FileExtension}}, {{File?.size | fileSize}}\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
0; else uploadedWithNoErrors\\\">\\r\\n
{{ RC('lblErrorsDetected', State.Errors.length) }}
\\r\\n
\\r\\n {{ i + 1 }}. {{ errorMessage }}\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n {{ 'lblNoErrorsFound' | 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 {{ 'lblUploadZoneMainText' | RC:THIS }}\\r\\n
\\r\\n
\\r\\n {{ 'lblUploadZoneLimitationText' | 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\";","import { Component, Input, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-currency-icon',\r\n templateUrl: './currency-icon.component.html',\r\n styleUrls: ['./currency-icon.component.scss']\r\n})\r\nexport class CurrencyIconComponent implements OnInit {\r\n @Input() Currency: string;\r\n @Input() Color: string;\r\n \r\n constructor() { }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n}\r\n","export default \"
\\r\\n
\\r\\n {{Currency}}\\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 { Globals } from '../../../_globals';\r\nimport { BalanceView } from '../../../_proxy/views/balance.view';\r\n\r\n@Component({\r\n selector: 'app-dashboard-total-cards',\r\n templateUrl: './dashboard-total-cards.component.html',\r\n styleUrls: ['./dashboard-total-cards.component.scss']\r\n})\r\nexport class DashboardTotalCardsComponent extends BaseComponent {\r\n\r\n @Input() DashboardTotals: BalanceView[];\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'DashboardTotalCardsComponent', BaseState);\r\n }\r\n\r\n GetTotalCurrencySymbol(total: BalanceView): string {\r\n const currency = this.LISTITEMX('Currencies', total.Currency) as any;\r\n return currency.Symbol;\r\n }\r\n\r\n GetTotalColor(index: number): string {\r\n return index === 0 ? undefined : Globals.DashboardPalette[index - 1 % Globals.DashboardPalette.length];\r\n }\r\n\r\n GetTotalTitle(total: BalanceView, index: number): string {\r\n if (index === 0) return this.RC('lblTotalBalance');\r\n const currencyText = this.LISTITEM('Currencies', total.Currency);\r\n const balanceText = this.RC('lblBalance');\r\n return this.A.Screen.IsRTL()\r\n ? `${balanceText} ב ${currencyText}`\r\n : `${currencyText} ${balanceText}`;\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
{{GetTotalTitle(total, i)}}
\\r\\n
\\r\\n \\r\\n
{{total.BalanceOriginal | formatNumberSum}}
\\r\\n
\\r\\n \\r\\n
{{total.Notes}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\";","import { Component, Input } 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 { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { BalanceDetailDepos } from '@kraken/_proxy/entities/balance.entity';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-balance-report-deposits-details',\r\n templateUrl: './balance-report-deposits-details.component.html',\r\n styleUrls: ['./balance-report-details.component.scss']\r\n})\r\nexport class BalanceReportDepositsDetailsComponent extends BaseGridComponent\r\n{\r\n @Input() Data: any;\r\n @Input() Currency: string;\r\n\r\n constructor(A: ServiceBagService, public screenService: ScreenService)\r\n {\r\n super(A, 'BalanceReportDepositsDetailsComponent', BalanceDetailDepos, BaseState);\r\n this.BindHandler('GetBalanceAmountSummaryDisplayFormat');\r\n }\r\n\r\n GetBalanceAmountSummaryDisplayFormat(e) {\r\n const currencyText = this.Currency ? (this.LISTITEMX('Currencies', this.Currency) as any).Symbol : '';\r\n return `${e.valueText} ${currencyText}`;\r\n }\r\n}\r\n","export default \"\\r\\n \\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.BalanceNominal | formatNumberSum}}
\\r\\n {{Currency || Data.Currency | LookupList:LIST('Currencies'):'Symbol' }}\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
{{cell.data.BalanceActual | formatNumberSum}}
\\r\\n {{Currency || Data.Currency | LookupList:LIST('Currencies'):'Symbol' }}\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n {{Data.BalanceAmount == 0 ? 0 : cell.data.BalanceActual / Data.BalanceAmount * 100 | formatNumberPercent}} %\\r\\n
\\r\\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 { 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 { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { BalanceDetailGuarantees } from '@kraken/_proxy/entities/balance.entity';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-balance-report-guarantee-details',\r\n templateUrl: './balance-report-guarantee-details.component.html',\r\n styleUrls: ['./balance-report-details.component.scss']\r\n})\r\nexport class BalanceReportGuaranteeDetailsComponent extends BaseGridComponent\r\n{\r\n @Input() Data: any;\r\n @Input() Currency: string;\r\n\r\n constructor(A: ServiceBagService, public screenService: ScreenService) {\r\n super(A, 'BalanceReportGuaranteeDetailsComponent', BalanceDetailGuarantees, 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
{{cell.data.BalanceNominal | formatNumberSum}}
\\r\\n {{Currency || Data.Currency | LookupList:LIST('Currencies'):'Symbol' }}\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
{{cell.data.BalanceActual | formatNumberSum}}
\\r\\n {{Currency || Data.Currency | LookupList:LIST('Currencies'):'Symbol' }}\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\";","import { Component, Input } 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 { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { BalanceDetailLoans } from '@kraken/_proxy/entities/balance.entity';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-balance-report-loans-details',\r\n templateUrl: './balance-report-loans-details.component.html',\r\n styleUrls: ['./balance-report-details.component.scss']\r\n})\r\nexport class BalanceReportLoansDetailsComponent extends BaseGridComponent\r\n{\r\n @Input() Data: any;\r\n @Input() Currency: string;\r\n\r\n constructor(A: ServiceBagService, public screenService: ScreenService)\r\n {\r\n super(A, 'BalanceReportLoansDetailsComponent', BalanceDetailLoans, 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
{{cell.data.BalanceNominal | formatNumberSum}}
\\r\\n {{Currency || Data.Currency | LookupList:LIST('Currencies'):'Symbol' }}\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
{{cell.data.BalanceActual | formatNumberSum}}
\\r\\n {{Currency || Data.Currency | LookupList:LIST('Currencies'):'Symbol' }}\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n {{Data.BalanceAmount == 0 ? 0 : cell.data.BalanceActual / Data.BalanceAmount * 100 | formatNumberPercent}} %\\r\\n
\\r\\n
\\r\\n
\\r\\n\";","import { Component, Input } 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 { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { BalanceDetailStocks } from '@kraken/_proxy/entities/balance.entity';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-balance-report-stocks-details',\r\n templateUrl: './balance-report-stocks-details.component.html',\r\n styleUrls: ['./balance-report-details.component.scss']\r\n})\r\nexport class BalanceReportStocksDetailsComponent extends BaseGridComponent\r\n{\r\n @Input() Data: any;\r\n @Input() Currency: string;\r\n\r\n constructor(A: ServiceBagService, public screenService: ScreenService)\r\n {\r\n super(A, 'BalanceReportStocksDetailsComponent', BalanceDetailStocks, 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
{{cell.data.AveragePurchasePrice | formatNumberPrice}}
\\r\\n {{Data.Currency | LookupList:LIST('Currencies'):'Symbol' }}\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
{{cell.data.LastPrice | formatNumberPrice}}
\\r\\n {{Data.Currency | LookupList:LIST('Currencies'):'Symbol' }}\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
{{cell.data.BalanceNominal | formatNumberSum}}
\\r\\n {{Currency | LookupList:LIST('Currencies'):'Symbol' }}\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
{{cell.data.BalanceActual | formatNumberSum}}
\\r\\n {{Currency | LookupList:LIST('Currencies'):'Symbol' }}\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
{{cell.data.BalanceOriginal | formatNumberSum}}
\\r\\n {{cell.data.Currency | LookupList:LIST('Currencies'):'Symbol' }}\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n {{Data.BalanceAmount == 0 ? 0 : cell.data.BalanceActual / Data.BalanceAmount * 100 | formatNumberPercent}} %\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n 0 ? 'positive-amount' : 'negative-amount'\\\">\\r\\n \\r\\n {{cell.data.ChangePercent | abs | formatNumberPercent}} %\\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 { ReplicationView } from './../views/replication.view';\r\nimport { ReplicationEntityError } from './../entities/replication.entity';\r\nimport { ReplicationSummaryResult } from './../entities/replication.entity';\r\nimport { ReplicationListParams } from './../params/replicationlist.param';\r\n@Injectable()\r\nexport class ReplicationEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"Replication\", api);}\r\n\t\r\n\r\n public ListEx(Params: ReplicationListParams, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListEx', Params, options?.GetLoadOptions() );\r\n }\r\n\r\n public GetEntityErrors(ReplicationID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetEntityErrors', {ReplicationID: ReplicationID} );\r\n }\r\n\r\n public GetSummaryResults(ReplicationID: number, bIsShowOnlyFailed: boolean) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetSummaryResults', {ReplicationID: ReplicationID, bIsShowOnlyFailed: bIsShowOnlyFailed} );\r\n }\r\n}\r\n\r\n","import { ReplicationSummaryResult } from '@kraken-proxy/entities/replication.entity';\r\nimport { ReplicationEntityError } from '@kraken-proxy/entities/replication.entity';\r\nimport { ReplicationHistoryGridComponent } from './../replication-history-grid/replication-history-grid.component';\r\nimport { EnumReplicationObjectTypes, EnumReplicationStatuses } from '@kraken-proxy/enums';\r\nimport { ReplicationView } from '@kraken-proxy/views/replication.view';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, ViewChild } from '@angular/core';\r\nimport { ReplicationEndpoint } from '@kraken-proxy/endpoints/replication.endpoint';\r\nimport { ReplicationListParams } from '@kraken-proxy/params/replicationlist.param';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { BaseReportComponent, BaseReportState } from '@kraken/pages/base-report/base-report.component';\r\nimport { FilterSettings } from '@kraken/components/filter/filter.component';\r\n\r\nclass State extends BaseReportState {\r\n Replication: ReplicationView;\r\n SelectedReplications = [];\r\n\r\n Statuses: EnumReplicationStatuses[];\r\n IsOnlyLast: boolean = true;\r\n SnapshotID: number;\r\n ShowFailedObjectOnly: boolean = false;\r\n\r\n EntityErrors: ReplicationEntityError[];\r\n EntityErrorsFiltered: ReplicationEntityError[];\r\n SummaryResults: ReplicationSummaryResult[];\r\n ReplicationObjectTypeId: EnumReplicationObjectTypes;\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-replication-history',\r\n templateUrl: './replication-history.component.html',\r\n styleUrls: ['./replication-history.component.scss']\r\n})\r\nexport class ReplicationHistoryComponent extends BaseReportComponent {\r\n @ViewChild('reportGrid') reportGrid: ReplicationHistoryGridComponent;\r\n\r\n constructor(A: ServiceBagService,\r\n private replicationEndpoint: ReplicationEndpoint) {\r\n super(A, 'ReplicationHistoryComponent', State);\r\n }\r\n\r\n protected override OnGetCustomFilterSettings() {\r\n return {\r\n Company: { IsVisible: true, IsMultiple: true },\r\n IsDatesVisible: true\r\n } as FilterSettings;\r\n }\r\n\r\n override OnInitComponentFinished() {\r\n super.OnInitComponentFinished();\r\n this.OnLoadData();\r\n }\r\n\r\n protected override InitStateFromQuery() {\r\n super.InitStateFromQuery();\r\n if (this.QueryParams.IsOnlyLast) this.State.IsOnlyLast = this.QueryParams.IsOnlyLast;\r\n if (this.QueryParams.ReplicationStatus) this.State.Statuses = [this.QueryParams.ReplicationStatus as EnumReplicationStatuses];\r\n }\r\n\r\n OnSelectReplication(replication: ReplicationView) {\r\n this.SetReplication(replication);\r\n this.InitSummaryResults();\r\n this.InitEntityErrors();\r\n }\r\n\r\n OnLoadData() {\r\n this.SetReplication(undefined);\r\n\r\n const params = this.GetParams();\r\n params.Statuses = this.State.Statuses;\r\n params.IsOnlyLast = this.State.IsOnlyLast;\r\n params.SnapshotID = this.State.SnapshotID;\r\n params.ReplicationObjectTypeId = this.State.ReplicationObjectTypeId;\r\n\r\n this.DataSources['Replications'] = new DataSourceCustomAction((options: DataLoadOptions) =>\r\n this.replicationEndpoint.ListEx(params, options), (value) => this.replicationEndpoint.Get(value), (data) => {\r\n if (!this.State.Replication && data.length > 0) {\r\n this.SetReplication(data[0]);\r\n this.InitSummaryResults();\r\n }else{\r\n this.State.SummaryResults = undefined;\r\n this.State.EntityErrors = undefined;\r\n }\r\n }, false);\r\n }\r\n\r\n OnShowFailedOnlyChanged() {\r\n this.InitSummaryResults();\r\n }\r\n\r\n private InitSummaryResults() {\r\n this.State.SummaryResults = [];\r\n\r\n if (this.State.Replication?.EntryID) {\r\n this.Do(this.replicationEndpoint.GetSummaryResults(this.State.Replication.EntryID, this.State.ShowFailedObjectOnly),\r\n false, (reponse) => {\r\n this.State.SummaryResults = reponse.Entities;\r\n });\r\n }\r\n }\r\n\r\n private InitEntityErrors() {\r\n this.State.EntityErrors = [];\r\n\r\n if (this.State.Replication?.EntryID) {\r\n this.Do(this.replicationEndpoint.GetEntityErrors(this.State.Replication.EntryID), false, (reponse) => {\r\n this.State.EntityErrors = reponse.Entities;\r\n this.State.EntityErrorsFiltered = reponse.Entities;\r\n });\r\n }\r\n }\r\n\r\n private SetReplication(replication: ReplicationView) {\r\n this.State.Replication = replication;\r\n this.State.SelectedReplications = replication ? [replication.EntryID] : [];\r\n }\r\n\r\n public OnErrorObjectTypeChanged(e) {\r\n if (e?.selectedItem?.Value) {\r\n this.State.EntityErrorsFiltered = this.State.EntityErrors?.filter(x => x.ObjectType === e.selectedItem.Value);\r\n } else {\r\n this.State.EntityErrorsFiltered = this.State.EntityErrors;\r\n }\r\n }\r\n\r\n public override OnClearFilter() {\r\n this.State.ReplicationObjectTypeId = undefined;\r\n super.OnClearFilter();\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\";","import { ReplicationView } from './../../../_proxy/views/replication.view';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { Component, Output, EventEmitter, Input } from '@angular/core';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Replication } from '@kraken/_proxy/entities/replication.entity';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-replication-history-grid',\r\n templateUrl: './replication-history-grid.component.html',\r\n styleUrls: ['./replication-history-grid.component.scss']\r\n})\r\nexport class ReplicationHistoryGridComponent extends BaseGridComponent {\r\n\r\n @Input() SelectedReplicationIDs: number[] = [];\r\n @Output() SelectReplication: EventEmitter = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'ReplicationHistoryGridComponent', Replication, BaseState);\r\n }\r\n\r\n OnRowClicked(e) {\r\n this.SelectReplication.emit(e.data);\r\n }\r\n\r\n GetStatusColor(data)\r\n {\r\n switch(data.Status) {\r\n case this.Enums.EnumReplicationStatuses.Success:\r\n return 'green-cyan';\r\n case this.Enums.EnumReplicationStatuses.Exception:\r\n return 'cinnabar';\r\n case this.Enums.EnumReplicationStatuses.NoData:\r\n return 'light-green';\r\n case this.Enums.EnumReplicationStatuses.Initiated:\r\n return 'mango';\r\n case this.Enums.EnumReplicationStatuses.CompanyNotFound:\r\n return 'cinnabar';\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\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { Component } from '@angular/core';\r\nimport { ReplicationEntityError } from '@kraken/_proxy/entities/replication.entity';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-replication-entity-error-history-grid',\r\n templateUrl: './replication-entity-error-history-grid.component.html',\r\n styleUrls: ['./replication-entity-error-history-grid.component.scss']\r\n})\r\nexport class ReplicationEntityErrorHistoryGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'ReplicationEntityErrorHistoryGridComponent', ReplicationEntityError, 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\";","import { SyncStatusEndpoint } from './../../_proxy/endpoints/syncstatus.endpoint';\r\nimport { EnumReplicationStatuses } from './../../_proxy/enums';\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 { BaseEntitiesResponse, BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { SyncStatusReplicationGroupedView } from './../../_proxy/views/syncstatusreplicationgrouped.view';\r\nimport { Globals } from '../../_globals';\r\n\r\nclass State extends BaseState{\r\n VisibleTooltips: any = {};\r\n SyncStatusReplications: SyncStatusReplicationGroupedView[] = [];\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-sync-status-replication',\r\n templateUrl: './sync-status-replication.component.html',\r\n styleUrls: ['./sync-status-replication.component.scss']\r\n})\r\nexport class SyncStatusReplicationComponent extends BasePageComponent {\r\n\r\n constructor(A: ServiceBagService, private syncStatusEndpoint: SyncStatusEndpoint) {\r\n super(A, 'SyncStatusReplicationComponent', BaseEntity, State);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.LoadSyncStatusUploads();\r\n }\r\n\r\n GetTooltipElementID(syncStatusUpload) {\r\n return `replication-status-${syncStatusUpload.OrganizationID}`;\r\n }\r\n\r\n ToggleTooltipVisible(syncStatusUpload) {\r\n this.State.VisibleTooltips[syncStatusUpload.OrganizationID] = !this.State.VisibleTooltips[syncStatusUpload.OrganizationID];\r\n }\r\n\r\n GetFailedCount(row: SyncStatusReplicationGroupedView) {\r\n return row.Statuses.filter(x => x.Status !== EnumReplicationStatuses.NoData && x.Status !== EnumReplicationStatuses.Success\r\n && x.Status !== EnumReplicationStatuses.Initiated)\r\n .reduce((s, p) => s + p.Count, 0);\r\n }\r\n\r\n OnNavigate(e: any, syncStatusReplication: SyncStatusReplicationGroupedView) {\r\n this.Navigate(['pages/replication-history'], { OrganizationID: syncStatusReplication.OrganizationID, ReplicationStatus: e, IsOnlyLast: true }, false, true);\r\n }\r\n\r\n GetColor(e) {\r\n switch(e.data.Status) {\r\n case EnumReplicationStatuses.Success:\r\n return Globals.DashboardPalette[0];\r\n case EnumReplicationStatuses.Initiated:\r\n case EnumReplicationStatuses.NoData:\r\n return 'black';\r\n default:\r\n return Globals.DashboardPalette[2];\r\n }\r\n }\r\n\r\n private LoadSyncStatusUploads() {\r\n this.Do(this.syncStatusEndpoint.ListForReplications(), false, (response: BaseEntitiesResponse) => this.State.SyncStatusReplications = response.Entities);\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
{{syncStatusReplication.LastReplicationDate | formatDate}}
\\r\\n
{{syncStatusReplication.OrganizationName}}
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n {{'msgReplicationStatusError' | 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
\";","import { Component, Input } from '@angular/core';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { formatNumber } from 'devextreme/localization';\r\n\r\nclass State extends BaseState { }\r\n\r\n@Component({\r\n selector: 'base-balance-details-grid',\r\n template: '
'\r\n})\r\nexport class BalanceDetailsReportGridBaseComponent extends BaseGridComponent{\r\n\r\n @Input() IsLoading: boolean = false;\r\n @Input() DisplayCurrency: string;\r\n KeyExpr = ['EntryID', 'LineID'];\r\n\r\n constructor(A: ServiceBagService,\r\n entityType: new () => BaseEntity) {\r\n super(A, 'BalanceDetailsReportGridBase', entityType, State);\r\n this.BindHandler('OnCalculateSummary');\r\n this.BindHandler('GetGroupRowCaption');\r\n this.BindHandler('GetBalanceActualSummaryDisplayFormat');\r\n }\r\n\r\n OnInitialized(e) {\r\n e.component.columnOption(\"command:adaptive\", \"visible\", true);\r\n }\r\n\r\n OnCalculateSummary(e) {\r\n const currencyGroupIndex = this.G.grid.instance.columnOption('Currency', 'groupIndex');\r\n const bookingAccountGroupIndex = this.G.grid.instance.columnOption('BookingAccountName', 'groupIndex');\r\n if (e.name === 'BalanceActual' && (e.groupIndex === currencyGroupIndex || e.groupIndex === bookingAccountGroupIndex)) {\r\n if (e.summaryProcess === 'start') { e.totalValue = 0; }\r\n if (e.summaryProcess === 'calculate') { e.totalValue += e.value; }\r\n }\r\n if (e.name === 'BookingAccountSubType' && e.summaryProcess === 'calculate') { e.totalValue = (this.LISTITEMX('BookingAccountSubTypes', e.value) as any).SortOrder; }\r\n if (e.name === 'Currency' && e.summaryProcess === 'calculate') { e.totalValue = (this.LISTITEMX('Currencies', e.value) as any).SortOrder; }\r\n }\r\n\r\n GetBalanceActualSummaryDisplayFormat(e) {\r\n const currencyText = this.DisplayCurrency ? (this.LISTITEMX('Currencies', this.DisplayCurrency) as any).Symbol : '';\r\n return `${e.valueText} ${currencyText}`;\r\n }\r\n\r\n GetGroupRowCaption(e) {\r\n const summaryItem = e.summaryItems && e.summaryItems[0];\r\n if (!summaryItem || !summaryItem.value || !summaryItem.valueFormat) { return e.displayValue; }\r\n const value = summaryItem.value;\r\n const currencyText = this.DisplayCurrency ? (this.LISTITEMX('Currencies', this.DisplayCurrency) as any).Symbol : '';\r\n return `${e.displayValue} (${formatNumber(value, summaryItem.valueFormat)} ${currencyText || e.displayValue})`;\r\n }\r\n}\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumBankGroups } from './../enums';\r\nimport { EnumMatchingRelationship } from './../enums';\r\nimport { Organization } from './../entities/organization.entity';\r\nexport class BaseClassificationRule extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'BaseClassificationRule';\r\n }\r\n \r\n public OrganizationID: number; \r\n public Name: string; \r\n public Description: string; \r\n public Priority: number; \r\n public BankGroup: EnumBankGroups; \r\n public MaxSum: number; \r\n public MinSum: number; \r\n public IsActive: boolean; \r\n public MatchingRelationship: EnumMatchingRelationship; \r\n public DateFrom: Date; \r\n public DateTo: Date; \r\n public Organization: Organization = new Organization; \r\n\tpublic CreatedBy: number;\r\n\tpublic CreatedDate: Date;\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Organization } from './../entities/organization.entity';\r\nexport class StockCategory extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'StockCategory';\r\n }\r\n \r\n public OrganizationID: number; \r\n public Name: string; \r\n public Description: string; \r\n public IsActive: boolean; \r\n public Organization: Organization = new Organization; \r\n\tpublic CreatedBy: number;\r\n\tpublic CreatedDate: Date;\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCategoryClassificationFieldType, EnumClassificarionRuleMatchType } from './../enums';\r\nexport class BaseClassificationRuleLine extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'BaseClassificationRuleLine';\r\n }\r\n \r\n public MatchData: string; \r\n public FieldType: EnumCategoryClassificationFieldType; \r\n public MatchType: EnumClassificarionRuleMatchType; \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 { BaseClassificationRule } from './../entities/baseclassificationrule.entity';\r\nimport { StockCategory } from './../entities/stockcategory.entity';\r\nimport { EnumBookingAccountStockTypes } from './../enums';\r\nimport { BaseClassificationRuleLine } from './../entities/baseclassificationruleline.entity';\r\nexport class StockClassificationRule extends BaseClassificationRule {\r\n constructor() {\r\n super();\r\n this.TypeName = 'StockClassificationRule';\r\n }\r\n \r\n public CategoryID: number; \r\n public Category: StockCategory = new StockCategory; \r\n public StockType: EnumBookingAccountStockTypes; \r\n public Lines: ClassificationRuleLine[] = []; \r\n\tpublic override CreatedBy: number;\r\n\tpublic override CreatedDate: Date;\r\n}\r\n\r\nexport class ClassificationRuleLine extends BaseClassificationRuleLine {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ClassificationRuleLine';\r\n }\r\n \r\n public LineID: number;\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 { StockCategory } from './../entities/stockcategory.entity';\r\nimport { BaseCategoryListParams } from './../params/basecategorylist.param';\r\n@Injectable()\r\nexport class StockCategoryEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"StockCategory\", api);}\r\n\t\r\n\r\n public ListEx(Params: BaseCategoryListParams, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListEx', Params, options?.GetLoadOptions() );\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 { BaseParamsFilter } from './../entities/baseparamsfilter.entity';\r\nexport class BaseCategoryListParams extends BaseParamsFilter {\r\n constructor() {\r\n super();\r\n this.TypeName = 'BaseCategoryListParams';\r\n }\r\n \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { Component, Input, ViewChild } from '@angular/core';\r\nimport { BalanceDetailStocks } from '@kraken/_proxy/entities/balance.entity';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BalanceDetailsReportGridBaseComponent } from './balance-details-report-grid-base';\r\nimport { RecategorizeDialogComponent } from '@kraken/dialogs/recategorize-dialog/recategorize-dialog.component';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { StockClassificationRule } from '@kraken/_proxy/entities/stockclassificationrule.entity';\r\nimport { StockCategory } from '@kraken/_proxy/entities/stockcategory.entity';\r\nimport { StockCategoryEndpoint } from '@kraken/_proxy/endpoints/stockcategory.endpoint';\r\nimport { BaseCategoryListParams } from '@kraken/_proxy/params/basecategorylist.param';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-balance-stocks-report-grid',\r\n templateUrl: './balance-stocks-report-grid.component.html',\r\n styleUrls: ['./balance-details-report-grid.component.scss']\r\n})\r\nexport class BalanceStocksReportGridComponent extends BalanceDetailsReportGridBaseComponent {\r\n @ViewChild(RecategorizeDialogComponent) recategorizeDialog: RecategorizeDialogComponent;\r\n \r\n Categories: StockCategory[];\r\n\r\n organizationId: number;\r\n @Input() set OrganizationID(value: number) {\r\n if (value && value !== this.organizationId) {\r\n this.organizationId = value;\r\n this.LoadCategories(value);\r\n }\r\n }\r\n \r\n constructor(A: ServiceBagService, public categoryEndpoint: StockCategoryEndpoint) {\r\n super(A, BalanceDetailStocks);\r\n }\r\n\r\n override OnExternalEntitySaved(ExternalEntity: BaseEntity,\r\n ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions): void {\r\n if (ExternalEntityType === StockClassificationRule\r\n ) {\r\n this.LoadCategories(this.organizationId);\r\n }\r\n }\r\n\r\n private LoadCategories(organizationID: number) {\r\n const reqParams = new BaseCategoryListParams();\r\n reqParams.OrganizationID = organizationID;\r\n\r\n this.Do(this.categoryEndpoint.ListEx(reqParams, null), false, response => {\r\n this.Categories = response.Entities;\r\n });\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
{{cell.data.AveragePurchasePrice | formatNumberPrice}}
\\r\\n {{cell.data.Currency | LookupList:LIST('Currencies'):'Symbol' }}\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
{{cell.data.LastPrice | formatNumberPrice}}
\\r\\n {{cell.data.Currency | LookupList:LIST('Currencies'):'Symbol' }}\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n cell.data.BalanceNominal ? 'positive-amount' : 'negative-amount'\\\">\\r\\n {{cell.data.BalanceActual < cell.data.BalanceNominal ? '▼' : '▲' }}\\r\\n {{cell.data.BalanceNominal==0 ? 0 : cell.data.BalanceActual / cell.data.BalanceNominal * 100 - 100 |\\r\\n abs | formatNumberPercent}} %\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
{{cell.data.BalanceNominal | formatNumberSum}}
\\r\\n {{DisplayCurrency | LookupList:LIST('Currencies'):'Symbol' }}\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
{{cell.data.BalanceActual | formatNumberSum}}
\\r\\n {{DisplayCurrency | LookupList:LIST('Currencies'):'Symbol' }}\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
{{cell.data.CurrencyRate | formatNumberRate}}
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
{{cell.data.BalanceOriginal | formatNumberSum}}
\\r\\n {{cell.data.Currency | LookupList:LIST('Currencies'):'Symbol' }}\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n {{GetGroupRowCaption(data)}}\\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 { Loan } from './../entities/loan.entity';\r\nimport { LoanView } from './../views/loan.view';\r\nimport { LoanParams } from './../params/loan.param';\r\n@Injectable()\r\nexport class LoanEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"Loan\", api);}\r\n\t\r\n\r\n public GetLoans(Params: LoanParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'GetLoans', Params, undefined );\r\n }\r\n\r\n public GetRecyclingLoan(RecycleLoanID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetRecyclingLoan', {RecycleLoanID: RecycleLoanID} );\r\n }\r\n\r\n public Recycle(LoanID: number, CreateClosinJE?: boolean) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'Recycle', {LoanID: LoanID, CreateClosinJE: CreateClosinJE} );\r\n }\r\n\r\n public Fund(LoanID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'Fund', {LoanID: LoanID} );\r\n }\r\n\r\n public CancelLastPayment(LoanID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'CancelLastPayment', {LoanID: LoanID} );\r\n }\r\n\r\n public MarkPastPayments(LoanID: number, countOfPayments: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'MarkPastPayments', {LoanID: LoanID, countOfPayments: countOfPayments} );\r\n }\r\n\r\n public Cancel(LoanID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'Cancel', {LoanID: LoanID} );\r\n }\r\n\r\n public Duplicate(LoanID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'Duplicate', {LoanID: LoanID} );\r\n }\r\n\r\n public EndLoan(LoanID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'EndLoan', {LoanID: LoanID} );\r\n }\r\n\r\n public SaveCustom(Entity: Loan, resetPayments: boolean) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'SaveCustom', Entity, {resetPayments: resetPayments} );\r\n }\r\n\r\n public Mark(LoanID: number, IsMarked: boolean) : Observable\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'Mark', {LoanID: LoanID, IsMarked: IsMarked} );\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 { Organization } from './../entities/organization.entity';\r\nexport class LoanCategory extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'LoanCategory';\r\n }\r\n \r\n public OrganizationID: number; \r\n public Name: string; \r\n public Description: string; \r\n public IsActive: boolean; \r\n public Organization: Organization = new Organization; \r\n\tpublic CreatedBy: number;\r\n\tpublic CreatedDate: Date;\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseClassificationRule } from './../entities/baseclassificationrule.entity';\r\nimport { LoanCategory } from './../entities/loancategory.entity';\r\nimport { BaseClassificationRuleLine } from './../entities/baseclassificationruleline.entity';\r\nexport class LoanClassificationRule extends BaseClassificationRule {\r\n constructor() {\r\n super();\r\n this.TypeName = 'LoanClassificationRule';\r\n }\r\n \r\n public CategoryID: number; \r\n public Category: LoanCategory = new LoanCategory; \r\n public Lines: ClassificationRuleLine[] = []; \r\n\tpublic override CreatedBy: number;\r\n\tpublic override CreatedDate: Date;\r\n}\r\n\r\nexport class ClassificationRuleLine extends BaseClassificationRuleLine {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ClassificationRuleLine';\r\n }\r\n \r\n public LineID: number;\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 { LoanCategory } from './../entities/loancategory.entity';\r\nimport { BaseCategoryListParams } from './../params/basecategorylist.param';\r\n@Injectable()\r\nexport class LoanCategoryEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"LoanCategory\", api);}\r\n\t\r\n\r\n public ListEx(Params: BaseCategoryListParams, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListEx', Params, options?.GetLoadOptions() );\r\n }\r\n}\r\n\r\n","import { Component, Input, ViewChild } from '@angular/core';\r\nimport { AccessService } from '@kraken/services/access.service';\r\nimport { LoanEndpoint } from '@kraken/_proxy/endpoints/loan.endpoint';\r\nimport { BalanceDetailLoans } from '@kraken/_proxy/entities/balance.entity';\r\nimport { ContextMenuElement } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { DateHelpers } from '@m4u-angular/core/helpers/DateHelpers';\r\nimport { BookingAccountEndpoint } from '../../../_proxy/endpoints/bookingaccount.endpoint';\r\nimport { EnumBookingAccountSubtypes } from '../../../_proxy/enums';\r\nimport { BalanceDetailsReportGridBaseComponent } from './balance-details-report-grid-base';\r\nimport { BalanceReportParams } from '@kraken/_proxy/params/balancereport.param';\r\nimport { Globals } from '@kraken/_globals';\r\nimport { BalanceEndpoint } from '@kraken/_proxy/endpoints/balance.endpoint';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { RecategorizeDialogComponent } from '@kraken/dialogs/recategorize-dialog/recategorize-dialog.component';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { LoanClassificationRule } from '@kraken/_proxy/entities/loanclassificationrule.entity';\r\nimport { BaseCategoryListParams } from '@kraken/_proxy/params/basecategorylist.param';\r\nimport { LoanCategoryEndpoint } from '@kraken/_proxy/endpoints/loancategory.endpoint';\r\nimport { LoanCategory } from '@kraken/_proxy/entities/loancategory.entity';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-balance-loans-report-grid',\r\n templateUrl: './balance-loans-report-grid.component.html',\r\n styleUrls: ['./balance-details-report-grid.component.scss']\r\n})\r\nexport class BalanceLoansReportGridComponent extends BalanceDetailsReportGridBaseComponent {\r\n @ViewChild(RecategorizeDialogComponent) recategorizeDialog: RecategorizeDialogComponent;\r\n\r\n Categories: LoanCategory[];\r\n\r\n organizationId: number;\r\n @Input() set OrganizationID(value: number) {\r\n if (value && value !== this.organizationId) {\r\n this.organizationId = value;\r\n this.LoadCategories(value);\r\n }\r\n }\r\n \r\n constructor(A: ServiceBagService,\r\n private bookingAccountEndpoint: BookingAccountEndpoint,\r\n private loanEndpoint: LoanEndpoint,\r\n private balanceEndpoint: BalanceEndpoint,\r\n public categoryEndpoint: LoanCategoryEndpoint,\r\n private accessService: AccessService) {\r\n super(A, BalanceDetailLoans);\r\n this.BindHandler('OnGoToCreateLoan');\r\n }\r\n BalancePopupVisible: boolean;\r\n CurrentBalance: number;\r\n CurrentCurrency: string;\r\n OnGoToCreateLoan(rowData) {\r\n const { Name, InterestRate, StartDate, EndDate, BalanceNominal, AccountID, Currency, Reference, UniqueLoanID } = rowData;\r\n const numberOfPayments = StartDate && EndDate ? DateHelpers.DiffInMonthes(StartDate, EndDate) : undefined;\r\n this.Do(this.bookingAccountEndpoint.GetBookingAccounts(AccountID, EnumBookingAccountSubtypes.Loans), false, (response) => {\r\n const bookingAccount = response.Entities.find(item => item.Currency === Currency);\r\n const openNewLoanParams = {\r\n AccountID: AccountID,\r\n BookingAccountID: bookingAccount?.EntryID,\r\n Name: Name,\r\n InterestRate: InterestRate,\r\n NumberOfPayments: numberOfPayments,\r\n StartDate: StartDate,\r\n BankReferenceNumber: Reference,\r\n Amount: Math.abs(BalanceNominal),\r\n UniqueLoanID: UniqueLoanID\r\n };\r\n ///create new \r\n this.Navigate(['/pages/loan/new'], openNewLoanParams);\r\n });\r\n }\r\n\r\n OnGoToExistLoan(rowData) {\r\n this.Navigate(['/pages/loan', rowData.LoanByUniqueId]);\r\n }\r\n\r\n\r\n OnGoToPaymentsSchedule(rowData) {\r\n if (!rowData) return;\r\n\r\n const { EntryID, LineID } = rowData;\r\n\r\n this.Navigate(['/pages/loan-payments-schedule'], { BalanceID: EntryID, LineID });\r\n }\r\n\r\n protected override GetGridRowContextMenu(options?: any): ContextMenuElement[] {\r\n const items: any = [];\r\n const rowData = options?.data;\r\n\r\n if (this.accessService.IsAllowLoans()) {\r\n if (rowData?.LoanByUniqueId) {\r\n items.push({\r\n text: this.RC('btnShowLoan'),\r\n onClick: () => this.OnGoToExistLoan(rowData)\r\n });\r\n } else {\r\n items.push({\r\n text: this.RC('btnCreateLoan'),\r\n onClick: () => this.OnGoToCreateLoan(rowData)\r\n });\r\n }\r\n }\r\n\r\n if (this.accessService.IsAllowLoans() || this.accessService.IsAllowCashflow() && this.accessService.IsAllowAdvancedReports()) {\r\n if (rowData?.IsSchedulePaymentsExist) {\r\n items.push({\r\n text: this.RC('btnPaymentsSchedule'),\r\n onClick: () => this.OnGoToPaymentsSchedule(rowData)\r\n });\r\n }\r\n }\r\n\r\n if (this.accessService.IsAllowAdvancedReports()) {\r\n items.push({\r\n text: this.RC('lblCurrentBalance'),\r\n visible: true,\r\n onClick: () => this.ShowCurrentBalance(options.data)\r\n });\r\n }\r\n\r\n return items;\r\n }\r\n\r\n ShowCurrentBalance(data: any) {\r\n\r\n this.Do(this.bookingAccountEndpoint.GetBookingAccounts(data.AccountID, EnumBookingAccountSubtypes.Current), false, (response) => {\r\n const bookingAccount = response.Entities.find(item => item.Currency === data.Currency);\r\n if (!bookingAccount) {\r\n this.CurrentBalance = 0;\r\n this.CurrentCurrency = (this.LISTITEMX('Currencies', data.Currency) as any).Symbol;\r\n this.BalancePopupVisible = true;\r\n return;\r\n }\r\n const params = new BalanceReportParams();\r\n params.OrganizationID = Globals.OrganizationID;\r\n params.BookingAccounts = [bookingAccount.EntryID];\r\n\r\n this.Do(this.balanceEndpoint.ListForBalanceReport(params), false, ({ Entities }) => {\r\n const [entity] = Entities;\r\n this.CurrentBalance = entity ? entity.BalanceNominal : 0;\r\n this.CurrentCurrency = (this.LISTITEMX('Currencies', entity.Currency) as any).Symbol;\r\n this.BalancePopupVisible = true;\r\n });\r\n });\r\n\r\n\r\n\r\n }\r\n\r\n override OnExternalEntitySaved(ExternalEntity: BaseEntity,\r\n ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions): void {\r\n if (ExternalEntityType === LoanClassificationRule\r\n ) {\r\n this.LoadCategories(this.organizationId);\r\n }\r\n }\r\n\r\n private LoadCategories(organizationID: number) {\r\n const reqParams = new BaseCategoryListParams();\r\n reqParams.OrganizationID = organizationID;\r\n\r\n this.Do(this.categoryEndpoint.ListEx(reqParams, null), false, response => {\r\n this.Categories = response.Entities;\r\n });\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\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.BalanceNominal | formatNumberSum}}
\\r\\n {{DisplayCurrency || cell.data.Currency |\\r\\n LookupList:LIST('Currencies'):'Symbol' }}\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
{{cell.data.BalanceActual | formatNumberSum}}
\\r\\n {{DisplayCurrency || cell.data.Currency |\\r\\n LookupList:LIST('Currencies'):'Symbol' }}\\r\\n {{cell.data.Notes ? ' (' + cell.data.Notes + ') ' : ''}}\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
{{cell.data.CurrencyRate | formatNumberRate}}
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
{{cell.data.BalanceOriginal | formatNumberSum}}
\\r\\n {{cell.data.Currency | LookupList:LIST('Currencies'):'Symbol' }}\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n {{GetGroupRowCaption(data)}}\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n
\\r\\n {{ CurrentBalance | formatPriceWithCurrency: CurrentCurrency: true }}\\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 { BaseParamsFilter } from './../entities/baseparamsfilter.entity';\r\nexport class DepositCategoryListParams extends BaseParamsFilter {\r\n constructor() {\r\n super();\r\n this.TypeName = 'DepositCategoryListParams';\r\n }\r\n \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 { DepositCategory } from './../entities/depositcategory.entity';\r\nimport { BaseCategoryListParams } from './../params/basecategorylist.param';\r\n@Injectable()\r\nexport class DepositCategoryEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"DepositCategory\", api);}\r\n\t\r\n\r\n public ListEx(Params: BaseCategoryListParams, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListEx', Params, options?.GetLoadOptions() );\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 { Organization } from './../entities/organization.entity';\r\nexport class DepositCategory extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'DepositCategory';\r\n }\r\n \r\n public OrganizationID: number; \r\n public Name: string; \r\n public Description: string; \r\n public IsActive: boolean; \r\n public Organization: Organization = new Organization; \r\n\tpublic CreatedBy: number;\r\n\tpublic CreatedDate: Date;\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseClassificationRule } from './../entities/baseclassificationrule.entity';\r\nimport { DepositCategory } from './../entities/depositcategory.entity';\r\nimport { EnumBookingAccountDepositTypes } from './../enums';\r\nimport { BaseClassificationRuleLine } from './../entities/baseclassificationruleline.entity';\r\nexport class DepositClassificationRule extends BaseClassificationRule {\r\n constructor() {\r\n super();\r\n this.TypeName = 'DepositClassificationRule';\r\n }\r\n \r\n public CategoryID: number; \r\n public Category: DepositCategory = new DepositCategory; \r\n public DepType: EnumBookingAccountDepositTypes; \r\n public Lines: ClassificationRuleLine[] = []; \r\n\tpublic override CreatedBy: number;\r\n\tpublic override CreatedDate: Date;\r\n}\r\n\r\nexport class ClassificationRuleLine extends BaseClassificationRuleLine {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ClassificationRuleLine';\r\n }\r\n \r\n public LineID: number;\r\n}\r\n\r\n\r\n","import { Component, Input } from '@angular/core';\r\nimport { BalanceDetailDepos } from '@kraken/_proxy/entities/balance.entity';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BalanceDetailsReportGridBaseComponent } from './balance-details-report-grid-base';\r\nimport { DepositCategoryListParams } from '@kraken/_proxy/params/depositcategorylist.param';\r\nimport { DepositCategoryEndpoint } from '@kraken/_proxy/endpoints/depositcategory.endpoint';\r\nimport { DepositCategory } from '@kraken/_proxy/entities/depositcategory.entity';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { DepositClassificationRule } from '@kraken/_proxy/entities/depositclassificationrule.entity';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-balance-deposits-report-grid',\r\n templateUrl: './balance-deposits-report-grid.component.html',\r\n styleUrls: ['./balance-details-report-grid.component.scss']\r\n})\r\nexport class BalanceDepositsReportGridComponent extends BalanceDetailsReportGridBaseComponent {\r\n\r\n Categories: DepositCategory[];\r\n\r\n organizationId: number;\r\n\r\n @Input() IsShowProfit: boolean = false;\r\n @Input() set OrganizationID(value: number) {\r\n if (value && value !== this.organizationId) {\r\n this.organizationId = value;\r\n this.LoadCategories(value);\r\n }\r\n }\r\n\r\n constructor(A: ServiceBagService, public categoryEndpoint: DepositCategoryEndpoint) {\r\n super(A, BalanceDetailDepos);\r\n }\r\n\r\n override OnExternalEntitySaved(ExternalEntity: BaseEntity,\r\n ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions): void {\r\n if (ExternalEntityType === DepositClassificationRule\r\n ) {\r\n this.LoadCategories(this.organizationId);\r\n }\r\n }\r\n\r\n private LoadCategories(organizationID: number) {\r\n const reqParams = new DepositCategoryListParams();\r\n reqParams.OrganizationID = organizationID;\r\n\r\n this.Do(this.categoryEndpoint.ListEx(reqParams, null), false, response => {\r\n this.Categories = response.Entities;\r\n });\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
{{cell.data.BalanceNominal | formatNumberSum}}
\\r\\n {{DisplayCurrency | LookupList:LIST('Currencies'):'Symbol' }}\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
{{cell.data.BalanceActual | formatNumberSum}}
\\r\\n {{DisplayCurrency | LookupList:LIST('Currencies'):'Symbol' }}\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
{{cell.data.CurrencyRate | formatNumberRate}}
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
{{cell.data.BalanceOriginal | formatNumberSum}}
\\r\\n {{cell.data.Currency | LookupList:LIST('Currencies'):'Symbol' }}\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
{{cell.data.ProfitSum | formatNumberSum}}
\\r\\n {{cell.data.Currency | LookupList:LIST('Currencies'):'Symbol' }}\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n {{GetGroupRowCaption(data)}}\\r\\n
\\r\\n
\";","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Organization } from './../entities/organization.entity';\r\nexport class GuaranteeCategory extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'GuaranteeCategory';\r\n }\r\n \r\n public OrganizationID: number; \r\n public Name: string; \r\n public Description: string; \r\n public IsActive: boolean; \r\n public Organization: Organization = new Organization; \r\n\tpublic CreatedBy: number;\r\n\tpublic CreatedDate: Date;\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseClassificationRule } from './../entities/baseclassificationrule.entity';\r\nimport { GuaranteeCategory } from './../entities/guaranteecategory.entity';\r\nimport { BaseClassificationRuleLine } from './../entities/baseclassificationruleline.entity';\r\nexport class GuaranteeClassificationRule extends BaseClassificationRule {\r\n constructor() {\r\n super();\r\n this.TypeName = 'GuaranteeClassificationRule';\r\n }\r\n \r\n public CategoryID: number; \r\n public Category: GuaranteeCategory = new GuaranteeCategory; \r\n public Lines: ClassificationRuleLine[] = []; \r\n\tpublic override CreatedBy: number;\r\n\tpublic override CreatedDate: Date;\r\n}\r\n\r\nexport class ClassificationRuleLine extends BaseClassificationRuleLine {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ClassificationRuleLine';\r\n }\r\n \r\n public LineID: number;\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 { GuaranteeCategory } from './../entities/guaranteecategory.entity';\r\nimport { BaseCategoryListParams } from './../params/basecategorylist.param';\r\n@Injectable()\r\nexport class GuaranteeCategoryEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"GuaranteeCategory\", api);}\r\n\t\r\n\r\n public ListEx(Params: BaseCategoryListParams, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListEx', Params, options?.GetLoadOptions() );\r\n }\r\n}\r\n\r\n","import { Component, Input, ViewChild } from '@angular/core';\r\nimport { BalanceDetailGuarantees } from '@kraken/_proxy/entities/balance.entity';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BalanceDetailsReportGridBaseComponent } from './balance-details-report-grid-base';\r\nimport { RecategorizeDialogComponent } from '@kraken/dialogs/recategorize-dialog/recategorize-dialog.component';\r\nimport { GuaranteeCategory } from '@kraken/_proxy/entities/guaranteecategory.entity';\r\nimport { GuaranteeClassificationRule } from '@kraken/_proxy/entities/guaranteeclassificationrule.entity';\r\nimport { GuaranteeCategoryEndpoint } from '@kraken/_proxy/endpoints/guaranteecategory.endpoint';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseCategoryListParams } from '@kraken/_proxy/params/basecategorylist.param';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-balance-guarantees-report-grid',\r\n templateUrl: './balance-guarantees-report-grid.component.html',\r\n styleUrls: ['./balance-details-report-grid.component.scss']\r\n})\r\nexport class BalanceGuaranteesReportGridComponent extends BalanceDetailsReportGridBaseComponent {\r\n @ViewChild(RecategorizeDialogComponent) recategorizeDialog: RecategorizeDialogComponent;\r\n\r\n Categories: GuaranteeCategory[];\r\n\r\n organizationId: number;\r\n @Input() set OrganizationID(value: number) {\r\n if (value && value !== this.organizationId) {\r\n this.organizationId = value;\r\n this.LoadCategories(value);\r\n }\r\n }\r\n\r\n constructor(A: ServiceBagService, public categoryEndpoint: GuaranteeCategoryEndpoint) {\r\n super(A, BalanceDetailGuarantees);\r\n }\r\n\r\n\r\n override OnExternalEntitySaved(ExternalEntity: BaseEntity,\r\n ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions): void {\r\n if (ExternalEntityType === GuaranteeClassificationRule\r\n ) {\r\n this.LoadCategories(this.organizationId);\r\n }\r\n }\r\n\r\n private LoadCategories(organizationID: number) {\r\n const reqParams = new BaseCategoryListParams();\r\n reqParams.OrganizationID = organizationID;\r\n\r\n this.Do(this.categoryEndpoint.ListEx(reqParams, null), false, response => {\r\n this.Categories = response.Entities;\r\n });\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\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.BalanceNominal | formatNumberSum}}
\\r\\n {{DisplayCurrency | LookupList:LIST('Currencies'):'Symbol' }}\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
{{cell.data.BalanceActual | formatNumberSum}}
\\r\\n {{DisplayCurrency | LookupList:LIST('Currencies'):'Symbol' }}\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
{{cell.data.CurrencyRate | formatNumberRate}}
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
{{cell.data.BalanceOriginal | formatNumberSum}}
\\r\\n {{cell.data.Currency | LookupList:LIST('Currencies'):'Symbol' }}\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n {{GetGroupRowCaption(data)}}\\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 BaseEntityReplication extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'BaseEntityReplication';\r\n }\r\n \r\n public CompanyID: number; \r\n public OriginEntryID: number; \r\n public ReplicationID: number; \r\n public QueueItemID: number; \r\n public IsDeleted: boolean; \r\n public PublicIdentifier: string; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntityReplication } from './../entities/baseentityreplication.entity';\r\nimport { EnumSide } from './../enums';\r\nexport class Payment extends BaseEntityReplication {\r\n constructor() {\r\n super();\r\n this.TypeName = 'Payment';\r\n }\r\n \r\n public IncomeExpenseSide: EnumSide; \r\n public DocumentNumber: number; \r\n public BusinessPartnerID: number; \r\n public LedgerAccountID: number; \r\n public IsPaymentToLedgerAccount: boolean; \r\n public PostingDate: Date; \r\n public Notes: string; \r\n public JournalEntryID: number; \r\n public TotalLocal: number; \r\n public TotalForeign: number; \r\n public TotalSystem: number; \r\n public Currency: string; \r\n public IsLocalCurrency: boolean; \r\n public IsCancelled: boolean; \r\n public PaymentMeansCashes: PaymentMeansCash[] = []; //WRITE ONLY (IgnoreDataMemberRead)\r\n public PaymentMeansWireTransfers: PaymentMeansWireTransfer[] = []; //WRITE ONLY (IgnoreDataMemberRead)\r\n public PaymentMeansCreditCards: PaymentMeansCreditCard[] = []; //WRITE ONLY (IgnoreDataMemberRead)\r\n public PaymentMeansCheques: PaymentMeansCheque[] = []; //WRITE ONLY (IgnoreDataMemberRead)\r\n public PaymentClosedDocuments: PaymentClosedDocument[] = []; //WRITE ONLY (IgnoreDataMemberRead)\r\n\t\r\n}\r\n\r\nexport class PaymentMeansCash extends BaseEntityReplication {\r\n constructor() {\r\n super();\r\n this.TypeName = 'PaymentMeansCash';\r\n }\r\n \r\n public LedgerAccountID: number; \r\n public PaymentDate: Date; \r\n public PaymentSum: number; \r\n public Currency: string; \r\n public IsLocalCurrency: boolean; \r\n public LineID: number;\r\n}\r\nexport class PaymentMeansWireTransfer extends BaseEntityReplication {\r\n constructor() {\r\n super();\r\n this.TypeName = 'PaymentMeansWireTransfer';\r\n }\r\n \r\n public Reference: string; \r\n public LedgerAccountID: number; \r\n public PaymentDate: Date; \r\n public PaymentSum: number; \r\n public Currency: string; \r\n public IsLocalCurrency: boolean; \r\n public LineID: number;\r\n}\r\nexport class PaymentMeansCreditCard extends BaseEntityReplication {\r\n constructor() {\r\n super();\r\n this.TypeName = 'PaymentMeansCreditCard';\r\n }\r\n \r\n public Reference: string; \r\n public LedgerAccountID: number; \r\n public PaymentDate: Date; \r\n public PaymentSum: number; \r\n public Currency: string; \r\n public IsLocalCurrency: boolean; \r\n public LineID: number;\r\n}\r\nexport class PaymentMeansCheque extends BaseEntityReplication {\r\n constructor() {\r\n super();\r\n this.TypeName = 'PaymentMeansCheque';\r\n }\r\n \r\n public BankCode: string; \r\n public BankBranch: string; \r\n public BankAccountNumber: string; \r\n public ChequeNumber: number; \r\n public LedgerAccountID: number; \r\n public PaymentDate: Date; \r\n public PaymentSum: number; \r\n public Currency: string; \r\n public IsLocalCurrency: boolean; \r\n public LineID: number;\r\n}\r\nexport class PaymentClosedDocument extends BaseEntityReplication {\r\n constructor() {\r\n super();\r\n this.TypeName = 'PaymentClosedDocument';\r\n }\r\n \r\n public DocumentType: number; \r\n public DocumentID: number; \r\n public JournalEntryID: number; \r\n public ClosingSumLocal: number; \r\n public ClosingSumForeign: number; \r\n public ClosingSumSystem: number; \r\n public LineID: number;\r\n}\r\n\r\n\r\n","import { EnumSide } from './../../_proxy/enums';\r\nimport { Payment } from './../../_proxy/entities/payment.entity';\r\nimport { PaymentEndpoint } from './../../_proxy/endpoints/payment.endpoint';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Component } from '@angular/core';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { PaymentClosedDocumentView } from '../../_proxy/views/paymentcloseddocument.view';\r\nimport { PaymentMeansTypeView } from '../../_proxy/views/paymentmeanstype.view';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport {Location} from '@angular/common';\r\n\r\nclass State extends BaseState{\r\n ClosedDocuments: PaymentClosedDocumentView[];\r\n PaymentMeansTypes: PaymentMeansTypeView[];\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 BasePageCRUDComponent {\r\n\r\n constructor(A: ServiceBagService, \r\n private paymentEndpoint: PaymentEndpoint,\r\n private location: Location) {\r\n super(A, 'PaymentComponent', Payment, State, paymentEndpoint);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.LoadClosedDocuments();\r\n this.LoadMeansTypes();\r\n }\r\n\r\n override GetTitle() {\r\n if(!this.Entity.DocumentNumber) return '';\r\n\r\n var title = '';\r\n\r\n if(this.Entity.IncomeExpenseSide === EnumSide.Income) title = this.RC('ttlIncomePayment')\r\n else if (this.Entity.IncomeExpenseSide === EnumSide.Expense) title = this.RC('ttlExpensePayment')\r\n \r\n return title.replace('{0}', this.Entity.DocumentNumber.toString());\r\n }\r\n\r\n //GoToJournalEntry(){\r\n // this.Navigate(['/pages/accounting-journal-entry', this.Entity.JournalEntryID]);\r\n //}\r\n\r\n //GoToBusinessPartner(){\r\n // if(this.Entity.IsPaymentToLedgerAccount) {\r\n // this.Navigate(['/pages/ledger-account', this.Entity.LedgerAccountID]);\r\n // } else {\r\n // this.Navigate(['/pages/business-partner', this.Entity.BusinessPartnerID]);\r\n // }\r\n //}\r\n\r\n GetBusinessPartnerNavPath() {\r\n return this.Entity.IsPaymentToLedgerAccount ? '/pages/ledger-account' : '/pages/business-partner';\r\n }\r\n\r\n GetBusinessPartnerNavEntryID() {\r\n return this.Entity.IsPaymentToLedgerAccount ? this.Entity.LedgerAccountID : this.Entity.BusinessPartnerID;\r\n }\r\n\r\n GetBussinessPartnerLabel() {\r\n return this.Entity && this.Entity.IsPaymentToLedgerAccount ? this.RC('lblAccount') : this.RC('lblBusinessPartnerName');\r\n }\r\n\r\n //override OnGetToolbarSettings() {\r\n // return {\r\n // ShowBackButton: true,\r\n // BackButtonClick: () => this.location.back()\r\n // } as ToolbarSettings;\r\n //}\r\n\r\n private LoadClosedDocuments() {\r\n this.Do(this.paymentEndpoint.GetClosedDocuments(this.EntityEntryID), false, (response) => {\r\n this.State.ClosedDocuments = response.Entities;\r\n })\r\n }\r\n\r\n private LoadMeansTypes() {\r\n this.Do(this.paymentEndpoint.GetPaymentMeansTypes(this.EntityEntryID), false, (response) => {\r\n this.State.PaymentMeansTypes = response.Entities;\r\n })\r\n }\r\n\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { PaymentView } from './../../../_proxy/views/payment.view';\r\nimport { FilterSettings } from './../../../components/filter/filter.component';\r\nimport { PaymentGridComponent } from '../payment-grid/payment-grid.component';\r\nimport { PaymentEndpoint } from './../../../_proxy/endpoints/payment.endpoint';\r\nimport { NavigatorService } from '@m4u-angular/core/framework/navigator.service';\r\nimport { EnumPaymentMeansTypes, EnumSide } from './../../../_proxy/enums';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, ViewChild } from '@angular/core';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { PaymentListParams } from '../../../_proxy/params/paymentlist.param';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { Globals } from '../../../_globals';\r\nimport { BaseReportComponent, BaseReportState } from '../../base-report/base-report.component';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { LocalStorageService } from '@m4u-angular/core/framework/local-storage.service';\r\n\r\nclass State extends BaseReportState {\r\n Side: EnumSide; \r\n PaymentMeansTypes: EnumPaymentMeansTypes[];\r\n PaymentMeansTypesSource: any[];\r\n Payments: PaymentView[];\r\n\r\n DateFrom: Date;\r\n DateTo: Date;\r\n\r\n SortOrder = 'desc';\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-payment-list',\r\n templateUrl: './payment-list.component.html',\r\n styleUrls: ['./payment-list.component.scss']\r\n})\r\nexport class PaymentListComponent extends BaseReportComponent {\r\n \r\n @ViewChild('paymentGrid') reportGrid: PaymentGridComponent;\r\n\r\n constructor(A: ServiceBagService, \r\n private navigatorService: NavigatorService,\r\n private localStorageService: LocalStorageService,\r\n private paymentEndpoint: PaymentEndpoint) {\r\n super(A, 'PaymentListComponent', State);\r\n }\r\n\r\n override OnInitState() {\r\n this.State.Side = this.navigatorService.GetCustomRouteData().Side;\r\n this.State.DateFrom = new Date();\r\n this.State.DateFrom.setMonth(this.State.DateFrom.getMonth() - 1);\r\n\r\n this.InitPaymentMeansTypesSource();\r\n }\r\n\r\n protected override OnGetCustomFilterSettings() {\r\n return {\r\n Company: { IsVisible: true },\r\n BusinessPartner: { IsVisible: true },\r\n CurrencyFilter: { IsVisible: true, IsMultiple: true }\r\n \r\n } as FilterSettings;\r\n }\r\n\r\n protected override OnResetFilterValues() {\r\n super.OnResetFilterValues();\r\n \r\n this.State.PaymentMeansTypes = [];\r\n }\r\n\r\n protected override OnLoadData() {\r\n if (!Globals.OrganizationID) {\r\n this.DataSources['Payments'] = undefined;\r\n return;\r\n }\r\n\r\n const params = this.GetParams();\r\n params.IncomeExpenseSide = this.State.Side;\r\n params.DateFrom = this.State.DateFrom;\r\n params.DateTo = this.State.DateTo;\r\n params.PaymentMeansTypes = this.State.PaymentMeansTypes;\r\n\r\n this.DataSources['Payments'] = new DataSourceCustomAction(\r\n (options: DataLoadOptions) => this.paymentEndpoint.ListEx(params, options), \r\n undefined, \r\n undefined, \r\n false\r\n );\r\n this.DS('Payments').Reload();\r\n }\r\n\r\n override OnInitComponentFinished() {\r\n super.OnInitComponentFinished();\r\n this.InitSortOrder();\r\n }\r\n\r\n override GetTitle() {\r\n let result;\r\n if(this.State.Side === EnumSide.Income) result = this.RC('ttlIncomePayments');\r\n else result = this.RC('ttlExpensePayments');\r\n\r\n return result;\r\n }\r\n\r\n OnSwitchSortOrder() {\r\n this.State.SortOrder = this.State.SortOrder == \"asc\" ? \"desc\" : \"asc\";\r\n this.localStorageService.SetItem(this.GetSortOrderSettingName(), this.State.SortOrder);\r\n }\r\n\r\n LoadPayments(params: PaymentListParams) {\r\n this.State.DateFrom = params.DateFrom;\r\n this.State.DateTo = params.DateTo;\r\n\r\n this.OnLoadData();\r\n }\r\n\r\n private InitSortOrder() {\r\n const sortOrder = this.localStorageService.GetItem(this.GetSortOrderSettingName());\r\n if (!!sortOrder) this.State.SortOrder = sortOrder;\r\n }\r\n\r\n private InitPaymentMeansTypesSource() {\r\n this.State.PaymentMeansTypesSource = this.LIST('PaymentMeansTypes').filter(x => x.Value !== EnumPaymentMeansTypes.Multiple)\r\n }\r\n\r\n private GetSortOrderSettingName() {\r\n return `${this.ComponentName}.ViewSelector.SortOrder`;\r\n }\r\n \r\n protected override OnGetToolbarSettings(): ToolbarSettings {\r\n const settings = super.OnGetToolbarSettings();\r\n if(settings && this.A.Screen.IsDesktop()){\r\n settings.IsAllowPrint = false;\r\n }\r\n return settings;\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\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 { BaseParamsFilter } from './../entities/baseparamsfilter.entity';\r\nimport { EnumSide } from './../enums';\r\nimport { EnumPaymentMeansTypes } from './../enums';\r\nexport class PaymentListParams extends BaseParamsFilter {\r\n constructor() {\r\n super();\r\n this.TypeName = 'PaymentListParams';\r\n }\r\n \r\n public BusinessPartnerID: number; \r\n public DocumentID: number; \r\n public IncomeExpenseSide: EnumSide; \r\n public DateFrom: Date; \r\n public DateTo: Date; \r\n public PaymentMeansTypes: EnumPaymentMeansTypes[]; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { PaymentListParams } from './../../../_proxy/params/paymentlist.param';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { Payment } from '@kraken/_proxy/entities/payment.entity';\r\n\r\nclass State extends BaseState {\r\n IsFlatMode: boolean;\r\n DateFrom: Date;\r\n DateTo: Date;\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-payment-grid',\r\n templateUrl: './payment-grid.component.html',\r\n styleUrls: ['./payment-grid.component.scss']\r\n})\r\nexport class PaymentGridComponent extends BaseGridComponent {\r\n\r\n @Input() Name: string;\r\n @Input() SortOrder: string;\r\n @Input() IsReport = true;\r\n @Input() IsShowSearchLine = true;\r\n @Input() IsShowChartButton = false;\r\n @Input() set DateFrom(value: Date) {\r\n this.State.DateFrom = value;\r\n }\r\n @Input() set DateTo(value: Date) {\r\n this.State.DateTo = value;\r\n }\r\n\r\n @Output() FilterChanged: EventEmitter = new EventEmitter();\r\n @Output() ChartClick: EventEmitter = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService,\r\n public screen: ScreenService) {\r\n super(A, 'PaymentGridComponent', Payment, State);\r\n }\r\n\r\n OnItemClick(e) {\r\n if (e.data.EntryID) { this.Navigate(['pages/payment', e.data.EntryID]); }\r\n }\r\n\r\n OnFilterChanged() {\r\n const params = new PaymentListParams();\r\n params.DateFrom = this.State.DateFrom;\r\n params.DateTo = this.State.DateTo;\r\n\r\n this.FilterChanged.emit(params);\r\n }\r\n\r\n OnToolbarPreparing(e) {\r\n e.toolbarOptions.items.push({\r\n location: 'after',\r\n template: 'showFilter',\r\n isCustom: true\r\n });\r\n }\r\n\r\n OnChartClick(e) {\r\n this.ChartClick.emit();\r\n }\r\n\r\n protected override OnGetCustomComponentStateName() {\r\n return `${this.Name}.${this.ComponentName}`;\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\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.Total | formatNumberSum}}
\\r\\n {{cell.data.Currency | LookupList:LIST('Currencies'):'Symbol' }}\\r\\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 { Component, Input } from '@angular/core';\r\nimport { PaymentClosedDocument } from '@kraken/_proxy/entities/payment.entity';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { ServiceBagService, ServiceBagServices } 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\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-payment-closed-document-grid',\r\n templateUrl: './payment-closed-document-grid.component.html',\r\n styleUrls: ['./payment-closed-document-grid.component.scss']\r\n})\r\nexport class PaymentClosedDocumentGridComponent extends BaseGridComponent {\r\n\r\n @Input() Currency: string;\r\n\r\n constructor(A: ServiceBagService,\r\n public screen: ScreenService) {\r\n super(A, 'PaymentClosedDocumentGridComponent', PaymentClosedDocument, BaseState);\r\n }\r\n\r\n OnGoToDocument(e) {\r\n if (e) { this.Navigate(['/pages/document', e.data.DocumentID]); }\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
{{ cell.data.DocumentType }}
\\r\\n
{{ 'lblWithoutDocument' | RC:THIS }}
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
{{cell.data.ClosingSum | formatNumberSum}}
\\r\\n {{Currency | LookupList:LIST('Currencies'):'Symbol' }}\\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 { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-payment-mean-grid',\r\n templateUrl: './payment-mean-grid.component.html',\r\n styleUrls: ['./payment-mean-grid.component.scss']\r\n})\r\nexport class PaymentMeanGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'PaymentClosedDocumentGridComponent', 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
{{cell.data.Sum | formatNumberSum}}
\\r\\n {{cell.data.Currency | LookupList:LIST('Currencies'):'Symbol' }}\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\";","import { Component, Input, ViewChild } from '@angular/core';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport {\r\n EnumPageDisplayModes,\r\n EnumPageEntitySources,\r\n EnumWindowSizes\r\n} from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Globals } from '../../_globals';\r\nimport { TransactionEndpoint } from '../../_proxy/endpoints/transaction.endpoint';\r\nimport { TransactionReportParams } from '../../_proxy/params/transactionreport.param';\r\nimport { TransactionGroupChartComponent } from './group-chart/transaction-group-chart.component';\r\nimport { TransactionView } from '@kraken/_proxy/views/transaction.view';\r\nimport { DateHelpers } from '@m4u-angular/core/helpers/DateHelpers';\r\nimport { Transaction } from '@kraken/_proxy/entities/transaction.entity';\r\nimport { EnumSide } from '@kraken/_proxy/enums';\r\n\r\nfunction getAveragePerMonth(transactions: TransactionView[], key: 'Credit' | 'Debit') {\r\n const sum = transactions.reduce((acc, tran) => acc + (tran[key] ?? 0), 0);\r\n return transactions.length ? sum / transactions.length : 0;\r\n}\r\n\r\nfunction getLastAmount(transactions: TransactionView[], key: 'Credit' | 'Debit') {\r\n const sums = new Map();\r\n let lastDate;\r\n\r\n transactions.forEach(({ Date, [key]: Amount }) => {\r\n const sumKey = Date.toDateString();\r\n const sum = sums.get(sumKey) ?? 0;\r\n sums.set(sumKey, sum + (Amount ?? 0));\r\n\r\n lastDate ??= Date;\r\n if (Date > lastDate) {\r\n lastDate = Date;\r\n }\r\n });\r\n\r\n return sums.get(lastDate?.toDateString());\r\n}\r\n\r\nclass State extends BaseState {\r\n Items: TransactionView[];\r\n GridItems: TransactionView[];\r\n TransactionView: number;\r\n MonthsList: number[];\r\n Months: number;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-transaction-group-view-dialog',\r\n templateUrl: './transaction-group-view-dialog.component.html',\r\n styleUrls: ['./transaction-group-view-dialog.component.scss']\r\n})\r\nexport class TransactionGroupViewDialogComponent extends BasePageComponent {\r\n @Input() FieldName;\r\n @Input() FieldValue;\r\n @Input() Fields: Map;\r\n @Input() Transaction: Transaction;\r\n @Input() AccountName: string;\r\n @Input() Side: EnumSide;\r\n\r\n @ViewChild('chart') chart: TransactionGroupChartComponent;\r\n\r\n Width: EnumWindowSizes = EnumWindowSizes.WindowMedium;\r\n constructor(A: ServiceBagService, private transactionEndpoint: TransactionEndpoint) {\r\n super(\r\n A,\r\n 'TransactionGroupViewDialogComponent',\r\n BaseEntity,\r\n State,\r\n EnumPageDisplayModes.Dialog,\r\n EnumPageEntitySources.External\r\n );\r\n }\r\n\r\n protected OnInitState(): void {\r\n this.State.TransactionView = 0;\r\n this.State.MonthsList = [3, 6, 12, 24, 36];\r\n this.State.Months = 6;\r\n this.State.GridItems = [];\r\n this.State.Items = [];\r\n }\r\n\r\n get IsShowAllVisible() {\r\n if (!this.State.GridItems || !this.State.Items) return false;\r\n\r\n return this.State.GridItems.length !== this.State.Items.length;\r\n }\r\n\r\n get CurrencySymbol() {\r\n if (!this.State.Items || this.State.Items.length === 0) return '';\r\n const [tran] = this.State.Items;\r\n\r\n // @ts-expect-error LISTITEMX has to be generic\r\n return this.LISTITEMX('Currencies', tran.Currency)?.Symbol;\r\n }\r\n\r\n get AmountKey() {\r\n return this.Side === EnumSide.Expense ? 'Debit' : 'Credit';\r\n }\r\n\r\n get Average() {\r\n if (!this.State.GridItems) return;\r\n return getAveragePerMonth(this.State.GridItems, this.AmountKey);\r\n }\r\n\r\n get LastAmount() {\r\n if (!this.State.Items) return;\r\n return getLastAmount(this.State.Items, this.AmountKey);\r\n }\r\n\r\n override OnInitTitle() {\r\n return `${this.RC('lblTransactions')} - ${this.AccountName}`;\r\n }\r\n\r\n protected override OnInitSubtitle(): string {\r\n if(this.Fields && this.Fields.size > 0) {\r\n let subtitle = '';\r\n this.Fields.forEach((value, field) => {\r\n subtitle += `${this.RC('lbl'+field)} - ${value} `;\r\n });\r\n\r\n return subtitle;\r\n }\r\n\r\n return `${this.FieldName} - ${this.FieldValue}`;\r\n }\r\n\r\n override OnInitComponentFinished() {\r\n this.LoadTransactions();\r\n }\r\n\r\n LoadTransactions() {\r\n const params = new TransactionReportParams();\r\n params.OrganizationID = Globals.OrganizationID;\r\n params.DateFrom = DateHelpers.AddMonth(Globals.Yesterday, -(this.State.Months ?? 0));\r\n params.DateTo = Globals.Yesterday;\r\n params[this.FieldName] = this.FieldValue;\r\n params.BookingAccounts = this.Transaction ? [this.Transaction.BookingAccountID] : null;\r\n\r\n if(this.Fields && this.Fields.size > 0) {\r\n this.Fields.forEach((value, fieldName) => {\r\n params[fieldName] = value;\r\n });\r\n }\r\n\r\n function filterSySide(items: TransactionView[], side: EnumSide) {\r\n const isCredit = side === EnumSide.Income;\r\n return items.filter(item =>\r\n isCredit ? Number.isFinite(item.Credit) : Number.isFinite(item.Debit)\r\n );\r\n }\r\n\r\n this.Do(this.transactionEndpoint.ListEx(params), false, data => {\r\n const items = this.Side ? filterSySide(data.Entities, this.Side) : data.Entities;\r\n this.State.Items = items;\r\n this.State.GridItems = items;\r\n });\r\n }\r\n\r\n FilterByMonth(date: Date) {\r\n const filterMonth = date.getMonth();\r\n const filterYear = date.getFullYear();\r\n\r\n this.State.GridItems = this.State.Items.filter(item => {\r\n const month = item.Date.getMonth();\r\n const year = item.Date.getFullYear();\r\n\r\n return month === filterMonth && year === filterYear;\r\n });\r\n }\r\n\r\n OnMonthsChanged(e) {\r\n if(!this.IsUIEvent(e)) {\r\n return;\r\n }\r\n\r\n this.LoadTransactions();\r\n }\r\n\r\n OnShowAll() {\r\n this.State.GridItems = this.State.Items;\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n {{ 'lblAverageDebit' | RC:THIS }}:\\r\\n {{ 'lblAverageCredit' | RC:THIS }}:\\r\\n {{ Average | formatPriceWithCurrency: CurrencySymbol }}\\r\\n \\r\\n\\r\\n \\r\\n {{ 'lblLastAmount' | RC: THIS }}:\\r\\n {{ LastAmount | formatPriceWithCurrency: CurrencySymbol }}\\r\\n \\r\\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 { Transaction } from '@kraken/_proxy/entities/transaction.entity';\r\nimport { BaseGridComponent } from \"@m4u-angular/base/component/BaseGridComponent\";\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-transaction-group-grid\",\r\n templateUrl: \"./transaction-group-grid.component.html\"\r\n})\r\nexport class TransactionGroupGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, \"TransactionGroupGridComponent\", Transaction, BaseState);\r\n }\r\n\r\n override AfterInit() {\r\n setTimeout(() => this.RefreshGridHeight(), 500);\r\n }\r\n\r\n override OnInitComponentFinished() {\r\n if (this.G) this.G.grid.columnHidingEnabled = 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 {{ cell.data.Debit | formatNumberSum }}\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n {{ cell.data.Credit | formatNumberSum }}\\r\\n \\r\\n
\\r\\n
\";","import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState, BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { formatNumber } from 'devextreme/localization';\r\nimport { TransactionView } from '../../../_proxy/views/transaction.view';\r\nimport { DxChartComponent } from 'devextreme-angular';\r\nimport { EnumSide } from '@kraken/_proxy/enums';\r\nimport { Globals } from '@kraken/_globals';\r\n\r\nfunction mergeAmountByDate(transactions: TransactionView[], key: 'Credit' | 'Debit') {\r\n const list = {};\r\n\r\n transactions.forEach((trans: TransactionView) => {\r\n const { Date, [key]: Amount } = trans;\r\n const uniqueKey = Date.toDateString();\r\n\r\n const transaction = list[uniqueKey];\r\n\r\n if (transaction) {\r\n transaction[key] ??= 0;\r\n transaction[key] += Amount ?? 0;\r\n } else {\r\n list[uniqueKey] = { ...trans };\r\n }\r\n });\r\n\r\n return Object.values(list) as TransactionView[];\r\n}\r\n\r\nclass State extends BaseState {\r\n Type: string;\r\n DebitColor: string = Globals.ReportDebitColor;\r\n CreditColor: string = Globals.ReportCreditColor;\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-transaction-group-chart',\r\n templateUrl: './transaction-group-chart.component.html'\r\n})\r\nexport class TransactionGroupChartComponent extends BasePageComponent {\r\n constructor(A: ServiceBagService) {\r\n super(A, 'TransactionGroupChartComponent', BaseEntity, State);\r\n }\r\n @ViewChild('chart') chart: DxChartComponent;\r\n @Output() OnClickMonth = new EventEmitter();\r\n @Input() Side: EnumSide;\r\n @Input() View: number;\r\n\r\n RepaintChart(chartInstance) {\r\n chartInstance && chartInstance.instance && chartInstance.instance.refresh();\r\n }\r\n\r\n @Input() Months: number;\r\n\r\n private _transactions: TransactionView[] = [];\r\n @Input()\r\n set Transactions(value: TransactionView[] | undefined) {\r\n this._transactions = value ? mergeAmountByDate(value, this.showCredit ? 'Credit' : 'Debit') : [];\r\n }\r\n get Transactions() {\r\n return this._transactions ?? [];\r\n }\r\n\r\n get IsMonthView() {\r\n return this.View === 0;\r\n }\r\n\r\n get showCredit() {\r\n return this.Side === EnumSide.Income;\r\n }\r\n\r\n get showDebit() {\r\n return this.Side === EnumSide.Expense;\r\n }\r\n\r\n CustomizeTooltip = ({ point, value }: any) => {\r\n const { series, aggregationInfo } = point;\r\n const { data } = aggregationInfo ? aggregationInfo : point;\r\n const pointData = Array.isArray(data) ? data[0] : data;\r\n if (!pointData) return;\r\n\r\n const { Currency } = pointData;\r\n const valueText = formatNumber(value, this.F.NumberSum);\r\n const amountWithCurrency = `${valueText} ${\r\n (this.LISTITEMX('Currencies', Currency) as any)?.Symbol\r\n }`;\r\n\r\n if (series.name === 'average') {\r\n return {\r\n text: `${this.RC('lblAveragePerMonth')} ${amountWithCurrency}`\r\n };\r\n }\r\n\r\n return {\r\n text: amountWithCurrency\r\n };\r\n };\r\n\r\n OnArgumentAxisClick(e) {\r\n this.OnClickMonth.emit(e.argument);\r\n }\r\n\r\n onPointClick(e) {\r\n this.OnClickMonth.emit(e.target.data.Date);\r\n }\r\n\r\n getMarkerColor(item) {\r\n return item.series.isVisible() ? item.marker.fill : '#888';\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\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 {Globals} from '../../_globals';\r\nimport {Component, EventEmitter, Input, Output} from '@angular/core';\r\nimport {EnumAdminActivityRecordType} from '../../_proxy/enums';\r\nimport {OrganizationEndpoint} from '../../_proxy/endpoints/organization.endpoint';\r\nimport {AdminActivityRecord} from '../../_proxy/entities/adminactivityrecord.entity';\r\nimport {AdminActivityRecordEndpoint} from '../../_proxy/endpoints/adminactivityrecord.endpoint';\r\nimport { OrganizationService } from '@kraken/services/organization.service';\r\nimport { Subscription } from 'rxjs';\r\nimport { AccessService } from '@kraken/services/access.service';\r\nimport { BottomSheetService } from '@m4u-angular/core/framework/bottom-sheet.service';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-organization-selector',\r\n templateUrl: './organization-selector.component.html',\r\n styleUrls: ['./organization-selector.component.scss']\r\n})\r\nexport class OrganizationSelectorComponent extends BaseComponent {\r\n\r\n get OrganizationID() {\r\n return Globals.OrganizationID; \r\n }\r\n set OrganizationID(value: number) {\r\n Globals.OrganizationID = value; \r\n }\r\n\r\n @Output() OrganizationChange = new EventEmitter();\r\n @Input() IconDisabled = false;\r\n\r\n private _subscriptions: Subscription[] = [];\r\n\r\n constructor(A: ServiceBagService,\r\n public accessService: AccessService,\r\n private organizationEndpoint: OrganizationEndpoint, \r\n private adminActivityRecordEndpoint: AdminActivityRecordEndpoint,\r\n private organizationService: OrganizationService,\r\n private bottomSheetService: BottomSheetService) {\r\n super(A, 'OrganizationSelectorComponent', BaseState);\r\n }\r\n\r\n protected OnInitComponent(): void {\r\n this.DS('SelectorOrganizations')?.Reload();\r\n this._subscriptions.push(this.organizationService.Organization$.subscribe(organizationID => {\r\n if (this.OrganizationID === organizationID) return;\r\n \r\n this.OrganizationID = organizationID;\r\n }));\r\n }\r\n \r\n protected OnGoToOrganization() {\r\n this.Navigate([`/pages/organization/${this.OrganizationID}`]);\r\n }\r\n\r\n OnOrganizationChanged(event: any) {\r\n // if (!this.IsUIEvent(event)) { return; }\r\n if (Globals.OrganizationID) {\r\n this.Do(this.organizationEndpoint.Get(Globals.OrganizationID), false, (response) => {\r\n Globals.OrganizationDefaultCurrency = response.Entity.DefaultCurrency;\r\n this.OrganizationChange.emit(Globals.OrganizationID);\r\n this.organizationService.ChangeOrganization(Globals.OrganizationID);\r\n\r\n this.LogOrganizationViewed();\r\n });\r\n return;\r\n }\r\n Globals.OrganizationDefaultCurrency = 'ILS';\r\n this.OrganizationChange.emit(Globals.OrganizationID);\r\n this.organizationService.ChangeOrganization(Globals.OrganizationID);\r\n }\r\n \r\n private LogOrganizationViewed() {\r\n const record = new AdminActivityRecord();\r\n record.ActivityType = EnumAdminActivityRecordType.ViewOrganization;\r\n record.OrganizationID = Globals.OrganizationID;\r\n \r\n this.Do(this.adminActivityRecordEndpoint.Save(record), 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
\";","import { Component, EventEmitter, Input, Output } 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 { IBaseComponent } from '@m4u-angular/base/component/IBaseComponent';\r\nimport { LocalStorageService } from '@m4u-angular/core/framework/local-storage.service';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-flat-mode-button',\r\n templateUrl: './flat-mode-button.component.html'\r\n})\r\nexport class FlatModeButtonComponent extends BaseComponent {\r\n \r\n private _flatModeStateName: string;\r\n @Input() set Component(value: IBaseComponent) {\r\n this._flatModeStateName = `${value.ComponentStateName}.FlatMode`;\r\n }\r\n\r\n @Input() IsFlatMode: boolean;\r\n @Output() IsFlatModeChange = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService, private localStorageService: LocalStorageService) {\r\n super(A, 'FlatModeButtonComponent', BaseState);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.IsFlatMode = this.GetComponentFlatModeState() || this.IsFlatMode;\r\n this.IsFlatModeChange.emit(this.IsFlatMode);\r\n }\r\n\r\n OnClick() {\r\n this.IsFlatMode = !this.IsFlatMode;\r\n this.SaveComponentFlatModeState();\r\n this.IsFlatModeChange.emit(this.IsFlatMode);\r\n }\r\n\r\n GetComponentFlatModeState(): boolean {\r\n return this.localStorageService.GetItem(this._flatModeStateName) === 'true';\r\n }\r\n\r\n SaveComponentFlatModeState() {\r\n this.localStorageService.SetItem(this._flatModeStateName, this.IsFlatMode.toString());\r\n }\r\n\r\n GetFlatModeIcon(): string { return this.IsFlatMode ? 'mdi mdi-checkbox-blank-circle' : 'mdi mdi-checkbox-blank-circle-outline'; }\r\n}\r\n","export default \"\\r\\n\\r\\n\";","import { Component, EventEmitter, Input, Output } 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 { DxDataGridComponent } from 'devextreme-angular/ui/data-grid';\r\nimport { Column } from 'devextreme/ui/data_grid';\r\nimport { debounce } from 'lodash';\r\n\r\nclass State extends BaseState {\r\n Items: any[];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-expand-collapse-button',\r\n templateUrl: './expand-collapse-button.component.html',\r\n styles: [`\r\n ::ng-deep .expand-collapse-button .dx-button-content {\r\n min-width: 42px;\r\n }\r\n\r\n ::ng-deep .RTL .expand-collapse-button .dx-button-content .dx-icon {\r\n transform: rotateY(180deg);\r\n }\r\n `]\r\n})\r\nexport class ExpandCollapseButtonComponent extends BaseComponent {\r\n _grid: DxDataGridComponent;\r\n _subscribers = [];\r\n\r\n @Input() Visible: boolean;\r\n @Input() set Grid(grid) {\r\n this._grid = grid;\r\n this._SubscribeGridEvents();\r\n }\r\n get Grid() {\r\n return this._grid;\r\n }\r\n\r\n get IsVisible() {\r\n return this.Visible && !!this.State.Items?.length;\r\n }\r\n\r\n @Input() IsFlatMode: boolean;\r\n @Output() IsFlatModeChange = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'ExpandCollapseButtonComponent', State);\r\n }\r\n\r\n GetGroupedColumns() {\r\n return this.Grid.instance.getVisibleColumns().filter(c => c.groupIndex !== undefined).sort((a, b) => a.groupIndex - b.groupIndex);\r\n }\r\n\r\n ExpandLevel = (level: number) => {\r\n if (level === Infinity) {\r\n return this.Grid.instance.expandAll();\r\n }\r\n\r\n this.Grid.instance.collapseAll();\r\n\r\n for (let i = 0; i < level; i++) {\r\n this.Grid.instance.expandAll(i);\r\n }\r\n };\r\n\r\n ColumnsToDropdownItems(cols: Column[]) {\r\n this.State.Items = cols.map((col: Column) => ({\r\n text: col.caption,\r\n onClick: () => this.ExpandLevel(col.groupIndex)\r\n }));\r\n\r\n if (cols.length) {\r\n this.State.Items.unshift({\r\n text: this.RC('lblFlatMode'),\r\n onClick: () => {\r\n this.IsFlatModeChange.emit(true);\r\n this.Grid.instance.clearGrouping();\r\n }\r\n });\r\n this.State.Items.push({\r\n text: this.RC('lblExpandAll'),\r\n onClick: () => this.ExpandLevel(Infinity)\r\n });\r\n }\r\n\r\n this.IsFlatModeChange.emit(!cols.length); // NOTE: not sure is needed\r\n }\r\n\r\n protected override OnDestroyComponent() {\r\n this._UnsubscribeEvents();\r\n }\r\n\r\n private _SubscribeGridEvents() {\r\n if (!this.Grid) return;\r\n\r\n if (this._subscribers.length) this._UnsubscribeEvents();\r\n const debouncedFn = debounce(() => this.ColumnsToDropdownItems(this.GetGroupedColumns()), 400);\r\n\r\n this._subscribers.push(this.Grid.onContentReady.subscribe(() => debouncedFn()));\r\n this._subscribers.push(this.Grid.onOptionChanged.subscribe((e) => {\r\n if (e.fullName.endsWith('.groupIndex')) {\r\n debouncedFn();\r\n }\r\n }));\r\n }\r\n\r\n private _UnsubscribeEvents() {\r\n this._subscribers.forEach(s => s.unsubscribe());\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n\";","import { Component, ViewChild } from '@angular/core';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BalanceEndpoint } from '../../_proxy/endpoints/balance.endpoint';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { FilterSettings } from '../../components/filter/filter.component';\r\nimport { BaseReportComponent, BaseReportState } from '../base-report/base-report.component';\r\nimport { BalanceReportParams } from '../../_proxy/params/balancereport.param';\r\nimport { EnumBanks, EnumBookingAccountSubtypes } from '../../_proxy/enums';\r\nimport { AccountRebalanceGridComponent } from './grid/account-rebalance-grid.component';\r\nimport ArrayStore from 'devextreme/data/array_store';\r\nimport DataSource from 'devextreme/data/data_source';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\n\r\nclass State extends BaseReportState {\r\n GridData: any | null = []\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-account-rebalance-view',\r\n templateUrl: './account-rebalance-view.component.html',\r\n})\r\nexport class AccountRebalanceViewComponent extends BaseReportComponent\r\n{\r\n @ViewChild('reportGrid') reportGrid: AccountRebalanceGridComponent;\r\n\r\n constructor(A: ServiceBagService, private balanceEndpoint: BalanceEndpoint, screenService: ScreenService) {\r\n super(A, 'AccountRebalanceViewComponent', State);\r\n }\r\n\r\n get GetBalanceReportParams(): BalanceReportParams {\r\n const params = this.GetParams();\r\n params.IsLoadDetails = true;\r\n params.BookingAccountSubtypes = [EnumBookingAccountSubtypes.Current];\r\n\r\n return params;\r\n }\r\n\r\n protected override OnGetCustomFilterSettings() {\r\n return {\r\n Company: { IsVisible: true, IsMultiple: true },\r\n Account: { IsVisible: true, IsMultiple: true },\r\n BookingAccount: { IsVisible: true, IsMultiple: true },\r\n AccountGroup: { IsVisible: true, IsMultiple: true },\r\n CurrencyFilter: { IsVisible: true, IsMultiple: true },\r\n Bank: { IsVisible: true, IsMultiple: true },\r\n Currency: { IsVisible: true },\r\n\r\n IsDateVisible: true,\r\n } as FilterSettings;\r\n }\r\n\r\n protected override OnResetFilterValues() {\r\n super.OnResetFilterValues();\r\n }\r\n\r\n dataSource = (() => {\r\n const r = new DataSource({\r\n store: new ArrayStore({\r\n key: 'EntryID',\r\n data: [],\r\n onPush: () => {\r\n this.reportGrid.G.gridAny.instance.refresh()\r\n }\r\n })\r\n })\r\n\r\n\r\n // @ts-ignore\r\n r.AddEventListener = () => null\r\n\r\n return r\r\n })();\r\n\r\n override OnInitDataSources() {\r\n // this.DataSources['GridData'] = new Csu\r\n }\r\n\r\n OnGridChange(change) {\r\n this.State.GridData = this.State.GridData.map(row => {\r\n if (change.key !== row.EntryID) return row\r\n\r\n return { ...row, ...change.data }\r\n })\r\n }\r\n\r\n protected override OnLoadData() {\r\n if (!this.State.FilterValues.OrganizationID) {\r\n this.DataSources['Balances'] = undefined;\r\n return;\r\n }\r\n\r\n if (!this.State.FilterValues.Currency) {\r\n return;\r\n }\r\n\r\n // this.Do(\r\n // this.balanceEndpoint.ListForDate(this.GetBalanceReportParams),\r\n // false,\r\n // (response) => {\r\n\r\n // response.Entities.forEach((p, i) => {\r\n // // @ts-ignore\r\n // p.Credit = i % 2 ? 10 : ''\r\n // // @ts-ignore\r\n // p.Debit = i % 2 ? '' : 10\r\n // })\r\n // const store = this.dataSource.store()\r\n // store.push(response.Entities.map((r, index) => ({ type: 'insert', data: r, index })))\r\n // // this.State.GridData = response.Entities;\r\n // }\r\n // );\r\n\r\n this.DataSources['Balances'] = new DataSourceCustomAction((options: DataLoadOptions) => this.balanceEndpoint.ListForDate(this.GetBalanceReportParams), undefined, undefined, false);\r\n this.DataSources['Balances'].Reload();\r\n\r\n // this.DataSources['Balances'] = new DataSourceCustomAction((options: DataLoadOptions) => {\r\n // return this.balanceEndpoint.ListForDate(this.GetBalanceReportParams)\r\n\r\n // // return data.pipe(map(r => {\r\n // // r.Entities.forEach((p, i) => {\r\n // // // @ts-ignore\r\n // // const ch = window.changes?.find(c => c.key === p.EntryID)\r\n\r\n // // if (ch) {\r\n // // Object.entries(ch.data).forEach(([key, v]) => {\r\n // // p[key] = v\r\n // // })\r\n // // } else {\r\n // // // @ts-ignore\r\n // // p.Credit = i % 2 ? 10 : ''\r\n // // // @ts-ignore\r\n // // p.Debit = i % 2 ? '' : 10\r\n // // }\r\n // // })\r\n\r\n // // return r\r\n // // }))\r\n // }, undefined, undefined, 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\";","import { Component, EventEmitter, Input, Output } 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 { EnumBookingAccountSubtypes } from '../../../_proxy/enums';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { formatNumber } from 'devextreme/localization';\r\nimport { Balance } from '../../../_proxy/entities/balance.entity';\r\n\r\nclass State extends BaseState {\r\n IsFlatMode = false;\r\n IsWindowMode: boolean;\r\n DisplayCurrency: string;\r\n Date: Date;\r\n GroupByCompany: boolean;\r\n GroupByCurrency: boolean;\r\n GridHasChanges: boolean = false;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-account-rebalance-grid',\r\n templateUrl: './account-rebalance-grid.component.html',\r\n styleUrls: ['./account-rebalance-grid.component.scss']\r\n})\r\nexport class AccountRebalanceGridComponent extends BaseGridComponent {\r\n @Output() GridChange: EventEmitter = new EventEmitter();\r\n\r\n @Input() set DisplayCurrency(value: string) {\r\n this.State.DisplayCurrency = value;\r\n }\r\n @Input() set Date(value: Date) {\r\n this.State.Date = value;\r\n }\r\n\r\n @Input() set IsWindowMode(value: boolean) {\r\n this.State.IsWindowMode = value;\r\n }\r\n\r\n @Input() set IsFlatMode(value: boolean) {\r\n this.State.IsFlatMode = value;\r\n\r\n this.UpdateColumnsVisibility();\r\n this.UpdateGroupings();\r\n }\r\n\r\n @Input() set GroupByCompany(value: boolean) {\r\n this.State.GroupByCompany = value;\r\n this.UpdateGroupings();\r\n }\r\n\r\n @Input() set GroupByCurrency(value: boolean) {\r\n this.State.GroupByCurrency = value;\r\n this.UpdateGroupings();\r\n }\r\n\r\n private _subTypesForDetails = [EnumBookingAccountSubtypes.Deposits, EnumBookingAccountSubtypes.Loans, EnumBookingAccountSubtypes.Stocks, EnumBookingAccountSubtypes.Guarantee];\r\n\r\n constructor(A: ServiceBagService, private screenService: ScreenService) {\r\n super(A, 'AccountRebalanceGridComponent', Balance, State);\r\n this.BindHandler('OnCalculateSummary');\r\n this.BindHandler('GetGroupRowCaption');\r\n this.BindHandler('GetBalanceAmountSummaryDisplayFormat');\r\n }\r\n\r\n UpdateGroupings() {\r\n if (!this.grid) return;\r\n\r\n let companyGroupIndex = undefined;\r\n let accountGroupIndex = undefined;\r\n let currencyGroupIndex = undefined;\r\n\r\n if (!this.State.IsFlatMode) {\r\n companyGroupIndex = this.State.GroupByCompany ? 0 : undefined;\r\n accountGroupIndex = this.State.GroupByCompany ? 1 : 0;\r\n currencyGroupIndex = this.State.GroupByCurrency ? this.State.GroupByCompany ? 2 : 1 : undefined;\r\n }\r\n\r\n this.G.grid.instance.columnOption('CompanyName', 'groupIndex', companyGroupIndex);\r\n this.G.grid.instance.columnOption('AccountName', 'groupIndex', accountGroupIndex);\r\n this.G.grid.instance.columnOption('Currency', 'groupIndex', currencyGroupIndex);\r\n }\r\n\r\n OnInitialized(e) {\r\n e.component.columnOption('command:adaptive', 'visible', true);\r\n this.UpdateColumnsVisibility();\r\n }\r\n\r\n OnRowPrepared(row: any): void {\r\n if (this.State.IsFlatMode && row.rowType === 'data' && (!row.data || !this._subTypesForDetails.some(item => item === row.data.Subtype)\r\n || (row.data.DetailsLoans.length === 0 && row.data.DetailsStocks.length === 0 && row.data.DetailsDepos.length === 0 && row.data.DetailsGuarantees.length===0))) {\r\n row.cells[0].cellElement?.classList.remove('dx-datagrid-expand');\r\n row.cells[0].cellElement?.childNodes[0].classList?.remove('dx-datagrid-group-closed');\r\n }\r\n\r\n if (!this.State.IsFlatMode && row.rowType == 'data' && (!row.data || !this._subTypesForDetails.some(item => item == row.data.Subtype)\r\n || (row.data.DetailsLoans.length === 0 && row.data.DetailsStocks.length === 0 && row.data.DetailsDepos.length === 0 && row.data.DetailsGuarantees.length===0))) {\r\n let expandButtonIndex = this.State.GroupByCurrency ? 2 : 1;\r\n if (this.State.GroupByCompany) expandButtonIndex++;\r\n row.cells[expandButtonIndex]?.cellElement?.classList.remove('dx-datagrid-expand');\r\n row.cells[expandButtonIndex]?.cellElement?.childNodes[0].classList?.remove('dx-datagrid-group-closed');\r\n }\r\n }\r\n\r\n CustomSortingFunction(rowData) {\r\n const column = this as any;\r\n if (rowData.Currency == 'ILS') return column.sortOrder == 'asc' ? 'aaa' : 'zzz';\r\n return rowData.Currency;\r\n }\r\n\r\n OnCalculateSummary(e) {\r\n const currencyGroupIndex = this.G.grid.instance.columnOption('Currency', 'groupIndex');\r\n if (e.name == 'BalanceAmount' && e.groupIndex == currencyGroupIndex) {\r\n if (e.summaryProcess == 'start') e.totalValue = 0;\r\n if (e.summaryProcess == 'calculate') e.totalValue += e.value;\r\n }\r\n if (e.name == 'BookingAccountSubType' && e.summaryProcess == 'calculate') e.totalValue = (this.LISTITEMX('BookingAccountSubTypes', e.value) as any).SortOrder;\r\n if (e.name == 'Currency' && e.summaryProcess == 'calculate') e.totalValue = (this.LISTITEMX('Currencies', e.value) as any).SortOrder;\r\n }\r\n\r\n GetGroupRowCaption(e) {\r\n const summaryItem = e.summaryItems && e.summaryItems[0];\r\n if (!summaryItem || !summaryItem.value || !summaryItem.valueFormat) return e.displayValue;\r\n const value = summaryItem.value;\r\n const currencyText = this.State.DisplayCurrency ? (this.LISTITEMX('Currencies', this.State.DisplayCurrency) as any).Symbol : '';\r\n return `${e.displayValue} (${formatNumber(value, summaryItem.valueFormat)} ${currencyText || e.displayValue})`;\r\n }\r\n\r\n GetBalanceAmountSummaryDisplayFormat(e) {\r\n const currencyText = this.State.DisplayCurrency ? (this.LISTITEMX('Currencies', this.State.DisplayCurrency) as any).Symbol : '';\r\n return `${e.valueText} ${currencyText}`;\r\n }\r\n\r\n IsCurrentOrCreditCard(e) {\r\n return e.row.data.Subtype == EnumBookingAccountSubtypes.Current || e.row.data.Subtype == EnumBookingAccountSubtypes.CreditCard;\r\n }\r\n\r\n GetTransactionReportIcon() {\r\n return this.screenService.IsRTL() ? 'mdi mdi-clipboard-arrow-left-outline' : 'mdi mdi-clipboard-arrow-right-outline';\r\n }\r\n\r\n OnEditingStart(e: any) {\r\n const { data, column } = e;\r\n\r\n if (!data) return;\r\n\r\n const { Debit, Credit } = data;\r\n const { dataField } = column;\r\n\r\n let cancel = true;\r\n\r\n if (dataField === 'Debit' && !Credit) {\r\n cancel = false;\r\n }\r\n\r\n if (dataField === 'Credit' && !Debit) {\r\n cancel = false;\r\n }\r\n\r\n // hide editor\r\n e.cancel = cancel;\r\n }\r\n\r\n OnSaving(e) {\r\n e.cancel = true;\r\n\r\n if (e.changes.length) {\r\n\r\n e.promise = new Promise((resolve, reject) => {\r\n this.State.GridHasChanges = false;\r\n\r\n resolve(true);\r\n });\r\n }\r\n }\r\n\r\n validateDebitCredit() {\r\n\r\n return false;\r\n }\r\n\r\n saveGridChanges() {\r\n const gridInstance = this.grid.instance as any;\r\n\r\n if (this.G.HasEditData()) {\r\n const validationgCtrl = gridInstance.getController('validating');\r\n\r\n validationgCtrl.validate(true).then(isValid => {\r\n if (!isValid) return Promise.reject();\r\n this.G.AcceptChanges();\r\n });\r\n }\r\n }\r\n\r\n cancelGridChanges() {\r\n this.G.CancelEditData();\r\n this.State.GridHasChanges = false;\r\n }\r\n\r\n private UpdateColumnsVisibility() {\r\n if (this.grid && this.grid.instance) {\r\n this.G.SetColumnVisibility('CompanyName', this.State.IsFlatMode);\r\n this.G.SetColumnVisibility('Subtype', this.State.IsFlatMode);\r\n this.G.SetColumnVisibility('BookingAccountName', !this.State.IsFlatMode);\r\n this.G.SetColumnVisibility('BookingAccountCode', this.State.IsFlatMode);\r\n this.G.SetColumnVisibility('Currency', this.State.IsFlatMode);\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 {{GetGroupRowCaption(data) | LookupList: LIST('BookingAccountSubTypes')}}\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n 0 ? 'positive-amount' : 'negative-amount'\\\">\\r\\n {{cell.data.BalanceAmount | formatNumberSum}}\\r\\n {{State.DisplayCurrency || cell.data.Currency |\\r\\n LookupList:LIST('Currencies'):'Symbol' }}\\r\\n \\r\\n {{cell.data.Notes ? '(' + cell.data.Notes + ')' : ''}}\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n
\\r\\n {{GetGroupRowCaption(data)}}\\r\\n
\\r\\n\\r\\n
\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\";","\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { DocumentView } from './../views/document.view';\r\nimport { DocumentLineView } from './../views/documentline.view';\r\nimport { DocumentListParams } from './../params/documentlist.param';\r\n@Injectable()\r\nexport class DocumentEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(api: APIGatewayService) {super(\"Document\", api);}\r\n\t\r\n\r\n public GetLines(DocumentID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetLines', {DocumentID: DocumentID} );\r\n }\r\n\r\n public ListEx(Params: DocumentListParams, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListEx', Params, options?.GetLoadOptions() );\r\n }\r\n\r\n public override Get(DocumentID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'Get', {DocumentID: DocumentID} );\r\n }\r\n}\r\n\r\n","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntityReplication } from './../entities/baseentityreplication.entity';\r\nimport { EnumSide } from './../enums';\r\nimport { EnumDocumentType } from './../enums';\r\nexport class Document extends BaseEntityReplication {\r\n constructor() {\r\n super();\r\n this.TypeName = 'Document';\r\n }\r\n \r\n public IncomeExpenseSide: EnumSide; \r\n public IsNegative: boolean; \r\n public DocumentType: EnumDocumentType; \r\n public DocumentNumber: number; \r\n public BusinessPartnerID: number; \r\n public PostingDate: Date; \r\n public DueDate: Date; \r\n public Notes: string; \r\n public JournalEntryID: number; \r\n public TotalBeforeVatLocal: number; \r\n public TotalBeforeVatForeign: number; \r\n public TotalBeforeVatSystem: number; \r\n public VatLocal: number; \r\n public VatForeign: number; \r\n public VatSystem: number; \r\n public TotalAfterVatLocal: number; \r\n public TotalAfterVatForeign: number; \r\n public TotalAfterVatSystem: number; \r\n public VatPercent: number; \r\n public Currency: string; \r\n public IsLocalCurrency: boolean; \r\n public IsOpen: boolean; \r\n public Lines: DocumentLine[] = []; \r\n\t\r\n}\r\n\r\nexport class DocumentLine extends BaseEntityReplication {\r\n constructor() {\r\n super();\r\n this.TypeName = 'DocumentLine';\r\n }\r\n \r\n public ItemID: number; \r\n public ItemDescription: string; \r\n public Quantity: number; \r\n public Price: number; \r\n public DiscountPercent: number; \r\n public Currency: string; \r\n public LineTotalLocal: number; \r\n public LineTotalForeign: number; \r\n public LineTotalSystem: number; \r\n public SalesPersonID: number; \r\n public ProjectCodeID: number; \r\n public DimensionCode1ID: number; \r\n public DimensionCode2ID: number; \r\n public DimensionCode3ID: number; \r\n public DimensionCode4ID: number; \r\n public DimensionCode5ID: number; \r\n public LineID: number;\r\n}\r\n\r\n\r\n","import { ToolbarSettings } from './../../../../src/base/classes/BaseClasses';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Component } from '@angular/core';\r\nimport { DocumentEndpoint } from './../../_proxy/endpoints/document.endpoint';\r\nimport { Document } from '../../_proxy/entities/document.entity';\r\nimport {Location} from '@angular/common';\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 BasePageCRUDComponent {\r\n\r\n constructor(A: ServiceBagService, \r\n private documentEndpoint: DocumentEndpoint,\r\n private location: Location) {\r\n super(A, 'DocumentComponent', Document, BaseState, documentEndpoint);\r\n }\r\n\r\n override GetTitle(){\r\n // if(this.Entity.EntryID){\r\n // let documentType;\r\n\r\n // this.LIST('DocumentTypes').forEach(element => {\r\n // if(element.Value === this.Entity.DocumentType) documentType = element.Text;\r\n // });\r\n\r\n // return `${documentType} - ${this.Entity.DocumentNumber}`\r\n // }\r\n\r\n return `${this.RC('lblDocumentDetails')} - ${this.Entity.DocumentNumber}`;\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n\";","import { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\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 { Component, Input } from '@angular/core';\r\nimport { DocumentEndpoint } from '../../../_proxy/endpoints/document.endpoint';\r\nimport { DocumentView } from '../../../_proxy/views/document.view';\r\nimport { DocumentLineView } from '../../../_proxy/views/documentline.view';\r\nimport { PaymentEndpoint } from '../../../_proxy/endpoints/payment.endpoint';\r\nimport { PaymentListParams } from '../../../_proxy/params/paymentlist.param';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\n\r\nclass State extends BaseState{\r\n Lines: DocumentLineView[];\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\r\n @Input() Document: DocumentView;\r\n @Input() DocumentID: number;\r\n\r\n constructor(A: ServiceBagService, \r\n private documentEndpoint: DocumentEndpoint,\r\n private paymentEndpoint: PaymentEndpoint) {\r\n super(A, 'DocumentDetailsComponent', State);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.InitDocument();\r\n this.LoadLines();\r\n this.InitPayments();\r\n }\r\n\r\n //GoToJournalEntry(){\r\n // this.Navigate(['/pages/accounting-journal-entry', this.Document.JournalEntryID]);\r\n //}\r\n\r\n //GoToBusinessPartner() {\r\n // this.Navigate(['/pages/business-partner', this.Document.BusinessPartnerID]);\r\n //}\r\n\r\n private InitDocument() {\r\n if (this.Document == null) {\r\n this.Do(this.documentEndpoint.Get(this.DocumentID), false, (response: BaseEntityResponse) => {\r\n this.Document = response.Entity;\r\n this.LoadLines();\r\n })\r\n } else {\r\n this.DocumentID = this.Document.EntryID;\r\n }\r\n }\r\n\r\n private LoadLines(){\r\n this.Do(this.documentEndpoint.GetLines(this.DocumentID), false, (response) => {\r\n this.State.Lines = response.Entities;\r\n })\r\n }\r\n\r\n private InitPayments() {\r\n const params = new PaymentListParams();\r\n params.DocumentID = this.DocumentID;\r\n\r\n this.DataSources['Payments'] = new DataSourceCustomAction(\r\n (options: DataLoadOptions) => this.paymentEndpoint.ListEx(params, options), \r\n undefined,\r\n undefined, \r\n 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 \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n \\r\\n\\r\\n\\r\\n \\r\\n\";","import { DocumentLineView } from './../../../_proxy/views/documentline.view';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { Component, Input } from '@angular/core';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DocumentLine } from '@kraken/_proxy/entities/document.entity';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-document-lines-grid',\r\n templateUrl: './document-lines-grid.component.html',\r\n styleUrls: ['./document-lines-grid.component.scss']\r\n})\r\nexport class DocumentLinesGridComponent extends BaseGridComponent {\r\n\r\n @Input() DocumentCurrency: string;\r\n constructor(A: ServiceBagService) {\r\n super(A, 'DocumentLinesGridComponent', DocumentLine, BaseState);\r\n }\r\n\r\n IsShowDiscount() {\r\n if (this.DataSource && (this.DataSource as DocumentLineView[]).some(x => x.DiscountPercent > 0)) { return true; }\r\n\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
{{cell.data.Price | formatNumberPrice}}
\\r\\n {{cell.data.Currency | LookupList:LIST('Currencies'):'Symbol' }}\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
{{cell.data.Total | formatNumberSum}}
\\r\\n {{DocumentCurrency | LookupList:LIST('Currencies'):'Symbol' }}\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n\";","\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { AccountingJournalEntryView } from './../views/accountingjournalentry.view';\r\nimport { AccountingJournalEntryLineView } from './../views/accountingjournalentryline.view';\r\n@Injectable()\r\nexport class AccountingJournalEntryEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(api: APIGatewayService) {super(\"AccountingJournalEntry\", api);}\r\n\t\r\n\r\n public GetLines(AccountingJournalEntryID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetLines', {AccountingJournalEntryID: AccountingJournalEntryID} );\r\n }\r\n\r\n public override Get(AccountingJournalEntryID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'Get', {AccountingJournalEntryID: AccountingJournalEntryID} );\r\n }\r\n}\r\n\r\n","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntityReplication } from './../entities/baseentityreplication.entity';\r\nexport class AccountingJournalEntry extends BaseEntityReplication {\r\n constructor() {\r\n super();\r\n this.TypeName = 'AccountingJournalEntry';\r\n }\r\n \r\n public JournalNumber: number; \r\n public OriginatingDocumentType: string; \r\n public PostingDate: Date; \r\n public DueDate: Date; \r\n public TaxDate: Date; \r\n public Reference1: string; \r\n public Reference2: string; \r\n public Reference3: string; \r\n public Notes: string; \r\n public Lines: AccountingJournalEntryLine[] = []; \r\n\t\r\n}\r\n\r\nexport class AccountingJournalEntryLine extends BaseEntityReplication {\r\n constructor() {\r\n super();\r\n this.TypeName = 'AccountingJournalEntryLine';\r\n }\r\n \r\n public LineType: number; \r\n public LedgerAccountID: number; \r\n public BusinessPartnerID: number; \r\n public ContraAccountReference: string; \r\n public DebitLocal: number; \r\n public CreditLocal: number; \r\n public DebitForeign: number; \r\n public CreditForeign: number; \r\n public DebitSystem: number; \r\n public CreditSystem: number; \r\n public DebitLocalOpen: number; \r\n public CreditLocalOpen: number; \r\n public DebitForeignOpen: number; \r\n public CreditForeignOpen: number; \r\n public DebitSystemOpen: number; \r\n public CreditSystemOpen: number; \r\n public Reference1: string; \r\n public Reference2: string; \r\n public Reference3: string; \r\n public Notes: string; \r\n public PostingDate: Date; \r\n public DueDate: Date; \r\n public TaxDate: Date; \r\n public Currency: string; \r\n public IsLocalCurrency: boolean; \r\n public ProjectID: number; \r\n public DimensionCode1ID: number; \r\n public DimensionCode2ID: number; \r\n public DimensionCode3ID: number; \r\n public DimensionCode4ID: number; \r\n public DimensionCode5ID: number; \r\n public LineID: number;\r\n}\r\n\r\n\r\n","import { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component } from '@angular/core';\r\nimport { AccountingJournalEntry } from '../../_proxy/entities/accountingjournalentry.entity';\r\nimport { AccountingJournalEntryEndpoint } from '../../_proxy/endpoints/accountingjournalentry.endpoint';\r\nimport {Location} from '@angular/common';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-accounting-journal-entry',\r\n templateUrl: './accounting-journal-entry.component.html',\r\n styleUrls: ['./accounting-journal-entry.component.scss']\r\n})\r\nexport class AccountingJournalEntryComponent extends BasePageCRUDComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private accountingJournalEntryEndpoint: AccountingJournalEntryEndpoint,\r\n private location: Location) {\r\n super(A, 'AccountingJournalEntryComponent', AccountingJournalEntry, BaseState, accountingJournalEntryEndpoint);\r\n }\r\n\r\n override GetTitle(){\r\n if(this.Entity.EntryID){\r\n return `${this.RC('lblJournalEntry')} - ${this.Entity.JournalNumber}`;\r\n }\r\n }\r\n\r\n //override OnGetToolbarSettings() {\r\n // return {\r\n // ShowBackButton: true,\r\n // BackButtonClick: () => this.location.back()\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\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntityReplication } from './../entities/baseentityreplication.entity';\r\nexport class CompanyMetadata extends BaseEntityReplication {\r\n constructor() {\r\n super();\r\n this.TypeName = 'CompanyMetadata';\r\n }\r\n \r\n public LocalCurrency: string; \r\n public SystemCurrency: string; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { CompanyMetadata } from './../params/companymeta.data';\r\n@Injectable()\r\nexport class CompanyMetadataEndpoint extends BaseEndpoint\r\n{\r\n constructor(api: APIGatewayService) {super(\"CompanyMetadata\", api);}\r\n\t\r\n\r\n public GetByCompany(iCompanyID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetByCompany', {iCompanyID: iCompanyID} );\r\n }\r\n}\r\n\r\n","import { ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { Component, Input } from '@angular/core';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { AccountingJournalEntryView } from '../../../_proxy/views/accountingjournalentry.view';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { AccountingJournalEntryEndpoint } from '../../../_proxy/endpoints/accountingjournalentry.endpoint';\r\nimport { AccountingJournalEntryLineView } from '../../../_proxy/views/accountingjournalentryline.view';\r\nimport { EnumJournalEntryCurrencyTypes } from '../../../_proxy/enums';\r\nimport { CompanyMetadata } from '../../../_proxy/params/companymeta.data';\r\nimport { CompanyMetadataEndpoint } from '../../../_proxy/endpoints/companymetadata.endpoint';\r\n\r\nclass State extends BaseState {\r\n Lines: AccountingJournalEntryLineView[];\r\n CurrencyType: EnumJournalEntryCurrencyTypes;\r\n CompanyMetadata: CompanyMetadata; \r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-accounting-journal-entry-details',\r\n templateUrl: './accounting-journal-entry-details.component.html',\r\n styleUrls: ['./accounting-journal-entry-details.component.scss']\r\n})\r\nexport class AccountingJournalEntryDetailsComponent extends BaseComponent {\r\n\r\n @Input() AccountingJournalEntry: AccountingJournalEntryView;\r\n @Input() AccountingJournalEntryID: number;\r\n\r\n constructor(A: ServiceBagService, \r\n private accountingJournalEntryEndpoint: AccountingJournalEntryEndpoint,\r\n private companyMetadataEndpoint: CompanyMetadataEndpoint,) {\r\n super(A, 'AccountingJournalEntryDetailsComponent', State);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.State.CurrencyType = EnumJournalEntryCurrencyTypes.Local;\r\n\r\n this.InitAccountingJournalEntry();\r\n this.LoadLines();\r\n }\r\n\r\n GetOriginalDocument() {\r\n if (this.AccountingJournalEntry && this.AccountingJournalEntry.EntryID && this.AccountingJournalEntry.OriginalDocumentNumber) {\r\n let result: string;\r\n\r\n if (this.AccountingJournalEntry.IsPayment) {\r\n result = this.RC('lblPayment');\r\n } else {\r\n const list = this.LIST('DocumentTypes');\r\n\r\n list.forEach(item => {\r\n if (item.Value === this.AccountingJournalEntry.OriginalDocumentType) {\r\n result = item.Text;\r\n }\r\n });\r\n }\r\n\r\n return `${result} - ${this.AccountingJournalEntry.OriginalDocumentNumber}`;\r\n }\r\n }\r\n\r\n //GoToOriginalDocument() {\r\n // if (!this.AccountingJournalEntry.OriginalDocumentNumber) { return; }\r\n\r\n // const url = this.AccountingJournalEntry.IsPayment ? '/pages/payment' : '/pages/document';\r\n\r\n // this.Navigate([url, this.AccountingJournalEntry.OriginalDocumentID]);\r\n //}\r\n\r\n private InitAccountingJournalEntry() {\r\n if (this.AccountingJournalEntry == null) {\r\n this.Do(this.accountingJournalEntryEndpoint.Get(this.AccountingJournalEntryID), false, (response) => {\r\n this.AccountingJournalEntry = response.Entity;\r\n this.LoadCompanyMetadata();\r\n });\r\n } else {\r\n this.AccountingJournalEntryID = this.AccountingJournalEntry.EntryID;\r\n this.LoadCompanyMetadata();\r\n }\r\n }\r\n\r\n private LoadLines() {\r\n this.Do(this.accountingJournalEntryEndpoint.GetLines(this.AccountingJournalEntryID), false, (response) => {\r\n this.State.Lines = response.Entities;\r\n })\r\n }\r\n\r\n private LoadCompanyMetadata() {\r\n this.Do(this.companyMetadataEndpoint.GetByCompany(this.AccountingJournalEntry.CompanyID), false, (response) => {\r\n this.State.CompanyMetadata = response.Entity;\r\n\r\n if (!this.State.CompanyMetadata) {\r\n this.State.CompanyMetadata = new CompanyMetadata();\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\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { Component, Input } from '@angular/core';\r\nimport { AccountingJournalEntry, AccountingJournalEntryLine } from './../../../_proxy/entities/accountingjournalentry.entity';\r\nimport { EnumJournalEntryCurrencyTypes } from './../../../_proxy/enums';\r\nimport { AccountingJournalEntryLineView } from './../../../_proxy/views/accountingjournalentryline.view';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-accounting-journal-entry-lines-grid',\r\n templateUrl: './accounting-journal-entry-lines-grid.component.html',\r\n styleUrls: ['./accounting-journal-entry-lines-grid.component.scss']\r\n})\r\nexport class AccountingJournalEntryLinesGridComponent extends BaseGridComponent {\r\n\r\n @Input() JournalEntry: AccountingJournalEntry;\r\n @Input() CurrencyType: EnumJournalEntryCurrencyTypes;\r\n @Input() LocalCurrency: string;\r\n @Input() SystemCurrency: string;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'AccountingJournalEntryLinesGridComponent', AccountingJournalEntryLine, BaseState);\r\n }\r\n\r\n OnGoToBusinessPartner(businessPartnerID: number, ledgerAccountID: number, lineType: number) {\r\n if (lineType === 0) {\r\n this.Navigate(['/pages/business-partner', businessPartnerID]);\r\n } else {\r\n this.Navigate(['/pages/ledger-account', ledgerAccountID]);\r\n }\r\n }\r\n\r\n IsNotEmpty(fieldName: string) {\r\n if (this.DataSource && (this.DataSource as AccountingJournalEntryLineView[]).some(x => x[fieldName])) { return true; }\r\n\r\n return false;\r\n }\r\n\r\n IsShowStringField(fieldName: string) {\r\n if (this.DataSource && (this.DataSource as AccountingJournalEntryLineView[]).some(x => x[fieldName] && x[fieldName] !== this.JournalEntry[fieldName])) { return true; }\r\n\r\n return false;\r\n }\r\n\r\n IsShowDateField(fieldName: string) {\r\n if (this.DataSource && (this.DataSource as AccountingJournalEntryLineView[]).\r\n some(x => x[fieldName] && this.getDate(x[fieldName]) !== this.getDate(this.JournalEntry[fieldName]))) { return true; }\r\n\r\n return false;\r\n }\r\n\r\n GetDebit(line: AccountingJournalEntryLineView) {\r\n if (this.CurrencyType === EnumJournalEntryCurrencyTypes.System) { return line.DebitSystem; }\r\n if (this.CurrencyType === EnumJournalEntryCurrencyTypes.Foreign && !line.IsLocalCurrency) { return line.DebitForeign; }\r\n\r\n return line.DebitLocal;\r\n }\r\n\r\n GetCredit(line: AccountingJournalEntryLineView) {\r\n if (this.CurrencyType === EnumJournalEntryCurrencyTypes.System) { return line.CreditSystem; }\r\n if (this.CurrencyType === EnumJournalEntryCurrencyTypes.Foreign && !line.IsLocalCurrency) { return line.CreditForeign; }\r\n\r\n return line.CreditLocal;\r\n }\r\n\r\n GetDebitLabel() {\r\n if (this.CurrencyType === EnumJournalEntryCurrencyTypes.System) { return this.RC('lblDebitSystem'); }\r\n if (this.CurrencyType === EnumJournalEntryCurrencyTypes.Foreign) { return this.RC('lblDebitForeign'); }\r\n\r\n return this.RC('lblDebit');\r\n }\r\n\r\n GetCreditLabel() {\r\n if (this.CurrencyType === EnumJournalEntryCurrencyTypes.System) { return this.RC('lblCreditSystem'); }\r\n if (this.CurrencyType === EnumJournalEntryCurrencyTypes.Foreign) { return this.RC('lblCreditForeign'); }\r\n\r\n return this.RC('lblCredit');\r\n }\r\n\r\n GetCurrency(line: AccountingJournalEntryLineView) {\r\n if (this.CurrencyType === EnumJournalEntryCurrencyTypes.System) { return this.SystemCurrency; }\r\n if (this.CurrencyType === EnumJournalEntryCurrencyTypes.Foreign) { return line.Currency; }\r\n\r\n return this.LocalCurrency;\r\n }\r\n\r\n private getDate(value: any) {\r\n const date = value as Date;\r\n if (!date) { return null; }\r\n\r\n return date.getTime();\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
{{GetDebit(cell.data) | formatNumberSum}}
\\r\\n {{ GetCurrency(cell.data) | LookupList:LIST('Currencies'):'Symbol' }}\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
{{GetCredit(cell.data) | formatNumberSum}}
\\r\\n {{ GetCurrency(cell.data) | LookupList:LIST('Currencies'):'Symbol' }}\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\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 { BaseEntityReplication } from './../entities/baseentityreplication.entity';\r\nimport { EnumSide } from './../enums';\r\nexport class BusinessPartner extends BaseEntityReplication {\r\n constructor() {\r\n super();\r\n this.TypeName = 'BusinessPartner';\r\n }\r\n \r\n public AccountingCode: string; \r\n public Name: string; \r\n public ForeignName: string; \r\n public IncomeExpenseSide: EnumSide; \r\n public BankCode: string; \r\n public BankBranch: string; \r\n public BankAccountNumber: string; \r\n public ParentLedgerAccountID: number; \r\n public ISOCurrency: string; \r\n public IsLocalCurrency: boolean; \r\n public BalanceLocal: number; \r\n public BalanceForeign: number; \r\n public BalanceSystem: number; \r\n public BusinessPartnerGroupID: number; \r\n public SalesPersonID: number; \r\n public IsActive: boolean; \r\n public LicTradNum: string; \r\n public Currency: string; \r\n public Phone1: string; \r\n public Phone2: string; \r\n public PaymentGroupID: number; \r\n public DisplayName: string; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BusinessPartner } from './../entities/businesspartner.entity';\r\nimport { BaseEntityReplication } from './../entities/baseentityreplication.entity';\r\nexport class BusinessPartnerView extends BusinessPartner {\r\n constructor() {\r\n super();\r\n this.TypeName = 'BusinessPartnerView';\r\n }\r\n \r\n public BankAccountInfo: string; \r\n public GroupName: string; \r\n public SalesPersonName: string; \r\n public Balance: number; \r\n public CompanyName: string; \r\n public PaymentGroupName: string; \r\n public FullName: string; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseParamsFilter } from './../entities/baseparamsfilter.entity';\r\nimport { EnumSide } from './../enums';\r\nexport class DocumentListParams extends BaseParamsFilter {\r\n constructor() {\r\n super();\r\n this.TypeName = 'DocumentListParams';\r\n }\r\n \r\n public IncomeExpenseSide: EnumSide; \r\n public BusinessPartnerID: number; \r\n public IsOpen: boolean; \r\n public DateFrom: Date; \r\n public DateTo: Date; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { LedgerView } from './../views/ledger.view';\r\nimport { LedgerListParams } from './../params/ledgerlist.param';\r\n@Injectable()\r\nexport class LedgerEndpoint extends BaseEndpoint\r\n{\r\n constructor(api: APIGatewayService) {super(\"Ledger\", api);}\r\n \r\n public ListEx(Params: LedgerListParams) : Observable>\r\n {\r\n return this.api.ExecutePostAction(this.ControllerName, 'ListEx', Params, undefined );\r\n }\r\n}\r\n","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class LedgerListParams extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'LedgerListParams';\r\n }\r\n \r\n public LedgerAccountID: number; \r\n public BusinessPartnerID: number; \r\n public IsOpen: boolean; \r\n public DateFrom: Date; \r\n public DateTo: Date; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { DocumentEndpoint } from './../../_proxy/endpoints/document.endpoint';\r\nimport { PaymentEndpoint } from './../../_proxy/endpoints/payment.endpoint';\r\nimport { PaymentListParams } from './../../_proxy/params/paymentlist.param';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { Component, ViewChild } from '@angular/core';\r\nimport { BusinessPartnerEndpoint } from '../../_proxy/endpoints/businesspartner.endpoint';\r\nimport { BusinessPartnerView } from '../../_proxy/views/businesspartner.view';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { DocumentListParams } from '../../_proxy/params/documentlist.param';\r\nimport { LedgerEndpoint } from '../../_proxy/endpoints/ledger.endpoint';\r\nimport { LedgerView } from '../../_proxy/views/ledger.view';\r\nimport { LedgerListParams } from '../../_proxy/params/ledgerlist.param';\r\nimport {Location} from '@angular/common';\r\nimport { DocumentChartDialogComponent } from '../document/document-chart-dialog/document-chart-dialog.component';\r\nimport { PaymentChartDialogComponent } from '../payment/payment-chart-dialog/payment-chart-dialog.component';\r\nimport { LedgerChartDialogComponent } from '../ledger/ledger-chart-dialog/ledger-chart-dialog.component';\r\n\r\nclass State extends BaseState {\r\n CurrentTabIndex: number;\r\n Ledger: LedgerView[];\r\n\r\n IsOpen: boolean;\r\n DateFrom: Date;\r\n DateTo: Date;\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-business-partner',\r\n templateUrl: './business-partner.component.html',\r\n styleUrls: ['./business-partner.component.scss']\r\n})\r\nexport class BusinessPartnerComponent extends BasePageCRUDComponent {\r\n @ViewChild('documentChartDialog') documentChartDialog: DocumentChartDialogComponent;\r\n @ViewChild('paymentChartDialog') paymentChartDialog: PaymentChartDialogComponent;\r\n @ViewChild('ledgerChartDialog') ledgerChartDialog: LedgerChartDialogComponent;\r\n\r\n constructor(A: ServiceBagService,\r\n private businessPartnerEndpoint: BusinessPartnerEndpoint,\r\n private paymentEndpoint: PaymentEndpoint,\r\n private documentEndpoint: DocumentEndpoint,\r\n private ledgerEndpoing: LedgerEndpoint,\r\n private location: Location) {\r\n super(A, 'BusinessPartnerComponent', BusinessPartnerView, State, businessPartnerEndpoint);\r\n }\r\n\r\n override OnInitState() {\r\n this.State.IsOpen = false;\r\n this.State.DateFrom = new Date();\r\n this.State.DateFrom = new Date(this.State.DateFrom.getFullYear() - 1, this.State.DateFrom.getMonth(), this.State.DateFrom.getDate());\r\n }\r\n\r\n override OnInitComponent() {\r\n this.State.CurrentTabIndex = 0;\r\n this.InitPayments();\r\n this.InitDocuments();\r\n this.InitLedger();\r\n }\r\n\r\n override GetTitle() {\r\n if (this.Entity.EntryID) {\r\n const items = this.LIST('BusinessPartnerTypes').filter(x => x.Value === this.Entity.IncomeExpenseSide);\r\n\r\n if (items.length === 1) {\r\n return `${items[0].Text} - ${this.Entity.Name ?? ''} [${this.Entity.AccountingCode}]`; \r\n }\r\n }\r\n }\r\n\r\n OnTabItemClick(e) {\r\n if (this.State.CurrentTabIndex !== e.itemIndex) {\r\n this.State.CurrentTabIndex = e.itemIndex;\r\n this.InitDocuments();\r\n this.InitPayments();\r\n this.InitLedger();\r\n }\r\n }\r\n\r\n LoadDocuments(params: DocumentListParams) {\r\n this.State.IsOpen = params.IsOpen;\r\n this.State.DateFrom = params.DateFrom;\r\n this.State.DateTo = params.DateTo;\r\n\r\n this.InitDocuments();\r\n }\r\n\r\n LoadPayments(params: PaymentListParams) {\r\n this.State.DateFrom = params.DateFrom;\r\n this.State.DateTo = params.DateTo;\r\n\r\n this.InitPayments();\r\n }\r\n\r\n LoadLedger(params: LedgerListParams) {\r\n this.State.IsOpen = params.IsOpen;\r\n this.State.DateFrom = params.DateFrom;\r\n this.State.DateTo = params.DateTo;\r\n\r\n this.InitLedger();\r\n }\r\n\r\n OnDocumentChartClick() {\r\n this.documentChartDialog.ShowDialogShort(undefined);\r\n }\r\n\r\n OnPaymentChartClick() {\r\n this.paymentChartDialog.ShowDialogShort(undefined);\r\n }\r\n\r\n OnLedgerChartClick() {\r\n this.ledgerChartDialog.ShowDialogShort(undefined);\r\n }\r\n\r\n private InitDocuments() {\r\n if (this.State.CurrentTabIndex !== 0) {\r\n return; \r\n }\r\n\r\n const params = new DocumentListParams();\r\n params.IsOpen = this.State.IsOpen;\r\n params.DateFrom = this.State.DateFrom;\r\n params.DateTo = this.State.DateTo;\r\n params.BusinessPartnerID = this.EntityEntryID;\r\n\r\n this.DataSources['Documents'] = new DataSourceCustomAction((options: DataLoadOptions) => this.documentEndpoint.ListEx(params, options), undefined, undefined, false);\r\n\r\n this.DataSources['DocumentsChart'] = new DataSourceCustomAction(() => this.documentEndpoint.ListEx(params, null), undefined, undefined, false);\r\n }\r\n\r\n private InitPayments() {\r\n if (this.State.CurrentTabIndex !== 1) {\r\n return; \r\n }\r\n\r\n const params = new PaymentListParams();\r\n params.DateFrom = this.State.DateFrom;\r\n params.DateTo = this.State.DateTo;\r\n params.BusinessPartnerID = this.EntityEntryID;\r\n\r\n this.DataSources['Payments'] = new DataSourceCustomAction((options: DataLoadOptions) => this.paymentEndpoint.ListEx(params, options), undefined, undefined, false);\r\n\r\n this.DataSources['PaymentsChart'] = new DataSourceCustomAction((options: DataLoadOptions) => this.paymentEndpoint.ListEx(params, null), undefined, undefined, false);\r\n }\r\n\r\n private InitLedger() {\r\n if (this.State.CurrentTabIndex !== 2) {\r\n return; \r\n }\r\n\r\n const params = new LedgerListParams();\r\n params.IsOpen = this.State.IsOpen;\r\n params.DateFrom = this.State.DateFrom;\r\n params.DateTo = this.State.DateTo;\r\n params.BusinessPartnerID = this.EntityEntryID;\r\n\r\n this.DataSources['Ledger'] = new DataSourceCustomAction(() => this.ledgerEndpoing.ListEx(params));\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\";","\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { BusinessPartnerGroup } from './../entities/businesspartnergroup.entity';\r\nimport { BusinessPartnerGroupListParams } from './../params/businesspartnergrouplist.param';\r\n@Injectable()\r\nexport class BusinessPartnerGroupEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(api: APIGatewayService) {super(\"BusinessPartnerGroup\", api);}\r\n\t\r\n\r\n public ListEx(Params: BusinessPartnerGroupListParams, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListEx', Params, options?.GetLoadOptions() );\r\n }\r\n}\r\n\r\n","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseParamsFilter } from './../entities/baseparamsfilter.entity';\r\nimport { EnumSide } from './../enums';\r\nexport class BusinessPartnerGroupListParams extends BaseParamsFilter {\r\n constructor() {\r\n super();\r\n this.TypeName = 'BusinessPartnerGroupListParams';\r\n }\r\n \r\n public IncomeExpenseSide: EnumSide; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { SalesPerson } from './../entities/salesperson.entity';\r\nimport { SalesPersonListParams } from './../params/salespersonlist.param';\r\n@Injectable()\r\nexport class SalesPersonEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(api: APIGatewayService) {super(\"SalesPerson\", api);}\r\n\t\r\n\r\n public ListEx(Params: SalesPersonListParams, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListEx', Params, options?.GetLoadOptions() );\r\n }\r\n}\r\n\r\n","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseParamsFilter } from './../entities/baseparamsfilter.entity';\r\nexport class SalesPersonListParams extends BaseParamsFilter {\r\n constructor() {\r\n super();\r\n this.TypeName = 'SalesPersonListParams';\r\n }\r\n \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { SalesPerson } from './../../../_proxy/entities/salesperson.entity';\r\nimport { BusinessPartnerGroup } from './../../../_proxy/entities/businesspartnergroup.entity';\r\nimport { BusinessPartnerListParams } from './../../../_proxy/params/businesspartnerlist.param';\r\nimport { BusinessPartnerEndpoint } from './../../../_proxy/endpoints/businesspartner.endpoint';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, ViewChild } from '@angular/core';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { EnumSide } from '../../../_proxy/enums';\r\nimport { BusinessPartnerGroupEndpoint } from '../../../_proxy/endpoints/businesspartnergroup.endpoint';\r\nimport { BusinessPartnerGridComponent } from '../business-partner-grid/business-partner-grid.component';\r\nimport { NavigatorService } from '@m4u-angular/core/framework/navigator.service';\r\nimport { BaseReportComponent, BaseReportState } from '../../base-report/base-report.component';\r\nimport { FilterSettings } from '../../../components/filter/filter.component';\r\nimport { Globals } from '../../../_globals';\r\nimport { BusinessPartnerGroupListParams } from '../../../_proxy/params/businesspartnergrouplist.param';\r\nimport { SalesPersonEndpoint } from '../../../_proxy/endpoints/salesperson.endpoint';\r\nimport { SalesPersonListParams } from '../../../_proxy/params/salespersonlist.param';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\n\r\nclass State extends BaseReportState {\r\n IsActive: boolean;\r\n Side: EnumSide;\r\n Groups: number[];\r\n SalesPersons: number[];\r\n\r\n GroupsList: BusinessPartnerGroup[];\r\n SalesPersonsList: SalesPerson[];\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-business-partner-list',\r\n templateUrl: './business-partner-list.component.html',\r\n styleUrls: ['./business-partner-list.component.scss']\r\n})\r\nexport class BusinessPartnerListComponent extends BaseReportComponent {\r\n\r\n\r\n @ViewChild('businessPartnerGrid') reportGrid: BusinessPartnerGridComponent;\r\n\r\n constructor(A: ServiceBagService,\r\n private businessPartnerEndpoint: BusinessPartnerEndpoint,\r\n private businessPartnerGroupEndpoint: BusinessPartnerGroupEndpoint,\r\n private salesPersonEndpoint: SalesPersonEndpoint,\r\n private navigatorService: NavigatorService) {\r\n super(A, 'BusinessPartnerListComponent', State);\r\n }\r\n\r\n override OnInitState() {\r\n this.State.Side = this.navigatorService.GetCustomRouteData().Side;\r\n this.State.IsActive = true;\r\n }\r\n\r\n override GetTitle() {\r\n let result;\r\n if (this.State.Side === EnumSide.Income) result = this.RC('ttlCustomers');\r\n else result = this.RC('ttlVendors');\r\n\r\n return result;\r\n }\r\n\r\n OnFilterValuesChanged() {\r\n this.LoadBusinessPartnerGroups();\r\n this.LoadSalesPerson();\r\n this.State.Groups = [];\r\n this.State.SalesPersons = [];\r\n }\r\n\r\n protected override OnGetCustomFilterSettings() {\r\n return {\r\n Company: { IsVisible: true }\r\n } as FilterSettings;\r\n }\r\n\r\n protected override OnResetFilterValues() {\r\n super.OnResetFilterValues();\r\n this.State.Groups = [];\r\n this.State.SalesPersons = [];\r\n }\r\n\r\n protected override OnLoadData() {\r\n if (!Globals.OrganizationID) {\r\n this.DataSources['BusinessPartners'] = undefined;\r\n return;\r\n }\r\n\r\n const params = this.GetParams();\r\n params.LoadActive = this.State.IsActive;\r\n params.BusinessPartnerGroups = this.State.Groups;\r\n params.SalesPersons = this.State.SalesPersons;\r\n params.IncomeExpenseSides = [this.State.Side];\r\n\r\n this.DataSources['BusinessPartners'] = new DataSourceCustomAction(\r\n (options: DataLoadOptions) => this.businessPartnerEndpoint.ListEx(params, options), undefined, undefined, false);\r\n }\r\n\r\n private LoadBusinessPartnerGroups() {\r\n if (!this.State.FilterValues.Company) {\r\n this.State.GroupsList = [];\r\n return;\r\n }\r\n\r\n const params = new BusinessPartnerGroupListParams();\r\n params.OrganizationID = Globals.OrganizationID;\r\n params.Companies = this.State.FilterValues.Company ? [this.State.FilterValues.Company as number] : [];\r\n params.IncomeExpenseSide = this.State.Side;\r\n\r\n this.Do(this.businessPartnerGroupEndpoint.ListEx(params, null), false, (response) => {\r\n this.State.GroupsList = response.Entities;\r\n });\r\n }\r\n\r\n private LoadSalesPerson() {\r\n if (!this.State.FilterValues.Company) {\r\n this.State.SalesPersonsList = [];\r\n return;\r\n }\r\n\r\n const params = new SalesPersonListParams();\r\n params.OrganizationID = Globals.OrganizationID;\r\n params.Companies = this.State.FilterValues.Company ? [this.State.FilterValues.Company as number] : [];\r\n\r\n this.Do(this.salesPersonEndpoint.ListEx(params, null), false, (response) => {\r\n this.State.SalesPersonsList = response.Entities;\r\n });\r\n }\r\n\r\n protected override OnGetToolbarSettings(): ToolbarSettings {\r\n const settings = super.OnGetToolbarSettings();\r\n if (settings && this.A.Screen.IsDesktop()) {\r\n settings.IsAllowPrint = false;\r\n }\r\n return settings;\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\";","import { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { Component } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BusinessPartner } from '@kraken/_proxy/entities/businesspartner.entity';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-business-partner-grid',\r\n templateUrl: './business-partner-grid.component.html',\r\n styleUrls: ['./business-partner-grid.component.scss']\r\n})\r\nexport class BusinessPartnerGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'BusinessPartnerGridComponent', BusinessPartner, BaseState);\r\n }\r\n\r\n override OnInitComponentFinished()\r\n {\r\n super.OnInitComponentFinished();\r\n if (this.G) this.G.grid.columnHidingEnabled = false;\r\n }\r\n\r\n OnNavigate(e){\r\n if(e.data && e.data.EntryID){\r\n this.Navigate(['/pages/business-partner', e.data.EntryID]);\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
{{cell.data.CompanyName}}
\\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}}
\\r\\n {{cell.data.Currency | LookupList:LIST('Currencies'):'Symbol' }}\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
{{cell.data.GroupName}}
\\r\\n
\\r\\n \\r\\n
{{cell.data.SalesPersonName}}
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n
{{cell.data.PaymentGroupName}}
\\r\\n
\\r\\n\\r\\n\\r\\n \\r\\n\\r\\n
\";","import { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { DocumentListParams } from '../../../_proxy/params/documentlist.param';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { Document } from '@kraken/_proxy/entities/document.entity';\r\n\r\nclass State extends BaseState {\r\n IsOpen: boolean;\r\n DateFrom: Date;\r\n DateTo: Date;\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\r\n @Input() Name: string;\r\n @Input() IsReport = true;\r\n @Input() IsOnlyDatesFilter = true;\r\n @Input() set IsOpen(value: boolean) {\r\n this.State.IsOpen = value;\r\n }\r\n @Input() set DateFrom(value: Date) {\r\n this.State.DateFrom = value;\r\n }\r\n @Input() set DateTo(value: Date) {\r\n this.State.DateTo = value;\r\n }\r\n\r\n @Output() FilterChanged: EventEmitter = new EventEmitter();\r\n @Output() ChartClick: EventEmitter = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService,\r\n public screen: ScreenService) {\r\n super(A, 'DocumentGridComponent', Document, State);\r\n }\r\n\r\n OnItemClick(e) {\r\n if (e.data.EntryID) { this.Navigate(['pages/document', e.data.EntryID]); }\r\n }\r\n\r\n OnFilterChanged() {\r\n const params = new DocumentListParams();\r\n params.IsOpen = this.State.IsOpen;\r\n params.DateFrom = this.State.DateFrom;\r\n params.DateTo = this.State.DateTo;\r\n\r\n this.FilterChanged.emit(params);\r\n }\r\n\r\n OnToolbarPreparing(e) {\r\n e.toolbarOptions.items.push({\r\n location: 'after',\r\n template: 'showFilter',\r\n isCustom: true\r\n });\r\n }\r\n\r\n OnChartClick(e) {\r\n this.ChartClick.emit();\r\n }\r\n\r\n GetStatusColor(data) {\r\n return data.IsOpen ? 'cinnabar' : 'green-cyan';\r\n }\r\n\r\n protected override OnGetCustomComponentStateName() {\r\n return `${this.Name}.${this.ComponentName}`;\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\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}}
\\r\\n {{cell.data.Currency | LookupList:LIST('Currencies'):'Symbol' }}\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
{{cell.data.Vat | formatNumberSum}}
\\r\\n {{cell.data.Currency | LookupList:LIST('Currencies'):'Symbol' }}\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
{{cell.data.TotalAfterVat | formatNumberSum}}
\\r\\n {{cell.data.Currency | LookupList:LIST('Currencies'):'Symbol' }}\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n\";","\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { LedgerAccountView } from './../views/ledgeraccount.view';\r\nimport { LedgerAccountListParams } from './../params/ledgeraccountlist.param';\r\n@Injectable()\r\nexport class LedgerAccountEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(api: APIGatewayService) {super(\"LedgerAccount\", api);}\r\n\t\r\n\r\n public ListEx(Params: LedgerAccountListParams, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListEx', Params, options?.GetLoadOptions() );\r\n }\r\n}\r\n\r\n","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntityReplication } from './../entities/baseentityreplication.entity';\r\nimport { EnumLedgerAccountType } from './../enums';\r\nexport class LedgerAccount extends BaseEntityReplication {\r\n constructor() {\r\n super();\r\n this.TypeName = 'LedgerAccount';\r\n }\r\n \r\n public AccountingCode: string; \r\n public Name: string; \r\n public ParentLedgerAccountGroupID: number; \r\n public SortOrder: number; \r\n public BalanceLocal: number; \r\n public BalanceForeign: number; \r\n public BalanceSystem: number; \r\n public ISOCurrency: string; \r\n public IsLocalCurrency: boolean; \r\n public IsActive: boolean; \r\n public AccountType: EnumLedgerAccountType; \r\n public IsLiableVAT: boolean; \r\n public Currency: string; \r\n public DisplayName: string; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { LedgerAccount } from './../entities/ledgeraccount.entity';\r\nimport { BaseEntityReplication } from './../entities/baseentityreplication.entity';\r\nexport class LedgerAccountView extends LedgerAccount\r\n{ \r\n public Balance: number; \r\n public GroupName: string; \r\n public CompanyName: string; \r\n public FullName: string; \r\n \r\n}\r\n\r\n\r\n","import { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { Component, ViewChild } from '@angular/core';\r\nimport { LedgerAccountEndpoint } from '../../_proxy/endpoints/ledgeraccount.endpoint';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { LedgerAccountView } from '../../_proxy/views/ledgeraccount.view';\r\nimport { Location } from '@angular/common';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { LedgerListParams } from '../../_proxy/params/ledgerlist.param';\r\nimport { LedgerEndpoint } from '../../_proxy/endpoints/ledger.endpoint';\r\nimport { LedgerView } from '../../_proxy/views/ledger.view';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { LedgerChartDialogComponent } from '../ledger/ledger-chart-dialog/ledger-chart-dialog.component';\r\n\r\nclass State extends BaseState {\r\n Ledger: LedgerView[];\r\n\r\n DefaultIsOpen: boolean;\r\n DefaultDateFrom: Date;\r\n DefaultDateTo: Date;\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-ledger-account',\r\n templateUrl: './ledger-account.component.html',\r\n styleUrls: ['./ledger-account.component.scss']\r\n})\r\nexport class LedgerAccountComponent extends BasePageCRUDComponent {\r\n\r\n\r\n @ViewChild('ledgerChartDialog') ledgerChartDialog: LedgerChartDialogComponent;\r\n\r\n constructor(A: ServiceBagService,\r\n private ledgerAccountEndpoint: LedgerAccountEndpoint,\r\n private ledgerEndpoing: LedgerEndpoint,\r\n private location: Location) {\r\n super(A, 'LedgerAccountComponent', LedgerAccountView, State, ledgerAccountEndpoint);\r\n }\r\n\r\n override OnInitState() {\r\n const params = this.A.Navigator.GetQueryParams(this.DisplayMode === EnumPageDisplayModes.Window);\r\n\r\n if (params.DateFrom || params.DateTo || params.IsOpen) {\r\n this.State.DefaultDateFrom = params.DateFrom;\r\n this.State.DefaultDateTo = params.DateTo;\r\n this.State.DefaultIsOpen = params.IsOpen === 'true';\r\n } else {\r\n this.State.DefaultDateFrom = new Date();\r\n this.State.DefaultDateFrom = new Date(this.State.DefaultDateFrom.getFullYear(), this.State.DefaultDateFrom.getMonth(), 1);\r\n this.State.DefaultIsOpen = true;\r\n }\r\n }\r\n\r\n override OnInitComponent() {\r\n this.InitLedger();\r\n }\r\n\r\n override GetTitle() {\r\n if (this.Entity.EntryID) {\r\n return `${this.RC('lblLedgerAccount')} - ${this.Entity.Name ?? ''} [${this.Entity.AccountingCode}]`;\r\n }\r\n }\r\n\r\n //override OnGetToolbarSettings() {\r\n // return {\r\n // ShowBackButton: true,\r\n // BackButtonClick: () => this.location.back()\r\n // } as ToolbarSettings;\r\n //}\r\n\r\n LoadLedger(params: LedgerListParams) {\r\n params.LedgerAccountID = this.EntityEntryID;\r\n\r\n this.DataSources['Ledger'] = new DataSourceCustomAction((options: DataLoadOptions) => this.ledgerEndpoing.ListEx(params));\r\n }\r\n\r\n OnLedgerChartClick() {\r\n this.ledgerChartDialog.ShowDialogShort(undefined);\r\n }\r\n\r\n private InitLedger() {\r\n\r\n const defaultParams = new LedgerListParams();\r\n defaultParams.IsOpen = this.State.DefaultIsOpen;\r\n defaultParams.DateFrom = this.State.DefaultDateFrom;\r\n\r\n this.LoadLedger(defaultParams);\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { Component, Input, EventEmitter, Output } from '@angular/core';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { LedgerListParams } from './../../../_proxy/params/ledgerlist.param';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { EnumJournalEntryDocumentType } from './../../../_proxy/enums';\r\nimport { LedgerView } from './../../../_proxy/views/ledger.view';\r\n\r\nclass State extends BaseState {\r\n IsOpen: boolean;\r\n DateFrom: Date;\r\n DateTo: Date;\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-ledger-grid',\r\n templateUrl: './ledger-grid.component.html',\r\n styleUrls: ['./ledger-grid.component.scss']\r\n})\r\nexport class LedgerGridComponent extends BaseGridComponent {\r\n\r\n @Input() Name: string;\r\n @Input() set IsOpen(value: boolean) {\r\n this.State.IsOpen = value;\r\n }\r\n @Input() set DateFrom(value: Date) {\r\n this.State.DateFrom = value;\r\n }\r\n @Input() set DateTo(value: Date) {\r\n this.State.DateTo = value;\r\n }\r\n\r\n @Output() FilterChanged: EventEmitter = new EventEmitter();\r\n @Output() ChartClick: EventEmitter = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService,\r\n public screen: ScreenService) {\r\n super(A, 'LedgerGridComponent', BaseEntity, State);\r\n }\r\n\r\n OnFilterChanged() {\r\n const params = new LedgerListParams();\r\n params.IsOpen = this.State.IsOpen;\r\n params.DateFrom = this.State.DateFrom;\r\n params.DateTo = this.State.DateTo;\r\n\r\n this.FilterChanged.emit(params);\r\n }\r\n\r\n OnToolbarPreparing(e) {\r\n e.toolbarOptions.items.push({\r\n location: 'after',\r\n template: 'showFilter',\r\n isCustom: true\r\n });\r\n }\r\n\r\n GetStatusColor(data) {\r\n return data.IsOpen ? 'cinnabar' : 'green-cyan';\r\n }\r\n\r\n IsDocumentNumberLinkDisabled = (cell) => {\r\n return cell.data.DocumentNumber === 0;\r\n }\r\n\r\n OnGoToDocument(cell) {\r\n const ledger: LedgerView = cell.data;\r\n if (ledger.DocumentEntryID === 0) { return; }\r\n\r\n switch (ledger.JournalEntryDocumentType) {\r\n case EnumJournalEntryDocumentType.Document: {\r\n this.Navigate(['/pages/document', ledger.DocumentEntryID]);\r\n break;\r\n }\r\n case EnumJournalEntryDocumentType.Payment: {\r\n this.Navigate(['/pages/payment', ledger.DocumentEntryID]);\r\n break;\r\n }\r\n case EnumJournalEntryDocumentType.JournalEntry: {\r\n this.Navigate(['/pages/accounting-journal-entry', ledger.DocumentEntryID]);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n IsJournalEntryLinkDisabled = (cell) => {\r\n return cell.data.JournalNumber === 0;\r\n }\r\n\r\n OnGoToJournalEntry(cell) {\r\n const ledger: LedgerView = cell.data;\r\n if (ledger.JournalEntryID !== 0) { this.Navigate(['/pages/accounting-journal-entry', ledger.JournalEntryID]); }\r\n }\r\n\r\n OnChartClick(e) {\r\n this.ChartClick.emit();\r\n }\r\n\r\n OnDateRangeSelected(e) {\r\n if (!e.itemData) { return; }\r\n this.State.DateFrom = e.itemData.DateFrom;\r\n this.State.DateTo = e.itemData.DateTo;\r\n\r\n this.OnFilterChanged();\r\n }\r\n\r\n protected override OnGetCustomComponentStateName() {\r\n return `${this.Name}.${this.ComponentName}`;\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\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
{{cell.data.Debit | formatNumberPrice}}
\\r\\n {{cell.data.Currency | LookupList:LIST('Currencies'):'Symbol' }}\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
{{cell.data.DebitOpen | formatNumberPrice}}
\\r\\n {{cell.data.Currency | LookupList:LIST('Currencies'):'Symbol' }}\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
{{cell.data.Credit | formatNumberPrice}}
\\r\\n {{cell.data.Currency | LookupList:LIST('Currencies'):'Symbol' }}\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
{{cell.data.CreditOpen | formatNumberPrice}}
\\r\\n {{cell.data.Currency | LookupList:LIST('Currencies'):'Symbol' }}\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
{{cell.data.Balance | formatNumberPrice}}
\\r\\n {{cell.data.Currency | LookupList:LIST('Currencies'):'Symbol' }}\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
{{cell.data.BalanceOpen | formatNumberPrice}}
\\r\\n {{cell.data.Currency | LookupList:LIST('Currencies'):'Symbol'}}\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n\";","import { DocumentEndpoint } from './../../../_proxy/endpoints/document.endpoint';\r\nimport { EnumSide } from './../../../_proxy/enums';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, ViewChild } from '@angular/core';\r\nimport { NavigatorService } from '@m4u-angular/core/framework/navigator.service';\r\nimport { DocumentGridComponent } from '../document-grid/document-grid.component';\r\nimport { BaseReportComponent, BaseReportState } from '../../base-report/base-report.component';\r\nimport { FilterSettings } from '../../../components/filter/filter.component';\r\nimport { DocumentListParams } from './../../../_proxy/params/documentlist.param';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { Globals } from '../../../_globals';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\n\r\nclass State extends BaseReportState{\r\n Side: EnumSide;\r\n DateFrom: Date;\r\n DateTo: Date;\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\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 BaseReportComponent {\r\n\r\n @ViewChild('documentGrid') reportGrid: DocumentGridComponent;\r\n\r\n constructor(A: ServiceBagService,\r\n private documentEndpoint: DocumentEndpoint,\r\n private navigatorService: NavigatorService) {\r\n super(A, 'DocumentListComponent', State);\r\n }\r\n\r\n override OnInitState() {\r\n this.State.Side = this.navigatorService.GetCustomRouteData().Side;\r\n\r\n this.State.DateFrom = new Date();\r\n this.State.DateFrom.setMonth(this.State.DateFrom.getMonth() - 1);\r\n }\r\n\r\n protected override OnGetCustomFilterSettings() {\r\n return {\r\n Company: { IsVisible: true },\r\n BusinessPartner: { IsVisible: true }\r\n } as FilterSettings;\r\n }\r\n\r\n protected override OnLoadData() {\r\n if (!Globals.OrganizationID) {\r\n this.DataSources['Documents'] = undefined;\r\n return;\r\n }\r\n\r\n const params = this.GetParams();\r\n params.IncomeExpenseSide = this.State.Side;\r\n params.DateFrom = this.State.DateFrom;\r\n params.DateTo = this.State.DateTo;\r\n\r\n this.DataSources['Documents'] = new DataSourceCustomAction(\r\n (options: DataLoadOptions) => this.documentEndpoint.ListEx(params, options), \r\n undefined, \r\n undefined, \r\n false\r\n );\r\n }\r\n \r\n protected override OnGetToolbarSettings(): ToolbarSettings {\r\n const settings = super.OnGetToolbarSettings();\r\n if(settings && this.A.Screen.IsDesktop()){\r\n settings.IsAllowPrint = false;\r\n }\r\n return settings;\r\n }\r\n\r\n LoadPayments(params: DocumentListParams) {\r\n this.State.DateFrom = params.DateFrom;\r\n this.State.DateTo = params.DateTo;\r\n\r\n this.OnLoadData();\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\";","import { ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, Input } from '@angular/core';\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 } from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-document-chart-dialog',\r\n templateUrl: './document-chart-dialog.component.html',\r\n styleUrls: ['./document-chart-dialog.component.scss']\r\n})\r\nexport class DocumentChartDialogComponent extends BasePageComponent {\r\n\r\n @Input() DataSource: any;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'DocumentChartDialogComponent', BaseEntity, BaseState, EnumPageDisplayModes.Dialog);\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 { ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Component, Input } from '@angular/core';\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 } from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-payment-chart-dialog',\r\n templateUrl: './payment-chart-dialog.component.html',\r\n styleUrls: ['./payment-chart-dialog.component.scss']\r\n})\r\nexport class PaymentChartDialogComponent extends BasePageComponent {\r\n\r\n @Input() DataSource: any;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'PaymentChartDialogComponent', BaseEntity, BaseState, EnumPageDisplayModes.Dialog);\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 { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\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\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-bankpass-list-page',\r\n templateUrl: './bankpass-list-page.component.html'\r\n})\r\nexport class BankpassListPageComponent extends BasePageComponent\r\n{\r\n constructor(A: ServiceBagService)\r\n {\r\n super(A, 'BankpassListPageComponent', BaseEntity, 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\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { Interest } from './../entities/interest.entity';\r\n@Injectable()\r\nexport class InterestEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(api: APIGatewayService) {super(\"Interest\", api);}\r\n \r\n}\r\n","\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { Index } from './../entities/index.entity';\r\n@Injectable()\r\nexport class IndexEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(api: APIGatewayService) {super(\"Index\", api);}\r\n \r\n}\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumLoanSide } from './../enums';\r\nimport { EnumLoanStatus } from './../enums';\r\nimport { EnumLoanInterestPeriodCalculationType } from './../enums';\r\nimport { EnumLoanPaymentFrequencyType } from './../enums';\r\nimport { EnumAmortizationType } from './../enums';\r\nimport { EnumInterestType } from './../enums';\r\nexport class Loan extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'Loan';\r\n }\r\n \r\n public Side: EnumLoanSide; \r\n public Status: EnumLoanStatus; \r\n public InterestPeriodCalculationType: EnumLoanInterestPeriodCalculationType; \r\n public OurReferenceNumber: string; \r\n public BankReferenceNumber: string; \r\n public Notes: string; \r\n public BookingAccountID: number; \r\n public FundingBookingAccountID: number; \r\n public PaymentBookingAccountID: number; \r\n public LoanBookingAccountCodePrincipal: string; \r\n public LoanBookingAccountCodePrincipalLinkage: string; \r\n public LoanBookingAccountCodeInterest: string; \r\n public LoanBookingAccountCodeInterestLinkage: string; \r\n public LoanBookingAccountCodeCommissions: string; \r\n public Amount: number; \r\n public SigningDate: Date; \r\n public FundingDate: Date; \r\n public FirstPaymentDate: Date; \r\n public LastPaymentDate: Date; \r\n public GracePrincipalPeriods: number; \r\n public GraceInterestPeriods: number; \r\n public UniqueLoanID: number; \r\n public PaymentFrequencyType: EnumLoanPaymentFrequencyType; \r\n public NumberOfPayments: number; \r\n public AmortizationType: EnumAmortizationType; \r\n public LinkageIndexID: number; \r\n public LinkageBasePeriod: Date; \r\n public LinkageBaseIndexValue: number; \r\n public InterestType: EnumInterestType; \r\n public InterestLinkageIndexID: number; \r\n public InterestSuprlusPercent: number; \r\n public InterestLinkageFrequency: number; \r\n public SetupComissionFeeAmount: number; \r\n public PeriodicCommisionFeeAmount: number; \r\n public FundingJournalEntryID: number; \r\n public RecycleLoanID: number; \r\n public IsManualEdited: boolean; \r\n public IsAutoPosting: boolean; \r\n public PastPayments: number; \r\n public NotCreateFundingJE: boolean; \r\n public IsMarked: boolean; \r\n public ClosingJournalEntryID: number; \r\n public ShowLateInterest: boolean; \r\n public CompanyID: number; \r\n public AccountID: number; \r\n public FundingAccountID: number; \r\n public PaymentAccountID: number; \r\n public BookingAccountName: string; \r\n public HasPaidPaymets: boolean; \r\n public RemainingTotal: number; \r\n public NextPaymentDate: Date; \r\n public Bank: string; \r\n public TotalInterest: number; \r\n public ConsiderNoneBusinessDays: boolean; \r\n public UseKnownIndex: boolean; \r\n public LoanName: string; \r\n public ResetPayments: boolean; \r\n public CompanyName: string; \r\n public AccountName: string; \r\n public LinkageIndexName: string; \r\n public LastLoanDate: Date; \r\n\tpublic CreatedBy: number;\r\n\tpublic CreatedDate: Date;\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumLoanPaymentInterestPrincipalType } from './../enums';\r\nexport class LoanPayment extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'LoanPayment';\r\n }\r\n \r\n public LoanID: number; \r\n public PaymentNumber: number; \r\n public ExpectedDate: Date; \r\n public AdjustedDate: Date; \r\n public PaymentDate: Date; \r\n public IsOpen: boolean; \r\n public OpeningPrincipalBalance: number; \r\n public InterestDays: number; \r\n public InterestActualIndexValue: number; \r\n public InterestYearlyRate: number; \r\n public InterestActualRate: number; \r\n public LinkageActualIndexValue: number; \r\n public LinkageActualRate: number; \r\n public DuePrincipal: number; \r\n public DueInterest: number; \r\n public DueComission: number; \r\n public DueTotal: number; \r\n public PrincipalLinkageSurplus: number; \r\n public InterestLinkageSurplus: number; \r\n public DueTotalLinked: number; \r\n public ClosingPrincipalBalance: number; \r\n public ClosingPrincipalBalancedLinked: number; \r\n public JournalEntryID: number; \r\n public TransactionID: number; \r\n public PaymentType: EnumLoanPaymentInterestPrincipalType; \r\n public BasicInterest: number; \r\n public LateInterest: number; \r\n public IsLinkage: boolean; \r\n public BookingAcountID: number; \r\n public LoanOurReferenceNumber: string; \r\n public LoanBankReferenceNumber: string; \r\n public IsInterestOnly: boolean; \r\n\tpublic CreatedBy: number;\r\n\tpublic CreatedDate: Date;\r\n}\r\n\r\n\r\n\r\n","import { Component, ViewChild } from '@angular/core';\r\nimport { AccountEndpoint } from '@kraken/_proxy/endpoints/account.endpoint';\r\nimport { InterestEndpoint } from '@kraken/_proxy/endpoints/interest.endpoint';\r\nimport { Account } from '@kraken/_proxy/entities/account.entity';\r\nimport { BookingAccountView } from '@kraken/_proxy/views/bookingaccount.view';\r\nimport { ContextMenuElement, ToolbarSettings } 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 { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { BaseEntity, BaseState, GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { FrameworkService } from '@m4u-angular/core/framework/framework.service';\r\nimport { EnumCRUDActions, EnumMessageBoxTypes, EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { DateHelpers } from '@m4u-angular/core/helpers/DateHelpers';\r\nimport { TabsComponent } from '@m4u-angular/ui/components/tabs/tabs.component';\r\nimport { InputBoxDialogComponent } from '@m4u-angular/ui/dialogs/inputbox-dialog/inputboxdialog.component';\r\nimport { MessageBoxDialogComponent } from '@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\nimport { DxValidationGroupComponent } from 'devextreme-angular/ui/validation-group';\r\nimport { formatDate, formatNumber } from 'devextreme/localization';\r\nimport DxValidator from 'devextreme/ui/validator';\r\nimport { Globals } from '../../_globals';\r\nimport { BookingAccountEndpoint } from '../../_proxy/endpoints/bookingaccount.endpoint';\r\nimport { IndexEndpoint } from '../../_proxy/endpoints/index.endpoint';\r\nimport { LoanEndpoint } from '../../_proxy/endpoints/loan.endpoint';\r\nimport { LoanPaymentEndpoint } from '../../_proxy/endpoints/loanpayment.endpoint';\r\nimport { Index } from '../../_proxy/entities/index.entity';\r\nimport { Loan } from '../../_proxy/entities/loan.entity';\r\nimport { LoanPayment } from '../../_proxy/entities/loanpayment.entity';\r\nimport { EnumAmortizationType, EnumInterestType, EnumLoanInterestPeriodCalculationType, \r\n EnumLoanPaymentFrequencyType, EnumLoanSide, EnumLoanStatus } from '../../_proxy/enums';\r\nimport { SecurityListComponent } from '../security/list/security-list.component';\r\nimport { LoanPaymentsGridComponent } from './loan-payments/grid/loan-payments-grid.component';\r\nimport { UpdatePrincipalDialogComponent } from './update-principal-dialog/update-principal-dialog.component';\r\nimport { IndexDialogComponent } from '../index/dialog/index-dialog.component';\r\nimport { InterestDialogComponent } from '../interest/dialog/interest-dialog.component';\r\nimport { AccessService } from '@kraken/services/access.service';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\n\r\nclass State extends BaseState {\r\n Account: Account;\r\n BookingAccount: BookingAccountView;\r\n OrganizationID: number;\r\n CurrentTabIndex: number = 0;\r\n LinkageIndex: Index;\r\n PaymentsEditMode: boolean = false;\r\n RecycledLoanID: number;\r\n LoanInterestPeriodCalculationTypes: any[] = [];\r\n LoanPaymentFrequencyTypes: any[] = [];\r\n NumberLastOpenPayment: number = 1;\r\n UntilMaxNumberPayment: number = 1;\r\n LastValueLinkageIndex: string;\r\n LastValueInterestIndex: string;\r\n PaymentsChanges = [];\r\n NotCreateFundingJE: boolean = false;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-loan',\r\n templateUrl: './loan.component.html',\r\n styleUrls: ['loan.component.scss']\r\n})\r\nexport class LoanComponent extends BasePageCRUDComponent {\r\n @ViewChild('tabs') tabs: TabsComponent;\r\n LoanTabs: GenericListEntity[];\r\n LoanStatuses = EnumLoanStatus;\r\n constructor(A: ServiceBagService, public endpoint: LoanEndpoint,\r\n private bookingAccountEndpoint: BookingAccountEndpoint,\r\n private accountEndpoint: AccountEndpoint,\r\n private loanPaymentEndpoint: LoanPaymentEndpoint,\r\n private indexEndpoint: IndexEndpoint,\r\n private interestEndpoint: InterestEndpoint,\r\n private framework: FrameworkService,\r\n private accessService: AccessService) {\r\n super(A, 'LoanComponent', Loan, State, endpoint, EnumPageDisplayModes.Window);\r\n this.BindHandler('InterestLabel');\r\n }\r\n\r\n fieldValidators: Record = {};\r\n @ViewChild('validationGroup') protected validationGroup: DxValidationGroupComponent;\r\n @ViewChild('loanPaymentsGrid') protected loanPaymentsGrid: LoanPaymentsGridComponent;\r\n @ViewChild('securityList') protected securityList: SecurityListComponent;\r\n @ViewChild('markPastPaymentsDialog') markPastPaymentsDialog: InputBoxDialogComponent;\r\n @ViewChild('updatePrincipalDialog') updatePrincipalDialog: UpdatePrincipalDialogComponent;\r\n @ViewChild('messageBox') messageBoxDialog: MessageBoxDialogComponent;\r\n @ViewChild('indexDialog') indexDialog: IndexDialogComponent;\r\n @ViewChild('interestDialog') interestDialog: InterestDialogComponent;\r\n\r\n get Currency() {\r\n const { BookingAccount } = this.State;\r\n if (!BookingAccount || !BookingAccount.Currency) return '';\r\n\r\n return (this.LISTITEMX('Currencies', BookingAccount.Currency) as any).Symbol;\r\n }\r\n\r\n OnBookingAccountChange(account: BookingAccountView) {\r\n this.State.BookingAccount = account;\r\n this.UpdateLoanAccounts(true);\r\n }\r\n\r\n OnAccountChange(account: Account) {\r\n this.State.Account = account;\r\n }\r\n\r\n protected override OnDestroyComponent() {\r\n super.OnDestroyComponent();\r\n this.NotifyEntitySaved(this.Entity, this.EntityType, EnumCRUDActions.Create);\r\n }\r\n\r\n async OnTabItemClick(event: any) {\r\n if (event.itemData.index == 1 || event.itemData.index == 2) {\r\n if (!this.Entity.EntryID) {\r\n const isValid = await this.ValidateValidationGroup(this.validationGroup);\r\n if (!isValid) {\r\n this.State.CurrentTabIndex = 0;\r\n return;\r\n }\r\n this.SetEntity(this.EntityType, this.endpoint.Save(this.Entity), false, () => this.ChangeTab(event.itemData.index));\r\n return;\r\n }\r\n if (this.IsDirty) {\r\n if (this.Entity.Status === EnumLoanStatus.Draft || this.Entity.Status === EnumLoanStatus.Funded) {\r\n this.messageBoxDialog.Type = EnumMessageBoxTypes.YesNo;\r\n this.messageBoxDialog.Title = this.RC('titleConfirm');\r\n this.messageBoxDialog.Prompt = this.RC('msgLoanModifiedSaveIt');\r\n this.messageBoxDialog.ShowDialogShort(() => {\r\n if (this.Entity.Status === EnumLoanStatus.Draft && this.Entity.IsManualEdited) {\r\n this.messageBoxDialog.Type = EnumMessageBoxTypes.YesNo;\r\n this.messageBoxDialog.Title = this.RC('titleConfirm');\r\n this.messageBoxDialog.Prompt = this.RC('msgResetPaymentScheduleConfirmation');\r\n this.messageBoxDialog.ShowDialogShort(() => {\r\n this.Entity.IsManualEdited = false;\r\n this.SetEntity(this.EntityType, this.endpoint.SaveCustom(this.Entity, true), false);\r\n this.ChangeTab(event.itemData.index);\r\n },\r\n () => {\r\n this.ClosePage();\r\n this.SetEntity(this.EntityType, this.Endpoint.SaveCustom(this.Entity, false), false);\r\n this.ChangeTab(event.itemData.index);\r\n }\r\n );\r\n } else {\r\n this.SetEntity(this.EntityType, this.endpoint.Save(this.Entity), false);\r\n this.ChangeTab(event.itemData.index);\r\n }\r\n },\r\n () => {\r\n this.ClosePage();\r\n this.ChangeTab(event.itemData.index);\r\n }\r\n );\r\n } else {\r\n this.ChangeTab(event.itemData.index);\r\n }\r\n } else {\r\n this.ChangeTab(event.itemData.index);\r\n }\r\n } else {\r\n this.ChangeTab(event.itemData.index);\r\n }\r\n }\r\n\r\n private ChangeTab(index: number) {\r\n this.State.CurrentTabIndex = index;\r\n if (this.State.CurrentTabIndex === 1) {\r\n this.LoadPayments();\r\n this.ReloadToolbar();\r\n //this.loanPaymentsGrid.G.InitCompactMode(true);\r\n }\r\n if (this.State.CurrentTabIndex === 2) {\r\n this.ReloadToolbar();\r\n }\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n const settings = new ToolbarSettings;\r\n if (this.State.CurrentTabIndex === 0) {\r\n settings.IsAllowExport = false;\r\n settings.IsAllowPrint = false;\r\n }\r\n if (this.State.CurrentTabIndex === 1) {\r\n settings.IsAllowExport = true;\r\n settings.IsAllowPrint = false;\r\n settings.GridExtender = this.loanPaymentsGrid?.G;\r\n }\r\n if (this.State.CurrentTabIndex === 2) {\r\n settings.GridExtender = this.securityList?.grid?.G;\r\n }\r\n\r\n settings.IsSupportHistory = true;\r\n return settings;\r\n }\r\n\r\n override OnEntityNew() {\r\n if (!this.FetchDataSources()) return;\r\n\r\n this.Entity.Status = EnumLoanStatus.Draft;\r\n this.Entity.InterestType = EnumInterestType.Flat;\r\n this.Entity.Side = EnumLoanSide.Incoming;\r\n this.Entity.SigningDate = Globals.Today;\r\n this.Entity.FundingDate = Globals.Today;\r\n this.Entity.FirstPaymentDate = Globals.ThirtyDaysAfterDate;\r\n this.Entity.InterestLinkageFrequency = 1;\r\n this.Entity.PaymentFrequencyType = EnumLoanPaymentFrequencyType.Monthly;\r\n this.Entity.AmortizationType = EnumAmortizationType.StraightLine;\r\n this.Entity.PeriodicCommisionFeeAmount = 0;\r\n this.Entity.SetupComissionFeeAmount = 0;\r\n this.Entity.InterestPeriodCalculationType = EnumLoanInterestPeriodCalculationType.Daily;\r\n this.Entity.ConsiderNoneBusinessDays = true;\r\n this.Entity.UseKnownIndex = true;\r\n }\r\n\r\n protected override async OnEntityLoaded() {\r\n if (!this.FetchDataSources()) return;\r\n\r\n this.GetBookingAccount(this.Entity.BookingAccountID);\r\n this.GetAccount(this.Entity.AccountID);\r\n\r\n if (this.Entity.Status === EnumLoanStatus.Recycled) {\r\n this.Do(this.endpoint.GetRecyclingLoan(this.Entity.EntryID), false, (response) => {\r\n this.State.RecycledLoanID = response.Entity.EntryID;\r\n });\r\n }\r\n\r\n this.RepaintToolbar();\r\n this.RefreshEntityOriginal();\r\n\r\n if (this.State.CurrentTabIndex === 1) {\r\n this.LoadPayments();\r\n }\r\n }\r\n\r\n FetchDataSources(): boolean {\r\n this.ApplyOrganizationID();\r\n if (!this.State.OrganizationID) return false;\r\n return true;\r\n }\r\n\r\n get IsAnnuity(): boolean {\r\n return this.Entity.AmortizationType === EnumAmortizationType.AnnuityShpizer;\r\n }\r\n\r\n get IsStraightLineMode() {\r\n return this.Entity.AmortizationType === EnumAmortizationType.StraightLine;\r\n }\r\n\r\n get IsOnCall() {\r\n return this.Entity.AmortizationType === EnumAmortizationType.OnCall;\r\n }\r\n\r\n get isFlat(): boolean {\r\n return this.Entity.InterestType === EnumInterestType.Flat;\r\n }\r\n\r\n get isLinked(): boolean {\r\n return this.Entity.InterestType === EnumInterestType.Linked;\r\n }\r\n\r\n get isLinkage(): boolean {\r\n return !!this.Entity.LinkageIndexID;\r\n }\r\n\r\n get IsEditable() {\r\n return this.Entity.Status === EnumLoanStatus.Draft;\r\n }\r\n\r\n InterestLabel(): string {\r\n return this.Entity.InterestType === EnumInterestType.Flat ? this.RC('lblInterestPercent') : this.RC('lblInterestSuprlusPercent');\r\n }\r\n\r\n ApplyOrganizationID() {\r\n if (!this.State.OrganizationID) {\r\n if (this.accessService.IsAdmin() && Globals.OrganizationID) this.State.OrganizationID = Globals.OrganizationID;\r\n if (!this.accessService.IsAdmin()) this.State.OrganizationID = this.UserInfo?.OrganizationID;\r\n if (!this.State.OrganizationID) {\r\n this.ClosePage();\r\n this.UI.WarningMessage(this.RC('lblChooseOrganization'));\r\n }\r\n }\r\n }\r\n\r\n override async OnInitComponent() {\r\n this.ApplyOrganizationID();\r\n if (!this.State.OrganizationID) return false;\r\n this.LoanTabs = this.LIST('LoanTabs');\r\n this.InitStateFromQuery();\r\n\r\n this.LoadIndexes();\r\n this.State.LoanInterestPeriodCalculationTypes = this.LIST('LoanInterestPeriodCalculationTypes');\r\n this.State.LoanPaymentFrequencyTypes = this.LIST('LoanPaymentFrequencyTypes');\r\n\r\n }\r\n\r\n OnLinkageIndexChanged(e: any) {\r\n const { value } = e;\r\n if (!value) {\r\n this.State.LastValueLinkageIndex = '';\r\n return;\r\n }\r\n this.Do(this.indexEndpoint.Get(value), false, (response) => {\r\n this.State.LinkageIndex = response.Entity;\r\n if (this.State.LinkageIndex) {\r\n const lastLine = this.State.LinkageIndex.IndexLines.sort((a, b) => {\r\n if (a.Year === b.Year) {\r\n return b.Month - a.Month; // Sort by month if years are the same\r\n } else {\r\n return b.Year - a.Year; // Sort by year\r\n }\r\n })[0];\r\n const lastDate = formatDate(new Date(lastLine.Year, lastLine.Month - 1, 1, 0, 0, 0), this.framework.CompanyInfo.DateFormatShort);\r\n const rate = formatNumber(lastLine.Rate, this.F.NumberRate);\r\n this.State.LastValueLinkageIndex = this.RC('txtLastValueIndex', rate, lastDate);\r\n }\r\n if (!this.IsUIEvent(e)) return;\r\n this.UpdateLinkageBase(true);\r\n });\r\n }\r\n\r\n OnChangedInterestType = async (e) => {\r\n const data = await this.DS('InterestIndexes')?.Store.load();\r\n const items = data as any[];\r\n\r\n if (e.value === EnumInterestType.Linked && items?.length === 1) {\r\n this.Entity.InterestLinkageIndexID = items[0].EntryID;\r\n const lastLine = items[0]?.InterestLines?.reduce((prev, curr) => (prev.Date > curr.Date) ? prev : curr);\r\n const lastDate = formatDate(new Date(lastLine?.Date), this.framework.CompanyInfo.DateFormatShort);\r\n const rate = formatNumber(lastLine.Rate, this.F.NumberRate);\r\n this.State.LastValueInterestIndex = this.RC('txtLastValueIndex', rate, lastDate);\r\n } else {\r\n this.State.LastValueInterestIndex = '';\r\n }\r\n\r\n if (e.value === EnumInterestType.Flat) {\r\n this.Entity.InterestLinkageIndexID = null;\r\n }\r\n };\r\n\r\n OnFundingDateChange(e: any) {\r\n if (!this.IsUIEvent(e)) return;\r\n\r\n if (this.Entity.IsManualEdited) {\r\n return;\r\n }\r\n this.Entity.FirstPaymentDate = this.GetNextDate(e.value);\r\n this.UpdateLastPaymentDate();\r\n }\r\n\r\n OnSigningDateChange(e: any) {\r\n if (!this.IsUIEvent(e)) return;\r\n if (this.Entity.IsManualEdited) {\r\n return;\r\n }\r\n this.Entity.FundingDate = new Date(e.value);\r\n this.Entity.FirstPaymentDate = this.GetNextDate(e.value);\r\n this.UpdateLastPaymentDate();\r\n }\r\n\r\n OnPaymentFrequencyTypeChange(e: any) {\r\n if (!this.IsUIEvent(e)) return;\r\n this.Entity.FirstPaymentDate = this.GetNextDate(this.Entity.FundingDate);\r\n const frequencyType = this.GetFrequencyType() as any;\r\n\r\n if (frequencyType.Value == EnumLoanPaymentFrequencyType.OneTimePayment) {\r\n this.Entity.NumberOfPayments = 1;\r\n }\r\n this.UpdateLastPaymentDate();\r\n const unitType = this.GetFrequencyUnitType();\r\n this.State.LoanInterestPeriodCalculationTypes = this.LIST('LoanInterestPeriodCalculationTypes').filter(item => unitType === EnumLoanPaymentFrequencyType.Monthly || item.Value === EnumLoanInterestPeriodCalculationType.Daily);\r\n\r\n if (unitType === EnumLoanPaymentFrequencyType.Weekly) {\r\n this.Entity.InterestPeriodCalculationType = EnumLoanInterestPeriodCalculationType.Daily;\r\n }\r\n\r\n }\r\n\r\n OnAmortizationTypeChange(e: any) {\r\n this.State.LoanPaymentFrequencyTypes = this.LIST('LoanPaymentFrequencyTypes').filter(item => this.Entity.AmortizationType !== EnumAmortizationType.AnnuityShpizer || (item.Value !== EnumLoanPaymentFrequencyType.Weekly && item.Value !== EnumLoanPaymentFrequencyType.BiWeekly));\r\n if (!this.IsUIEvent(e)) return;\r\n\r\n if (this.Entity.AmortizationType === EnumAmortizationType.AnnuityShpizer) {\r\n this.Entity.PaymentFrequencyType = EnumLoanPaymentFrequencyType.Monthly;\r\n this.Entity.InterestPeriodCalculationType = EnumLoanInterestPeriodCalculationType.Monthly;\r\n this.Entity.FirstPaymentDate = this.GetNextDate(this.Entity.FundingDate);\r\n this.UpdateLastPaymentDate();\r\n }\r\n if (this.Entity.AmortizationType === EnumAmortizationType.OnCall) {\r\n this.Entity.NumberOfPayments = 520;\r\n this.Entity.PaymentFrequencyType = EnumLoanPaymentFrequencyType.Weekly;\r\n this.Entity.FirstPaymentDate = this.GetNextDate(this.Entity.FundingDate);\r\n this.UpdateLastPaymentDate();\r\n }\r\n }\r\n\r\n private GetNextDate(value: Date) {\r\n const frequencyType = this.LISTITEMX('LoanPaymentFrequencyTypes', this.Entity.PaymentFrequencyType) as any;\r\n const addFunc = frequencyType.UnitType === EnumLoanPaymentFrequencyType.Weekly ? DateHelpers.AddWeek : DateHelpers.AddMonth;\r\n return addFunc(new Date(value), frequencyType.Count);\r\n }\r\n\r\n private GetFrequencyUnitType(): EnumLoanPaymentFrequencyType {\r\n return (this.LISTITEMX('LoanPaymentFrequencyTypes', this.Entity.PaymentFrequencyType) as any).UnitType;\r\n }\r\n\r\n private GetFrequencyType(): EnumLoanPaymentFrequencyType {\r\n return (this.LISTITEMX('LoanPaymentFrequencyTypes', this.Entity.PaymentFrequencyType) as any);\r\n }\r\n\r\n OnLinkageBasePeriodChanged(e: any) {\r\n if (!this.IsUIEvent(e)) return;\r\n this.UpdateLinkageBase(true);\r\n }\r\n\r\n OnFirstPaymentDateChanged(event: any) {\r\n if (!this.IsUIEvent(event)) return;\r\n if (this.Entity.NumberOfPayments) {\r\n this.UpdateLastPaymentDate();\r\n }\r\n }\r\n\r\n OnLastPaymentDateChanged(event: any) {\r\n if (!this.IsUIEvent(event)) return;\r\n this.Entity.NumberOfPayments = this.GetNumbersCount();\r\n this.UpdateLastPaymentDate();\r\n }\r\n\r\n GetNumbersCount() {\r\n const frequencyType = this.LISTITEMX('LoanPaymentFrequencyTypes', this.Entity.PaymentFrequencyType) as any;\r\n const diffFunction = frequencyType.UnitType === EnumLoanPaymentFrequencyType.Weekly ? (d1: Date, d2: Date) => Math.ceil(DateHelpers.DiffInWeeks(d1, d2)) : DateHelpers.DiffInMonthes;\r\n const diffNumber = diffFunction(this.Entity.FirstPaymentDate, this.Entity.LastPaymentDate);\r\n return Math.ceil(diffNumber / frequencyType.Count);\r\n }\r\n\r\n OnNumberOfPaymentsChanged(event: any) {\r\n if (!this.IsUIEvent(event)) return;\r\n this.UpdateLastPaymentDate();\r\n }\r\n\r\n UpdateLastPaymentDate() {\r\n if (!this.Entity.FirstPaymentDate || !this.Entity.NumberOfPayments || !this.IsEditable) return;\r\n const frequencyType = this.LISTITEMX('LoanPaymentFrequencyTypes', this.Entity.PaymentFrequencyType) as any;\r\n const addFunction = frequencyType.UnitType === EnumLoanPaymentFrequencyType.Weekly ? DateHelpers.AddWeek : DateHelpers.AddMonth;\r\n this.Entity.LastPaymentDate = addFunction(this.Entity.FirstPaymentDate, (this.Entity.NumberOfPayments - 1) * frequencyType.Count);\r\n }\r\n\r\n UpdateLinkageBase(forceChange: boolean) {\r\n if (this.State.LinkageIndex && this.Entity.LinkageBasePeriod) {\r\n const year = this.Entity.LinkageBasePeriod.getFullYear();\r\n const month = this.Entity.LinkageBasePeriod.getMonth();\r\n const linkageBase = this.State.LinkageIndex.IndexLines.find((item: any) => item.Month === month + 1 && item.Year === year);\r\n if (!this.Entity.LinkageBaseIndexValue || this.Entity.LinkageBaseIndexValue && forceChange)\r\n this.Entity.LinkageBaseIndexValue = linkageBase?.Rate || 0;\r\n }\r\n\r\n }\r\n\r\n LoadIndexes() {\r\n this.DataSources['InterestIndexes'] = new DataSourceCustomAction(() => this.interestEndpoint.GetList());\r\n this.DataSources['LinkageIndexes'] = new DataSourceCustomAction(() => this.indexEndpoint.GetList());\r\n }\r\n\r\n override OnInitTitle() {\r\n const { LoanName } = this.Entity;\r\n if (!LoanName) return this.GetDefaultTitle();\r\n return `${this.GetDefaultTitle()} - ${LoanName}`;\r\n }\r\n\r\n\r\n override OnInitContextMenus(): ContextMenuElement[] {\r\n if (this.IsAddMode) return undefined;\r\n const menus: ContextMenuElement[] =\r\n [\r\n {\r\n text: this.RC('titleDelete'),\r\n visible: this.Entity.Status == EnumLoanStatus.Draft,\r\n onClick: this.OnDeleteEntity.bind(this)\r\n },\r\n {\r\n text: this.RC('lblDuplicate'),\r\n visible: true,\r\n onClick: this.OnDuplicateEntity.bind(this)\r\n },\r\n {\r\n text: this.RC('btnCancel'),\r\n visible: this.Entity.Status == EnumLoanStatus.Funded,\r\n onClick: this.OnCancel.bind(this)\r\n },\r\n {\r\n text: this.RC('btnRecycle'),\r\n visible: this.Entity.Status == EnumLoanStatus.Funded,\r\n onClick: this.OnRecycle.bind(this)\r\n },\r\n {\r\n text: this.RC('btnPostPayment'),\r\n visible: this.Entity.Status == EnumLoanStatus.Funded,\r\n onClick: this.OnPostPayment.bind(this)\r\n },\r\n {\r\n text: this.RC('titleMarkPastPayments'),\r\n visible: this.Entity.Status == EnumLoanStatus.Funded,\r\n onClick: this.OnMarkPastPayments.bind(this)\r\n },\r\n {\r\n text: this.RC('btnEndLoan'),\r\n visible: this.Entity.Status == EnumLoanStatus.Funded,\r\n onClick: this.OnEndLoan.bind(this)\r\n },\r\n {\r\n text: this.RC('titleCancelLastPayment'),\r\n visible: this.Entity.HasPaidPaymets,\r\n onClick: this.OnCancelLastPayment.bind(this)\r\n }\r\n ];\r\n return menus;\r\n }\r\n\r\n\r\n private UpdateLoanAccounts(override = true): void {\r\n const fields = ['LoanBookingAccountCodeCommissions', 'LoanBookingAccountCodeInterest', 'LoanBookingAccountCodeInterestLinkage', 'LoanBookingAccountCodePrincipal', 'LoanBookingAccountCodePrincipalLinkage'];\r\n\r\n fields.forEach(field => {\r\n const value = this.Entity[field];\r\n const newValue = this.State.BookingAccount && this.State.BookingAccount[field];\r\n const hasValue = value !== undefined && value !== null && value !== '';\r\n\r\n if (override || !hasValue) {\r\n this.Entity[field] = newValue;\r\n }\r\n });\r\n\r\n }\r\n\r\n GetBookingAccount(EntryID) {\r\n this.Do(this.bookingAccountEndpoint.Get(EntryID), false, ({ Entity }) => {\r\n if (Entity) {\r\n this.State.BookingAccount = Entity;\r\n this.Entity.CompanyID = Entity.CompanyID;\r\n this.Entity.AccountID = Entity.AccountID;\r\n this.UpdateLoanAccounts(false); // FIX: when url contains BookingAccountID need to update account's codes \r\n }\r\n });\r\n }\r\n\r\n GetAccount(EntryID) {\r\n this.Do(this.accountEndpoint.Get(EntryID), false, ({ Entity }) => {\r\n this.State.Account = Entity;\r\n });\r\n }\r\n\r\n override OnEntitySaved() {\r\n this.NavigateBack();\r\n }\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n if (ExternalEntityType === LoanPayment) {\r\n this.LoadPayments();\r\n this.RepaintToolbar();\r\n }\r\n\r\n if (ExternalEntityType === Loan) { //update status after post payment\r\n this.Entity.Status = (ExternalEntity as Loan).Status;\r\n this.Entity.IsManualEdited = (ExternalEntity as Loan).IsManualEdited;\r\n }\r\n }\r\n\r\n protected async OnCalculate() {\r\n const isValid = await this.ValidateValidationGroup(this.validationGroup);\r\n if (!isValid) return;\r\n\r\n const self = this;\r\n const afterSave = () => {\r\n self.State.CurrentTabIndex = 1;\r\n //self.loanPaymentsGrid.G.InitCompactMode(true);\r\n self.LoadPayments();\r\n self.ReloadLoan();\r\n self.IsAddMode = false;\r\n };\r\n\r\n if (this.Entity.IsManualEdited) {\r\n if (this.NoNeedRecalculate()){\r\n this.SetEntity(this.EntityType, this.Endpoint.SaveCustom(this.Entity, false), false, afterSave);\r\n } else{\r\n this.messageBoxDialog.Type = EnumMessageBoxTypes.YesNo;\r\n this.messageBoxDialog.Title = this.RC('titleConfirm');\r\n this.messageBoxDialog.Prompt = this.RC('msgResetPaymentScheduleConfirmation');\r\n this.messageBoxDialog.ShowDialogShort(() => {\r\n this.SetEntity(this.EntityType, this.endpoint.SaveCustom(this.Entity, true), false, afterSave);\r\n },\r\n () => { \r\n this.SetEntity(this.EntityType, this.Endpoint.SaveCustom(this.Entity, false), false, afterSave);\r\n }\r\n );\r\n }\r\n } else {\r\n this.SetEntity(this.EntityType, this.Endpoint.SaveCustom(this.Entity, true), false, afterSave);\r\n }\r\n }\r\n\r\n protected OnFund() {\r\n this.SetEntity(this.EntityType, this.Endpoint.Fund(this.Entity.EntryID), true, () => {\r\n this.LoadPayments();\r\n this.IsAddMode = false;\r\n this.RepaintToolbar();\r\n });\r\n }\r\n\r\n protected OnCancel() {\r\n this.messageBoxDialog.Type = EnumMessageBoxTypes.YesNo;\r\n this.messageBoxDialog.Title = this.RC('titleCancelLoan');\r\n this.messageBoxDialog.Prompt = this.RC('msgCancelLoanConfirmation');\r\n this.messageBoxDialog.ShowDialogShort(() => {\r\n this.SetEntity(this.EntityType, this.Endpoint.Cancel(this.Entity.EntryID), true, () => this.ClosePage());\r\n },\r\n () => {\r\n this.ClosePage();\r\n }\r\n );\r\n }\r\n\r\n OnDeleteEntity() {\r\n this.messageBoxDialog.Type = EnumMessageBoxTypes.YesNo;\r\n this.messageBoxDialog.Title = this.RC('titleDeleteLoan');\r\n this.messageBoxDialog.Prompt = this.RC('msgDeleteLoanConfirmation');\r\n this.messageBoxDialog.ShowDialogShort(() => {\r\n this.DeleteEntity();\r\n this.ClosePage();\r\n },\r\n () => {\r\n this.ClosePage();\r\n }\r\n );\r\n }\r\n\r\n OnDuplicateEntity() {\r\n this.Do(this.endpoint.Duplicate(this.Entity.EntryID), true, (response) => {\r\n this.Navigate(['/pages/loan', response.Entity.EntryID]);\r\n });\r\n }\r\n\r\n protected OnRecycle() {\r\n\r\n this.messageBoxDialog.Type = EnumMessageBoxTypes.Custom;\r\n this.messageBoxDialog.Buttons = [\r\n {\r\n Text: this.RC('genYes'),\r\n ButtonID: 1\r\n },\r\n {\r\n Text: this.RC('genCancel'),\r\n ButtonID: 2\r\n },\r\n {\r\n Text: this.RC('lblDoNotCreateClosingJE'),\r\n ButtonID: 3\r\n },\r\n ];\r\n\r\n this.messageBoxDialog.Title = this.RC('titleRecyclingLoan');\r\n this.messageBoxDialog.Prompt = this.RC('lblRecycleLoanMessage');\r\n\r\n this.messageBoxDialog.ShowDialogShort((buttonID: number) => {\r\n if(buttonID != 2) {\r\n this.Recycle(buttonID == 1);\r\n }\r\n });\r\n }\r\n\r\n private Recycle(createClosingJE: boolean) {\r\n this.Do(this.Endpoint.Recycle(this.Entity.EntryID, createClosingJE), true, (response) => {\r\n this.State.CurrentTabIndex = 0;\r\n this.Navigate(['/pages/loan', response.Entity.EntryID]);\r\n });\r\n }\r\n\r\n protected OnEndLoan() {\r\n this.Do(this.Endpoint.EndLoan(this.Entity.EntryID), true, (response) => {\r\n this.Navigate(['/pages/loan', response.Entity.EntryID]);\r\n });\r\n }\r\n\r\n protected OnPostPayment() {\r\n this.Do(this.loanPaymentEndpoint.GetLastOpenPayment(this.Entity.EntryID), false, (response) => {\r\n this.Navigate(['/pages/post-payment', response.Entity.EntryID]);\r\n });\r\n }\r\n\r\n protected OnMarkPastPayments() {\r\n this.markPastPaymentsDialog.ShowDialogShort((value: number) => {\r\n this.Do(this.endpoint.MarkPastPayments(this.Entity.EntryID, value), true, () => {\r\n this.LoadPayments();\r\n this.RepaintToolbar();\r\n });\r\n });\r\n }\r\n\r\n protected OnCancelLastPayment() {\r\n this.messageBoxDialog.Type = EnumMessageBoxTypes.YesNo;\r\n this.messageBoxDialog.Title = this.RC('titleCancelLastPayment');\r\n this.messageBoxDialog.Prompt = this.RC('msgCancelLastPaymentConfirmation');\r\n this.messageBoxDialog.ShowDialogShort(() => {\r\n this.Do(this.endpoint.CancelLastPayment(this.Entity.EntryID), true, () => {\r\n this.ClosePage();\r\n this.LoadPayments();\r\n this.RepaintToolbar();\r\n });\r\n },\r\n () => {\r\n this.ClosePage();\r\n }\r\n );\r\n \r\n }\r\n ReloadLoan() {\r\n this.Do(this.endpoint.Get(this.Entity.EntryID), false, (response) => {\r\n this.Entity = Utils.MapObject(this.EntityType, response.Entity);\r\n this.RefreshEntityOriginal();\r\n this.SubscribeOnEntityChanges();\r\n });\r\n }\r\n\r\n LoadPayments() {\r\n if (this.Entity.EntryID) {\r\n this.DataSources['LoanPayments'] = new DataSourceCustomAction((options: DataLoadOptions) => this.loanPaymentEndpoint.ListEx(this.Entity.EntryID));\r\n }\r\n }\r\n\r\n get hideOkButton() {\r\n return [EnumLoanStatus.Canceled, EnumLoanStatus.Finished, EnumLoanStatus.Recycled].indexOf(this.Entity.Status) >= 0 || (this.State.CurrentTabIndex === 0 && this.Entity?.Status === EnumLoanStatus.Draft) || (this.State.CurrentTabIndex === 1) ? true : false;\r\n }\r\n\r\n get showSavePaymentsBtn() {\r\n return this.State.CurrentTabIndex === 1 && this.State.PaymentsEditMode;\r\n }\r\n\r\n get editButtonLabel(): string {\r\n return !this.State.PaymentsEditMode ? this.RC('lblEdit') : this.RC('lblCancelEdit');\r\n }\r\n\r\n get isVisibleFundButton() {\r\n return this.State.CurrentTabIndex === 1 && this.Entity.Status === EnumLoanStatus.Draft && this.Entity.EntryID;\r\n }\r\n\r\n get isVisibleCalculateButton() {\r\n return this.State.CurrentTabIndex === 0 && [EnumLoanStatus.Draft].indexOf(this.Entity.Status) >= 0;\r\n }\r\n\r\n get isVisibleUpdatePrincipalButton() {\r\n return this.State.CurrentTabIndex === 1 && [EnumAmortizationType.OnCall, EnumAmortizationType.StraightLine, EnumAmortizationType.Baloon].indexOf(this.Entity.AmortizationType) >= 0 && this.State.PaymentsEditMode;\r\n }\r\n\r\n get isVisibleEditButton() {\r\n return this.State.CurrentTabIndex === 1 && this.Entity.AmortizationType != EnumAmortizationType.AnnuityShpizer && [EnumLoanStatus.Draft, EnumLoanStatus.Funded].indexOf(this.Entity.Status) >= 0;\r\n }\r\n\r\n OnEditMode() {\r\n if (this.State.PaymentsEditMode) {\r\n this.loanPaymentsGrid.cancelGridChanges();\r\n }\r\n this.State.PaymentsEditMode = !this.State.PaymentsEditMode;\r\n }\r\n\r\n OnUpdatePrincipal() {\r\n this.State.UntilMaxNumberPayment = this.DataSources['LoanPayments']?.Items.length;\r\n this.Do(this.loanPaymentEndpoint.GetLastOpenPayment(this.Entity.EntryID), false, (response) => {\r\n this.State.NumberLastOpenPayment = response.Entity.PaymentNumber;\r\n this.updatePrincipalDialog.ShowDialogShort((state: {\r\n FromPayment: number;\r\n UntilPayment: number;\r\n PrincipalAmount: number;\r\n }) => {\r\n const { Items } = this.DS('LoanPayments');\r\n const changes = [];\r\n for (let i = state.FromPayment-1; i < state.UntilPayment; i++) {\r\n const item = Items[i];\r\n changes.push({\r\n key: item.EntryID,\r\n data: { DuePrincipal: state.PrincipalAmount },\r\n type: 'update'\r\n });\r\n }\r\n this.State.PaymentsChanges = changes;\r\n //update last payment principal if all except last was updated\r\n if (state.UntilPayment == this.Entity.NumberOfPayments - 1) {\r\n const lastPaymentPrincipal = response.Entity.OpeningPrincipalBalance - (state.UntilPayment - state.FromPayment + 1) * state.PrincipalAmount;\r\n changes.push({\r\n key: Items[this.Entity.NumberOfPayments - 1].EntryID,\r\n data: { DuePrincipal: lastPaymentPrincipal },\r\n type: 'update'\r\n });\r\n }\r\n });\r\n });\r\n\r\n }\r\n\r\n override OnDoSave() {\r\n if (this.State.CurrentTabIndex === 0) {\r\n this.SetEntity(this.EntityType, this.Endpoint.SaveCustom(this.Entity, false), true, () => this.RepaintToolbar());\r\n }\r\n }\r\n\r\n OnSavePayments() {\r\n this.loanPaymentsGrid.saveGridChanges();\r\n }\r\n\r\n GetRecyclingLoanLink() {\r\n return ['/pages/loan', this.State.RecycledLoanID];\r\n }\r\n\r\n GetRecycledLoanLink() {\r\n return ['/pages/loan', this.Entity.RecycleLoanID];\r\n }\r\n\r\n InitStateFromQuery() {\r\n if (Object.entries(this.QueryParams).length <= 0) return;\r\n const params = this.A.Navigator.GetQueryParams(true);\r\n\r\n if (params.CompanyID) {\r\n this.Entity.CompanyID = +params.CompanyID;\r\n }\r\n if (params.BookingAccountID) {\r\n this.Entity.BookingAccountID = +params.BookingAccountID;\r\n this.GetBookingAccount(this.Entity.BookingAccountID);\r\n }\r\n\r\n if (params.AccountID) {\r\n this.Entity.AccountID = +params.AccountID;\r\n }\r\n if (params.StartDate) {\r\n this.Entity.FundingDate = new Date(params.StartDate);\r\n this.Entity.SigningDate = new Date(params.StartDate);\r\n }\r\n\r\n if (params.Name) {\r\n this.Entity.Notes = params.Name;\r\n }\r\n\r\n if (params.InterestRate) {\r\n this.Entity.InterestSuprlusPercent = +params.InterestRate;\r\n }\r\n\r\n if (params.NumberOfPayments) {\r\n this.Entity.NumberOfPayments = +params.NumberOfPayments;\r\n }\r\n\r\n if (params.Amount) {\r\n this.Entity.Amount = +params.Amount;\r\n }\r\n if (params.BankReferenceNumber) {\r\n this.Entity.BankReferenceNumber = params.BankReferenceNumber;\r\n }\r\n if (params.UniqueLoanID) {\r\n this.Entity.UniqueLoanID = params.UniqueLoanID;\r\n }\r\n }\r\n\r\n // override OnIsDirtyDisabled(): boolean {\r\n // return true;\r\n // }\r\n\r\n public override OnGetFilterDescription(): string {\r\n const title = this.RC('titlePaymentSchedule');\r\n const notes = this.Entity.Notes ?? '';\r\n return this.A.Screen.IsRTL() ? notes + (notes ? ' - ' : '') + title\r\n : title + (notes ? ' - ' : '') + notes;\r\n }\r\n\r\n OnShowLinkageClick() {\r\n this.indexDialog.EntityEntryID = this.Entity.LinkageIndexID;\r\n this.indexDialog.ShowDialogShort(() => { });\r\n }\r\n\r\n OnShowInterestClick() {\r\n this.interestDialog.EntityEntryID = this.Entity.InterestLinkageIndexID;\r\n this.interestDialog.ShowDialogShort(() => { });\r\n }\r\n\r\n private NoNeedRecalculate(): boolean {\r\n const original: Loan = this.EntityOriginal;\r\n const current: Loan = this.Entity;\r\n\r\n // Fields that do not require recalculation\r\n const fieldsToIgnore = ['Notes', 'IsAutoPosting', 'NotCreateFundingJE',\r\n 'OurReferenceNumber', 'BankReferenceNumber', 'LoanBookingAccountCodePrincipal', \r\n 'LoanBookingAccountCodeInterest', 'LoanBookingAccountCodeCommissions'];\r\n\r\n // Helper function to compare values, including dates\r\n const areEqual = (a: any, b: any): boolean => {\r\n if (a === undefined && b === null || a === null && b === undefined) {\r\n return true;\r\n }\r\n if (a instanceof Date && b instanceof Date) {\r\n return a.getTime() === b.getTime();\r\n }\r\n return a === b;\r\n };\r\n\r\n // Check if any field other than the ignored fields has changed\r\n for (const key in original) {\r\n if (original.hasOwnProperty(key) && !fieldsToIgnore.includes(key)) {\r\n if (!areEqual(original[key], current[key])) {\r\n return false; // A field that requires recalculation has changed\r\n }\r\n }\r\n }\r\n\r\n return true; \r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n {{\\r\\n 'titleRecyclingLoan' | RC: THIS }}\\r\\n {{\\r\\n 'titleRecycledLoan' | RC: THIS }}\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n +\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\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 { QuickFilterComponent, QuickFilterSettings } from '@kraken/components/quick-filter/quick-filter.component';\r\nimport { BaseReportComponent, BaseReportState } from '@kraken/pages/base-report/base-report.component';\r\nimport { AccountEndpoint } from '@kraken/_proxy/endpoints/account.endpoint';\r\nimport { AccountListParams } from '@kraken/_proxy/params/accountlist.param';\r\nimport { BookingAccountListParams } from '@kraken/_proxy/params/bookingaccountlist.param';\r\nimport { CompanyListParams } from '@kraken/_proxy/params/companylist.param';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\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 } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Globals } from '../../../_globals';\r\nimport { LoanEndpoint } from '../../../_proxy/endpoints/loan.endpoint';\r\nimport { Loan } from '../../../_proxy/entities/loan.entity';\r\nimport { EnumAmortizationType, EnumBanks, EnumBankTypes, EnumBookingAccountSubtypes, EnumInterestType, EnumLoanSide, EnumLoanStatus } from '../../../_proxy/enums';\r\nimport { LoanParams } from '../../../_proxy/params/loan.param';\r\nimport { LoanGridComponent } from '../grid/loan-grid.component';\r\nimport { FilterSettings, FilterComponent, FilterValues } from './../../../components/filter/filter.component';\r\n\r\nclass State extends BaseReportState {\r\n Statuses: EnumLoanStatus[] = [];\r\n AmortizationTypes: EnumAmortizationType[] = [];\r\n Sides: EnumLoanSide[] = [];\r\n InterestTypes: EnumInterestType[] = [];\r\n Banks: EnumBanks[] = [];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n templateUrl: './loan-list.component.html'\r\n})\r\nexport class LoanListComponent extends BaseReportComponent\r\n{\r\n @ViewChild('reportGrid') reportGrid: LoanGridComponent;\r\n @ViewChild('filter') filterComponent: FilterComponent;\r\n @ViewChild('quickFilter') quickfilterComponent: QuickFilterComponent;\r\n\r\n constructor(A: ServiceBagService,\r\n private endpoint: LoanEndpoint,\r\n private accountEndpoint: AccountEndpoint) {\r\n super(A, 'LoanListComponent', State);\r\n }\r\n\r\n protected override OnInitState(): void {\r\n super.OnInitState();\r\n this.ClearState();\r\n }\r\n\r\n protected OnResetFilterValues() {\r\n super.OnResetFilterValues();\r\n this.ClearState();\r\n }\r\n\r\n OnGetCustomFilterSettings() {\r\n const filterSettings = {\r\n Company: { IsVisible: true, IsMultiple: true, Params: this.GetCompanyParams },\r\n Account: { IsVisible: true, IsMultiple: true, Params: this.GetAccountParams },\r\n BookingAccount: { IsVisible: true, IsMultiple: true, Params: this.GetBookingAccountParams },\r\n AccountGroup: { IsVisible: true, IsMultiple: true },\r\n CurrencyFilter: { IsVisible: true, Default: () => { return Globals.OrganizationDefaultCurrency || 'ILS'; }, IsHideClearButton: true }\r\n } as FilterSettings;\r\n return { ...filterSettings };\r\n }\r\n\r\n private GetCompanyParams = () => {\r\n return {\r\n BookingAccountSubtypes: [EnumBookingAccountSubtypes.Loans],\r\n Banks: this.State.Banks,\r\n ApplyBookingAccountSubtypesToActiveAccounts: true\r\n } as CompanyListParams;\r\n };\r\n\r\n private GetAccountParams = () => {\r\n return {\r\n BookingAccountSubtypes: [EnumBookingAccountSubtypes.Loans],\r\n Banks: this.State.Banks\r\n } as AccountListParams;\r\n };\r\n\r\n private GetBookingAccountParams = () => {\r\n return {\r\n BookingAccountSubtypes: [EnumBookingAccountSubtypes.Loans]\r\n } as BookingAccountListParams;\r\n };\r\n\r\n protected override OnGetCustomQuickFilterSettings(): QuickFilterSettings {\r\n return {\r\n Company: { IsVisible: true, IsMultiple: true, Params: this.GetCompanyParams },\r\n Account: { IsVisible: true, IsMultiple: true, Params: this.GetAccountParams },\r\n CurrencyFilter: { IsVisible: true, Default: () => { return Globals.OrganizationDefaultCurrency || 'ILS'; }, IsHideClearButton: true }\r\n } as QuickFilterSettings;\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n if (ExternalEntityType == Loan) this.OnLoadData();\r\n }\r\n\r\n public override OnInitComponentFinished() {\r\n super.OnInitComponentFinished();\r\n this.LoadBanks();\r\n }\r\n\r\n LoadBanks() {\r\n this.Do(this.accountEndpoint.GetBanksByType([EnumBankTypes.Local, EnumBankTypes.ExternalLoaner]), false, (response) => {\r\n this.State.Banks = response.Data;\r\n });\r\n }\r\n\r\n OnLoadData() {\r\n if (!Globals.OrganizationID) return;\r\n this.State.IsLoading = true;\r\n const params = this.GetParams();\r\n params.Statuses = [...this.State.Statuses];\r\n params.AmortizationTypes = this.State.AmortizationTypes;\r\n params.LoanSides = this.State.Sides;\r\n params.InterestTypes = this.State.InterestTypes;\r\n\r\n this.DataSources['Loans'] = new DataSourceCustomAction(\r\n (options: DataLoadOptions) => this.endpoint.GetLoans(params), undefined, () => {\r\n this.State.IsLoading = false;\r\n });\r\n }\r\n\r\n protected override OnGetToolbarSettings(): ToolbarSettings {\r\n if (!this.G) { return; }\r\n if (this.A.Screen.IsDesktop()) {\r\n const settings = new ToolbarSettings;\r\n settings.IsAllowFilter = !this.IsWindowMode();\r\n settings.IsAllowExport = true;\r\n settings.IsAllowPrint = false;\r\n settings.GridExtender = this.G;\r\n return settings;\r\n }\r\n if (this.A.Screen.IsMobile()) {\r\n const settings = new ToolbarSettings;\r\n settings.IsAllowFilter = true;\r\n return settings;\r\n }\r\n }\r\n\r\n\r\n private ClearState() {\r\n this.State.Statuses = [EnumLoanStatus.Funded, EnumLoanStatus.Draft];\r\n this.State.AmortizationTypes = this.State.Sides = this.State.InterestTypes = [];\r\n }\r\n}\r\n\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { Component, Input } 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 { IndexEndpoint } from '../../../_proxy/endpoints/index.endpoint';\r\nimport { Index } from '../../../_proxy/entities/index.entity';\r\nimport { Loan } from '../../../_proxy/entities/loan.entity';\r\nimport { InterestEndpoint } from '@kraken/_proxy/endpoints/interest.endpoint';\r\nimport { Interest } from '@kraken/_proxy/entities/interest.entity';\r\nimport { EnumLoanHandlingType } from '@kraken/_proxy/enums';\r\nimport { LoanView } from '@kraken/_proxy/views/loan.view';\r\nimport { ContextMenuElement } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { LoanEndpoint } from '@kraken/_proxy/endpoints/loan.endpoint';\r\n\r\nclass State extends BaseState {\r\n InterestIndexes: Interest[] = [];\r\n LinkageIndexes: Index[] = [];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-loan-grid',\r\n templateUrl: './loan-grid.component.html',\r\n styleUrls: ['./loan-grid.component.scss']\r\n})\r\nexport class LoanGridComponent extends BaseGridComponent {\r\n @Input() IsLoading: boolean = false;\r\n\r\n constructor(A: ServiceBagService,\r\n private indexEndpoint: IndexEndpoint,\r\n private interestEndpoint: InterestEndpoint,\r\n private loanEndpoint: LoanEndpoint) {\r\n super(A, 'LoanGridComponent', Loan, State);\r\n\r\n this.BindHandler('GetLinkedInterest');\r\n }\r\n\r\n OnNavigate(e) {\r\n const record = e.data as LoanView;\r\n if (!record?.EntryID) return;\r\n\r\n if (record.Source === EnumLoanHandlingType.LoansModule) {\r\n this.Navigate(['/pages/loan', record.EntryID]);\r\n } else {\r\n if (record.BalanceDetailsPayments?.length > 0) {\r\n this.Navigate(['/pages/loan-payments-schedule'], { BalanceID: record.BalanceID, LineID: record.BalanceLineID });\r\n }\r\n }\r\n }\r\n\r\n override OnInitComponent() {\r\n this.LoadIndexes();\r\n }\r\n\r\n LoadIndexes() {\r\n this.Do(this.interestEndpoint.GetList(), false, (response) => {\r\n this.State.InterestIndexes = response.Entities;\r\n });\r\n this.Do(this.indexEndpoint.GetList(), false, (response) => {\r\n this.State.LinkageIndexes = response.Entities;\r\n });\r\n }\r\n\r\n GetLinkedInterest(data: Loan) {\r\n if (!data.InterestLinkageIndexID) return;\r\n const linkedInterest = this.State.InterestIndexes.find(item => item.EntryID === data.InterestLinkageIndexID);\r\n if (!linkedInterest) return;\r\n return linkedInterest.Name;\r\n }\r\n\r\n GetGroupCellCaption(data: any) {\r\n if(data.column.dataField == 'Notes'){\r\n if(!data.value) {\r\n return this.RC('lblUnknown');\r\n }\r\n }\r\n\r\n const value: string = data.value;\r\n\r\n if (!value) return '';\r\n const [sortValue, caption] = value.toString().split(';');\r\n return caption ? caption : sortValue;\r\n }\r\n \r\n protected override GetGridRowContextMenu(options?: any): ContextMenuElement[] {\r\n if (options?.data?.Source === EnumLoanHandlingType.BankInformation) {\r\n return [];\r\n }\r\n\r\n const label = options?.data?.IsMarked ? 'btnRemoveMark' : 'btnAddMark'; \r\n\r\n return [{\r\n text: this.RC(label),\r\n onClick: () => {\r\n this.MarkLoan(options.data);\r\n }\r\n }];\r\n }\r\n\r\n private MarkLoan(loan: Loan) {\r\n const isMarked = !loan.IsMarked;\r\n\r\n this.Do(this.loanEndpoint.Mark(loan.EntryID, isMarked), true, () => {\r\n this.NotifyEntitySaved(null, Loan);\r\n }, (response) => {\r\n this.A.UI.StopMessage(response.ResponseMessage);\r\n });\r\n } \r\n}","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\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.TotalInterest | formatNumberRate}} {{cell.data.TotalInterest ? '%' : ''}}\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n {{GetLinkedInterest(cell.data)}} +\\r\\n \\r\\n \\r\\n {{ cell.data.InterestSuprlusPercent | formatNumberRate}} {{cell.data.InterestSuprlusPercent ? '%' : ''}}\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n {{ GetGroupCellCaption(data) }}\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\";","import { Component, EventEmitter, Input, Output } 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, GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumAmortizationType, EnumInterestType, EnumLoanInterestPeriodCalculationType, EnumLoanPaymentInterestPrincipalType } from '../../../../_proxy/enums';\r\nimport { Loan } from '../../../../_proxy/entities/loan.entity';\r\nimport { LoanPayment } from '../../../../_proxy/entities/loanpayment.entity';\r\nimport { LoanPaymentEndpoint } from '../../../../_proxy/endpoints/loanpayment.endpoint';\r\nimport { formatNumber } from 'devextreme/localization';\r\nimport { ContextMenuElement } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { merge } from 'lodash';\r\n\r\nclass State extends BaseState {\r\n GridHasChanges: boolean = false;\r\n PaymentTypes: GenericListEntity[];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-loan-payments-grid',\r\n styleUrls: ['./loan-payments-grid.component.scss'],\r\n templateUrl: './loan-payments-grid.component.html'\r\n})\r\nexport class LoanPaymentsGridComponent extends BaseGridComponent {\r\n @Output() reload: EventEmitter = new EventEmitter();\r\n @Input() Loan: Loan;\r\n @Input() EditMode: boolean = false;\r\n @Input() ShowLateInterest: boolean = false;\r\n\r\n _changes = [];\r\n @Input() set Changes(v) {\r\n const newChanges = [];\r\n v.forEach(change => {\r\n const _change = this._changes.find(ch => ch.key === change.key);\r\n if (!_change) {\r\n newChanges.push(change);\r\n } else {\r\n newChanges.push(merge({}, _change, change));\r\n }\r\n });\r\n\r\n this._changes.forEach(_change => {\r\n const change = v.find(ch => ch.key === _change.key);\r\n if (!change) {\r\n newChanges.push(_change);\r\n }\r\n });\r\n\r\n this._changes = newChanges;\r\n }\r\n\r\n constructor(A: ServiceBagService, private loanPaymentEndpoint: LoanPaymentEndpoint) {\r\n super(A, 'LoanPaymentsGridComponent', LoanPayment, State);\r\n this.BindHandler('OnGoToJournalEntry');\r\n this.BindHandler('IsJournalEntryLinkVisible');\r\n this.BindHandler('GetInterestFormat');\r\n this.BindHandler('GetTotalFormat');\r\n }\r\n\r\n override OnInitComponentFinished() {\r\n super.OnInitComponentFinished();\r\n this.G.grid.columnHidingEnabled = false;\r\n }\r\n\r\n OnRowPrepared(row: any): void {\r\n if (row.rowType === 'data') {\r\n\r\n if (!row.data.IsOpen) {\r\n row.rowElement.classList.add('paid');\r\n }\r\n }\r\n }\r\n\r\n onSaving(e: any) {\r\n e.cancel = true;\r\n const payments = ((this.DataSource as any).Items) as LoanPayment[];\r\n\r\n const updatedPayments = e.changes.map(item => {\r\n const loanPayment = new LoanPayment();\r\n loanPayment.EntryID = +item.key;\r\n loanPayment.AdjustedDate = item.data.AdjustedDate;\r\n loanPayment.DuePrincipal = item.data.DuePrincipal;\r\n loanPayment.PaymentType = item.data.PaymentType;\r\n loanPayment.LateInterest = item.data.LateInterest;\r\n return loanPayment;\r\n });\r\n\r\n payments.forEach(p => {\r\n const payment = updatedPayments.find(item => item.EntryID == p.EntryID);\r\n if (payment) {\r\n p.DuePrincipal = payment.DuePrincipal ?? p.DuePrincipal;\r\n p.AdjustedDate = payment.AdjustedDate ?? p.AdjustedDate;\r\n p.PaymentType = payment.PaymentType ?? p.PaymentType;\r\n p.LateInterest = payment.LateInterest ?? p.LateInterest;\r\n }\r\n });\r\n\r\n\r\n if (e.changes.length) {\r\n e.promise = new Promise((resolve) => {\r\n this.Do(this.loanPaymentEndpoint.SaveBatch(payments), true, async () => {\r\n this.State.GridHasChanges = false;\r\n this.reload.emit();\r\n resolve(true);\r\n }, (response) => {\r\n this.UI.StopMessage(response.ResponseMessage);\r\n resolve(false);\r\n });\r\n });\r\n }\r\n }\r\n\r\n OnEditorPreparing(e: any) {\r\n const { editorOptions, setValue, parentType, dataField, component, row } = e;\r\n\r\n const isPaymentTypeCol = parentType === 'dataRow' && dataField === 'PaymentType';\r\n\r\n const isLateInterest = parentType === 'dataRow' && dataField === 'LateInterest';\r\n\r\n if (isPaymentTypeCol) {\r\n const isLastRow = component.totalCount() === (row.rowIndex + 1);\r\n let list = this.LIST('LoanPaymentInterestPrincipalType');\r\n\r\n list = isLastRow ? list.filter(item => item.Value !== EnumLoanPaymentInterestPrincipalType.Principal) : list;\r\n \r\n list = this.Loan?.AmortizationType !== EnumAmortizationType.Baloon \r\n ? list.filter(item => item.Value !== EnumLoanPaymentInterestPrincipalType.PrincipalAcumulation) \r\n : list;\r\n\r\n editorOptions.dataSource = list;\r\n }\r\n\r\n editorOptions.onValueChanged = ({ value }) => {\r\n setValue(value);\r\n this.State.GridHasChanges = this.G.HasEditData();\r\n\r\n if (isPaymentTypeCol) {\r\n if (value === EnumLoanPaymentInterestPrincipalType.Interest ||\r\n value === EnumLoanPaymentInterestPrincipalType.PrincipalAcumulation) {\r\n if(this.ShowLateInterest) {\r\n component.cellValue(row.rowIndex, 'BasicInterest', 0);\r\n component.cellValue(row.rowIndex, 'DueInterest', row.data.LateInterest);\r\n } else {\r\n component.cellValue(row.rowIndex, 'DueInterest', 0);\r\n }\r\n component.cellValue(row.rowIndex, 'PrincipalLinkageSurplus', 0);\r\n }\r\n\r\n if (value === EnumLoanPaymentInterestPrincipalType.Principal) {\r\n if(this.ShowLateInterest) {\r\n component.cellValue(row.rowIndex, 'BasicInterest', 0);\r\n component.cellValue(row.rowIndex, 'DueInterest', row.data.LateInterest);\r\n } else {\r\n component.cellValue(row.rowIndex, 'DueInterest', 0);\r\n }\r\n component.cellValue(row.rowIndex, 'InterestLinkageSurplus', 0);\r\n }\r\n }\r\n\r\n if(isLateInterest) {\r\n component.cellValue(row.rowIndex, 'DueInterest', row.data.LateInterest + row.data.BasicInterest);\r\n }\r\n };\r\n }\r\n\r\n OnCellPrepared = (e) => {\r\n const { column, rowType, cellElement, data } = e;\r\n if (!this.EditMode || rowType !== 'data') return;\r\n\r\n const isEditable = column.dataField === 'AdjustedDate'\r\n || column.dataField === 'PaymentType'\r\n || column.dataField === 'LateInterest'\r\n || (column.dataField === 'DuePrincipal' && data.PaymentType !== EnumLoanPaymentInterestPrincipalType.Interest);\r\n\r\n if (isEditable) {\r\n cellElement.style.backgroundColor = '#e0ebf6';\r\n }\r\n };\r\n\r\n saveGridChanges() {\r\n const gridInstance = this.grid.instance as any;\r\n\r\n if (this.G.HasEditData()) {\r\n const validationgCtrl = gridInstance.getController('validating');\r\n\r\n validationgCtrl.validate(true).then(isValid => {\r\n if (!isValid) return Promise.reject();\r\n this.G.AcceptChanges();\r\n });\r\n }\r\n }\r\n\r\n cancelGridChanges() {\r\n this.G.CancelEditData();\r\n this.State.GridHasChanges = false;\r\n }\r\n\r\n get IsDueComissionColumnVisible(): boolean {\r\n return !!this.Loan?.PeriodicCommisionFeeAmount;\r\n }\r\n\r\n get IsLinkageColumnVisible(): boolean {\r\n return !!this.Loan?.LinkageIndexID;\r\n }\r\n\r\n get IsLinkedInterestColumnVisible(): boolean {\r\n return !!(this.Loan?.InterestType === EnumInterestType.Linked);\r\n }\r\n\r\n get IsAnnuity(): boolean {\r\n return !!(this.Loan?.AmortizationType === EnumAmortizationType.AnnuityShpizer);\r\n }\r\n\r\n get IsInterestDaysVisible(): boolean {\r\n return !(this.Loan?.AmortizationType === EnumAmortizationType.AnnuityShpizer || this.Loan?.InterestPeriodCalculationType === EnumLoanInterestPeriodCalculationType.Monthly);\r\n }\r\n\r\n OnGoToJournalEntry(e: any) {\r\n const { JournalEntryID } = e?.row?.data;\r\n this.Navigate(['/pages/journal-entry', JournalEntryID], true, true);\r\n }\r\n\r\n IsJournalEntryLinkVisible(e: any) {\r\n return !!e?.row?.data?.JournalEntryID;\r\n }\r\n\r\n GetInterestFormat(e: any) {\r\n return `${this.RC('TotalInterest')}: ${formatNumber(e.value, this.F.NumberSum)}`;\r\n }\r\n\r\n GetTotalFormat(e: any) {\r\n return `${this.RC('lblDueTotal')}: ${formatNumber(e.value, this.F.NumberSum)}`;\r\n }\r\n\r\n protected override GetGridRowContextMenu(options?: any): ContextMenuElement[] {\r\n return [{\r\n text: this.RC('btnJournalEntry'),\r\n visible: this.IsJournalEntryLinkVisible(options),\r\n onClick: () => this.OnGoToJournalEntry(options)\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\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class Index extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'Index';\r\n }\r\n \r\n public Name: string; \r\n public Description: string; \r\n public IndexLines: IndexLine[] = []; \r\n\t\r\n}\r\n\r\nexport class IndexLine extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'IndexLine';\r\n }\r\n \r\n public Year: number; \r\n public Month: number; \r\n public Rate: number; \r\n public LineID: number;\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 } from \"@m4u-angular/base/entities/BaseEntities\";\r\nimport { DataSourceCustomAction } from \"@m4u-angular/base/datalayer/BaseDataSources\";\r\nimport { BasePageComponent } from \"@m4u-angular/base/component/BasePageComponent\";\r\nimport { Index } from \"../../../_proxy/entities/index.entity\";\r\nimport { IndexEndpoint } from \"../../../_proxy/endpoints/index.endpoint\";\r\nimport { EnumCRUDActions } from \"@m4u-angular/core/framework/sysenums.enum\";\r\n\r\nclass State extends BaseState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-index-list',\r\n templateUrl: './index-list.component.html'\r\n})\r\nexport class IndexListComponent extends BasePageComponent\r\n{\r\n constructor(A: ServiceBagService, private endpoint: IndexEndpoint) {\r\n super(A, 'IndexListComponent', Index, State);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n public LoadDataSource() {\r\n this.DataSources[\"Indexes\"] = new DataSourceCustomAction(() => this.endpoint.GetList(null));\r\n this.DS('Indexes').Reload();\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n if (ExternalEntityType == Index) this.LoadDataSource();\r\n }\r\n}","export default \"\\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 { Index } from '@kraken/_proxy/entities/index.entity';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-index-grid',\r\n templateUrl: './index-grid.component.html'\r\n})\r\nexport class IndexGridComponent extends BaseGridComponent\r\n{\r\n constructor(A: ServiceBagService) {\r\n super(A, 'IndexGridComponent', Index, BaseState);\r\n }\r\n\r\n OnNavigate(e) {\r\n this.Navigate([\"/pages/index\", e.data.EntryID]);\r\n }\r\n\r\n LastDate = (rowdata: Index) => {\r\n const month = rowdata?.IndexLines?.length ? rowdata.IndexLines[rowdata.IndexLines.length - 1].Month : null;\r\n const year = rowdata?.IndexLines?.length ? rowdata.IndexLines[rowdata.IndexLines.length - 1].Year : null;\r\n\r\n return month && year ? `${month}/${year}` : 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\";","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 { IndexEndpoint } from '../../_proxy/endpoints/index.endpoint';\r\nimport { Index } from '../../_proxy/entities/index.entity';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { GridHelper } from '@m4u-angular/core/helpers/GridHelper';\r\n\r\nclass State extends BaseState {\r\n OrganizationID: number;\r\n RateDate: Date;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-index',\r\n templateUrl: './index.component.html'\r\n})\r\nexport class IndexComponent extends BasePageCRUDComponent {\r\n constructor(A: ServiceBagService, endpoint: IndexEndpoint) {\r\n super(A, 'IndexComponent', Index, State, endpoint, EnumPageDisplayModes.Window);\r\n }\r\n\r\n override OnEntitySaved() {\r\n this.NavigateBack();\r\n }\r\n\r\n OnGridContentReady(e) {\r\n setTimeout(() => GridHelper.RefreshGridHeight(e.component, this));\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\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class Interest extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'Interest';\r\n }\r\n \r\n public Name: string; \r\n public Description: string; \r\n public InterestLines: InterestLine[] = []; \r\n\tpublic CreatedBy: number;\r\n\tpublic CreatedDate: Date;\r\n}\r\n\r\nexport class InterestLine extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'InterestLine';\r\n }\r\n \r\n public Date: Date; \r\n public Rate: number; \r\n public LineID: number;\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 } from \"@m4u-angular/base/entities/BaseEntities\";\r\nimport { DataSourceCustomAction } from \"@m4u-angular/base/datalayer/BaseDataSources\";\r\nimport { BasePageComponent } from \"@m4u-angular/base/component/BasePageComponent\";\r\nimport { Interest } from \"../../../_proxy/entities/interest.entity\";\r\nimport { InterestEndpoint } from \"../../../_proxy/endpoints/interest.endpoint\";\r\nimport { EnumCRUDActions } from \"@m4u-angular/core/framework/sysenums.enum\";\r\n\r\nclass State extends BaseState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-interest-list',\r\n templateUrl: './interest-list.component.html'\r\n})\r\nexport class InterestListComponent extends BasePageComponent\r\n{\r\n constructor(A: ServiceBagService, private endpoint: InterestEndpoint) {\r\n super(A, 'InterestListComponent', Interest, State);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n public LoadDataSource() {\r\n this.DataSources[\"Interests\"] = new DataSourceCustomAction(() => this.endpoint.GetList(null));\r\n this.DS('Interests').Reload();\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n if (ExternalEntityType == Interest) this.LoadDataSource();\r\n }\r\n}","export default \"\\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 { Interest } from '@kraken/_proxy/entities/interest.entity';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-interest-grid',\r\n templateUrl: './interest-grid.component.html'\r\n})\r\nexport class InterestGridComponent extends BaseGridComponent\r\n{\r\n constructor(A: ServiceBagService) {\r\n super(A, 'InterestGridComponent', Interest, BaseState);\r\n }\r\n\r\n OnNavigate(e) {\r\n this.Navigate([\"/pages/interest\", 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 { InterestEndpoint } from '../../_proxy/endpoints/interest.endpoint';\r\nimport { Interest } from '../../_proxy/entities/interest.entity';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { GridHelper } from '@core/helpers/GridHelper';\r\n\r\nclass State extends BaseState {\r\n OrganizationID: number;\r\n RateDate: Date;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-interest',\r\n templateUrl: './interest.component.html'\r\n})\r\nexport class InterestComponent extends BasePageCRUDComponent {\r\n constructor(A: ServiceBagService, endpoint: InterestEndpoint) {\r\n super(A, 'InterestComponent', Interest, State, endpoint, EnumPageDisplayModes.Window);\r\n }\r\n\r\n override OnEntitySaved() {\r\n this.NavigateBack();\r\n }\r\n\r\n OnGridContentReady(e) {\r\n setTimeout(() => GridHelper.RefreshGridHeight(e.component, this));\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\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { Holiday } from './../entities/holiday.entity';\r\n@Injectable()\r\nexport class HolidayEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(api: APIGatewayService) {super(\"Holiday\", api);}\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 Holiday extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'Holiday';\r\n }\r\n \r\n public Date: Date; \r\n public Name: string; \r\n\t\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 { HolidayEndpoint } from \"../../_proxy/endpoints/holiday.endpoint\";\r\nimport { Holiday } from \"../../_proxy/entities/holiday.entity\";\r\nimport { ToolbarSettings } from '@base/classes/BaseClasses';\r\n\r\nclass State extends BaseState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-holiday',\r\n templateUrl: './holiday.component.html'\r\n})\r\nexport class HolidayComponent extends BasePageCRUDComponent\r\n{\r\n constructor(A: ServiceBagService, endpoint: HolidayEndpoint) {\r\n super(A, 'HolidayComponent', Holiday, State, endpoint, EnumPageDisplayModes.Window);\r\n }\r\n\r\n override OnEntitySaved() {\r\n this.NavigateBack();\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\";","import { Component } from \"@angular/core\";\r\nimport { ServiceBagServices, ServiceBagService } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { BaseEntity, BaseState } from \"@m4u-angular/base/entities/BaseEntities\";\r\nimport { DataSourceCustomAction } from \"@m4u-angular/base/datalayer/BaseDataSources\";\r\nimport { BasePageComponent } from \"@m4u-angular/base/component/BasePageComponent\";\r\nimport { Holiday } from \"../../../_proxy/entities/holiday.entity\";\r\nimport { HolidayEndpoint } from \"../../../_proxy/endpoints/holiday.endpoint\";\r\nimport { EnumCRUDActions } from \"@m4u-angular/core/framework/sysenums.enum\";\r\n\r\nclass State extends BaseState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-holiday-list',\r\n templateUrl: './holiday-list.component.html'\r\n})\r\nexport class HolidayListComponent extends BasePageComponent\r\n{\r\n constructor(A: ServiceBagService, private endpoint: HolidayEndpoint) {\r\n super(A, 'HolidayListComponent', Holiday, State);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n public LoadDataSource() {\r\n this.DataSources[\"Holidays\"] = new DataSourceCustomAction(() => this.endpoint.GetList(null));\r\n this.DS('Holidays').Reload();\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n if (ExternalEntityType == Holiday) this.LoadDataSource();\r\n }\r\n}","export default \"\\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 { Holiday } from '@kraken/_proxy/entities/holiday.entity';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-holiday-grid',\r\n templateUrl: './holiday-grid.component.html'\r\n})\r\nexport class HolidayGridComponent extends BaseGridComponent\r\n{\r\n constructor(A: ServiceBagService) {\r\n super(A, 'HolidayGridComponent', Holiday, BaseState);\r\n }\r\n\r\n OnNavigate(e) {\r\n this.Navigate([\"/pages/holiday\", e.data.EntryID]);\r\n }\r\n}","export default \"\\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 LoanTransactionReportParams extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'LoanTransactionReportParams';\r\n }\r\n \r\n public LoanID: number; \r\n public DateFrom: Date; \r\n public DateTo: Date; \r\n public ShowAll: boolean; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { Component, ViewChild } from \"@angular/core\";\r\nimport { ServiceBagServices, ServiceBagService } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { EnumPageDisplayModes } from \"@m4u-angular/core/framework/sysenums.enum\";\r\nimport { BaseState, BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { LoanPayment } from \"../../_proxy/entities/loanpayment.entity\";\r\nimport { LoanPaymentEndpoint } from \"../../_proxy/endpoints/loanpayment.endpoint\";\r\nimport { DxDataGridComponent, DxValidationGroupComponent } from \"devextreme-angular\";\r\nimport { GridExtender } from \"@m4u-angular/base/grid/Grid.extender\";\r\nimport { DataSourceCustomAction } from \"@m4u-angular/base/datalayer/BaseDataSources\";\r\nimport { LoanTransactionReportParams } from \"../../_proxy/params/loantransactionreport.param\";\r\nimport { TransactionEndpoint } from \"../../_proxy/endpoints/transaction.endpoint\";\r\nimport { EnumLoanPaymentInterestPrincipalType, EnumLoanPostPaymentRecalculationOptions, EnumLoanStatus } from \"../../_proxy/enums\";\r\nimport { Loan } from \"@kraken/_proxy/entities/loan.entity\";\r\nimport { LoanEndpoint } from \"@kraken/_proxy/endpoints/loan.endpoint\";\r\nimport { Transaction } from \"@kraken/_proxy/entities/transaction.entity\";\r\n\r\nclass State extends BaseState {\r\n LoanPayment: LoanPayment = {} as LoanPayment;\r\n PaidTotal: number = 0;\r\n RemainingTotal: number = 0;\r\n DateFrom: Date;\r\n DateTo: Date;\r\n ShowAll: boolean;\r\n InitDuePrincipal = 0;\r\n RecalculationType = EnumLoanPostPaymentRecalculationOptions.Payment;\r\n Today: Date = new Date();\r\n PostPaymentActions: any[] = [];\r\n TransactionId: number;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-post-payment',\r\n styleUrls: ['post-payment.component.scss'],\r\n templateUrl: './post-payment.component.html'\r\n})\r\nexport class PostPaymentComponent extends BasePageComponent\r\n{\r\n constructor(\r\n A: ServiceBagService,\r\n private loanPaymentEndpoint: LoanPaymentEndpoint,\r\n private loanEndpoint: LoanEndpoint,\r\n private transactionEndpoint: TransactionEndpoint) {\r\n super(A, 'PostPaymentComponent', BaseEntity, State, EnumPageDisplayModes.Window);\r\n }\r\n @ViewChild(\"grid\", { static: false }) grid: DxDataGridComponent;\r\n @ViewChild('validationGroup') protected validationGroup: DxValidationGroupComponent;\r\n\r\n protected override OnInitComponent(): void {\r\n const EntityID = +(this.A.Navigator.GetRouteParams().EntryID);\r\n this.Do(this.loanPaymentEndpoint.Get(EntityID), false, (response) => {\r\n this.State.LoanPayment = { ...response.Entity } as LoanPayment;\r\n if (this.State.LoanPayment.PaymentType == EnumLoanPaymentInterestPrincipalType.PrincipalAcumulation) {\r\n this.State.LoanPayment.DueInterest = 0;\r\n }\r\n const { AdjustedDate, DuePrincipal } = response.Entity;\r\n this.State.RemainingTotal = 0;\r\n this.State.DateFrom = AdjustedDate;\r\n this.State.DateTo = AdjustedDate;\r\n this.State.InitDuePrincipal = DuePrincipal;\r\n this.State.PostPaymentActions = this.LIST('PostPaymentActions').filter((item: any) => this.State.LoanPayment.IsLinkage || !item.Linkage);\r\n this.RepaintToolbar();\r\n });\r\n }\r\n public get G(): GridExtender { return this.grid && (this.grid as any).G; }\r\n\r\n OnAdjustedDateChange({ value }: any) {\r\n this.State.DateFrom = value;\r\n this.State.DateTo = value;\r\n this.Do(this.loanPaymentEndpoint.ReculculateInterest(this.State.LoanPayment), false, (response) => {\r\n this.State.LoanPayment.DueInterest = response.Entity.DueInterest;\r\n });\r\n }\r\n\r\n get AdjustedDate() {\r\n return this.State.LoanPayment?.AdjustedDate;\r\n }\r\n\r\n RecalculateRemainingTotal() {\r\n const { DueInterest, DueComission, DuePrincipal, PrincipalLinkageSurplus, InterestLinkageSurplus }\r\n = this.State.LoanPayment;\r\n const dueTotal = DueInterest + DueComission + DuePrincipal + PrincipalLinkageSurplus + InterestLinkageSurplus;\r\n const remainingTotal = Math.round((this.State.PaidTotal - dueTotal) * 100) / 100;\r\n this.State.RemainingTotal = remainingTotal;\r\n\r\n this.State.PostPaymentActions = this.LIST('PostPaymentActions')\r\n .filter((item: any) => this.State.LoanPayment.IsLinkage || !item.Linkage)\r\n .filter((item: any) => {\r\n if (item.Value === 2) {\r\n return remainingTotal > 0;\r\n }\r\n\r\n if (item.Value === 0) {\r\n return Math.abs(remainingTotal) < DuePrincipal;\r\n }\r\n\r\n if (item.Value === 1) {\r\n return Math.abs(remainingTotal) < DueInterest;\r\n }\r\n\r\n if (item.Value === 3) {\r\n return Math.abs(remainingTotal) < PrincipalLinkageSurplus;\r\n }\r\n\r\n if (item.Value === 4) {\r\n return Math.abs(remainingTotal) < InterestLinkageSurplus;\r\n }\r\n\r\n return true;\r\n });\r\n }\r\n\r\n override OnInitTitle() {\r\n const { LoanBankReferenceNumber, LoanOurReferenceNumber, LoanID, AdjustedDate, PaymentNumber } = this.State.LoanPayment;\r\n return `${this.GetDefaultTitle()} - ${LoanBankReferenceNumber || LoanOurReferenceNumber || LoanID} [${AdjustedDate?.toLocaleDateString()}-${PaymentNumber}]`;\r\n }\r\n\r\n get ShowRecalculationOptions(): boolean {\r\n return this.State.InitDuePrincipal != this.State.LoanPayment.DuePrincipal;\r\n }\r\n\r\n async OnPostPayment() {\r\n console.log(this.State.LoanPayment);\r\n const isValid = await this.ValidateValidationGroup(this.validationGroup);\r\n if (!isValid) return;\r\n if (this.State.RemainingTotal != 0) {\r\n this.UI.StopMessage(this.RC(\"RemainintTotalShouldBeZero\"));\r\n return;\r\n }\r\n this.Do(this.loanPaymentEndpoint.PostPayment(this.State.LoanPayment, this.State.RecalculationType, this.State.TransactionId), true, () => {\r\n this.NotifyEntitySaved(this.State.LoanPayment, LoanPayment);\r\n this.Do(this.loanEndpoint.Get(this.State.LoanPayment.LoanID), false, (response) => {\r\n if (response.Entity.Status === EnumLoanStatus.Finished) {\r\n this.NotifyEntitySaved(response.Entity, Loan);\r\n }\r\n this.NavigateBack();\r\n });\r\n });\r\n }\r\n\r\n OnDateFromChange() {\r\n this.LoadTransactions();\r\n }\r\n\r\n OnDateToChange() {\r\n this.LoadTransactions();\r\n }\r\n\r\n OnTransactionClicked(transaction: Transaction) {\r\n this.State.PaidTotal = transaction.Debit || transaction.Credit;\r\n this.State.TransactionId = transaction.EntryID;\r\n }\r\n\r\n OnTransactionFilterChanged(e) {\r\n this.State.DateFrom = e.DateFrom;\r\n this.State.DateTo = e.DateTo;\r\n this.State.ShowAll = e.ShowAll;\r\n this.LoadTransactions();\r\n }\r\n\r\n OnPostPaymentActionClick(e) {\r\n switch (e.itemData.Value) {\r\n case 0: this.State.LoanPayment.DuePrincipal += this.State.RemainingTotal; break;\r\n case 1: this.State.LoanPayment.DueInterest += this.State.RemainingTotal; break;\r\n case 2: this.State.LoanPayment.DueComission += this.State.RemainingTotal; break;\r\n case 3: this.State.LoanPayment.PrincipalLinkageSurplus += this.State.RemainingTotal; break;\r\n case 4: this.State.LoanPayment.InterestLinkageSurplus += this.State.RemainingTotal; break;\r\n }\r\n this.RecalculateRemainingTotal();\r\n }\r\n\r\n LoadTransactions(): void {\r\n if (this.State.DateFrom > this.State.Today || this.State.DateTo > this.State.Today || this.State.DateFrom > this.State.DateTo) {\r\n return;\r\n }\r\n const params = new LoanTransactionReportParams();\r\n params.LoanID = this.State.LoanPayment.LoanID;\r\n params.DateFrom = this.State.DateFrom;\r\n params.DateTo = this.State.DateTo;\r\n params.ShowAll = this.State.ShowAll;\r\n this.DataSources['Transactions'] = new DataSourceCustomAction(() => this.transactionEndpoint.ListLoansTransactions(params));\r\n this.DataSources['Transactions'].Reload();\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\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 { EnumSecurityType } from './../enums';\r\nimport { EnumSecurityStatus } from './../enums';\r\nimport { Loan } from './../entities/loan.entity';\r\nexport class Security extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'Security';\r\n }\r\n \r\n public LoanID: number; \r\n public SecurityType: EnumSecurityType; \r\n public Status: EnumSecurityStatus; \r\n public Issuer: string; \r\n public ReceivedAtDate: Date; \r\n public ValidFrom: Date; \r\n public ValidUntil: Date; \r\n public Amount: number; \r\n public Currency: string; \r\n public Reference: string; \r\n public Loan: Loan = new Loan; \r\n\tpublic CreatedBy: number;\r\n\tpublic CreatedDate: Date;\r\n}\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint, EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { Security } from './../entities/security.entity';\r\nimport { SecurityParams } from './../params/security.param';\r\n@Injectable()\r\nexport class SecurityEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"Security\", api);}\r\n\t\r\n\r\n public ListEx(LoanID: number, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'ListEx', {LoanID: LoanID, options:options?.GetLoadOptions()} );\r\n }\r\n\r\n public GetSecurities(Params: SecurityParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'GetSecurities', Params, undefined );\r\n }\r\n}\r\n\r\n","import { Component, Input, ViewChild } from '@angular/core';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Security } from '../../../_proxy/entities/security.entity';\r\nimport { SecurityEndpoint } from '../../../_proxy/endpoints/security.endpoint';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { SecurityGridComponent } from '../grid/security-grid.component';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-security-list',\r\n templateUrl: './security-list.component.html'\r\n})\r\nexport class SecurityListComponent extends BaseComponent\r\n{\r\n @ViewChild(\"grid\") grid: SecurityGridComponent;\r\n private _loanID: number;\r\n @Input() set LoanID(value) {\r\n this._loanID = value;\r\n if (this._loanID > -1) this.LoadDataSource();\r\n }\r\n\r\n constructor(A: ServiceBagService, private endpoint: SecurityEndpoint) {\r\n super(A, 'SecurityListComponent', BaseState);\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n if (ExternalEntityType == Security) this.LoadDataSource();\r\n }\r\n\r\n public LoadDataSource() {\r\n this.DataSources[\"Securities\"] = new DataSourceCustomAction((options: DataLoadOptions) => this.endpoint.ListEx(this._loanID, options));\r\n }\r\n\r\n GetLinkParams() {\r\n return { LoanID: this._loanID };\r\n }\r\n}\r\n\r\n","export default \"\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { Component } from '@angular/core';\r\nimport { Security } from '@kraken/_proxy/entities/security.entity';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-security-grid',\r\n templateUrl: './security-grid.component.html'\r\n})\r\nexport class SecurityGridComponent extends BaseGridComponent {\r\n constructor(A: ServiceBagService) {\r\n super(A, 'SecurityGridComponent', Security, BaseState);\r\n }\r\n\r\n OnNavigate(e) {\r\n this.Navigate([\"/pages/security\", e.data.EntryID]);\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\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 { Organization } from \"../../_proxy/entities/organization.entity\";\r\nimport { EnumPageDisplayModes } from \"@m4u-angular/core/framework/sysenums.enum\";\r\nimport { ContextMenuElement, ToolbarSettings } from \"@m4u-angular/base/classes/BaseClasses\";\r\nimport { SecurityEndpoint } from \"../../_proxy/endpoints/security.endpoint\";\r\nimport { Security } from \"../../_proxy/entities/security.entity\";\r\n\r\nclass State extends BaseState {\r\n Organization: Organization = new Organization;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-security',\r\n templateUrl: './security.component.html'\r\n})\r\nexport class SecurityComponent extends BasePageCRUDComponent\r\n{\r\n constructor(A: ServiceBagService, private endpoint: SecurityEndpoint) {\r\n super(A, 'SecurityComponent', Security, State, endpoint, EnumPageDisplayModes.Window);\r\n }\r\n\r\n override OnEntityNew() {\r\n this.Entity.LoanID = this.QueryParams.LoanID;\r\n }\r\n\r\n override OnEntitySaved() {\r\n this.NavigateBack();\r\n }\r\n\r\n override OnEntityDeleted() {\r\n this.NavigateBack();\r\n }\r\n\r\n override OnInitContextMenus(): ContextMenuElement[] {\r\n if (this.IsAddMode) return undefined;\r\n const menus: ContextMenuElement[] =\r\n [\r\n {\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 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}","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\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 { 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 { SecurityEndpoint } from \"../../_proxy/endpoints/security.endpoint\";\r\nimport { Security } from \"../../_proxy/entities/security.entity\";\r\n\r\nclass State extends BaseState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-security-report',\r\n templateUrl: './security-report.component.html'\r\n})\r\nexport class SecurityReportComponent extends BasePageCRUDComponent\r\n{\r\n constructor(A: ServiceBagService, private endpoint: SecurityEndpoint) {\r\n super(A, 'SecurityComponent', Security, State, endpoint, EnumPageDisplayModes.Window);\r\n }\r\n}","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { Component } from '@angular/core';\r\nimport { Security } from '@kraken/_proxy/entities/security.entity';\r\nimport { LoanEndpoint } from '@kraken/_proxy/endpoints/loan.endpoint';\r\nimport { ContextMenuElement } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { Loan } from '@kraken/_proxy/entities/loan.entity';\r\nimport { EnumLoanHandlingType } from '@kraken/_proxy/enums';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-security-report-grid',\r\n templateUrl: './security-report-grid.component.html',\r\n styleUrls: ['./security-report-grid.component.scss']\r\n})\r\nexport class SecurityReportGridComponent extends BaseGridComponent {\r\n constructor(A: ServiceBagService, private loanEndpoint: LoanEndpoint) {\r\n super(A, 'SecurityReportGridComponent', Security, BaseState);\r\n }\r\n\r\n OnNavigate(e) {\r\n this.Navigate([\"/pages/security-report\", e.data.EntryID]);\r\n }\r\n\r\n protected override GetGridRowContextMenu(options?: any): ContextMenuElement[] {\r\n if (options?.data?.Loan?.Source === EnumLoanHandlingType.BankInformation) {\r\n return [];\r\n }\r\n\r\n const label = options?.data?.Loan?.IsMarked ? 'btnRemoveMark' : 'btnAddMark'; \r\n\r\n return [{\r\n text: this.RC(label),\r\n onClick: () => {\r\n this.MarkLoan(options?.data?.Loan);\r\n }\r\n }];\r\n }\r\n\r\n private MarkLoan(loan: Loan) {\r\n const isMarked = !loan.IsMarked;\r\n\r\n this.Do(this.loanEndpoint.Mark(loan.EntryID, isMarked), true, () => {\r\n this.NotifyEntitySaved(null, Loan);\r\n }, (response) => {\r\n this.A.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
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\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 { EnumSecurityStatus } from './../enums';\r\nimport { EnumSecurityType } from './../enums';\r\nimport { EnumLoanStatus } from './../enums';\r\nexport class SecurityParams extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'SecurityParams';\r\n }\r\n \r\n public OrganizationID: number; \r\n public Statuses: EnumSecurityStatus[]; \r\n public SecurityTypes: EnumSecurityType[]; \r\n public ReceivedAtDateFrom: Date; \r\n public ReceivedAtDateTo: Date; \r\n public ValidFromFrom: Date; \r\n public ValidFromTo: Date; \r\n public ValidUntilFrom: Date; \r\n public ValidUntilTo: Date; \r\n public LoanStatuses: EnumLoanStatus[]; \r\n public FundingLoanDateFrom: Date; \r\n public FundingLoanDateTo: Date; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { Component, ViewChild } from '@angular/core';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Loan } from '../../../_proxy/entities/loan.entity';\r\nimport { Globals } from '../../../_globals';\r\nimport { EnumLoanStatus, EnumSecurityStatus, EnumSecurityType } from '../../../_proxy/enums';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { FilterComponent, FilterSettings, FilterValues } from './../../../components/filter/filter.component';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { SecurityReportGridComponent } from '../grid/security-report-grid.component';\r\nimport { SecurityEndpoint } from '../../../_proxy/endpoints/security.endpoint';\r\nimport { SecurityParams } from '../../../_proxy/params/security.param';\r\n\r\nclass State extends BaseState {\r\n FilterValues: FilterValues;\r\n FilterSettings: FilterSettings;\r\n Statuses: EnumSecurityStatus[];\r\n SecurityTypes: EnumSecurityType[];\r\n LoanStatuses: EnumLoanStatus[];\r\n ValidFromFrom: Date;\r\n ValidFromTo: Date;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n templateUrl: './security-report-list.component.html'\r\n})\r\nexport class SecurityReportListComponent extends BasePageComponent\r\n{\r\n @ViewChild('grid') grid: SecurityReportGridComponent;\r\n @ViewChild('filter') filter: FilterComponent;\r\n\r\n constructor(A: ServiceBagService, private endpoint: SecurityEndpoint) {\r\n super(A, 'SecurityReportListComponent', Loan, State);\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 OnInitState() {\r\n this.State.FilterSettings = {\r\n IsCustomGeneralSettingsOnly: true\r\n } as FilterSettings;\r\n this.State.FilterValues = new FilterValues();\r\n this.State.Statuses = this.State.SecurityTypes = this.State.LoanStatuses = [];\r\n this.State.ValidFromFrom = this.State.ValidFromTo = undefined;\r\n }\r\n\r\n override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n OnOrganizationChanged() {\r\n this.LoadDataSource();\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n if (ExternalEntityType == Loan) this.LoadDataSource();\r\n }\r\n\r\n public LoadDataSource() {\r\n if (!Globals.OrganizationID) return;\r\n const params = new SecurityParams();\r\n params.OrganizationID = Globals.OrganizationID;\r\n //params.FundingLoanDate = this.State.FundingLoanDate;\r\n params.Statuses = this.State.Statuses;\r\n params.SecurityTypes = this.State.SecurityTypes;\r\n params.LoanStatuses = this.State.LoanStatuses;\r\n params.ValidFromFrom = this.State.ValidFromFrom;\r\n params.ValidFromTo = this.State.ValidFromTo;\r\n this.DataSources['Securities'] = new DataSourceCustomAction((options: DataLoadOptions) => this.endpoint.GetSecurities(params));\r\n }\r\n\r\n override OnApplyFilter() {\r\n this.LoadDataSource();\r\n }\r\n\r\n protected override OnClearFilter(): void {\r\n this.InitState();\r\n this.LoadDataSource();\r\n }\r\n}\r\n\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\";","import {Component, Input, ViewChild} from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport {Company} from '../../../_proxy/entities/company.entity';\r\nimport {Account} from '../../../_proxy/entities/account.entity';\r\nimport {DxSelectBoxComponent} from 'devextreme-angular';\r\nimport {DxValidationGroupComponent} from 'devextreme-angular/ui/validation-group';\r\nimport {Deployment} from '../../../_proxy/entities/deployment.entity';\r\nimport { BillingContract } from '@kraken/_proxy/entities/billingcontract.entity';\r\nimport { EnumAccountingSoftwares, EnumDataExportType } from '@kraken/_proxy/enums';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-company-creation-page-company',\r\n templateUrl: './company-creation-page-company.component.html',\r\n styleUrls: ['../company-creation-wizard.component.scss']\r\n})\r\nexport class CompanyCreationPageCompanyComponent extends BaseComponent{\r\n\r\n @ViewChild('FocusOnMe') companySelectBox: DxSelectBoxComponent;\r\n @ViewChild('validationGroup') validationGroup: DxValidationGroupComponent;\r\n\r\n @Input() OrganizationID: number;\r\n @Input() CompaniesItems: Company[];\r\n @Input() DeploymentItems: Deployment[];\r\n @Input() BillingContractItems: BillingContract[];\r\n @Input() Account: Account;\r\n @Input() IsExternalAccountsMapping: boolean = false;\r\n\r\n get IsDbNameHidden() : boolean {\r\n const deployment = this.DeploymentItems.find(d => d.EntryID == this.SelectedCompany.DeploymentID);\r\n\r\n if(!deployment) {\r\n return false;\r\n }\r\n\r\n return deployment.AccountingSoftware == EnumAccountingSoftwares.Priority\r\n || deployment.AccountingSoftware == EnumAccountingSoftwares.Standalone\r\n || deployment.AccountingSoftware == EnumAccountingSoftwares.SAPByDesign\r\n || deployment.DataExportType != EnumDataExportType.Automatic;\r\n }\r\n\r\n private get SelectedCompany(): Company {\r\n return this.CompaniesItems.find(c => c.EntryID === this.Account.CompanyID);\r\n }\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'CompanyCreationWizardComponent', BaseState);\r\n }\r\n\r\n OnCompanyEdit(e: any) {\r\n if (!e.text) { e.customItem = null; return; }\r\n this.SelectedCompany.Name = e.text;\r\n e.customItem = this.SelectedCompany;\r\n }\r\n\r\n OnCompanyClick(e: any) {\r\n if (e.itemData.EntryID < 0) { setTimeout(() => this.companySelectBox.instance.focus()); }\r\n }\r\n\r\n public Validate() {\r\n return this.ValidateValidationGroup(this.validationGroup);\r\n }\r\n\r\n OnDeploymentChanged(e) {\r\n if(this.IsDbNameHidden) {\r\n this.SelectedCompany.DBName = undefined;\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
{{ item.Name ? item.Name : 'lblAddNewCompany' | RC:THIS}}
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n 0\\\">\\r\\n \\r\\n 0 && !SelectedCompany.Nickname\\\" [Component]=\\\"THIS\\\" Name=\\\"Nickname\\\" Label=\\\"{{'lblCompanyNickname' | RC:THIS}}\\\">\\r\\n \\r\\n \\r\\n \\r\\n 0\\\">\\r\\n \\r\\n \\r\\n \\r\\n 0\\\">\\r\\n \\r\\n \\r\\n \\r\\n 0\\\" configRequired>\\r\\n \\r\\n \\r\\n \\r\\n 0\\\" configRequired configTooltip Label=\\\"{{'lblDbNameTooltip' | RC:THIS}}\\\">\\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 { OrganizationEndpoint } from '@kraken/_proxy/endpoints/organization.endpoint';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState, GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DxDropDownBoxComponent, DxSelectBoxComponent } from 'devextreme-angular';\r\nimport { DxValidationGroupComponent } from 'devextreme-angular/ui/validation-group';\r\nimport { BanksListService } from '../../../services/banks-list.service';\r\nimport { Account } from '../../../_proxy/entities/account.entity';\r\nimport { AccountGroup } from '../../../_proxy/entities/accountgroup.entity';\r\nimport { User } from '../../../_proxy/entities/user.entity';\r\nimport { EnumBanks, EnumBankTypes, Enums } from '../../../_proxy/enums';\r\nimport { BankPassView } from '../../../_proxy/views/bankpass.view';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-company-creation-page-account',\r\n templateUrl: './company-creation-page-account.component.html',\r\n styleUrls: ['../company-creation-wizard.component.scss']\r\n})\r\nexport class CompanyCreationPageAccountComponent extends BaseComponent {\r\n\r\n @ViewChild('accountDropDownBox') accountDropDownBox: DxDropDownBoxComponent;\r\n @ViewChild('accountGroupSelectBox') accountGroupSelectBox: DxDropDownBoxComponent;\r\n @ViewChild('bankPassSelectBox') bankPassSelectBox: DxSelectBoxComponent;\r\n @ViewChild('validationGroup') validationGroup: DxValidationGroupComponent;\r\n\r\n @Input() AccountGroupsItems: AccountGroup[] = [];\r\n @Input() BankPassesItems: BankPassView[] = [];\r\n @Input() UsersItems: User[] = [];\r\n @Input() BookingAccounts;\r\n @Input() Account: Account;\r\n @Input() IsExternalAccountsMapping: boolean = false;\r\n @Output() SelectedBankChange = new EventEmitter();\r\n\r\n private get SelectedBankPass(): BankPassView { return this.BankPassesItems.find(bp => bp.EntryID === this.Account.BankPassID); }\r\n private get SelectedAccountGroup(): AccountGroup { return this.AccountGroupsItems.find(c => c.EntryID === this.Account.AccountGroupID); }\r\n\r\n constructor(A: ServiceBagService, private banksListService: BanksListService, private organizationEndpoint: OrganizationEndpoint) {\r\n super(A, 'CompanyCreationPageAccountComponent', BaseState);\r\n this.BindHandler('GetBankPassDisplayExpr');\r\n this.DataSources['Banks'] = this.banksListService.GetGroupedDSFromList(this.DS('AllowedBanks') as unknown as GenericListEntity[]);\r\n }\r\n\r\n @Input() set OrganizationID(value: number) {\r\n if (!value) return;\r\n this.LoadOrganization(value);\r\n }\r\n\r\n get IsBranchVisible() {\r\n return this.Account.Bank != Enums.EnumBanks.CityBank && this.Account.BankType != Enums.EnumBankTypes.ExternalCreditCard && !this.IsExternalLoanerBank;\r\n }\r\n\r\n get IsExternalLoanerBank() {\r\n return this.Account.BankType == EnumBankTypes.ExternalLoaner\r\n }\r\n\r\n\r\n private LoadOrganization(organizationID: number) {\r\n this.Do(this.organizationEndpoint.Get(organizationID), false, (response) => {\r\n const organization = response.Entity;\r\n this.DataSources['Banks'] = this.banksListService.GetGroupedDSFromList(this.DS('AllowedBanks') as unknown as GenericListEntity[], organization);\r\n });\r\n }\r\n\r\n OnBankChanged(event: any) {\r\n if (!this.IsUIEvent(event)) return\r\n\r\n const bank = { Value: event.value }\r\n\r\n if (bank.Value === EnumBanks.CityBank) {\r\n this.Account.Branch = undefined;\r\n }\r\n\r\n if (this.banksListService.IsLocalBank(bank)) { this.Account.BankType = EnumBankTypes.Local; }\r\n else if (this.banksListService.IsExternalCreditBank(bank)) { this.Account.BankType = EnumBankTypes.ExternalCreditCard; }\r\n else if (this.banksListService.IsForeignBank(bank)) { this.Account.BankType = EnumBankTypes.Foreign; }\r\n else if (this.banksListService.IsExternalLoanersBank(bank)) this.Account.BankType = EnumBankTypes.ExternalLoaner;\r\n else if (this.banksListService.IsCCProcessor(bank)) this.Account.BankType = EnumBankTypes.CCProcessor;\r\n\r\n this.SelectedBankChange.emit();\r\n }\r\n\r\n OnIsManualBalancesEntryChanged(event: any) {\r\n if (!this.IsUIEvent(event)) {\r\n return; \r\n }\r\n\r\n this.Account.BankPassID = undefined;\r\n }\r\n\r\n OnAccountGroupEdit(e: any) {\r\n if (!e.text) { e.customItem = null; return; }\r\n this.SelectedAccountGroup.Name = e.text;\r\n e.customItem = this.SelectedAccountGroup;\r\n }\r\n\r\n OnAccountGroupClick(e: any) {\r\n if (e.itemData.EntryID < 0) { setTimeout(() => this.accountGroupSelectBox.instance.focus()); }\r\n }\r\n\r\n public Validate() {\r\n return this.ValidateValidationGroup(this.validationGroup);\r\n }\r\n\r\n GetBankPassDisplayExpr(e: any) {\r\n return e && (e.EntryID === -1 && !e.UserName ? this.RC('lblAddNewBankPass') : (e.FullName ? e.FullName : e.UserName));\r\n }\r\n\r\n OnSelectedBankPassChanged(bankPass: BankPassView) {\r\n const selectedBankPass = this.BankPassesItems.find(x => x.EntryID === bankPass.EntryID);\r\n selectedBankPass.UserName = bankPass.UserName;\r\n this.bankPassSelectBox && this.bankPassSelectBox.instance && this.bankPassSelectBox.instance.repaint();\r\n }\r\n\r\n OnBankPassDropDownOpened() {\r\n const newBankPassOption = this.BankPassesItems?.find(bp => bp.EntryID === -1);\r\n\r\n if(newBankPassOption) {\r\n newBankPassOption['disabled'] = this.Account.Bank == EnumBanks.Plaid;\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 {{ GetBankPassDisplayExpr(item)}}\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\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 ? item.Name :\\r\\n 'lblAddNewAccountGroup' | 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
\";","import { 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 {Component, Input, ViewChild} from '@angular/core';\r\nimport {Account} from '../../../_proxy/entities/account.entity';\r\nimport {Company} from '../../../_proxy/entities/company.entity';\r\nimport {BookingAccount} from '../../../_proxy/entities/bookingaccount.entity';\r\nimport {DxValidationGroupComponent} from 'devextreme-angular/ui/validation-group';\r\nimport {BookingAccountListComponent} from '../../booking-account/list/booking-account-list.component';\r\nimport { EnumBookingAccountSubtypes } from '@kraken/_proxy/enums';\r\n\r\nclass State extends BaseState {\r\n\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-company-creation-page-bookingaccounts',\r\n templateUrl: './company-creation-page-bookingaccounts.component.html',\r\n styleUrls: ['../company-creation-wizard.component.scss']\r\n})\r\nexport class CompanyCreationPageBookingAccountsComponent extends BaseComponent {\r\n\r\n @ViewChild('validationGroup') validationGroup: DxValidationGroupComponent;\r\n @ViewChild('bookingAccountsList') bookingAccountsList: BookingAccountListComponent;\r\n\r\n @Input() Company: Company;\r\n @Input() Account: Account;\r\n @Input() BookingAccountsItems: BookingAccount[];\r\n @Input() IsExternalAccountsMapping: boolean = false;\r\n @Input() ExternalAccountCode: string;\r\n @Input() Currency: string;\r\n @Input() BookingAccountType: EnumBookingAccountSubtypes;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'CompanyCreationPageAccountComponent', State);\r\n }\r\n\r\n public Validate() {\r\n return this.ValidateValidationGroup(this.validationGroup);\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\";","import {Component, EventEmitter, Input, Output} 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\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-company-creation-page-finished',\r\n templateUrl: './company-creation-page-finished.component.html',\r\n styleUrls: ['../company-creation-wizard.component.scss']\r\n})\r\nexport class CompanyCreationPageFinishedComponent extends BaseComponent{\r\n\r\n @Input() IsDownloadConfirm: boolean;\r\n\r\n @Input() IsAllowDownload: boolean;\r\n @Input() IsExternalAccountsMapping: boolean = false;\r\n @Output() IsDownloadConfirmChange = new EventEmitter();\r\n @Output() AddNewAccountCompany = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'CompanyCreationPageFinishedComponent', BaseState);\r\n }\r\n\r\n public Validate() {\r\n return new Promise((resolve) => { resolve(true); });\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n
{{RC(\\\"lblGoodWork\\\")}}
\\r\\n \\r\\n
{{\\\"lblDownloadQuestion\\\" | RC:THIS}}
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n {{\\\"lblAddNewAccountCompany\\\" | RC:THIS}}\\r\\n \\r\\n
\\r\\n
\\r\\n\";","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\r\nimport {\r\n ServiceBagServices,\r\n ServiceBagService,\r\n} 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 { DateHelpers } from \"@m4u-angular/core/helpers/DateHelpers\";\r\nimport { LoanTransactionReportParams } from \"@kraken/_proxy/params/loantransactionreport.param\";\r\nimport { Transaction } from '@kraken/_proxy/entities/transaction.entity';\r\n\r\nclass State extends BaseState {\r\n DateFrom: Date;\r\n DateTo: Date;\r\n ShowAll: boolean;\r\n AdjustedDate: Date;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: \"app-loan-transactions-grid\",\r\n templateUrl: \"./loan-transactions-grid.component.html\",\r\n styleUrls: ['loan-transactions-grid.component.scss']\r\n})\r\nexport class LoanTransactionGridComponent extends BaseGridComponent {\r\n @Output() TransactionClicked = new EventEmitter();\r\n @Input() set DateFrom(value: Date) {\r\n this.State.DateFrom = value;\r\n }\r\n @Input() set DateTo(value: Date) {\r\n this.State.DateTo = value;\r\n }\r\n\r\n @Input() set ShowAll(value: boolean) {\r\n this.State.ShowAll = value;\r\n }\r\n\r\n @Input() set AdjustedDate(value: Date) {\r\n this.State.AdjustedDate = value;\r\n this.State.DateFrom = value;\r\n this.State.DateTo = value;\r\n }\r\n\r\n @Output() FilterChanged: EventEmitter = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, \"LoanTransactionGridComponent\", Transaction, State);\r\n }\r\n\r\n OnInitialized(e: any) {\r\n e.component.option(\"scrolling.timeout\", 0);\r\n }\r\n\r\n OnTransactionClick(event) {\r\n this.TransactionClicked.emit(event.data);\r\n }\r\n\r\n OnFilterChanged() {\r\n const params = new LoanTransactionReportParams();\r\n params.DateFrom = this.State.DateFrom;\r\n params.DateTo = this.State.DateTo;\r\n params.ShowAll = this.State.ShowAll;\r\n\r\n this.FilterChanged.emit(params);\r\n }\r\n\r\n OnToolbarPreparing(e) {\r\n e.toolbarOptions.items.push({\r\n location: 'after',\r\n template: 'showFilter',\r\n isCustom: true\r\n });\r\n }\r\n\r\n OnDateRangeSelected(e) {\r\n if (!e.itemData) { return; }\r\n this.State.DateFrom = DateHelpers.AddDay(this.State.AdjustedDate, -e.itemData.Value);\r\n this.State.DateTo = DateHelpers.AddDay(this.State.AdjustedDate, e.itemData.Value);\r\n this.OnFilterChanged();\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\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.Debit | formatNumberSum }}\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n {{ cell.data.Credit | 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
\";","import { Component, ViewChild } from '@angular/core';\r\nimport { QuickFilterSettings } from '@kraken/components/quick-filter/quick-filter.component';\r\nimport { BaseReportComponent, BaseReportState } from '@kraken/pages/base-report/base-report.component';\r\nimport { AccountListParams } from '@kraken/_proxy/params/accountlist.param';\r\nimport { BookingAccountListParams } from '@kraken/_proxy/params/bookingaccountlist.param';\r\nimport { CompanyListParams } from '@kraken/_proxy/params/companylist.param';\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 } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCRUDActions, EnumMessageBoxTypes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { DateHelpers } from '@m4u-angular/core/helpers/DateHelpers';\r\nimport { Globals } from '../../../_globals';\r\nimport { LoanPaymentEndpoint } from '../../../_proxy/endpoints/loanpayment.endpoint';\r\nimport { LoanPayment } from '../../../_proxy/entities/loanpayment.entity';\r\nimport { EnumAmortizationType, EnumBookingAccountSubtypes, EnumInterestType, EnumLoanSide, EnumLoanStatus } from '../../../_proxy/enums';\r\nimport { LoanPaymentReportParams } from '../../../_proxy/params/loanpaymentreport.param';\r\nimport { LoanPaymentsReportGridComponent } from '../grid/loan-payments-reprort-grid.component';\r\nimport { FilterSettings } from './../../../components/filter/filter.component';\r\nimport { LoanPaymentReportItem } from '@kraken/_proxy/entities/loanpaymentreportitem.entity';\r\nimport { MessageBoxDialogComponent } from '@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\nimport { Loan } from '@kraken/_proxy/entities/loan.entity';\r\n\r\nclass State extends BaseReportState {\r\n AmortizationTypes: EnumAmortizationType[] = [];\r\n Sides: EnumLoanSide[] = [];\r\n InterestTypes: EnumInterestType[] = [];\r\n FundingDateFrom: Date;\r\n FundingDateTo: Date;\r\n AdjustedDateFrom = new Date(Globals.Today.getFullYear() - 1, Globals.Today.getMonth(), Globals.Today.getDate());\r\n AdjustedDateTo = Globals.Today;\r\n GroupLevelItems;\r\n ShowPastPayments;\r\n ShowFuturePayments;\r\n Principal: number;\r\n Interest: number;\r\n Total: number;\r\n CurrencySymbol: string;\r\n SelectedRows: LoanPaymentReportItem[] = [];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n styleUrls: ['./loan-payments-report-list.component.scss'],\r\n templateUrl: './loan-payments-report-list.component.html'\r\n})\r\nexport class LoanPaymentsReportListComponent extends BaseReportComponent{\r\n @ViewChild('reportGrid') reportGrid: LoanPaymentsReportGridComponent;\r\n @ViewChild('messageDialog') messageBoxDialog: MessageBoxDialogComponent;\r\n\r\n constructor(A: ServiceBagService, private endpoint: LoanPaymentEndpoint) {\r\n super(A, 'LoanPaymentsReportListComponent', State);\r\n }\r\n\r\n protected override OnGetCustomFilterSettings(): FilterSettings {\r\n return {\r\n Company: { IsVisible: true, IsMultiple: true, Params: this.GetCompanyParams },\r\n Account: { IsVisible: true, IsMultiple: true, Params: this.GetAccountParams },\r\n BookingAccount: { IsVisible: true, IsMultiple: true, Params: this.GetBookingAccountParams },\r\n AccountGroup: { IsVisible: true, IsMultiple: true }\r\n } as FilterSettings;\r\n }\r\n\r\n private GetCompanyParams = () => {\r\n return {\r\n BookingAccountSubtypes: [EnumBookingAccountSubtypes.Loans],\r\n } as CompanyListParams;\r\n };\r\n\r\n private GetAccountParams = () => {\r\n return {\r\n BookingAccountSubtypes: [EnumBookingAccountSubtypes.Loans],\r\n } as AccountListParams;\r\n };\r\n\r\n private GetBookingAccountParams = () => {\r\n return {\r\n BookingAccountSubtypes: [EnumBookingAccountSubtypes.Loans]\r\n } as BookingAccountListParams;\r\n };\r\n\r\n protected override OnGetCustomQuickFilterSettings(): QuickFilterSettings {\r\n return {\r\n Company: { IsVisible: true, IsMultiple: true },\r\n Account: { IsVisible: true, IsMultiple: true },\r\n } as QuickFilterSettings;\r\n }\r\n\r\n override OnInitState() {\r\n this.State.AmortizationTypes = this.State.Sides = this.State.InterestTypes = [];\r\n this.State.FundingDateFrom = this.State.FundingDateTo = undefined;\r\n if (this.QueryParams) {\r\n if (this.QueryParams.AdjustedDateFrom && this.QueryParams.AdjustedDateTo) {\r\n this.State.AdjustedDateFrom = new Date(this.QueryParams.AdjustedDateFrom);\r\n this.State.AdjustedDateTo = new Date(this.QueryParams.AdjustedDateTo);\r\n }\r\n if (this.QueryParams.Date) {\r\n this.State.AdjustedDateFrom = DateHelpers.BOM(new Date(this.QueryParams.Date));\r\n this.State.AdjustedDateTo = DateHelpers.EOM(new Date(this.QueryParams.Date));\r\n }\r\n } else {\r\n this.State.AdjustedDateFrom = new Date(Globals.Today.getFullYear() - 1, Globals.Today.getMonth(), Globals.Today.getDate());\r\n this.State.AdjustedDateTo = Globals.Today;\r\n }\r\n this.State.GroupLevelItems = [];\r\n this.State.ShowFuturePayments = true;\r\n }\r\n\r\n protected override OnExternalEntitySaved(\r\n ExternalEntity: BaseEntity,\r\n ExternalEntityType:\r\n new () => BaseEntity, ExternalEntityAction: EnumCRUDActions\r\n ) {\r\n if (ExternalEntityType == LoanPayment) this.OnLoadData();\r\n if (ExternalEntityType == Loan) this.OnLoadData();\r\n }\r\n\r\n public OnLoadData() {\r\n if (!Globals.OrganizationID) return;\r\n this.State.IsLoading = true;\r\n const params = this.GetParams();\r\n params.Statuses = [EnumLoanStatus.Funded, EnumLoanStatus.Finished, EnumLoanStatus.Recycled];\r\n params.AmortizationTypes = this.State.AmortizationTypes;\r\n params.LoanSides = this.State.Sides;\r\n params.InterestTypes = this.State.InterestTypes;\r\n params.FundingDateFrom = this.State.FundingDateFrom;\r\n params.FundingDateTo = this.State.FundingDateTo;\r\n params.AdjustedDateFrom = this.State.AdjustedDateFrom;\r\n params.AdjustedDateTo = this.State.AdjustedDateTo;\r\n params.ShowPastPayments = this.State.ShowPastPayments;\r\n params.ShowFuturePayments = this.State.ShowFuturePayments;\r\n\r\n this.DataSources['LoanPayments'] = new DataSourceCustomAction(\r\n (options: DataLoadOptions) => this.endpoint.ListLoanPaymentReportItems(params), null, (data: LoanPaymentReportItem[]) => {\r\n this.State.Principal = 0;\r\n this.State.Interest = 0;\r\n this.State.Total = 0;\r\n this.State.IsLoading = false;\r\n const [loanPayment] = data;\r\n if (loanPayment) {\r\n\r\n this.State.CurrencySymbol = (this.LISTITEMX('Currencies', loanPayment.Currency) as any)?.Symbol;\r\n }\r\n\r\n data.forEach((item) => {\r\n this.State.Principal += item.LoanPayment.DuePrincipal;\r\n this.State.Interest += item.LoanPayment.DueInterest;\r\n this.State.Total += item.LoanPayment.DueTotal;\r\n });\r\n });\r\n }\r\n\r\n protected override OnClearFilter(): void {\r\n this.InitState();\r\n super.OnClearFilter();\r\n }\r\n\r\n protected override IsExpandCollapseVisible() {\r\n return super.IsExpandCollapseVisible() && !!this.State.GroupLevelItems.length;\r\n }\r\n\r\n OnGroupingChange({ items, gridInst }) {\r\n this.State.GroupLevelItems = items.map(item => ({\r\n text: item.caption,\r\n value: item.groupIndex + 1\r\n }));\r\n\r\n if (items.length) {\r\n this.State.GroupLevelItems.unshift({\r\n text: this.RC('lblFlatMode'),\r\n value: -1,\r\n onClick() {\r\n gridInst.clearGrouping();\r\n }\r\n });\r\n\r\n this.State.GroupLevelItems.push({\r\n text: this.RC('lblExpandAll'),\r\n value: Infinity\r\n });\r\n }\r\n }\r\n\r\n OnSelectedRowsChanged(rows: LoanPaymentReportItem[]) {\r\n this.State.SelectedRows = rows;\r\n }\r\n\r\n OnCreateJournalEntries() {\r\n if(!this.State.SelectedRows || !this.State.SelectedRows.length) {\r\n return;\r\n }\r\n\r\n this.messageBoxDialog.Prompt = this.RC('msgPostPaymentJECreation', this.State.SelectedRows.length);\r\n this.messageBoxDialog.Type = EnumMessageBoxTypes.YesNo;\r\n\r\n this.messageBoxDialog.ShowDialogShort(\r\n () => {\r\n this.CreateJournalEntries();\r\n }\r\n );\r\n }\r\n\r\n private CreateJournalEntries() {\r\n this.Do(\r\n this.endpoint.PostPaymentBatch(this.State.SelectedRows.map(p => p.LoanPayment)),\r\n false,\r\n (response) => {\r\n if(response.Data.length > 0) {\r\n this.UI.StopMessage(response.Data.join(\"; \"));\r\n } else {\r\n this.UI.InfoMessage(this.RC(\"msgSuccess\"));\r\n }\r\n this.OnLoadData();\r\n this.reportGrid.gridAny?.instance?.clearSelection();\r\n }\r\n );\r\n }\r\n}\r\n\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\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 { Loan } from './../entities/loan.entity';\r\nimport { EnumLoanHandlingType } from './../enums';\r\nimport { BalanceDetailsLoanData } from './../entities/balance.entity';\r\nexport class LoanView extends Loan {\r\n constructor() {\r\n super();\r\n this.TypeName = 'LoanView';\r\n }\r\n \r\n public Source: EnumLoanHandlingType; \r\n public BalanceID: number; \r\n public BalanceLineID: number; \r\n public BalanceDetailsPayments: BalanceDetailsLoanData[] = []; \r\n public NextPaymentDate: Date; \r\n public NextPaymentAmout: 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 { LoanPayment } from './../entities/loanpayment.entity';\r\nimport { LoanView } from './../views/loan.view';\r\nexport class LoanPaymentReportItem extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'LoanPaymentReportItem';\r\n }\r\n \r\n public LoanPayment: LoanPayment = new LoanPayment; \r\n public Loan: LoanView = new LoanView; \r\n public Currency: string; \r\n public LastClosingPrincipalBalance: number; \r\n public LastClosingPrincipalBalanceTotal: number; \r\n public ClosingPrincipalBalanceLinkageSurplus: number; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { Component, EventEmitter, Input, Output } 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 { IndexEndpoint } from '../../../_proxy/endpoints/index.endpoint';\r\nimport { Index } from '../../../_proxy/entities/index.entity';\r\nimport { Loan } from '../../../_proxy/entities/loan.entity';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { InterestEndpoint } from '@kraken/_proxy/endpoints/interest.endpoint';\r\nimport { Interest } from '@kraken/_proxy/entities/interest.entity';\r\nimport { ContextMenuElement } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { formatDate, formatNumber } from 'devextreme/localization';\r\nimport { SysGlobals } from '@m4u-angular/core/framework/sysglobals';\r\nimport dxDataGrid, { CellPreparedEvent, RowPreparedEvent } from 'devextreme/ui/data_grid';\r\nimport { LoanPaymentReportItem } from '@kraken/_proxy/entities/loanpaymentreportitem.entity';\r\nimport { EnumLoanHandlingType } from '../../../../../../../Kraken/Angular/ClientApp/_proxy/enums';\r\nimport { ExportingEvent } from 'devextreme/ui/data_grid';\r\nimport { DxDataGridTypes } from 'devextreme-angular/ui/data-grid';\r\nimport { LoanEndpoint } from '@kraken/_proxy/endpoints/loan.endpoint';\r\nimport { LoanView } from '@kraken/_proxy/views/loan.view';\r\n\r\nclass State extends BaseState {\r\n InterestIndexes: Interest[] = [];\r\n LinkageIndexes: Index[] = [];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-loan-payments-report-grid',\r\n styleUrls: ['./loan-payments-report-grid.component.scss'],\r\n templateUrl: './loan-payments-report-grid.component.html'\r\n})\r\nexport class LoanPaymentsReportGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private indexEndpoint: IndexEndpoint,\r\n private interestEndpoint: InterestEndpoint,\r\n private screenService: ScreenService,\r\n private loanEndpoint: LoanEndpoint) {\r\n super(A, 'LoanPaymentsReportGridComponent', LoanPaymentReportItem, State);\r\n\r\n this.BindHandler('OnGoToPostPayment');\r\n this.BindHandler('GetLinkedInterest');\r\n this.BindHandler('CalculateIsPosted');\r\n }\r\n\r\n @Output() OnGroupingChange = new EventEmitter();\r\n @Output() SelectedRowsChanged = new EventEmitter();\r\n @Input() IsLoading: boolean = false;\r\n\r\n OnNavigate(e) {\r\n const record = e.data as LoanPaymentReportItem;\r\n if (!record?.Loan) return;\r\n if (record.Loan.Source === EnumLoanHandlingType.LoansModule) {\r\n this.Navigate(['/pages/loan', record.Loan.EntryID], null, false, true);\r\n } else {\r\n this.Navigate(['/pages/loan-payments-schedule'], { BalanceID: record.Loan.BalanceID, LineID: record.Loan.BalanceLineID });\r\n }\r\n }\r\n\r\n OnRowPrepared(row: RowPreparedEvent): void {\r\n if (row.rowType === 'data') {\r\n const data = row.data as LoanPaymentReportItem;\r\n if (!data.LoanPayment.IsOpen) {\r\n row.rowElement.classList.add('paid');\r\n }\r\n }\r\n }\r\n\r\n OnCellPrepared(event: CellPreparedEvent) {\r\n const { rowType, row, cellElement, column } = event;\r\n if (rowType === 'data') {\r\n const data = row.data as LoanPaymentReportItem;\r\n if (data.Loan.Source === EnumLoanHandlingType.BankInformation && column.type === 'buttons'\r\n && column.name == 'gridRowContextMenu') {\r\n cellElement.innerHTML='';\r\n }\r\n }\r\n }\r\n\r\n override OnInitComponent() {\r\n this.LoadIndexes();\r\n }\r\n\r\n LoadIndexes() {\r\n this.Do(this.interestEndpoint.GetList(), false, (response) => {\r\n this.State.InterestIndexes = response.Entities;\r\n });\r\n this.Do(this.indexEndpoint.GetList(), false, (response) => {\r\n this.State.LinkageIndexes = response.Entities;\r\n });\r\n }\r\n\r\n //GetPostPaymentIcon() {\r\n // return this.screenService.IsRTL() ? 'mdi mdi-clipboard-arrow-left-outline' : 'mdi mdi-clipboard-arrow-right-outline';\r\n //}\r\n\r\n OnGoToPostPayment(e) {\r\n if (!e?.row?.data) return;\r\n\r\n const { LoanPayment } = e?.row?.data;\r\n this.Navigate(['/pages/post-payment', LoanPayment.EntryID]);\r\n }\r\n\r\n GetLinkedInterest(data: Loan) {\r\n if (!data.InterestLinkageIndexID) return;\r\n const linkedInterest = this.State.InterestIndexes.find(item => item.EntryID === data.InterestLinkageIndexID);\r\n if (!linkedInterest) return;\r\n return linkedInterest.Name;\r\n }\r\n \r\n OnExporting({ component }: ExportingEvent) {\r\n component.columnOption('isPostedColumn', 'visibleIndex', 0);\r\n component.columnOption('isPostedColumn', 'visible', true);\r\n }\r\n\r\n onAfterExporting({ component }: ExportingEvent) {\r\n component.columnOption('isPostedColumn', 'visible', false);\r\n }\r\n\r\n OnContentReady(e) {\r\n e?.component?.columnOption('isPostedColumn', 'visible', false);\r\n }\r\n\r\n CalculateIsPosted(data) {\r\n return data.LoanPayment?.IsOpen ? this.RC('lblOpen') : this.RC('lblPosted');\r\n }\r\n\r\n protected override GetGridRowContextMenu(options?: any): ContextMenuElement[] {\r\n const loan = options?.data?.Loan;\r\n\r\n const markLabel = loan?.IsMarked ? 'btnRemoveMark' : 'btnAddMark'; \r\n\r\n const postPaymentMenuItem: ContextMenuElement = {\r\n text: this.RC('btnPostPayment'),\r\n onClick: () => this.OnGoToPostPayment(options)\r\n };\r\n\r\n const markLoanMenuItem: ContextMenuElement = {\r\n text: this.RC(markLabel),\r\n onClick: () => this.MarkLoan(loan)\r\n };\r\n\r\n if (loan?.Source === EnumLoanHandlingType.BankInformation) {\r\n return [postPaymentMenuItem];\r\n }\r\n\r\n return [postPaymentMenuItem, markLoanMenuItem];\r\n }\r\n\r\n calculateYearGroupValue(rowData) {\r\n return formatDate(new Date(rowData.LoanPayment.AdjustedDate), 'yyyy');\r\n }\r\n\r\n CalculateMonthGroup(rowData) {\r\n const { Language } = SysGlobals;\r\n const date = new Date(rowData.LoanPayment.AdjustedDate);\r\n const month = date.toLocaleString('default', { month: '2-digit' });\r\n const displayValue = date.toLocaleString(Language, { month: 'long' });\r\n\r\n return `${month};${displayValue}`;\r\n }\r\n\r\n GetGroupCellCaption(data: any) {\r\n if(data.column.dataField == 'Loan.Notes'){\r\n if(!data.value) {\r\n return this.RC('lblUnknown');\r\n }\r\n }\r\n\r\n const value: string = data.value;\r\n\r\n if (!value) return value;\r\n\r\n const [sortValue, caption] = value.toString().split(';');\r\n return caption ? caption : sortValue;\r\n }\r\n\r\n getGroupedColumns(grid: dxDataGrid) {\r\n return grid.getVisibleColumns().filter(c => c.groupIndex !== undefined).sort((a, b) => a.groupIndex - b.groupIndex);\r\n }\r\n\r\n OnOptionChanged(e) {\r\n if (e.fullName.endsWith('.groupIndex')) {\r\n setTimeout(() => {\r\n this.OnGroupingChange.emit({\r\n items: this.getGroupedColumns(e.component),\r\n gridInst: e.component\r\n });\r\n }, 100);\r\n }\r\n }\r\n\r\n OnSelectionChanged(e: DxDataGridTypes.SelectionChangedEvent) {\r\n this.SelectedRowsChanged.emit(e.selectedRowsData);\r\n }\r\n\r\n GetInterestYearlyRate(cell: any) {\r\n const record = cell.data as LoanPaymentReportItem;\r\n if(!record || !record.Loan) {\r\n return undefined;\r\n }\r\n\r\n let interestYearlyRate: number = undefined;\r\n\r\n if(record.Loan.Source == EnumLoanHandlingType.LoansModule) {\r\n interestYearlyRate = record.LoanPayment?.InterestYearlyRate;\r\n } else {\r\n interestYearlyRate = record.Loan.TotalInterest;\r\n }\r\n\r\n return formatNumber(interestYearlyRate, this.F.NumberRate);\r\n }\r\n\r\n private MarkLoan(loan: LoanView) {\r\n const isMarked = !loan.IsMarked;\r\n\r\n this.Do(this.loanEndpoint.Mark(loan.EntryID, isMarked), true, () => {\r\n this.NotifyEntitySaved(null, Loan);\r\n }, (response) => {\r\n this.A.UI.StopMessage(response.ResponseMessage);\r\n });\r\n } \r\n}","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n {{GetLinkedInterest(cell.data.Loan)}} +\\r\\n \\r\\n \\r\\n {{ cell.data.Loan.InterestSuprlusPercent}} {{cell.data.Loan.InterestSuprlusPercent ? '%' : ''}}\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n {{ GetGroupCellCaption(data) }}\\r\\n
\\r\\n\\r\\n
\\r\\n {{GetInterestYearlyRate(cell)}}\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\";","/* eslint-disable max-len */\r\nimport { Component, EventEmitter, Input, Output } 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 { Account } from '../../_proxy/entities/account.entity';\r\nimport { BankPassView } from '../../_proxy/views/bankpass.view';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { EnumBankPassAccessTypes, EnumBanks, EnumBankTypes } from '../../_proxy/enums';\r\nimport { CompanyEndpoint } from '../../_proxy/endpoints/company.endpoint';\r\nimport { AccountEndpoint } from '../../_proxy/endpoints/account.endpoint';\r\nimport { UserEndpoint } from '../../_proxy/endpoints/user.endpoint';\r\nimport { CCContract } from '../../_proxy/entities/cccontract.entity';\r\nimport { Globals } from '@kraken/_globals';\r\nimport { EnumYesNo } from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-new-bankpass-inline',\r\n templateUrl: './new-bankpass-inline.component.html'\r\n})\r\nexport class NewBankpassInlineComponent extends BaseComponent {\r\n @Input() Account: Account;\r\n @Input() set Bank(value: EnumBanks) {\r\n this.BankPass.IsConfirmedReadOnly = false;\r\n\r\n if (value !== EnumBanks.Yahav) {\r\n delete this.BankPass.BankClientCode;\r\n }\r\n }\r\n @Input() AccountOrCCContract: Account | CCContract;\r\n @Input() BankPass: BankPassView;\r\n @Output() BankPassChange = new EventEmitter();\r\n\r\n public set IsBelongToCompany(value: EnumYesNo) {\r\n this.BankPass.BelongToCompanyID = (value == EnumYesNo.Yes ? this.AccountOrCCContract.CompanyID : undefined);\r\n }\r\n\r\n public get IsBelongToCompany() {\r\n return this.BankPass.BelongToCompanyID !== undefined ? EnumYesNo.Yes : EnumYesNo.No;\r\n }\r\n\r\n constructor(A: ServiceBagService, private accountEndpoint: AccountEndpoint, private companyEndpoint: CompanyEndpoint, private userEndpoint: UserEndpoint) {\r\n super(A, 'NewBankpassInlineComponent', BaseState);\r\n }\r\n\r\n override OnInitComponent() {\r\n \r\n if (this.AccountOrCCContract.CompanyID > 0) {\r\n this.Do(this.companyEndpoint.Get(this.AccountOrCCContract.CompanyID), false, (res) => {\r\n this.DataSources['Users'] = new DataSourceCustomAction((options: DataLoadOptions) => this.userEndpoint.ListEx(res.Entity.OrganizationID, true, options));\r\n });\r\n } else {\r\n const orgId = (this.A.Navigator.GetQueryParams(false).OrganizationID || this.A.Navigator.GetRouteParams().EntryID) ?? Globals.OrganizationID;\r\n this.DataSources['Users'] = new DataSourceCustomAction((options: DataLoadOptions) => this.userEndpoint.ListEx(orgId, true, options));\r\n }\r\n this.IsBelongToCompany = EnumYesNo.No;\r\n }\r\n\r\n OnIsPrivateChanged() {\r\n if (this.BankPass.IsPrivate) this.BankPass.TwoFactorMethod = undefined;\r\n }\r\n\r\n public BankClientCodeKeyDown(e) {\r\n if (e && e.event && e.event.key) {\r\n if (e.event.key.length === 1 && !e.event.ctrlKey && !(/^\\d+$/.test(e.event.key))) {\r\n e.event.preventDefault();\r\n }\r\n }\r\n }\r\n\r\n public OnBankClientCodeChanged() {\r\n setTimeout(() => {\r\n if (this.BankPass.BankClientCode) {\r\n this.BankPass.BankClientCode = this.BankPass.BankClientCode.replace(/[^\\d]/g, '');\r\n }\r\n });\r\n }\r\n\r\n OnAccessTypeDropDownOpened(e) {\r\n e.component.option('dataSource', this.LIST('BankPassAccessTypes')\r\n .filter(i => i.Value == 'Plaid' && this.BankPass.Bank == EnumBanks.Plaid \r\n || i.Value != 'Plaid' && this.BankPass.Bank != EnumBanks.Plaid)\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\";","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 { TransactionView } from \"../../../../_proxy/views/transaction.view\";\r\nimport { Transaction } from '@kraken/_proxy/entities/transaction.entity';\r\n\r\nexport class CustomTransactionView extends TransactionView {\r\n ShowDate: boolean\r\n}\r\nclass State extends BaseState {\r\n NotesMaxWidth: number;\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-last-transactions-dashboard-grid',\r\n templateUrl: './last-transactions-grid.component.html',\r\n styleUrls: ['./last-transactions-grid.component.scss']\r\n})\r\nexport class LastTransactionsDashboardGridComponent extends BaseGridComponent\r\n{\r\n constructor(A: ServiceBagService) {\r\n super(A, 'LastTransactionsDashboardGridComponent', Transaction, State);\r\n }\r\n\r\n override OnInitComponentFinished(): void {\r\n if (this.gridAny && this.gridAny.element) {\r\n this.State.NotesMaxWidth = Math.round(this.gridAny.element.nativeElement.offsetWidth / 3);\r\n }\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n {{cell.data.Notes1}}\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
{{cell.data.Notes2}}
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n {{ -1*cell.data.Debit | formatNumberSum }} {{cell.data.Currency | LookupList:LIST('Currencies'):'Symbol'}}\\r\\n \\r\\n \\r\\n {{ cell.data.Credit | formatNumberSum }} {{cell.data.Currency | LookupList:LIST('Currencies'):'Symbol'}}\\r\\n \\r\\n
\\r\\n\\r\\n
\";","import { Component, ComponentFactoryResolver, Input, Type, ViewChild } from \"@angular/core\";\r\nimport { ServiceBagServices, ServiceBagService } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { BaseEntity, BaseState } from \"@m4u-angular/base/entities/BaseEntities\";\r\nimport { BasePageComponent } from \"@m4u-angular/base/component/BasePageComponent\";\r\nimport { BaseComponent } from \"@m4u-angular/base/component/BaseComponent\";\r\nimport { DashboardState } from \"../base/base-dashboard.component\";\r\nimport { M4UViewContainerDirective } from \"@m4u-angular/ui/directives/ViewContainer.directive\";\r\nimport { EnumDashboardGroupBy } from \"../../../_proxy/enums\";\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-grid-chart',\r\n templateUrl: './grid-chart.component.html',\r\n styleUrls: ['./grid-chart.component.scss']\r\n})\r\nexport class GridChartComponent extends BaseComponent\r\n{\r\n @ViewChild(M4UViewContainerDirective, { static: true }) viewContainer!: M4UViewContainerDirective;\r\n @Input() Page: BasePageComponent;\r\n @Input() DashboardState: DashboardState;\r\n @Input() GridComponent: Type;\r\n @Input() ChartComponent: Type;\r\n _dataSource: any[] = [];\r\n isChartView = false;\r\n grid: any;\r\n chart: any;\r\n\r\n RefreshChart(): void {\r\n if (this.isChartView && this.chart) {\r\n this.chart.instance.chart.instance.refresh()\r\n }\r\n }\r\n\r\n @Input() set DataSource(value: any[]) {\r\n this._dataSource = value;\r\n if (this.grid) {\r\n this.grid.instance.DataSource = this._dataSource;\r\n }\r\n if (this.chart) {\r\n this.chart.instance.DataSource = this._dataSource;\r\n }\r\n }\r\n\r\n _groupBy: EnumDashboardGroupBy = EnumDashboardGroupBy.Account;\r\n\r\n @Input() set GroupBy(value: EnumDashboardGroupBy) {\r\n this._groupBy = value;\r\n if (this.grid) {\r\n this.grid.instance.GroupBy = this._groupBy;\r\n }\r\n if (this.chart) {\r\n this.chart.instance.GroupBy = this._groupBy;\r\n }\r\n }\r\n\r\n constructor(A: ServiceBagService, private componentFactoryResolver: ComponentFactoryResolver) {\r\n super(A, 'GridChartComponent', BaseState);\r\n this.BindHandler(\"OpenChartView\");\r\n this.BindHandler(\"OpenGridView\");\r\n }\r\n\r\n protected override OnInitComponentFinished(): void {\r\n this.updateView();\r\n }\r\n\r\n public updateView() {\r\n const viewContainerRef = this.viewContainer.viewContainerRef;\r\n viewContainerRef.clear();\r\n if (this.isChartView) {\r\n const componentFactory = this.componentFactoryResolver.resolveComponentFactory(this.ChartComponent);\r\n const chart = viewContainerRef.createComponent(componentFactory) as any;\r\n this.chart = chart;\r\n chart.instance.DashboardState = this.DashboardState;\r\n chart.instance.Page = this.Page;\r\n chart.instance.GroupBy = this._groupBy;\r\n chart.instance.DataSource = this._dataSource;\r\n chart.instance.OpenGridView.subscribe(this.OpenGridView);\r\n } else {\r\n const componentFactory = this.componentFactoryResolver.resolveComponentFactory(this.GridComponent);\r\n const grid = viewContainerRef.createComponent(componentFactory) as any;\r\n this.grid = grid;\r\n grid.instance.DashboardState = this.DashboardState;\r\n grid.instance.Page = this.Page;\r\n grid.instance.GroupBy = this._groupBy;\r\n grid.instance.DataSource = this._dataSource;\r\n grid.instance.OpenChartView.subscribe(this.OpenChartView);\r\n }\r\n }\r\n\r\n OpenChartView() {\r\n this.isChartView = true;\r\n this.updateView();\r\n }\r\n\r\n OpenGridView() {\r\n this.isChartView = false;\r\n this.updateView();\r\n }\r\n}\r\n","export default \"
\\r\\n
\";","import { Component, Input } from \"@angular/core\";\r\nimport { ServiceBagServices, ServiceBagService } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { BaseGridComponent } from \"@m4u-angular/base/component/BaseGridComponent\";\r\nimport { BaseEntity, BaseState } from \"@m4u-angular/base/entities/BaseEntities\";\r\nimport { DashboardState } from '../base/base-dashboard.component';\r\nimport { Globals } from \"../../../_globals\";\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-last-transactions-category-groups-grid',\r\n templateUrl: './last-transactions-category-groups-grid.component.html',\r\n styleUrls: ['./last-transactions-category-groups-grid.component.scss']\r\n})\r\nexport class LastTransactionsCategoryGroupsDashboardGridComponent extends BaseGridComponent\r\n{\r\n @Input() DashboardState: DashboardState;\r\n constructor(A: ServiceBagService)\r\n {\r\n super(A, 'LastTransactionsCategoryGroupsDashboardGridComponent', BaseEntity, BaseState);\r\n }\r\n\r\n GetGridHeight() {\r\n return (this.DataSource as []).length ? 350 : 400;\r\n }\r\n\r\n OnNavigate(e) {\r\n if (e.rowType !== 'data') return;\r\n const categoryID = e.data.EntryID == -1 ? -999 : e.data.EntryID;\r\n var accounts = e.data.AccountID ? [e.data.AccountID] : null;\r\n var companies = e.data.CompanyID ? [e.data.CompanyID] : null;\r\n var accountGroups = e.data.AccountGroupID ? [e.data.AccountGroupID] : null;\r\n var banks = e.data.Bank ? [e.data.Bank] : null;\r\n \r\n this.Navigate(['/pages/transaction-report'], {\r\n OrganizationID: Globals.OrganizationID,\r\n Category: categoryID,\r\n Accounts: accounts,\r\n CompanyIDs: companies,\r\n Banks: banks,\r\n AccountGroups: accountGroups,\r\n Date: this.DashboardState.FilterValues.Date,\r\n CurrenciesFilter: this.DashboardState.FilterValues.Currency,\r\n IsFromDashboard: true,\r\n DateFrom: this.DashboardState.DateFromLastTransactionsCategoryGroups,\r\n DateTo: this.DashboardState.DateToLastTransactionsCategoryGroups,\r\n IsDebitOnly: e.data.Debit ? true : false,\r\n IsCreditOnly: e.data.Credit ? true : false\r\n }, false, true);\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 {{ -1*cell.data.Debit | formatNumberSum }} {{DashboardState.FilterValues.Currency | LookupList:LIST('Currencies'):'Symbol'}}\\r\\n \\r\\n \\r\\n {{ cell.data.Credit | formatNumberSum }} {{DashboardState.FilterValues.Currency | LookupList:LIST('Currencies'):'Symbol'}}\\r\\n \\r\\n
\\r\\n\\r\\n
\";","import { AfterViewInit, Component, Input } from '@angular/core';\r\nimport { ServiceBagServices, ServiceBagService } 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 { TransactionReportParams } from '../../../../_proxy/params/transactionreport.param';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { TransactionEndpoint } from '../../../../_proxy/endpoints/transaction.endpoint';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-balance-report-transactions-details',\r\n templateUrl: './balance-report-transactions-details.component.html'\r\n})\r\nexport class BalanceReportTransactionsDetailsComponent extends BaseComponent implements AfterViewInit {\r\n @Input() IsFlatMode: boolean;\r\n @Input() EnableSearch: boolean = true;\r\n @Input() EnableCustomization: boolean = true;\r\n @Input() OrganizationID: number;\r\n @Input() CompanyID: number;\r\n @Input() AccountID: number;\r\n @Input() BookingAccountID: number;\r\n @Input() IsBankCharge: number;\r\n @Input() DateFrom: Date;\r\n @Input() DateTo: Date;\r\n @Input() BankChargeDate: Date;\r\n @Input() SortingMode = \"none\";\r\n @Input() BalanceType: string;\r\n\r\n constructor(A: ServiceBagService, \r\n private transactionEndpoint: TransactionEndpoint) {\r\n super(A, 'BalanceReportTransactionsDetailsComponent', BaseState);\r\n }\r\n\r\n override ngAfterViewInit() {\r\n const params = new TransactionReportParams();\r\n params.OrganizationID = this.OrganizationID;\r\n if (this.CompanyID) {\r\n params.Companies = [this.CompanyID]\r\n }\r\n if (this.AccountID) {\r\n params.Accounts = [this.AccountID]\r\n }\r\n if (this.BookingAccountID) {\r\n params.BookingAccounts = [this.BookingAccountID]\r\n }\r\n if (this.DateFrom) {\r\n params.DateFrom = this.DateFrom;\r\n }\r\n if (this.DateTo) {\r\n params.DateTo = this.DateTo;\r\n }\r\n if (this.BankChargeDate) {\r\n params.BankChargeDateFrom = this.BankChargeDate;\r\n params.BankChargeDateTo = this.BankChargeDate;\r\n }\r\n if (this.IsBankCharge != undefined) {\r\n params.IsBankCharge = this.IsBankCharge;\r\n }\r\n this.DataSources['Transactions'] = new DataSourceCustomAction(() => this.transactionEndpoint.ListEx(params));\r\n }\r\n}\r\n\r\n","export default \"\\r\\n\";","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { UploadView } from './../views/upload.view';\r\nimport { EnumDataExportType } from './../enums';\r\nimport { TransactionReportParams } from './../params/transactionreport.param';\r\nexport class UploadSaveAndGenerateFileParams extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'UploadSaveAndGenerateFileParams';\r\n }\r\n \r\n public OrganizationID: number; \r\n public Entities: UploadView[] = []; \r\n public ExportType: EnumDataExportType; \r\n public TransactionParams: TransactionReportParams = new TransactionReportParams; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { Component, ViewChild } from \"@angular/core\";\r\nimport { ServiceBagServices, ServiceBagService } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { DataSourceCustomAction } from \"@m4u-angular/base/datalayer/BaseDataSources\";\r\nimport { TransactionReportParams } from \"../../_proxy/params/transactionreport.param\";\r\nimport { TransactionEndpoint } from \"../../_proxy/endpoints/transaction.endpoint\";\r\nimport { Globals } from \"../../_globals\";\r\nimport { CreditCardsReportGridComponent } from \"./grid/credit-cards-report-grid.component\";\r\nimport { FilterSettings } from \"../../components/filter/filter.component\";\r\nimport { BaseReportComponent, BaseReportState } from '../base-report/base-report.component';\r\nimport { EnumBanks, EnumBookingAccountSubtypes } from \"../../_proxy/enums\";\r\nimport { OrganizationEndpoint } from \"@kraken/_proxy/endpoints/organization.endpoint\";\r\nimport { QuickFilterSettings } from '@kraken/components/quick-filter/quick-filter.component';\r\nimport { DxoCalendarOptions } from \"devextreme-angular/ui/nested/base/calendar-options\";\r\nimport { UploadSaveAndGenerateFileParams } from \"@kraken/_proxy/params/uploadsaveandgeneratefile.param\";\r\nimport { BookingAccountListParams } from \"@kraken/_proxy/params/bookingaccountlist.param\";\r\nimport { AccountListParams } from \"@kraken/_proxy/params/accountlist.param\";\r\nimport { BaseEntity } from \"@m4u-angular/base/entities/BaseEntities\";\r\nimport { EnumCRUDActions } from \"@m4u-angular/core/framework/sysenums.enum\";\r\nimport { Transaction } from \"@kraken/_proxy/entities/transaction.entity\";\r\nimport { BaseDataSourceAbstract } from \"../../../../src/base/datalayer/BaseDataSourceAbstract\";\r\nimport { LocalStorageService } from \"@m4u-angular/core/framework/local-storage.service\";\r\n\r\nclass State extends BaseReportState {\r\n SortOrder = 'desc';\r\n CurrentLevelCaption: string;\r\n GridCaption: string;\r\n BankChargeDateFrom: Date = Globals.ThirtyDaysAgoDate;\r\n BankChargeDateTo: Date = Globals.Yesterday;\r\n SubtypesItems = [];\r\n BookingAccountSubtypes = [];\r\n CalendarOptions: Partial = {};\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-credit-cards-report',\r\n templateUrl: './credit-cards-report.component.html',\r\n styleUrls: ['./credit-cards-report.component.scss']\r\n})\r\nexport class CreditCardsReportComponent extends BaseReportComponent\r\n{\r\n @ViewChild('reportGrid') reportGrid: CreditCardsReportGridComponent;\r\n\r\n constructor(A: ServiceBagService, \r\n private transactionEndpoint: TransactionEndpoint,\r\n private localStorageService: LocalStorageService,\r\n private organizationEndpoint: OrganizationEndpoint) {\r\n super(A, 'CreditCardsReportComponent', State);\r\n }\r\n\r\n protected override OnGetCustomFilterSettings() {\r\n return {\r\n Company: { IsVisible: true, IsMultiple: true },\r\n AccountGroup: { IsVisible: true, IsMultiple: true },\r\n Account: { IsVisible: true, IsMultiple: true, Params: { BookingAccountSubtypes: [EnumBookingAccountSubtypes.CreditCard] } },\r\n BookingAccount: { IsVisible: true, IsMultiple: true, Params: { BookingAccountSubtypes: [EnumBookingAccountSubtypes.CreditCard] } },\r\n CurrencyFilter: { IsVisible: true, IsMultiple: true },\r\n Bank: { IsVisible: true, IsMultiple: true },\r\n Category: { IsVisible: true, IsMultiple: true },\r\n\r\n IsCustomOptionsSettings: true,\r\n } as FilterSettings;\r\n\r\n }\r\n\r\n protected override OnGetCustomQuickFilterSettings(): QuickFilterSettings {\r\n return {\r\n Company: { IsVisible: true, IsMultiple: true },\r\n Account: { IsVisible: true, IsMultiple: true, Params: { BookingAccountSubtypes: [EnumBookingAccountSubtypes.CreditCard] } as AccountListParams },\r\n BookingAccount: { IsVisible: true, IsMultiple: true, Params: { BookingAccountSubtypes: [EnumBookingAccountSubtypes.CreditCard] } as BookingAccountListParams },\r\n } as QuickFilterSettings;\r\n }\r\n\r\n protected override OnResetFilterValues() {\r\n super.OnResetFilterValues();\r\n this.State.BankChargeDateFrom = Globals.ThirtyDaysAgoDate;\r\n this.State.BankChargeDateTo = Globals.Yesterday;\r\n }\r\n\r\n protected override OnLoadData() {\r\n if (!Globals.OrganizationID) {\r\n this.DataSources['Transactions'] = undefined;\r\n return;\r\n }\r\n const params = this.GetTransactionsParams();\r\n this.State.IsLoading = true;\r\n this.DataSources['Transactions'] = new DataSourceCustomAction(\r\n () => this.transactionEndpoint.ListEx(params), undefined, (data) => {\r\n this.State.IsLoading = false;\r\n }, false);\r\n }\r\n\r\n override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions): void {\r\n if (ExternalEntityType === Transaction) { this.OnApplyFilter(); }\r\n }\r\n\r\n override GetTitle() {\r\n const defaultTitle = this.GetDefaultTitle();\r\n const customTitle = this.IsWindowMode() ? this.State.GridCaption : this.State.CurrentLevelCaption;\r\n return customTitle ? `${defaultTitle} - ${customTitle}` : defaultTitle;\r\n }\r\n\r\n override OnInitComponentFinished() {\r\n super.OnInitComponentFinished();\r\n if (Object.entries(this.QueryParams).length >= 0) this.G && this.G.grid.instance.clearFilter();\r\n this.InitSortOrder();\r\n }\r\n\r\n InitSortOrder() {\r\n const sortOrder = this.localStorageService.GetItem(this.GetSortOrderSettingName());\r\n if (!!sortOrder) this.State.SortOrder = sortOrder;\r\n }\r\n\r\n OnSwitchSortOrder() {\r\n this.State.SortOrder = this.State.SortOrder == \"asc\" ? \"desc\" : \"asc\";\r\n this.localStorageService.SetItem(this.GetSortOrderSettingName(), this.State.SortOrder);\r\n }\r\n\r\n ChangeCurrentLevelCaption(e) {\r\n this.State.CurrentLevelCaption = e;\r\n this.NotifyReloadTitle();\r\n this.DetectChanges();\r\n }\r\n\r\n GetSortOrderSettingName() {\r\n return `${this.ComponentName}.ViewSelector.SortOrder`;\r\n }\r\n\r\n OnBankChargeDateFromChange(e) {\r\n if (!this.IsUIEvent(e)) return;\r\n\r\n if (e.value) {\r\n this.State.BankChargeDateFrom = new Date(e.value.setHours(0, 0, 0));\r\n }\r\n }\r\n\r\n OnBankChargeDateToChange(e) {\r\n if (!this.IsUIEvent(e)) return;\r\n\r\n if (this.State.CalendarOptions.maxZoomLevel === 'year' && e.value) {\r\n const date = new Date(e.value);\r\n this.State.BankChargeDateTo = new Date(date.getFullYear(), date.getMonth() + 1, 0);\r\n }\r\n }\r\n\r\n OnDateRangeChanged(event) {\r\n if (!event?.itemData) return;\r\n\r\n const { DateFrom, DateTo } = event.itemData;\r\n\r\n if (DateFrom && DateTo) {\r\n this.State.BankChargeDateFrom = DateFrom;\r\n this.State.BankChargeDateTo = DateTo;\r\n }\r\n }\r\n\r\n OnCalendarScaleChanged(e) {\r\n if (e.value) {\r\n this.State.CalendarOptions = {\r\n maxZoomLevel: \"year\",\r\n minZoomLevel: \"century\"\r\n };\r\n const dateFrom = new Date(this.State.BankChargeDateFrom);\r\n const dateTo = new Date(this.State.BankChargeDateTo);\r\n\r\n this.State.BankChargeDateFrom = new Date(dateFrom.getFullYear(), dateFrom.getMonth(), 1);\r\n this.State.BankChargeDateTo = new Date(dateTo.getFullYear(), dateTo.getMonth() + 1, 0);\r\n } else {\r\n this.State.CalendarOptions = {\r\n maxZoomLevel: \"month\",\r\n };\r\n }\r\n }\r\n\r\n //Check if data was loaded and exists. IsLoaded called on purpose to avoid multiple datasource.load\r\n IsTransactionsLoaded() {\r\n var ds = this.DataSources['Transactions'] as BaseDataSourceAbstract;\r\n return ds?.IsLoaded && ds?.Items?.length > 0;\r\n }\r\n\r\n GetUploadTransactionsParams = () => {\r\n const params = new UploadSaveAndGenerateFileParams();\r\n params.OrganizationID = Globals.OrganizationID;\r\n params.TransactionParams = this.GetTransactionsParams();\r\n params.TransactionParams.IsBankCharge = undefined;\r\n\r\n return params;\r\n };\r\n\r\n OnAfterUpload() {\r\n this.OnLoadData();\r\n }\r\n\r\n private GetTransactionsParams() {\r\n const params = this.GetParams();\r\n if (!params.OrganizationID) {\r\n params.OrganizationID = Globals.OrganizationID;\r\n }\r\n params.BankChargeDateFrom = this.State.BankChargeDateFrom;\r\n params.BankChargeDateTo = this.State.BankChargeDateTo;\r\n params.BookingAccountSubtypes = [EnumBookingAccountSubtypes.CreditCard];\r\n params.IsBankCharge = 0;\r\n\r\n return params;\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\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, ViewChild } from '@angular/core';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { MessageBoxDialogComponent } from '@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\nimport { EnumCRUDActions, EnumMessageBoxTypes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { MessageBoxCustomButton } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { Subscription } from 'rxjs';\r\nimport { Transaction } from '@kraken/_proxy/entities/transaction.entity';\r\nimport { EnumBankTypes, EnumBookingAccountSubtypes, EnumGenerationTypeJournalEntry, EnumSide } from '@kraken/_proxy/enums';\r\nimport { BookingAccountEndpoint } from '@kraken/_proxy/endpoints/bookingaccount.endpoint';\r\nimport { ChequeListDialogComponent } from '@kraken/dialogs/cheque-dialog/list/cheque-list-dialog.component';\r\nimport { TransactionGroupViewDialogComponent } from '@kraken/pages/transaction-drill-view/transaction-group-view-dialog.component';\r\nimport { Globals } from '@kraken/_globals';\r\nimport { TransactionCategoryEndpoint } from '@kraken/_proxy/endpoints/transactioncategory.endpoint';\r\nimport { TransactionCategory } from '@kraken/_proxy/entities/transactioncategory.entity';\r\nimport { ListTransactionCategoriesParams } from '@kraken/_proxy/params/listtransactioncategories.param';\r\nimport { formatNumber } from 'devextreme/localization';\r\nimport { debounce, some, every } from 'lodash';\r\nimport { RegenarateJournalEntriesParams } from '@kraken/_proxy/params/regenaratejournalentries.param';\r\nimport { TransactionEndpoint } from '@kraken/_proxy/endpoints/transaction.endpoint';\r\nimport { AccountEndpoint } from '@kraken/_proxy/endpoints/account.endpoint';\r\n\r\nclass State extends BaseState {\r\n OrganizationID: number;\r\n\r\n IsFlatMode = false;\r\n IsWindowMode: boolean;\r\n HiddenColumns: string[];\r\n\r\n TransactionCategories: TransactionCategory[];\r\n BankChargeDateGroupIndex: number;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-credit-cards-report-grid',\r\n templateUrl: './credit-cards-report-grid.component.html',\r\n styleUrls: ['./credit-cards-report-grid.component.scss']\r\n})\r\nexport class CreditCardsReportGridComponent extends BaseGridComponent{\r\n private organizationSubscription: Subscription;\r\n\r\n @ViewChild('chequeListDialog') chequeDialog: ChequeListDialogComponent;\r\n @ViewChild('groupDialog', { static: false }) groupDialog: TransactionGroupViewDialogComponent;\r\n @Input() AutoExpandAll: boolean;\r\n @Input() SortOrder: string;\r\n @Input() IsWindowMode: boolean;\r\n @Input() EnableSearch = true;\r\n @Input() IsLoading = false;\r\n @ViewChild('messageBox') messageBoxDialog: MessageBoxDialogComponent;\r\n @ViewChild('messageDialog') messageDialog: MessageBoxDialogComponent;\r\n EnumMessageBoxTypes = EnumMessageBoxTypes;\r\n MessageBoxButtons: MessageBoxCustomButton[] = [];\r\n\r\n @Input() set OrganizationID(value: number) {\r\n if (value && value !== this.State.OrganizationID) {\r\n this.State.OrganizationID = value;\r\n this.LoadTransactionCategories(value);\r\n }\r\n }\r\n\r\n @Input() set HiddenColumns(value: string[]) {\r\n this.State.HiddenColumns = value;\r\n\r\n this.UpdateColumnsVisibility();\r\n }\r\n @Input() set IsFlatMode(value: boolean) {\r\n this.State.IsFlatMode = value;\r\n\r\n this.UpdateColumnsVisibility();\r\n\r\n this.UpdateSortings();\r\n }\r\n\r\n @Output() OnRowHoverChanged = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService,\r\n public screenService: ScreenService,\r\n private transactionCategoryEndpoint: TransactionCategoryEndpoint,\r\n private transactionEndpoint: TransactionEndpoint,\r\n private bookingAccountEndpoint: BookingAccountEndpoint,\r\n private accountEndpoint: AccountEndpoint) {\r\n super(A, 'CreditCardsReportGridComponent', Transaction, State);\r\n this.BindHandler('OnCalculateSummary');\r\n this.BindHandler('OnGoToCheques');\r\n this.BindHandler('IsHasCheques');\r\n this.BindHandler('OnShowByNotes1');\r\n }\r\n\r\n protected override OnInitComponent(): void {\r\n if (Globals.OrganizationID) {\r\n this.LoadTransactionCategories(Globals.OrganizationID);\r\n }\r\n }\r\n\r\n override OnInitComponentFinished() {\r\n super.OnInitComponentFinished();\r\n this._SubscribeGridEvents();\r\n }\r\n\r\n protected override IsUseFinishCycleChangeDetection() {\r\n return false;\r\n }\r\n\r\n protected override OnDestroyComponent(): void {\r\n if (this.organizationSubscription) {\r\n this.organizationSubscription.unsubscribe();\r\n }\r\n }\r\n\r\n override OnExternalEntitySaved(ExternalEntity: BaseEntity,\r\n ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions): void {\r\n if (ExternalEntityType === Transaction) {\r\n this.LoadTransactionCategories(Globals.OrganizationID);\r\n }\r\n }\r\n\r\n OnShowByNotes1(e: any) {\r\n if (!e?.row?.data) return;\r\n\r\n const transaction: Transaction = e?.row?.data;\r\n this.groupDialog.Transaction = transaction;\r\n this.groupDialog.AccountName = e?.row?.data.AccountName;\r\n \r\n this.groupDialog.Side = Number.isFinite(transaction.Credit)\r\n ? EnumSide.Income\r\n : EnumSide.Expense;\r\n\r\n\r\n this.MessageBoxButtons = [];\r\n if (e.row.data.Notes1) {\r\n this.MessageBoxButtons.push({ ButtonID: 2, Text: this.RC('lblNotes1') });\r\n }\r\n if (e.row.data.Notes2) {\r\n this.MessageBoxButtons.push({ ButtonID: 3, Text: this.RC('lblNotes2') });\r\n }\r\n if (e.row.data.Reference) {\r\n this.MessageBoxButtons.push({ ButtonID: 1, Text: this.RC('lblReference1') });\r\n }\r\n\r\n setTimeout(() => {\r\n this.messageBoxDialog.ShowDialogShort((buttonId: number) => {\r\n switch (buttonId) {\r\n case 1:\r\n this.groupDialog.FieldName = 'Reference';\r\n this.groupDialog.FieldValue = e.row.data.Reference;\r\n break;\r\n case 2:\r\n this.groupDialog.FieldName = 'Notes1';\r\n this.groupDialog.FieldValue = e.row.data.Notes1;\r\n break;\r\n case 3:\r\n this.groupDialog.FieldName = 'Notes2';\r\n this.groupDialog.FieldValue = e.row.data.Notes2;\r\n break;\r\n }\r\n\r\n this.groupDialog.ShowDialogShort(() => { });\r\n });\r\n });\r\n }\r\n\r\n UpdateSortings() {\r\n if (!this.grid || this.IsWindowMode) return;\r\n\r\n let EntryIDIndex = 4;\r\n let CompanyNameIndex = 1;\r\n let AccountNameIndex = 2;\r\n let BookingAccountNameIndex = 3;\r\n let BankChargeDateIndex = undefined;\r\n let DateIndex = undefined;\r\n\r\n if (this.State.IsFlatMode) {\r\n EntryIDIndex = undefined;\r\n CompanyNameIndex = undefined;\r\n AccountNameIndex = undefined;\r\n BookingAccountNameIndex = 1;\r\n BankChargeDateIndex = 2;\r\n DateIndex = 3;\r\n }\r\n\r\n setTimeout(() => {\r\n this.G.grid.instance.columnOption('EntryID', { sortIndex: EntryIDIndex, sortOrder: EntryIDIndex ? this.SortOrder : undefined });\r\n this.G.grid.instance.columnOption('CompanyName',\r\n { sortIndex: CompanyNameIndex, sortOrder: CompanyNameIndex ? 'asc' : undefined });\r\n this.G.grid.instance.columnOption('AccountName',\r\n { sortIndex: AccountNameIndex, sortOrder: AccountNameIndex ? 'asc' : undefined });\r\n this.G.grid.instance.columnOption('BookingAccountName',\r\n { sortIndex: BookingAccountNameIndex, sortOrder: BookingAccountNameIndex ? 'asc' : undefined });\r\n this.G.grid.instance.columnOption('BankChargeDate',\r\n { sortIndex: BankChargeDateIndex, sortOrder: BankChargeDateIndex ? 'asc' : undefined });\r\n this.G.grid.instance.columnOption('Date',\r\n { sortIndex: DateIndex, sortOrder: DateIndex ? 'asc' : undefined });\r\n });\r\n }\r\n\r\n\r\n private UpdateColumnsVisibility() {\r\n if (this.grid && this.grid.instance) {\r\n if (this.State.HiddenColumns) {\r\n this.State.HiddenColumns.forEach((name: string) => {\r\n this.G.SetColumnVisibility(name, false);\r\n });\r\n }\r\n }\r\n }\r\n\r\n OnInitialized(e) {\r\n this.UpdateColumnsVisibility();\r\n }\r\n\r\n OnCalculateSummary(e) {\r\n if (e.groupIndex === 2 || e.groupIndex === 3) {\r\n if (e.summaryProcess === 'start') {\r\n e.totalValue = 0;\r\n e.currencies = [];\r\n } else if (e.summaryProcess === 'calculate' && e.value[e.name]) {\r\n e.totalValue += e.value[e.name];\r\n e.currencies.push(e.value.Currency);\r\n if (e.name === 'OriginalSum' && !e.currency) {\r\n e.currency = e.value.OriginalCurrency;\r\n }\r\n } else if (e.summaryProcess === 'finalize') {\r\n e.totalValue = e.currencies.every(val => val === e.currencies[0]) ? formatNumber(e.totalValue, this.F.NumberSum) : '';\r\n\r\n if (e.name === 'OriginalSum' && e.currency) {\r\n e.totalValue = `${e.totalValue} ${(this.LISTITEMX('Currencies', e.currency) as any)?.Symbol}`;\r\n }\r\n }\r\n }\r\n }\r\n\r\n OnCellHoverChanged(e) {\r\n const currentLevelCaption = e.eventType === 'mouseout' ? '' : this.GetCurrentLevelCaption(e);\r\n this.OnRowHoverChanged.emit(currentLevelCaption);\r\n }\r\n\r\n OnGoToCheques(e) {\r\n const row = e?.row?.data;\r\n if (!row) return;\r\n\r\n this.chequeDialog.TransactionID = e.row.data.EntryID;\r\n this.chequeDialog.ShowDialogShort((e) => { });\r\n }\r\n\r\n GetCurrentLevelCaption(e) {\r\n switch (e.rowType) {\r\n case 'data': return e.data && e.data.AccountName\r\n ? `${e.data.AccountName} > ${e.data.BookingAccountName}`\r\n : '';\r\n case 'group': return e.values && e.values.length !== 0\r\n ? e.values.slice(0, e.values.length - 1).join(' > ')\r\n : '';\r\n default: return '';\r\n }\r\n }\r\n\r\n GetAccountGroupIndex() {\r\n return this.State.IsFlatMode ? undefined : !this.IsWindowMode ? 0 : undefined;\r\n }\r\n\r\n GetBookingAccountGroupIndex() {\r\n return this.State.IsFlatMode ? undefined : !this.IsWindowMode ? 1 : undefined;\r\n }\r\n\r\n IsHasCheques(e) {\r\n return e?.row?.data?.IsChequesExist;\r\n }\r\n\r\n //get GetCreateLoanIcon() {\r\n // return this.screenService.IsRTL() ? 'mdi mdi-clipboard-arrow-left-outline' : 'mdi mdi-clipboard-arrow-right-outline';\r\n //}\r\n\r\n OnGoToCreateLoan = (e) => {\r\n const row = e?.row?.data;\r\n if (!row) return;\r\n\r\n const { Date, Credit, Debit, Reference, BookingAccountID, AccountID, CompanyID, Currency } = row;\r\n\r\n this.Do(this.bookingAccountEndpoint.GetBookingAccounts(AccountID, EnumBookingAccountSubtypes.Loans), false, (response) => {\r\n const bookingAccount = response.Entities.find(item => item.Currency === Currency);\r\n\r\n this.Navigate(['/pages/loan/new'], {\r\n CompanyID: CompanyID,\r\n AccountID: AccountID,\r\n BookingAccountID: bookingAccount?.EntryID,\r\n StartDate: Date,\r\n Amount: Credit ?? Debit,\r\n BankReferenceNumber: Reference\r\n }, true, true);\r\n });\r\n };\r\n\r\n private LoadTransactionCategories(organizationID: number) {\r\n const params = new ListTransactionCategoriesParams();\r\n params.OrganizationID = organizationID;\r\n params.LoadGlobal = true;\r\n params.LoadActive = true;\r\n\r\n this.Do(this.transactionCategoryEndpoint.ListEx(params, null), false, (response) => {\r\n this.State.TransactionCategories = response.Entities;\r\n });\r\n }\r\n\r\n GetGroupedColumns() {\r\n const cols = this.gridAny.instance.getVisibleColumns()\r\n .filter(c => c.groupIndex !== undefined).sort((a, b) => a.groupIndex - b.groupIndex);\r\n const lastCol = cols.at(-1);\r\n\r\n if (lastCol?.dataField === 'BankChargeDate') {\r\n this.State.BankChargeDateGroupIndex = lastCol.groupIndex;\r\n } else {\r\n this.State.BankChargeDateGroupIndex = -1;\r\n }\r\n }\r\n\r\n private _SubscribeGridEvents() {\r\n if (!this.gridAny) return;\r\n\r\n const debouncedFn = debounce(() => this.GetGroupedColumns(), 400);\r\n\r\n this.gridAny.onContentReady.subscribe(() => debouncedFn());\r\n this.gridAny.onOptionChanged.subscribe((e) => {\r\n if (e.fullName.endsWith('.groupIndex')) {\r\n debouncedFn();\r\n }\r\n });\r\n }\r\n\r\n RegenarateJournalEntries(rows: Transaction[]) {\r\n const [row] = rows;\r\n const params = new RegenarateJournalEntriesParams();\r\n params.OrganizationID = Globals.OrganizationID;\r\n params.BookingAccountID = row.BookingAccountID;\r\n params.DateFrom = row.BankChargeDate;\r\n params.DateUntil = row.BankChargeDate;\r\n params.GenerationType = EnumGenerationTypeJournalEntry.CCAutoPosting;\r\n\r\n this.Do(this.bookingAccountEndpoint.RegenarateJournalEntries(params), true, () => {\r\n (this.DataSource as any)?.Reload();\r\n this.Do(this.transactionEndpoint.GetView(row.EntryID), false, (response) => {\r\n if (response.Entity.JournalEntryID) {\r\n this.Navigate(['/pages/journal-entry', response.Entity.JournalEntryID], true, true);\r\n }\r\n });\r\n });\r\n }\r\n\r\n OnCellPrepared = ({ rowType, column, row, cellElement, totalItem }) => {\r\n if (rowType === 'group' && column.dataField === 'JournalEntryID' && row.groupIndex === this.State.BankChargeDateGroupIndex) {\r\n const items = totalItem.data.items ?? totalItem.data.collapsedItems;\r\n const [firstItem] = items;\r\n const shouldGenerateJE = every(items, item => item.BookingAccountID == firstItem.BookingAccountID &&\r\n !item.JournalEntryID && item.IsBookingAccountCCPostingAutoGenerate);\r\n\r\n const shouldOpenJE = every(items, item =>\r\n item.BookingAccountID == firstItem.BookingAccountID &&\r\n item.JournalEntryID &&\r\n item.JournalEntryID == firstItem.JournalEntryID);\r\n\r\n if (shouldGenerateJE && some(items, item => item.IsJEGenerationAvalable)) {\r\n const btn = document.createElement('i');\r\n btn.className = 'dx-link dx-icon mdi mdi-wallet-plus';\r\n btn.title = this.RC('lblRegenarateJournalEntries');\r\n cellElement.append(btn);\r\n btn.addEventListener('click', (e) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n this.Do(this.accountEndpoint.Get(firstItem.AccountID), false, ({ Entity }) => {\r\n const { CCPostingAccountID, BankType } = Entity;\r\n if (EnumBankTypes.ExternalCreditCard === BankType && !CCPostingAccountID) {\r\n this.UI.StopMessage(this.RC('msgCCPostingAccountError'));\r\n return;\r\n }\r\n\r\n this.GenerateJE(items);\r\n });\r\n });\r\n }\r\n\r\n if (shouldOpenJE) {\r\n const link = document.createElement('i');\r\n link.className = 'dx-link dx-icon mdi mdi-file-chart-outline';\r\n cellElement.append(link);\r\n\r\n link.addEventListener('click', (e) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n this.Navigate(['/pages/journal-entry', firstItem.JournalEntryID], true, true);\r\n });\r\n }\r\n\r\n }\r\n };\r\n\r\n GenerateJE(items) {\r\n\r\n this.messageDialog.Type = EnumMessageBoxTypes.YesNo;\r\n this.messageDialog.Prompt = this.RC('promptAreYouSure');\r\n this.messageDialog.ShowDialogShort(() => {\r\n this.RegenarateJournalEntries(items);\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 {{ cell.data.OriginalSum | formatNumberSum }}\\r\\n {{ cell.data.OriginalCurrency | LookupList: LIST(\\\"Currencies\\\"):\\\"Symbol\\\" }}\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
0 ? 'positive-amount' : 'negative-amount'\\\">\\r\\n {{ cell.data.Amount | 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 {{data.displayValue}}\\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\";","import { 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 { Component, Input } from '@angular/core';\r\nimport { TransactionCategory } from '../../../_proxy/entities/transactioncategory.entity';\r\nimport { AccessService } from '@kraken/services/access.service';\r\nimport { Transaction } from '@kraken/_proxy/entities/transaction.entity';\r\nimport { TransactionEndpoint } from '@kraken/_proxy/endpoints/transaction.endpoint';\r\nimport { SetupCategoryParams } from '@kraken/_proxy/params/setupcategory.param';\r\nimport { CreateAndSetupCategoryParams } from '@kraken/_proxy/params/createandsetupcategory.param';\r\n\r\nclass State extends BaseState {\r\n SearchCategory: TransactionCategory;\r\n IsManual: boolean = false;\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-transaction-category-selector',\r\n templateUrl: './transaction-category-selector.component.html',\r\n styleUrls: ['./transaction-category-selector.component.scss']\r\n})\r\nexport class TransactionCategorySelectorComponent extends BaseComponent {\r\n\r\n @Input() Category: TransactionCategory;\r\n @Input() CategoryID: number;\r\n @Input() CategoryName: number;\r\n @Input() TransactionID: number;\r\n @Input() JournalEntryID: number;\r\n @Input() IncomingPaymentID: number;\r\n\r\n private _companyID: number;\r\n @Input() set CompanyID(value: number) {\r\n this._companyID = value;\r\n\r\n if (this._companyID && this.CategoriesItems && this.CategoriesItems.length > 0) {\r\n this.CategoriesItems = this.CategoriesItems.filter(x => !x.CompanyID || x.CompanyID === this._companyID);\r\n }\r\n }\r\n private CategoriesItems: TransactionCategory[];\r\n @Input() set Categories(value: TransactionCategory[]) {\r\n this.State.SearchCategory = null;\r\n this.CategoriesItems = value;\r\n\r\n if (this._companyID && this.CategoriesItems && this.CategoriesItems.length > 0) {\r\n this.CategoriesItems = this.CategoriesItems.filter(x => !x.CompanyID || x.CompanyID === this._companyID);\r\n }\r\n }\r\n\r\n set searchKeyword(value: string) {\r\n if (value) {\r\n this.AddSearchCategory();\r\n\r\n this.State.SearchCategory.Name = value;\r\n\r\n if (this.CategoriesItems.some(x => x.Name === value && x.EntryID)) {\r\n this.RemoveSearchCategory();\r\n }\r\n } else if (this.State.SearchCategory) {\r\n this.RemoveSearchCategory();\r\n }\r\n\r\n }\r\n\r\n constructor(A: ServiceBagService,\r\n public accessService: AccessService,\r\n private endpoint: TransactionEndpoint) {\r\n super(A, 'TransactionCategorySelectorComponent', State);\r\n }\r\n\r\n GetText() {\r\n return this.CategoryName ? this.CategoryName : this.RC('lblUnknown');\r\n }\r\n\r\n OnItemClick(e) {\r\n if (!e.itemData) return;\r\n\r\n const params = {\r\n CategoryID: null,\r\n NewCategoryName: null,\r\n TransactionID: this.TransactionID,\r\n CompanyID: this._companyID,\r\n IsManual: this.State.IsManual\r\n };\r\n\r\n if (e.itemData.EntryID) {\r\n params.CategoryID = e.itemData.EntryID;\r\n } else {\r\n params.NewCategoryName = e.itemData.Name;\r\n }\r\n\r\n if (params.IsManual) {\r\n if (params.CategoryID) {\r\n const setupParams = new SetupCategoryParams();\r\n setupParams.TransactionID = this.TransactionID;\r\n setupParams.TransactionCategoryID = params.CategoryID;\r\n\r\n this.Do(this.endpoint.SetupCategory(setupParams), false, (response) => {\r\n this.NotifyEntitySaved(response.Entity, Transaction);\r\n }, (response) => {\r\n this.UI.StopMessage(response.ResponseMessage);\r\n });\r\n } else {\r\n this.CreateAndSetupCategory(params);\r\n }\r\n\r\n this.State.IsManual = false;\r\n } else {\r\n this.Navigate(['/pages/transaction-categorizaton-setup'], params);\r\n }\r\n }\r\n\r\n OnAddTemplate() {\r\n this.Navigate(['/pages/transaction-categorizaton-setup'], {TransactionID: this.TransactionID, CompanyID: this._companyID });\r\n }\r\n\r\n GetCategoryHint() {\r\n if (this.JournalEntryID) return null;\r\n if (this.CategoryID) return this.RC('lblChangeCategory');\r\n return this.RC('lblAddCategory');\r\n }\r\n\r\n ShowJournalEntry() {\r\n this.Navigate(['/pages/journal-entry', this.JournalEntryID]);\r\n }\r\n\r\n ShowIncomingPayment() {\r\n this.Navigate([`/pages/incoming-payment-processing/${this.IncomingPaymentID}`], {\r\n TransactionID: this.TransactionID\r\n });\r\n }\r\n\r\n private AddSearchCategory() {\r\n if (!this.State.SearchCategory) { this.State.SearchCategory = new TransactionCategory(); }\r\n\r\n let index = this.CategoriesItems.indexOf(this.State.SearchCategory);\r\n if (index < 0) { this.CategoriesItems.push(this.State.SearchCategory); }\r\n }\r\n\r\n private RemoveSearchCategory() {\r\n let index = this.CategoriesItems.indexOf(this.State.SearchCategory);\r\n\r\n if (index >= 0) {\r\n this.CategoriesItems.splice(index);\r\n }\r\n }\r\n\r\n private CreateAndSetupCategory(categoryParams: any) {\r\n const params = new CreateAndSetupCategoryParams();\r\n params.TransactionID = categoryParams.TransactionID;\r\n const category = new TransactionCategory();\r\n\r\n category.Name = categoryParams.NewCategoryName;\r\n category.CompanyID = categoryParams.CompanyID;\r\n category.IsActive = true;\r\n\r\n params.Category = category;\r\n \r\n this.Do(this.endpoint.CreateandSetupCategory(params), false, (response) => {\r\n this.NotifyEntitySaved(response.Entity, Transaction);\r\n }, (response) => {\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
\\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
{{ 'lblCreate' | RC:THIS }} '{{ 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 { TransactionCategory } from '../../../_proxy/entities/transactioncategory.entity';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { Component, Input } from '@angular/core';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { CompanyEndpoint } from '@kraken/_proxy/endpoints/company.endpoint';\r\nimport { Company } from '@kraken/_proxy/entities/company.entity';\r\nimport { ParentCategoryEndpoint } from '@kraken/_proxy/endpoints/parentcategory.endpoint';\r\nimport DataSource from 'devextreme/data/data_source';\r\nimport ArrayStore from 'devextreme/data/array_store';\r\nimport { ParentCategoryListParams } from '@kraken/_proxy/params/parentcategorylist.param';\r\nimport { TransactionCategoryView } from '@kraken/_proxy/views/transactioncategory.view';\r\nimport { TransactionCategoryEndpoint } from '@kraken/_proxy/endpoints/transactioncategory.endpoint';\r\n\r\nclass State extends BaseState {\r\n Company: Company;\r\n ParentCategories: any;\r\n ParentCategoryId: number;\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-transaction-category-form',\r\n templateUrl: './transaction-category-form.component.html',\r\n styleUrls: ['./transaction-category-form.component.scss']\r\n})\r\nexport class TransactionCategoryFormComponent extends BaseComponent {\r\n\r\n private _defaultIconFileName: string = 'misc.png';\r\n\r\n @Input() Category: TransactionCategoryView;\r\n @Input() IsShowDescription = true;\r\n @Input() IsShowCompany = true;\r\n @Input() IsShowIcon = true;\r\n @Input() IsReadOnly = false;\r\n @Input() CompanyID: number;\r\n\r\n constructor(A: ServiceBagService, private companyEndpoint: CompanyEndpoint, public parentCategoryEndpoint: ParentCategoryEndpoint,\r\n public transactionCategoryEndpoint: TransactionCategoryEndpoint) {\r\n super(A, 'TransactionCategoryFormComponent', State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.SetDefaultIcon();\r\n this.LoadCompany();\r\n\r\n const params = new ParentCategoryListParams();\r\n params.LoadGlobal = true;\r\n params.Companies = this.CompanyID ? [this.CompanyID] : [];\r\n\r\n this.LoadAdditionalData();\r\n this.Do(this.parentCategoryEndpoint.ListEx(params, null), false, (response) => {\r\n\r\n this.State.ParentCategories = new DataSource({\r\n store: new ArrayStore({\r\n data: response.Entities,\r\n key: 'EntryID',\r\n }),\r\n paginate: true,\r\n pageSize: 10\r\n });\r\n });\r\n }\r\n\r\n OnParentCategoryValueChanged(newValue: number) {\r\n if (newValue !== this.State.ParentCategoryId) {\r\n this.Category.ParentCategoryId = newValue;\r\n }\r\n }\r\n\r\n GetIconPath(iconFileName: string) {\r\n const urlPathPrefix = 'assets/projects/kraken/';\r\n return `${urlPathPrefix}${iconFileName}`;\r\n }\r\n\r\n private LoadCompany() {\r\n if (!this.CompanyID) return;\r\n\r\n this.Do(this.companyEndpoint.Get(this.CompanyID), false, (response) => this.State.Company = response.Entity);\r\n }\r\n\r\n private SetDefaultIcon() {\r\n if (!this.Category.Icon) this.Category.Icon = this._defaultIconFileName;\r\n }\r\n\r\n private LoadAdditionalData() {\r\n if (this.Category.EntryID) {\r\n this.Do(this.transactionCategoryEndpoint.GetAdditionalData(this.Category.EntryID, this.CompanyID), false, (response) => {\r\n this.State.ParentCategoryId = response.Entity.ParentCategoryId;\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 {{ 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 \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\";","import { TransactionCategory } from './../../../_proxy/entities/transactioncategory.entity';\r\nimport { ListTransactionCategoriesParams } from './../../../_proxy/params/listtransactioncategories.param';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntityResponse, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { TransactionCategoryEndpoint } from './../../../_proxy/endpoints/transactioncategory.endpoint';\r\nimport { Company } from './../../../_proxy/entities/company.entity';\r\nimport { CompanyEndpoint } from '@kraken/_proxy/endpoints/company.endpoint';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { EnumClassificarionRuleMatchType } from '../../../../../../../Kraken/Angular/ClientApp/_proxy/enums';\r\nimport { TransactionView } from '@kraken/_proxy/views/transaction.view';\r\nimport { TransactionClassificationRule } from '@kraken/_proxy/entities/transactionclassificationrule.entity';\r\n\r\nclass State extends BaseState{\r\n Company: Company;\r\n\r\n TransactionCategoriesDataSource: TransactionCategory[];\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-classification-rule-form',\r\n templateUrl: './classification-rule-form.component.html',\r\n styleUrls: ['./classification-rule-form.component.scss']\r\n})\r\nexport class ClassificationRuleFormComponent extends BaseComponent {\r\n\r\n @Input() ClassificationRule: TransactionClassificationRule;\r\n @Input() IsReadOnlyTransactionCategory: boolean;\r\n @Input() CompanyID: number;\r\n @Input() IsShowDescription = true;\r\n @Input() IsShowRuleInfo = true;\r\n @Input() IsReadOnly = false;\r\n @Input() Transaction: TransactionView;\r\n\r\n @Output() DateFromChanged: EventEmitter = new EventEmitter();\r\n @Output() DateToChanged: EventEmitter = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService, \r\n private transactionCategoryEndpoint: TransactionCategoryEndpoint,\r\n private companyEndpoint: CompanyEndpoint) {\r\n super(A, 'ClassificationRuleFormComponent', State);\r\n this.SetFieldTypeCellValue = this.SetFieldTypeCellValue.bind(this);\r\n }\r\n\r\n validateIsDebitIsCredit = () => {\r\n return this.ClassificationRule.IsDebit || this.ClassificationRule.IsCredit;\r\n }\r\n\r\n OnDateFromChanged() {\r\n this.DateFromChanged.emit(this.ClassificationRule.DateFrom);\r\n }\r\n\r\n OnDateToChanged() {\r\n this.DateToChanged.emit(this.ClassificationRule.DateTo);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.LoadCategories();\r\n this.LoadCompany();\r\n }\r\n\r\n private LoadCategories() {\r\n const params = new ListTransactionCategoriesParams();\r\n params.Companies = this.CompanyID ? [this.CompanyID] : [];\r\n params.LoadActive = true;\r\n params.LoadGlobal = true;\r\n\r\n this.DataSources['Categories'] = new DataSourceCustomAction(\r\n (options: DataLoadOptions) => this.transactionCategoryEndpoint.ListEx(params, options), \r\n (entryID) => this.transactionCategoryEndpoint.Get(entryID),\r\n (data) => {console.log(data)},\r\n false\r\n );\r\n }\r\n\r\n private LoadCompany() {\r\n if(!this.CompanyID) return;\r\n\r\n this.Do(\r\n this.companyEndpoint.Get(this.CompanyID),\r\n false, \r\n (response: BaseEntityResponse) => this.State.Company = response.Entity\r\n );\r\n }\r\n\r\n SetFieldTypeCellValue(newData, value, currentRowData) {\r\n newData.FieldType = value;\r\n \r\n if(!this.Transaction) {\r\n return;\r\n }\r\n \r\n newData.MatchData = this.Transaction?.[value];\r\n newData.MatchType = EnumClassificarionRuleMatchType.Equal;\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
{{ 'titleDateSelection' | RC:THIS }}
\\r\\n
{{ 'subtitleDateSelection' | 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
\";","import { TransactionCategory } from './../../../_proxy/entities/transactioncategory.entity';\r\nimport { CompanyEndpoint } from './../../../_proxy/endpoints/company.endpoint';\r\nimport { BookingAccountEndpoint } from './../../../_proxy/endpoints/bookingaccount.endpoint';\r\nimport { TransactionCategoryEndpoint } from './../../../_proxy/endpoints/transactioncategory.endpoint';\r\nimport { BookingAccountListParams } from './../../../_proxy/params/bookingaccountlist.param';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { ListTransactionCategoriesParams } from './../../../_proxy/params/listtransactioncategories.param';\r\nimport { PostingTemplate, PostingTemplateBookingAccount } from './../../../_proxy/entities/postingtemplate.entity';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport {\r\n EnumBookingAccountSelectionMethods, EnumBookingAccountSubtypes,\r\n EnumPostingTemplateBookingAccountTypes\r\n} from './../../../_proxy/enums';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { BookingAccountView } from '@kraken/_proxy/views/bookingaccount.view';\r\nimport { Company } from '@kraken/_proxy/entities/company.entity';\r\nimport { CompanyListParams } from '@kraken/_proxy/params/companylist.param';\r\nimport { Organization } from '@kraken/_proxy/entities/organization.entity';\r\nimport { OrganizationEndpoint } from '@kraken/_proxy/endpoints/organization.endpoint';\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 Organization: Organization;\r\n IsShowBookingAccountType: boolean;\r\n\r\n TransactionCategoriesDataSource: any;\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-posting-template-form',\r\n templateUrl: './posting-template-form.component.html',\r\n styleUrls: ['./posting-template-form.component.scss']\r\n})\r\nexport class PostingTemplateFormComponent extends BaseComponent {\r\n\r\n BookingAccountyIDs: number[] = [];\r\n\r\n private _postingTemplate: PostingTemplate;\r\n @Input() set PostingTemplate(value: PostingTemplate) {\r\n this._postingTemplate = value;\r\n\r\n this.BookingAccountyIDs = this.PostingTemplate.BookingAccounts.map(x => x.BookingAccountID);\r\n }\r\n get PostingTemplate() {\r\n return this._postingTemplate;\r\n }\r\n @Input() OrganizationID: number;\r\n @Input() AdditionalTransactionCategory: TransactionCategory;\r\n\r\n @Input() IsReadonly = false;\r\n @Input() IsReadonlyCompany = false;\r\n @Input() IsReadonlyTransactionCategory = false;\r\n @Input() IsShowTransactionCategory = true;\r\n @Input() IsShowCompany = true;\r\n @Input() IsShowDescription = true;\r\n @Input() IsShowDeleteButton;\r\n\r\n @Output() CompanyChanged: EventEmitter = new EventEmitter();\r\n @Output() OnDeleteTemplate: EventEmitter = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService,\r\n private transactionCategoryEndpoint: TransactionCategoryEndpoint,\r\n private bookingAccountEndpoint: BookingAccountEndpoint,\r\n private companyEndpoint: CompanyEndpoint,\r\n private organizationEndpoint: OrganizationEndpoint) {\r\n super(A, 'PostingTemplateFormComponent', State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.LoadCategories();\r\n this.LoadBookingAccounts();\r\n this.LoadCompanies();\r\n this.LoadOrganization();\r\n }\r\n\r\n IsValidBookingAccounts = () => this.BookingAccountyIDs.length > 0;\r\n GetBookingAccountDisplayExpression = (item) => item && `${item.AccountName} ${item.BookingAccountName} ${item.BookingAccountCode}`;\r\n\r\n OnBookingAccountChanged(e) {\r\n e.addedItems.forEach((element: BookingAccountView) => {\r\n if (!this.PostingTemplate.BookingAccounts.find(x => x.BookingAccountID === element.EntryID)) {\r\n this.PostingTemplate.BookingAccounts.push({ BookingAccountID: element.EntryID } as PostingTemplateBookingAccount);\r\n }\r\n });\r\n\r\n e.removedItems.forEach(element => {\r\n const index = this.PostingTemplate.BookingAccounts.findIndex(x => x.BookingAccountID === element.EntryID);\r\n if (index >= 0) {\r\n this.PostingTemplate.BookingAccounts.splice(index);\r\n }\r\n });\r\n }\r\n\r\n // Call for first load\r\n OnCompanySelectionChanged(e) {\r\n this.CompanyChanged.emit(e.selectedItem);\r\n\r\n this.OrganizationID = e.selectedItem.OrganizationID;\r\n }\r\n\r\n OnCompanyChanged(e) {\r\n\r\n this.PostingTemplate.BookingAccounts = [];\r\n this.BookingAccountyIDs = [];\r\n this.PostingTemplate.BookingAccountCode = null;\r\n\r\n this.LoadBookingAccounts();\r\n }\r\n\r\n OnBookingAccountTypeChanged(e) {\r\n if (this.State.Organization.BookingAccountSelectionMethod === EnumBookingAccountSelectionMethods.ListValidate) {\r\n this.PostingTemplate.BookingAccountCode = null;\r\n }\r\n }\r\n\r\n private LoadCategories() {\r\n const params = new ListTransactionCategoriesParams();\r\n params.OrganizationID = this.OrganizationID;\r\n params.LoadActive = false;\r\n params.LoadGlobal = true;\r\n if (this.PostingTemplate.CompanyID) params.Companies = [this.PostingTemplate.CompanyID];\r\n\r\n this.Do(this.transactionCategoryEndpoint.ListCategories(params, null), false, (response) => {\r\n const categories = response.Entities;\r\n\r\n if (this.AdditionalTransactionCategory) {\r\n categories.unshift(this.AdditionalTransactionCategory as any);\r\n }\r\n\r\n this.State.TransactionCategoriesDataSource = new DataSource({\r\n store: new ArrayStore({\r\n data: categories,\r\n key: 'EntryID',\r\n }),\r\n paginate: true,\r\n pageSize: 10\r\n });\r\n });\r\n }\r\n\r\n private LoadBookingAccounts() {\r\n const params = new BookingAccountListParams();\r\n params.OrganizationID = this.OrganizationID;\r\n params.BookingAccountSubtypes = [EnumBookingAccountSubtypes.Current, EnumBookingAccountSubtypes.CreditCard];\r\n if (this.PostingTemplate.CompanyID) {\r\n params.Companies = [this.PostingTemplate.CompanyID];\r\n }\r\n\r\n this.DataSources['BookingAccounts'] = new DataSourceCustomAction(() => this.bookingAccountEndpoint.ListEx(params));\r\n }\r\n\r\n private LoadCompanies() {\r\n const params = new CompanyListParams();\r\n params.OrganizationID = this.OrganizationID;\r\n\r\n this.DataSources['Companies'] = new DataSourceCustomAction(\r\n (options: DataLoadOptions) => this.companyEndpoint.ListEx(params, options));\r\n }\r\n\r\n private LoadOrganization() {\r\n if (this.OrganizationID) {\r\n this.Do(this.organizationEndpoint.Get(this.OrganizationID), false, (response) => {\r\n this.State.Organization = response.Entity;\r\n\r\n this.State.IsShowBookingAccountType =\r\n !this.IsReadonly &&\r\n this.State.Organization?.BookingAccountSelectionMethod !== EnumBookingAccountSelectionMethods.TextInput;\r\n\r\n if (this.State.IsShowBookingAccountType) {\r\n if (!this.PostingTemplate.BookingAccountType) {\r\n this.PostingTemplate.BookingAccountType = EnumPostingTemplateBookingAccountTypes.LedgerAccount;\r\n }\r\n }\r\n });\r\n }\r\n }\r\n DeleteTemplate() {\r\n this.OnDeleteTemplate.emit(this.PostingTemplate);\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
\";","import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { AccessService } from '@kraken/services/access.service';\r\nimport { UploadEndpoint } from '@kraken/_proxy/endpoints/upload.endpoint';\r\nimport { EnumDataExportType, EnumUploadStatuses } from '@kraken/_proxy/enums';\r\nimport { UploadSaveAndGenerateFileParams } from '@kraken/_proxy/params/uploadsaveandgeneratefile.param';\r\nimport { UploadView } from '@kraken/_proxy/views/upload.view';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { AttachedFile, BaseEntitiesResponse, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumMessageBoxTypes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { MessageBoxDialogComponent } from '@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\n\r\nclass State extends BaseState{\r\n ExportType: EnumDataExportType;\r\n ExportTypesList: any;\r\n}\r\n@Component({\r\n selector: 'app-file-export-transactions',\r\n templateUrl: './file-export-transactions.component.html',\r\n styleUrls: ['./file-export-transactions.component.scss']\r\n})\r\nexport class FileExportTransactionsComponent extends BaseComponent {\r\n\r\n @Input() IsSelectedTransactions: boolean;\r\n @Input() GetParams: () => UploadSaveAndGenerateFileParams;\r\n\r\n @Output() OnAfterUpload: EventEmitter = new EventEmitter();\r\n\r\n @ViewChild('messageDialog') messageDialog: MessageBoxDialogComponent;\r\n\r\n constructor(A: ServiceBagService,\r\n private uploadEndpoint: UploadEndpoint,\r\n private accessService: AccessService) {\r\n super(A, 'FileExportTransactionsComponent', State);\r\n\r\n this.State.ExportTypesList = this.LIST('DataExportTypes').filter(e => \r\n e.Value === EnumDataExportType.BAI2File ||\r\n e.Value === EnumDataExportType.ExcelFile ||\r\n e.Value === EnumDataExportType.BezeqZahav14File ||\r\n e.Value === EnumDataExportType.BezeqZahav24File ||\r\n e.Value === EnumDataExportType.BezeqZahav48File ||\r\n e.Value === EnumDataExportType.MT940File ||\r\n e.Value === EnumDataExportType.IntentiaFile);\r\n }\r\n\r\n ExportTransactions() {\r\n let params = this.GetParams();\r\n\r\n if(!params) { return; }\r\n\r\n params.ExportType = this.State.ExportType;\r\n\r\n this.Do(this.uploadEndpoint.SaveAndGenerateFile(params), true, (data: BaseEntitiesResponse) => {\r\n if (!data.Entities.filter(e => e.Status === EnumUploadStatuses.DataSent).length) {\r\n this.UI.StopMessage(this.RC('msgNoTransactionToExport'));\r\n this.OnAfterUpload.emit();\r\n return;\r\n }\r\n for (const entity of data.Entities) {\r\n if (entity.ExportedFileData) {\r\n const file = new AttachedFile();\r\n file.Name = entity.ExportedFileName;\r\n file.Extension = entity.ExportedFileExtension;\r\n Utils.DoFileDownload(file, entity.ExportedFileData, 'any');\r\n }\r\n }\r\n this.messageDialog.Type = EnumMessageBoxTypes.YesNo;\r\n this.messageDialog.Prompt = this.RC('promptSuccessfulExport');\r\n \r\n this.messageDialog.ShowDialogShort(() => {\r\n const uploads = data.Entities.filter(e => {\r\n if (e.Status !== EnumUploadStatuses.DataSent && e.Status !== EnumUploadStatuses.NoData) { return false; }\r\n if (e.Status === EnumUploadStatuses.DataSent) { e.Status = EnumUploadStatuses.FileExported }\r\n return true;\r\n });\r\n\r\n this.Do(this.uploadEndpoint.SaveBatch(uploads), false, () => {\r\n this.OnAfterUpload.emit();\r\n });\r\n }, () => {\r\n const uploads = data.Entities.filter(e => {\r\n if (e.Status !== EnumUploadStatuses.DataSent && e.Status !== EnumUploadStatuses.NoData) { return false; }\r\n e.Status = EnumUploadStatuses.Exception\r\n return true;\r\n });\r\n this.Do(this.uploadEndpoint.SaveBatch(uploads), false, () => {\r\n this.OnAfterUpload.emit();\r\n });\r\n });\r\n });\r\n }\r\n\r\n IsExportButtonDisabled() {\r\n if (!this.IsSelectedTransactions) { return true; }\r\n if (!this.State.ExportType) { return true; }\r\n if (this.accessService.IsAdmin() && this.State.ExportType === EnumDataExportType.Automatic) { return true; }\r\n\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\";","import { Component, ViewChild } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Globals } from '../../_globals';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { BookingAccountEndpoint } from '../../_proxy/endpoints/bookingaccount.endpoint';\r\nimport { TransactionsExportGridComponent } from './transactions-export-grid.component';\r\nimport {\r\n EnumBanks,\r\n EnumBookingAccountSubtypes,\r\n EnumDataExportType,\r\n EnumDownloadTaskStatuses,\r\n EnumExportTransactionsMethod\r\n} from '../../_proxy/enums';\r\nimport { BookingAccountListParams } from '../../_proxy/params/bookingaccountlist.param';\r\nimport { UploadView } from '../../_proxy/views/upload.view';\r\nimport { UploadSaveAndGenerateFileParams } from '../../_proxy/params/uploadsaveandgeneratefile.param';\r\nimport { BaseDataSourceAbstract } from '@m4u-angular/base/datalayer/BaseDataSourceAbstract';\r\nimport { FilterSettings, FilterValues } from 'projects/kraken/components/filter/filter.component';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { FilterComponent } from '../../components/filter/filter.component';\r\nimport { FileExportTransactionsComponent } from '@kraken/components/file-export-transactions/file-export-transactions.component';\r\nimport { DeploymentEndpoint } from '@kraken/_proxy/endpoints/deployment.endpoint';\r\n\r\nexport class State extends BaseState {\r\n IsFlatMode: boolean;\r\n ExportTypesList: any;\r\n Subtype: any;\r\n SubtypesList: any;\r\n DateFrom: Date;\r\n DateTo: Date;\r\n FilterSettings: FilterSettings;\r\n FilterValues: FilterValues;\r\n Deployments: number[];\r\n IsShowOnlyNotAutomatic: boolean = false;\r\n DownloadStatuses: EnumDownloadTaskStatuses[] = [];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-transactions-export',\r\n templateUrl: './transactions-export.component.html',\r\n styleUrls: ['./transactions-export.component.scss']\r\n})\r\nexport class TransactionsExportComponent extends BasePageComponent {\r\n @ViewChild('filter') filter: FilterComponent;\r\n @ViewChild('grid') grid: TransactionsExportGridComponent;\r\n @ViewChild(FileExportTransactionsComponent)\r\n fileExportTransactions: FileExportTransactionsComponent;\r\n\r\n get Globals() {\r\n return Globals;\r\n }\r\n get SelectedRows() {\r\n return this.grid?.State?.SelectedRows;\r\n }\r\n\r\n constructor(\r\n A: ServiceBagService,\r\n private bookingAccountEndpoint: BookingAccountEndpoint,\r\n private deploymentEndpoint: DeploymentEndpoint\r\n ) {\r\n super(A, 'TransactionsExportComponent', BaseEntity, State);\r\n this.State.ExportTypesList = this.LIST('DataExportTypes').filter(\r\n e =>\r\n e.Value === EnumDataExportType.BAI2File ||\r\n e.Value === EnumDataExportType.ExcelFile ||\r\n e.Value === EnumDataExportType.BezeqZahav14File ||\r\n e.Value === EnumDataExportType.BezeqZahav24File ||\r\n e.Value === EnumDataExportType.BezeqZahav48File\r\n );\r\n this.State.SubtypesList = this.LIST('BookingAccountSubTypes').filter(\r\n e =>\r\n e.Value === EnumBookingAccountSubtypes.Current ||\r\n e.Value === EnumBookingAccountSubtypes.CreditCard\r\n );\r\n this.State.SubtypesList.push({ Value: 'Both', Text: this.RC('lblBoth') });\r\n }\r\n\r\n protected override OnInitComponent(): void {\r\n this.State.FilterSettings = {\r\n Company: { IsVisible: true, IsMultiple: true },\r\n Account: { IsVisible: true, IsMultiple: true },\r\n Bank: { IsVisible: true, IsMultiple: true },\r\n BookingAccount: { IsVisible: true, IsMultiple: true },\r\n CurrencyFilter: { IsVisible: true, IsMultiple: true }\r\n } as FilterSettings;\r\n }\r\n\r\n // override OnInitComponentFinished() {\r\n // this.OnLoadData();\r\n // }\r\n\r\n protected override OnReadyFilter(): void {\r\n this.LoadDeployments();\r\n this.OnLoadData();\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n const settings = new ToolbarSettings();\r\n settings.IsAllowFilter = true;\r\n return settings;\r\n }\r\n\r\n override OnInitState() {\r\n this.State.FilterValues = {\r\n OrganizationID: Globals.OrganizationID,\r\n Company: Globals.CompanyID > 0 ? [Globals.CompanyID] : []\r\n } as FilterValues;\r\n\r\n this.State.IsFlatMode = true;\r\n this.State.Subtype = 'Both';\r\n this.State.IsShowOnlyNotAutomatic = true;\r\n this.State.Deployments = [];\r\n this.State.DownloadStatuses = [];\r\n }\r\n\r\n override OnApplyFilter() {\r\n this.LoadDeployments();\r\n this.OnLoadData();\r\n }\r\n\r\n override OnClearFilter() {\r\n this.InitState();\r\n this.LoadDeployments();\r\n // this.filter.LoadData();\r\n this.OnLoadData();\r\n }\r\n\r\n OnOrganizationChanged() {\r\n // this.OnLoadData();\r\n }\r\n\r\n OnSelectedRowsChanged(e: any) {\r\n if (this.SelectedRows) {\r\n const exportTypes = new Set(this.SelectedRows.map(r => r.DataExportType));\r\n if (exportTypes.size > 1) {\r\n this.fileExportTransactions.State.ExportType = undefined;\r\n } else if (exportTypes.size === 1) {\r\n this.fileExportTransactions.State.ExportType = this.SelectedRows[0].DataExportType;\r\n }\r\n }\r\n }\r\n\r\n protected OnLoadData() {\r\n if (!Globals.OrganizationID || !this.State.Subtype) {\r\n this.DataSources['BookingAccounts'] = undefined;\r\n return;\r\n }\r\n\r\n const params = new BookingAccountListParams();\r\n params.OrganizationID = Globals.OrganizationID;\r\n switch (this.State.Subtype) {\r\n case EnumBookingAccountSubtypes.Current:\r\n params.BookingAccountSubtypes = [EnumBookingAccountSubtypes.Current];\r\n break;\r\n case EnumBookingAccountSubtypes.CreditCard:\r\n params.BookingAccountSubtypes = [EnumBookingAccountSubtypes.CreditCard];\r\n break;\r\n case 'Both':\r\n params.BookingAccountSubtypes = [\r\n EnumBookingAccountSubtypes.Current,\r\n EnumBookingAccountSubtypes.CreditCard\r\n ];\r\n break;\r\n }\r\n params.Companies = this.State.FilterValues.Company as number[];\r\n params.Accounts = this.State.FilterValues.Account as number[];\r\n params.BookingAccounts = this.State.FilterValues.BookingAccount as number[];\r\n params.CurrenciesFilter = this.State.FilterValues.CurrencyFilter as string[];\r\n params.LoadActiveUpload = true;\r\n params.Deployments = this.State.Deployments;\r\n params.Banks = this.State.FilterValues.Bank as EnumBanks[];\r\n params.IsOnlyNotAutomaticUpload = this.State.IsShowOnlyNotAutomatic;\r\n params.DownloadTaskStatuses = this.State.DownloadStatuses;\r\n\r\n this.DataSources['BookingAccounts'] = new DataSourceCustomAction(\r\n (options: DataLoadOptions) =>\r\n this.bookingAccountEndpoint.ListBookingAccountsForUploadsExport(params),\r\n undefined,\r\n data => {\r\n // add some client-specific data\r\n for (const entity of data) {\r\n if (entity.ClosingDate) {\r\n entity.ExportMethod = EnumExportTransactionsMethod.ExportNewTransactions;\r\n } else {\r\n entity.ExportMethod =\r\n EnumExportTransactionsMethod.ExportTransactionsFromDate;\r\n }\r\n }\r\n }\r\n );\r\n\r\n this.DS('BookingAccounts').Reload();\r\n }\r\n\r\n IsSelected() {\r\n return this.grid && this.grid.SelectedRowKeys && this.grid.SelectedRowKeys.length\r\n ? true\r\n : false;\r\n }\r\n\r\n GetUploadTransactionsParams = () => {\r\n if (this.grid && this.grid.SelectedRowKeys && this.grid.SelectedRowKeys.length === 0) {\r\n return;\r\n }\r\n\r\n for (const selectedItem of this.SelectedRows) {\r\n if (\r\n selectedItem.ExportMethod ===\r\n EnumExportTransactionsMethod.ExportTransactionsFromDate &&\r\n !selectedItem.DateFrom\r\n ) {\r\n this.UI.StopMessage(\r\n this.RC('msgFillDateFromInBookingAccount', selectedItem.BookingAccountFullName)\r\n );\r\n return;\r\n }\r\n }\r\n\r\n const params = new UploadSaveAndGenerateFileParams();\r\n params.OrganizationID = Globals.OrganizationID;\r\n params.Entities = [];\r\n for (const bookingAccount of this.grid.State.SelectedRows) {\r\n const upload = new UploadView();\r\n upload.BookingAccountID = bookingAccount.EntryID;\r\n\r\n upload.DateFrom = bookingAccount.DateFrom;\r\n upload.DateTo = bookingAccount.DateTo;\r\n upload.ExportMethod = bookingAccount.ExportMethod;\r\n params.Entities.push(upload);\r\n }\r\n\r\n return params;\r\n };\r\n\r\n OnAfterUpload() {\r\n (this.DataSources['BookingAccounts'] as BaseDataSourceAbstract).Reload();\r\n this.grid.ClearSelection();\r\n this.grid.G.Refresh();\r\n }\r\n\r\n private LoadDeployments() {\r\n if (!Globals.OrganizationID) return;\r\n const dataExportTypes = this.State.IsShowOnlyNotAutomatic\r\n ? Object.values(EnumDataExportType).filter(v => v !== EnumDataExportType.Automatic)\r\n : Object.values(EnumDataExportType);\r\n\r\n this.DataSources['Deployments'] = new DataSourceCustomAction(\r\n (options: DataLoadOptions) =>\r\n this.deploymentEndpoint.ListEx(Globals.OrganizationID, dataExportTypes, options),\r\n undefined,\r\n Data => {\r\n this.State.Deployments = this.State.Deployments.filter(\r\n id => Data.findIndex(item => item.EntryID === id) > -1\r\n );\r\n },\r\n false\r\n );\r\n }\r\n\r\n OnShowOnlyAutomatic() {\r\n this.LoadDeployments();\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\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 { BookingAccount } from '@kraken/_proxy/entities/bookingaccount.entity';\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 } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumMessageBoxTypes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { MessageBoxDialogComponent } from '@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\nimport { Globals } from '../../_globals';\r\nimport { EnumExportTransactionsMethod } from '../../_proxy/enums';\r\nimport { BaseDataSourceAbstract } from '@m4u-angular/base/datalayer/BaseDataSourceAbstract';\r\n\r\nclass State extends BaseState {\r\n IsFlatMode: boolean;\r\n GroupByCompany: true;\r\n GroupByBookingAccountSubtype: true;\r\n GroupByCurrency: true;\r\n RadioButtonListDefault = [];\r\n RadioButtonListFromDateOnly = [];\r\n SelectedRowKeys = [];\r\n DateFrom: Date;\r\n DateTo: Date;\r\n SelectedRows: any[] = [];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-transactions-export-grid',\r\n templateUrl: './transactions-export-grid.component.html',\r\n styleUrls: ['./transactions-export-grid.component.scss']\r\n})\r\nexport class TransactionsExportGridComponent extends BaseGridComponent\r\n{\r\n @ViewChild('messageDialog') messageDialog: MessageBoxDialogComponent;\r\n\r\n @Input() set IsFlatMode(value: boolean) {\r\n this.State.IsFlatMode = value;\r\n this.UpdateGroupings();\r\n }\r\n\r\n @Output() SelectionChanged = new EventEmitter();\r\n\r\n get SelectedRowKeys(): number[] { return this.State.SelectedRowKeys; }\r\n get Globals() { return Globals; }\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'TransactionsExportGridComponent', BookingAccount, State);\r\n\r\n // create two lists not to create separate list for each row\r\n this.State.RadioButtonListDefault = this.LIST('ExportTransactionsMethods');\r\n this.State.RadioButtonListFromDateOnly = this.LIST('ExportTransactionsMethods').map(e => Utils.CloneObject(e));\r\n (this.State.RadioButtonListFromDateOnly.find(e => e.Value === EnumExportTransactionsMethod.ExportNewTransactions) as any).disabled = true;\r\n\r\n this.BindHandler('OnGoToTransactionReportGrid');\r\n }\r\n\r\n GetDownloadStatusColor(data) {\r\n switch (data.DownloadTaskStatus) {\r\n case this.Enums.EnumDownloadTaskStatuses.Success:\r\n return 'green-cyan';\r\n case this.Enums.EnumDownloadTaskStatuses.Failure:\r\n return 'cinnabar';\r\n case this.Enums.EnumDownloadTaskStatuses.NoData:\r\n return 'lucky-point';\r\n case this.Enums.EnumDownloadTaskStatuses.Pending:\r\n return 'mango';\r\n case this.Enums.EnumDownloadTaskStatuses.Reviewed:\r\n return 'dark-cyan';\r\n case this.Enums.EnumDownloadTaskStatuses.NotSynched:\r\n return 'midnight';\r\n }\r\n }\r\n\r\n OnToolbarPreparing(e) {\r\n e.toolbarOptions.items.push({\r\n location: 'after',\r\n template: 'showFilter',\r\n isCustom: true\r\n }, {\r\n location: 'after',\r\n template: 'refresh',\r\n isCustom: true\r\n });\r\n }\r\n\r\n OnRefresh() {\r\n if (this.DataSource instanceof BaseDataSourceAbstract) {\r\n this.DataSource.Reload();\r\n }\r\n }\r\n\r\n ClearSelection() {\r\n this.State.SelectedRowKeys = [];\r\n }\r\n\r\n UpdateGroupings() {\r\n if (!this.grid) return;\r\n\r\n let companyGroupIndex = undefined;\r\n let accountGroupIndex = undefined;\r\n let subTypeGroupIndex = undefined;\r\n let currencyGroupIndex = undefined;\r\n\r\n if (!this.State.IsFlatMode) {\r\n companyGroupIndex = 0;\r\n accountGroupIndex = 1;\r\n subTypeGroupIndex = 2;\r\n currencyGroupIndex = 3;\r\n }\r\n\r\n this.G.grid.instance.columnOption('CompanyName', 'groupIndex', companyGroupIndex);\r\n this.G.grid.instance.columnOption('AccountName', 'groupIndex', accountGroupIndex);\r\n this.G.grid.instance.columnOption('Subtype', 'groupIndex', subTypeGroupIndex);\r\n this.G.grid.instance.columnOption('Currency', 'groupIndex', currencyGroupIndex);\r\n\r\n this.UpdateColumnsVisibility();\r\n }\r\n\r\n OnInitialized(e) {\r\n e.component.columnOption(\"command:adaptive\", \"visible\", true);\r\n this.UpdateColumnsVisibility();\r\n }\r\n\r\n private UpdateColumnsVisibility() {\r\n if (this.grid && this.grid.instance) {\r\n this.G.SetColumnVisibility('CompanyName', this.State.IsFlatMode);\r\n this.G.SetColumnVisibility('Subtype', this.State.IsFlatMode);\r\n this.G.SetColumnVisibility('BookingAccountName', this.State.IsFlatMode);\r\n this.G.SetColumnVisibility('BookingAccountCode', this.State.IsFlatMode);\r\n this.G.SetColumnVisibility('Currency', this.State.IsFlatMode);\r\n }\r\n }\r\n\r\n GetGroupRowCaption(e) {\r\n return e.displayValue;\r\n }\r\n\r\n GetRadioGroupItems(data) {\r\n if (data && !data.ClosingDate) { return this.State.RadioButtonListFromDateOnly; }\r\n return this.State.RadioButtonListDefault;\r\n }\r\n\r\n IsRowDateBoxDisabled(data) {\r\n return data && data.ExportMethod !== EnumExportTransactionsMethod.ExportTransactionsFromDate;\r\n }\r\n\r\n IsRowSelected(data) {\r\n return this.SelectedRowKeys.find(k => k === data.EntryID);\r\n }\r\n\r\n OnExportMethodChange(data) {\r\n if (data.ExportMethod === EnumExportTransactionsMethod.ExportTransactionsFromDate && !data.DateFrom && !data.DateTo) {\r\n data.DateFrom = this.State.DateFrom;\r\n data.DateTo = this.State.DateTo;\r\n }\r\n }\r\n\r\n OnSelectionChanged(e: any) {\r\n if (e && e.selectedRowsData) {\r\n this.State.SelectedRows = e.selectedRowsData;\r\n } else {\r\n this.State.SelectedRows = [];\r\n }\r\n\r\n if (this.State.DateFrom && e.currentSelectedRowKeys.length) {\r\n const selectedRow = this.State.SelectedRows && this.State.SelectedRows.find(r => r.EntryID === e.currentSelectedRowKeys[0]);\r\n if (selectedRow && !selectedRow.DateFrom && !selectedRow.DateTo) {\r\n selectedRow.ExportMethod = EnumExportTransactionsMethod.ExportTransactionsFromDate;\r\n selectedRow.DateFrom = this.State.DateFrom;\r\n selectedRow.DateTo = this.State.DateTo;\r\n }\r\n }\r\n this.SelectionChanged.emit(e);\r\n }\r\n\r\n OpenDialog(onOk) {\r\n const dialog = this.messageDialog;\r\n dialog.Type = EnumMessageBoxTypes.YesNo;\r\n dialog.Prompt = this.RC('promptIsChangeDates');\r\n dialog.ShowDialogShort(onOk);\r\n }\r\n\r\n UpdateSelectedRows(dateSource: string) {\r\n const { SelectedRows } = this.State;\r\n\r\n const keyToUpdate = dateSource === 'from' ? 'DateFrom' : 'DateTo';\r\n\r\n if (!SelectedRows || !this.State[keyToUpdate]) return;\r\n\r\n\r\n const updateSelectedRows = () => {\r\n for (const row of SelectedRows) {\r\n row.ExportMethod = EnumExportTransactionsMethod.ExportTransactionsFromDate;\r\n row[keyToUpdate] = this.State[keyToUpdate];\r\n }\r\n };\r\n\r\n const confirmUpdate = () => {\r\n return SelectedRows.some(r => r[keyToUpdate] && r[keyToUpdate].toDateString() !== this.State[keyToUpdate].toDateString());\r\n };\r\n\r\n if (confirmUpdate()) {\r\n return this.OpenDialog(updateSelectedRows);\r\n }\r\n\r\n updateSelectedRows();\r\n }\r\n\r\n OnDateFromChanged() {\r\n this.UpdateSelectedRows('from');\r\n }\r\n\r\n OnDateToChanged() {\r\n this.UpdateSelectedRows('to');\r\n }\r\n\r\n //GetTransactionReportIcon() {\r\n // return this.A.Screen.IsRTL() ? 'mdi mdi-clipboard-arrow-left-outline' : 'mdi mdi-clipboard-arrow-right-outline';\r\n //}\r\n\r\n OnGoToTransactionReportGrid(e: any): void {\r\n const row = e?.row?.data;\r\n if (!row) return;\r\n\r\n const { OrganizationID, EntryID, DateFrom, DateTo, ClosingDate, ExportMethod } = row;\r\n if (ExportMethod === EnumExportTransactionsMethod.ExportTransactionsFromDate) {\r\n this.Navigate(['/pages/transaction-report'], {\r\n OrganizationID: OrganizationID,\r\n BookingAccountID: EntryID,\r\n DateFrom: DateFrom,\r\n DateTo: DateTo\r\n }, true, true);\r\n }\r\n else if (ExportMethod === EnumExportTransactionsMethod.ExportNewTransactions) {\r\n this.Navigate(['/pages/transaction-report'], {\r\n OrganizationID: OrganizationID,\r\n BookingAccountID: EntryID,\r\n DateFrom: ClosingDate\r\n }, true, true);\r\n }\r\n\r\n }\r\n OnGoToDownload = (e) => {\r\n var row: BookingAccount = e?.row?.data;\r\n if (!row) return;\r\n\r\n const params = {\r\n OrganizationID: row.OrganizationID,\r\n CompanyID: row.CompanyID,\r\n AccountID: row.AccountID\r\n };\r\n\r\n this.Navigate([\"/pages/download-history\"], params, false, true);\r\n };\r\n\r\n OnGoToBookingAccount = (e) => {\r\n var row: BookingAccount = e?.row?.data;\r\n if (!row) return;\r\n\r\n this.Navigate([\"pages/account\", row.AccountID], { BookingAccountSubtype: row.Subtype, BookingAccountID: row.EntryID, CompanyID: row.CompanyID }, false, true);\r\n };\r\n\r\n OnGoToUpload = (e) => {\r\n var row: BookingAccount = e?.row?.data;\r\n if (!row) return;\r\n\r\n this.Navigate([\"/pages/upload-history\"], { OrganizationID: row.OrganizationID, CompanyID: row.CompanyID, AccountID: row.AccountID, BookingAccountID: row.EntryID }, false, true);\r\n };\r\n\r\n protected override GetGridRowContextMenu(options?: any): ContextMenuElement[] {\r\n return [{\r\n text: this.RC('btnTransactionsReport'),\r\n onClick: () => this.OnGoToTransactionReportGrid(options)\r\n }, {\r\n text: this.RC('titleGoToDownload'),\r\n onClick: () => this.OnGoToDownload(options)\r\n }, {\r\n text: this.RC('titleGoToUpload'),\r\n onClick: () => this.OnGoToUpload(options)\r\n }, {\r\n text: this.RC('titleGoToBookingAccount'),\r\n onClick: () => this.OnGoToBookingAccount(options)\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 {{'lblTo' | RC:THIS}}\\r\\n \\r\\n
\\r\\n
\\r\\n {{GetGroupRowCaption(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\";","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: 'app-filter-description',\r\n templateUrl: './filter-description.component.html',\r\n styleUrls: ['./filter-description.component.scss']\r\n})\r\nexport class FilterDescriptionComponent extends BaseComponent {\r\n @Input() Values = {};\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'FilterDescriptionComponent', BaseState);\r\n }\r\n\r\n get values() {\r\n return this.Values || {};\r\n }\r\n\r\n get Items() {\r\n if (!this.Values) return [];\r\n const items = Object.entries(this.Values).map(([key, value]) => {\r\n return {\r\n label: key,\r\n value: value\r\n };\r\n });\r\n return items;\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
{{'lblReportPeriod' | RC:THIS }}{{values.DateFrom | formatDateShort:'-'}} - {{values.DateTo | formatDateShort:'-'}}
{{'lblReportForDate' | RC:THIS }}{{values.Date | formatDateShort:'-'}}
{{'lblAmount' | RC:THIS }}{{values.AmountFrom | formatNumberSum}}-{{values.AmountTo| formatNumberSum}}
{{'lblBanks' | RC:THIS }} {{values.Banks.join(\\\", \\\")}}
\";","import { AfterViewInit, Component, Input } from '@angular/core';\r\nimport { ServiceBagServices, ServiceBagService } 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 { TransactionReportParams } from '../../../_proxy/params/transactionreport.param';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { TransactionEndpoint } from '../../../_proxy/endpoints/transaction.endpoint';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-credit-card-transactions-detail',\r\n templateUrl: './credit-card-transactions-detail.component.html'\r\n})\r\nexport class CreditCardTransactionsDetailComponent extends BaseComponent implements AfterViewInit {\r\n @Input() OrganizationID: number;\r\n @Input() CompanyID: number;\r\n @Input() AccountID: number;\r\n @Input() BookingAccountID: number;\r\n @Input() IsBankCharge: number;\r\n @Input() DateFrom: Date;\r\n @Input() DateTo: Date;\r\n @Input() BankChargeDate: Date;\r\n\r\n constructor(A: ServiceBagService, private transactionEndpoint: TransactionEndpoint) {\r\n super(A, 'CreditCardTransactionsDetailComponent', BaseState);\r\n }\r\n\r\n override ngAfterViewInit() {\r\n const params = new TransactionReportParams();\r\n params.OrganizationID = this.OrganizationID;\r\n if (this.CompanyID) {\r\n params.Companies = [this.CompanyID]\r\n }\r\n if (this.AccountID) {\r\n params.Accounts = [this.AccountID]\r\n }\r\n if (this.BookingAccountID) {\r\n params.BookingAccounts = [this.BookingAccountID]\r\n }\r\n if (this.DateFrom) {\r\n params.DateFrom = this.DateFrom;\r\n }\r\n if (this.DateTo) {\r\n params.DateTo = this.DateTo;\r\n }\r\n if (this.BankChargeDate) {\r\n params.BankChargeDateFrom = this.BankChargeDate;\r\n params.BankChargeDateTo = this.BankChargeDate;\r\n }\r\n if (this.IsBankCharge != undefined) {\r\n params.IsBankCharge = this.IsBankCharge;\r\n }\r\n params.IsDebitOnly = true;\r\n this.DataSources['Transactions'] = new DataSourceCustomAction(() => this.transactionEndpoint.ListEx(params));\r\n }\r\n}\r\n\r\n","export default \"\\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 { ScreenService } from \"@m4u-angular/core/framework/screen.service\";\r\nimport { Transaction } from '@kraken/_proxy/entities/transaction.entity';\r\n\r\nclass State extends BaseState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-credit-card-transactions-grid',\r\n templateUrl: './credit-card-transactions-grid.component.html'\r\n})\r\nexport class CreditCardTransactionsGridComponent extends BaseGridComponent\r\n{\r\n constructor(A: ServiceBagService, public screenService: ScreenService) {\r\n super(A, 'CreditCardTransactionsGridComponent', Transaction, 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
{{cell.data.OriginalSum | formatNumberSum }} {{ cell.data.OriginalCurrency }}\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
{{cell.data.Debit | formatNumberSum }} {{ cell.data.Currency }}
\\r\\n
\\r\\n
\\r\\n
\";","import {Component, Input} from '@angular/core';\r\nimport {BaseEntity, BaseState} from '@m4u-angular/base/entities/BaseEntities';\r\nimport {ServiceBagService, ServiceBagServices} from '@m4u-angular/base/component/ServiceBag';\r\nimport {EnumCRUDActions} from '@m4u-angular/core/framework/sysenums.enum';\r\nimport {BasePageComponent} from '@m4u-angular/base/component/BasePageComponent';\r\nimport {DataSourceCustomAction} from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport {DeploymentEndpoint} from '../../../_proxy/endpoints/deployment.endpoint';\r\nimport {Deployment} from '../../../_proxy/entities/deployment.entity';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-deployment-list',\r\n templateUrl: './deployment-list.component.html'\r\n})\r\nexport class DeploymentListComponent extends BasePageComponent\r\n{\r\n @Input() OrganizationID: number;\r\n\r\n constructor(A: ServiceBagService, private endpoint: DeploymentEndpoint)\r\n {\r\n super(A, 'DeploymentListComponent', Deployment, 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 === Deployment) this.LoadDataSource();\r\n }\r\n\r\n public LoadDataSource()\r\n {\r\n this.DataSources['Deployments'] = new DataSourceCustomAction((options) => this.endpoint.ListEx(this.OrganizationID, null, options));\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n\\r\\n\";","import { Component, Input } from '@angular/core';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { Deployment } from '@kraken/_proxy/entities/deployment.entity';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-deployment-grid',\r\n templateUrl: './deployment-grid.component.html'\r\n})\r\nexport class DeploymentGridComponent extends BaseGridComponent\r\n{\r\n @Input() OrganizationID: number;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'DeploymentGridComponent', Deployment, BaseState);\r\n }\r\n\r\n OnNavigate(e: any) {\r\n this.A.Navigator.Navigate(['/pages/deployment', e.data.EntryID], { OrganizationID: e.data.OrganizationID });\r\n }\r\n\r\n DisplayDataExportType = (rowData) => {\r\n return this.LISTITEM('DataExportTypes', rowData.DataExportType)\r\n }\r\n\r\n DisplayAccountingSoftware = (rowData) => {\r\n return this.LISTITEM('AccountingSoftwares', rowData.AccountingSoftware)\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 { OrganizationEndpoint } from '../../_proxy/endpoints/organization.endpoint';\r\nimport { Organization } from '../../_proxy/entities/organization.entity';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { Deployment } from '../../_proxy/entities/deployment.entity';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { DeploymentEndpoint } from '../../_proxy/endpoints/deployment.endpoint';\r\nimport { EnumMessageBoxTypes, EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { BaseEntityResponse, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport {\r\n EnumAccountingSoftwares,\r\n EnumDataExportType,\r\n EnumNotesExportAdjustments\r\n} from '../../_proxy/enums';\r\nimport { ContextMenuElement } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { ToolbarSettings } from '@base/classes/BaseClasses';\r\nimport { EnumJournalExportType } from '../../../../../../Kraken/Angular/ClientApp/_proxy/enums';\r\nimport { MessageBoxDialogComponent } from '@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\n\r\nclass State extends BaseState {\r\n Organization: Organization = new Organization();\r\n Tabs: any[];\r\n CurrentTabIndex: number = 0;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-deployment',\r\n templateUrl: './deployment.component.html',\r\n styleUrls: ['./deployment.component.scss']\r\n})\r\nexport class DeploymentComponent extends BasePageCRUDComponent<\r\n Deployment,\r\n State,\r\n DeploymentEndpoint\r\n> {\r\n \r\n @ViewChild('messageDialog') messageDialog: MessageBoxDialogComponent;\r\n \r\n constructor(\r\n A: ServiceBagService,\r\n private endpoint: DeploymentEndpoint,\r\n private organizationEndpoint: OrganizationEndpoint\r\n ) {\r\n super(A, 'DeploymentComponent', Deployment, State, endpoint, EnumPageDisplayModes.Window);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.Do(\r\n this.organizationEndpoint.Get(this.QueryParams.OrganizationID),\r\n false,\r\n (response: BaseEntityResponse) =>\r\n (this.State.Organization = response.Entity)\r\n );\r\n\r\n this.State.Tabs = this.LIST('DeploymentTabs');\r\n }\r\n\r\n override OnEntityInitObjectName() {\r\n return this.Entity && this.Entity.Name;\r\n }\r\n\r\n override OnEntityNew() {\r\n this.Entity.OrganizationID = this.QueryParams.OrganizationID;\r\n this.Entity.NotesExportAdjustmentCreditAccounts = EnumNotesExportAdjustments.Notes2Append;\r\n this.Entity.NotesExportAdjustmentCurrentAccounts = EnumNotesExportAdjustments.Notes2Append;\r\n this.Entity.IsEnabledNotesRules = true;\r\n this.Entity.WizCloudSubDomain = 'lb1';\r\n }\r\n\r\n get ShowIsAutoExportSFTP(): boolean {\r\n return this.Entity.DataExportType != EnumDataExportType.Automatic;\r\n }\r\n\r\n public OnDataExportTypeChanged(e) {\r\n if(!this.IsUIEvent(e)) return;\r\n \r\n if (e.value == EnumDataExportType.Automatic) {\r\n this.Entity.IsAutoExportSFTP = false;\r\n } else {\r\n this.ActiveCompaniesCheckMessage();\r\n }\r\n }\r\n\r\n override OnEntitySaved() {\r\n this.NavigateBack();\r\n }\r\n\r\n override OnInitContextMenus(): ContextMenuElement[] {\r\n if (this.IsAddMode) return undefined;\r\n const menus: ContextMenuElement[] = [\r\n {\r\n text: this.RC('btnManageOrganizationCredentials'),\r\n visible: true,\r\n onClick: this.OnManageCredentials.bind(this)\r\n }\r\n ];\r\n return menus;\r\n }\r\n\r\n OnManageCredentials() {\r\n this.Navigate(['/pages/passwordmanage'], { CredentialID: this.Entity.EntryID, Type: 2 });\r\n }\r\n\r\n GetTooltipTarget(data, prefix) {\r\n const key = this.GetNoteAdjustItemKey(data, prefix);\r\n return `#${key}`;\r\n }\r\n\r\n private _tooltips = {};\r\n GetTooltipVisible(data, prefix) {\r\n const key = this.GetNoteAdjustItemKey(data, prefix);\r\n return this._tooltips[key];\r\n }\r\n\r\n ToggleTooltip(data, prefix) {\r\n const key = this.GetNoteAdjustItemKey(data, prefix);\r\n this._tooltips[key] = !this._tooltips[key];\r\n }\r\n\r\n GetNoteAdjustItemKey(data, prefix) {\r\n return `${prefix}${data.Value}`;\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 protected override OnEntityPrepareForSave() {\r\n if (this.Entity.AccountingSoftware != EnumAccountingSoftwares.Priority) {\r\n //old defaults\r\n this.Entity.JournalExportType = EnumJournalExportType.Movein1;\r\n }\r\n }\r\n \r\n OnAccountingSoftwareChange(event: any) {\r\n if(!this.IsUIEvent(event)) return;\r\n\r\n if(event.value === EnumAccountingSoftwares.Priority){\r\n this.Entity.JournalExportType = EnumJournalExportType.Movein2;\r\n }\r\n\r\n if(event.value === EnumAccountingSoftwares.Priority || event.value === EnumAccountingSoftwares.Standalone\r\n || event.value === EnumAccountingSoftwares.SAPByDesign) {\r\n this.ActiveCompaniesCheckMessage();\r\n }\r\n }\r\n\r\n private ActiveCompaniesCheckMessage() {\r\n this.Do(\r\n this.endpoint.HasActiveCompanies(this.EntityEntryID),\r\n false,\r\n (response) => {\r\n if(response.Data) {\r\n this.ShowCompaniesDbNameWillBeClearedMessage();\r\n }\r\n }\r\n );\r\n }\r\n\r\n private ShowCompaniesDbNameWillBeClearedMessage() {\r\n if(!this.messageDialog) {\r\n return;\r\n }\r\n\r\n this.messageDialog.Type = EnumMessageBoxTypes.OK;\r\n this.messageDialog.IsHideCancel = true;\r\n this.messageDialog.Prompt = this.RC('promptDeploymentChangeClearCompaniesDBNames');\r\n\r\n this.messageDialog.ShowDialogShort(undefined);\r\n }\r\n\r\n public ShowSoftwareSettings(): boolean {\r\n return this.Entity.AccountingSoftware === this.Enums.EnumAccountingSoftwares.WizCloud ||\r\n this.Entity.AccountingSoftware === this.Enums.EnumAccountingSoftwares.Comax ||\r\n this.Entity.AccountingSoftware === this.Enums.EnumAccountingSoftwares.Priority ||\r\n this.Entity.AccountingSoftware === this.Enums.EnumAccountingSoftwares.SAPByDesign;\r\n }\r\n\r\n public OnTabItemClick(e) {\r\n this.State.CurrentTabIndex = e.itemData.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 \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\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
{{data.Description}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\";","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { BillingContractEndpoint } from '../../../_proxy/endpoints/billingcontract.endpoint';\r\nimport { BillingContract } from '../../../_proxy/entities/billingcontract.entity';\r\nimport { AccessService } from '@kraken/services/access.service';\r\n\r\nclass State extends BaseState {\r\n LoadActive: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-billing-contract-list',\r\n templateUrl: './billing-contract-list.component.html'\r\n})\r\nexport class BillingContractListComponent extends BasePageComponent {\r\n @Input() OrganizationID: number;\r\n @Output() OnUpdateCount = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService,\r\n private endpoint: BillingContractEndpoint,\r\n public accessService: AccessService) {\r\n super(A, 'BillingContractListComponent', BillingContract, State);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n protected override OnExternalEntitySaved(\r\n ExternalEntity: BaseEntity,\r\n ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n if (ExternalEntityType === BillingContract) this.LoadDataSource();\r\n }\r\n\r\n OnLoadActive(value: boolean) {\r\n this.State.LoadActive = value;\r\n this.LoadDataSource();\r\n }\r\n\r\n public LoadDataSource() {\r\n this.DataSources['BillingContracts'] = new DataSourceCustomAction((options) =>\r\n this.endpoint.ListEx(this.OrganizationID, this.State.LoadActive, options), null, (data) => this.OnUpdateCount.emit(data.length));\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n\\r\\n\";","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { BillingContract } from '../../../_proxy/entities/billingcontract.entity';\r\n\r\nclass BillingContractGridState extends BaseState {\r\n ShowActiveOnly: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-billing-contract-grid',\r\n templateUrl: 'billing-contract-grid.component.html'\r\n})\r\nexport class BillingContractGridComponent extends BaseGridComponent {\r\n @Input() OrganizationID: number;\r\n @Output() OnLoadActive = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'BillingContractGridComponent', BillingContract, BillingContractGridState);\r\n }\r\n\r\n OnNavigate(e: any) {\r\n this.A.Navigator.Navigate(['/pages/billing-contract', e.data.EntryID], { OrganizationID: e.data.OrganizationID });\r\n }\r\n\r\n override OnInitState() {\r\n this.State.ShowActiveOnly = true;\r\n this.OnLoadActive.emit(this.State.ShowActiveOnly);\r\n }\r\n\r\n OnToolbarPreparing(e) {\r\n e.toolbarOptions.items.unshift({\r\n location: 'after',\r\n widget: 'dxCheckBox',\r\n isCustom: true,\r\n options: {\r\n text: this.RC('lblShowActiveOnly'),\r\n value: this.State.ShowActiveOnly,\r\n onValueChanged: (e) => {\r\n this.State.ShowActiveOnly = e.value;\r\n this.OnLoadActive.emit(this.State.ShowActiveOnly);\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\";","import { Component } from '@angular/core';\r\nimport { OrganizationEndpoint } from '../../_proxy/endpoints/organization.endpoint';\r\nimport { Organization } from '../../_proxy/entities/organization.entity';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BillingContract } from '../../_proxy/entities/billingcontract.entity';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { BillingContractEndpoint } from '../../_proxy/endpoints/billingcontract.endpoint';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { BaseEntityResponse, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ToolbarSettings } from '@base/classes/BaseClasses';\r\nimport { AccessService } from '@kraken/services/access.service';\r\nimport { BillingContractsReportEndpoint } from '@kraken/_proxy/endpoints/billingcontractsreport.endpoint';\r\nimport { EnumBillingContractsReportModule } from '@kraken/_proxy/enums';\r\nimport { RouteHistoryService } from '@m4u-angular/core/framework/route-history.service';\r\n\r\nclass State extends BaseState {\r\n Organization: Organization = new Organization;\r\n ActualUsersCount: number;\r\n ActualAccountsCount: number;\r\n ActualBaseCompaniesCount: number;\r\n ActualJournalEntriesCompaniesCount: number;\r\n ActualCashflowCompaniesCount: number;\r\n ActualLoansCompaniesCount: number;\r\n IsActivityCheckboxReadonly: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-billing-contract',\r\n templateUrl: 'billing-contract.component.html',\r\n styleUrls: ['billing-contract.component.scss']\r\n})\r\nexport class BillingContractComponent extends BasePageCRUDComponent {\r\n constructor(A: ServiceBagService,\r\n private endpoint: BillingContractEndpoint,\r\n private organizationEndpoint: OrganizationEndpoint,\r\n private billingContractsReportEndpoint: BillingContractsReportEndpoint,\r\n public accessService: AccessService,\r\n private routeHistoryService: RouteHistoryService) {\r\n super(A, 'BillingContractComponent', BillingContract, State, endpoint, EnumPageDisplayModes.Window);\r\n }\r\n\r\n IsCurrentUserAdmin:boolean = this.accessService.IsAdmin();\r\n IsActualInformationSectionVisible:boolean;\r\n\r\n override OnInitComponent() {\r\n this.Do(this.organizationEndpoint.Get(this.QueryParams.OrganizationID),\r\n false, (response: BaseEntityResponse) => {\r\n this.State.Organization = response.Entity;\r\n });\r\n this.LoadActualQuantities();\r\n }\r\n\r\n override OnEntityLoaded() {\r\n !this.accessService.IsAdmin() && this.LockControls(true);\r\n this.IsActualInformationSectionVisible = this.Entity.IsActive && !this.IsAddMode;\r\n this.ToggleIsActiveCheckboxReadonly();\r\n }\r\n\r\n override OnEntityInitObjectName() {\r\n return this.Entity && this.Entity.Name;\r\n }\r\n\r\n override OnEntityNew() {\r\n this.Entity.OrganizationID = this.QueryParams.OrganizationID;\r\n this.Entity.IsActive = true;\r\n }\r\n\r\n override OnEntitySaved() {\r\n this.QueryParams.IsNewOrganization ? this.Navigate(['/pages/organization', this.State.Organization.EntryID]) : this.ClosePage();\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n return {\r\n IsSupportHistory: this.accessService.IsAdmin(),\r\n } as ToolbarSettings;\r\n }\r\n\r\n public FillBillingWithContractValues(e, editedField) {\r\n if (!this.IsUIEvent(e)) return;\r\n const contractToBillingFieldsMapping = {\r\n 'ContractBaseSum': 'BillingBaseSum',\r\n 'ContractBaseCompaniesQuantity': 'BillingBaseCompaniesQuantity',\r\n 'ContractBaseAccountsQuantity': 'BillingBaseAccountsQuantity',\r\n 'ContractBaseUsersQuantity': 'BillingBaseUsersQuantity',\r\n 'ContractJournalEntriesSum': 'BillingJournalEntriesSum',\r\n 'ContractJournalEntriesCompaniesQuantity': 'BillingJournalEntriesCompaniesQuantity',\r\n 'ContractCashflowSum': 'BillingCashflowSum',\r\n 'ContractCashflowCompaniesQuantity': 'BillingCashflowCompaniesQuantity',\r\n 'ContractLoansSum': 'BillingLoansSum',\r\n 'ContractLoansCompaniesQuantity': 'BillingLoansCompaniesQuantity'\r\n };\r\n\r\n if (contractToBillingFieldsMapping[editedField] && this.Entity[contractToBillingFieldsMapping[editedField]] == null\r\n || e.previousValue == this.Entity[contractToBillingFieldsMapping[editedField]]) {\r\n this.Entity[contractToBillingFieldsMapping[editedField]] = this.Entity[editedField];\r\n }\r\n }\r\n\r\n private LoadActualQuantities() {\r\n if (this.IsAddMode) return;\r\n this.Do(this.billingContractsReportEndpoint.GetBillingContractViewsByContractID(this.EntityEntryID), false, (response) => {\r\n const billingContractViews = response.Entities;\r\n\r\n const baseModuleBillingContract = billingContractViews.find((view) => {return view.ReportModule === EnumBillingContractsReportModule.Base });\r\n this.State.ActualUsersCount = baseModuleBillingContract?.ActualUsersQuantity || 0;\r\n this.State.ActualAccountsCount =baseModuleBillingContract?.ActualAccountQuantity || 0;\r\n this.State.ActualBaseCompaniesCount = baseModuleBillingContract?.ActualCompanyQuantity || 0;\r\n\r\n this.State.ActualJournalEntriesCompaniesCount = billingContractViews.find((view) => {return view.ReportModule === EnumBillingContractsReportModule.JournalEntries })?.ActualCompanyQuantity || 0;\r\n\r\n this.State.ActualCashflowCompaniesCount = billingContractViews.find((view) => {return view.ReportModule === EnumBillingContractsReportModule.Cashflow })?.ActualCompanyQuantity || 0;\r\n\r\n this.State.ActualLoansCompaniesCount = billingContractViews.find((view) => {return view.ReportModule === EnumBillingContractsReportModule.Loans })?.ActualCompanyQuantity || 0;\r\n });\r\n }\r\n\r\n public OnIsActiveChanged(e) {\r\n this.IsActualInformationSectionVisible = this.Entity.IsActive && !this.IsAddMode;\r\n }\r\n\r\n private ToggleIsActiveCheckboxReadonly() {\r\n this.Do(this.billingContractsReportEndpoint.IsBillingContractConnectedToAnyEntity(this.EntityEntryID), false, (response) => {\r\n this.State.IsActivityCheckboxReadonly = this.accessService.IsAdmin() ? response['Data'] : 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\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n
{{'lblContractForBilling' | RC:THIS}}
\\r\\n
{{'lblBilling' | RC:THIS}}
\\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 { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-ledger-chart-dialog',\r\n templateUrl: './ledger-chart-dialog.component.html',\r\n styleUrls: ['./ledger-chart-dialog.component.scss']\r\n})\r\nexport class LedgerChartDialogComponent extends BasePageComponent {\r\n\r\n @Input() DataSource: any;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'LedgerChartDialogComponent', BaseEntity, BaseState, EnumPageDisplayModes.Dialog);\r\n }\r\n\r\n}\r\n","export default \"\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { 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 { EnumPageDisplayModes, EnumPageEntitySources } from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\nexport class State extends BaseState {\r\n FromPayment: number;\r\n UntilPayment: number;\r\n PrincipalAmount: number;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-update-principal-dialog',\r\n templateUrl: './update-principal-dialog.component.html'\r\n})\r\nexport class UpdatePrincipalDialogComponent extends BasePageComponent\r\n{\r\n _fromMinNumberPayment: number = 1;\r\n\r\n @Input() set FromMinNumberPayment(value) {\r\n this._fromMinNumberPayment = value || 1;\r\n this.State.FromPayment = this.FromMinNumberPayment;\r\n }\r\n\r\n get FromMinNumberPayment() {\r\n return this._fromMinNumberPayment;\r\n }\r\n\r\n _untilMaxNumberPayment: number = 1;\r\n\r\n @Input() set UntilMaxNumberPayment(value) {\r\n this._untilMaxNumberPayment = value || 520;\r\n }\r\n\r\n get UntilMaxNumberPayment() {\r\n return this._untilMaxNumberPayment;\r\n }\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'UpdatePrincipalDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n this.A.SysEvents.Toolbar.subscribe(() => {\r\n this.State.FromPayment = this.FromMinNumberPayment;\r\n this.State.UntilPayment = 1;\r\n this.State.PrincipalAmount = 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\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseParamsFilter } from './../entities/baseparamsfilter.entity';\r\nexport class FutureChequeListParams extends BaseParamsFilter {\r\n constructor() {\r\n super();\r\n this.TypeName = 'FutureChequeListParams';\r\n }\r\n \r\n public DateFrom: Date; \r\n public DateTo: Date; \r\n public AmountFrom: number; \r\n public AmountTo: number; \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 { BaseParamsFilter } from './../entities/baseparamsfilter.entity';\r\nimport { EnumChequeTypes } from './../enums';\r\nexport class DepositedChequeListParams extends BaseParamsFilter {\r\n constructor() {\r\n super();\r\n this.TypeName = 'DepositedChequeListParams';\r\n }\r\n \r\n public DateFrom: Date; \r\n public DateTo: Date; \r\n public ChequeType: EnumChequeTypes; \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 { EnumChequeTypes } from './../enums';\r\nimport { FutureChequeListParams } from './../params/futurechequelist.param';\r\nimport { DepositedChequeListParams } from './../params/depositedchequelist.param';\r\nexport class ChequeListParams extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ChequeListParams';\r\n }\r\n \r\n public ChequeType: EnumChequeTypes; \r\n public ShowDepositedCheques: boolean; \r\n public ShowFutureCheques: boolean; \r\n public FutureChequeParams: FutureChequeListParams = new FutureChequeListParams; \r\n public DepositedChequeParams: DepositedChequeListParams = new DepositedChequeListParams; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { Component, ViewChild } from '@angular/core';\r\nimport { QuickFilterSettings } from '@kraken/components/quick-filter/quick-filter.component';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\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 { FilterSettings } from '../../components/filter/filter.component';\r\nimport { Globals } from '../../_globals';\r\nimport { ChequeEndpoint } from '../../_proxy/endpoints/cheque.endpoint';\r\nimport { EnumBookingAccountSubtypes, EnumChequeTypes } from '../../_proxy/enums';\r\nimport { AccountListParams } from '../../_proxy/params/accountlist.param';\r\nimport { BookingAccountListParams } from '../../_proxy/params/bookingaccountlist.param';\r\nimport { ChequeListParams } from '../../_proxy/params/chequelist.param';\r\nimport { BaseReportComponent, BaseReportState } from '../base-report/base-report.component';\r\nimport { ChequesReportGridComponent } from './cheques-report-grid.component';\r\n\r\nexport class State extends BaseReportState {\r\n CheckSumFrom: number;\r\n CheckSumTo: number;\r\n CurrentTabIndex: number;\r\n ShowDepositedCheques: boolean;\r\n ShowFutureCheques: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-cheques-report',\r\n templateUrl: './cheques-report.component.html'\r\n})\r\nexport class ChequesReportComponent extends BaseReportComponent\r\n{\r\n @ViewChild('reportGrid') reportGrid: ChequesReportGridComponent;\r\n\r\n constructor(A: ServiceBagService, private chequeEndpoint: ChequeEndpoint) {\r\n super(A, 'ChequesReportComponent', State);\r\n }\r\n\r\n protected override OnGetCustomFilterSettings() {\r\n return {\r\n Company: { IsVisible: true, IsMultiple: true },\r\n Account: { IsVisible: true, IsMultiple: true, Params: { BookingAccountSubtypes: [EnumBookingAccountSubtypes.Current] } as AccountListParams },\r\n BookingAccount: { IsVisible: true, IsMultiple: true, Params: { BookingAccountSubtypes: [EnumBookingAccountSubtypes.Current], CurrenciesFilter: ['ILS'] } as BookingAccountListParams },\r\n AccountGroup: { IsVisible: true, IsMultiple: true },\r\n IsDatesVisible: true,\r\n IsAmountsVisible: true,\r\n MaxReportDate: undefined\r\n } as FilterSettings;\r\n }\r\n\r\n protected override OnGetCustomQuickFilterSettings(): QuickFilterSettings {\r\n return {\r\n Company: { IsVisible: true, IsMultiple: true },\r\n Account: { IsVisible: true, IsMultiple: true, Params: { BookingAccountSubtypes: [EnumBookingAccountSubtypes.Current] } as AccountListParams },\r\n BookingAccount: { IsVisible: true, IsMultiple: true, Params: { BookingAccountSubtypes: [EnumBookingAccountSubtypes.Current], CurrenciesFilter: ['ILS'] } as BookingAccountListParams },\r\n IsDatesVisible: true,\r\n MaxReportDate: undefined\r\n } as QuickFilterSettings;\r\n }\r\n\r\n protected override OnResetFilterValues() {\r\n super.OnResetFilterValues();\r\n this.State.FilterValues.DateFrom = Globals.ThirtyDaysAgoDate;\r\n this.State.FilterValues.DateTo = Globals.Yesterday;\r\n }\r\n\r\n protected override OnInitState() {\r\n super.OnInitState();\r\n this.State.CurrentTabIndex = 0;\r\n this.State.ShowDepositedCheques = true;\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.reportGrid?.G;\r\n\r\n return settings;\r\n }\r\n\r\n OnLoadData() {\r\n if (!Globals.OrganizationID) { return; }\r\n const params = new ChequeListParams();\r\n params.ChequeType = this.State.CurrentTabIndex === 0 ? EnumChequeTypes.Incoming : EnumChequeTypes.Outgoing;\r\n params.ShowDepositedCheques = this.State.ShowDepositedCheques;\r\n params.ShowFutureCheques = this.State.ShowFutureCheques;\r\n\r\n params.FutureChequeParams.DateFrom = this.State.FilterValues.DateFrom;\r\n params.FutureChequeParams.DateTo = this.State.FilterValues.DateTo;\r\n params.FutureChequeParams.AmountFrom = this.State.FilterValues.AmountFrom;\r\n params.FutureChequeParams.AmountTo = this.State.FilterValues.AmountTo;\r\n params.FutureChequeParams.OrganizationID = Globals.OrganizationID;\r\n params.FutureChequeParams.Companies = this.State.FilterValues.Company as number[];\r\n params.FutureChequeParams.Accounts = this.State.FilterValues.Account as number[];\r\n params.FutureChequeParams.BookingAccounts = this.State.FilterValues.BookingAccount as number[];\r\n params.FutureChequeParams.AccountGroups = this.State.FilterValues.AccountGroup as number[];\r\n params.FutureChequeParams.LoadActive = true;\r\n\r\n params.DepositedChequeParams.DateFrom = this.State.FilterValues.DateFrom;\r\n params.DepositedChequeParams.DateTo = this.State.FilterValues.DateTo;\r\n params.DepositedChequeParams.OrganizationID = Globals.OrganizationID;\r\n params.DepositedChequeParams.Companies = this.State.FilterValues.Company as number[];\r\n params.DepositedChequeParams.Accounts = this.State.FilterValues.Account as number[];\r\n params.DepositedChequeParams.BookingAccounts = this.State.FilterValues.BookingAccount as number[];\r\n params.DepositedChequeParams.AccountGroups = this.State.FilterValues.AccountGroup as number[];\r\n params.DepositedChequeParams.LoadActive = true;\r\n this.State.IsLoading = true;\r\n this.DataSources['Cheques'] = new DataSourceCustomAction(\r\n (options: DataLoadOptions) => this.chequeEndpoint.ListForReport(params), undefined, (data) => {\r\n this.State.IsLoading = false;\r\n }, false);\r\n }\r\n\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\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 { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { SysGlobals } from '@m4u-angular/core/framework/sysglobals';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { ImageBoxDialogComponent } from '@m4u-angular/ui/dialogs/imagebox-dialog/imageboxdialog.component';\r\nimport { formatNumber } from 'devextreme/localization';\r\nimport { ChequeImageEndpoint } from '../../_proxy/endpoints/chequeimage.endpoint';\r\nimport { FutureChequeImageEndpoint } from '../../_proxy/endpoints/futurechequeimage.endpoint';\r\nimport { EnumChequeTypes, EnumFutureChequeStatus } from '../../_proxy/enums';\r\nimport { ChequeView } from '../../_proxy/views/cheque.view';\r\nimport { Cheque } from '@kraken/_proxy/entities/cheque.entity';\r\nimport jsPDF from 'jspdf';\r\n\r\nexport class State extends BaseState {\r\n ChequesType: EnumChequeTypes;\r\n CurrentChequeImageID: number = undefined;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-cheques-report-grid',\r\n templateUrl: './cheques-report-grid.component.html'\r\n})\r\nexport class ChequesReportGridComponent extends BaseGridComponent {\r\n private currentChequeImages: Blob[] = [];\r\n private currentChequeImageIndex: number;\r\n ChequeImage1: any;\r\n ChequeImage2: any;\r\n\r\n @ViewChild(ImageBoxDialogComponent) chequeViewDialog: ImageBoxDialogComponent;\r\n\r\n @Input() set ChequesType(value: number) {\r\n this.State.ChequesType = value ? EnumChequeTypes.Outgoing : EnumChequeTypes.Incoming;\r\n }\r\n @Input() IsLoading: boolean = false;\r\n @Input() IsFlatMode: boolean;\r\n\r\n constructor(A: ServiceBagService, private chequeImageEndpoint: ChequeImageEndpoint, private futureChequeImageEndpoint: FutureChequeImageEndpoint) {\r\n super(A, 'ChequesReportGridComponent', Cheque, State);\r\n this.BindHandler('IsHasCheques');\r\n this.BindHandler('OnViewChequeClick');\r\n this.BindHandler('GetDepositedCheckSumText');\r\n this.BindHandler('GetFutureCheckSumText');\r\n this.BindHandler('OnCalculateSummary');\r\n }\r\n\r\n IsHasCheques(e) {\r\n return e?.row?.data?.ChequeImageID;\r\n }\r\n\r\n OnViewChequeClick(e) {\r\n const oCheque = (e?.row?.data as ChequeView);\r\n const endpoint = oCheque?.Source == EnumFutureChequeStatus.Future ? this.futureChequeImageEndpoint : this.chequeImageEndpoint;\r\n this.Do(endpoint.Get(oCheque.ChequeImageID), false, (response) => {\r\n this.State.CurrentChequeImageID = oCheque.ChequeImageID;\r\n this.currentChequeImages = [];\r\n if (response.Entity.Image1) {\r\n const imageBlob = Utils.ConvertToBlob(response.Entity.Image1, 'image/png');\r\n this.currentChequeImages.push(imageBlob);\r\n if (imageBlob) Utils.ConvertBlobToImage(imageBlob, image => {\r\n this.ChequeImage1 = image;\r\n });\r\n }\r\n if (response.Entity.Image2) {\r\n const imageBlob = Utils.ConvertToBlob(response.Entity.Image2, 'image/png');\r\n this.currentChequeImages.push(imageBlob);\r\n if (imageBlob) Utils.ConvertBlobToImage(imageBlob, image => {\r\n this.ChequeImage2 = image;\r\n });\r\n }\r\n\r\n this.chequeViewDialog.Title = `${this.RC('lblChequeNumber')}: ${e?.row?.data?.ChequeNumber}`;\r\n this.currentChequeImageIndex = 0;\r\n this.chequeViewDialog.ImageSource = this.currentChequeImages[this.currentChequeImageIndex];\r\n this.chequeViewDialog.ShowDialogShort(() => { });\r\n });\r\n }\r\n\r\n OnCloseClick() {\r\n this.chequeViewDialog.CloseDialogWithSuccess();\r\n }\r\n\r\n OnPrevClick() {\r\n if (this.currentChequeImageIndex === 0) {\r\n this.currentChequeImageIndex = this.currentChequeImages.length - 1;\r\n } else {\r\n this.currentChequeImageIndex--;\r\n }\r\n this.chequeViewDialog.ImageSource = this.currentChequeImages[this.currentChequeImageIndex];\r\n }\r\n\r\n OnNextClick() {\r\n if (this.currentChequeImageIndex === this.currentChequeImages.length - 1) {\r\n this.currentChequeImageIndex = 0;\r\n } else {\r\n this.currentChequeImageIndex++;\r\n }\r\n this.chequeViewDialog.ImageSource = this.currentChequeImages[this.currentChequeImageIndex];\r\n }\r\n\r\n GetBankText(bank: string) {\r\n return this.LISTITEMX('Banks', bank)?.Text;\r\n }\r\n\r\n GetDepositedCheckSumText(e: any) {\r\n if (!e.value) {\r\n return '';\r\n }\r\n let text = '';\r\n if (e.value.totalDeposited) {\r\n text += this.RC('lblTotalDeposited') + formatNumber(e.value.totalDeposited, this.A.Framework.CompanyInfo.NumberSum);\r\n }\r\n return text;\r\n }\r\n\r\n GetFutureCheckSumText(e: any) {\r\n if (!e.value) {\r\n return '';\r\n }\r\n let text = '';\r\n if (e.value.totalFuture) {\r\n text += this.RC('lblTotalFuture') + formatNumber(e.value.totalFuture, this.A.Framework.CompanyInfo.NumberSum);\r\n }\r\n return text;\r\n }\r\n\r\n OnCalculateSummary(e: any) {\r\n if (e.summaryProcess === 'start') {\r\n e.totalValue = { totalDeposited: 0, totalFuture: 0 };\r\n }\r\n if (e.summaryProcess === 'calculate') {\r\n if (e.value.Status == EnumFutureChequeStatus.Future) {\r\n e.totalValue.totalFuture += e.value.CheckSum;\r\n } else {\r\n e.totalValue.totalDeposited += e.value.CheckSum;\r\n }\r\n }\r\n }\r\n\r\n CalculateMonthGroup(rowData) {\r\n const { Language } = SysGlobals;\r\n const date = new Date(rowData.TransactionDate);\r\n const month = date.toLocaleString('default', { month: '2-digit' });\r\n const displayValue = date.toLocaleString(Language, { month: 'long' });\r\n\r\n return `${month};${displayValue}`;\r\n }\r\n\r\n PrintCheques() {\r\n const printWindow = window.open('', '_blank');\r\n if (printWindow) {\r\n printWindow.document.write(`\r\n \r\n \r\n Print Cheques\r\n \r\n \r\n \r\n \"Image\r\n \"Image\r\n \r\n \r\n `);\r\n printWindow.document.close();\r\n if (printWindow) {\r\n printWindow.onload = () => {\r\n printWindow.print();\r\n };\r\n }\r\n // printWindow.close();\r\n }\r\n }\r\n\r\n async DownloadCheques() {\r\n const pdf = new jsPDF();\r\n\r\n // The width of A4 is 210, so 180 will fit into it\r\n const maxWidth = 180;\r\n \r\n const imgDimensions = await this.getImageDimensions(this.ChequeImage1, maxWidth);\r\n\r\n pdf.addImage(this.ChequeImage1 as any, 'JPEG', 15, 10, imgDimensions.width, imgDimensions.height);\r\n \r\n if(this.ChequeImage2) {\r\n const imgDimensions2 = await this.getImageDimensions(this.ChequeImage2, maxWidth);\r\n\r\n pdf.addImage(this.ChequeImage2 as any, 'JPEG', 15, 10 + imgDimensions.height, imgDimensions2.width, imgDimensions2.height);\r\n }\r\n\r\n pdf.save(`Cheques_${this.State.CurrentChequeImageID}.pdf`);\r\n }\r\n\r\n getImageDimensions(base64: string, maxWidth: number): Promise<{ width: number; height: number }> {\r\n return new Promise((resolve) => {\r\n const img = new Image();\r\n img.src = base64;\r\n \r\n img.onload = () => {\r\n const aspectRatio = img.width / img.height;\r\n const width = Math.min(img.width, maxWidth);\r\n const height = width / aspectRatio;\r\n\r\n resolve({ width, height });\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 {{GetBankText(cell.data.BankDisplayValue)}}\\r\\n
\\r\\n
\\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 ? 'positive-amount' : 'negative-amount'\\\">\\r\\n {{cell.data.CheckSum | formatNumberSum }}
\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n {{data.displayValue}}\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\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\\\" Mode=\\\"transparent\\\" Text=\\\"{{'btnPrev' | RC:THIS}}\\\"\\r\\n (OnClick)=\\\"OnPrevClick()\\\">\\r\\n \\r\\n 1\\\" Mode=\\\"solid\\\" Type=\\\"normal\\\" Text=\\\"{{'btnNext' | RC:THIS}}\\\"\\r\\n (OnClick)=\\\"OnNextClick()\\\">\\r\\n \\r\\n \\r\\n\";","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCCProcessingCompanies } from './../enums';\r\nimport { EnumCCBrands } from './../enums';\r\nexport class CCContract extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'CCContract';\r\n }\r\n \r\n public CompanyID: number; \r\n public Name: string; \r\n public Description: string; \r\n public MerchantNumber: number; \r\n public ProcessingCompany: EnumCCProcessingCompanies; \r\n public BankPassID: number; \r\n public IsActive: boolean; \r\n public SignedAtDate: Date; \r\n public DownloadStartDate: Date; \r\n public BookingAccountCodeTemp: string; \r\n public FullName: string; \r\n public CompanyName: string; \r\n public InvoicesMapLines: CCContractInvoicesMap[] = []; \r\n public TransfersMapLines: CCContractTransfersMap[] = []; \r\n\tpublic CreatedBy: number;\r\n\tpublic CreatedDate: Date;\r\n}\r\n\r\nexport class CCContractInvoicesMap extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'CCContractInvoicesMap';\r\n }\r\n \r\n public Currency: string; \r\n public BookingAccountCodeCommissions: string; \r\n public BookingAccountCodeVendor: string; \r\n public BookingAccountCodeClearingInterest: string; \r\n public BookingAccountCodeClubDiscount: string; \r\n public BookingAccountCodeClubManagementFee: string; \r\n public BookingAccountCodeVat: string; \r\n public LineID: number;\r\n}\r\nexport class CCContractTransfersMap extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'CCContractTransfersMap';\r\n }\r\n \r\n public Currency: string; \r\n public Brand: EnumCCBrands; \r\n public BookingAccountID: number; \r\n public BookingAccountCodeDebit: string; \r\n public BookingAccountCodeDeposits: string; \r\n public LineID: number;\r\n}\r\n\r\n\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCRUDActions } 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 { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { CCContract } from '../../../_proxy/entities/cccontract.entity';\r\nimport { CCContractEndpoint } from '../../../_proxy/endpoints/cccontract.endpoint';\r\nimport {CCContractsParams} from '../../../_proxy/params/cccontracts.param';\r\n\r\nclass State extends BaseState {\r\n LoadActive: boolean = false;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-cccontract-list',\r\n templateUrl: './cccontract-list.component.html'\r\n})\r\nexport class CCContractListComponent extends BaseComponent {\r\n @Input() CompanyID: number;\r\n @Input() IsShowActiveOnlyCheckbox: boolean;\r\n @Output() OnUpdateCount = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService, private endpoint: CCContractEndpoint) {\r\n super(A, 'CCContractListComponent', State);\r\n }\r\n\r\n protected override OnInitState(): void {\r\n this.State.LoadActive = true;\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 === CCContract) this.LoadDataSource();\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n public LoadDataSource() {\r\n if (!this.CompanyID) {\r\n return; \r\n }\r\n const params = new CCContractsParams;\r\n params.Companies = [this.CompanyID];\r\n params.IsActive = this.State.LoadActive;\r\n this.DataSources['CCContracts'] = new DataSourceCustomAction((options: DataLoadOptions) => \r\n this.endpoint.ListEx(params), null, (data) => {\r\n this.OnUpdateCount.emit(data.length);\r\n });\r\n }\r\n\r\n OnLoadActive(v) {\r\n this.State.LoadActive = v;\r\n this.LoadDataSource();\r\n }\r\n}\r\n\r\n","export default \"\\r\\n\";","import { Component, EventEmitter, Input, Output } 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 { CCContract } from '@kraken/_proxy/entities/cccontract.entity';\r\n\r\nclass State extends BaseState {\r\n ShowActiveOnly: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-cccontract-grid',\r\n templateUrl: './cccontract-grid.component.html'\r\n})\r\nexport class CCContractGridComponent extends BaseGridComponent {\r\n @Input() AccountID: number;\r\n @Input() ShowCompany: boolean;\r\n @Input() IsShowActiveOnlyCheckbox: boolean = false;\r\n @Output() OnLoadActive = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'CCContractGridComponent', CCContract, State);\r\n }\r\n\r\n protected override OnInitState() {\r\n if (this.IsShowActiveOnlyCheckbox) {\r\n this.State.ShowActiveOnly = true;\r\n this.OnLoadActive.emit(this.State.ShowActiveOnly);\r\n }\r\n }\r\n\r\n OnNavigate(e) {\r\n this.Navigate(['/pages/cccontract', e.data.EntryID], { CompanyID: e.data.CompanyID });\r\n }\r\n\r\n OnToolbarPreparing(e) {\r\n if (this.IsShowActiveOnlyCheckbox) {\r\n e.toolbarOptions.items.unshift({\r\n location: 'after',\r\n widget: 'dxCheckBox',\r\n isCustom: true,\r\n options: {\r\n text: this.RC('lblShowActiveOnly'),\r\n value: this.State.ShowActiveOnly,\r\n onValueChanged: (e) => {\r\n this.State.ShowActiveOnly = e.value;\r\n this.OnLoadActive.emit(this.State.ShowActiveOnly);\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\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { CCContract } from './../entities/cccontract.entity';\r\nimport { BankPass } from './../entities/bankpass.entity';\r\nexport class CCContractsSaveDetailParams extends BaseEntity\r\n{ \r\n public CCContract: CCContract = new CCContract; \r\n public BankPass: BankPass = new BankPass; \r\n \r\n}\r\n\r\n\r\n","import { Component, ViewChild } 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 } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCRUDActions, EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ContextMenuElement, ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { CCContract, CCContractInvoicesMap, CCContractTransfersMap } from '../../_proxy/entities/cccontract.entity';\r\nimport { CCContractEndpoint } from '../../_proxy/endpoints/cccontract.endpoint';\r\nimport { BankPassListParams } from '../../_proxy/params/bankpasslist.param';\r\nimport { BankPassView } from '../../_proxy/views/bankpass.view';\r\nimport { BankPassEndpoint } from '../../_proxy/endpoints/bankpass.endpoint';\r\nimport { EnumBanks, EnumBookingAccountSubtypes, EnumCCBrands } from '../../_proxy/enums';\r\nimport { Company } from '../../_proxy/entities/company.entity';\r\nimport { CompanyEndpoint } from '../../_proxy/endpoints/company.endpoint';\r\nimport { BaseEntityResponse } from '../../../../src/base/entities/BaseEntities';\r\nimport { AccountEndpoint } from '../../_proxy/endpoints/account.endpoint';\r\nimport { BookingAccount } from '../../_proxy/entities/bookingaccount.entity';\r\nimport { Account } from '../../_proxy/entities/account.entity';\r\nimport { BookingAccountEndpoint } from '../../_proxy/endpoints/bookingaccount.endpoint';\r\nimport { BookingAccountListParams } from '../../_proxy/params/bookingaccountlist.param';\r\nimport { DxDataGridComponent, DxSelectBoxComponent } from 'devextreme-angular';\r\nimport { CCContractsSaveDetailParams } from '@kraken/_proxy/params/cccontractssavedetail.param';\r\nimport { DownloadRequestEndpoint } from \"../../_proxy/endpoints/downloadrequest.endpoint\";\r\nimport { OtpInputDialogComponent } from '@kraken/components/otp-input-dialog/otp-input-dialog.component';\r\nimport { AccountListParams } from '@kraken/_proxy/params/accountlist.param';\r\nimport { MessageBoxDialogComponent } from '@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\nimport { BookingAccountActionDialogComponent, State } from '../booking-account/booking-account-action-dialog.component';\r\nimport { EnumMessageBoxTypes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { formatDate } from 'devextreme/localization';\r\n\r\nclass CCContractComponentState extends BaseState {\r\n CurrentTabIndex: number = 0; \r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-cccontract',\r\n templateUrl: './cccontract.component.html'\r\n})\r\nexport class CCContractComponent extends BasePageCRUDComponent\r\n{\r\n @ViewChild('transfersMapGrid') private transfersMapGrid: DxDataGridComponent;\r\n @ViewChild('bankPassSelectBox') bankPassSelectBox: DxSelectBoxComponent;\r\n @ViewChild('otpInputDialog') otpInputDialog: OtpInputDialogComponent;\r\n @ViewChild('messageBox') messageBoxDialog: MessageBoxDialogComponent;\r\n @ViewChild('reloadDialog') reloadActionDialog: BookingAccountActionDialogComponent;\r\n \r\n private Company: Company;\r\n private Accounts: Account[] = [];\r\n private BookingAccounts: BookingAccount[] = [];\r\n private CurrentRowBookingAccounts: BookingAccount[] = [];\r\n\r\n private get SelectedBankPass(): BankPassView {\r\n return this.Entity.BankPassID && this.DataSources['BankPasses']?.find(bp => bp.EntryID === this.Entity.BankPassID);\r\n }\r\n\r\n constructor(A: ServiceBagService, private endpoint: CCContractEndpoint, private companyEndpoint: CompanyEndpoint,\r\n private accountEndpoint: AccountEndpoint, private bookingAccountEndpoint: BookingAccountEndpoint, private downloadRequestEndpoint: DownloadRequestEndpoint, private bankPassEndpoint: BankPassEndpoint) {\r\n super(A, 'CCContractComponent', CCContract, State, endpoint, EnumPageDisplayModes.Window);\r\n this.BindHandler('GetBankPassDisplayExpr');\r\n this.BindHandler('GetBookingAccountsDS');\r\n }\r\n\r\n override OnInitComponent() {\r\n }\r\n\r\n override OnEntityInitObjectName() {\r\n return this.Entity && this.Entity.Name;\r\n }\r\n\r\n override OnEntityNew() {\r\n this.Entity.IsActive = true;\r\n this.Entity.CompanyID = this.QueryParams.CompanyID;\r\n this.Entity.TransfersMapLines = [{ Brand: EnumCCBrands.All, Currency: 'ILS' } as CCContractTransfersMap];\r\n this.Entity.InvoicesMapLines = [{ Currency: 'ILS' } as CCContractInvoicesMap];\r\n this.LoadAdditionalData();\r\n }\r\n\r\n override OnEntityLoaded() {\r\n this.LoadAdditionalData();\r\n }\r\n\r\n override OnEntityValidate(): boolean {\r\n\r\n // check for duplicates in TransfersMapLines\r\n const brandAllArray = this.Entity.TransfersMapLines.filter(l => l.Brand === EnumCCBrands.All);\r\n const brandAllArrayDistinct = brandAllArray.filter(\r\n (entity, i, arr) => arr.findIndex(t => t.Currency === entity.Currency && t.Brand === entity.Brand) === i\r\n );\r\n\r\n if (brandAllArray.length !== brandAllArrayDistinct.length) {\r\n this.UI.StopMessage(this.RC('msgTransfersMapLinesDuplicates'));\r\n return false;\r\n }\r\n\r\n const brandOthersArray = this.Entity.TransfersMapLines.filter(l => l.Brand !== EnumCCBrands.All);\r\n const brandOthersArrayDistinct = brandOthersArray.filter(\r\n (entity, i, arr) => arr.findIndex(t => t.Currency === entity.Currency && t.Brand === entity.Brand) === i\r\n );\r\n if (brandOthersArray.length !== brandOthersArrayDistinct.length) {\r\n this.UI.StopMessage(this.RC('msgTransfersMapLinesDuplicates'));\r\n return false;\r\n }\r\n\r\n // check for duplicates in InvoicesMapLines\r\n const invoicesArrayDistinct = this.Entity.InvoicesMapLines.filter(\r\n (entity, i, arr) => arr.findIndex(t => t.Currency === entity.Currency) === i\r\n );\r\n\r\n if (this.Entity.InvoicesMapLines.length !== invoicesArrayDistinct.length) {\r\n this.UI.StopMessage(this.RC('msgInvoicesMapLinesDuplicates'));\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n LoadAdditionalData() {\r\n if (!this.Entity.CompanyID) { return; }\r\n this.Do(this.companyEndpoint.Get(this.Entity.CompanyID), false, (response1: BaseEntityResponse) => {\r\n this.Company = response1.Entity;\r\n this.LoadBankPasses();\r\n this.Do(this.accountEndpoint.ListEx({ Companies: [this.Entity.CompanyID], LoadActive: true } as AccountListParams, undefined), false, (response2) => {\r\n this.Accounts = response2.Entities;\r\n\r\n const params = new BookingAccountListParams();\r\n params.Companies = [this.Entity.CompanyID];\r\n\r\n this.Do(this.bookingAccountEndpoint.ListEx(params), false, (response3) => {\r\n this.BookingAccounts = response3.Entities;\r\n this.Entity.TransfersMapLines.forEach(line => {\r\n if (!line.BookingAccountID) return;\r\n const account = this.BookingAccounts.find(ba => ba.EntryID === line.BookingAccountID);\r\n if (account) (line as any).AccountID = account.AccountID;\r\n });\r\n this.RefreshEntityOriginal();\r\n });\r\n });\r\n });\r\n }\r\n\r\n override OnEntitySaved() {\r\n this.NavigateBack();\r\n }\r\n\r\n\r\n OnDownloadRequestedData() {\r\n this.Do(this.downloadRequestEndpoint.DownloadContractUpdatedData(this.Entity.EntryID), true, (data) => {\r\n if (data.Entity) {\r\n this.otpInputDialog.downloadRequest = data.Entity;\r\n this.otpInputDialog.Message = data.ResponseMessage;\r\n this.otpInputDialog.ShowDialogShort(() => { });\r\n }\r\n });\r\n }\r\n\r\n OnReloadDataFromCC() {\r\n this.reloadActionDialog.ShowDialogShort((state: State) => {\r\n this.messageBoxDialog.Type = EnumMessageBoxTypes.YesNo;\r\n this.messageBoxDialog.Title = this.RC('titleReloadDataForCC');\r\n this.messageBoxDialog.Prompt = this.RC('CCContractReloadQuestion', formatDate(state.Date, this.F.DateFormatLong));\r\n this.messageBoxDialog.ShowDialogShort(() =>\r\n this.Do(this.endpoint.ReloadCCData(this.Entity.EntryID, state.Date), true));\r\n });\r\n }\r\n\r\n override OnInitContextMenus(): ContextMenuElement[] {\r\n if (this.IsAddMode) return undefined;\r\n\r\n const menus: ContextMenuElement[] = [];\r\n\r\n menus.push({\r\n text: this.RC('lblDelete'),\r\n visible: true,\r\n onClick: this.OnDelete.bind(this)\r\n },\r\n {\r\n text: this.RC('btnDownloadUpdatedData'),\r\n visible: true,\r\n onClick: this.OnDownloadRequestedData.bind(this)\r\n },\r\n {\r\n text: this.RC('titleReloadDataForCC'),\r\n visible: true,\r\n onClick: this.OnReloadDataFromCC.bind(this)\r\n });\r\n\r\n return menus;\r\n }\r\n\r\n LoadBankPasses() {\r\n if (!this.Entity.ProcessingCompany) { this.DataSources['BankPasses'] = undefined; return; }\r\n const params = new BankPassListParams();\r\n params.OrganizationID = this.Company?.OrganizationID;\r\n params.CompanyID = this.Entity.CompanyID;\r\n params.ProcessingCompany = this.Entity.ProcessingCompany;\r\n params.LoadGlobal = false;\r\n\r\n this.Do(this.bankPassEndpoint.ListEx(params, undefined), false, (data) => {\r\n if (this.IsAddMode) {\r\n const newBankPass = new BankPassView();\r\n newBankPass.EntryID = -1;\r\n newBankPass.OrganizationID = this.Company.OrganizationID;\r\n newBankPass.Bank = this.Entity.ProcessingCompany as any as EnumBanks;\r\n newBankPass.IsActive = true;\r\n newBankPass.IsConfirmedReadOnly = false;\r\n data.Entities.unshift(newBankPass);\r\n }\r\n this.DataSources['BankPasses'] = data.Entities;\r\n });\r\n }\r\n\r\n GetBankPassDisplayExpr(e: any) {\r\n return e && (e.EntryID === -1 && !e.UserName ? this.RC('lblAddNewBankPass') : (e.FullName ? e.FullName : e.UserName));\r\n }\r\n\r\n public override OnDoSave(): void {\r\n const params = new CCContractsSaveDetailParams();\r\n params.CCContract = this.Entity;\r\n\r\n if (this.SelectedBankPass && this.SelectedBankPass.EntryID < 0) {\r\n params.BankPass = this.SelectedBankPass;\r\n }\r\n else {\r\n params.BankPass = null;\r\n }\r\n this.IsSaving = true;\r\n this.Do(this.endpoint.SaveContractDetails(params), true, () => {\r\n this.RefreshEntityOriginal();\r\n this.ReflectEntitySaved();\r\n }, (response) => {\r\n this.A.UI.StopMessage(response.ResponseMessage);\r\n this.IsSaving = false;\r\n });\r\n }\r\n\r\n GetBookingAccountsDS(e: any) {\r\n return this.BookingAccounts;\r\n }\r\n\r\n GetCurrentRowBookingAcctounts(AccountID, Currency) {\r\n return this.BookingAccounts.filter(ba => ba.AccountID === AccountID && ba.Currency === Currency && ba.Subtype === EnumBookingAccountSubtypes.Current);\r\n }\r\n\r\n\r\n TransfersMapLinesOnEditingStart(e: any) {\r\n this.CurrentRowBookingAccounts = this.GetCurrentRowBookingAcctounts(e.data.AccountID, e.data.Currency);\r\n }\r\n\r\n TransfersMapLinesOnAccountChanged(cellInfo, newValue) {\r\n if (!newValue || cellInfo.data.BookingAccountID && newValue && (newValue !== this.BookingAccounts.find(ba => ba.EntryID === cellInfo.data.BookingAccountID).AccountID)) {\r\n cellInfo.data.BookingAccountID = undefined;\r\n }\r\n\r\n const bookingAccounts = this.GetCurrentRowBookingAcctounts(newValue, cellInfo.data.Currency);\r\n if (newValue && bookingAccounts.length === 1) {\r\n const bookingAccount = bookingAccounts[0];\r\n cellInfo.data.BookingAccountID = bookingAccount.EntryID;\r\n } else {\r\n cellInfo.data.BookingAccountID = undefined;\r\n }\r\n\r\n this.transfersMapGrid.instance.repaintRows([cellInfo.rowIndex]);\r\n }\r\n\r\n TransfersMapLinesOnCurrencyChanged(cellInfo, newValue) {\r\n if (!newValue || cellInfo.data.BookingAccountID && newValue && (newValue !== this.BookingAccounts.find(ba => ba.EntryID === cellInfo.data.BookingAccountID).Currency)) {\r\n cellInfo.data.BookingAccountID = undefined;\r\n this.transfersMapGrid.instance.repaintRows([cellInfo.rowIndex]);\r\n }\r\n }\r\n\r\n OnSelectedBankPassChanged(bankPass: BankPassView) {\r\n const selectedBankPass = this.DataSources['BankPasses'].find(x => x.EntryID === bankPass.EntryID);\r\n selectedBankPass.UserName = bankPass.UserName;\r\n this.bankPassSelectBox && this.bankPassSelectBox.instance && this.bankPassSelectBox.instance.repaint();\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 {{ GetBankPassDisplayExpr(item)}}\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\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 CCInvoiceImage extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'CCInvoiceImage';\r\n }\r\n \r\n public ImageSummary: number[]; \r\n public ImageDetail: number[]; \r\n public InvoiceNumber: string; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCCInvoiceStatuses } from './../enums';\r\nimport { EnumCCInvoiceParseResults } from './../enums';\r\nimport { EnumCCBrands } from './../enums';\r\nimport { CCInvoiceImage } from './../entities/ccinvoiceimage.entity';\r\nexport class CCInvoice extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'CCInvoice';\r\n }\r\n \r\n public DownloadID: number; \r\n public CCContractID: number; \r\n public Currency: string; \r\n public InvoiceNumber: string; \r\n public PostingDate: Date; \r\n public Status: EnumCCInvoiceStatuses; \r\n public ParseResult: EnumCCInvoiceParseResults; \r\n public JournalEntryID: number; \r\n public IsAdjustedManually: boolean; \r\n public Notes: string; \r\n public UserNotes: string; \r\n public SumGross: number; \r\n public SumClubDiscount: number; \r\n public SumCommission: number; \r\n public SumClearingInterest: number; \r\n public SumClubManagementFee: number; \r\n public SumVat: number; \r\n public SumTransfer: number; \r\n public MerchantContractID: number; \r\n public Brand: EnumCCBrands; \r\n public Image: CCInvoiceImage = new CCInvoiceImage; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '../../../../src/base/component/ServiceBag';\r\nimport { BaseGridComponent } from '../../../../src/base/component/BaseGridComponent';\r\nimport { BaseState } from '../../../../src/base/entities/BaseEntities';\r\nimport { BaseDataSourceAbstract } from '@m4u-angular/base/datalayer/BaseDataSourceAbstract';\r\nimport { ContextMenuElement } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { CCInvoice } from '@kraken/_proxy/entities/ccinvoice.entity';\r\n\r\nclass State extends BaseState {\r\n selectedRowKeys: []\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-cc-invoices-processing-grid',\r\n templateUrl: './cc-invoices-processing-grid.component.html'\r\n})\r\nexport class CCInvoicesProcessingGridComponent extends BaseGridComponent\r\n{\r\n constructor(A: ServiceBagService) {\r\n super(A, 'CCInvoicesProcessingGridComponent', CCInvoice, State);\r\n this.BindHandler('OnGoToJournalEntry');\r\n }\r\n\r\n @Output() OnSelectInvoces = new EventEmitter();\r\n\r\n @Input() IsHistory: boolean;\r\n\r\n get Data() {\r\n return (this.DataSource as BaseDataSourceAbstract)?.Data;\r\n }\r\n\r\n\r\n override AfterInit() {\r\n (this.DataSource as BaseDataSourceAbstract).AddEventListener('changed', () => {\r\n ['SumClubDiscount', 'SumCommission', 'SumClearingInterest', 'SumClubManagementFee', 'SumVat', 'SumGross', 'SumTransfer'].forEach(colName => {\r\n this.G.grid.instance.columnOption(colName, 'visible', this.IsSumColumnVisible(colName));\r\n })\r\n });\r\n }\r\n\r\n OnNavigate(e) {\r\n if (e.rowType === 'group') return\r\n this.Navigate([\"/pages/ccinvoice\", e.data.EntryID], { IsReadOnly: this.IsHistory }, false, true);\r\n }\r\n\r\n GetGroupCellCaption(cell) {\r\n const [sortValue, caption] = cell.text.split(';')\r\n return caption ? caption : sortValue\r\n }\r\n\r\n GetProcessingCompanyCaption(value: string) {\r\n return this.LISTITEMX('ProcessingCompanies', value)?.Text;\r\n }\r\n\r\n IsSumColumnVisible(colName: string) {\r\n if (!this.Data) return false\r\n\r\n const rows = (this.Data as any)._items;\r\n const colIndex = this.grid.instance.columnOption(colName, 'index') - 7 // from 7 to 13 => from 0 to 6\r\n\r\n const traverse = (arr, cb) => arr.forEach(el => el.items ? traverse(el.items, cb) : cb(el));\r\n\r\n let isVisible = false\r\n traverse(rows, (row) => {\r\n if (!isVisible) {\r\n const colValue = row.aggregates ? row.aggregates[colIndex] : row[colName]\r\n isVisible = colValue > 0\r\n }\r\n })\r\n\r\n return true // Disable column hiding. Need fix it after enabling dymamic grouping\r\n }\r\n\r\n IsJournalEntryLinkVisible(e: any) {\r\n return !!e?.row?.data?.JournalEntryID;\r\n }\r\n\r\n OnGoToJournalEntry(e: any) {\r\n const { JournalEntryID } = e?.row?.data;\r\n this.Navigate([\"/pages/journal-entry\", JournalEntryID], true, true);\r\n }\r\n\r\n //GetJournalEntryIcon() {\r\n // return this.screenService.IsRTL() ? 'mdi mdi-clipboard-arrow-left-outline' : 'mdi mdi-clipboard-arrow-right-outline';\r\n //}\r\n\r\n OnSelectionChanged({ selectedRowKeys }) {\r\n this.OnSelectInvoces.emit(selectedRowKeys)\r\n }\r\n\r\n protected override GetGridRowContextMenu(options?: any): ContextMenuElement[] {\r\n return [{\r\n text: this.RC('btnJournalEntry'),\r\n visible: this.IsJournalEntryLinkVisible(options),\r\n onClick: () => this.OnGoToJournalEntry(options)\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 {{ GetGroupCellCaption(data) }}\\r\\n
\\r\\n\\r\\n
\\r\\n {{ GetProcessingCompanyCaption(data.value) }}\\r\\n
\\r\\n\\r\\n
\\r\\n {{ cell.value | formatNumberSum }}\\r\\n {{DisplayCurrency || cell.data.Currency | LookupList:LIST('Currencies'):'Symbol' }}\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\";","\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { CCInvoiceView } from './../views/ccinvoice.view';\r\nimport { CCInvoicesParams } from './../params/ccinvoices.param';\r\nimport { CCInvoicePostRequestParams } from './../params/ccinvoicepostrequest.param';\r\n@Injectable()\r\nexport class CCInvoiceEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(api: APIGatewayService) {super(\"CCInvoice\", api);}\r\n\t\r\n\r\n public ListEx(Params: CCInvoicesParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListEx', Params, undefined );\r\n }\r\n\r\n public override Get(CCInvoiceID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'Get', {CCInvoiceID: CCInvoiceID} );\r\n }\r\n\r\n public PostInvoice(Params: CCInvoicePostRequestParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'PostInvoice', Params, undefined );\r\n }\r\n\r\n public PostInvoices(CCInvoicesIds: number[]) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'PostInvoices', {CCInvoicesIds: CCInvoicesIds} );\r\n }\r\n\r\n public Cancel(CCInvoiceID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'Cancel', {CCInvoiceID: CCInvoiceID} );\r\n }\r\n\r\n public SaveCustom(Params: CCInvoicePostRequestParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'SaveCustom', Params, undefined );\r\n }\r\n\r\n public Remove(CCInvoiceID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'Remove', {CCInvoiceID: CCInvoiceID} );\r\n }\r\n}\r\n\r\n","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { CCInvoice } from './../entities/ccinvoice.entity';\r\nimport { EnumCCProcessingCompanies } from './../enums';\r\nimport { CCTransfer } from './../entities/cctransfer.entity';\r\nexport class CCInvoiceView extends CCInvoice\r\n{ \r\n public CompanyName: string; \r\n public ContractMerchantNumber: number; \r\n public ContractName: string; \r\n public ProcessingCompany: EnumCCProcessingCompanies; \r\n public Transfers: CCTransfer[] = []; \r\n public IsExistImageSummary: boolean; \r\n public IsExistImageDetail: boolean; \r\n \r\n}\r\n\r\n\r\n","import { BaseReportComponent, BaseReportState } from '../base-report/base-report.component';\r\nimport { Component, ViewChild } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '../../../../src/base/component/ServiceBag';\r\nimport { CCInvoicesProcessingGridComponent } from './cc-invoices-processing-grid.component';\r\nimport { FilterSettings, FilterValues } from '../../components/filter/filter.component';\r\nimport { CCContractEndpoint } from '../../_proxy/endpoints/cccontract.endpoint';\r\nimport { CCInvoicesParams } from '../../_proxy/params/ccinvoices.param';\r\nimport { CCInvoiceEndpoint } from '../../_proxy/endpoints/ccinvoice.endpoint';\r\nimport { DataSourceCustomAction } from '../../../../src/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '../../../../src/base/datalayer/DataLoadOptions';\r\nimport { ToolbarSettings } from '../../../../src/base/classes/BaseClasses';\r\nimport { Globals } from '../../_globals';\r\nimport { EnumCCBrands, EnumCCInvoiceStatuses, EnumCCProcessingCompanies } from '../../_proxy/enums';\r\nimport { CCContractsParams } from '../../_proxy/params/cccontracts.param';\r\nimport { CCContractView } from '@kraken/_proxy/views/cccontract.view';\r\nimport { MessageBoxDialogComponent } from '@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\nimport { EnumCRUDActions, EnumMessageBoxTypes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { CCInvoice } from '@kraken/_proxy/entities/ccinvoice.entity';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { CCInvoiceView } from '@kraken/_proxy/views/ccinvoice.view';\r\n\r\nclass State extends BaseReportState {\r\n ProcessingCompanies: EnumCCProcessingCompanies[];\r\n CCContracts: number[] = [];\r\n CCContractsList: CCContractView[];\r\n SelectedInvoiceIds = []\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-cc-invoices-processing-list',\r\n templateUrl: './cc-invoices-processing-list.component.html'\r\n})\r\nexport class CCInvoicesProcessingComponent extends BaseReportComponent {\r\n\r\n @ViewChild('reportGrid') reportGrid: CCInvoicesProcessingGridComponent;\r\n @ViewChild('messageBox') messageBoxDialog: MessageBoxDialogComponent;\r\n\r\n constructor(A: ServiceBagService, private ccinvoiceEndpoint: CCInvoiceEndpoint, private cccontractEndpoint: CCContractEndpoint) {\r\n super(A, 'CCInvoicesProcessingComponent', State);\r\n }\r\n\r\n protected override OnGetCustomFilterSettings() {\r\n return {\r\n Company: { IsVisible: true },\r\n IsDatesVisible: true\r\n } as FilterSettings;\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.reportGrid?.G;\r\n\r\n return settings;\r\n }\r\n\r\n protected override OnResetFilterValues() {\r\n this.State.ProcessingCompanies = []\r\n this.State.CCContracts = []\r\n\r\n this.State.FilterValues = {\r\n OrganizationID: Globals.OrganizationID,\r\n Currency: Globals.OrganizationDefaultCurrency || 'ILS',\r\n DateFrom: new Date(new Date().getFullYear(), new Date().getMonth() - 6, new Date().getDate()),\r\n DateTo: Globals.Today\r\n } as FilterValues;\r\n }\r\n\r\n OnFilterValuesChange() {\r\n this.State.CCContracts = []\r\n this.LoadCCContracts()\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n if (ExternalEntityType == CCInvoice || ExternalEntityType == CCInvoiceView) this.OnLoadData();\r\n }\r\n\r\n protected override OnLoadData() {\r\n if (!this.State.FilterValues.OrganizationID) return;\r\n\r\n const params = this.GetParams();\r\n params.ProcessingCompanies = this.State.ProcessingCompanies;\r\n params.CCContracts = this.State.CCContracts;\r\n params.Statuses = [EnumCCInvoiceStatuses.Draft];\r\n \r\n this.DataSources['Invoices'] = new DataSourceCustomAction((options: DataLoadOptions) => this.ccinvoiceEndpoint.ListEx(params), undefined, null, false);\r\n }\r\n\r\n LoadCCContracts() {\r\n if (!this.State.FilterValues.OrganizationID || !this.State.ProcessingCompanies) return;\r\n\r\n const params = new CCContractsParams;\r\n params.OrganizationID = Globals.OrganizationID;\r\n params.Companies = this.State.FilterValues.Company ? [this.State.FilterValues.Company as number] : [];\r\n\r\n this.Do(this.cccontractEndpoint.ListEx(params), false, (response) => {\r\n \r\n if (this.State.ProcessingCompanies?.length > 0) {\r\n this.State.CCContractsList = response.Entities.filter(contract => this.State.ProcessingCompanies.some(company => company === contract.ProcessingCompany))\r\n } else {\r\n this.State.CCContractsList = response.Entities;\r\n }\r\n });\r\n }\r\n\r\n OnSelectInvoces(ids) {\r\n this.State.SelectedInvoiceIds = ids\r\n }\r\n\r\n OnSave() {\r\n this.messageBoxDialog.Type = EnumMessageBoxTypes.YesNo;\r\n this.messageBoxDialog.Title = this.RC('titleUpdateAllInvoices');\r\n this.messageBoxDialog.Prompt = this.RC('msgUpdateAllInvoices', this.State.SelectedInvoiceIds.length);\r\n this.messageBoxDialog.ShowDialogShort(() => {\r\n this.Do(this.ccinvoiceEndpoint.PostInvoices(this.State.SelectedInvoiceIds), true, () => {\r\n this.OnLoadData();\r\n this.ClosePage();\r\n })\r\n },\r\n () => {\r\n this.ClosePage();\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\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { CCInvoiceImage } from './../entities/ccinvoiceimage.entity';\r\n@Injectable()\r\nexport class CCInvoiceImageEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(api: APIGatewayService) {super(\"CCInvoiceImage\", api);}\r\n\t\r\n}\r\n\r\n","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { CCInvoice } from './../entities/ccinvoice.entity';\r\nimport { CCTransfer } from './../entities/cctransfer.entity';\r\nexport class CCInvoicePostRequestParams extends BaseEntity\r\n{ \r\n public Invoice: CCInvoice = new CCInvoice; \r\n public Transfers: CCTransfer[] = []; \r\n public DeleteTransfersIds: number[]; \r\n \r\n}\r\n\r\n\r\n","import { memoize } from \"lodash\"\r\n\r\ninterface ValidationResult {\r\n isValid: boolean;\r\n data: any\r\n}\r\n\r\nfunction floatStrip(number) {\r\n return (parseFloat(number.toPrecision(12)));\r\n}\r\n\r\nexport class Validator {\r\n Entity: any\r\n vatFee: number = 0\r\n\r\n RC: any\r\n\r\n private isDisabled: boolean = true;\r\n\r\n disable() {\r\n this.isDisabled = true\r\n }\r\n\r\n enable() {\r\n this.isDisabled = false\r\n }\r\n\r\n GetSumForField = (data, field) => {\r\n if (Array.isArray(data)) {\r\n return floatStrip(data.reduce((sum, item) => sum + (item[field] || 0), 0))\r\n }\r\n\r\n return floatStrip(data[field])\r\n }\r\n\r\n CalculateSumTransfer(data) {\r\n const fieldsToCalcExpences = ['SumClubDiscount', 'SumCommission', 'SumClearingInterest', 'SumClubManagementFee', 'SumVat']\r\n const expencesSum = fieldsToCalcExpences.reduce((sum, field) => sum + (data[field] || 0), 0)\r\n\r\n return floatStrip(data.SumGross - expencesSum)\r\n }\r\n\r\n TransferValidation = ({ data, value, rule }) => {\r\n if (this.isDisabled) return true\r\n\r\n const dataWithFieldValue = { ...data, SumTransfer: value }\r\n const result = this.IsTransferSumEquals(dataWithFieldValue)\r\n if (!result.isValid) {\r\n rule.message = this.GetSumTransferErrorMessage(result.data.SumTransfer)\r\n return false\r\n }\r\n\r\n return true\r\n }\r\n\r\n GetSumTransferErrorMessage(value) {\r\n return this.RC('errorSumTransfer', value)\r\n }\r\n\r\n IsTransferSumEquals = (data): ValidationResult => {\r\n const sum = this.CalculateSumTransfer(data)\r\n\r\n return {\r\n isValid: data.SumTransfer === sum,\r\n data: {\r\n SumTransfer: sum\r\n }\r\n }\r\n }\r\n\r\n IsTransfersSumEqualsInvoiceSum = (field: string): ValidationResult => {\r\n const transfersSum = this.GetSumForField(this.Entity.Transfers, field)\r\n const invoiceSum = this.GetSumForField(this.Entity, field)\r\n\r\n return {\r\n isValid: transfersSum === invoiceSum,\r\n data: {\r\n sum: transfersSum\r\n }\r\n }\r\n }\r\n\r\n CreateInvoiceSumValidator = memoize((field: string) => {\r\n return ({ rule }) => {\r\n if (this.isDisabled) return true\r\n\r\n let result = this.IsTransfersSumEqualsInvoiceSum(field)\r\n if (!result.isValid) {\r\n rule.message = this.RC('errorSumTransfersList', result.data.sum)\r\n return false\r\n }\r\n\r\n return true\r\n }\r\n })\r\n\r\n CreateSumValidator = memoize((field: string) => {\r\n return ({ data, value, rule }) => {\r\n if (this.isDisabled) return true\r\n\r\n const dataWithFieldValue = { ...data, [field]: value }\r\n const result = this.IsTransferSumEquals(dataWithFieldValue)\r\n\r\n if (!result.isValid) {\r\n rule.message = this.GetSumTransferErrorMessage(result.data.SumTransfer)\r\n return false\r\n }\r\n\r\n return true\r\n }\r\n })\r\n}","export type ItemDetails = {\r\n Label: string;\r\n Value?: string;\r\n Class?: string;\r\n Icon?: string\r\n};\r\n\r\nexport interface ReportNestedListItem {\r\n items?: ReportNestedListItem[],\r\n expanded?: boolean,\r\n ItemID: any,\r\n\r\n Depth?: number,\r\n Icon?: string,\r\n Title: string | number,\r\n Notes?: string | number | {\r\n Text: string,\r\n LabelType: LabelType\r\n },\r\n Notes2?: string,\r\n Amount?: string | number,\r\n AdditionalAmount?: string | number,\r\n AdditionalCurrencySymbol?: string,\r\n CurrencySymbol?: string\r\n Class?: string;\r\n RightIcon?: string;\r\n}\r\n\r\nexport type BalanceByCompany = {\r\n text: string;\r\n id: number;\r\n items: ReportNestedListItem[];\r\n};\r\n\r\nexport enum LabelType {\r\n Info,\r\n Warning,\r\n Error\r\n}","import { Component, ViewChild } from \"@angular/core\";\r\nimport { CCInvoiceEndpoint } from \"@kraken/_proxy/endpoints/ccinvoice.endpoint\";\r\nimport { CCInvoiceImageEndpoint } from \"@kraken/_proxy/endpoints/ccinvoiceimage.endpoint\";\r\nimport { EnumCCInvoiceStatuses, EnumSystemOptionsZ } from \"@kraken/_proxy/enums\";\r\nimport { CCInvoicePostRequestParams } from \"@kraken/_proxy/params/ccinvoicepostrequest.param\";\r\nimport { CCInvoiceView } from \"@kraken/_proxy/views/ccinvoice.view\";\r\nimport { ContextMenuElement, ToolbarSettings } 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 { BaseState } from \"@m4u-angular/base/entities/BaseEntities\";\r\nimport { ScreenService } from \"@m4u-angular/core/framework/screen.service\";\r\nimport { EnumCRUDActions, EnumMessageBoxTypes, EnumPageDisplayModes } from \"@m4u-angular/core/framework/sysenums.enum\";\r\nimport { SystemOptionsService } from \"@m4u-angular/core/framework/system-options.service\";\r\nimport { MessageBoxDialogComponent } from \"@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component\";\r\nimport { PreviewDialogComponent } from \"@m4u-angular/ui/dialogs/preview-dialog/previewdialog.component\";\r\nimport { DxValidationGroupComponent } from \"devextreme-angular/ui/validation-group\";\r\nimport { Column } from 'devextreme/ui/data_grid';\r\nimport { CCInvoiceTransfersGridComponent } from \"./cc-invoice-transfers-grid.component\";\r\nimport { Validator } from './Validator';\r\n\r\n\r\nclass State extends BaseState {\r\n IsReadOnly = false;\r\n Transfers = [];\r\n IsDetailPreviewVisible: boolean;\r\n IsSummaryPreviewVisible: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-ccinvoice',\r\n templateUrl: './cc-invoice.component.html',\r\n styleUrls: ['./cc-invoice.component.scss']\r\n})\r\nexport class CCInvoiceComponent extends BasePageCRUDComponent\r\n{\r\n @ViewChild('messageBox') messageBoxDialog: MessageBoxDialogComponent;\r\n @ViewChild('validationGroup') validationGroup: DxValidationGroupComponent;\r\n validator: Validator;\r\n\r\n constructor(A: ServiceBagService, endpoint: CCInvoiceEndpoint, private screenService: ScreenService, private systemOptionsService: SystemOptionsService, private imageEndpoint: CCInvoiceImageEndpoint) {\r\n super(A, 'CCInvoiceComponent', CCInvoiceView, State, endpoint, EnumPageDisplayModes.Window);\r\n //this.BindHandler(\"OnGoToJournalEntry\");\r\n this.validator = new Validator()\r\n this.validator.Entity = this.Entity\r\n this.validator.RC = this.RC.bind(this)\r\n }\r\n\r\n @ViewChild('reportGrid') reportGrid: CCInvoiceTransfersGridComponent;\r\n @ViewChild('previewDialog') previewDialog: PreviewDialogComponent;\r\n\r\n get IsTransfersEditable() {\r\n return this.Entity.Status === EnumCCInvoiceStatuses.Draft && !this.State.IsReadOnly\r\n }\r\n\r\n get TotalVendor() {\r\n return this.Entity.SumVat + this.Entity.SumCommission;\r\n }\r\n\r\n protected override OnInitTitle() {\r\n return `${this.GetDefaultTitle()} - ${this.Entity?.InvoiceNumber}`;\r\n }\r\n\r\n override async OnInitComponent() {\r\n this.InitStateFromQuery();\r\n const vatFee = await this.systemOptionsService.getSystemOption(EnumSystemOptionsZ.VatValue)\r\n this.validator.vatFee = +vatFee / 100\r\n }\r\n\r\n override OnEntityLoaded(): void {\r\n this.validator.Entity = this.Entity\r\n this.State.Transfers = [...this.Entity.Transfers]\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n const settings = new ToolbarSettings;\r\n settings.GridExtender = this.reportGrid?.G;\r\n\r\n return settings;\r\n }\r\n\r\n IsFieldVisible(field) {\r\n return this.validator.GetSumForField(this.Entity.Transfers, field) > 0 || this.Entity[field] > 0\r\n }\r\n\r\n async Validate() {\r\n let isValid = true\r\n\r\n if (!(await this.reportGrid.Validate())) {\r\n isValid = false\r\n }\r\n\r\n const result = this.validationGroup.instance.validate()\r\n if (!result.isValid) {\r\n isValid = false\r\n }\r\n\r\n return isValid\r\n }\r\n\r\n\r\n\r\n //ContractSuffixButton = {\r\n // icon: 'link',\r\n // stylingMode: \"text\",\r\n // disabled: false,\r\n // onClick: () => {\r\n // this.Navigate(['/pages/cccontract', this.Entity.CCContractID])\r\n // }\r\n //}\r\n\r\n async RequestIfValid() {\r\n this.validator.enable()\r\n const isValid = await this.Validate()\r\n\r\n if (!isValid) {\r\n this.UI.StopMessage(this.RC('msgPleaseRecheckYourInvoiceData'))\r\n this.validator.disable()\r\n throw new Error()\r\n }\r\n\r\n return this.CreateRequest()\r\n }\r\n\r\n CreateRequest() {\r\n const request = new CCInvoicePostRequestParams();\r\n\r\n request.Transfers = this.Entity.Transfers.map(transfer => ({ ...transfer, EntryID: transfer.EntryID || -1 }))\r\n request.Invoice = this.Entity\r\n request.DeleteTransfersIds = this.State.Transfers.filter(transfer => !this.Entity.Transfers.some(t => t.EntryID === transfer.EntryID)).map(t => t.EntryID)\r\n\r\n return request\r\n }\r\n\r\n OnClickPost() {\r\n this.reportGrid.G.AcceptChanges()\r\n this.RequestIfValid()\r\n .then(request => {\r\n this.messageBoxDialog.Type = EnumMessageBoxTypes.YesNo;\r\n this.messageBoxDialog.Title = this.RC('titlePostInvoice');\r\n this.messageBoxDialog.Prompt = this.RC('msgPostInvoceConfirmation');\r\n this.messageBoxDialog.ShowDialogShort(() => {\r\n this.IsSaving = true\r\n this.SetEntity(this.EntityType, this.Endpoint.PostInvoice(request), true, () => {\r\n this.IsSaving = false\r\n this.ClosePage();\r\n this.NotifyEntitySaved(this.Entity, this.EntityType, EnumCRUDActions.Update);\r\n }, (e) => {\r\n this.UI.StopMessage(e.ResponseMessage)\r\n this.IsSaving = false\r\n });\r\n },\r\n () => {\r\n this.ClosePage();\r\n }\r\n );\r\n })\r\n .catch(e => e)\r\n }\r\n\r\n OnClickSave() {\r\n this.reportGrid.G.AcceptChanges()\r\n this.IsSaving = true\r\n const request = this.CreateRequest()\r\n this.SetEntity(this.EntityType, this.Endpoint.SaveCustom(request), true, () => {\r\n this.IsSaving = false;\r\n this.ClosePage();\r\n this.NotifyEntitySaved(this.Entity, this.EntityType, EnumCRUDActions.Update);\r\n });\r\n }\r\n\r\n override OnInitContextMenus(): ContextMenuElement[] {\r\n const menus: ContextMenuElement[] =\r\n [\r\n {\r\n text: this.RC('btnCancel'),\r\n visible: this.Entity.Status == EnumCCInvoiceStatuses.Posted,\r\n onClick: this.OnCancel.bind(this)\r\n },\r\n {\r\n text: this.RC('titleDelete'),\r\n visible: this.Entity.Status == EnumCCInvoiceStatuses.Draft,\r\n onClick: this.OnRemove.bind(this)\r\n },\r\n {\r\n text: this.RC('lblShowHiddenColumns'),\r\n icon: ' mdi mdi-eye',\r\n onClick: () => {\r\n const instance = this.reportGrid.GetGridInstance()\r\n const columns = this.reportGrid.GetColumns();\r\n\r\n columns.forEach((c: any) => {\r\n if (!c.groupCellTemplate) instance.columnOption(c.dataField, 'visible', true)\r\n });\r\n instance.refresh();\r\n }\r\n }\r\n ];\r\n\r\n return menus;\r\n }\r\n\r\n protected OnCancel() {\r\n this.messageBoxDialog.Type = EnumMessageBoxTypes.YesNo;\r\n this.messageBoxDialog.Title = this.RC('titleCancelInvoice');\r\n this.messageBoxDialog.Prompt = this.RC('msgUpdateInvoceConfirmation');\r\n this.messageBoxDialog.ShowDialogShort(() => {\r\n this.SetEntity(this.EntityType, this.Endpoint.Cancel(this.Entity.EntryID), true, () => {\r\n this.ClosePage();\r\n this.NotifyEntitySaved(this.Entity, this.EntityType, EnumCRUDActions.Update);\r\n });\r\n },\r\n () => {\r\n this.ClosePage();\r\n }\r\n );\r\n }\r\n\r\n protected OnRemove() {\r\n this.messageBoxDialog.Type = EnumMessageBoxTypes.YesNo;\r\n this.messageBoxDialog.Title = this.RC('titleRemoveInvoice');\r\n this.messageBoxDialog.Prompt = this.RC('msgRemoveInvoiceConfirmation');\r\n this.messageBoxDialog.ShowDialogShort(() => {\r\n this.SetEntity(this.EntityType, this.Endpoint.Remove(this.Entity.EntryID), true, () => {\r\n this.ClosePage();\r\n this.NotifyEntitySaved(this.Entity, this.EntityType, EnumCRUDActions.Update);\r\n });\r\n },\r\n () => {\r\n this.ClosePage();\r\n }\r\n );\r\n }\r\n\r\n get IsDraft() {\r\n return this.Entity.Status === EnumCCInvoiceStatuses.Draft;\r\n }\r\n\r\n InitStateFromQuery() {\r\n if (Object.entries(this.QueryParams).length <= 0) return;\r\n if (this.QueryParams.IsReadOnly) this.State.IsReadOnly = this.QueryParams.IsReadOnly;\r\n }\r\n\r\n\r\n //OnGoToJournalEntry() {\r\n // const { JournalEntryID } = this.Entity\r\n // this.Navigate([\"/pages/journal-entry\", JournalEntryID], true, true);\r\n //}\r\n\r\n GetJournalEntryIcon() {\r\n return this.screenService.IsRTL() ? 'mdi mdi-clipboard-arrow-left-outline' : 'mdi mdi-clipboard-arrow-right-outline';\r\n }\r\n\r\n OnClickShowDetail() {\r\n // Hide summary preview if opened\r\n if (this.State.IsSummaryPreviewVisible) {\r\n this.State.IsSummaryPreviewVisible = false;\r\n this.HidePreview();\r\n }\r\n\r\n // Toggle details preview state\r\n this.State.IsDetailPreviewVisible = !this.State.IsDetailPreviewVisible;\r\n\r\n // Hide details preview state if opened and open if hidden\r\n if (!this.State.IsDetailPreviewVisible) {\r\n this.HidePreview();\r\n return;\r\n } else {\r\n this.Do(this.imageEndpoint.Get(this.Entity.EntryID), false, (response) => {\r\n const previewData = response.Entity.ImageDetail.toString();\r\n const previewFileName = response.Entity.InvoiceNumber;\r\n this.ShowPreview(previewData, previewFileName);\r\n });\r\n }\r\n }\r\n\r\n OnClickShowSummary() {\r\n // Hide summary preview if opened\r\n if (this.State.IsDetailPreviewVisible) {\r\n this.State.IsDetailPreviewVisible = false;\r\n this.HidePreview();\r\n }\r\n\r\n // Toggle summary preview state\r\n this.State.IsSummaryPreviewVisible = !this.State.IsSummaryPreviewVisible;\r\n\r\n // Hide summery preview state if opened and open if hidden\r\n if (!this.State.IsSummaryPreviewVisible) {\r\n this.HidePreview();\r\n return;\r\n } else {\r\n this.Do(this.imageEndpoint.Get(this.Entity.EntryID), false, (response) => {\r\n const previewData = response.Entity.ImageSummary.toString();\r\n const previewFileName = response.Entity.InvoiceNumber;\r\n this.ShowPreview(previewData, previewFileName);\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\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCCBrands } from './../enums';\r\nimport { EnumCCTransferStatuses } from './../enums';\r\nexport class CCTransfer extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'CCTransfer';\r\n }\r\n \r\n public DownloadID: number; \r\n public ContractID: number; \r\n public Currency: string; \r\n public Brand: EnumCCBrands; \r\n public CCInvoiceID: number; \r\n public TransferDate: Date; \r\n public JournalEntryID: number; \r\n public Status: EnumCCTransferStatuses; \r\n public SumGross: number; \r\n public SumClubDiscount: number; \r\n public SumCommission: number; \r\n public SumClearingInterest: number; \r\n public SumClubManagementFee: number; \r\n public SumVat: number; \r\n public SumTransfer: number; \r\n public BalanceDate: Date; \r\n public Comment: string; \r\n public InvoiceNumber: string; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '../../../../src/base/component/ServiceBag';\r\nimport { BaseGridComponent } from '../../../../src/base/component/BaseGridComponent';\r\nimport { BaseState } from '../../../../src/base/entities/BaseEntities';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { SystemOptionsService } from '@m4u-angular/core/framework/system-options.service';\r\nimport { EnumSystemOptionsZ } from '@kraken/_proxy/enums';\r\nimport { Validator } from \"./Validator\";\r\nimport { AppInjector } from '@m4u-angular/core/injector/injector.module';\r\nimport dxDataGrid from 'devextreme/ui/data_grid';\r\nimport { ContextMenuElement } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { CCTransfer } from '@kraken/_proxy/entities/cctransfer.entity';\r\n\r\nclass State extends BaseState { }\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-cc-invoice-transfers-grid',\r\n templateUrl: './cc-invoice-transfers-grid.component.html'\r\n})\r\nexport class CCInvoiceTransfersGridComponent extends BaseGridComponent\r\n{\r\n validator: Validator;\r\n\r\n constructor(A: ServiceBagService, private screenService: ScreenService, private systemOptionsService: SystemOptionsService,) {\r\n super(A, 'CCInvoiceTransfersGridComponent', CCTransfer, State);\r\n this.BindHandler(\"OnGoToJournalEntry\");\r\n this.validator = new Validator()\r\n this.validator.RC = this.RC.bind(this)\r\n }\r\n\r\n @Input() IsEditable: boolean;\r\n @Input() Currency: string;\r\n @Input() set Transfers(arr) {\r\n arr.forEach(transfer => {\r\n this.changes.push({\r\n data: {},\r\n key: transfer,\r\n type: 'update'\r\n })\r\n })\r\n };\r\n\r\n changes = []\r\n\r\n override async OnInitComponent() {\r\n const vatFee = await this.systemOptionsService.getSystemOption(EnumSystemOptionsZ.VatValue)\r\n this.validator.vatFee = +vatFee / 100\r\n }\r\n\r\n public Validate() {\r\n const validationgCtrl = (this.grid.instance as any).getController(\"validating\")\r\n return validationgCtrl.validate(true)\r\n }\r\n\r\n GetGridInstance() {\r\n return this.grid.instance as dxDataGrid\r\n }\r\n\r\n GetColumns() {\r\n return this.GetGridInstance().option(\"columns\")\r\n }\r\n\r\n GetGroupCellCaption(value: string) {\r\n if (typeof value !== 'string') return\r\n\r\n const [sortValue, caption] = value.split(';')\r\n\r\n return caption ? caption : sortValue\r\n }\r\n\r\n IsSumColumnVisible(colName: string) {\r\n if (!this.DataSource) return false\r\n\r\n const rows = this.DataSource\r\n const traverse = (arr, cb) => arr.forEach(el => el.items ? traverse(el.items, cb) : cb(el));\r\n\r\n let isVisible = false\r\n traverse(rows, (row) => {\r\n if (!isVisible) {\r\n isVisible = row[colName] > 0\r\n }\r\n })\r\n\r\n return true\r\n }\r\n\r\n IsJournalEntryLinkVisible(e: any) {\r\n return !!e?.row?.data?.JournalEntryID;\r\n }\r\n\r\n OnGoToJournalEntry(e: any) {\r\n const { JournalEntryID } = e?.row?.data;\r\n this.Navigate([\"/pages/journal-entry\", JournalEntryID], true, true);\r\n }\r\n\r\n //GetJournalEntryIcon() {\r\n // return this.screenService.IsRTL() ? 'mdi mdi-clipboard-arrow-left-outline' : 'mdi mdi-clipboard-arrow-right-outline';\r\n //}\r\n\r\n OnRowInserting({ data }) {\r\n if (!data) return\r\n data.Currency = this.Currency\r\n }\r\n\r\n protected override GetGridRowContextMenu(options?: any): ContextMenuElement[] {\r\n return [{\r\n text: this.RC('btnJournalEntry'),\r\n visible: this.IsJournalEntryLinkVisible(options),\r\n onClick: () => this.OnGoToJournalEntry(options)\r\n }, {\r\n text: this.RC('titleDelete'),\r\n onClick: () => this.G.RemoveCurrentRow(options)\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 {{ GetGroupCellCaption(data.value) }}\\r\\n
\\r\\n\\r\\n
\\r\\n {{ cell.value | formatNumberSum }}\\r\\n {{DisplayCurrency || cell.data.Currency | LookupList:LIST('Currencies'):'Symbol' }}\\r\\n
\\r\\n
\";","import { BaseReportComponent, BaseReportState } from '../base-report/base-report.component';\r\nimport { Component, ViewChild } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '../../../../src/base/component/ServiceBag';\r\nimport { FilterSettings, FilterValues } from '../../components/filter/filter.component';\r\nimport { CCContractEndpoint } from '../../_proxy/endpoints/cccontract.endpoint';\r\nimport { CCInvoicesParams } from '../../_proxy/params/ccinvoices.param';\r\nimport { CCInvoiceEndpoint } from '../../_proxy/endpoints/ccinvoice.endpoint';\r\nimport { DataSourceCustomAction } from '../../../../src/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '../../../../src/base/datalayer/DataLoadOptions';\r\nimport { ToolbarSettings } from '../../../../src/base/classes/BaseClasses';\r\nimport { Globals } from '../../_globals';\r\nimport { EnumCCBrands, EnumCCInvoiceStatuses, EnumCCProcessingCompanies } from '../../_proxy/enums';\r\nimport { CCContractsParams } from '../../_proxy/params/cccontracts.param';\r\nimport { CCInvoicesProcessingGridComponent } from '../cc-invoices-processing';\r\nimport { CCContractView } from '@kraken/_proxy/views/cccontract.view';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { CCInvoice } from '@kraken/_proxy/entities/ccinvoice.entity';\r\nimport { CCInvoiceView } from '@kraken/_proxy/views/ccinvoice.view';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\nexport class State extends BaseReportState {\r\n ProcessingCompanies: EnumCCProcessingCompanies[];\r\n CCContracts: number[] = [];\r\n CCContractsList: CCContractView[]\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-cc-invoices-history',\r\n templateUrl: './cc-invoices-history-list.component.html'\r\n})\r\nexport class CCInvoicesHistoryComponent extends BaseReportComponent {\r\n\r\n @ViewChild('reportGrid') reportGrid: CCInvoicesProcessingGridComponent;\r\n\r\n constructor(A: ServiceBagService, private ccinvoiceEndpoint: CCInvoiceEndpoint, private cccontractEndpoint: CCContractEndpoint) {\r\n super(A, 'CCInvoicesHistoryComponent', State);\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n if (ExternalEntityType == CCInvoice || ExternalEntityType == CCInvoiceView) this.OnLoadData();\r\n }\r\n\r\n\r\n protected override OnGetCustomFilterSettings() {\r\n return {\r\n Company: { IsVisible: true },\r\n IsDatesVisible: true\r\n } as FilterSettings;\r\n }\r\n\r\n protected override OnResetFilterValues() {\r\n this.State.ProcessingCompanies = []\r\n this.State.CCContracts = []\r\n this.State.FilterValues = {\r\n OrganizationID: Globals.OrganizationID,\r\n Currency: Globals.OrganizationDefaultCurrency || 'ILS',\r\n DateFrom: new Date(new Date().getFullYear(), new Date().getMonth() - 6, new Date().getDate()),\r\n DateTo: Globals.Today\r\n } as FilterValues;\r\n }\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.reportGrid?.G;\r\n\r\n return settings;\r\n }\r\n\r\n override OnLoadData() {\r\n if (!this.State.FilterValues.OrganizationID) return;\r\n const params = this.GetParams();\r\n params.ProcessingCompanies = this.State.ProcessingCompanies;\r\n params.CCContracts = this.State.CCContracts;\r\n params.Statuses = [EnumCCInvoiceStatuses.Posted];\r\n\r\n this.DataSources['Invoices'] = new DataSourceCustomAction((options: DataLoadOptions) => this.ccinvoiceEndpoint.ListEx(params));\r\n }\r\n\r\n OnFilterValuesChange() {\r\n this.State.CCContracts = []\r\n this.LoadCCContracts()\r\n }\r\n\r\n\r\n LoadCCContracts() {\r\n if (!this.State.FilterValues.OrganizationID || !this.State.ProcessingCompanies) return;\r\n\r\n const params = new CCContractsParams;\r\n params.OrganizationID = Globals.OrganizationID;\r\n params.Companies = this.State.FilterValues.Company ? [this.State.FilterValues.Company as number] : [];\r\n\r\n this.Do(this.cccontractEndpoint.ListEx(params), false, (response) => {\r\n this.State.CCContractsList = response.Entities.filter(contract => this.State.ProcessingCompanies.some(company => company === contract.ProcessingCompany))\r\n });\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { CCTransferView } from './../views/cctransfer.view';\r\nimport { CCTransfersParams } from './../params/cctransfers.param';\r\n@Injectable()\r\nexport class CCTransferEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(api: APIGatewayService) {super(\"CCTransfer\", api);}\r\n\t\r\n\r\n public ListEx(Params: CCTransfersParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListEx', Params, undefined );\r\n }\r\n\r\n public override Get(EntryID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'Get', {EntryID: EntryID} );\r\n }\r\n}\r\n\r\n","import { BaseReportComponent, BaseReportState } from '../base-report/base-report.component';\r\nimport { Component, ViewChild } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '../../../../src/base/component/ServiceBag';\r\nimport { FilterSettings, FilterValues } from '../../components/filter/filter.component';\r\nimport { CCContractEndpoint } from '../../_proxy/endpoints/cccontract.endpoint';\r\nimport { CCTransfersParams } from '../../_proxy/params/cctransfers.param';\r\nimport { CCTransferEndpoint } from '../../_proxy/endpoints/cctransfer.endpoint';\r\nimport { DataSourceCustomAction } from '../../../../src/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '../../../../src/base/datalayer/DataLoadOptions';\r\nimport { ToolbarSettings } from '../../../../src/base/classes/BaseClasses';\r\nimport { Globals } from '../../_globals';\r\nimport { EnumCCBrands, EnumCCProcessingCompanies, EnumCCTransferStatuses } from '../../_proxy/enums';\r\nimport { CCTransferReportGridComponent } from './grid/cctransfers-report-grid.component';\r\nimport { CCContractsParams } from '@kraken/_proxy/params/cccontracts.param';\r\nimport { CCContractView } from '@kraken/_proxy/views/cccontract.view';\r\nexport class State extends BaseReportState {\r\n ProcessingCompanies: EnumCCProcessingCompanies[] = [];\r\n Brands: EnumCCBrands[] = [];\r\n CCContracts: number[] = [];\r\n PastInvoices: boolean;\r\n FutureInvoices: boolean;\r\n CCContractsList: CCContractView[];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-cctransfers-report',\r\n templateUrl: './cctransfers-report.component.html'\r\n})\r\nexport class CCTransfersReportComponent extends BaseReportComponent {\r\n\r\n @ViewChild('reportGrid') reportGrid: CCTransferReportGridComponent;\r\n\r\n constructor(A: ServiceBagService, private cctransferEndpoint: CCTransferEndpoint, private cccontractEndpoint: CCContractEndpoint) {\r\n super(A, 'CCTransfersReportComponent', State);\r\n }\r\n\r\n protected override OnGetCustomFilterSettings() {\r\n return {\r\n Company: { IsVisible: true },\r\n IsDatesVisible: true,\r\n MaxReportDate: undefined\r\n } as FilterSettings;\r\n }\r\n\r\n OnFilterValuesChange() {\r\n this.State.CCContracts = []\r\n this.LoadCCContracts()\r\n }\r\n\r\n protected override OnApplyFilter(): void {\r\n this.OnLoadData()\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.reportGrid?.G;\r\n\r\n return settings;\r\n }\r\n\r\n protected override OnResetFilterValues(): void {\r\n super.OnResetFilterValues();\r\n\r\n this.State.ProcessingCompanies = this.State.Brands = this.State.CCContracts = [];\r\n this.State.PastInvoices = true\r\n this.State.FutureInvoices = true\r\n this.State.FilterValues.DateFrom = new Date(Globals.Today.getFullYear(), Globals.Today.getMonth() - 6, Globals.Today.getDate());\r\n this.State.FilterValues.DateTo = new Date(Globals.Today.getFullYear() + 1, Globals.Today.getMonth(), Globals.Today.getDate());\r\n }\r\n\r\n LoadCCContracts() {\r\n if (!this.State.FilterValues.OrganizationID) return;\r\n\r\n const params = new CCContractsParams;\r\n params.OrganizationID = Globals.OrganizationID;\r\n params.Companies = this.State.FilterValues.Company ? [this.State.FilterValues.Company as number] : [];\r\n\r\n this.Do(this.cccontractEndpoint.ListEx(params), false, (response) => {\r\n this.State.CCContractsList = response.Entities;\r\n if (this.State.ProcessingCompanies?.length > 0) { \r\n this.State.CCContractsList = this.State.CCContractsList.filter(contract => this.State.ProcessingCompanies.some(company => company === contract.ProcessingCompany));\r\n }\r\n });\r\n }\r\n\r\n override OnLoadData() {\r\n if (!this.State.FilterValues.OrganizationID) {\r\n this.DataSources['Transfers'] = []\r\n return\r\n };\r\n\r\n const params = this.GetParams();\r\n params.ProcessingCompanies = this.State.ProcessingCompanies;\r\n params.Brands = this.State.Brands;\r\n params.CCContracts = this.State.CCContracts;\r\n \r\n const statuses = [];\r\n\r\n if (this.State.PastInvoices) {\r\n statuses.push(EnumCCTransferStatuses.Actual, EnumCCTransferStatuses.Invoiced);\r\n }\r\n\r\n if (this.State.FutureInvoices) {\r\n statuses.push(EnumCCTransferStatuses.Future);\r\n }\r\n\r\n params.Statuses = statuses;\r\n this.DataSources['Transfers'] = new DataSourceCustomAction((options: DataLoadOptions) => this.cctransferEndpoint.ListEx(params));\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\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 { CCTransfer } from '@kraken/_proxy/entities/cctransfer.entity';\r\nimport { EnumCCTransferStatuses } from '@kraken/_proxy/enums';\r\nimport { MonthGroupColumnDirective } from '@kraken/directives';\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 { BaseDataSourceAbstract } from '@m4u-angular/base/datalayer/BaseDataSourceAbstract';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\n\r\nexport class State extends BaseState { }\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-cctransfer-report-grid',\r\n templateUrl: './cctransfers-report-grid.component.html'\r\n})\r\nexport class CCTransferReportGridComponent extends BaseGridComponent {\r\n constructor(A: ServiceBagService) {\r\n super(A, 'CCTransferReportGridComponent', CCTransfer, State);\r\n }\r\n\r\n get Data() {\r\n return (this.DataSource as BaseDataSourceAbstract)?.Data;\r\n }\r\n\r\n override AfterInit() {\r\n if (this.DataSource instanceof BaseDataSourceAbstract) {\r\n this.DataSource.AddEventListener('changed', () => {\r\n ['SumClubDiscount', 'SumCommission', 'SumClearingInterest', 'SumClubManagementFee', 'SumVat', 'SumGross', 'SumTransfer'].forEach(colName => {\r\n this.G.grid.instance.columnOption(colName, 'visible', this.IsSumColumnVisible(colName));\r\n });\r\n });\r\n }\r\n }\r\n\r\n CalculateContractGroup(rowData) {\r\n return rowData.ContractName ?? rowData.ContractMerchantNumber;\r\n }\r\n\r\n GetStatusColor(status: EnumCCTransferStatuses) {\r\n switch (status) {\r\n case EnumCCTransferStatuses.Invoiced:\r\n return '#0fbe7b';\r\n case EnumCCTransferStatuses.Future:\r\n return '#7888e5';\r\n case EnumCCTransferStatuses.Actual:\r\n return '#917700';\r\n }\r\n }\r\n\r\n\r\n IsSumColumnVisible(colName: string) {\r\n if (!this.Data) return false;\r\n const rows = (this.Data as any)._items;\r\n const colIndex = this.grid.instance.columnOption(colName, 'index'); // from 8 to 12\r\n\r\n let isVisible = false;\r\n rows.forEach(row => {\r\n const colValue = row.aggregates ? row.aggregates[colIndex - 8] : row[colName];\r\n\r\n if (!isVisible) {\r\n isVisible = colValue > 0;\r\n }\r\n });\r\n\r\n return true;\r\n }\r\n\r\n IsJournalEntryLinkVisible(e: any) {\r\n return !!e?.row?.data?.JournalEntryID;\r\n }\r\n\r\n IsInvoiceLinkVisible(e: any) {\r\n return !!e?.row?.data?.CCInvoiceID;\r\n }\r\n\r\n //GetJournalEntryIcon() {\r\n // return this.screenService.IsRTL() ? 'mdi mdi-clipboard-arrow-left-outline' : 'mdi mdi-clipboard-arrow-right-outline';\r\n //}\r\n\r\n OnGoToJournalEntry = (e: any) => {\r\n e?.event?.preventDefault();\r\n\r\n const { JournalEntryID } = e?.row?.data;\r\n this.Navigate(['/pages/journal-entry', JournalEntryID], true, true);\r\n };\r\n\r\n OnGoToInvoice = (e: any) => {\r\n if (e?.rowType === 'group') return;\r\n e?.event?.preventDefault();\r\n\r\n const row = e?.row?.data;\r\n if (!row || !row.CCInvoiceID) return;\r\n\r\n this.Navigate(['/pages/ccinvoice', row.CCInvoiceID], true, true);\r\n\r\n };\r\n\r\n protected override GetGridRowContextMenu(options?: any): ContextMenuElement[] {\r\n return [{\r\n text: this.RC('btnInvoice'),\r\n visible: this.IsInvoiceLinkVisible(options),\r\n onClick: () => this.OnGoToInvoice(options)\r\n }, {\r\n text: this.RC('btnJournalEntry'),\r\n visible: this.IsJournalEntryLinkVisible(options),\r\n onClick: () => this.OnGoToJournalEntry(options)\r\n }];\r\n }\r\n\r\n CalculateMonthCellValue(data: CCTransfer): string | null {\r\n const date = new Date(data?.TransferDate);\r\n return isNaN(date.getTime()) ? null : date.toLocaleString('default', { month: '2-digit', year: 'numeric' });\r\n }\r\n\r\n CalculateYearCellValue(data: CCTransfer) {\r\n return data?.TransferDate?.getFullYear().toString();\r\n }\r\n\r\n CalculateFilterExpression(filterValue: string, selectedFilterOperations: any, target: string) {\r\n if (!filterValue) return null;\r\n const column = this as any;\r\n\r\n if (target === 'headerFilter') {\r\n if (column.name === 'Year') {\r\n return function (data: { TransferDate?: string | Date }) {\r\n const date = new Date(data.TransferDate);\r\n return !isNaN(date.getTime()) && date.getFullYear().toString() === filterValue;\r\n };\r\n } else if (column.name === 'Month') {\r\n return function (data: { TransferDate?: string | Date }) {\r\n const date = new Date(data.TransferDate);\r\n return !isNaN(date.getTime()) \r\n && date.toLocaleString('default', { month: '2-digit', year: 'numeric' })\r\n .toLowerCase() === filterValue.toLowerCase();\r\n };\r\n }\r\n }\r\n return 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 \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n {{ cell.value | formatNumberSum }}\\r\\n {{DisplayCurrency || cell.data.Currency | LookupList:LIST('Currencies'):'Symbol' }}\\r\\n
\\r\\n
\";","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseUpload } from './../entities/baseupload.entity';\r\nexport class JournalEntryUpload extends BaseUpload {\r\n constructor() {\r\n super();\r\n this.TypeName = 'JournalEntryUpload';\r\n }\r\n \r\n public CompanyID: number; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { Component } from '@angular/core';\r\nimport { JournalEntryUpload } from '@kraken/_proxy/entities/journalentryupload.entity';\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 } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-upload-journal-entry-history-grid',\r\n templateUrl: './upload-journal-entry-history-grid.component.html',\r\n styles: [` \r\n .grid-detail-item {\r\n padding: 6px 12px;\r\n }\r\n `]\r\n})\r\nexport class UploadJournalEntryHistoryGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'UploadJournalEntryHistoryGridComponent', JournalEntryUpload, BaseState);\r\n }\r\n\r\n OnRowPrepared(row: any): void { \r\n if (row.rowType === 'data' && (!row.data || !row.data.Exception)) {\r\n if (row.cells[0]?.cellElement) {\r\n row.cells[0].cellElement.classList.remove('dx-datagrid-expand'); \r\n row.cells[0].cellElement.childNodes[0].classList.remove('dx-datagrid-group-closed');\r\n }\r\n } \r\n }\r\n\r\n OnGoToCompany = (e) => {\r\n const row = e?.row?.data;\r\n if (!row) return;\r\n \r\n this.Navigate([`/pages/company/${e.row.data.CompanyID}`], { OrganizationID: e.row.data.OrganizationID });\r\n }\r\n\r\n GetStatusColor(data)\r\n {\r\n switch(data.Status) {\r\n case this.Enums.EnumUploadStatuses.Success:\r\n case this.Enums.EnumUploadStatuses.FileExported:\r\n return 'green-cyan';\r\n case this.Enums.EnumUploadStatuses.Initiated:\r\n return 'olive';\r\n case this.Enums.EnumUploadStatuses.NoData:\r\n return 'light-green';\r\n case this.Enums.EnumUploadStatuses.Exception:\r\n return 'cinnabar';\r\n case this.Enums.EnumUploadStatuses.DataSent:\r\n return 'dark-cyan';\r\n case this.Enums.EnumUploadStatuses.BalanceMismatch:\r\n return 'base-color';\r\n case this.Enums.EnumUploadStatuses.BalanceNotExistsForDate:\r\n return 'hollywood';\r\n case this.Enums.EnumUploadStatuses.CompanyNotFound:\r\n return 'mango';\r\n case this.Enums.EnumUploadStatuses.AccountNotFound:\r\n return 'atomic-tangerine';\r\n }\r\n }\r\n\r\n protected override GetGridRowContextMenu(options?: any): ContextMenuElement[] {\r\n return [{\r\n text: this.RC('titleGoToCompany'),\r\n onClick: () => this.OnGoToCompany(options)\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 {{text}}\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n\";","\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { ExportNoteRule } from './../entities/exportnoterule.entity';\r\nimport { ExportNoteRuleListParams } from './../params/exportnoterulelist.param';\r\n@Injectable()\r\nexport class ExportNoteRuleEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(api: APIGatewayService) {super(\"ExportNoteRule\", api);}\r\n \r\n public ListEx(Params: ExportNoteRuleListParams, options: DataLoadOptions) : Observable>\r\n {\r\n return this.api.ExecutePostAction(this.ControllerName, 'ListEx', Params, options?.GetLoadOptions() );\r\n }\r\n}\r\n","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumBankGroups } from './../enums';\r\nimport { EnumNoteFieldTypes } from './../enums';\r\nexport class ExportNoteRuleListParams extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ExportNoteRuleListParams';\r\n }\r\n \r\n public BankGroups: EnumBankGroups[]; \r\n public FieldType: EnumNoteFieldTypes; \r\n public LoadActive: boolean; \r\n\t\r\n}\r\n\r\n\r\n\r\n","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumBankGroups } from './../enums';\r\nimport { EnumNoteFieldTypes } from './../enums';\r\nimport { EnumNoteMatchTypes } from './../enums';\r\nexport class ExportNoteRule extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ExportNoteRule';\r\n }\r\n \r\n public BankGroup: EnumBankGroups; \r\n public IsActive: boolean; \r\n public FieldType: EnumNoteFieldTypes; \r\n public MatchType: EnumNoteMatchTypes; \r\n public TextToRemove: string; \r\n\tpublic CreatedBy: number;\r\n\tpublic CreatedDate: Date;\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 { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { EnumBankGroups, EnumNoteFieldTypes } from '@kraken/_proxy/enums';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { ExportNoteRuleEndpoint } from '@kraken/_proxy/endpoints/exportnoterule.endpoint';\r\nimport { ExportNoteRuleListParams } from '@kraken-proxy/params/exportnoterulelist.param';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { ExportNoteRuleGridComponent } from './export-note-rule-grid.component';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ExportNoteRule } from '@kraken/_proxy/entities/exportnoterule.entity';\r\n\r\nclass State extends BaseState {\r\n BankGroups: EnumBankGroups[];\r\n NoteFieldType: EnumNoteFieldTypes;\r\n LoadActive: boolean;\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-export-note-rule-list',\r\n templateUrl: './export-note-rule-list.component.html',\r\n styleUrls: ['./export-note-rule-list.component.scss']\r\n})\r\nexport class ExportNoteRuleListComponent extends BasePageComponent {\r\n\r\n @ViewChild('grid') grid: ExportNoteRuleGridComponent;\r\n public get G() { return (this.grid as any)?.G; }\r\n\r\n constructor(A: ServiceBagService, private exportNoteRuleEndpoint: ExportNoteRuleEndpoint) {\r\n super(A, 'ExportNoteRuleListComponent', BaseEntity, State);\r\n }\r\n\r\n protected override OnInitComponent(): void {\r\n this.LoadDataSource();\r\n }\r\n\r\n protected override OnGetToolbarSettings() {\r\n const settings = new ToolbarSettings;\r\n settings.IsAllowFilter = true;\r\n settings.GridExtender = this.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.LoadDataSource();\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions): void {\r\n if (ExternalEntityType === ExportNoteRule) { this.LoadDataSource(); }\r\n }\r\n\r\n OnNavigate = () => {\r\n this.Navigate(['/pages/export-note-rule/new']);\r\n }\r\n\r\n private LoadDataSource() {\r\n const params = new ExportNoteRuleListParams();\r\n params.BankGroups = this.State.BankGroups;\r\n params.FieldType = this.State.NoteFieldType ? this.State.NoteFieldType : EnumNoteFieldTypes.Unknown;\r\n params.LoadActive = this.State.LoadActive;\r\n\r\n this.DataSources['ExportNoteRules'] = new DataSourceCustomAction((options: DataLoadOptions) => this.exportNoteRuleEndpoint.ListEx(params, options));\r\n }\r\n\r\n}\r\n","export default \" \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { Component } from '@angular/core';\r\nimport { ExportNoteRuleEndpoint } from '@kraken/_proxy/endpoints/exportnoterule.endpoint';\r\nimport { ExportNoteRule } from '@kraken/_proxy/entities/exportnoterule.entity';\r\nimport { EnumBankGroups } from '@kraken/_proxy/enums';\r\nimport { ContextMenuElement, ToolbarSettings } 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 { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\n\r\nclass State extends BaseState {\r\n BankGroups: any[];\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-export-note-rule',\r\n templateUrl: './export-note-rule.component.html',\r\n styleUrls: ['./export-note-rule.component.scss']\r\n})\r\nexport class ExportNoteRuleComponent extends BasePageCRUDComponent {\r\n\r\n constructor(A: ServiceBagService, private exportNoteRuleEndpoint: ExportNoteRuleEndpoint) {\r\n super(A, 'ExportNoteRuleComponent', ExportNoteRule, State, exportNoteRuleEndpoint);\r\n }\r\n\r\n protected override OnInitComponent(): void {\r\n super.OnInitComponent();\r\n\r\n this.State.BankGroups = Utils.CloneObject(this.LIST('BankGroups'));\r\n this.State.BankGroups.splice(0, 0, {\r\n Value: EnumBankGroups.All,\r\n Text: this.RC('lblAll')\r\n })\r\n }\r\n\r\n protected override OnEntityNew(): void {\r\n this.Entity.IsActive = true;\r\n this.Entity.BankGroup = EnumBankGroups.All;\r\n }\r\n\r\n protected override OnEntityLoaded(): void {\r\n if (!this.Entity.BankGroup) { this.Entity.BankGroup = EnumBankGroups.All; }\r\n }\r\n\r\n protected override OnEntitySaved(): void {\r\n this.NavigateBack();\r\n }\r\n\r\n protected override OnEntityDeleted(): void {\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 [\r\n {\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\r\n return menus;\r\n }\r\n\r\n protected override OnDoSave(): void {\r\n let entity = Utils.CloneObject(this.Entity);\r\n if (entity.BankGroup === EnumBankGroups.All) { delete(entity.BankGroup); }\r\n\r\n this.SetEntity(this.EntityType, this.Endpoint.Save(entity), true, (_) => this.ReflectEntitySaved());\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\";","import { Component } from '@angular/core';\r\nimport { ExportNoteRule } from '@kraken/_proxy/entities/exportnoterule.entity';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\n\r\nclass State extends BaseState {\r\n BankGroups: any[];\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-export-note-rule-grid',\r\n templateUrl: './export-note-rule-grid.component.html',\r\n styleUrls: ['./export-note-rule-grid.component.scss']\r\n})\r\nexport class ExportNoteRuleGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'ExportNoteRuleGridComponent', ExportNoteRule, State);\r\n }\r\n\r\n override OnInitComponentFinished() {\r\n super.OnInitComponentFinished();\r\n\r\n this.State.BankGroups = Utils.CloneObject(this.LIST('BankGroups'));\r\n this.State.BankGroups.push({\r\n Value: undefined,\r\n Text: this.RC('lblAll')\r\n })\r\n }\r\n\r\n OnNavigate(e) {\r\n this.Navigate(['/pages/export-note-rule', e.data.EntryID])\r\n }\r\n\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { Component, Input } from '@angular/core';\r\nimport { AccessService } from '@kraken/services/access.service';\r\nimport { JournalEntry } from '@kraken/_proxy/entities/journalentry.entity';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-journal-entry-form',\r\n templateUrl: './journal-entry-form.component.html',\r\n styleUrls: ['./journal-entry-form.component.scss']\r\n})\r\nexport class JournalEntryFormComponent extends BaseComponent {\r\n\r\n @Input() JournalEntry: JournalEntry;\r\n @Input() IsReadOnly = false;\r\n\r\n constructor(A: ServiceBagService,\r\n public accessService: AccessService) {\r\n super(A, 'JournalEntryFormComponent', BaseState);\r\n }\r\n}","export default \"
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\";","\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { FileImportTemplate } from './../entities/fileimporttemplate.entity';\r\n@Injectable()\r\nexport class FileImportTemplateEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(api: APIGatewayService) {super(\"FileImportTemplate\", api);}\r\n\t\r\n\r\n public GetByOrganizationID(OrganizationID: number, LoadGlobal: boolean) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetByOrganizationID', {OrganizationID: OrganizationID, LoadGlobal: LoadGlobal} );\r\n }\r\n\r\n public GetGlobal() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetGlobal', undefined );\r\n }\r\n}\r\n\r\n","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumFileImportTypes } from './../enums';\r\nimport { EnumFileImportEncodings } from './../enums';\r\nimport { EnumFileImportRowDelimiters } from './../enums';\r\nimport { EnumFileImportRowsSortOrders } from './../enums';\r\nimport { EnumFileImportAccountMappingTypes } from './../enums';\r\nimport { EnumFileImportCurrencyDenominations } from './../enums';\r\nimport { EnumFileImportColumns } from './../enums';\r\nexport class FileImportTemplate extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'FileImportTemplate';\r\n }\r\n \r\n public Name: string; \r\n public Description: string; \r\n public OrganizationID: number; \r\n public CompanyID: number; \r\n public AccountID: number; \r\n public BookingAccountID: number; \r\n public FileType: EnumFileImportTypes; \r\n public FileEncoding: EnumFileImportEncodings; \r\n public CustomLogicName: string; \r\n public IsHasHeaders: boolean; \r\n public NumberOfHeaders: number; \r\n public IsHasBalances: boolean; \r\n public DateFormatSpecification: string; \r\n public RowDelimiter: EnumFileImportRowDelimiters; \r\n public RowsSortOrder: EnumFileImportRowsSortOrders; \r\n public AccountMappingType: EnumFileImportAccountMappingTypes; \r\n public CurrencyDenomination: EnumFileImportCurrencyDenominations; \r\n public DateColumn: EnumFileImportColumns; \r\n public DatePosition: number; \r\n public DateLength: number; \r\n public Notes1Column: EnumFileImportColumns; \r\n public Notes1Position: number; \r\n public Notes1Length: number; \r\n public IsNotes1Reverse: boolean; \r\n public Notes2Column: EnumFileImportColumns; \r\n public Notes2Position: number; \r\n public Notes2Length: number; \r\n public IsNotes2Reverse: boolean; \r\n public ReferenceColumn: EnumFileImportColumns; \r\n public ReferencePosition: number; \r\n public ReferenceLength: number; \r\n public IsReferenceReverse: boolean; \r\n public DebitColumn: EnumFileImportColumns; \r\n public DebitPosition: number; \r\n public DebitLength: number; \r\n public CreditColumn: EnumFileImportColumns; \r\n public CreditPosition: number; \r\n public CreditLength: number; \r\n public BalanceColumn: EnumFileImportColumns; \r\n public BalancePosition: number; \r\n public BalanceLength: number; \r\n public BookingAccountColumn: EnumFileImportColumns; \r\n public BookingAccountPosition: number; \r\n public BookingAccountLength: number; \r\n public AccountNumberColumn: EnumFileImportColumns; \r\n public AccountNumberPosition: number; \r\n public AccountNumberLength: number; \r\n public CurrencyColumn: EnumFileImportColumns; \r\n public CurrencyPosition: number; \r\n public CurrencyLength: number; \r\n\tpublic CreatedBy: number;\r\n\tpublic CreatedDate: Date;\r\n}\r\n\r\n\r\n\r\n","import {Component, Input} from \"@angular/core\";\r\nimport { ServiceBagServices, ServiceBagService } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { BaseState } from \"@m4u-angular/base/entities/BaseEntities\";\r\nimport {FileImportTemplateEndpoint} from \"../../../_proxy/endpoints/fileimporttemplate.endpoint\";\r\nimport {DataSourceCustomAction} from \"../../../../../src/base/datalayer/BaseDataSources\";\r\nimport {BaseComponent} from \"../../../../../src/base/component/BaseComponent\";\r\nimport {BaseEntity} from \"../../../../../src/base/entities/BaseEntities\";\r\nimport {EnumCRUDActions} from \"../../../../../src/core/framework/sysenums.enum\";\r\nimport {FileImportTemplate} from \"../../../_proxy/entities/fileimporttemplate.entity\";\r\n\r\nclass State extends BaseState {\r\n IsShowGlobal: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-file-import-template-list',\r\n templateUrl: './file-import-template-list.component.html'\r\n})\r\nexport class FileImportTemplateListComponent extends BaseComponent {\r\n\r\n @Input() OrganizationID: number = -999;\r\n @Input() IsShowGlobalCheckbox: boolean;\r\n @Input() IsShowGlobal: boolean;\r\n \r\n constructor(A: ServiceBagService, private endpoint: FileImportTemplateEndpoint) {\r\n super(A, 'FileImportTemplateListComponent', State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.State.IsShowGlobal = this.IsShowGlobal;\r\n this.LoadDataSource();\r\n }\r\n\r\n GetParametersForNewTemplate()\r\n {\r\n return { OrganizationID: this.OrganizationID };\r\n }\r\n\r\n public OnIsShowGlobalChanged() {\r\n this.LoadDataSource();\r\n }\r\n\r\n protected override OnExternalEntitySaved(\r\n ExternalEntity: BaseEntity,\r\n ExternalEntityType: new () => BaseEntity, \r\n ExternalEntityAction: EnumCRUDActions) {\r\n \r\n if (ExternalEntityType == FileImportTemplate)\r\n this.LoadDataSource();\r\n }\r\n \r\n private LoadDataSource() {\r\n if (this.OrganizationID > 0)\r\n this.DataSources[\"FileImportTemplates\"] = new DataSourceCustomAction(() => this.endpoint.GetByOrganizationID(this.OrganizationID, this.State.IsShowGlobal));\r\n else\r\n this.DataSources[\"FileImportTemplates\"] = new DataSourceCustomAction(() => this.endpoint.GetGlobal());\r\n \r\n this.DS(\"FileImportTemplates\").Reload();\r\n }\r\n}\r\n","export default \"\\r\\n\";","import {Component, EventEmitter, Input, Output} from \"@angular/core\";\r\nimport { FileImportTemplate } from '@kraken/_proxy/entities/fileimporttemplate.entity';\r\nimport { ServiceBagServices, ServiceBagService } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { BaseState } from \"@m4u-angular/base/entities/BaseEntities\";\r\nimport {BaseGridComponent} from \"../../../../../src/base/component/BaseGridComponent\";\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-file-import-template-grid',\r\n templateUrl: './file-import-template-grid.component.html'\r\n})\r\nexport class FileImportTemplateGridComponent extends BaseGridComponent {\r\n\r\n @Input() IsShowGlobalCheckbox: boolean;\r\n @Input() IsShowGlobal: boolean;\r\n @Output() IsShowGlobalChange: EventEmitter = new EventEmitter();\r\n @Output() OnIsShowGlobalChanged: EventEmitter = new EventEmitter();\r\n \r\n constructor(A: ServiceBagService) {\r\n super(A, 'FileImportTemplateGridComponent', FileImportTemplate, BaseState);\r\n }\r\n \r\n public OnIsShowGlobalSelectionChanged(event) {\r\n this.IsShowGlobalChange.emit(event.value);\r\n this.OnIsShowGlobalChanged.emit();\r\n }\r\n\r\n public OnNavigate(event) {\r\n this.Navigate([\"/pages/file-import-template\", event.data.EntryID]);\r\n }\r\n \r\n public OnSearchToolbarPreparing(event: any) {\r\n if (this.IsShowGlobalCheckbox) {\r\n event.toolbarOptions.items.unshift({\r\n location: 'after',\r\n template: 'searchTemplate',\r\n isCustom: true\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\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { Component } from '@angular/core';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-file-import-template-list-page',\r\n templateUrl: './file-import-template-list-page.component.html'\r\n})\r\nexport class FileImportTemplateListPageComponent extends BasePageComponent\r\n{\r\n constructor(A: ServiceBagService)\r\n {\r\n super(A, 'FileImportTemplateListPageComponent', BaseEntity, BaseState);\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, ServiceBagServices} from \"@m4u-angular/base/component/ServiceBag\";\r\nimport {BaseState} from \"@m4u-angular/base/entities/BaseEntities\";\r\nimport {FileImportTemplateEndpoint} from \"../../_proxy/endpoints/fileimporttemplate.endpoint\";\r\nimport {BasePageCRUDComponent} from \"../../../../src/base/component/BasePageCRUDComponent\";\r\nimport {FileImportTemplate} from \"../../_proxy/entities/fileimporttemplate.entity\";\r\nimport {Organization} from '../../_proxy/entities/organization.entity';\r\nimport {\r\n EnumFileImportAccountMappingTypes,\r\n EnumFileImportColumns,\r\n EnumFileImportCurrencyDenominations,\r\n EnumFileImportEncodings,\r\n EnumFileImportRowDelimiters,\r\n EnumFileImportRowsSortOrders,\r\n Enums\r\n} from \"../../_proxy/enums\";\r\nimport {OrganizationEndpoint} from \"../../_proxy/endpoints/organization.endpoint\";\r\nimport {BaseEntityResponse} from \"../../../../src/base/entities/BaseEntities\";\r\nimport {memoize} from \"lodash\";\r\nimport {ContextMenuElement, ToolbarSettings} from \"../../../../src/base/classes/BaseClasses\";\r\nimport { BookingAccountSelectorComponent } from \"@kraken/components/selectors/booking-account-selector/booking-account-selector.component\";\r\nimport { AccessService } from \"@kraken/services/access.service\";\r\n\r\nclass State extends BaseState {\r\n Organization: Organization;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-file-import-template',\r\n templateUrl: './file-import-template.component.html',\r\n styleUrls: ['./file-import-template.component.scss']\r\n})\r\nexport class FileImportTemplateComponent extends BasePageCRUDComponent {\r\n\r\n @ViewChild('bookingAccountSelector') bookingAccountSelector: BookingAccountSelectorComponent; \r\n\r\n constructor(\r\n A: ServiceBagService,\r\n public accessService: AccessService,\r\n private endpoint: FileImportTemplateEndpoint,\r\n private organizationEndpoint: OrganizationEndpoint) {\r\n\r\n super(A, 'FileImportTemplateComponent', FileImportTemplate, State, endpoint);\r\n }\r\n\r\n public OnIsDirtyDisabled() { return true };\r\n\r\n protected override OnEntityLoaded() {\r\n this.LoadOrganization();\r\n }\r\n\r\n protected override OnInitTitle(): string {\r\n const entityName = this.Entity?.Name;\r\n return entityName && `${this.GetDefaultTitle()} - ${entityName}`;\r\n }\r\n\r\n protected override OnEntityNew() {\r\n this.Entity.OrganizationID = this.QueryParams.OrganizationID;\r\n this.Entity.FileEncoding = EnumFileImportEncodings.UTF8;\r\n this.Entity.RowsSortOrder = EnumFileImportRowsSortOrders.Ascending;\r\n this.Entity.RowDelimiter = EnumFileImportRowDelimiters.VbCrLf;\r\n this.Entity.DateFormatSpecification = 'dd/MM/yyyy';\r\n this.Entity.IsHasBalances = true;\r\n this.Entity.NumberOfHeaders = 1;\r\n this.Entity.CurrencyDenomination = EnumFileImportCurrencyDenominations.Dollar;\r\n\r\n this.LoadOrganization();\r\n }\r\n\r\n protected override OnEntitySaved() {\r\n this.NavigateBack();\r\n }\r\n\r\n override OnInitContextMenus(): ContextMenuElement[] {\r\n if (this.IsAddMode || !!this.QueryParams.ViewMode) return undefined;\r\n\r\n return [{\r\n text: this.RC('btnImport'),\r\n visible: true,\r\n onClick: this.GoToTransactionsImport.bind(this)\r\n }];\r\n }\r\n\r\n public OnAccountMappingTypeChanged(event) {console.log('load')\r\n if (this.Entity.AccountMappingType === EnumFileImportAccountMappingTypes.FixedBookingAccount) {\r\n setTimeout(() => { if (this.bookingAccountSelector) { this.bookingAccountSelector.SetOrganizationID(this.Entity.OrganizationID); } });\r\n }\r\n\r\n if (!this.IsUIEvent(event)) return;\r\n \r\n this.Entity.BookingAccountColumn = EnumFileImportColumns.Undefined;\r\n this.Entity.BookingAccountPosition = -999;\r\n this.Entity.BookingAccountLength = -999;\r\n\r\n this.Entity.AccountNumberColumn = EnumFileImportColumns.Undefined;\r\n this.Entity.AccountNumberPosition = -999;\r\n this.Entity.AccountNumberLength = -999;\r\n\r\n this.Entity.CurrencyColumn = EnumFileImportColumns.Undefined;\r\n this.Entity.CurrencyPosition = -999;\r\n this.Entity.CurrencyLength = -999;\r\n\r\n if (event.value !== Enums.EnumFileImportAccountMappingTypes.FixedBookingAccount) return;\r\n }\r\n\r\n public CreateColumnValidator = memoize((...propertiesToExclude: string[]) => {\r\n return ({data, value, rule}) => {\r\n let properties = Object\r\n .getOwnPropertyNames(this.Entity)\r\n .filter(p => p.endsWith('Column') && !propertiesToExclude.includes(p));\r\n\r\n let equalsCount = 0;\r\n for (let i = 0; i < properties.length; i++) {\r\n let propertyValue = this.Entity[properties[i]];\r\n\r\n if (propertyValue && propertyValue !== EnumFileImportColumns.Undefined && propertyValue === value)\r\n equalsCount++;\r\n }\r\n\r\n return equalsCount === 0;\r\n }\r\n });\r\n\r\n public CreatePositionAndLengthEnteredValidator = memoize((property: string) => {\r\n return ({data, value, rule}) => {\r\n let propertyValue = this.Entity[property];\r\n\r\n if (!propertyValue)\r\n return true;\r\n\r\n return propertyValue && value;\r\n }\r\n });\r\n\r\n public CreatePositionAndLengthRangeValidator = memoize((positionProperty: string, lengthProperty: string, ...propertiesToExclude: string[]) => {\r\n return ({data, value, rule}) => {\r\n let position = this.Entity[positionProperty];\r\n let length = this.Entity[lengthProperty];\r\n\r\n // There is no need to validate if position or length is not entered\r\n if (!position || !length)\r\n return true;\r\n\r\n // Getting position and length properties of template, to calculate used ranges\r\n let positionAndLengthProperties = Object\r\n .getOwnPropertyNames(this.Entity)\r\n .filter(p =>\r\n (p.endsWith('Position') || p.endsWith('Length')) &&\r\n (p !== positionProperty && p !== lengthProperty) &&\r\n this.Entity[p] && // Also checking value of property\r\n !propertiesToExclude.includes(p)) // Exclude some properties from validation, as Debit and Credit can have same ranges \r\n .sort((x, y) => x > y ? 1 : -1);\r\n\r\n // Checking if position and length of field both have values\r\n positionAndLengthProperties = positionAndLengthProperties.filter(property => {\r\n let propertyName = property.replace('Position', '').replace('Length', '');\r\n let positionExists = positionAndLengthProperties.includes(propertyName + 'Position');\r\n let lengthExists = positionAndLengthProperties.includes(propertyName + 'Length');\r\n\r\n return positionExists && lengthExists;\r\n });\r\n\r\n // Calculating used ranges of properties\r\n let usedIndexes = [];\r\n for (let i = 0; i < positionAndLengthProperties.length; i += 2) {\r\n let propertyPosition = this.Entity[positionAndLengthProperties[i + 1]];\r\n let propertyLength = this.Entity[positionAndLengthProperties[i]];\r\n\r\n let propertyUsedIndexes = new Array(propertyLength)\r\n .fill(propertyPosition)\r\n .map((value, index) => value + index);\r\n\r\n usedIndexes = usedIndexes.concat(propertyUsedIndexes);\r\n }\r\n\r\n usedIndexes = usedIndexes.sort((x, y) => x - y);\r\n\r\n // Checking range of our field is already in use\r\n for (let i = position; i < position + length; i++) {\r\n if (usedIndexes.includes(i))\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n });\r\n\r\n public OnHasBalancesChanged(event) {\r\n if (!this.IsUIEvent(event)) return;\r\n \r\n this.Entity.BalanceColumn = EnumFileImportColumns.Undefined;\r\n this.Entity.BalancePosition = 0;\r\n this.Entity.BalanceLength = 0;\r\n }\r\n\r\n private LoadOrganization() {\r\n let organizationID = this.Entity.OrganizationID;\r\n\r\n if (organizationID > 0) {\r\n this.Do(\r\n this.organizationEndpoint.Get(organizationID),\r\n false,\r\n (response: BaseEntityResponse) => this.State.Organization = response.Entity);\r\n }\r\n }\r\n\r\n private GoToTransactionsImport() {\r\n this.Navigate([\"/pages/transactions-import\"], { FileImportTemplateID: this.Entity.EntryID, OrganizationID: this.Entity.OrganizationID });\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 \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\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 { BaseParamsFilter } from './../entities/baseparamsfilter.entity';\r\nimport { EnumDownloadTaskStatuses } from './../enums';\r\nimport { EnumUploadStatuses } from './../enums';\r\nimport { EnumCCProcessingCompanies } from './../enums';\r\nimport { User } from './../entities/user.entity';\r\nexport class SyncStatusContractListParams extends BaseParamsFilter {\r\n constructor() {\r\n super();\r\n this.TypeName = 'SyncStatusContractListParams';\r\n }\r\n \r\n public ContractID: number; \r\n public DeploymentID: number; \r\n public ShowFailedOnly: boolean; \r\n public DownloadTaskStatuses: EnumDownloadTaskStatuses[]; \r\n public JournalEntryUploadStatuses: EnumUploadStatuses[]; \r\n public ProcessingCompanies: EnumCCProcessingCompanies[]; \r\n public IsOnlyAutomaticUpload: boolean; \r\n public User: User = new User; \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 { EnumDownloadFailureReviewStatus } from './../enums';\r\nexport class DownloadFailureReview extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'DownloadFailureReview';\r\n }\r\n \r\n public BookingAccountID: number; \r\n public CCContractID: number; \r\n public DownloadID: number; \r\n public LatestDownloadException: string; \r\n public Description: string; \r\n public Status: EnumDownloadFailureReviewStatus; \r\n public IsAccountBased: boolean; \r\n public IsContractBased: boolean; \r\n\tpublic CreatedBy: number;\r\n\tpublic CreatedDate: Date;\r\n}\r\n\r\n\r\n\r\n","import { Component, Input, ViewChild } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DownloadFailureReviewDialog } from '../download-failure-review-dialog/download-failure-review-dialog.component';\r\nimport { EnumDownloadFailureReviewStatus, EnumDownloadStatuses, EnumDownloadTaskStatuses, EnumUploadStatuses } from '../../../_proxy/enums';\r\nimport { DownloadFailureReviewEndpoint } from '@kraken/_proxy/endpoints/downloadfailurereview.endpoint';\r\nimport { DownloadFailureReview } from '@kraken/_proxy/views/downloadfailurere.view';\r\nimport { Organization } from '@kraken/_proxy/entities/organization.entity';\r\nimport { AccessService } from '@kraken/services/access.service';\r\nimport { ContextMenuElement } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { OtpInputDialogComponent } from '@kraken/components/otp-input-dialog/otp-input-dialog.component';\r\nimport { DownloadRequestEndpoint } from '@kraken/_proxy/endpoints/downloadrequest.endpoint';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-sync-status-grid',\r\n styleUrls: ['./sync-status-grid.component.scss']\r\n})\r\nexport class SyncStatusGridComponent extends BaseGridComponent\r\n{\r\n @ViewChild('downloadFailureReviewDialog') downloadFailureReviewDialog: DownloadFailureReviewDialog;\r\n @ViewChild('otpInputDialog') otpInputDialog: OtpInputDialogComponent;\r\n @Input() Organization: Organization;\r\n @Input() CurrentTabIndex;\r\n\r\n constructor(A: ServiceBagService,\r\n entityType: new () => BaseEntity,\r\n protected downloadFailureReviewEndpoint: DownloadFailureReviewEndpoint,\r\n protected accessService: AccessService,\r\n protected downloadRequestEndpoint: DownloadRequestEndpoint) {\r\n super(A, 'SyncStatusGridComponent', entityType, BaseState);\r\n this.BindHandler('OnDownloadRequestedData');\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 OnGoToDownload = (e) => {\r\n var row = e?.row?.data;\r\n if (!row) return;\r\n this.Navigate([\"/pages/download-history\"], this.GetGoToDownloadParams(row), false, true);\r\n }\r\n\r\n protected GetGoToDownloadParams(data: any): any {\r\n const params = {\r\n OrganizationID: data.OrganizationID,\r\n CompanyID: data.CompanyID,\r\n AccountID: data.AccountID\r\n } as any;\r\n\r\n return params;\r\n }\r\n\r\n OnGoToUpload = (e) => {\r\n var row = e?.row?.data;\r\n if (!row) return;\r\n this.Navigate([\"/pages/upload-history\"], { OrganizationID: row.OrganizationID, CompanyID: row.CompanyID, AccountID: row.AccountID, BookingAccountID: row.EntryID }, false, true);\r\n }\r\n\r\n OnGoToJEUpload = (e) => {\r\n var row = e?.row?.data;\r\n if (!row) return;\r\n this.Navigate([\"/pages/upload-history\"], { OrganizationID: row.OrganizationID, CompanyID: row.CompanyID, Tab: 1 }, false, true);\r\n }\r\n\r\n\r\n //GetTransactionReportIcon() {\r\n // return this.screen.IsRTL() ? 'mdi mdi-clipboard-arrow-left-outline' : 'mdi mdi-clipboard-arrow-right-outline';\r\n //}\r\n\r\n OnGoToTransactions = (e) => {\r\n const row = e?.row?.data;\r\n if (!row) return;\r\n\r\n const params = {\r\n OrganizationID: row.OrganizationID,\r\n CompanyID: row.CompanyID,\r\n AccountID: row.AccountID,\r\n BookingAccountID: row.EntryID\r\n }\r\n\r\n this.Navigate(['/pages/transaction-report'], params, false, true);\r\n }\r\n\r\n OnGoToBookingAccount = (e) => {\r\n var row = e?.row?.data;\r\n if (!row) return;\r\n this.Navigate([\"pages/account\", row.AccountID], { BookingAccountSubtype: row.Subtype, BookingAccountID: row.EntryID, CompanyID: row.CompanyID }, false, true);\r\n }\r\n\r\n OnGoToContract = (e) => {\r\n var row = e?.row?.data;\r\n if (!row) return;\r\n\r\n this.Navigate([\"pages/cccontract\", row.EntryID], false, true);\r\n }\r\n\r\n GetDownloadStatusColor(data) {\r\n switch (data.DownloadTaskStatus) {\r\n case this.Enums.EnumDownloadTaskStatuses.Success:\r\n return 'green-cyan';\r\n case this.Enums.EnumDownloadTaskStatuses.Failure:\r\n return 'cinnabar';\r\n case this.Enums.EnumDownloadTaskStatuses.NoData:\r\n return 'lucky-point';\r\n case this.Enums.EnumDownloadTaskStatuses.Pending:\r\n return 'mango';\r\n case this.Enums.EnumDownloadTaskStatuses.Reviewed:\r\n return 'dark-cyan';\r\n case this.Enums.EnumDownloadTaskStatuses.NotSynched:\r\n return 'midnight';\r\n }\r\n }\r\n\r\n GetUploadStatusColor(status: EnumUploadStatuses) {\r\n switch (status) {\r\n case this.Enums.EnumUploadStatuses.Success:\r\n case this.Enums.EnumUploadStatuses.FileExported:\r\n return 'green-cyan';\r\n case this.Enums.EnumUploadStatuses.Initiated:\r\n return 'olive';\r\n case this.Enums.EnumUploadStatuses.NoData:\r\n return 'light-green';\r\n case this.Enums.EnumUploadStatuses.Exception:\r\n return 'cinnabar';\r\n case this.Enums.EnumUploadStatuses.DataSent:\r\n return 'dark-cyan';\r\n case this.Enums.EnumUploadStatuses.BalanceMismatch:\r\n return 'base-color';\r\n case this.Enums.EnumUploadStatuses.BalanceNotExistsForDate:\r\n return 'hollywood';\r\n case this.Enums.EnumUploadStatuses.CompanyNotFound:\r\n return 'mango';\r\n case this.Enums.EnumUploadStatuses.AccountNotFound:\r\n return 'atomic-tangerine';\r\n case this.Enums.EnumUploadStatuses.NotSynched:\r\n return 'midnight';\r\n }\r\n }\r\n\r\n IsReviewButtonVisible = (e) => {\r\n return e?.row?.data?.DownloadTaskStatus === EnumDownloadTaskStatuses.Failure;\r\n }\r\n\r\n IsCancelReviewButtonVisible = (e) => {\r\n return e?.row?.data?.DownloadTaskStatus === EnumDownloadTaskStatuses.Reviewed;\r\n }\r\n\r\n IsDownloadRequestDataButtonVisible = (e) => {\r\n const rowData = e?.row?.data;\r\n const shouldShowDownloadRequestButton = this.CurrentTabIndex === 0 ?\r\n rowData?.IsActiveDownload === true :\r\n rowData?.IsActive === true;\r\n return shouldShowDownloadRequestButton;\r\n }\r\n\r\n MarkAsReviewed = (e) => {\r\n const row = e?.row?.data;\r\n if (!row) return;\r\n\r\n if (row[\"ProcessingCompany\"]) {\r\n this.downloadFailureReviewDialog.CCContractID = row.EntryID;\r\n } else {\r\n this.downloadFailureReviewDialog.BookingAccountID = row.EntryID;\r\n\r\n }\r\n this.downloadFailureReviewDialog.LatestDownloadException = row.LatestDownloadError;\r\n this.downloadFailureReviewDialog.DownloadID = row.LatestDownloadID;\r\n this.downloadFailureReviewDialog.ShowDialogShort((result: any) => { });\r\n }\r\n\r\n CancelReview = (e) => {\r\n const row = e?.row?.data;\r\n if (!row) return;\r\n\r\n this.Do(this.downloadFailureReviewEndpoint.Get(row.DownloadFailureReviewID), false, (review) => {\r\n const entity = review.Entity;\r\n entity.Status = EnumDownloadFailureReviewStatus.Cancelled;\r\n this.Do(this.downloadFailureReviewEndpoint.Save(entity), true, (response) => this.NotifyEntitySaved(response.Entity, DownloadFailureReview));\r\n });\r\n }\r\n\r\n IsOpenBankPassButtonVisible(e): boolean {\r\n if (!this.accessService.IsAllowSettings()) { return false; }\r\n\r\n if (!(e?.row?.data?.DownloadTaskStatus === EnumDownloadTaskStatuses.Failure && e?.row?.data?.LatestDownloadStatus === EnumDownloadStatuses.LoginFailure)\r\n || e?.row?.data?.IsBankPassGlobal && !this.accessService.IsAdmin()) { return false; }\r\n return true;\r\n }\r\n\r\n OpenBankPass(e) {\r\n const row = e?.row?.data;\r\n if (!row) return;\r\n\r\n this.Navigate(['/pages/bankpass', row.LatestDownloadBankPassID], { OrganizationID: row.OrganizationID });\r\n }\r\n\r\n protected override GetGridRowContextMenu(options?: any): ContextMenuElement[] {\r\n return [{\r\n text: this.RC('btnOpenBankPass'),\r\n visible: this.IsOpenBankPassButtonVisible(options),\r\n onClick: () => this.OpenBankPass(options)\r\n }, {\r\n text: this.RC('titleGoToDownload'),\r\n onClick: () => this.OnGoToDownload(options)\r\n }, {\r\n text: this.RC('titleGoToUpload'),\r\n onClick: () => this.OnGoToUpload(options)\r\n }, {\r\n text: this.RC('titleGoToJEUpload'),\r\n visible: this.accessService.IsAllowJournalEntryPosting(),\r\n onClick: () => this.OnGoToJEUpload(options)\r\n }, {\r\n text: this.RC('titleMarkAsReviewed'),\r\n visible: this.IsReviewButtonVisible(options),\r\n onClick: () => this.MarkAsReviewed(options)\r\n }, {\r\n text: this.RC('titleCancelReview'),\r\n visible: this.IsCancelReviewButtonVisible(options),\r\n onClick: () => this.CancelReview(options)\r\n }, {\r\n text: this.RC('btnDownloadUpdatedData'),\r\n visible: this.IsDownloadRequestDataButtonVisible(options),\r\n onClick: () => this.OnDownloadRequestedData(options)\r\n }];\r\n }\r\n\r\n OnDownloadRequestedData(e) {\r\n const rowData = e?.row?.data;\r\n if (!rowData) return;\r\n\r\n const id = rowData.AccountID ?? rowData.EntryID;\r\n if (rowData.AccountID) {\r\n this.Do(this.downloadRequestEndpoint.DownloadAccountUpdatedData(id), true, (data) => {\r\n this.handleDownloadData(data);\r\n });\r\n }\r\n else {\r\n this.Do(this.downloadRequestEndpoint.DownloadContractUpdatedData(id), true, (data) => {\r\n this.handleDownloadData(data);\r\n });\r\n }\r\n }\r\n\r\n handleDownloadData = (data) => {\r\n if (data.Entity) {\r\n this.otpInputDialog.downloadRequest = data.Entity;\r\n this.otpInputDialog.Message = data.ResponseMessage;\r\n this.otpInputDialog.ShowDialogShort(() => { });\r\n }\r\n }\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { AccessService } from '@kraken/services/access.service';\r\nimport { DownloadFailureReviewEndpoint } from '@kraken/_proxy/endpoints/downloadfailurereview.endpoint';\r\nimport { DownloadRequestEndpoint } from '@kraken/_proxy/endpoints/downloadrequest.endpoint';\r\nimport { BookingAccount } from '@kraken/_proxy/entities/bookingaccount.entity';\r\nimport { ContextMenuElement } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { SyncStatusGridComponent } from '../sync-status-base-grid'\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-sync-status-account-grid',\r\n templateUrl: './sync-status-grid.component.html',\r\n})\r\nexport class SyncStatusAccountGridComponent extends SyncStatusGridComponent {\r\n constructor(A: ServiceBagService,\r\n protected downloadFailureReviewEndpoint: DownloadFailureReviewEndpoint,\r\n protected accessService: AccessService,\r\n protected downloadRequestEndpoint: DownloadRequestEndpoint) {\r\n super(A, BookingAccount, downloadFailureReviewEndpoint, accessService, downloadRequestEndpoint);\r\n }\r\n\r\n protected override GetGridRowContextMenu(options?: any): ContextMenuElement[] {\r\n const contextMenuItems = super.GetGridRowContextMenu(options);\r\n contextMenuItems.push({\r\n text: this.RC('titleGoToBookingAccount'),\r\n onClick: () => this.OnGoToBookingAccount(options)\r\n }, {\r\n text: this.RC('btnTransactionsReport'),\r\n onClick: () => this.OnGoToTransactions(options)\r\n });\r\n return contextMenuItems;\r\n }\r\n\r\n protected override GetGoToDownloadParams(data) {\r\n const params = super.GetGoToDownloadParams(data);\r\n\r\n params.BookingAccountID = data.EntryID;\r\n\r\n return params;\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\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 { AccessService } from '@kraken/services/access.service';\r\nimport { DownloadFailureReviewEndpoint } from '@kraken/_proxy/endpoints/downloadfailurereview.endpoint';\r\nimport { DownloadRequestEndpoint } from '@kraken/_proxy/endpoints/downloadrequest.endpoint';\r\nimport { CCContract } from '@kraken/_proxy/entities/cccontract.entity';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { SyncStatusGridComponent } from '../sync-status-base-grid'\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-sync-status-contract-grid',\r\n templateUrl: './sync-status-grid.component.html',\r\n})\r\nexport class SyncStatusContractGridComponent extends SyncStatusGridComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n protected downloadFailureReviewEndpoint: DownloadFailureReviewEndpoint,\r\n protected accessService: AccessService,\r\n protected downloadRequestEndpoint: DownloadRequestEndpoint) {\r\n super(A, CCContract, downloadFailureReviewEndpoint, accessService, downloadRequestEndpoint);\r\n }\r\n\r\n protected override GetGoToDownloadParams(data) {\r\n const params = super.GetGoToDownloadParams(data);\r\n\r\n params.ContractID = data.EntryID;\r\n\r\n return params;\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\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 { AccessService } from '@kraken/services/access.service';\r\nimport { BankPassEndpoint } from '@kraken/_proxy/endpoints/bankpass.endpoint';\r\nimport { DeploymentEndpoint } from '@kraken/_proxy/endpoints/deployment.endpoint';\r\nimport { OrganizationEndpoint } from '@kraken/_proxy/endpoints/organization.endpoint';\r\nimport { SyncStatusAccountEndpoint } from '@kraken/_proxy/endpoints/syncstatusaccount.endpoint';\r\nimport { SyncStatusContractEndpoint } from '@kraken/_proxy/endpoints/syncstatuscontract.endpoint';\r\nimport { Organization } from '@kraken/_proxy/entities/organization.entity';\r\nimport { BankPassListParams } from '@kraken/_proxy/params/bankpasslist.param';\r\nimport { SyncStatusContractListParams } from '@kraken/_proxy/params/syncstatuscontractlist.param';\r\nimport { BankPassView } from '@kraken/_proxy/views/bankpass.view';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { FilterComponent, FilterSettings, FilterValues } from '../../components/filter/filter.component';\r\nimport { Globals } from '../../_globals';\r\nimport {\r\n EnumBankGroups, EnumBanks, EnumBookingAccountSubtypes, EnumCCProcessingCompanies,\r\n EnumDataExportType,\r\n EnumDownloadTaskStatuses, EnumUploadStatuses\r\n} from '../../_proxy/enums';\r\nimport { SyncStatusListParams } from '../../_proxy/params/syncstatuslist.param';\r\nimport { DownloadFailureReview } from '../../_proxy/views/downloadfailurere.view';\r\nimport { SyncStatusAccountGridComponent } from './sync-status-account-grid';\r\nimport { SyncStatusContractGridComponent } from './sync-status-contract-grid';\r\n\r\nclass ExtraFilterValues {\r\n DownloadTaskStatuses: EnumDownloadTaskStatuses[] = [];\r\n UploadStatuses: EnumUploadStatuses[] = [];\r\n JEUploadStatuses: EnumUploadStatuses[] = [];\r\n BankGroups: EnumBankGroups[] = [];\r\n ShowFailedOnly = false;\r\n ProcessingCompanies: EnumCCProcessingCompanies[] = [];\r\n DeploymentID: number;\r\n BankPassIDs: number[];\r\n}\r\n\r\nclass State extends BaseState {\r\n FilterValues: FilterValues;\r\n FilterSettings: FilterSettings;\r\n ExtraFilterValues: ExtraFilterValues = new ExtraFilterValues();\r\n CurrentTabIndex = 0;\r\n Organization: Organization;\r\n\r\n UploadStatusesSource: any[];\r\n BankPassSource: BankPassView[];\r\n IsShowOnlyAutomatic: boolean = false;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-sync-status',\r\n templateUrl: './sync-status.component.html',\r\n styleUrls: ['sync-status.component.scss']\r\n})\r\nexport class SyncStatusComponent extends BasePageComponent {\r\n @ViewChild('filter') filter: FilterComponent;\r\n @ViewChild(SyncStatusAccountGridComponent) accountGrid: SyncStatusAccountGridComponent;\r\n @ViewChild(SyncStatusContractGridComponent) contractGrid: SyncStatusContractGridComponent;\r\n\r\n constructor(A: ServiceBagService, private syncStatusAccountEndpoint: SyncStatusAccountEndpoint,\r\n private syncStatusContractEndpoint: SyncStatusContractEndpoint,\r\n private deploynmentEndpoint: DeploymentEndpoint,\r\n private organizationEndpoint: OrganizationEndpoint,\r\n private bankPassEndpoint: BankPassEndpoint,\r\n public accessService: AccessService) {\r\n super(A, 'SyncStatusComponent', BaseEntity, State);\r\n }\r\n\r\n override OnInitState() {\r\n this.State.FilterValues = {\r\n OrganizationID: Globals.OrganizationID,\r\n Company: Globals.CompanyID > 0 ? Globals.CompanyID : undefined\r\n } as FilterValues;\r\n\r\n const isTabAccount = this.State.CurrentTabIndex === 0 ? true : false;\r\n\r\n if (!this.State.FilterSettings) {\r\n this.State.FilterSettings = {\r\n Company: { IsVisible: true, IsMultiple: true},\r\n Account: { IsVisible: true, IsMultiple: true },\r\n Bank: { IsVisible: true, IsMultiple: true },\r\n BookingAccountSubtype: { IsVisible: true, IsMultiple: true },\r\n AccountGroup: { IsVisible: true, IsMultiple: true },\r\n BookingAccount: { IsVisible: true, IsMultiple: true },\r\n CurrencyFilter: { IsVisible: true, IsMultiple: true },\r\n\r\n IsForceOptionsSectionVisible: true\r\n } as FilterSettings;\r\n }\r\n\r\n this.State.FilterSettings.Account.IsVisible = isTabAccount;\r\n this.State.FilterSettings.Bank.IsVisible = isTabAccount;\r\n this.State.FilterSettings.BookingAccountSubtype.IsVisible = isTabAccount;\r\n }\r\n\r\n\r\n override OnInitComponent() {\r\n this.InitStateFromQuery();\r\n // this.LoadData();\r\n this.LoadDeployments();\r\n this.LoadOrganization();\r\n this.LoadBankPasses();\r\n\r\n this.State.UploadStatusesSource = this.LIST('UploadStatuses').filter(x => x.Value !== this.Enums.EnumUploadStatuses.NoData);\r\n }\r\n\r\n OnOrganizationChanged() {\r\n this.LoadBankPasses();\r\n }\r\n\r\n OnTabItemClick({ itemIndex }) {\r\n this.State.CurrentTabIndex = itemIndex;\r\n this.OnInitState();\r\n this.LoadData();\r\n }\r\n\r\n InitStateFromQuery() {\r\n if (Object.keys(this.QueryParams).length <= 0) return;\r\n\r\n if (this.QueryParams.BankGroup) this.State.ExtraFilterValues.BankGroups = [this.QueryParams.BankGroup as EnumBankGroups];\r\n if (this.QueryParams.DownloadStatus)\r\n this.State.ExtraFilterValues.DownloadTaskStatuses = [this.QueryParams.DownloadStatus as EnumDownloadTaskStatuses];\r\n if (this.QueryParams.UploadStatus)\r\n this.State.ExtraFilterValues.UploadStatuses = [this.QueryParams.UploadStatus as EnumUploadStatuses];\r\n if (this.QueryParams.JEUploadStatus)\r\n this.State.ExtraFilterValues.JEUploadStatuses = [this.QueryParams.JEUploadStatus as EnumUploadStatuses];\r\n if (this.QueryParams.ShowFailedOnly) this.State.ExtraFilterValues.ShowFailedOnly = !!this.QueryParams.ShowFailedOnly;\r\n }\r\n\r\n OnReadyFilter() {\r\n this.LoadData();\r\n this.LoadDeployments();\r\n this.LoadOrganization();\r\n this.LoadBankPasses();\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 === DownloadFailureReview) this.LoadData();\r\n }\r\n\r\n OnShowOnlyAutomatic() {\r\n this.LoadDeployments();\r\n }\r\n\r\n OnStatusChanged() {\r\n if ((this.State.ExtraFilterValues.DownloadTaskStatuses && this.State.ExtraFilterValues.DownloadTaskStatuses.length > 0\r\n || this.State.ExtraFilterValues.UploadStatuses && this.State.ExtraFilterValues.UploadStatuses.length > 0\r\n || this.State.ExtraFilterValues.JEUploadStatuses && this.State.ExtraFilterValues.JEUploadStatuses.length > 0)\r\n && this.State.ExtraFilterValues.ShowFailedOnly) this.State.ExtraFilterValues.ShowFailedOnly = false;\r\n }\r\n\r\n OnShowFailedOnlyChanged() {\r\n if (this.State.ExtraFilterValues.ShowFailedOnly)\r\n this.State.ExtraFilterValues.DownloadTaskStatuses = this.State.ExtraFilterValues.UploadStatuses\r\n = this.State.ExtraFilterValues.JEUploadStatuses = undefined;\r\n }\r\n\r\n LoadDeployments() {\r\n if (!Globals.OrganizationID) return;\r\n\r\n const dataExportTypes = this.State.IsShowOnlyAutomatic\r\n ? [EnumDataExportType.Automatic]\r\n : Object.values(EnumDataExportType);\r\n\r\n this.DataSources['Deployments'] = new DataSourceCustomAction((options: DataLoadOptions) =>\r\n this.deploynmentEndpoint.ListEx(Globals.OrganizationID, dataExportTypes, options), undefined, undefined, false);\r\n }\r\n\r\n LoadData() {\r\n if (this.State.CurrentTabIndex === 0) {\r\n this.LoadSyncStatusAccount();\r\n return;\r\n }\r\n\r\n if (this.State.CurrentTabIndex === 1) {\r\n this.LoadSyncStatusContract();\r\n return;\r\n }\r\n }\r\n\r\n LoadOrganization() {\r\n if (!this.State.FilterValues.OrganizationID) {\r\n this.State.Organization = null;\r\n return;\r\n }\r\n\r\n this.Do(this.organizationEndpoint.Get(this.State.FilterValues.OrganizationID), false, (response) => {\r\n this.State.Organization = response.Entity;\r\n });\r\n }\r\n\r\n LoadSyncStatusAccount() {\r\n const params = new SyncStatusListParams();\r\n\r\n params.OrganizationID = this.State.FilterValues.OrganizationID;\r\n params.Companies = this.State.FilterValues.Company as number[];\r\n params.Accounts = this.State.FilterValues.Account as number[];\r\n params.BookingAccountSubtypes = this.State.FilterValues.BookingAccountSubtype as EnumBookingAccountSubtypes[];\r\n params.DownloadTaskStatuses = this.State.ExtraFilterValues.DownloadTaskStatuses;\r\n params.UploadStatuses = this.State.ExtraFilterValues.UploadStatuses;\r\n if (!this.State.Organization || this.State.Organization.IsLicensedForJournalEntries) {\r\n params.JournalEntryUploadStatuses = this.State.ExtraFilterValues.JEUploadStatuses;\r\n }\r\n params.BankGroups = this.State.ExtraFilterValues.BankGroups;\r\n params.Banks = this.State.FilterValues.Bank as EnumBanks[];\r\n params.ShowFailedOnly = this.State.ExtraFilterValues.ShowFailedOnly;\r\n params.DeploymentID = this.State.ExtraFilterValues.DeploymentID;\r\n params.BankPassIDs = this.State.ExtraFilterValues.BankPassIDs;\r\n params.AccountGroups = this.State.FilterValues.AccountGroup as number[];\r\n params.IsOnlyAutomaticUpload = this.State.IsShowOnlyAutomatic;\r\n params.BookingAccounts = this.State.FilterValues.BookingAccount as number[];\r\n params.CurrenciesFilter = this.State.FilterValues.CurrencyFilter as string[];\r\n\r\n this.DataSources['SyncStatusAccount'] = new DataSourceCustomAction((options: DataLoadOptions) =>\r\n this.syncStatusAccountEndpoint.ListEx(params, options), undefined, undefined, false);\r\n }\r\n\r\n LoadSyncStatusContract() {\r\n const params = new SyncStatusContractListParams();\r\n\r\n params.OrganizationID = this.State.FilterValues.OrganizationID;\r\n params.Companies = this.State.FilterValues.Company ? [this.State.FilterValues.Company as number] : [];\r\n params.DownloadTaskStatuses = this.State.ExtraFilterValues.DownloadTaskStatuses;\r\n params.JournalEntryUploadStatuses = this.State.ExtraFilterValues.JEUploadStatuses;\r\n params.ShowFailedOnly = this.State.ExtraFilterValues.ShowFailedOnly;\r\n params.DeploymentID = this.State.ExtraFilterValues.DeploymentID;\r\n params.ProcessingCompanies = this.State.ExtraFilterValues.ProcessingCompanies;\r\n params.AccountGroups = this.State.FilterValues.AccountGroup as number[];\r\n params.IsOnlyAutomaticUpload = this.State.IsShowOnlyAutomatic;\r\n\r\n this.DataSources['SyncStatusContract'] = new DataSourceCustomAction((options: DataLoadOptions) =>\r\n this.syncStatusContractEndpoint.ListEx(params, options), undefined, undefined, false);\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n const settings = new ToolbarSettings;\r\n settings.IsAllowFilter = true;\r\n settings.GridExtender = this.accountGrid?.G;\r\n settings.IsAllowExport = true;\r\n return settings;\r\n }\r\n\r\n override OnApplyFilter() {\r\n this.LoadData();\r\n }\r\n\r\n override OnClearFilter() {\r\n this.State.FilterValues = new FilterValues();\r\n this.State.ExtraFilterValues = new ExtraFilterValues();\r\n if (!this.State.FilterValues.OrganizationID) {\r\n this.State.FilterValues.OrganizationID = Globals.OrganizationID;\r\n }\r\n if (!this.State.FilterValues.Company && this.State.FilterSettings?.Company?.IsVisible && Globals.CompanyID) {\r\n if (Globals.CompanyID > 0) {\r\n this.State.FilterValues.Company = this.State.FilterSettings.Company.IsMultiple ? [Globals.CompanyID] : Globals.CompanyID;\r\n } else {\r\n this.State.FilterValues.Company = this.State.FilterSettings.Company.IsMultiple ? [] : undefined;\r\n }\r\n }\r\n // this.filter.LoadData();\r\n this.LoadData();\r\n }\r\n\r\n private LoadBankPasses() {\r\n const params = new BankPassListParams();\r\n params.OrganizationID = this.State.FilterValues.OrganizationID;\r\n params.LoadGlobal = true;\r\n\r\n this.Do(this.bankPassEndpoint.ListEx(params, null), false, (response) => {\r\n this.State.BankPassSource = response.Entities;\r\n });\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\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 {BaseEntity, BaseState} from '@m4u-angular/base/entities/BaseEntities';\r\nimport {Component, Input} from '@angular/core';\r\nimport {BasePageComponent} from '@m4u-angular/base/component/BasePageComponent';\r\nimport {EnumPageDisplayModes, EnumPageEntitySources} from '@m4u-angular/core/framework/sysenums.enum';\r\nimport {DownloadFailureReviewEndpoint} from '../../../_proxy/endpoints/downloadfailurereview.endpoint';\r\nimport {DownloadFailureReview} from '../../../_proxy/views/downloadfailurere.view';\r\nimport {EnumDownloadFailureReviewStatus} from '../../../_proxy/enums';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-download-failure-review-dialog',\r\n templateUrl: './download-failure-review-dialog.component.html'\r\n})\r\nexport class DownloadFailureReviewDialog extends BasePageComponent {\r\n\r\n @Input() DownloadTaskID: number;\r\n @Input() BookingAccountID: number;\r\n @Input() CCContractID: number;\r\n @Input() LatestDownloadException: string;\r\n @Input() DownloadID: number;\r\n ReviewConclusion: string;\r\n MarkAsPermanentFailure: boolean;\r\n\r\n\r\n constructor(A: ServiceBagService, private downloadFailureReviewEndpoint: DownloadFailureReviewEndpoint) {\r\n super(A, 'DownloadFailureReviewDialog', BaseEntity, BaseState, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.ReviewConclusion = '';\r\n this.MarkAsPermanentFailure = true;\r\n }\r\n\r\n OnOK() {\r\n\r\n const review = new DownloadFailureReview();\r\n review.BookingAccountID = this.BookingAccountID;\r\n review.CCContractID = this.CCContractID;\r\n review.DownloadID = this.DownloadID;\r\n review.LatestDownloadException = this.LatestDownloadException;\r\n review.Description = this.ReviewConclusion;\r\n review.Status = this.MarkAsPermanentFailure ? EnumDownloadFailureReviewStatus.Permanent : EnumDownloadFailureReviewStatus.Onetime;\r\n this.Do(this.downloadFailureReviewEndpoint.Save(review), true,\r\n (response) => {\r\n this.NotifyEntitySaved(response.Entity, DownloadFailureReview);\r\n this.CloseDialogWithSuccess(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\";","import { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { 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 { EnumPageDisplayModes, EnumPageEntitySources } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Index } from '@kraken/_proxy/entities/index.entity';\r\nimport { IndexEndpoint } from '@kraken/_proxy/endpoints/index.endpoint';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-index-dialog',\r\n templateUrl: './index-dialog.component.html'\r\n})\r\nexport class IndexDialogComponent extends BasePageComponent\r\n{\r\n EntryID: number;\r\n Entity: Index;\r\n @Input() set EntityEntryID(value: number) {\r\n this.EntryID = value;\r\n this.LoadEntity();\r\n }\r\n\r\n constructor(A: ServiceBagService, private endpoint: IndexEndpoint) {\r\n\r\n super(A, 'IndexDialogComponent', BaseEntity, BaseState, EnumPageDisplayModes.Dialog);\r\n }\r\n\r\n\r\n LoadEntity() {\r\n this.Do(this.endpoint.Get(this.EntryID), false, (response) => {\r\n this.Entity = response.Entity;\r\n })\r\n }\r\n}","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\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 { FrameworkService } from \"@m4u-angular/core/framework/framework.service\";\r\nimport { EnumPageDisplayModes } from \"@m4u-angular/core/framework/sysenums.enum\";\r\nimport { BalanceEndpoint } from '@kraken/_proxy/endpoints/balance.endpoint';\r\nimport { BasePageComponent } from \"@m4u-angular/base/component/BasePageComponent\";\r\nimport { DataSourceCustomAction } from \"@m4u-angular/base/datalayer/BaseDataSources\";\r\nimport { ToolbarSettings } from \"@m4u-angular/base/classes/BaseClasses\";\r\nimport { LoanPaymentsScheduleGridComponent } from \"./loan-payments-schedule-grid/loan-payments-schedule-grid.component\";\r\nimport { map } from \"rxjs\";\r\n\r\nclass State extends BaseState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-loans-payments-schedule',\r\n templateUrl: './loans-payments-schedule.component.html'\r\n})\r\nexport class LoanPaymentSheduleComponent extends BasePageComponent\r\n{\r\n constructor(\r\n A: ServiceBagService,\r\n private endpoint: BalanceEndpoint,\r\n private framework: FrameworkService) {\r\n super(A, 'LoanPaymentSheduleComponent', BaseEntity, BaseState, EnumPageDisplayModes.Window);\r\n }\r\n\r\n @ViewChild('reportGrid') reportGrid: LoanPaymentsScheduleGridComponent;\r\n\r\n protected override OnInitComponent(): void {\r\n const { BalanceID, LineID } = this.A.Navigator.GetQueryParams(true)\r\n\r\n this.DataSources['LoansSchedule'] = new DataSourceCustomAction(() => this.endpoint.ListBalanceLoansData(BalanceID, LineID).pipe(map(response => ({\r\n ...response,\r\n Entities: response.Entities.map((entity, i) => ({ ...entity, index: i + 1 }))\r\n }))))\r\n }\r\n\r\n protected override OnGetToolbarSettings() {\r\n const settings = new ToolbarSettings()\r\n settings.IsAllowExport = true\r\n settings.GridExtender = this.reportGrid?.G\r\n\r\n return settings\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 { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BalanceDetailsLoanData } from '@kraken/_proxy/entities/balance.entity';\r\nimport { Globals } from '@kraken/_globals';\r\nimport { Loan } from '@kraken/_proxy/entities/loan.entity';\r\nimport { BalanceReportParams } from '@kraken/_proxy/params/balancereport.param';\r\nimport { ContextMenuElement } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { BalanceEndpoint } from '@kraken/_proxy/endpoints/balance.endpoint';\r\n\r\nclass State extends BaseState {\r\n BalancePopupVisible: boolean;\r\n CurrentBalance: number;\r\n CurrentCurrency: string;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-loan-payments-schedule-grid',\r\n templateUrl: './loan-payments-schedule-grid.component.html'\r\n})\r\nexport class LoanPaymentsScheduleGridComponent extends BaseGridComponent {\r\n constructor(A: ServiceBagService, public screenService: ScreenService,\r\n private balanceEndpoint: BalanceEndpoint) {\r\n super(A, 'LoanPaymentsScheduleGridComponent', BalanceDetailsLoanData, State);\r\n }\r\n\r\n CalculateRowIndex(rowData) {\r\n return 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\";","import { Component, ViewChild } from '@angular/core';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BalanceEndpoint } from '../../_proxy/endpoints/balance.endpoint';\r\nimport { BalanceReportParams } from '../../_proxy/params/balancereport.param';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { Globals } from '../../_globals';\r\nimport { FilterComponent, FilterSettings } from '../../components/filter/filter.component';\r\nimport { BaseReportComponent, BaseReportState } from '../base-report/base-report.component';\r\nimport { EnumBanks, EnumBankTypes, EnumBookingAccountSubtypes } from '../../_proxy/enums';\r\nimport { EnumBalanceDetailsReportModes } from '../../_client.enums';\r\nimport { BalanceDetailsReportGridBaseComponent } from './grid/balance-details-report-grid-base';\r\nimport {\r\n QuickFilterComponent,\r\n QuickFilterSettings\r\n} from '@kraken/components/quick-filter/quick-filter.component';\r\nimport { AccountEndpoint } from '@kraken/_proxy/endpoints/account.endpoint';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { DepositClassificationRule } from '@kraken/_proxy/entities/depositclassificationrule.entity';\r\nimport { LoanClassificationRule } from '@kraken/_proxy/entities/loanclassificationrule.entity';\r\nimport { StockClassificationRule } from '@kraken/_proxy/entities/stockclassificationrule.entity';\r\nimport { GuaranteeClassificationRule } from '@kraken/_proxy/entities/guaranteeclassificationrule.entity';\r\nimport { Loan } from '@kraken/_proxy/entities/loan.entity';\r\n\r\nclass State extends BaseReportState {\r\n Mode: EnumBalanceDetailsReportModes;\r\n Banks: EnumBanks[] = [];\r\n BalanceDetails: any[] = [];\r\n GuarantEndDateTo: Date;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-balance-details-report',\r\n templateUrl: './balance-details-report.component.html'\r\n})\r\nexport class BalanceDetailsReportComponent extends BaseReportComponent {\r\n @ViewChild('reportGrid') reportGrid: BalanceDetailsReportGridBaseComponent;\r\n @ViewChild('filter') filterComponent: FilterComponent;\r\n @ViewChild('quickFilter') quickfilterComponent: QuickFilterComponent;\r\n\r\n get IsStocksMode(): boolean {\r\n return this.State.Mode === EnumBalanceDetailsReportModes.Stocks;\r\n }\r\n get IsLoansMode(): boolean {\r\n return this.State.Mode === EnumBalanceDetailsReportModes.Loans;\r\n }\r\n get IsDepositsMode(): boolean {\r\n return this.State.Mode === EnumBalanceDetailsReportModes.Deposits;\r\n }\r\n get IsGuaranteesMode(): boolean {\r\n return this.State.Mode === EnumBalanceDetailsReportModes.Guarantees;\r\n }\r\n\r\n constructor(\r\n A: ServiceBagService,\r\n private balanceEndpoint: BalanceEndpoint,\r\n private accountEndpoint: AccountEndpoint,\r\n public screenService: ScreenService\r\n ) {\r\n super(A, 'BalanceDetailsReportComponent', State);\r\n }\r\n public override OnInitComponentFinished() {\r\n super.OnInitComponentFinished();\r\n if (this.IsLoansMode) {\r\n this.LoadBanks();\r\n }\r\n }\r\n LoadBanks() {\r\n this.Do(this.accountEndpoint.GetBanksByType([EnumBankTypes.Local]), false, response => {\r\n this.State.Banks = response.Data;\r\n });\r\n }\r\n\r\n protected override OnGetCustomFilterSettings(): FilterSettings {\r\n return {\r\n Company: { IsVisible: true, IsMultiple: true },\r\n Account: {\r\n IsVisible: true,\r\n IsMultiple: true,\r\n Params: () => {\r\n return { BookingAccountSubtypes: this.GetSubtypes() };\r\n }\r\n },\r\n BookingAccount: {\r\n IsVisible: true,\r\n IsMultiple: true,\r\n Params: () => {\r\n return { BookingAccountSubtypes: this.GetSubtypes() };\r\n }\r\n },\r\n AccountGroup: { IsVisible: true, IsMultiple: true },\r\n CurrencyFilter: {\r\n IsVisible: true,\r\n IsMultiple: true,\r\n Default: () => {\r\n return [Globals.OrganizationDefaultCurrency || 'ILS'];\r\n }\r\n },\r\n Bank: { IsVisible: true, IsMultiple: true },\r\n Currency: { IsVisible: true },\r\n\r\n IsDateVisible: true,\r\n MaxReportDate: Globals.Yesterday\r\n } as FilterSettings;\r\n }\r\n\r\n protected override OnGetCustomQuickFilterSettings(): QuickFilterSettings {\r\n return {\r\n Company: { IsVisible: true, IsMultiple: true },\r\n Account: {\r\n IsVisible: true,\r\n IsMultiple: true,\r\n Params: () => {\r\n return { BookingAccountSubtypes: this.GetSubtypes() };\r\n }\r\n },\r\n CurrencyFilter: {\r\n IsVisible: true,\r\n IsMultiple: true,\r\n Default: () => {\r\n return [Globals.OrganizationDefaultCurrency || 'ILS'];\r\n }\r\n },\r\n\r\n IsDateVisible: true\r\n } as QuickFilterSettings;\r\n }\r\n\r\n protected override InitStateFromQuery() {\r\n super.InitStateFromQuery();\r\n if (this.QueryParams?.Mode) {\r\n this.State.Mode = +this.QueryParams?.Mode;\r\n }\r\n }\r\n\r\n override OnInitTitle() {\r\n switch (this.State.Mode) {\r\n case EnumBalanceDetailsReportModes.Deposits:\r\n return this.RC('ttlBalanceReportDeposits');\r\n case EnumBalanceDetailsReportModes.Loans:\r\n return this.RC('ttlBalanceReportLoans');\r\n case EnumBalanceDetailsReportModes.Stocks:\r\n return this.RC('ttlBalanceReportStocks');\r\n case EnumBalanceDetailsReportModes.Guarantees:\r\n return this.RC('ttlBalanceReportGuarantees');\r\n default:\r\n return undefined;\r\n }\r\n }\r\n\r\n protected override OnLoadData() {\r\n if (!this.State.FilterValues.OrganizationID) {\r\n this.DataSources['BalancesDetails'] = undefined;\r\n return;\r\n }\r\n this.State.IsLoading = true;\r\n const params = this.GetParams();\r\n params.IsLoadDetails = true;\r\n params.GuarantEndDateTo = this.State.GuarantEndDateTo;\r\n\r\n const keyExpr = ['EntryID', 'LineID'];\r\n switch (this.State.Mode) {\r\n case EnumBalanceDetailsReportModes.Deposits:\r\n this.Do(this.balanceEndpoint.ListDepos(params), false, response =>\r\n this.FillBalanceDetails(response.Entities)\r\n );\r\n break;\r\n case EnumBalanceDetailsReportModes.Stocks:\r\n this.Do(this.balanceEndpoint.ListStocks(params), false, response =>\r\n this.FillBalanceDetails(response.Entities)\r\n );\r\n break;\r\n case EnumBalanceDetailsReportModes.Loans:\r\n this.Do(this.balanceEndpoint.ListLoans(params), false, response =>\r\n this.FillBalanceDetails(response.Entities)\r\n );\r\n break;\r\n case EnumBalanceDetailsReportModes.Guarantees:\r\n this.Do(this.balanceEndpoint.ListGuarant(params), false, response =>\r\n this.FillBalanceDetails(response.Entities)\r\n );\r\n break;\r\n }\r\n }\r\n\r\n override OnExternalEntitySaved(ExternalEntity: BaseEntity,\r\n ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions): void {\r\n if (ExternalEntityType === DepositClassificationRule\r\n || ExternalEntityType === LoanClassificationRule\r\n || ExternalEntityType === StockClassificationRule\r\n || ExternalEntityType === GuaranteeClassificationRule\r\n || ExternalEntityType === Loan\r\n ) {\r\n this.OnApplyFilter();\r\n }\r\n }\r\n\r\n FillBalanceDetails = entities => {\r\n this.State.BalanceDetails = entities;\r\n this.State.IsLoading = false;\r\n if (this.QueryParams.EntryID != null && this.QueryParams.EntryID >= 0) {\r\n this.State.BalanceDetails = this.State.BalanceDetails.filter(\r\n x => x.EntryID == this.QueryParams.EntryID\r\n );\r\n }\r\n };\r\n\r\n protected override OnResetFilterValues() {\r\n super.OnResetFilterValues();\r\n this.State.FilterValues.Date = Globals.Yesterday;\r\n this.State.GuarantEndDateTo = null;\r\n }\r\n\r\n private GetSubtypes() {\r\n switch (this.State.Mode) {\r\n case EnumBalanceDetailsReportModes.Deposits:\r\n return [EnumBookingAccountSubtypes.Deposits];\r\n case EnumBalanceDetailsReportModes.Loans:\r\n return [EnumBookingAccountSubtypes.Loans];\r\n case EnumBalanceDetailsReportModes.Stocks:\r\n return [EnumBookingAccountSubtypes.Stocks];\r\n case EnumBalanceDetailsReportModes.Guarantees:\r\n return [EnumBookingAccountSubtypes.Guarantee];\r\n default:\r\n return [];\r\n }\r\n }\r\n\r\n OnGuarantEndDateToChange(dateTo) {\r\n if (dateTo && dateTo.value) {\r\n this.State.GuarantEndDateTo = new Date(dateTo.value.setHours(0, 0, 0));\r\n } else {\r\n this.State.GuarantEndDateTo = null;\r\n }\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\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 {\r\n ServiceBagServices,\r\n ServiceBagService,\r\n} 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 { DxDataGridComponent } from 'devextreme-angular';\r\nimport { MessageBoxDialogComponent } from '@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\nimport { EnumMessageBoxTypes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { EnumSide } from '../../../_proxy/enums';\r\nimport { ContextMenuElement } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { ForecastOperationEndpoint } from '@kraken/_proxy/endpoints/forecastoperation.endpoint';\r\nimport { ForecastOperation } from '@kraken/_proxy/entities/forecastoperation.entity';\r\nimport { Globals } from '@kraken/_globals';\r\nimport { ForecastOperationView } from '@kraken/_proxy/views/forecastoperation.view';\r\nimport { formatNumber } from 'devextreme/localization';\r\n\r\nclass State extends BaseState {\r\n SelectedForecasts: ForecastOperationView[];\r\n DialogText: string;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-forecast-operations-grid',\r\n templateUrl: './forecast-operations-grid.component.html',\r\n styleUrls: ['forecast-operations-grid.component.scss']\r\n})\r\nexport class ForecastOperationsGridComponent extends BaseGridComponent {\r\n EnumMessageBoxTypes = EnumMessageBoxTypes;\r\n @ViewChild('grid', { static: false }) dataGrid: DxDataGridComponent;\r\n @Output() reload: EventEmitter = new EventEmitter();\r\n @ViewChild('messageBox') messageBoxDialog: MessageBoxDialogComponent;\r\n @Input() ContextMenu: boolean = true;\r\n @Input() AllowCustomization: boolean = true;\r\n @Input() AllowAdvancedFilters: boolean = true;\r\n @Input() SearchPanelVisible: boolean = true;\r\n @Input() IsGroupingActive: boolean = false;\r\n @Input() AllowRowSelection: boolean = false;\r\n\r\n constructor(A: ServiceBagService,\r\n private enpdoint: ForecastOperationEndpoint) {\r\n super(A, 'ForecastOperationsGridComponent', ForecastOperationView, State);\r\n }\r\n\r\n OnInitialized(e: any) {\r\n e.component.option('scrolling.timeout', 0);\r\n }\r\n\r\n override OnInitComponentFinished() {\r\n super.OnInitComponentFinished();\r\n this.G.grid.columnHidingEnabled = false;\r\n }\r\n\r\n OnDelete = (e: any) => {\r\n this.State.DialogText = this.RC('msgConfirmDeleteRecurringForecast');\r\n this.messageBoxDialog.ShowDialogShort(() => {\r\n this.Do(this.enpdoint.Delete(e?.row?.data?.EntryID), true, () => {\r\n this.reload.emit();\r\n });\r\n });\r\n };\r\n\r\n OpenEditForecastOperationModal(entity: ForecastOperation) {\r\n const params = {\r\n BookingAccountID: entity.BookingAccountID,\r\n OrganizationID: Globals.OrganizationID,\r\n CompanyID: entity.CompanyID,\r\n AccountID: entity.AccoutID,\r\n Side: entity.Credit ? EnumSide.Income : EnumSide.Expense\r\n };\r\n this.Navigate([`/pages/forecast-operation/${entity.EntryID}`], params);\r\n }\r\n\r\n OnEditForecast = (e: any) => {\r\n const entity = e?.row?.data as ForecastOperation;\r\n if (!entity) return;\r\n\r\n this.OpenEditForecastOperationModal(entity);\r\n };\r\n\r\n protected override GetGridRowContextMenu(options?: any): ContextMenuElement[] {\r\n if (!this.ContextMenu) return;\r\n\r\n return [{\r\n text: this.RC('titleDelete'),\r\n onClick: () => this.OnDelete(options)\r\n }, {\r\n text: this.RC('lblEdit'),\r\n onClick: () => this.OnEditForecast(options)\r\n }];\r\n }\r\n\r\n IsReconciled(rowdata: ForecastOperationView) {\r\n return rowdata.Lines?.length > 0;\r\n }\r\n\r\n OpenSumForReconcile = (rowdata: ForecastOperationView) => {\r\n if (rowdata.Lines.length < 1 || rowdata.IsFullyReconcilled) return '';\r\n\r\n const reconciled = rowdata.Lines?.reduce((acc, item) => acc + item.Sum, 0);\r\n const openSum = Math.abs(rowdata.Sum) >= Math.abs(reconciled) ?\r\n Math.abs(rowdata.Sum - rowdata.Lines?.reduce((acc, item) => acc + item.Sum, 0)) : 0;\r\n if (openSum == 0) return '';\r\n return formatNumber(openSum, this.F.NumberSum);\r\n };\r\n\r\n public OnSearchToolbarPreparing(event: any) {\r\n if (this.AllowRowSelection) {\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\r\n OnSelectionChanged(event: { selectedRowsData: ForecastOperationView[]; }) {\r\n const { selectedRowsData } = event;\r\n this.State.SelectedForecasts = selectedRowsData;\r\n }\r\n\r\n OnDeleteBatch = (e: any) => {\r\n this.State.DialogText = this.RC('msgConfirmDeleteForecasts');\r\n this.messageBoxDialog.ShowDialogShort(() => {\r\n this.Do(this.enpdoint.DeleteBatch(this.State.SelectedForecasts.map(recod => recod.EntryID)), true, () => {\r\n this.reload.emit();\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 {{ cell.data.Debit | formatNumberSum }}\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n {{ cell.data.Credit | formatNumberSum }}\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n {{ (!data.displayValue || data.displayValue == '')? RC('lblUnknown') : data.displayValue }}\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n 0 && AllowRowSelection\\\" Icon=\\\"trash\\\" Mode=\\\"text\\\" (OnClick)=\\\"OnDeleteBatch()\\\">\\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 { AccountingForecastCategoryView } from './../views/accountingforecastcategory.view';\r\nimport { AccountingForecastCategoryParams } from './../params/accountingforecastcategory.param';\r\n@Injectable()\r\nexport class AccountingForecastCategoryEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"AccountingForecastCategory\", api);}\r\n\t\r\n\r\n public ListEx(Params: AccountingForecastCategoryParams, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListEx', Params, options?.GetLoadOptions() );\r\n }\r\n}\r\n\r\n","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseParamsFilter } from './../entities/baseparamsfilter.entity';\r\nexport class AccountingForecastCategoryParams extends BaseParamsFilter {\r\n constructor() {\r\n super();\r\n this.TypeName = 'AccountingForecastCategoryParams';\r\n }\r\n \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { Component, EventEmitter, Input, Output, ViewChild } 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 { DxDataGridComponent } from 'devextreme-angular';\r\nimport { MessageBoxDialogComponent } from '@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\nimport { EnumMessageBoxTypes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { RecurringForecast } from '../../../_proxy/entities/recurringforecast.entity';\r\nimport { EnumSide } from '../../../_proxy/enums';\r\nimport { AccountingForecastCategoryEndpoint } from '../../../_proxy/endpoints/accountingforecastcategory.endpoint';\r\nimport { AccountingForecastEndpoint } from '../../../_proxy/endpoints/accountingforecast.endpoint';\r\nimport { AccountingForecastCategoryParams } from '@kraken/_proxy/params/accountingforecastcategory.param';\r\nimport { Globals } from '@kraken/_globals';\r\nimport { Company } from '@kraken/_proxy/entities/company.entity';\r\n\r\nclass State extends BaseState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-account-forecasts-grid',\r\n templateUrl: './account-forecasts-grid.component.html',\r\n styleUrls: ['account-forecasts-grid.component.scss']\r\n})\r\nexport class AccountingForecastsGridComponent extends BaseGridComponent {\r\n EnumMessageBoxTypes = EnumMessageBoxTypes;\r\n @ViewChild('grid', { static: false }) dataGrid: DxDataGridComponent;\r\n @Output() reload: EventEmitter = new EventEmitter();\r\n @ViewChild('messageBox') messageBoxDialog: MessageBoxDialogComponent;\r\n @Input() Companies: Company[];\r\n\r\n constructor(\r\n A: ServiceBagService,\r\n private enpdoint: AccountingForecastEndpoint,\r\n private categoriesEndpoint: AccountingForecastCategoryEndpoint\r\n ) {\r\n super(A, 'AccountingForecastsGridComponent', RecurringForecast, State);\r\n this.BindHandler('OnDelete');\r\n this.BindHandler('OnEditForecastOperation');\r\n }\r\n\r\n OnInitialized(e: any) {\r\n e.component.option('scrolling.timeout', 0);\r\n this.LoadAccountingForecastCategories();\r\n }\r\n\r\n override OnInitComponentFinished() {\r\n super.OnInitComponentFinished();\r\n this.G.grid.columnHidingEnabled = false;\r\n }\r\n\r\n OnDelete(e: any) {\r\n this.messageBoxDialog.ShowDialogShort(() => {\r\n this.Do(this.enpdoint.Delete(e?.row?.data?.EntryID), true, () => this.reload.emit());\r\n });\r\n }\r\n\r\n OpenEditForecastOperationModal(entity: RecurringForecast) {\r\n const params = {\r\n BookingAccountID: entity.BookingAccountID,\r\n OrganizationID: entity.OrganizationID,\r\n Side: entity.Credit ? EnumSide.Income : EnumSide.Expense\r\n };\r\n this.Navigate([`/pages/recurring-forecast/${entity.EntryID}`], params);\r\n }\r\n\r\n OnEditForecastOperation(e: any) {\r\n const entity = e?.row?.data as RecurringForecast;\r\n if (!entity) return;\r\n\r\n this.OpenEditForecastOperationModal(entity);\r\n }\r\n\r\n LoadAccountingForecastCategories() {\r\n const params = new AccountingForecastCategoryParams();\r\n params.OrganizationID = Globals.OrganizationID;\r\n\r\n this.Do(this.categoriesEndpoint.ListEx(params, null), false, response => {\r\n this.DataSources['AccountingForecastCategories'] = response.Entities;\r\n });\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n \\r\\n \\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.Debit | formatNumberSum }}\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n {{ cell.data.Credit | 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 {{ data.displayValue }}\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n\";","import { Component, Input } from \"@angular/core\";\r\nimport { Globals } from \"@kraken/_globals\";\r\nimport { ForecastOperationEndpoint } from \"@kraken/_proxy/endpoints/forecastoperation.endpoint\";\r\nimport { ForecastOperation } from \"@kraken/_proxy/entities/forecastoperation.entity\";\r\nimport { RecurringForecast } from \"@kraken/_proxy/entities/recurringforecast.entity\";\r\nimport { ForecastOperationParams } from \"@kraken/_proxy/params/forecastoperation.param\";\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 ForecastOperations: ForecastOperation[];\r\n RecurringForecast: RecurringForecast;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: \"app-detail-forecast-opertaion\",\r\n template: `\r\n `\r\n})\r\nexport class DetailForecatOperationsComponent extends BaseComponent {\r\n constructor(A: ServiceBagService, private endpoint: ForecastOperationEndpoint) {\r\n super(A, 'DetailForecatOperationsComponent', State);\r\n }\r\n\r\n @Input()\r\n set RecurringForecast(forecast: RecurringForecast) {\r\n this.State.RecurringForecast = forecast;\r\n this.LoadData();\r\n };\r\n\r\n LoadData() {\r\n const params = new ForecastOperationParams();\r\n params.OrganizationID = Globals.OrganizationID;\r\n params.RecurringForecastID = this.State.RecurringForecast.EntryID;\r\n params.BookingAccounts = [this.State.RecurringForecast.BookingAccountID];\r\n\r\n this.Do(\r\n this.endpoint.ListEx(params),\r\n false,\r\n (response) => {\r\n this.State.ForecastOperations = response.Entities;\r\n }\r\n );\r\n }\r\n}","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\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 { CashflowReportSummarizedGroup } from \"@kraken/_proxy/entities/cashflowreportsummarizedgroup.entity\";\r\nimport { EnumSummaryLevel } from \"@kraken/_proxy/enums\";\r\nimport { CashflowReportParams } from \"@kraken/_proxy/params/cashflowreport.param\";\r\nimport { BaseComponent } from \"@m4u-angular/base/component/BaseComponent\";\r\nimport { ServiceBagServices } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { BaseState } from \"@m4u-angular/base/entities/BaseEntities\";\r\nimport { CashflowFutureForecastGroups } from \"@kraken/_proxy/entities/cashflowfutureforecastgroups.entity\";\r\nimport mock from \"../mock\";\r\n\r\nexport class BaseChashflowChartState extends BaseState {\r\n ChartSize = [1000, 600];\r\n}\r\n\r\nconst daysInterval = {\r\n days: 1\r\n};\r\nconst weeksInterval = {\r\n days: 7\r\n};\r\nconst monthsInterval = {\r\n months: 1\r\n};\r\n@Component({\r\n providers: ServiceBagServices\r\n})\r\nexport class BaseChashflowChart extends BaseComponent {\r\n @Input() Params: CashflowReportParams;\r\n @Input() SummaryLevel: EnumSummaryLevel;\r\n @Output() OnViewChange = new EventEmitter<{ index: number; GroupBy: string[]; type: 'debit' | 'credit'; IsOther:boolean }>();\r\n\r\n public hostRef;\r\n public DataSource;\r\n\r\n @Input() set SummarizedGroups(value: CashflowReportSummarizedGroup[]) {\r\n // @ts-ignore\r\n // value = mock.map(m => ({...m, DateTo: new Date(m.DateTo)}))\r\n if (!value) return;\r\n\r\n this.DataSource = value.length ? this.InitDataOnSumarizedGroups(value) : [];\r\n }\r\n\r\n _FutureForecastOperations: CashflowFutureForecastGroups;\r\n @Input() set FutureForecastOperations(value: CashflowFutureForecastGroups) {\r\n // value = {\r\n // \"EntryID\": -1,\r\n // \"TotalCredit\": 14052772.200000005,\r\n // \"TotalDebit\": 6646285.520000004,\r\n // \"Credits\": [\r\n // {\r\n // \"EntryID\": -1,\r\n // \"Name\": \"Other\",\r\n // \"Total\": 7884102.090000004,\r\n // \"Percent\": 56.10353585607828\r\n // },\r\n // {\r\n // \"EntryID\": -1,\r\n // \"Name\": \"CCIncome\",\r\n // \"Total\": 152346.25,\r\n // \"Percent\": 1.0841010430667903\r\n // },\r\n // {\r\n // \"EntryID\": -1,\r\n // \"Name\": \"test4\",\r\n // \"Total\": 24000,\r\n // \"Percent\": 0.17078480785449573\r\n // },\r\n // {\r\n // \"EntryID\": -1,\r\n // \"Name\": \"Deposits\",\r\n // \"Total\": 5992323.859999999,\r\n // \"Percent\": 42.64157829300042\r\n // },\r\n // {\r\n // \"EntryID\": -1,\r\n // \"Name\": \"test43\",\r\n // \"Total\": 24000,\r\n // \"Percent\": 0.17078480785449573\r\n // },\r\n // {\r\n // \"EntryID\": -1,\r\n // \"Name\": \"Deposits2\",\r\n // \"Total\": 5992323.859999999,\r\n // \"Percent\": 42.64157829300042\r\n // }\r\n // ],\r\n // \"Debits\": [\r\n // {\r\n // \"EntryID\": -1,\r\n // \"Name\": \"Other\",\r\n // \"Total\": 2790837.1199999996,\r\n // \"Percent\": 41.99093029635594\r\n // },\r\n // {\r\n // \"EntryID\": -1,\r\n // \"Name\": \"test3\",\r\n // \"Total\": 3689216.540000002,\r\n // \"Percent\": 55.50794543656619\r\n // },\r\n // {\r\n // \"EntryID\": -1,\r\n // \"Name\": \"Loans\",\r\n // \"Total\": 94443.48,\r\n // \"Percent\": 1.4209964304994218\r\n // },\r\n // {\r\n // \"EntryID\": -1,\r\n // \"Name\": \"CCExpence\",\r\n // \"Total\": 71788.37999999999,\r\n // \"Percent\": 1.0801278365784073\r\n // }\r\n // ]\r\n // };\r\n this._FutureForecastOperations = value;\r\n if (!value) return;\r\n\r\n this.DataSource = this.InitDataOnForecastOperations(value);\r\n }\r\n get FutureForecastOperations() {\r\n return this._FutureForecastOperations;\r\n }\r\n\r\n get CurrencySymbol() {\r\n // @ts-ignore\r\n return this.LISTITEMX('Currencies', this.Params.Currency).Symbol;\r\n }\r\n\r\n get tickInterval() {\r\n if (this.SummaryLevel === EnumSummaryLevel.Day) {\r\n return daysInterval;\r\n }\r\n\r\n if (this.SummaryLevel === EnumSummaryLevel.Week) {\r\n return weeksInterval;\r\n }\r\n\r\n if (this.SummaryLevel === EnumSummaryLevel.Month) {\r\n return monthsInterval;\r\n }\r\n }\r\n\r\n override OnInitComponentFinished() {\r\n super.OnInitComponentFinished();\r\n\r\n this.ResizeChart();\r\n }\r\n\r\n protected InitDataOnSumarizedGroups(value: CashflowReportSummarizedGroup[]) {\r\n throw new Error('InitData not implemented');\r\n }\r\n\r\n protected InitDataOnForecastOperations(value: CashflowFutureForecastGroups) {\r\n throw new Error('InitData not implemented');\r\n }\r\n\r\n ResizeChart() {\r\n if (!this.hostRef) return;\r\n const el = this.hostRef.nativeElement;\r\n\r\n setTimeout(() => {\r\n const rect = el.getBoundingClientRect();\r\n this.State.ChartSize = [rect.width, rect.height];\r\n }, 1200);\r\n }\r\n\r\n protected onLegendClick(e: any) {\r\n const { target: series } = e;\r\n const valueFields = series.getValueFields();\r\n\r\n const params = { ...this.Params, type: valueFields[0].toLowerCase() };\r\n\r\n this.Navigate([\"/pages/cashflow-report-grid\"], params, false, true);\r\n }\r\n\r\n protected onPointClick(e: any) {\r\n const { target: point } = e;\r\n\r\n const { data: { DateFrom, DateTo } } = point;\r\n const valueFields = point.series.getValueFields();\r\n\r\n const dateFrom = new Date(DateFrom.setHours(0, 0, 0, 0));\r\n const dateTo = new Date(DateTo.setHours(23, 59, 59, 999));\r\n\r\n const params = { ...this.Params, DateFrom: dateFrom, DateTo: dateTo, type: valueFields[0].toLowerCase() };\r\n\r\n this.Navigate([\"/pages/cashflow-report-grid\"], params, false, true);\r\n }\r\n\r\n AggregateValuesBySeries(series, rowData) {\r\n return series.reduce((acc, s) => {\r\n const value = rowData[s.valueField] ?? 0;\r\n const factor = s.factor ?? 1;\r\n\r\n return {\r\n ...acc,\r\n [s.valueField]: value * factor,\r\n [s.valueField + 'VisualFactor']: s.visualFactor ?? 1\r\n };\r\n }, {});\r\n }\r\n\r\n log = console.log;\r\n}","import { Component, ElementRef, Input } from \"@angular/core\";\r\nimport { CashflowReportSummarizedGroup } from \"@kraken/_proxy/entities/cashflowreportsummarizedgroup.entity\";\r\nimport { ServiceBagServices, ServiceBagService } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { BaseChashflowChart, BaseChashflowChartState } from \"../base-cashflow-chart\";\r\nimport { Globals } from \"@kraken/_globals\";\r\n\r\nclass State extends BaseChashflowChartState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: \"app-income-expences-chart\",\r\n styles: [':host { display: block; }'],\r\n templateUrl: \"../spline-chart.html\"\r\n})\r\nexport class IncomeExpencesChart extends BaseChashflowChart {\r\n constructor(A: ServiceBagService, public hostRef: ElementRef) {\r\n super(A, \"IncomeExpencesChart\", State);\r\n }\r\n\r\n Series = [\r\n {\r\n valueField: `Credit`,\r\n name: this.RC(\"lblIncome\"),\r\n color: Globals.ReportCreditColor,\r\n },\r\n {\r\n valueField: `Debit`,\r\n name: this.RC(\"lblExpences\"),\r\n color: Globals.ReportDebitColor,\r\n visualFactor: -1\r\n }\r\n ];\r\n\r\n override InitDataOnSumarizedGroups(data: CashflowReportSummarizedGroup[]) {\r\n if (!data.length) return [];\r\n\r\n const totalRows = data.at(-1).Rows;\r\n const groupRows = data.length > 1 ? data.slice(0, data.length - 1) : data;\r\n\r\n return totalRows.map((row) => {\r\n return {\r\n ...row,\r\n ...this.AggregateValuesBySeries(this.Series, row),\r\n groups: groupRows.map(groupRow => {\r\n const _row = groupRow.Rows.find(r => r.DateTo.toString() === row.DateTo.toString());\r\n\r\n return {\r\n GroupTitle: groupRow.GroupTitle,\r\n ...this.AggregateValuesBySeries(this.Series, _row)\r\n };\r\n })\r\n };\r\n });\r\n }\r\n}","import { Component, Input } from \"@angular/core\";\r\nimport { BaseComponent } from \"@m4u-angular/base/component/BaseComponent\";\r\nimport { ServiceBagService, ServiceBagServices } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { BaseState } from \"@m4u-angular/base/entities/BaseEntities\";\r\n\r\ntype ValueField = 'Credit' | 'Debit' | 'CreditLimit' | 'Balance';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-cashflow-chart-tooltip',\r\n template: `\r\n
{{ Date | formatDateShort }}
\r\n \r\n {{ 'lblTotal' + series.valueField | RC:THIS }}\r\n {{ PointData[series.valueField] * PointData[series.valueField + 'VisualFactor'] | formatPriceWithCurrency: Currency }}\r\n \r\n\r\n
\r\n {{ group.GroupTitle }}\r\n \r\n \r\n \r\n \r\n {{ 'lbl' + series.valueField | RC:THIS }}\r\n \r\n {{ group[series.valueField] * group[series.valueField + 'VisualFactor'] | formatPriceWithCurrency: Currency }}\r\n \r\n
\r\n `,\r\n styles: [\r\n `\r\n :host {\r\n display: block;\r\n color: #294D92;\r\n width: 260px;\r\n padding: 12px;\r\n font-size: 14px;\r\n }\r\n\r\n .date {\r\n color: #858FBB;\r\n margin-bottom: 12px;\r\n }\r\n\r\n .bullet {\r\n display: inline-block;\r\n border-radius: 50%;\r\n padding: 4px;\r\n background-color: currentColor;\r\n }\r\n\r\n ::ng-deep .RTL .bullet {\r\n margin-left: 6px;\r\n }\r\n\r\n ::ng-deep .LTR .bullet {\r\n margin-right: 6px;\r\n }\r\n\r\n .justify-between { \r\n justify-content: space-between; \r\n }\r\n\r\n .total-title {\r\n font-size: 14px;\r\n font-weight: 500;\r\n margin-top: 16px;\r\n }\r\n\r\n .group {\r\n margin-top: 24px;\r\n }\r\n\r\n .group-title {\r\n display: block;\r\n }\r\n\r\n .group-subtitle {\r\n display: flex;\r\n align-items: center;\r\n line-height: 1;\r\n }\r\n\r\n .group-value {\r\n color: #858FBB;\r\n }\r\n `\r\n ]\r\n})\r\nexport class CashflowChartTooltip extends BaseComponent {\r\n constructor(A: ServiceBagService) {\r\n super(A, \"CashflowChartTooltip\", BaseState);\r\n }\r\n\r\n @Input() Date: Date;\r\n @Input() Series: ValueField[];\r\n @Input() PointData;\r\n @Input() Color: string;\r\n @Input() Currency: string;\r\n}","import { Component, ElementRef, Input } from \"@angular/core\";\r\nimport { CashflowReportSummarizedGroup } from \"@kraken/_proxy/entities/cashflowreportsummarizedgroup.entity\";\r\nimport { ServiceBagServices, ServiceBagService } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { BaseChashflowChart, BaseChashflowChartState } from \"../base-cashflow-chart\";\r\n\r\nclass State extends BaseChashflowChartState {\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: \"app-balance-growth-chart\",\r\n styles: [':host { display: block; }'],\r\n templateUrl: \"../spline-chart.html\"\r\n})\r\nexport class BalanceGrowthChart extends BaseChashflowChart {\r\n constructor(A: ServiceBagService, public hostRef: ElementRef) {\r\n super(A, \"BalanceGrowthChart\", State);\r\n }\r\n\r\n Series = [\r\n {\r\n valueField: `Balance`,\r\n name: this.RC(\"lblBalance\"),\r\n color: \"#35599F\",\r\n },\r\n {\r\n valueField: `CreditLimit`,\r\n name: this.RC(\"lblCreditLimit\"),\r\n factor: -1,\r\n color: \"#D4A418\",\r\n }\r\n ];\r\n\r\n override InitDataOnSumarizedGroups(data: CashflowReportSummarizedGroup[]) {\r\n if (!data.length) return [];\r\n\r\n const totalRows = data.at(-1).Rows;\r\n const groupRows = data.length > 1 ? data.slice(0, data.length - 1) : data;\r\n\r\n return totalRows.map((row) => {\r\n return {\r\n ...row,\r\n ...this.AggregateValuesBySeries(this.Series, row),\r\n groups: groupRows.map(groupRow => {\r\n const _row = groupRow.Rows.find(r => r.DateTo.toString() === row.DateTo.toString());\r\n\r\n return {\r\n GroupTitle: groupRow.GroupTitle,\r\n ...this.AggregateValuesBySeries(this.Series, _row)\r\n };\r\n })\r\n };\r\n });\r\n }\r\n}","import { Component, ElementRef, QueryList, ViewChildren } from '@angular/core';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseChashflowChart, BaseChashflowChartState } from '../base-cashflow-chart';\r\nimport { CashflowFutureForecastGroups } from '@kraken/_proxy/entities/cashflowfutureforecastgroups.entity';\r\nimport { generateColors } from 'devextreme/viz/palette';\r\nimport { formatNumber } from 'devextreme/localization';\r\nimport { getCurrencySymbol } from '@angular/common';\r\nimport { DxPieChartComponent } from 'devextreme-angular/ui/pie-chart';\r\nimport { basePointObject } from 'devextreme/viz/chart';\r\n\r\nconst greenPalette = generateColors(['#053112', '#3DA25A', '#DCF2E2'], 10, {});\r\nconst redPalette = generateColors(['#540819', '#DF5271', '#FAE4E9'], 10, {});\r\n\r\nclass State extends BaseChashflowChartState {\r\n canResize: boolean = true;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-forecast-operations-chart',\r\n styles: [\r\n `:host { display: flex; }\r\n \r\n .pie-chart {\r\n position: relative;\r\n }\r\n\r\n .pie-chart + .pie-chart:before {\r\n content: '';\r\n display: block;\r\n width: 0px;\r\n height: 90%;\r\n border-left: 1px solid #D2DAE8;\r\n position: absolute;\r\n bottom: 0;\r\n }\r\n \r\n ::ng-deep .RTL .pie-chart:before {\r\n right: 0;\r\n }\r\n\r\n ::ng-deep .LTR .pie-chart:before {\r\n left: 0;\r\n }\r\n\r\n .point {\r\n display: inline-block;\r\n width: 12px;\r\n height: 12px;\r\n border-radius: 2px;\r\n }\r\n\r\n ::ng-deep .RTL .point {\r\n margin-left: 5px;\r\n }\r\n\r\n ::ng-deep .LTR .point {\r\n margin-right: 5px;\r\n }\r\n\r\n .legend {\r\n padding: 0 10%;\r\n height: 100px;\r\n }\r\n\r\n .legend-row td {\r\n cursor: pointer;\r\n color: #294D92;\r\n font-size: 16px;\r\n }\r\n \r\n `\r\n ],\r\n templateUrl: './forecast-operations-chart.component.html'\r\n})\r\nexport class ForecastOperationsChart extends BaseChashflowChart {\r\n instances: DxPieChartComponent['instance'][] = [];\r\n\r\n constructor(A: ServiceBagService, public hostRef: ElementRef) {\r\n super(A, 'ForecastOperationsChart', State);\r\n }\r\n\r\n Legends = [];\r\n\r\n override InitDataOnForecastOperations(data: CashflowFutureForecastGroups) {\r\n return [\r\n {\r\n dataSource: data.Credits,\r\n palette: greenPalette,\r\n totalTitle: this.RC('lblIncome'),\r\n total: data.TotalCredit,\r\n totalColor: '#0E7B2C',\r\n seriesName: 'Credits'\r\n },\r\n {\r\n dataSource: data.Debits,\r\n palette: redPalette,\r\n totalTitle: this.RC('lblExpenses'),\r\n total: data.TotalDebit,\r\n totalColor: '#D1143E',\r\n seriesName: 'Debits'\r\n }\r\n ];\r\n }\r\n\r\n HideLegendName() {\r\n return '';\r\n }\r\n\r\n OnLegendClick(point) {\r\n if (!point) return;\r\n\r\n const { Key} = point.data;\r\n const seriesName = point.series.name;\r\n const categories = this.FutureForecastOperations[seriesName];\r\n\r\n this.OnViewChange.emit({\r\n index: 0,\r\n type: seriesName === 'Credits' ? 'credit' : 'debit',\r\n GroupBy: Key === 'Other' ? categories.map(c => c.Key).filter(n => n !== 'Other') : [Key],\r\n IsOther: Key === 'Other'\r\n });\r\n }\r\n\r\n OnInitialized = ({ component }, i) => {\r\n this.instances[i] = component;\r\n };\r\n\r\n OnDone = (_, i) => {\r\n const component = this.instances[i];\r\n const [series] = component.getAllSeries();\r\n const points = series.getAllPoints();\r\n\r\n\r\n this.Legends[i] = points.map(p => {\r\n const { Total, Name, Percent } = p.data;\r\n return {\r\n point: p,\r\n Name,\r\n Total: `${getCurrencySymbol(this.Params.Currency, 'narrow')}${formatNumber(Total, this.F.NumberSum)}`,\r\n Percent: `${formatNumber(Percent, this.F.NumberPercent)}% `,\r\n };\r\n });\r\n };\r\n\r\n OnMouseenter(point: basePointObject) {\r\n if (!point) return;\r\n\r\n // Add catch becouse facing the error in some cases with null ref in point\r\n try {\r\n point.hover();\r\n point.showTooltip();\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n }\r\n\r\n OnMouseleave(point: basePointObject) {\r\n if (!point) return;\r\n\r\n // Add catch becouse facing the error in some cases with null ref in point\r\n try {\r\n point.clearHover();\r\n point.hideTooltip();\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n }\r\n\r\n GetPointColor(point) {\r\n if (!point.series) return;\r\n return point.getColor();\r\n }\r\n\r\n GethHight(){\r\n if (this.State.ChartSize[1] < 400) {\r\n return 400;\r\n } else {\r\n return this.State.ChartSize[1]- 100;\r\n }\r\n }\r\n}","export default \"
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n {{ options.totalTitle }}\\r\\n {{ options.total | formatPriceWithCurrency: CurrencySymbol }}\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n {{ legend?.Name }}\\r\\n {{ legend?.Total }}{{ legend?.Percent }}
\\r\\n
\\r\\n
\";","import { Component, ElementRef, EventEmitter, Input, Output, QueryList, ViewChild, ViewChildren } from \"@angular/core\";\r\nimport { BaseComponent } from \"@m4u-angular/base/component/BaseComponent\";\r\nimport { ServiceBagService, ServiceBagServices } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { BaseState } from \"@m4u-angular/base/entities/BaseEntities\";\r\n\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-switch',\r\n template: `\r\n
\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n
\r\n `,\r\n styles: [\r\n `\r\n :host {\r\n display: inline-block;\r\n background: #E8EFFF;\r\n border-radius: 60px;\r\n line-height: 1;\r\n padding: 4px;\r\n }\r\n\r\n .m4u-switch-inner {\r\n position: relative;\r\n display: flex;\r\n width: 100%;\r\n height: calc(100% - 8px);\r\n }\r\n \r\n input {\r\n position: absolute;\r\n opacity: 0;\r\n width: 0;\r\n height: 0;\r\n }\r\n \r\n .m4u-switch-slider {\r\n position: absolute;\r\n cursor: pointer;\r\n display: inline-block;\r\n height: 100%;\r\n background-color: #294D92;\r\n transition: 0.4s;\r\n border-radius: 60px;\r\n }\r\n \r\n .m4u-switch-label {\r\n position: relative;\r\n z-index: 1;\r\n color: #294D92;\r\n text-align: center;\r\n padding: 6px 8px;\r\n cursor: pointer; \r\n transition: 0.4s;\r\n } \r\n \r\n ::ng-deep .LTR .m4u-switch-label ~ .m4u-switch-label {\r\n margin-left: 4px;\r\n }\r\n\r\n ::ng-deep .RTL .m4u-switch-label ~ .m4u-switch-label {\r\n margin-right: 4px;\r\n }\r\n \r\n input:checked + .m4u-switch-label {\r\n color: #fff;\r\n }\r\n `\r\n ]\r\n})\r\nexport class M4uSwitch extends BaseComponent {\r\n constructor(A: ServiceBagService) {\r\n super(A, \"M4uSwitch\", BaseState);\r\n }\r\n\r\n @ViewChild('slider') slider: ElementRef;\r\n @ViewChildren('input') inputs: QueryList;\r\n\r\n @Input() Value: string | number;\r\n @Output() ValueChange = new EventEmitter();\r\n @Input() ValueExpr: string = 'Value';\r\n @Input() DisplayExpr: string = 'Text';\r\n\r\n _items = [];\r\n @Input()\r\n set Items(v) {\r\n // if (v.length !== 2) {\r\n // throw new Error('Items has to contain exactly 2 elements');\r\n // }\r\n this._items = v;\r\n };\r\n get Items() {\r\n return this._items;\r\n }\r\n\r\n Id(value: string) {\r\n return 'm4u-switch-' + value;\r\n }\r\n\r\n ngAfterViewInit() {\r\n const input = this.inputs.find(item => item.nativeElement.checked);\r\n this.MoveSlider(input.nativeElement);\r\n }\r\n\r\n OnChange({ target }) {\r\n this.ValueChange.emit(target.value);\r\n this.MoveSlider(target);\r\n }\r\n\r\n MoveSlider(target: HTMLInputElement) {\r\n if (!target) return;\r\n\r\n const label = target.labels[0];\r\n if (!label) return;\r\n this.slider.nativeElement.style.width = label.clientWidth + 'px';\r\n\r\n let shift = this.A.Screen.IsRTL() ? label.clientWidth + label.offsetLeft - label.offsetParent.clientWidth : label.offsetLeft;\r\n this.slider.nativeElement.style.transform = `translateX(${shift}px)`;\r\n }\r\n}","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumSide } from './../enums';\r\nimport { CashflowReportSummarizedRow } from './../entities/cashflowreportsummarizedrow.entity';\r\nexport class CashflowReportSummarizedGroup extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'CashflowReportSummarizedGroup';\r\n }\r\n \r\n public GroupTitle: string; \r\n public GroupKey: string; \r\n public Currency: string; \r\n public CreditLimit: number; \r\n public OpeningBalance: number; \r\n public DebitCredit: number; \r\n public Balance: number; \r\n public Bank: string; \r\n public Side: EnumSide; \r\n public Rows: CashflowReportSummarizedRow[] = []; \r\n public CategoryID: number; \r\n public ParentCategoryID: number; \r\n public ParentCategoryName: string; \r\n public SortingOrder: number; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { Component, Input } from \"@angular/core\";\r\nimport { ServiceBagServices, ServiceBagService } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { BaseState } from \"@m4u-angular/base/entities/BaseEntities\";\r\nimport { CashflowReportSummarizedGroup } from \"../../../_proxy/entities/cashflowreportsummarizedgroup.entity\";\r\nimport { EnumBankGroups, EnumBanks, EnumCashflowSummarizedAggregationLevel, EnumSummaryLevel } from \"../../../_proxy/enums\";\r\nimport { CashflowReportParams } from \"../../../_proxy/params/cashflowreport.param\";\r\nimport { BaseCashflowGridComponent } from '../../base-cashflow-grid/base-cashflow-grid.component';\r\nimport mock from \"../mock\";\r\nimport { formatNumber } from \"devextreme/localization\";\r\n\r\nconst parseDatePeriod = (period: string) => {\r\n const [dateFrom, dateTo] = period.split('@');\r\n\r\n return {\r\n DateFrom: new Date(dateFrom),\r\n DateTo: new Date(dateTo)\r\n };\r\n};\r\nconst stringifyDatePeriod = (DateFrom: Date, DateTo: Date) => `${DateFrom.toString()}@${DateTo.toString()}`;\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: \"app-cashflow-pivot-grid\",\r\n templateUrl: \"./cashflow-pivot-grid.component.html\",\r\n styleUrls: [\"./cashflow-pivot-grid.component.scss\"]\r\n\r\n})\r\nexport class CashflowPivotGridComponent extends BaseCashflowGridComponent {\r\n @Input() Params: CashflowReportParams;\r\n @Input() AggregationLevel: EnumCashflowSummarizedAggregationLevel;\r\n @Input() SummaryLevel: EnumSummaryLevel;\r\n @Input() MinDate: Date;\r\n @Input() CurrencySymbol: string;\r\n\r\n @Input() set SummarizedGroups(v) {\r\n if (!v) {\r\n this.Columns = new Map();\r\n this.dataSource = [];\r\n return;\r\n }\r\n\r\n this.Columns = new Map();\r\n this.dataSource = v.flatMap(group => {\r\n const { GroupTitle, GroupKey, Bank, Balance, CreditLimit } = group;\r\n const credit = {\r\n GroupTitle,\r\n Bank,\r\n GroupBalance: Balance,\r\n GroupCreditLimit: CreditLimit,\r\n GroupKey,\r\n type: 'credit',\r\n name: this.RC('lblCredit')\r\n };\r\n const debit = {\r\n GroupTitle,\r\n Bank,\r\n GroupBalance: Balance,\r\n GroupCreditLimit: CreditLimit,\r\n GroupKey,\r\n type: 'debit',\r\n name: this.RC('lblDebit')\r\n };\r\n const balance = {\r\n GroupTitle,\r\n Bank,\r\n GroupBalance: Balance,\r\n GroupCreditLimit: CreditLimit,\r\n GroupKey,\r\n type: 'balance',\r\n name: this.RC('lblBalance')\r\n };\r\n\r\n group.Rows.forEach((row) => {\r\n const datePeriod = stringifyDatePeriod(row.DateFrom, row.DateTo);\r\n\r\n if (row.DatePeriodTitle) this.Columns.set(datePeriod, row.DatePeriodTitle);\r\n\r\n if (row.Credit) credit[datePeriod] = row.Credit;\r\n if (row.Debit) debit[datePeriod] = row.Debit * -1;\r\n if (row.Balance) balance[datePeriod] = row.Balance;\r\n });\r\n\r\n return [\r\n credit, debit, balance\r\n ];\r\n });\r\n }\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, \"CashflowPivotGridComponent\", CashflowReportSummarizedGroup, BaseState);\r\n this.BindHandler('OnGoToDetailedGrid');\r\n }\r\n\r\n Columns = new Map();\r\n\r\n dataSource = [];\r\n\r\n OnCellPrepared(e) {\r\n if (e.rowType !== \"data\") {\r\n return;\r\n }\r\n\r\n if (e.column.dataField !== 'GroupInfo') {\r\n e.cellElement.classList.add(e.data.type);\r\n }\r\n\r\n if (e.columnIndex === 0) {\r\n if (e.data.type === 'credit') {\r\n e.cellElement.rowSpan = 3;\r\n }\r\n else {\r\n e.cellElement.style.display = \"none\";\r\n }\r\n }\r\n }\r\n\r\n onContextMenuPreparing(e: any) {\r\n if (!e.items) e.items = [];\r\n\r\n if (!e.row || e.row.rowType !== \"data\" || e.column.dataField === 'GroupInfo' || e.column.dataField === 'name') return;\r\n\r\n const { GroupKey: groupKey } = e.row.data;\r\n const { OrganizationID } = this.Params;\r\n\r\n if (!groupKey || groupKey === 'summary' || this.AggregationLevel !== EnumCashflowSummarizedAggregationLevel.BookingAccount) return;\r\n\r\n\r\n const params: any = {\r\n OrganizationID,\r\n CompanyID: this.Params.Companies?.length === 1 ? this.Params.Companies[0] : undefined,\r\n BookingAccountID: groupKey,\r\n MinDate: this.MinDate,\r\n };\r\n\r\n if (this.SummaryLevel === EnumSummaryLevel.Day) {\r\n params.Date = parseDatePeriod(e.column.dataField).DateTo;\r\n }\r\n\r\n e.items.push(this.contextMenuItems.newExpense(params));\r\n\r\n e.items.push(this.contextMenuItems.newIncome(params));\r\n }\r\n\r\n OnGoToDetailedGrid(e: any) {\r\n if (!this.Params || !e.column || e.column.dataField === 'GroupInfo' || e.column.dataField === 'name') return;\r\n\r\n const { column, data } = e;\r\n const { type, GroupKey: groupKey } = data ?? {};\r\n\r\n const { DateFrom, DateTo } = parseDatePeriod(column.dataField);\r\n const params = { ...this.Params, DateFrom, DateTo, type, DatePeriodOnly: true };\r\n\r\n if (groupKey && groupKey !== 'summary') {\r\n if (groupKey) {\r\n switch (this.AggregationLevel) {\r\n case EnumCashflowSummarizedAggregationLevel.Company:\r\n params.Companies = [+groupKey];\r\n break;\r\n case EnumCashflowSummarizedAggregationLevel.Bank:\r\n params.Banks = [groupKey];\r\n break;\r\n case EnumCashflowSummarizedAggregationLevel.AccountGroup:\r\n params.AccountGroups = [+groupKey];\r\n break;\r\n case EnumCashflowSummarizedAggregationLevel.BookingAccount:\r\n params.BookingAccounts = [+groupKey];\r\n break;\r\n case EnumCashflowSummarizedAggregationLevel.BankGroup:\r\n params.BankGroups = [groupKey];\r\n break;\r\n case EnumCashflowSummarizedAggregationLevel.Account:\r\n params.Accounts = [+groupKey];\r\n break;\r\n case EnumCashflowSummarizedAggregationLevel.Currency:\r\n params.FilterCurrency = groupKey;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n this.Navigate([\"/pages/cashflow-report-grid\"], params, false, true);\r\n }\r\n\r\n override OnInitComponentFinished() {\r\n super.OnInitComponentFinished();\r\n this.G.grid.columnHidingEnabled = false;\r\n }\r\n\r\n OnInitialized(e: any) {\r\n e.component.option(\"scrolling.timeout\", 0);\r\n }\r\n\r\n GetBankIcon(bank: string) {\r\n const urlPathPrefix = 'assets/projects/kraken/';\r\n const bankItem = this.LISTITEMX('Banks', bank) as any;\r\n return bankItem && bankItem.Icon && `${urlPathPrefix}${bankItem.Icon}`;\r\n }\r\n\r\n originalOrder() {\r\n return 1;\r\n }\r\n\r\n customizeExcelCell = (options) => {\r\n const { gridCell, excelCell } = options;\r\n const { column, value, data, rowType } = gridCell;\r\n\r\n if (rowType === 'data') {\r\n if (column.dataField === 'GroupInfo') {\r\n excelCell.value = data.GroupTitle;\r\n }\r\n\r\n if (this.Columns.has(column.dataField) && value) {\r\n excelCell.value = formatNumber(value, this.F.NumberPrice) + ' ' + this.CurrencySymbol;\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 {{ 'lblCurrentBankBalance' | RC: THIS }}:\\r\\n {{ info.data.GroupBalance | formatPriceWithCurrency: CurrencySymbol }}\\r\\n
\\r\\n
\\r\\n {{ 'lblCreditLimit' | RC: THIS }}:\\r\\n {{ info.data.GroupCreditLimit | formatPriceWithCurrency: CurrencySymbol }}\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n {{ cell.value | formatPriceWithCurrency: CurrencySymbol }}\\r\\n
\\r\\n
\";","import { Component, Input } from \"@angular/core\";\r\nimport { ServiceBagServices, ServiceBagService } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { BaseState } from \"@m4u-angular/base/entities/BaseEntities\";\r\nimport { CashflowReportSummarizedGroup } from \"../../../_proxy/entities/cashflowreportsummarizedgroup.entity\";\r\nimport { EnumBankGroups, EnumBanks, EnumCashflowSummarizedAggregationLevel, EnumSummaryLevel } from \"../../../_proxy/enums\";\r\nimport { CashflowReportParams } from \"../../../_proxy/params/cashflowreport.param\";\r\nimport { BaseCashflowGridComponent } from '../../../pages/base-cashflow-grid/base-cashflow-grid.component';\r\nimport { memoize } from \"lodash\";\r\nimport { Format, formatNumber, parseNumber } from \"devextreme/localization\";\r\nimport { ScreenService } from \"@m4u-angular/core/framework/screen.service\";\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: \"app-cashflow-summarized-grid\",\r\n templateUrl: \"./cashflow-summarized-grid.component.html\",\r\n styleUrls: [\"./cashflow-summarized-grid.component.scss\"]\r\n\r\n})\r\nexport class CashflowSummarizedGridComponent extends BaseCashflowGridComponent {\r\n @Input() SummarizedGroups: CashflowReportSummarizedGroup[] = [];\r\n @Input() Params: CashflowReportParams;\r\n @Input() AggregationLevel: EnumCashflowSummarizedAggregationLevel;\r\n @Input() SummaryLevel: EnumSummaryLevel;\r\n @Input() MinDate: Date;\r\n @Input() CurrencySymbol: string;\r\n\r\n constructor(A: ServiceBagService, private screenService: ScreenService) {\r\n super(A, \"CashflowSummarizedGridComponent\", CashflowReportSummarizedGroup, BaseState);\r\n this.BindHandler('OnGoToDetailedGrid');\r\n }\r\n\r\n OnRowPrepared(row: any): void {}\r\n\r\n onContextMenuPreparing(e: any) {\r\n if (!e.items) e.items = [];\r\n\r\n if (e.row.rowType === \"header\") return;\r\n\r\n const groupKey = this.getGroupKeyByColumnIndex(e.columnIndex);\r\n const { OrganizationID } = this.Params;\r\n\r\n if (!groupKey || groupKey === 'summary' || this.AggregationLevel !== EnumCashflowSummarizedAggregationLevel.BookingAccount) return;\r\n\r\n\r\n const params: any = {\r\n OrganizationID,\r\n BookingAccountID: groupKey,\r\n MinDate: this.MinDate,\r\n };\r\n\r\n if (this.SummaryLevel === EnumSummaryLevel.Day) {\r\n params.Date = e.row.data.DateFrom;\r\n }\r\n\r\n e.items.push(this.contextMenuItems.newExpense(params));\r\n\r\n e.items.push(this.contextMenuItems.newIncome(params));\r\n }\r\n\r\n OnGoToDetailedGrid(e: any) { \r\n if (!e || e.rowType === \"header\" || !e.column)\r\n return;\r\n let type;\r\n\r\n switch (e.column.dataField.toLowerCase().replace(/[0-9]/g, '')) {\r\n case \"debit\":\r\n type = \"debit\";\r\n break;\r\n case \"credit\":\r\n type = \"credit\";\r\n break;\r\n case \"balance\":\r\n case \"date\":\r\n type = \"balance\";\r\n break;\r\n }\r\n\r\n if (!this.Params) return;\r\n const params = { ...this.Params, DateFrom: e.data.DateFrom, DateTo: e.data.DateTo, type, DatePeriodOnly: true };\r\n const groupKey = this.getGroupKeyByColumnIndex(e.columnIndex);\r\n if (groupKey && groupKey !== 'summary') {\r\n\r\n if (groupKey) {\r\n switch (this.AggregationLevel) {\r\n case EnumCashflowSummarizedAggregationLevel.Company:\r\n params.Companies = [+groupKey];\r\n break;\r\n case EnumCashflowSummarizedAggregationLevel.Bank:\r\n params.Banks = [groupKey];\r\n break;\r\n case EnumCashflowSummarizedAggregationLevel.AccountGroup:\r\n params.AccountGroups = [+groupKey];\r\n break;\r\n case EnumCashflowSummarizedAggregationLevel.BookingAccount:\r\n params.BookingAccounts = [+groupKey];\r\n break;\r\n case EnumCashflowSummarizedAggregationLevel.BankGroup:\r\n params.BankGroups = [groupKey];\r\n break;\r\n case EnumCashflowSummarizedAggregationLevel.Account:\r\n params.Accounts = [+groupKey];\r\n break;\r\n case EnumCashflowSummarizedAggregationLevel.Currency:\r\n params.FilterCurrency = groupKey;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n this.Navigate([\"/pages/cashflow-report-grid\"], params, false, true);\r\n }\r\n\r\n private getGroupKeyByColumnIndex(columnIndex: number) {\r\n const groupIndex = Math.floor((columnIndex - 1) / 3);\r\n return this.SummarizedGroups[groupIndex]?.GroupKey;\r\n }\r\n\r\n override OnInitComponentFinished() {\r\n super.OnInitComponentFinished();\r\n this.G.grid.columnHidingEnabled = false;\r\n }\r\n\r\n OnInitialized(e: any) {\r\n e.component.option(\"scrolling.timeout\", 0);\r\n }\r\n\r\n getFieldName(fieldName: string, groupId: number) {\r\n return `${fieldName}${groupId}`;\r\n }\r\n\r\n GetBankIcon(bank: string) {\r\n const urlPathPrefix = 'assets/projects/kraken/';\r\n const bankItem = this.LISTITEMX('Banks', bank) as any;\r\n return bankItem && bankItem.Icon && `${urlPathPrefix}${bankItem.Icon}`;\r\n }\r\n\r\n CreateHideZeroValue = memoize((colName: string) => {\r\n return (rowData) => {\r\n if (rowData[colName] == 0) {\r\n return \"\";\r\n }\r\n return rowData[colName];\r\n };\r\n });\r\n\r\n HeaderCellRender = memoize((group) => {\r\n return (el) => {\r\n const div = document.createElement('div');\r\n const div1 = document.createElement('div');\r\n div1.style.paddingTop = '6.5px';\r\n\r\n const createSpan = (value, label) => {\r\n const span = document.createElement('span');\r\n span.className = \"group-subtotal\";\r\n // @ts-ignore\r\n span.innerText = `${this.RC(label)}: ${formatNumber(value, this.F.NumberPrice)}${this.LISTITEMX('Currencies', this.Currency).Symbol}`;\r\n return span;\r\n };\r\n\r\n div1.appendChild(createSpan(group.Balance, 'lblCurrentBankBalance'));\r\n div1.appendChild(createSpan(group.CreditLimit, 'lblCreditLimit'));\r\n\r\n div.appendChild(div1);\r\n el.appendChild(div);\r\n };\r\n });\r\n\r\n customizeExcelCell = (options) => {\r\n const { gridCell, excelCell } = options;\r\n const { column, value, rowType } = gridCell;\r\n\r\n if (gridCell.rowType === 'header') {\r\n if (typeof column.caption === 'object') {\r\n excelCell.value = column.caption.GroupTitle;\r\n }\r\n }\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 if (rowType === 'data') {\r\n if (/Debit|Credit|Balance/.test(column.dataField) && value) {\r\n const excelFormat = this.GetFormatWithCurrency(this.F.NumberSum, true);\r\n const cellFormat = this.GetFormatWithCurrency(this.F.NumberSum);\r\n\r\n excelCell.numFmt = excelFormat;\r\n excelCell.value = parseNumberValue(value, cellFormat);\r\n }\r\n }\r\n };\r\n\r\n GetFormatWithCurrency = (format = this.F.NumberSum, forExcel = false) => {\r\n const symbol = this.CurrencySymbol;\r\n const formats = format.split(';');\r\n\r\n if (forExcel) {\r\n const [positiveFormat] = formats;\r\n return this.screenService.IsRTL()\r\n ? `${symbol} ${positiveFormat};${symbol} -${positiveFormat}`\r\n : `${positiveFormat} ${symbol}`;\r\n }\r\n\r\n // Put currency symbol to the end: 12 345.00 $; 12 345.00- $\r\n return formats.map(f => `${f} ${symbol}`).join(';');\r\n};\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n {{ 'lblCurrentBankBalance' | RC: THIS }}:\\r\\n {{ info.column.caption.Balance | formatPriceWithCurrency: Currency }}\\r\\n \\r\\n \\r\\n {{ 'lblCreditLimit' | RC: THIS }}:\\r\\n {{ info.column.caption.CreditLimit | formatPriceWithCurrency: Currency }}\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n {{ cell.data.DatePeriodTitle }}\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n {{ cell.value | formatNumberSum }}\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n {{ cell.value | formatPriceWithCurrency: Currency }}\\r\\n
\\r\\n
\";","import { Component, Input } from '@angular/core';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { CashflowReportSummarizedGroup } from '../../../_proxy/entities/cashflowreportsummarizedgroup.entity';\r\nimport { EnumCashflowSummarizedAggregationLevel, EnumSide, EnumSummaryLevel } from '../../../_proxy/enums';\r\nimport { CashflowReportParams } from '../../../_proxy/params/cashflowreport.param';\r\nimport { BaseCashflowGridComponent } from '../../base-cashflow-grid/base-cashflow-grid.component';\r\nimport { Column } from 'devextreme/ui/data_grid';\r\nimport { Format, formatNumber, parseNumber } from 'devextreme/localization';\r\nimport { CashflowService } from '@kraken/services/cashflow.service';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\n\r\nclass State extends BaseState {\r\n CurrencySymbol: string;\r\n SummarizedGroups: CashflowReportSummarizedGroup[];\r\n}\r\nconst parseDatePeriod = (period: string) => {\r\n const [dateFrom, dateTo] = period.split('@');\r\n\r\n return {\r\n DateFrom: new Date(dateFrom),\r\n DateTo: new Date(dateTo)\r\n };\r\n};\r\nconst stringifyDatePeriod = (DateFrom: Date, DateTo: Date) => `${DateFrom.toDateString()}@${DateTo.toDateString()}`;\r\n\r\nconst forEachDatePeriod = (rows, cb) => {\r\n rows.forEach((row, index) => {\r\n cb(row, stringifyDatePeriod(row.DateFrom, row.DateTo), index);\r\n });\r\n};\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-cashflow-category-grid',\r\n templateUrl: './cashflow-category-grid.component.html',\r\n styleUrls: ['./cashflow-category-grid.component.scss']\r\n\r\n})\r\nexport class CashflowCategoryGridComponent extends BaseCashflowGridComponent {\r\n @Input() Params: CashflowReportParams;\r\n @Input() AggregationLevel: EnumCashflowSummarizedAggregationLevel;\r\n @Input() SummaryLevel: EnumSummaryLevel;\r\n @Input() MinDate: Date;\r\n\r\n @Input() set Currency(v) {\r\n this.State.CurrencySymbol = ((this.LISTITEMX('Currencies', v) as any).Symbol) as string;\r\n }\r\n @Input() set SummarizedGroups(v: CashflowReportSummarizedGroup[]) {\r\n this.State.SummarizedGroups = v;\r\n this.PrepareRows(v);\r\n }\r\n @Input() set ShowParentCategories(v: boolean) {\r\n this.PrepareRows(this.State.SummarizedGroups);\r\n }\r\n\r\n constructor(A: ServiceBagService, public cashflowService: CashflowService, private screenService: ScreenService) {\r\n super(A, 'CashflowCategoryGridComponent', CashflowReportSummarizedGroup, State);\r\n this.BindHandler('OnGoToDetailedGrid');\r\n }\r\n\r\n CreditDebitRow;\r\n BalanceRow;\r\n Columns = new Map();\r\n\r\n dataSource = [];\r\n\r\n protected override GetGridRowContextMenu(e?: any) {\r\n if (!e) return [{ text: 'Mock', visible: true, onClick: () => null }];\r\n const totalKey = this.Columns.keys().next().value;\r\n const { GroupKey: groupKey, [totalKey]: total, rowType, type, CategoryID } = e.row.data;\r\n if (rowType) return [];\r\n const { OrganizationID } = this.Params;\r\n const params: any = {\r\n OrganizationID,\r\n CompanyID: this.Params.Companies?.length === 1 ? this.Params.Companies[0] : undefined,\r\n BookingAccountID: groupKey,\r\n TransactionCategoryName: groupKey,\r\n MinDate: this.MinDate,\r\n };\r\n\r\n const menuItems = [];\r\n\r\n if (type === 'credit') {\r\n params.Credit = total;\r\n menuItems.push(this.contextMenuItems.newIncome(params));\r\n }\r\n\r\n if (type === 'debit') {\r\n params.Debit = total;\r\n menuItems.push(this.contextMenuItems.newExpense(params));\r\n }\r\n\r\n if (CategoryID > 0) menuItems.push(this.contextMenuItems.editCategory(CategoryID));\r\n\r\n if (this.SummaryLevel === EnumSummaryLevel.Day) {\r\n // params.Date = parseDatePeriod(e.column.dataField).DateTo;\r\n }\r\n\r\n return menuItems;\r\n }\r\n\r\n PrepareRows(v: CashflowReportSummarizedGroup[]) {\r\n if (!v || v.length < 2) {\r\n this.Columns = new Map();\r\n this.BalanceRow = null;\r\n this.CreditDebitRow = null;\r\n this.dataSource = [];\r\n return;\r\n }\r\n\r\n this.Columns = new Map();\r\n\r\n const openingBalanceRow = {\r\n GroupTitle: this.RC('lblOpeningBalance'),\r\n rowType: 'opening-balance'\r\n };\r\n const debitTotalRow = {\r\n GroupTitle: this.RC('lblTotalExpenses'),\r\n rowType: 'total-debit',\r\n type: 'debit'\r\n };\r\n const creditTotalRow = {\r\n GroupTitle: this.RC('lblTotalIncomes'),\r\n rowType: 'total-credit',\r\n type: 'credit'\r\n };\r\n const debitRows = [];\r\n const creditRows = [];\r\n const groups = v.slice(0, v.length - 1);\r\n const summaryRow = v.at(-1);\r\n const creditDebitRow = {\r\n GroupTitle: this.RC('lblDebitCredit'),\r\n rowType: 'total-debit-credit'\r\n };\r\n const balanceRow = {\r\n GroupTitle: this.RC('lblBalance'),\r\n rowType: 'total-balance',\r\n type: 'balance'\r\n };\r\n\r\n // Calculate group rows\r\n groups.forEach(group => {\r\n const { GroupTitle, GroupKey, Bank, Balance, CreditLimit, Side, CategoryID, \r\n ParentCategoryID, ParentCategoryName, SortingOrder } = group;\r\n const groupRow = {\r\n GroupTitle,\r\n Bank,\r\n GroupBalance: Balance,\r\n GroupCreditLimit: CreditLimit,\r\n GroupKey,\r\n Side,\r\n type: '',\r\n CategoryID,\r\n ParentCategoryID,\r\n ParentCategoryName,\r\n ParentCategoryAndSide: `${ParentCategoryName} ${Side}`,\r\n SortingOrder\r\n };\r\n\r\n const hasTotal = group.Rows.length > 1;\r\n forEachDatePeriod(group.Rows, (row, datePeriod, index) => {\r\n if (row.DatePeriodTitle) {\r\n const isTotalCol = hasTotal && index === 0;\r\n this.Columns.set(datePeriod, {\r\n caption: row.DatePeriodTitle,\r\n cssClass: isTotalCol ? 'total-col' : '',\r\n width: isTotalCol ? 150 : undefined,\r\n minWidth: 100,\r\n fixed: isTotalCol,\r\n fixedPosition: this.A.Screen.IsRTL() ? 'right' : 'left'\r\n });\r\n }\r\n\r\n if (row.DebitCredit) {\r\n groupRow[datePeriod] = row.DebitCredit;\r\n\r\n if (Side === EnumSide.Income) {\r\n creditTotalRow[datePeriod] ??= 0;\r\n creditTotalRow[datePeriod] += row.DebitCredit;\r\n }\r\n\r\n if (Side === EnumSide.Expense) {\r\n debitTotalRow[datePeriod] ??= 0;\r\n debitTotalRow[datePeriod] += row.DebitCredit;\r\n }\r\n }\r\n });\r\n\r\n if (Side === EnumSide.Income) {\r\n groupRow.type = 'credit';\r\n creditRows.push(groupRow);\r\n }\r\n\r\n if (Side === EnumSide.Expense) {\r\n groupRow.type = 'debit';\r\n debitRows.push(groupRow);\r\n }\r\n });\r\n\r\n // Calculate summary rows\r\n const hasTotal = summaryRow.Rows.length > 1;\r\n forEachDatePeriod(summaryRow.Rows, (row, datePeriod, index) => {\r\n creditDebitRow[datePeriod] = row.DebitCredit;\r\n\r\n const isTotalCol = hasTotal && index === 0;\r\n openingBalanceRow[datePeriod] = isTotalCol ? null : row.Balance - row.DebitCredit;\r\n balanceRow[datePeriod] = isTotalCol ? null : row.Balance;\r\n });\r\n\r\n const rows = this.cashflowService.ShowParentCategories ? [] : [openingBalanceRow];\r\n\r\n if (creditRows.length) {\r\n rows.push(...creditRows);\r\n if (!this.cashflowService.ShowParentCategories) {\r\n rows.push(creditTotalRow);\r\n }\r\n }\r\n\r\n if (debitRows.length) {\r\n rows.push(...debitRows);\r\n if (!this.cashflowService.ShowParentCategories) {\r\n rows.push(debitTotalRow);\r\n }\r\n }\r\n\r\n this.CreditDebitRow = creditDebitRow;\r\n this.BalanceRow = balanceRow;\r\n\r\n this.dataSource = rows;\r\n }\r\n\r\n OnGoToDetailedGrid(e: any) {\r\n const { column, data, rowType } = e;\r\n\r\n if (!this.Params || !column || column.dataField === 'GroupTitle' || !column.dataField\r\n || column.dataField === 'ParentCategoryName') return;\r\n\r\n if (rowType === 'data') { \r\n const { type, GroupKey: groupKey } = data ?? {};\r\n\r\n const { DateFrom, DateTo } = parseDatePeriod(column.dataField);\r\n const params = { ...this.Params, DateFrom, DateTo, type, DatePeriodOnly: true };\r\n\r\n if (groupKey && groupKey !== 'summary') {\r\n params.Categories = [groupKey];\r\n }\r\n\r\n this.Navigate(['/pages/cashflow-report-grid'], params, false, true);\r\n }\r\n\r\n if (rowType === 'group' && column.name === 'total-col'&& data.items?.length > 0) {\r\n const type = data.items[0].Side === EnumSide.Income ? 'credit' : 'debit';\r\n\r\n const { DateFrom, DateTo } = parseDatePeriod(column.dataField);\r\n const params = { ...this.Params, DateFrom, DateTo, type, DatePeriodOnly: true };\r\n\r\n const categories = data.items.map((item) => item.GroupKey);\r\n\r\n if (categories.length > 0) {\r\n params.Categories = categories.filter((item) => item !== 'summary');\r\n }\r\n\r\n this.Navigate(['/pages/cashflow-report-grid'], params, false, true);\r\n }\r\n }\r\n\r\n OnCellPrepared(e) {\r\n const { rowType, column, cellElement, data } = e;\r\n\r\n if (rowType === 'data' && column.index === 1 && data.type) {\r\n cellElement.classList.add(data.type);\r\n }\r\n\r\n if (rowType === 'totalFooter' && column.index > 1) {\r\n const { summaryItems } = e;\r\n if (!summaryItems) return;\r\n\r\n const [, balance] = summaryItems.map(item => item.value);\r\n\r\n if (typeof balance !== 'string') return;\r\n\r\n cellElement.classList.add(balance.includes('-') ? 'debit' : 'credit');\r\n }\r\n }\r\n\r\n OnRowPrepared(e) {\r\n const { rowType, data, rowIndex } = e;\r\n if (rowType !== 'data') return;\r\n\r\n if (data.rowType) {\r\n e.rowElement.classList.add(`${data.rowType}`);\r\n }\r\n }\r\n\r\n override OnInitComponentFinished() {\r\n super.OnInitComponentFinished();\r\n this.G.grid.columnHidingEnabled = false;\r\n }\r\n\r\n OnInitialized(e: any) {\r\n e.component.option('scrolling.timeout', 0);\r\n }\r\n\r\n GetBankIcon(bank: string) {\r\n const urlPathPrefix = 'assets/projects/kraken/';\r\n const bankItem = this.LISTITEMX('Banks', bank) as any;\r\n return bankItem && bankItem.Icon && `${urlPathPrefix}${bankItem.Icon}`;\r\n }\r\n\r\n originalOrder() {\r\n return 1;\r\n }\r\n\r\n CalculateCustomSummary = (options) => {\r\n const { name, summaryProcess } = options;\r\n if (!name) return;\r\n\r\n const [type, colName] = name.split('|');\r\n if (type !== 'balance' && type !== 'credit/debit') return;\r\n\r\n if (summaryProcess === 'finalize') {\r\n const row = type === 'balance' ? this.BalanceRow : this.CreditDebitRow;\r\n const value = row[colName];\r\n options.totalValue = value ? `${formatNumber(value, this.F.NumberPrice)} ${this.State.CurrencySymbol}` : '-';\r\n }\r\n };\r\n\r\n customizeExcelCell = (options) => {\r\n const { gridCell, excelCell } = options;\r\n const { column, value, rowType } = gridCell;\r\n\r\n const cellFormat = this.GetFormatWithCurrency(this.F.NumberSum);\r\n const excelFormat = this.GetFormatWithCurrency(this.F.NumberSum, true);\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 if (rowType === 'data' || rowType === 'totalFooter') {\r\n if (this.Columns.has(column.dataField) && value && value != '-') {\r\n excelCell.numFmt = excelFormat;\r\n excelCell.value = parseNumberValue(value, cellFormat);\r\n }\r\n }\r\n };\r\n\r\n GetFormatWithCurrency = (format = this.F.NumberSum, forExcel = false) => {\r\n const symbol = this.State.CurrencySymbol;\r\n const formats = format.split(';');\r\n\r\n if (forExcel) {\r\n const [positiveFormat] = formats;\r\n return this.screenService.IsRTL()\r\n ? `${symbol} ${positiveFormat};${symbol} -${positiveFormat}`\r\n : `${positiveFormat} ${symbol}`;\r\n }\r\n\r\n // Put currency symbol to the end: 12 345.00 $; 12 345.00- $\r\n return formats.map(f => `${f} ${symbol}`).join(';');\r\n };\r\n\r\n CustomSortingFunction(rowData) {\r\n const column = this as any;\r\n \r\n let sortValue: string = '';\r\n if (rowData.ParentCategoryID < 1 || !rowData.ParentCategoryID) {\r\n sortValue = column.sortOrder == 'asc' ?\r\n 'aaa' + rowData.ParentCategoryID : 'zzz' + rowData.ParentCategoryID;\r\n if (rowData.ParentCategoryName == 'Other Incomes'){\r\n sortValue = 'aaz';\r\n } else if (rowData.ParentCategoryName == 'Other Expenses'){\r\n sortValue = 'zzz';\r\n } \r\n return sortValue + ';' + rowData.SortingOrder + ';' + rowData.ParentCategoryName;\r\n } else{\r\n sortValue = rowData.Side == EnumSide.Income ? 'aaa' : 'zza';\r\n return sortValue + ';' + rowData.SortingOrder + ';' + rowData.ParentCategoryAndSide;\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 {{ cell.value | formatPriceWithCurrency: this.State.CurrencySymbol }}\\r\\n
\\r\\n\\r\\n
\\r\\n {{data.value.split(\\\";\\\")[2]}}\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n {{ cell.value | formatPriceWithCurrency: this.State.CurrencySymbol }}\\r\\n
\\r\\n\\r\\n \\r\\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 { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { CashflowReportSummarizedGroup } from '../../../_proxy/entities/cashflowreportsummarizedgroup.entity';\r\nimport { EnumCashflowSummarizedAggregationLevel, EnumSide, EnumSummaryLevel } from '../../../_proxy/enums';\r\nimport { CashflowReportParams } from '../../../_proxy/params/cashflowreport.param';\r\nimport { BaseCashflowGridComponent } from '../../base-cashflow-grid/base-cashflow-grid.component';\r\nimport { Column } from 'devextreme/ui/data_grid';\r\nimport { Format, formatNumber, parseNumber } from 'devextreme/localization';\r\nimport { CashflowService } from '@kraken/services/cashflow.service';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\n\r\nclass State extends BaseState {\r\n CurrencySymbol: string;\r\n SummarizedGroups: CashflowReportSummarizedGroup[];\r\n}\r\nconst parseDatePeriod = (period: string) => {\r\n const [dateFrom, dateTo] = period.split('@');\r\n\r\n return {\r\n DateFrom: new Date(dateFrom),\r\n DateTo: new Date(dateTo)\r\n };\r\n};\r\nconst stringifyDatePeriod = (DateFrom: Date, DateTo: Date) => `${DateFrom.toDateString()}@${DateTo.toDateString()}`;\r\n\r\nconst forEachDatePeriod = (rows, cb) => {\r\n rows.forEach((row, index) => {\r\n cb(row, stringifyDatePeriod(row.DateFrom, row.DateTo), index);\r\n });\r\n};\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-cashflow-category-grid-new',\r\n templateUrl: './cashflow-category-grid-new.component.html',\r\n styleUrls: ['./cashflow-category-grid-new.component.scss']\r\n\r\n})\r\nexport class CashflowCategoryGridComponentNew extends BaseCashflowGridComponent {\r\n @Input() Params: CashflowReportParams;\r\n @Input() AggregationLevel: EnumCashflowSummarizedAggregationLevel;\r\n @Input() SummaryLevel: EnumSummaryLevel;\r\n @Input() MinDate: Date;\r\n\r\n @Input() set Currency(v) {\r\n this.State.CurrencySymbol = ((this.LISTITEMX('Currencies', v) as any).Symbol) as string;\r\n }\r\n @Input() set SummarizedGroups(v: CashflowReportSummarizedGroup[]) {\r\n this.State.SummarizedGroups = v;\r\n this.PrepareRows(v);\r\n }\r\n @Input() set ShowParentCategories(v: boolean) {\r\n this.PrepareRows(this.State.SummarizedGroups);\r\n }\r\n\r\n constructor(A: ServiceBagService, public cashflowService: CashflowService, private screenService: ScreenService) {\r\n super(A, 'CashflowCategoryGridComponentNew', CashflowReportSummarizedGroup, State);\r\n this.BindHandler('OnGoToDetailedGrid');\r\n }\r\n\r\n CreditDebitRow;\r\n BalanceRow;\r\n Columns = new Map();\r\n\r\n dataSource = [];\r\n\r\n protected override GetGridRowContextMenu(e?: any) {\r\n if (!e) return [{ text: 'Mock', visible: true, onClick: () => null }];\r\n const totalKey = this.Columns.keys().next().value;\r\n const { GroupKey: groupKey, [totalKey]: total, rowType, type, CategoryID } = e.row.data;\r\n if (rowType) return [];\r\n const { OrganizationID } = this.Params;\r\n const params: any = {\r\n OrganizationID,\r\n CompanyID: this.Params.Companies?.length === 1 ? this.Params.Companies[0] : undefined,\r\n BookingAccountID: groupKey,\r\n TransactionCategoryName: groupKey,\r\n MinDate: this.MinDate,\r\n };\r\n\r\n const menuItems = [];\r\n\r\n if (type === 'credit') {\r\n params.Credit = total;\r\n menuItems.push(this.contextMenuItems.newIncome(params));\r\n }\r\n\r\n if (type === 'debit') {\r\n params.Debit = total;\r\n menuItems.push(this.contextMenuItems.newExpense(params));\r\n }\r\n\r\n if (CategoryID > 0) menuItems.push(this.contextMenuItems.editCategory(CategoryID));\r\n\r\n if (this.SummaryLevel === EnumSummaryLevel.Day) {\r\n // params.Date = parseDatePeriod(e.column.dataField).DateTo;\r\n }\r\n\r\n return menuItems;\r\n }\r\n\r\n PrepareRows(v: CashflowReportSummarizedGroup[]) {\r\n if (!v || v.length < 2) {\r\n this.Columns = new Map();\r\n this.BalanceRow = null;\r\n this.CreditDebitRow = null;\r\n this.dataSource = [];\r\n return;\r\n }\r\n\r\n this.Columns = new Map();\r\n\r\n const openingBalanceRow = {\r\n GroupTitle: this.RC('lblOpeningBalance'),\r\n rowType: 'opening-balance'\r\n };\r\n const debitTotalRow = {\r\n GroupTitle: this.RC('lblTotalExpenses'),\r\n rowType: 'total-debit',\r\n type: 'debit'\r\n };\r\n const creditTotalRow = {\r\n GroupTitle: this.RC('lblTotalIncomes'),\r\n rowType: 'total-credit',\r\n type: 'credit'\r\n };\r\n const debitRows = [];\r\n const creditRows = [];\r\n const groups = v.slice(0, v.length - 1);\r\n const summaryRow = v.at(-1);\r\n const creditDebitRow = {\r\n GroupTitle: this.RC('lblDebitCredit'),\r\n rowType: 'total-debit-credit'\r\n };\r\n const balanceRow = {\r\n GroupTitle: this.RC('lblBalance'),\r\n rowType: 'total-balance',\r\n type: 'balance'\r\n };\r\n\r\n // Calculate group rows\r\n groups.forEach(group => {\r\n const { GroupTitle, GroupKey, Bank, Balance, CreditLimit, Side, CategoryID, ParentCategoryID, ParentCategoryName } = group;\r\n const groupRow = {\r\n GroupTitle,\r\n Bank,\r\n GroupBalance: Balance,\r\n GroupCreditLimit: CreditLimit,\r\n GroupKey,\r\n Side,\r\n type: '',\r\n CategoryID,\r\n ParentCategoryID,\r\n ParentCategoryName,\r\n ParentCategoryAndSide: `${ParentCategoryName} ${Side}`\r\n };\r\n\r\n const hasTotal = group.Rows.length > 1;\r\n forEachDatePeriod(group.Rows, (row, datePeriod, index) => {\r\n if (row.DatePeriodTitle) {\r\n const isTotalCol = hasTotal && index === 0;\r\n this.Columns.set(datePeriod, {\r\n caption: row.DatePeriodTitle,\r\n cssClass: isTotalCol ? 'total-col' : '',\r\n width: isTotalCol ? 150 : undefined,\r\n minWidth: 100,\r\n fixed: isTotalCol,\r\n fixedPosition: this.A.Screen.IsRTL() ? 'right' : 'left'\r\n });\r\n }\r\n\r\n if (row.DebitCredit) {\r\n groupRow[datePeriod] = row.DebitCredit;\r\n\r\n if (Side === EnumSide.Income) {\r\n creditTotalRow[datePeriod] ??= 0;\r\n creditTotalRow[datePeriod] += row.DebitCredit;\r\n }\r\n\r\n if (Side === EnumSide.Expense) {\r\n debitTotalRow[datePeriod] ??= 0;\r\n debitTotalRow[datePeriod] += row.DebitCredit;\r\n }\r\n }\r\n });\r\n\r\n if (Side === EnumSide.Income) {\r\n groupRow.type = 'credit';\r\n creditRows.push(groupRow);\r\n }\r\n\r\n if (Side === EnumSide.Expense) {\r\n groupRow.type = 'debit';\r\n debitRows.push(groupRow);\r\n }\r\n });\r\n\r\n // Calculate summary rows\r\n const hasTotal = summaryRow.Rows.length > 1;\r\n forEachDatePeriod(summaryRow.Rows, (row, datePeriod, index) => {\r\n creditDebitRow[datePeriod] = row.DebitCredit;\r\n\r\n const isTotalCol = hasTotal && index === 0;\r\n openingBalanceRow[datePeriod] = isTotalCol ? null : row.Balance - row.DebitCredit;\r\n balanceRow[datePeriod] = isTotalCol ? null : row.Balance;\r\n });\r\n\r\n const rows = [];\r\n\r\n if (creditRows.length) {\r\n rows.push(...creditRows);\r\n // if (!this.cashflowService.ShowParentCategories) {\r\n // rows.push(creditTotalRow);\r\n // }\r\n }\r\n\r\n if (debitRows.length) {\r\n rows.push(...debitRows);\r\n // if (!this.cashflowService.ShowParentCategories) {\r\n // rows.push(debitTotalRow);\r\n // }\r\n }\r\n\r\n this.CreditDebitRow = creditDebitRow;\r\n this.BalanceRow = balanceRow;\r\n\r\n this.dataSource = rows;\r\n }\r\n\r\n OnGoToDetailedGrid(e: any) {\r\n const { column, data, rowType } = e;\r\n\r\n if (!this.Params || !column || column.dataField === 'GroupTitle' || !column.dataField\r\n || column.dataField === 'ParentCategoryName') return;\r\n\r\n // data row \r\n if (rowType === 'data') { \r\n const { type, GroupKey: groupKey } = data ?? {};\r\n\r\n const { DateFrom, DateTo } = parseDatePeriod(column.dataField);\r\n const params = { ...this.Params, DateFrom, DateTo, type, DatePeriodOnly: true };\r\n\r\n if (groupKey && groupKey !== 'summary') {\r\n params.Categories = [groupKey];\r\n }\r\n\r\n this.Navigate(['/pages/cashflow-report-grid'], params, false, true);\r\n return;\r\n }\r\n\r\n // first group\r\n if (rowType === 'group' && column.name === 'total-col'&& data.items?.length > 0 && e.key.length === 1\r\n && (data.items[0].items?.length > 0 || data.items[0].collapsedItems?.length > 0 )\r\n ) {\r\n\r\n let type;\r\n if (data.key === EnumSide.Income || data.key === EnumSide.Expense) {\r\n type = data.key === EnumSide.Income ? 'credit' : 'debit';\r\n }\r\n\r\n const { DateFrom, DateTo } = parseDatePeriod(column.dataField);\r\n const params = { ...this.Params, DateFrom, DateTo, type, DatePeriodOnly: true };\r\n\r\n const categories = data.items.map((groupedRow) => groupedRow.items?.map((item) => item.GroupKey)).flat();\r\n const colapsed = data.items.map((groupedRow) => groupedRow.collapsedItems?.map((item) => item.GroupKey)).flat();\r\n\r\n categories.push(...colapsed);\r\n\r\n if (categories.length > 0) {\r\n params.Categories = categories.filter((item) => item !== 'summary');\r\n }\r\n\r\n this.Navigate(['/pages/cashflow-report-grid'], params, false, true);\r\n return;\r\n }\r\n\r\n // first group collapsed\r\n if (rowType === 'group' && column.name === 'total-col'&& data.collapsedItems?.length > 0 && e.key.length === 1\r\n && (data.collapsedItems[0].items?.length > 0 || data.collapsedItems[0].collapsedItems?.length > 0)) {\r\n\r\n let type;\r\n if (data.key === EnumSide.Income || data.key === EnumSide.Expense) {\r\n type = data.key === EnumSide.Income ? 'credit' : 'debit';\r\n }\r\n\r\n const { DateFrom, DateTo } = parseDatePeriod(column.dataField);\r\n const params = { ...this.Params, DateFrom, DateTo, type, DatePeriodOnly: true };\r\n\r\n const categories = data.collapsedItems?.map((groupedRow) => groupedRow.items?.map((item) => item.GroupKey)).flat();\r\n const colapsed = data.collapsedItems?.map((groupedRow) => groupedRow.collapsedItems?.map((item) => item.GroupKey)).flat();\r\n\r\n categories.push(...colapsed);\r\n\r\n if (categories.length > 0) {\r\n params.Categories = categories.filter((item) => item !== 'summary');\r\n }\r\n\r\n this.Navigate(['/pages/cashflow-report-grid'], params, false, true);\r\n return;\r\n }\r\n\r\n // second group collapsed\r\n if (rowType === 'group' && column.name === 'total-col'&& data.collapsedItems?.length > 0 ) {\r\n const type = data.collapsedItems[0].Side === EnumSide.Income ? 'credit' : 'debit';\r\n\r\n const { DateFrom, DateTo } = parseDatePeriod(column.dataField);\r\n const params = { ...this.Params, DateFrom, DateTo, type, DatePeriodOnly: true };\r\n\r\n const categories = data.collapsedItems.map((item) => item.GroupKey);\r\n\r\n if (categories.length > 0) {\r\n params.Categories = categories.filter((item) => item !== 'summary');\r\n }\r\n\r\n this.Navigate(['/pages/cashflow-report-grid'], params, false, true);\r\n return;\r\n }\r\n\r\n // second group\r\n if (rowType === 'group' && column.name === 'total-col'&& data.items?.length > 0 \r\n && data.items[0].Side !== null ) {\r\n const type = data.items[0].Side === EnumSide.Income ? 'credit' : 'debit';\r\n\r\n const { DateFrom, DateTo } = parseDatePeriod(column.dataField);\r\n const params = { ...this.Params, DateFrom, DateTo, type, DatePeriodOnly: true };\r\n\r\n const categories = data.items.map((item) => item.GroupKey);\r\n\r\n if (categories.length > 0) {\r\n params.Categories = categories.filter((item) => item !== 'summary');\r\n }\r\n\r\n this.Navigate(['/pages/cashflow-report-grid'], params, false, true);\r\n return;\r\n }\r\n }\r\n\r\n OnCellPrepared(e) {\r\n const { rowType, column, cellElement, data } = e;\r\n\r\n if (rowType === 'data' && column.name === 'GroupTitle' && data.type) {\r\n cellElement.classList.add(data.type);\r\n }\r\n\r\n if (rowType === 'totalFooter' && column.index > 1) {\r\n const { summaryItems } = e;\r\n if (!summaryItems) return;\r\n\r\n const [, balance] = summaryItems.map(item => item.value);\r\n\r\n if (typeof balance !== 'string') return;\r\n\r\n cellElement.classList.add(balance.includes('-') ? 'debit' : 'credit');\r\n }\r\n }\r\n\r\n OnRowPrepared(e) {\r\n const { rowType, data, rowIndex } = e;\r\n if (rowType !== 'data') return;\r\n\r\n if (data.rowType) {\r\n e.rowElement.classList.add(`${data.rowType}`);\r\n }\r\n }\r\n\r\n override OnInitComponentFinished() {\r\n // super.OnInitComponentFinished();\r\n }\r\n\r\n OnInitialized(e: any) {\r\n e.component.option('scrolling.timeout', 0);\r\n }\r\n\r\n GetBankIcon(bank: string) {\r\n const urlPathPrefix = 'assets/projects/kraken/';\r\n const bankItem = this.LISTITEMX('Banks', bank) as any;\r\n return bankItem && bankItem.Icon && `${urlPathPrefix}${bankItem.Icon}`;\r\n }\r\n\r\n originalOrder() {\r\n return 1;\r\n }\r\n\r\n CalculateCustomSummary = (options) => {\r\n const { name, summaryProcess } = options;\r\n if (!name) return;\r\n\r\n const [type, colName] = name.split('|');\r\n if (type !== 'balance' && type !== 'credit/debit') return;\r\n\r\n if (summaryProcess === 'finalize') {\r\n const row = type === 'balance' ? this.BalanceRow : this.CreditDebitRow;\r\n const value = row[colName];\r\n options.totalValue = value ? `${formatNumber(value, this.F.NumberPrice)} ${this.State.CurrencySymbol}` : '-';\r\n }\r\n };\r\n\r\n customizeExcelCell = (options) => {\r\n const { gridCell, excelCell } = options;\r\n const { column, value, rowType } = gridCell;\r\n\r\n const cellFormat = this.GetFormatWithCurrency(this.F.NumberSum);\r\n const excelFormat = this.GetFormatWithCurrency(this.F.NumberSum, true);\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 if (rowType === 'data' || rowType === 'totalFooter') {\r\n if (this.Columns.has(column.dataField) && value && value != '-') {\r\n excelCell.numFmt = excelFormat;\r\n excelCell.value = parseNumberValue(value, cellFormat);\r\n }\r\n }\r\n };\r\n\r\n GetFormatWithCurrency = (format = this.F.NumberSum, forExcel = false) => {\r\n const symbol = this.State.CurrencySymbol;\r\n const formats = format.split(';');\r\n\r\n if (forExcel) {\r\n const [positiveFormat] = formats;\r\n return this.screenService.IsRTL()\r\n ? `${symbol} ${positiveFormat};${symbol} -${positiveFormat}`\r\n : `${positiveFormat} ${symbol}`;\r\n }\r\n\r\n // Put currency symbol to the end: 12 345.00 $; 12 345.00- $\r\n return formats.map(f => `${f} ${symbol}`).join(';');\r\n };\r\n\r\n CustomSortingFunction(rowData) {\r\n const column = this as any;\r\n let sortValue: string = '';\r\n if (rowData.ParentCategoryID < 1 || !rowData.ParentCategoryID) {\r\n sortValue = column.sortOrder == 'asc' ?\r\n 'aaa' + rowData.ParentCategoryID : 'zzz' + rowData.ParentCategoryID;\r\n if (rowData.ParentCategoryName == 'Other Incomes'){\r\n sortValue = 'aaz';\r\n } else if (rowData.ParentCategoryName == 'Other Expenses'){\r\n sortValue = 'zzz';\r\n } \r\n return sortValue + ';' + rowData.ParentCategoryName;\r\n } else{\r\n sortValue = rowData.Side == EnumSide.Income ? 'aaa' : 'zza';\r\n return sortValue + ';' + rowData.ParentCategoryAndSide;\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 {{data.displayValue}}\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n {{ cell.value | formatPriceWithCurrency: this.State.CurrencySymbol }}\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\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 { QuickFilterSettings } from '@kraken/components/quick-filter/quick-filter.component';\r\nimport { BaseReportComponent, BaseReportState } from '@kraken/pages/base-report/base-report.component';\r\nimport { AccountListParams } from '@kraken/_proxy/params/accountlist.param';\r\nimport { BookingAccountListParams } from '@kraken/_proxy/params/bookingaccountlist.param';\r\nimport { CompanyListParams } from '@kraken/_proxy/params/companylist.param';\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 } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { DateHelpers } from '@m4u-angular/core/helpers/DateHelpers';\r\nimport { Globals } from '../../_globals';\r\nimport { LoanPaymentEndpoint } from '../../_proxy/endpoints/loanpayment.endpoint';\r\nimport { LoanPayment } from '../../_proxy/entities/loanpayment.entity';\r\nimport { EnumAmortizationType, EnumBookingAccountSubtypes, EnumInterestType, EnumLoanSide, EnumLoanStatus } from '../../_proxy/enums';\r\nimport { LoanPaymentReportParams } from '../../_proxy/params/loanpaymentreport.param';\r\nimport { LoanRevaluationReportGridComponent } from './grid/loan-revaluation-report-grid.component';\r\nimport { FilterSettings } from '../../components/filter/filter.component';\r\nimport { LocalStorageService } from '@m4u-angular/core/framework/local-storage.service';\r\nimport { Loan } from '@kraken/_proxy/entities/loan.entity';\r\n\r\nclass State extends BaseReportState {\r\n Sides: EnumLoanSide[] = [];\r\n InterestTypes: EnumInterestType[] = [];\r\n FundingDateFrom: Date;\r\n FundingDateTo: Date;\r\n GroupLevelItems;\r\n CalculatePastPostPayments: boolean = false;\r\n ShowLoansEndedBeforeRevaluationDate: boolean = false;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n templateUrl: './loan-revaluation-report.component.html'\r\n})\r\nexport class LoanRevaluationReportComponent extends BaseReportComponent\r\n{\r\n @ViewChild('reportGrid') reportGrid: LoanRevaluationReportGridComponent;\r\n\r\n constructor(A: ServiceBagService, private endpoint: LoanPaymentEndpoint, private localStorageService: LocalStorageService) {\r\n super(A, 'LoanRevaluationReportComponent', State);\r\n }\r\n\r\n protected override OnGetCustomFilterSettings(): FilterSettings {\r\n return {\r\n Company: { IsVisible: true, IsMultiple: true, Params: this.GetCompanyParams },\r\n Account: { IsVisible: true, IsMultiple: true, Params: this.GetAccountParams },\r\n BookingAccount: { IsVisible: true, IsMultiple: true, Params: this.GetBookingAccountParams },\r\n AccountGroup: { IsVisible: true, IsMultiple: true },\r\n IsDateVisible: true,\r\n MaxReportDate: undefined\r\n } as FilterSettings;\r\n }\r\n\r\n private GetCompanyParams = () => {\r\n return {\r\n BookingAccountSubtypes: [EnumBookingAccountSubtypes.Loans],\r\n } as CompanyListParams;\r\n };\r\n\r\n private GetAccountParams = () => {\r\n return {\r\n BookingAccountSubtypes: [EnumBookingAccountSubtypes.Loans],\r\n } as AccountListParams;\r\n };\r\n\r\n private GetBookingAccountParams = () => {\r\n return {\r\n BookingAccountSubtypes: [EnumBookingAccountSubtypes.Loans]\r\n } as BookingAccountListParams;\r\n };\r\n\r\n protected override OnGetCustomQuickFilterSettings(): QuickFilterSettings {\r\n return {\r\n Company: { IsVisible: true, IsMultiple: true },\r\n Account: { IsVisible: true, IsMultiple: true },\r\n IsDateVisible: true,\r\n MaxReportDate: undefined\r\n } as QuickFilterSettings;\r\n }\r\n\r\n override OnInitState() {\r\n this.InitializeState(true);\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n if (ExternalEntityType == LoanPayment) this.OnLoadData();\r\n if (ExternalEntityType == Loan) this.OnLoadData();\r\n }\r\n\r\n public OnLoadData() {\r\n if (!Globals.OrganizationID) return;\r\n \r\n this.State.IsLoading = true;\r\n\r\n const params = this.GetParams();\r\n params.Statuses = [EnumLoanStatus.Funded, EnumLoanStatus.Finished, EnumLoanStatus.Recycled];\r\n params.AmortizationTypes = [EnumAmortizationType.Baloon, EnumAmortizationType.StraightLine, EnumAmortizationType.OnCall];\r\n params.LoanSides = this.State.Sides;\r\n params.InterestTypes = this.State.InterestTypes;\r\n params.FundingDateFrom = this.State.FundingDateFrom;\r\n params.FundingDateTo = this.State.FundingDateTo;\r\n params.CalculatePastPostPayments = this.State.CalculatePastPostPayments;\r\n params.ShowLoansEndedBeforeRevaluationDate = this.State.ShowLoansEndedBeforeRevaluationDate;\r\n\r\n this.DataSources['LoanPayments'] = new DataSourceCustomAction(\r\n (options: DataLoadOptions) => this.endpoint.ListLoanPaymentsTillDate(params), undefined, ()=>{\r\n this.State.IsLoading = false;\r\n });\r\n }\r\n\r\n protected override OnClearFilter(): void {\r\n this.InitializeState(false);\r\n super.OnClearFilter();\r\n }\r\n\r\n protected override IsExpandCollapseVisible() {\r\n return super.IsExpandCollapseVisible() && !!this.State.GroupLevelItems.length;\r\n }\r\n\r\n OnGroupingChange({ items, gridInst }) {\r\n this.State.GroupLevelItems = items.map(item => ({\r\n text: item.caption,\r\n value: item.groupIndex + 1\r\n }));\r\n\r\n if (items.length) {\r\n this.State.GroupLevelItems.unshift({\r\n text: this.RC('lblFlatMode'),\r\n value: -1,\r\n onClick() {\r\n gridInst.clearGrouping();\r\n }\r\n });\r\n\r\n this.State.GroupLevelItems.push({\r\n text: this.RC('lblExpandAll'),\r\n value: Infinity\r\n });\r\n }\r\n }\r\n\r\n OnCalculatePastPostPaymentsChange(e: any) {\r\n console.log(e);\r\n this.localStorageService.SetItem('CalculatePastPostPayments', e.value);\r\n }\r\n\r\n OnShowLoansEndedBeforeRevaluationDateChange(e: any) {\r\n this.localStorageService.SetItem('ShowLoansEndedBeforeRevaluationDate', e.value);\r\n }\r\n\r\n private InitializeState(loadLocalStorageParams: boolean) {\r\n this.State.Sides = this.State.InterestTypes = [];\r\n this.State.FundingDateFrom = this.State.FundingDateTo = undefined;\r\n this.State.GroupLevelItems = [];\r\n\r\n if(loadLocalStorageParams) {\r\n this.State.CalculatePastPostPayments = this.localStorageService.GetItem('CalculatePastPostPayments') == 'true';\r\n } else {\r\n this.State.CalculatePastPostPayments = 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 \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\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 { 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 { IndexEndpoint } from '../../../_proxy/endpoints/index.endpoint';\r\nimport { Index } from '../../../_proxy/entities/index.entity';\r\nimport { Loan } from '../../../_proxy/entities/loan.entity';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { InterestEndpoint } from '@kraken/_proxy/endpoints/interest.endpoint';\r\nimport { Interest } from '@kraken/_proxy/entities/interest.entity';\r\nimport { formatDate } from 'devextreme/localization';\r\nimport { SysGlobals } from '@m4u-angular/core/framework/sysglobals';\r\nimport dxDataGrid from 'devextreme/ui/data_grid';\r\nimport { LoanPaymentReportItem } from '@kraken/_proxy/entities/loanpaymentreportitem.entity';\r\nimport { ContextMenuElement } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { LoanEndpoint } from '@kraken/_proxy/endpoints/loan.endpoint';\r\nimport { EnumLoanHandlingType } from '@kraken/_proxy/enums';\r\n\r\nclass State extends BaseState {\r\n InterestIndexes: Interest[] = [];\r\n LinkageIndexes: Index[] = [];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-loan-revaluation-report-grid',\r\n styleUrls: ['./loan-revaluation-report-grid.component.scss'],\r\n templateUrl: './loan-revaluation-report-grid.component.html'\r\n})\r\nexport class LoanRevaluationReportGridComponent extends BaseGridComponent{\r\n constructor(A: ServiceBagService,\r\n private indexEndpoint: IndexEndpoint,\r\n private interestEndpoint: InterestEndpoint,\r\n private screenService: ScreenService,\r\n private loanEndpoint: LoanEndpoint) {\r\n super(A, 'LoanRevaluationReportGridComponent', LoanPaymentReportItem, State);\r\n this.BindHandler('GetLinkedInterest');\r\n }\r\n\r\n @Input() IsLoading: boolean = false;\r\n @Output() OnGroupingChange = new EventEmitter();\r\n\r\n OnNavigate(e) {\r\n if (!e.data?.Loan) return;\r\n this.Navigate(['/pages/loan', e.data.Loan.EntryID], null, false, true);\r\n }\r\n \r\n OnRowPrepared(row: any): void {\r\n if (row.rowType === 'data') {\r\n\r\n if (!row.data.LoanPayment.IsOpen) {\r\n row.rowElement.classList.add('paid');\r\n }\r\n }\r\n }\r\n\r\n override OnInitComponent() {\r\n this.LoadIndexes();\r\n }\r\n\r\n LoadIndexes() {\r\n this.Do(this.interestEndpoint.GetList(), false, (response) => {\r\n this.State.InterestIndexes = response.Entities;\r\n });\r\n this.Do(this.indexEndpoint.GetList(), false, (response) => {\r\n this.State.LinkageIndexes = response.Entities;\r\n });\r\n }\r\n\r\n GetLinkedInterest(data: Loan) {\r\n if (!data.InterestLinkageIndexID) return;\r\n const linkedInterest = this.State.InterestIndexes.find(item => item.EntryID === data.InterestLinkageIndexID);\r\n if (!linkedInterest) return;\r\n return linkedInterest.Name;\r\n }\r\n\r\n calculateYearGroupValue(rowData) {\r\n return formatDate(new Date(rowData.LoanPayment.AdjustedDate), 'yyyy')\r\n }\r\n\r\n CalculateMonthGroup(rowData) {\r\n const { Language } = SysGlobals\r\n const date = new Date(rowData.LoanPayment.AdjustedDate)\r\n const month = date.toLocaleString('default', { month: '2-digit' })\r\n const displayValue = date.toLocaleString(Language, { month: 'long' })\r\n\r\n return `${month};${displayValue}`\r\n }\r\n\r\n GetGroupCellCaption(value: string) {\r\n const [sortValue, caption] = value.split(';')\r\n return caption ? caption : sortValue\r\n }\r\n\r\n getGroupedColumns(grid: dxDataGrid) {\r\n return grid.getVisibleColumns().filter(c => c.groupIndex !== undefined).sort((a, b) => a.groupIndex - b.groupIndex)\r\n }\r\n\r\n OnOptionChanged(e) {\r\n if (e.fullName.endsWith('.groupIndex')) {\r\n setTimeout(() => {\r\n this.OnGroupingChange.emit({\r\n items: this.getGroupedColumns(e.component),\r\n gridInst: e.component\r\n })\r\n }, 100);\r\n }\r\n }\r\n\r\n protected override GetGridRowContextMenu(options?: any): ContextMenuElement[] {\r\n if (options?.data?.Loan?.Source === EnumLoanHandlingType.BankInformation) {\r\n return [];\r\n }\r\n\r\n const label = options?.data?.Loan?.IsMarked ? 'btnRemoveMark' : 'btnAddMark'; \r\n\r\n return [{\r\n text: this.RC(label),\r\n onClick: () => {\r\n this.MarkLoan(options?.data?.Loan);\r\n }\r\n }];\r\n }\r\n\r\n private MarkLoan(loan: Loan) {\r\n const isMarked = !loan.IsMarked;\r\n\r\n this.Do(this.loanEndpoint.Mark(loan.EntryID, isMarked), true, () => {\r\n this.NotifyEntitySaved(null, Loan);\r\n }, (response) => {\r\n this.A.UI.StopMessage(response.ResponseMessage);\r\n });\r\n } \r\n}","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n {{GetLinkedInterest(cell.data.Loan)}} +\\r\\n \\r\\n \\r\\n {{ cell.data.Loan.InterestSuprlusPercent}} %\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n {{ GetGroupCellCaption(data.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 \\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 { BookingAccountEndpoint } from '@kraken/_proxy/endpoints/bookingaccount.endpoint';\r\nimport { ChequeEndpoint } from '@kraken/_proxy/endpoints/cheque.endpoint';\r\nimport { ChequeImageEndpoint } from '@kraken/_proxy/endpoints/chequeimage.endpoint';\r\nimport { CompanyEndpoint } from '@kraken/_proxy/endpoints/company.endpoint';\r\nimport { EnumBookingAccountSubtypes } from '@kraken/_proxy/enums';\r\nimport { BookingAccountListParams } from '@kraken/_proxy/params/bookingaccountlist.param';\r\nimport { CompanyListParams } from '@kraken/_proxy/params/companylist.param';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { ImageBoxDialogComponent } from '@m4u-angular/ui/dialogs/imagebox-dialog/imageboxdialog.component';\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 private companyEndpoint: CompanyEndpoint,\r\n private bookingAccountEndpoint: BookingAccountEndpoint,\r\n private chequeEndpoint: ChequeEndpoint) {\r\n super(A, 'ExternalLinkComponent', BaseEntity, BaseState);\r\n }\r\n\r\n override OnInitComponent() {\r\n const { Action, TransactionID, CompanyDBName, BookingAccountCode } = this.A.Navigator.GetQueryParams(false);\r\n\r\n if (Action === 'ShowCheques' && TransactionID) {\r\n this.OpenCheques(TransactionID);\r\n return;\r\n }\r\n\r\n if (Action === 'TransactionsReport' && CompanyDBName && BookingAccountCode) {\r\n this.LoadDataForTransactionsReport(CompanyDBName, BookingAccountCode);\r\n return;\r\n }\r\n }\r\n\r\n\r\n LoadDataForTransactionsReport(DbName: string, BookingAccountCode: string) {\r\n const params = new CompanyListParams();\r\n params.DbName = DbName;\r\n\r\n this.Do(this.companyEndpoint.ListEx(params, null), false, ({ Entities }) => {\r\n const [company] = Entities;\r\n if (!company) {\r\n this.UI.WarningMessage(this.RC('msgNoCompanyFound'));\r\n return;\r\n }\r\n\r\n const params = new BookingAccountListParams();\r\n params.OrganizationID = company.OrganizationID;\r\n params.Companies = [company.EntryID];\r\n params.BookingAccountCode = BookingAccountCode;\r\n\r\n this.Do(this.bookingAccountEndpoint.ListEx(params), false, ({ Entities }) => {\r\n const [bookingAccount] = Entities;\r\n if (!bookingAccount) {\r\n this.UI.WarningMessage(this.RC('msgNoBookingAccountFound'));\r\n return;\r\n }\r\n\r\n const params = { OrganizationID: company.OrganizationID, BookingAccountID: bookingAccount.EntryID, CompanyID: company.EntryID };\r\n\r\n if (bookingAccount.Subtype === EnumBookingAccountSubtypes.CreditCard) {\r\n this.Navigate([\"/pages/credit-cards-report\"], params).then(() => {\r\n this.A.RouteHistoryService.ClearHistory();\r\n });\r\n } else {\r\n this.Navigate([\"/pages/transaction-report\"], params).then(() => {\r\n this.A.RouteHistoryService.ClearHistory();\r\n });\r\n }\r\n });\r\n });\r\n }\r\n\r\n OpenCheques(TransactionID: number) {\r\n this.Do(this.chequeEndpoint.ListEx(TransactionID), false, ({ Entities }) => {\r\n const [cheque] = Entities;\r\n if (!cheque) {\r\n this.UI.WarningMessage(this.RC('msgTransactionNoCheque'));\r\n return;\r\n }\r\n\r\n const { BookingAccountID, OrganizationID, EntryID, ChequeNumber } = cheque;\r\n\r\n const params = { OrganizationID, BookingAccountID, TransactionID, ChequeID: EntryID, ChequeNumber, Action: \"ChequeAutoOpen\" };\r\n\r\n this.Navigate([\"/pages/transaction-report\"], params).then(() => {\r\n this.A.RouteHistoryService.ClearHistory();\r\n });\r\n });\r\n }\r\n}\r\n","export default \"

\";","\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { ImportFileParseResponse } from './../entities/importfileparseresponse.entity';\r\nimport { ImportFilesParams } from './../params/importfiles.param';\r\nimport { ImportTransactionsParams } from './../params/importtransactions.param';\r\n@Injectable()\r\nexport class ImportTransactionsEndpoint extends BaseEndpoint\r\n{\r\n constructor(api: APIGatewayService) {super(\"ImportTransactions\", api);}\r\n \r\n public Parse(Params: ImportFilesParams) : Observable>\r\n {\r\n return this.api.ExecutePostAction(this.ControllerName, 'Parse', Params, undefined );\r\n }\r\n public Import(Params: ImportTransactionsParams) : Observable\r\n {\r\n return this.api.ExecutePostAction(this.ControllerName, 'Import', Params, undefined );\r\n }\r\n}\r\n","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ImportFileDataParams } from './../params/importfiledata.param';\r\nexport class ImportFilesParams extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ImportFilesParams';\r\n }\r\n \r\n public OrganizationID: number; \r\n public FileImportTemplateID: number; \r\n public AttachedFiles: ImportFileDataParams[] = []; \r\n public BookingAccountID: number; \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 { ImportFileBookingAccountTransactions } from './../entities/importfilebookingaccounttransactions.entity';\r\nexport class ImportTransactionsParams extends BaseEntity\r\n{ \r\n public OrganizationID: number; \r\n public BookingAccountsTransactions: ImportFileBookingAccountTransactions[] = []; \r\n \r\n}\r\n\r\n\r\n","import { Component, TemplateRef, ViewChild } from '@angular/core';\r\nimport { OrganizationService } from '@kraken/services/organization.service';\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 } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataLoadOptions } from \"../../../../src/base/datalayer/DataLoadOptions\";\r\nimport { AttachedFile } from \"../../../../src/base/entities/BaseEntities\";\r\nimport { SidebarService } from \"../../../../src/core/framework/sidebar.service\";\r\nimport { UiService } from \"../../../../src/core/framework/ui.service\";\r\nimport { Utils } from \"../../../../src/core/helpers/Utils\";\r\nimport { Globals } from '../../_globals';\r\nimport { AccountEndpoint } from \"../../_proxy/endpoints/account.endpoint\";\r\nimport { BookingAccountEndpoint } from \"../../_proxy/endpoints/bookingaccount.endpoint\";\r\nimport { CompanyEndpoint } from \"../../_proxy/endpoints/company.endpoint\";\r\nimport { FileImportTemplateEndpoint } from \"../../_proxy/endpoints/fileimporttemplate.endpoint\";\r\nimport { ImportTransactionsEndpoint } from \"../../_proxy/endpoints/importtransactions.endpoint\";\r\nimport { FileImportTemplate } from \"../../_proxy/entities/fileimporttemplate.entity\";\r\nimport { ImportFileBookingAccountTransactions } from \"../../_proxy/entities/importfilebookingaccounttransactions.entity\";\r\nimport { ImportFileParseResponse } from \"../../_proxy/entities/importfileparseresponse.entity\";\r\nimport { EnumBookingAccountSubtypes, EnumFileImportAccountMappingTypes } from \"../../_proxy/enums\";\r\nimport { AccountListParams } from \"../../_proxy/params/accountlist.param\";\r\nimport { BookingAccountListParams } from \"../../_proxy/params/bookingaccountlist.param\";\r\nimport { ImportFilesParams } from '../../_proxy/params/importfiles.param';\r\nimport { ImportTransactionsParams } from \"../../_proxy/params/importtransactions.param\";\r\nimport { CompanyListParams } from '@kraken/_proxy/params/companylist.param';\r\n\r\nexport class State extends BaseState {\r\n FileImportTemplates: FileImportTemplate[] = [];\r\n FileImportTemplateID: number;\r\n FileImportTemplate: FileImportTemplate;\r\n Files: AttachedFile[];\r\n \r\n CompanyID: number;\r\n AccountID: number;\r\n BookingAccountID: number;\r\n \r\n Response: ImportFileParseResponse;\r\n SelectedBookingAccounts: ImportFileBookingAccountTransactions[];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-transactions-import',\r\n templateUrl: './transactions-import.component.html'\r\n})\r\nexport class TransactionsImportComponent extends BasePageComponent {\r\n\r\n @ViewChild('importTemplate') importTemplate: TemplateRef;\r\n \r\n get Globals() { return Globals; }\r\n \r\n constructor(\r\n A: ServiceBagService,\r\n private fileImportTemplateEndpoint: FileImportTemplateEndpoint,\r\n private transactionsImportEndpoint: ImportTransactionsEndpoint,\r\n private companyEndpoint: CompanyEndpoint,\r\n private sidebarService: SidebarService,\r\n private ui: UiService,\r\n private organizationService: OrganizationService) {\r\n \r\n super(A, 'TransactionsImportComponent', BaseEntity, State);\r\n }\r\n \r\n override OnInitState() {\r\n this.State.FileImportTemplateID = null;\r\n this.State.FileImportTemplate = null;\r\n this.State.Files = [];\r\n }\r\n\r\n protected override OnInitComponentFinished() {\r\n if (this.QueryParams.OrganizationID) this.organizationService.ChangeOrganization(+this.QueryParams.OrganizationID);\r\n if (this.QueryParams.FileImportTemplateID) this.State.FileImportTemplateID = +this.QueryParams.FileImportTemplateID;\r\n this.LoadData();\r\n }\r\n \r\n public OnOrganizationChanged() {\r\n this.LoadData();\r\n }\r\n \r\n public OnOpenImportTemplateClicked() {\r\n this.sidebarService.Show(\"ImportTemplate\", this.RC('titleFilesImport'), this.importTemplate);\r\n }\r\n \r\n public OnFilesChanged(event: any) {\r\n this.State.Files = event;\r\n }\r\n \r\n public OnTryAgainClicked() {\r\n this.State.Files = [];\r\n this.State.FileImportTemplateID = null;\r\n \r\n if (this.State.CompanyID)\r\n this.State.CompanyID = null;\r\n \r\n this.ClearResponse();\r\n \r\n this.OnOpenImportTemplateClicked();\r\n }\r\n \r\n public ClearResponse() {\r\n this.State.Response.FilesErrors = [];\r\n this.State.Response.BookingAccountsTransactions = [];\r\n }\r\n \r\n public OnImportClicked() {\r\n Utils.LoadFilesBody(this.State.Files.map(x => x.NewFile), (uploadedFiles) => {\r\n\r\n let params = new ImportFilesParams();\r\n params.AttachedFiles = uploadedFiles;\r\n params.OrganizationID = Globals.OrganizationID;\r\n params.FileImportTemplateID = this.State.FileImportTemplateID;\r\n\r\n if (this.State.BookingAccountID)\r\n params.BookingAccountID = this.State.BookingAccountID;\r\n\r\n this.Do(\r\n this.transactionsImportEndpoint.Parse(params),\r\n false,\r\n (response) => {\r\n this.State.Response = response.Entity;\r\n\r\n let bookingAccounts = response.Entity.BookingAccountsTransactions;\r\n if (bookingAccounts && bookingAccounts.length > 0) {\r\n this.State.SelectedBookingAccounts = bookingAccounts.filter(x => x.IsValid);\r\n }\r\n\r\n this.sidebarService.Close(\"ImportTemplate\");\r\n }\r\n );\r\n });\r\n }\r\n \r\n public OnSaveClicked() {\r\n let importParams = new ImportTransactionsParams();\r\n importParams.OrganizationID = Globals.OrganizationID;\r\n importParams.BookingAccountsTransactions = this.State.SelectedBookingAccounts;\r\n \r\n this.Do(\r\n this.transactionsImportEndpoint.Import(importParams),\r\n false,\r\n (response) => {\r\n this.ClearResponse();\r\n this.ui.InfoMessage(this.RC(\"msgSuccess\"));\r\n }\r\n );\r\n }\r\n\r\n public OnFileImportTemplateSelected() {\r\n if (!this.State.FileImportTemplateID) return;\r\n \r\n this.State.FileImportTemplate = this.State.FileImportTemplates.find(x => x.EntryID === this.State.FileImportTemplateID);\r\n if (this.State.FileImportTemplate && this.State.FileImportTemplate.AccountMappingType === EnumFileImportAccountMappingTypes.AskEveryTime){\r\n this.DataSources[\"Companies\"] = new DataSourceCustomAction((options: DataLoadOptions) => {\r\n const params = new CompanyListParams();\r\n params.OrganizationID = Globals.OrganizationID;\r\n params.LoadActive = true;\r\n\r\n return this.companyEndpoint.ListEx(params, options);\r\n });\r\n }\r\n }\r\n\r\n public OnViewTemplateClicked() {\r\n if (!this.State.FileImportTemplateID) return;\r\n\r\n this.Navigate([\"/pages/file-import-template\", this.State.FileImportTemplateID], { ViewMode: true });\r\n }\r\n \r\n \r\n public OnBookingAccountsSelected(bookingAccountTransactions: ImportFileBookingAccountTransactions[]) { \r\n this.State.SelectedBookingAccounts = bookingAccountTransactions.filter(x => x.IsValid);\r\n }\r\n \r\n private LoadData() {\r\n if (!Globals.OrganizationID)\r\n return;\r\n \r\n this.fileImportTemplateEndpoint.GetByOrganizationID(Globals.OrganizationID, true).subscribe(response => {\r\n if (!response.IsSuccess) return;\r\n this.State.FileImportTemplates = response.Entities;\r\n\r\n if (this.QueryParams.FileImportTemplateID) {\r\n this.OnFileImportTemplateSelected();\r\n this.OnOpenImportTemplateClicked();\r\n }\r\n });\r\n }\r\n\r\n protected override OnDestroyComponent(): void {\r\n this.sidebarService.DestroySidebar(\"ImportTemplate\");\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n
0\\\">\\r\\n \\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 0 || State.Response.FilesErrors?.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\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumAdminActivityRecordType } from './../enums';\r\nexport class AdminActivityRecordParams extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'AdminActivityRecordParams';\r\n }\r\n \r\n public OrganizationID: number; \r\n public AdminID: number; \r\n public DateFrom: Date; \r\n public DateTo: Date; \r\n public ActivityType: EnumAdminActivityRecordType; \r\n\t\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 {BasePageComponent} from '@m4u-angular/base/component/BasePageComponent';\r\nimport {BaseEntity, BaseState} from '@m4u-angular/base/entities/BaseEntities';\r\nimport {AdminActivityRecordEndpoint} from \"../../_proxy/endpoints/adminactivityrecord.endpoint\";\r\nimport {DataSourceCustomAction} from \"../../../../src/base/datalayer/BaseDataSources\";\r\nimport {DataLoadOptions} from \"../../../../src/base/datalayer/DataLoadOptions\";\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport {EnumAdminActivityRecordType} from \"../../_proxy/enums\";\r\nimport {OrganizationEndpoint} from \"../../_proxy/endpoints/organization.endpoint\";\r\nimport { DateHelpers } from '../../../../src/core/helpers/DateHelpers';\r\nimport {AdminActivityRecord} from \"../../_proxy/entities/adminactivityrecord.entity\";\r\nimport {AdminEndpoint} from \"../../_proxy/endpoints/admin.endpoint\";\r\nimport {AdminActivityRecordParams} from \"../../_proxy/params/adminactivityrecord.param\";\r\nimport { AdminActionsGridComponent } from './grid/admin-actions-grid.component';\r\n\r\nexport class State extends BaseState {\r\n AdminID: number;\r\n DateFrom: Date;\r\n DateTo: Date;\r\n ActivityType: EnumAdminActivityRecordType;\r\n OrganizationID: number;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-admin-actions',\r\n templateUrl: './admin-actions.component.html'\r\n})\r\nexport class AdminActionsComponent extends BasePageComponent {\r\n\r\n @ViewChild('adminActionsGrid') adminActionsGrid: AdminActionsGridComponent;\r\n\r\n constructor(\r\n A: ServiceBagService,\r\n private adminActivityRecordEndpoint: AdminActivityRecordEndpoint,\r\n private organizationEndpoint: OrganizationEndpoint,\r\n private adminEndpoint: AdminEndpoint) {\r\n\r\n super(A, 'AdminActionsComponent', AdminActivityRecord, State);\r\n }\r\n\r\n override InitState() {\r\n this.State.AdminID = null;\r\n this.State.DateFrom = DateHelpers.BOM(new Date());\r\n this.State.DateTo = DateHelpers.EOM(new Date());\r\n this.State.ActivityType = null;\r\n this.State.OrganizationID = null;\r\n }\r\n \r\n \r\n override OnGetToolbarSettings() {\r\n return {\r\n IsAllowFilter: true,\r\n IsAllowExport: true,\r\n GridExtender: this.adminActionsGrid && this.adminActionsGrid.G\r\n } as ToolbarSettings;\r\n }\r\n \r\n override OnApplyFilter() {\r\n this.LoadDataSource();\r\n }\r\n\r\n override OnClearFilter() {\r\n this.InitState();\r\n this.LoadDataSource();\r\n }\r\n \r\n protected override OnInitComponent() {\r\n this.InitState();\r\n this.DataSources[\"Organizations\"] = new DataSourceCustomAction((options: DataLoadOptions) => this.organizationEndpoint.ListEx(true, options));\r\n this.DataSources[\"Admins\"] = new DataSourceCustomAction((options: DataLoadOptions) => this.adminEndpoint.GetList(options));\r\n this.LoadDataSource();\r\n }\r\n \r\n private LoadDataSource() {\r\n this.DataSources[\"AdminActivityRecords\"] = new DataSourceCustomAction((options: DataLoadOptions) => {\r\n let params = new AdminActivityRecordParams();\r\n\r\n params.AdminID = this.State.AdminID;\r\n params.DateFrom = this.State.DateFrom;\r\n params.DateTo = this.State.DateTo;\r\n params.OrganizationID = this.State.OrganizationID;\r\n if (this.State.ActivityType) params.ActivityType = this.State.ActivityType;\r\n \r\n return this.adminActivityRecordEndpoint.ListEx(params, options);\r\n }, undefined, undefined, false);\r\n this.DS(\"AdminActivityRecords\").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\";","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 { AdminActivityRecord } from '@kraken/_proxy/entities/adminactivityrecord.entity';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-admin-actions-grid',\r\n templateUrl: './admin-actions-grid.component.html'\r\n})\r\nexport class AdminActionsGridComponent extends BaseGridComponent\r\n{\r\n constructor(A: ServiceBagService)\r\n {\r\n super(A, 'AdminActionsGridComponent', AdminActivityRecord, BaseState);\r\n }\r\n}","export default \"\\r\\n\\r\\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 { BasePageCRUDComponent } from \"../../../../src/base/component/BasePageCRUDComponent\";\r\nimport { AdminAccessRequestEndpoint } from \"../../_proxy/endpoints/adminaccessrequest.endpoint\";\r\nimport { AdminAccessRequest } from \"../../_proxy/entities/adminaccessrequest.entity\";\r\nimport { EnumAdminAccessRequestStatus } from \"../../_proxy/enums\";\r\nimport { AccessService } from \"@kraken/services/access.service\";\r\nimport { OrganizationEndpoint } from \"@kraken/_proxy/endpoints/organization.endpoint\";\r\nimport { Organization } from \"@kraken/_proxy/entities/organization.entity\";\r\nimport { AdminEndpoint } from \"@kraken/_proxy/endpoints/admin.endpoint\";\r\nimport { Admin } from \"@kraken/_proxy/entities/admin.entity\";\r\n\r\nclass State extends BaseState {\r\n Organizations: Organization[];\r\n Admins: Admin[];\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-admin-access-request',\r\n templateUrl: './admin-access-request.component.html'\r\n})\r\nexport class AdminAccessRequestComponent extends BasePageCRUDComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n public accessService: AccessService,\r\n private adminAccessRequestEndpoint: AdminAccessRequestEndpoint,\r\n private organizationEndpoint: OrganizationEndpoint,\r\n private adminEndpoint: AdminEndpoint) {\r\n\r\n super(A, 'AdminAccessRequestComponent', AdminAccessRequest, State, adminAccessRequestEndpoint);\r\n }\r\n\r\n protected override OnInitComponent(): void {\r\n if (this.accessService.IsSuperAdmin()) {\r\n this.LoadOrganizations();\r\n this.LoadAdmins();\r\n }\r\n }\r\n\r\n protected override OnEntityNew() {\r\n this.Entity.OrganizationID = this.QueryParams.OrganizationID;\r\n if (this.accessService.IsSuperAdmin()) {\r\n this.Entity.Status = EnumAdminAccessRequestStatus.Approved;\r\n } else {\r\n this.Entity.Status = EnumAdminAccessRequestStatus.Requested;\r\n }\r\n }\r\n\r\n public override GetTitle() {\r\n return `${this.RC('titleAccessRequest')}${this.QueryParams.OrganizationName ? ' - ' + this.QueryParams.OrganizationName : ''}`;\r\n }\r\n\r\n protected override OnEntitySaved() {\r\n this.NavigateBack();\r\n }\r\n\r\n private LoadOrganizations() {\r\n this.Do(this.organizationEndpoint.GetList(), false, (response) => {\r\n this.State.Organizations = response.Entities;\r\n });\r\n }\r\n\r\n private LoadAdmins() {\r\n this.Do(this.adminEndpoint.GetList(), false, (response) => {\r\n this.State.Admins = response.Entities.filter(x => !x.IsSuperAdmin);\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\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class AdminAccessRequestReviewParams extends BaseEntity\r\n{ \r\n public AdminAccessRequestID: number; \r\n public IsApprove: boolean; \r\n \r\n}\r\n\r\n\r\n","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumAdminAccessRequestStatus } from './../enums';\r\nexport class AdminAccessRequestParams extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'AdminAccessRequestParams';\r\n }\r\n \r\n public OrganizationID: number; \r\n public CreatedBy: number; \r\n public Statuses: EnumAdminAccessRequestStatus[]; \r\n public DateFrom: Date; \r\n public DateTo: Date; \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 { AdminAccessRequest } from './../entities/adminaccessrequest.entity';\r\nexport class AdminAccessRequestBulkApproveParams extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'AdminAccessRequestBulkApproveParams';\r\n }\r\n \r\n public RequestIDs: number[]; \r\n public Requests: AdminAccessRequest[] = []; \r\n\t\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 {DataLoadOptions} from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport {DataSourceCustomAction} from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport {AdminAccessRequest} from \"../../../_proxy/entities/adminaccessrequest.entity\";\r\nimport {AdminAccessRequestEndpoint} from \"../../../_proxy/endpoints/adminaccessrequest.endpoint\";\r\nimport {BasePageComponent} from \"../../../../../src/base/component/BasePageComponent\";\r\nimport {AdminAccessRequestReviewParams} from \"../../../_proxy/params/adminaccessrequestreview.param\";\r\nimport {EnumAdminAccessRequestStatus} from \"../../../_proxy/enums\";\r\nimport {DateHelpers} from \"../../../../../src/core/helpers/DateHelpers\";\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport {AdminAccessRequestParams} from \"../../../_proxy/params/adminaccessrequest.param\";\r\nimport {OrganizationEndpoint} from \"../../../_proxy/endpoints/organization.endpoint\";\r\nimport {AdminEndpoint} from \"../../../_proxy/endpoints/admin.endpoint\";\r\nimport { AdminAccessRequestGridComponent } from './admin-access-request-grid.component';\r\nimport { AdminAccessRequestBulkApproveParams } from '@kraken/_proxy/params/adminaccessrequestbulkapprove.param';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\nexport class State extends BaseState {\r\n CreatedBy: number;\r\n DateFrom: Date;\r\n DateTo: Date;\r\n Statuses: EnumAdminAccessRequestStatus[];\r\n OrganizationID: number;\r\n SelectedRequests: number[];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-admin-access-request-list',\r\n templateUrl: './admin-access-request-list.component.html'\r\n})\r\nexport class AdminAccessRequestListComponent extends BasePageComponent {\r\n\r\n @ViewChild('adminAccessRequestGrid') adminAccessRequestGrid: AdminAccessRequestGridComponent;\r\n\r\n constructor(\r\n A: ServiceBagService,\r\n private adminAccessRequestEndpoint: AdminAccessRequestEndpoint,\r\n private organizationEndpoint: OrganizationEndpoint,\r\n private adminEndpoint: AdminEndpoint)\r\n {\r\n super(A, 'AdminAccessRequestListComponent', AdminAccessRequest, State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.InitState();\r\n this.DataSources[\"Organizations\"] = new DataSourceCustomAction((options: DataLoadOptions) => this.organizationEndpoint.ListEx(true, options));\r\n this.DataSources[\"Admins\"] = new DataSourceCustomAction((options: DataLoadOptions) => this.adminEndpoint.GetList(options));\r\n this.LoadDataSource();\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n if (ExternalEntityType === AdminAccessRequest || ExternalEntityAction === EnumCRUDActions.Update) { this.DS[\"AdminAccessRequests\"]?.Reload(); }\r\n }\r\n \r\n private LoadDataSource() {\r\n this.DataSources[\"AdminAccessRequests\"] = new DataSourceCustomAction((options: DataLoadOptions) => {\r\n let params = new AdminAccessRequestParams();\r\n\r\n params.CreatedBy = this.State.CreatedBy;\r\n params.DateFrom = this.State.DateFrom;\r\n params.DateTo = this.State.DateTo;\r\n params.OrganizationID = this.State.OrganizationID;\r\n params.Statuses = this.State.Statuses;\r\n\r\n\r\n return this.adminAccessRequestEndpoint.ListEx(params, options);\r\n }, undefined, undefined, false);\r\n \r\n this.DS[\"AdminAccessRequests\"]?.Reload();\r\n }\r\n \r\n public OnApproveClicked(entryID: number) {\r\n this.PostParams(entryID, true);\r\n }\r\n \r\n public OnDenyClicked(entryID: number) {\r\n this.PostParams(entryID, false);\r\n }\r\n\r\n public IsBoldRequested() {\r\n return this.State.Statuses?.length !== 1 || this.State.Statuses[0] !== EnumAdminAccessRequestStatus.Requested;\r\n }\r\n\r\n public SelectionChanged(requests: number[]) {\r\n this.State.SelectedRequests = requests;\r\n }\r\n\r\n public BulkApprove() {\r\n if(!this.State.SelectedRequests || this.State.SelectedRequests.length === 0) { return; }\r\n\r\n const params = new AdminAccessRequestBulkApproveParams();\r\n params.RequestIDs = this.State.SelectedRequests;\r\n this.Do(this.adminAccessRequestEndpoint.BulkApprove(params), true, (_) => this.LoadDataSource())\r\n }\r\n\r\n public AddRequest() {\r\n this.Navigate([\"/pages/admin-access-request/new\"]);\r\n }\r\n\r\n override InitState() {\r\n this.State.CreatedBy = null;\r\n this.State.DateFrom = DateHelpers.BOM(new Date());\r\n this.State.DateTo = DateHelpers.EOM(new Date());\r\n this.State.Statuses = [EnumAdminAccessRequestStatus.Requested];\r\n this.State.OrganizationID = null;\r\n }\r\n \r\n override OnGetToolbarSettings() {\r\n return {\r\n IsAllowFilter: true,\r\n IsAllowExport: true,\r\n GridExtender: this.adminAccessRequestGrid && this.adminAccessRequestGrid.G\r\n } as ToolbarSettings;\r\n }\r\n\r\n override OnApplyFilter() {\r\n this.LoadDataSource();\r\n }\r\n\r\n override OnClearFilter() {\r\n this.InitState();\r\n this.LoadDataSource();\r\n }\r\n \r\n private PostParams(entryID: number, isApprove: boolean) {\r\n let params = new AdminAccessRequestReviewParams();\r\n \r\n params.AdminAccessRequestID = entryID;\r\n params.IsApprove = isApprove;\r\n\r\n this.Do(this.adminAccessRequestEndpoint.Review(params), true, (_) => 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\\r\\n\";","import {Component, EventEmitter, Input, Output} 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 {ContextMenuElement} from \"../../../../../src/base/classes/BaseClasses\";\r\nimport {EnumAdminAccessRequestStatus} from \"../../../_proxy/enums\";\r\nimport { AdminAccessRequest } from '../../../_proxy/entities/adminaccessrequest.entity';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-admin-access-request-grid',\r\n templateUrl: './admin-access-request-grid.component.html',\r\n styleUrls: ['./admin-access-request-grid.component.scss']\r\n})\r\nexport class AdminAccessRequestGridComponent extends BaseGridComponent\r\n{\r\n @Input() IsBoldRequested: boolean;\r\n\r\n @Output() OnApproveClicked: EventEmitter = new EventEmitter();\r\n @Output() OnDenyClicked: EventEmitter = new EventEmitter();\r\n @Output() OnSelectionChanged: EventEmitter = new EventEmitter();\r\n \r\n constructor(A: ServiceBagService)\r\n {\r\n super(A, 'AdminAccessRequestGridComponent', AdminAccessRequest, BaseState);\r\n }\r\n\r\n protected override GetGridRowContextMenu(options?: any): ContextMenuElement[] {\r\n return [{\r\n text: this.RC('btnApprove'),\r\n visible: options?.data?.Status == EnumAdminAccessRequestStatus.Requested,\r\n onClick: () => this.OnApproveClicked.emit(options?.data?.EntryID)\r\n }, {\r\n text: this.RC('btnDeny'),\r\n visible: options?.data?.Status === EnumAdminAccessRequestStatus.Requested || options?.data?.Status === EnumAdminAccessRequestStatus.Approved,\r\n onClick: () => this.OnDenyClicked.emit(options?.data?.EntryID)\r\n }];\r\n }\r\n\r\n RowPrepared(e) {\r\n if (e?.rowType === 'data') {\r\n if (e.data.Status === EnumAdminAccessRequestStatus.Requested) {\r\n if (this.IsBoldRequested) {\r\n e.rowElement.classList.add('row-bold');\r\n }\r\n } else {\r\n e.rowElement.classList.add('hide-checkbox');\r\n }\r\n }\r\n }\r\n\r\n SelectionChanged(e) {\r\n this.OnSelectionChanged.emit(e.selectedRowKeys);\r\n }\r\n}","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\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 { Transaction } from './../entities/transaction.entity';\r\nimport { BookingAccount } from './../entities/bookingaccount.entity';\r\nexport class ImportFileBookingAccountTransactions extends BaseEntity\r\n{ \r\n public IsValid: boolean; \r\n public BookingAccountName: string; \r\n public AccountName: string; \r\n public CompanyName: string; \r\n public OpeningDate: Date; \r\n public ClosingDate: Date; \r\n public BookingAccountClosingDate: Date; \r\n public OpeningBalance: number; \r\n public ClosingBalance: number; \r\n public BookingAccountClosingBalance: number; \r\n public ErrorMessage: string; \r\n public TransactionsCount: number; \r\n public Transactions: Transaction[] = []; \r\n public BookingAccount: BookingAccount = new BookingAccount; \r\n \r\n}\r\n\r\n\r\n","import {Component, EventEmitter, Input, Output} 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 {\r\n ImportFileBookingAccountTransactions\r\n} from \"../../../_proxy/entities/importfilebookingaccounttransactions.entity\";\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-transactions-import-grid',\r\n templateUrl: './transactions-import-grid.component.html',\r\n styleUrls: ['transactions-import-grid.component.scss']\r\n})\r\nexport class TransactionsImportGridComponent extends BaseGridComponent\r\n{ \r\n @Input() SelectedBookingAccounts: ImportFileBookingAccountTransactions[];\r\n @Output() OnBookingAccountsSelected: EventEmitter = new EventEmitter();\r\n \r\n constructor(A: ServiceBagService)\r\n {\r\n super(A, 'TransactionsImportGridComponent', ImportFileBookingAccountTransactions, BaseState);\r\n }\r\n}","export default \"\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\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 ? 'positive-amount' : 'negative-amount'\\\">\\r\\n
{{cell.data.BookingAccountClosingBalance | 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
0 ? 'positive-amount' : 'negative-amount'\\\">\\r\\n
{{cell.data.OpeningBalance | formatNumberSum}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
0 ? 'positive-amount' : 'negative-amount'\\\">\\r\\n
{{cell.data.ClosingBalance | 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
0\\\">\\r\\n
{{cell.data.Debit | formatNumberSum}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n
0\\\">\\r\\n
{{cell.data.Credit | formatNumberSum}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n
0 ? 'positive-amount' : 'negative-amount'\\\">\\r\\n
{{cell.data.Balance | formatNumberSum}}
\\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 { ImportFileRowError } from './../entities/importfilerowerror.entity';\r\nexport class ImportFileErrors extends BaseEntity\r\n{ \r\n public FileName: string; \r\n public RowErrorsCount: number; \r\n public RowErrors: ImportFileRowError[] = []; \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 { ImportFileErrors } from '@kraken/_proxy/entities/importfileerrors.entity';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-transactions-import-errors-grid',\r\n templateUrl: './transactions-import-errors-grid.component.html'\r\n})\r\nexport class TransactionsImportErrorsGridComponent extends BaseGridComponent\r\n{\r\n constructor(A: ServiceBagService)\r\n {\r\n super(A, 'TransactionsImportErrorsGridComponent', ImportFileErrors, BaseState);\r\n }\r\n}","export default \"\\r\\n\\r\\n \\r\\n\\r\\n \\r\\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 { BaseParamsFilter } from './../entities/baseparamsfilter.entity';\r\nexport class LedgerAccountListParams extends BaseParamsFilter {\r\n constructor() {\r\n super();\r\n this.TypeName = 'LedgerAccountListParams';\r\n }\r\n \r\n public CurrentCode: string; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { Component, Input, Output, EventEmitter, ViewChild } from '@angular/core';\r\nimport { LedgerAccountEndpoint } from '@kraken/_proxy/endpoints/ledgeraccount.endpoint';\r\nimport { OrganizationEndpoint } from '@kraken/_proxy/endpoints/organization.endpoint';\r\nimport { Organization } from '@kraken/_proxy/entities/organization.entity';\r\nimport { EnumBookingAccountSelectionMethods, EnumPostingTemplateBookingAccountTypes } from '@kraken/_proxy/enums';\r\nimport { LedgerAccountListParams } from '@kraken/_proxy/params/ledgeraccountlist.param';\r\nimport { LedgerAccountView } from '@kraken/_proxy/views/ledgeraccount.view';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { DataSourceCustom, 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 { FieldFormComponent } from '@m4u-angular/ui/layouts/fieldlayouts/field-form/fieldform.component';\r\nimport { DxSelectBoxComponent, DxTextBoxComponent, DxValidatorComponent } from 'devextreme-angular';\r\nimport { BaseDataStoreReadOnly } from '@m4u-angular/base/datalayer/BaseDataStoreReadOnly';\r\nimport { BusinessPartnerEndpoint } from '@kraken/_proxy/endpoints/businesspartner.endpoint';\r\nimport { BusinessPartnerListParams } from '@kraken/_proxy/params/businesspartnerlist.param';\r\n\r\nclass State extends BaseState {\r\n OrganizationID: number;\r\n CompanyID: number;\r\n IsInitialized: boolean;\r\n Organization: Organization;\r\n DataSource: DataSourceCustomAction;\r\n BookingAccountType: EnumPostingTemplateBookingAccountTypes;\r\n \r\n IsFocused: boolean;\r\n IsLoadLedgerAccounts: boolean;\r\n IsLoadBusinessPartners: boolean;\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-booking-account-code-box',\r\n templateUrl: './booking-account-code-box.component.html',\r\n styleUrls: ['./booking-account-code-box.component.scss']\r\n})\r\nexport class BookingAccountCodeBoxComponent extends BaseComponent {\r\n\r\n @Input() set organizationID(value: number) {\r\n if (this.State.OrganizationID !== value){\r\n this.State.OrganizationID = value;\r\n this.InitOrganization();\r\n }\r\n }\r\n @Input() set companyID(value: number) {\r\n if (this.State.CompanyID !== value){\r\n this.State.CompanyID = value;\r\n this.LoadLedgerAccounts();\r\n }\r\n }\r\n @Input() isRequired: boolean = false;\r\n @Input() hint: string = null;\r\n @Input() isShowOnly: boolean = false;\r\n @Input() grid: any;\r\n @Input() field: FieldFormComponent;\r\n @Input() set bookingAccountType(bookingAccountType: EnumPostingTemplateBookingAccountTypes) {\r\n if (bookingAccountType && this.State.BookingAccountType !== bookingAccountType) {\r\n this.State.BookingAccountType = bookingAccountType;\r\n\r\n if (this.State.BookingAccountType === EnumPostingTemplateBookingAccountTypes.BusinessPartner) {\r\n this.LoadBusinessPartners();\r\n } else {\r\n this.LoadLedgerAccounts();\r\n }\r\n }\r\n }\r\n\r\n @Input() code: string;\r\n @Output() codeChange = new EventEmitter();\r\n \r\n @ViewChild(DxTextBoxComponent) textBox: DxTextBoxComponent;\r\n @ViewChild(DxSelectBoxComponent) selectBox: DxSelectBoxComponent;\r\n @ViewChild(DxValidatorComponent) set dxValidator(value: DxValidatorComponent) {\r\n if (value && !this.isRequired) { value.validationRules = []; }\r\n }\r\n\r\n constructor(A: ServiceBagService, \r\n private organizationEndpoint: OrganizationEndpoint,\r\n private ledgerAccountEndpoint: LedgerAccountEndpoint,\r\n private businessPartnerEndpoint: BusinessPartnerEndpoint) {\r\n super(A, 'BookingAccountCodeBoxComponent', State);\r\n }\r\n\r\n protected OnInitState(): void {\r\n this.State.IsInitialized = true;\r\n }\r\n\r\n protected OnInitComponentFinished(): void {\r\n this.InitOrganization();\r\n }\r\n\r\n public get dataSource() {\r\n const key = this.State.BookingAccountType === EnumPostingTemplateBookingAccountTypes.BusinessPartner ? 'partners' : 'accounts';\r\n\r\n if (!this.State.DataSource && this.HasCache(key)) { \r\n this.State.DataSource = this.GetCache(key); \r\n }\r\n\r\n return this.State.DataSource;\r\n }\r\n\r\n public get organization() {\r\n if (!this.State.Organization && this.HasCache('organization')) { \r\n this.State.Organization = this.GetCache('organization'); \r\n }\r\n\r\n return this.State.Organization;\r\n }\r\n\r\n public OnCodeChanged(e){\r\n this.codeChange.emit(this.code);\r\n }\r\n\r\n public OnCustomCodeCreating(e) {\r\n if (!e.text) {\r\n e.customItem = null;\r\n return;\r\n }\r\n\r\n e.customItem = {\r\n AccountingCode: e.text,\r\n FullName: e.text\r\n } as LedgerAccountView;;\r\n }\r\n\r\n private InitOrganization() {\r\n this.LoadOrganization(() => {\r\n if (this.State.BookingAccountType === EnumPostingTemplateBookingAccountTypes.BusinessPartner) {\r\n this.LoadBusinessPartners();\r\n } else {\r\n this.LoadLedgerAccounts();\r\n }\r\n\r\n // Handle the field component\r\n setTimeout(() => {\r\n if (this.field) { \r\n this.field.GetEditorControl = () => { return this.textBox ? this.textBox : this.selectBox; }\r\n this.field.Label = this.field.Label;\r\n }\r\n });\r\n });\r\n }\r\n\r\n private LoadOrganization(onAfter: () => void) {\r\n if (!this.State.IsInitialized || !this.State.OrganizationID) { return; }\r\n\r\n if (this.HasCache('organization')) { \r\n onAfter && onAfter();\r\n return; \r\n }\r\n this.SetCache('organization', undefined);\r\n\r\n this.Do(this.organizationEndpoint.Get(this.State.OrganizationID), false, (response) => {\r\n this.State.Organization = response.Entity;\r\n this.SetCache('organization', response.Entity);\r\n\r\n if (this.State.IsLoadLedgerAccounts) { this.LoadLedgerAccounts(); }\r\n if (this.State.IsLoadBusinessPartners) { this.LoadBusinessPartners(); }\r\n\r\n onAfter && onAfter();\r\n });\r\n }\r\n\r\n private LoadLedgerAccounts() {\r\n if (!this.State.IsInitialized || \r\n !this.State.OrganizationID || \r\n !this.State.CompanyID || \r\n !this.organization ||\r\n this.organization.BookingAccountSelectionMethod === EnumBookingAccountSelectionMethods.TextInput) { \r\n if (!this.State.IsLoadLedgerAccounts) { this.State.IsLoadLedgerAccounts = true; }\r\n return; \r\n }\r\n\r\n if (this.HasCache('accounts')) { return; }\r\n this.SetCache('accounts', undefined);\r\n\r\n const params = new LedgerAccountListParams();\r\n params.OrganizationID = this.State.OrganizationID;\r\n params.Companies = this.State.CompanyID ? [this.State.CompanyID] : [];\r\n params.CurrentCode = this.code;\r\n\r\n const store = new BaseDataStoreReadOnly(\r\n null,\r\n null,\r\n null,\r\n (options: DataLoadOptions) => this.ledgerAccountEndpoint.ListEx(params, options),\r\n undefined,\r\n undefined,\r\n true,\r\n 'AccountingCode'\r\n );\r\n\r\n this.State.DataSource = new DataSourceCustom(store);\r\n this.SetCache('accounts', this.State.DataSource);\r\n }\r\n\r\n private LoadBusinessPartners() {\r\n if (!this.State.IsInitialized || \r\n !this.State.OrganizationID || \r\n !this.State.CompanyID || \r\n !this.organization ||\r\n this.organization.BookingAccountSelectionMethod === EnumBookingAccountSelectionMethods.TextInput) { \r\n if (!this.State.IsLoadBusinessPartners) { this.State.IsLoadBusinessPartners = true; }\r\n return; \r\n }\r\n\r\n if (this.HasCache('partners')) { return; }\r\n this.SetCache('partners', undefined);\r\n\r\n const params = new BusinessPartnerListParams();\r\n params.OrganizationID = this.State.OrganizationID;\r\n params.Companies = this.State.CompanyID ? [this.State.CompanyID] : [];\r\n // params.CurrentCode = this.code;\r\n\r\n const store = new BaseDataStoreReadOnly(\r\n null,\r\n null,\r\n null,\r\n (options: DataLoadOptions) => this.businessPartnerEndpoint.ListEx(params, options),\r\n undefined,\r\n undefined,\r\n true,\r\n 'AccountingCode'\r\n );\r\n\r\n this.State.DataSource = new DataSourceCustom(store);\r\n this.SetCache('partners', this.State.DataSource);\r\n }\r\n\r\n //#region Cache\r\n\r\n private GetKeyCache(name: string) { return `Company_${this.State.CompanyID}_${name}`; }\r\n\r\n private GetCache(name: string) {\r\n if (!this.grid || !this.grid.customCache) { return; }\r\n\r\n let cacheData = this.grid.customCache[this.GetKeyCache(name)];\r\n if (!cacheData) { return null; }\r\n \r\n return cacheData[name];\r\n }\r\n\r\n private SetCache(name: string, value: any) {\r\n if (!this.grid) { return; }\r\n\r\n if (!this.grid.customCache) {\r\n this.grid.customCache = {};\r\n }\r\n\r\n let cacheData = this.grid.customCache[this.GetKeyCache(name)];\r\n if (!cacheData) {\r\n cacheData = {};\r\n cacheData.companyID = this.State.CompanyID;\r\n\r\n this.grid.customCache[this.GetKeyCache(name)] = cacheData;\r\n }\r\n\r\n cacheData[name] = value;\r\n }\r\n\r\n private HasCache(name) {\r\n return this.grid && this.grid.customCache && this.grid.customCache[this.GetKeyCache(name)];\r\n }\r\n\r\n //#endregion\r\n\r\n}","export default \"
\\r\\n
\\r\\n
\\r\\n {{codeFullName}}\\r\\n
\\r\\n
\\r\\n
{{code}}
\\r\\n
\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\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.AccountingCode}}
\\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
{{data.AccountingCode}}
\\r\\n
{{data.Name}}
\\r\\n
\\r\\n
\\r\\n\";","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { Globals } from '@kraken/_globals';\r\nimport { EnumBalanceHistoryReportMode } from '@kraken/_proxy/enums';\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 { DateHelpers } from '@m4u-angular/core/helpers/DateHelpers';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-balance-history-date-range',\r\n templateUrl: './balance-history-date-range.component.html',\r\n styleUrls: ['./balance-history-date-range.component.scss']\r\n})\r\nexport class BalanceHistoryDateRangeComponent extends BaseComponent {\r\n\r\n @Input() DateFrom: Date;\r\n @Input() DateTo: Date;\r\n @Input() Mode: EnumBalanceHistoryReportMode;\r\n @Input() CountDateRanges: number = 1;\r\n\r\n @Input() IsShowRangeButton: boolean = true;\r\n @Input() IsHorizaontal: boolean;\r\n\r\n @Output() DateFromChange: EventEmitter = new EventEmitter();\r\n @Output() DateToChange: EventEmitter = new EventEmitter();\r\n @Output() ModeChange: EventEmitter = new EventEmitter();\r\n @Output() CountDateRangesChange: EventEmitter = new EventEmitter();\r\n @Output() ValueChanged: EventEmitter = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'BalanceHistoryDateRangeComponent', BaseState);\r\n }\r\n\r\n protected override OnInitComponent(): void {\r\n this.SetCountDateRanges();\r\n }\r\n\r\n OnDateFromChange(e) {\r\n this.DateFromChange.emit(e.value);\r\n this.SetCountDateRanges();\r\n this.ValueChanged.emit();\r\n }\r\n\r\n OnDateToChange(e) {\r\n this.DateToChange.emit(e.value);\r\n this.SetCountDateRanges();\r\n this.ValueChanged.emit();\r\n }\r\n\r\n OnDateRangeSelected(e) {\r\n if (!e.itemData) { return; }\r\n\r\n this.DateFrom = e.itemData.DateFrom;\r\n this.DateFromChange.emit(this.DateFrom);\r\n this.DateTo = e.itemData.DateTo;\r\n this.DateToChange.emit(this.DateTo);\r\n\r\n const today = new Date();\r\n if (this.DateTo > today) { this.DateTo = new Date(today.getFullYear(), today.getMonth(), today.getDate()); }\r\n\r\n this.ValueChanged.emit();\r\n }\r\n\r\n OnReportModeChanged(e) {\r\n this.ModeChange.emit(e);\r\n\r\n if (this.Mode === EnumBalanceHistoryReportMode.Monthly && this.DateFrom !== Globals.BeginningOfYear) {\r\n this.DateFrom = Globals.BeginningOfYear;\r\n }\r\n\r\n if (this.Mode === EnumBalanceHistoryReportMode.Daily) {\r\n this.DateFrom = DateHelpers.AddDay(Globals.Today, -2);\r\n this.DateTo = DateHelpers.AddDay(Globals.Today, -1);\r\n this.CountDateRanges = 1;\r\n }\r\n\r\n this.SetDateFrom();\r\n\r\n this.ValueChanged.emit();\r\n }\r\n\r\n OnCountDateRangesChanged(e) {\r\n if (e.value !== this.CountDateRanges) {\r\n this.CountDateRanges = e.value;\r\n this.CountDateRangesChange.emit(this.CountDateRanges);\r\n\r\n this.SetDateFrom();\r\n\r\n this.ValueChanged.emit();\r\n }\r\n }\r\n\r\n private SetDateFrom() {\r\n if (this.Mode === EnumBalanceHistoryReportMode.Monthly) {\r\n this.DateFrom = new Date(this.DateTo.getFullYear(), this.DateTo.getMonth() - this.CountDateRanges + 1, 1);\r\n } else if (this.Mode === EnumBalanceHistoryReportMode.Weekly) {\r\n let dateFrom = new Date(this.DateTo.getFullYear(), this.DateTo.getMonth(), this.DateTo.getDate());\r\n // Calc count full weeks\r\n const countWeeks = this.DateTo.getDay() !== 6 ? this.CountDateRanges : this.CountDateRanges - 1;\r\n dateFrom.setDate(this.DateTo.getDate() - this.DateTo.getDay() - ((countWeeks) * 7));\r\n this.DateFrom = dateFrom;\r\n } else {\r\n let dateTo = new Date(this.DateTo.getFullYear(), this.DateTo.getMonth(), this.DateTo.getDate());\r\n this.DateFrom = DateHelpers.AddDay(dateTo, -this.CountDateRanges + 1);\r\n }\r\n\r\n this.DateFromChange.emit(this.DateFrom);\r\n }\r\n\r\n getCountLabel() {\r\n if (this.Mode === EnumBalanceHistoryReportMode.Monthly)\r\n return this.RC(\"lblCountMonth\");\r\n if (this.Mode === EnumBalanceHistoryReportMode.Weekly)\r\n return this.RC(\"lblCountWeeks\");\r\n return this.RC(\"lblCountDays\");\r\n }\r\n\r\n private SetCountDateRanges() {\r\n const calcDateRanges = () => {\r\n if (this.Mode === EnumBalanceHistoryReportMode.Monthly) {\r\n return (this.DateTo.getFullYear() - this.DateFrom.getFullYear()) * 12 + this.DateTo.getMonth() - this.DateFrom.getMonth() + 1;\r\n }\r\n\r\n\r\n if (this.Mode === EnumBalanceHistoryReportMode.Weekly) {\r\n let startDate = new Date(this.DateFrom.getFullYear(), this.DateFrom.getMonth(), this.DateFrom.getDate());\r\n startDate.setDate(this.DateFrom.getDate() - this.DateFrom.getDay());\r\n\r\n const countDateRanges = (this.DateTo.getTime() - startDate.getTime()) / (1000 * 60 * 60 * 24 * 7);\r\n return this.DateTo.getDay() === 6 ? Math.ceil(countDateRanges) : Math.floor(countDateRanges);\r\n }\r\n\r\n if (this.Mode === EnumBalanceHistoryReportMode.Daily) {\r\n const difference = this.DateTo.getTime() - this.DateFrom.getTime();\r\n return Math.floor(difference / (1000 * 60 * 60 * 24)) + 1;\r\n }\r\n };\r\n\r\n const countDateRanges = calcDateRanges();\r\n\r\n if (this.CountDateRanges !== countDateRanges && countDateRanges > 0) {\r\n this.CountDateRanges = countDateRanges;\r\n this.CountDateRangesChange.emit(this.CountDateRanges);\r\n }\r\n }\r\n}\r\n","export default \"\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\";","import { Component, Input, Output, EventEmitter, HostBinding } from '@angular/core';\r\nimport { CompanyGlobalService } from '@kraken/services/company-global.service';\r\nimport { Globals } from '@kraken/_globals';\r\nimport { AccountEndpoint } from '@kraken/_proxy/endpoints/account.endpoint';\r\nimport { BookingAccountEndpoint } from '@kraken/_proxy/endpoints/bookingaccount.endpoint';\r\nimport { CompanyEndpoint } from '@kraken/_proxy/endpoints/company.endpoint';\r\nimport { Account } from '@kraken/_proxy/entities/account.entity';\r\nimport { BookingAccount } from '@kraken/_proxy/entities/bookingaccount.entity';\r\nimport { Company } from '@kraken/_proxy/entities/company.entity';\r\nimport { AccountListParams } from '@kraken/_proxy/params/accountlist.param';\r\nimport { BookingAccountListParams } from '@kraken/_proxy/params/bookingaccountlist.param';\r\nimport { CompanyListParams } from '@kraken/_proxy/params/companylist.param';\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 { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { Subscription } from 'rxjs';\r\nimport { EnumSelectorModes, SelectorSettings } from '../base-selector.component';\r\nimport { isEqual } from 'lodash';\r\n\r\nclass State extends BaseState {\r\n BookingAccountValue: number | number[] = undefined;\r\n CompanyValue: number | number[] = undefined;\r\n AccountValue: number | number[];\r\n\r\n CompanyItems: Company[];\r\n AccountItems: Account[];\r\n BookingAccountItems: BookingAccount[];\r\n\r\n CompanyLoaded: boolean;\r\n AccountLoaded: boolean;\r\n BookingAccountLoaded: boolean;\r\n\r\n CompanyCanBeLoaded: boolean;\r\n AccountCanBeLoaded: boolean;\r\n BookingAccountCanBeLoaded: boolean;\r\n\r\n GlobalCompanyID: number;\r\n Mode: EnumSelectorModes;\r\n OrganizationID: number;\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-booking-account-selector',\r\n templateUrl: './booking-account-selector.component.html',\r\n styleUrls: ['./booking-account-selector.component.scss']\r\n})\r\nexport class BookingAccountSelectorComponent extends BaseComponent {\r\n\r\n @Input() CompanySettings: SelectorSettings = new SelectorSettings();\r\n @Input() AccountSettings: SelectorSettings = new SelectorSettings();\r\n @Input() BookingAccountSettings: SelectorSettings = new SelectorSettings();\r\n\r\n @Input() set CompanyValue(value: number | number[]) {\r\n if (this.State.CompanyValue !== value) {\r\n this.State.CompanyValue = value;\r\n\r\n // this.LoadAccountItems();\r\n }\r\n }\r\n @Input() set AccountValue(value: number | number[]) {\r\n if (this.State.AccountValue !== value) {\r\n this.State.AccountValue = value;\r\n if (this.AccountSettings?.FilterSettings?.ValueChanged) { this.AccountSettings.FilterSettings.ValueChanged(value); }\r\n\r\n // this.LoadBookingAccounts();\r\n }\r\n }\r\n @Input() set BookingAccountValue(value: number | number[]) {\r\n if (this.State.BookingAccountValue !== value) {\r\n this.State.BookingAccountValue = value;\r\n }\r\n };\r\n\r\n @Input() IsVertical = true;\r\n @Input() IsMinor = false;\r\n @Input() InheritParentWidth = false;\r\n\r\n @Output() CompanyValueChange: EventEmitter = new EventEmitter();\r\n @Output() AccountValueChange: EventEmitter = new EventEmitter();\r\n @Output() BookingAccountValueChange: EventEmitter = new EventEmitter();\r\n @Output() OnLoaded: EventEmitter = new EventEmitter();\r\n @Output() AccountChange = new EventEmitter();\r\n @Output() BookingAccountChange = new EventEmitter();\r\n @Output() CompanyChange = new EventEmitter();\r\n\r\n @HostBinding('class.hide-selector') IsHide: boolean = false;\r\n @HostBinding('style.min-width') minwidth: string = 'auto';\r\n @HostBinding('style.width') width: string = 'auto';\r\n\r\n\r\n private _subscriptions: Subscription[] = [];\r\n\r\n constructor(A: ServiceBagService,\r\n private companyEndpoint: CompanyEndpoint,\r\n private accountEndpoint: AccountEndpoint,\r\n private bookingAccountEndpoint: BookingAccountEndpoint,\r\n private companyGlobalService: CompanyGlobalService) {\r\n super(A, 'BookingAccountSelectorComponent', State);\r\n }\r\n\r\n protected override OnInitComponentFinished() {\r\n if (this.CompanySettings?.IsMultiple && !this.State.CompanyValue) { this.State.CompanyValue = []; }\r\n if (this.AccountSettings?.IsMultiple && !this.State.AccountValue) { this.State.AccountValue = []; }\r\n if (this.BookingAccountSettings?.IsMultiple && !this.State.BookingAccountValue) { this.State.BookingAccountValue = []; }\r\n\r\n this.width = this.GetWidth();\r\n this.minwidth = this.GetWidth();\r\n\r\n this.DefineMode();\r\n\r\n this.InitCompany();\r\n this.InitAccount();\r\n this.InitBookingAccount();\r\n\r\n this._subscriptions.push(this.companyGlobalService.Company$.subscribe((companyID) => { this.ChangeGlobalCompany(companyID); }));\r\n\r\n if (this.State.Mode === EnumSelectorModes.Independent) { this.LoadCompanyItems(); }\r\n }\r\n\r\n protected override OnDestroyComponent() {\r\n this._subscriptions.forEach(x => x.unsubscribe());\r\n this._subscriptions = [];\r\n }\r\n\r\n protected override OnInitState() {\r\n // this.State.\r\n }\r\n\r\n private ChangeGlobalCompany(companyID: number) {\r\n if (this.State.Mode === EnumSelectorModes.Independent) {\r\n return;\r\n }\r\n if (!this.companyGlobalService.IsEqualCompanyID(this.State.GlobalCompanyID, companyID)) {\r\n const isStateGlobalCompanyFirstInit = this.State.GlobalCompanyID === undefined;\r\n this.State.GlobalCompanyID = companyID;\r\n\r\n if (companyID > 0) { this.State.CompanyValue = this.CompanySettings?.IsMultiple ? [companyID] : companyID; }\r\n else { this.State.CompanyValue = this.CompanySettings?.IsMultiple ? [] : undefined; }\r\n\r\n if (!this.AccountSettings?.IsVisible && !this.BookingAccountSettings?.IsVisible) {\r\n this.IsHide = companyID > 0;\r\n }\r\n\r\n // we already have some values selected, so keep them if it's the first company change from undefined to some value\r\n if(!isStateGlobalCompanyFirstInit) {\r\n if (this.AccountSettings?.IsVisible) { this.State.AccountValue = this.AccountSettings.IsMultiple ? [] : undefined; }\r\n\r\n if (this.BookingAccountSettings?.IsVisible) { \r\n this.State.BookingAccountValue = this.BookingAccountSettings.IsMultiple ? [] : undefined; \r\n }\r\n }\r\n\r\n this.width = this.GetWidth();\r\n this.minwidth = this.GetWidth();\r\n }\r\n }\r\n\r\n public SetOrganizationID(organizationID: number) {\r\n this.State.OrganizationID = organizationID;\r\n this.LoadCompanyItems();\r\n }\r\n\r\n //#region Company\r\n\r\n public IsShowCompany() {\r\n return this.CompanySettings?.IsVisible && (!this.State.GlobalCompanyID || this.State.GlobalCompanyID < 0);\r\n }\r\n\r\n public OnCompanyChanged(value: number | number[]) {\r\n if (!this.CompanySettings?.IsVisible) { return; }\r\n\r\n if (this.State.CompanyValue != value) {\r\n this.Change('Company', value);\r\n\r\n // Update accounts (source and value)\r\n if (this.AccountSettings?.IsVisible) {\r\n this.Change('Account', null);\r\n\r\n if (this.State.Mode === EnumSelectorModes.Independent) { this.LoadAccountItems(); }\r\n }\r\n\r\n // Update booking accounts (source and value)\r\n this.Change('BookingAccount', null);\r\n if (this.BookingAccountSettings?.IsVisible) {\r\n if (this.State.Mode === EnumSelectorModes.Independent && !this.AccountSettings?.IsVisible) {\r\n this.LoadBookingAccountItems();\r\n }\r\n }\r\n\r\n this.ValueChanged(this.CompanySettings, this.State.CompanyValue);\r\n }\r\n }\r\n\r\n private InitCompany() {\r\n if (!this.CompanySettings?.IsVisible) { return; }\r\n\r\n if (this.State.Mode === EnumSelectorModes.Independent) {\r\n this.State.CompanyCanBeLoaded = true;\r\n return;\r\n }\r\n\r\n // Subscribe to get data source\r\n this._subscriptions.push(this.CompanySettings.FilterSettings.DataSource$.subscribe((dataSource) => {\r\n this.State.CompanyItems = dataSource;\r\n this.SetOnceCompany();\r\n }));\r\n\r\n // Subscribe to set data source\r\n if (this.State.Mode === EnumSelectorModes.FilterMajor) {\r\n this._subscriptions.push(this.CompanySettings.FilterSettings.LoadStatus$.subscribe((status) => {\r\n this.State.CompanyLoaded = status.IsLoaded;\r\n this.State.CompanyCanBeLoaded = status.CanBeLoaded;\r\n this.LoadCompanyItems();\r\n }));\r\n }\r\n }\r\n\r\n private LoadCompanyItems() {\r\n if (!this.CompanySettings?.IsVisible) { return; }\r\n if (this.State.CompanyLoaded) { return; }\r\n\r\n if (!this.CompanySettings?.IsVisible || !this.State.CompanyCanBeLoaded || this.IsEmptyOgranization()) {\r\n if (!this.State.CompanyItems || this.State.CompanyItems.length > 0) {\r\n this.SetCompanyItems([]);\r\n this.Loaded(this.CompanySettings);\r\n }\r\n\r\n return;\r\n }\r\n\r\n let params = this.GetParams(this.CompanySettings);\r\n if (!params.OrganizationID) { params.OrganizationID = this.State.OrganizationID || Globals.OrganizationID; }\r\n if (params.LoadActive === null || params.LoadActive === undefined) { params.LoadActive = true; }\r\n\r\n this.Do(this.companyEndpoint.ListEx(params, null), false, (response) => {\r\n this.SetCompanyItems(response.Entities);\r\n this.Loaded(this.CompanySettings);\r\n });\r\n }\r\n\r\n private SetCompanyItems(companies: Company[]) {\r\n if (!this.CompanySettings?.IsVisible) { return; }\r\n\r\n if (this.State.Mode === EnumSelectorModes.Independent) {\r\n this.State.CompanyItems = companies;\r\n this.SetOnceCompany();\r\n this.LoadAccountItems();\r\n } else if (this.State.Mode === EnumSelectorModes.FilterMajor) {\r\n if (this.CompanySettings.FilterSettings) { this.CompanySettings.FilterSettings.DataSourceLoaded(companies); }\r\n }\r\n }\r\n\r\n private SetParentCompany() {\r\n if (!this.AccountSettings?.IsVisible || !this.CompanySettings?.IsVisible) { return; }\r\n if (!this.IsEmpty(this.State.CompanyValue) || this.IsEmpty(this.State.AccountValue)) { return; }\r\n\r\n const accounts = this.AccountSettings?.IsMultiple ? this.State.AccountValue as [] : [this.State.AccountValue as number];\r\n const companies = this.State.AccountItems.filter(x => accounts.indexOf(x.EntryID) >= 0).map(x => x.CompanyID).filter((value, index, arr) => arr.indexOf(value) === index);\r\n\r\n if (companies.length > 0) {\r\n if (this.CompanySettings.IsMultiple) { this.Change('Company', companies); } // If multiple set whole array\r\n else if (companies.length === 1) { this.Change('Company', companies[0]); } // If single and in the array only once element set this element\r\n else { return; } // If single but array has more then one element - return\r\n\r\n this.State.AccountItems = this.State.AccountItems.filter(x => companies.indexOf(x.CompanyID) >= 0); //Filter accounts by selected companies\r\n }\r\n }\r\n\r\n private SetOnceCompany() {\r\n if (!this.CompanySettings?.IsVisible) { return; }\r\n\r\n if (this.State.CompanyItems?.length === 1) {\r\n this.Change('Company', this.State.CompanyItems[0].EntryID);\r\n }\r\n }\r\n\r\n //#endregion\r\n\r\n //#region Account\r\n\r\n public OnAccountChanged(value: number | number[]) {\r\n if (!this.AccountSettings?.IsVisible) { return; }\r\n\r\n if (this.State.AccountValue != value) {\r\n this.Change('Account', value);\r\n\r\n // Update booking accounts (source and value)\r\n this.Change('BookingAccount', null);\r\n if (this.BookingAccountSettings?.IsVisible) {\r\n if (this.State.Mode === EnumSelectorModes.Independent) this.LoadBookingAccountItems();\r\n }\r\n\r\n // Update company value\r\n this.SetParentCompany();\r\n this.ValueChanged(this.AccountSettings, this.State.AccountValue);\r\n }\r\n }\r\n\r\n private InitAccount() {\r\n if (!this.AccountSettings?.IsVisible) { return; }\r\n\r\n if (this.State.Mode === EnumSelectorModes.Independent) {\r\n this.State.AccountCanBeLoaded = true;\r\n return;\r\n }\r\n\r\n // Subscribe to get data source\r\n this._subscriptions.push(this.AccountSettings.FilterSettings.DataSource$.subscribe((dataSource) => {\r\n this.State.AccountItems = dataSource;\r\n this.SetOnceAccount();\r\n }));\r\n\r\n // Subscribe to set data source\r\n if (this.State.Mode === EnumSelectorModes.FilterMajor) {\r\n this._subscriptions.push(this.AccountSettings.FilterSettings.LoadStatus$.subscribe((status) => {\r\n this.State.AccountLoaded = status.IsLoaded;\r\n this.State.AccountCanBeLoaded = status.CanBeLoaded;\r\n this.LoadAccountItems();\r\n }));\r\n }\r\n }\r\n\r\n private LoadAccountItems() {\r\n if (!this.AccountSettings?.IsVisible) { return; }\r\n if (this.State.AccountLoaded) { return; }\r\n\r\n if (!this.AccountSettings?.IsVisible || !this.State.AccountCanBeLoaded || this.IsEmptyOgranization()) {\r\n if (!this.State.AccountItems || this.State.AccountItems?.length > 0) {\r\n this.SetAccountItems([]);\r\n this.Loaded(this.AccountSettings);\r\n }\r\n\r\n return;\r\n }\r\n\r\n let params = this.GetParams(this.AccountSettings);\r\n if (!params.OrganizationID) { params.OrganizationID = this.State.OrganizationID || Globals.OrganizationID; }\r\n if (!params.Companies || params.Companies.length === 0) { params.Companies = this.GetArray(this.State.CompanyValue); }\r\n if (params.IsActive === null || params.IsActive === undefined) { params.IsActive = true; }\r\n\r\n this.Do(this.accountEndpoint.ListEx(params, null), false, (response) => {\r\n this.SetAccountItems(response.Entities);\r\n this.Loaded(this.AccountSettings);\r\n });\r\n }\r\n\r\n private SetAccountItems(companies: Account[]) {\r\n if (!this.AccountSettings?.IsVisible) { return; }\r\n\r\n if (this.State.Mode === EnumSelectorModes.Independent) {\r\n this.State.AccountItems = companies;\r\n this.SetOnceAccount();\r\n this.LoadBookingAccountItems();\r\n } else if (this.State.Mode === EnumSelectorModes.FilterMajor) {\r\n if (this.AccountSettings.FilterSettings) { this.AccountSettings.FilterSettings.DataSourceLoaded(companies); }\r\n }\r\n }\r\n\r\n private SetParentAccount() {\r\n if (!this.AccountSettings?.IsVisible || !this.BookingAccountSettings?.IsVisible) { return; }\r\n if (this.IsEmpty(this.State.BookingAccountValue) || !this.IsEmpty(this.State.AccountValue)) { return; }\r\n\r\n const bookingAccounts = this.BookingAccountSettings?.IsMultiple ? this.State.BookingAccountValue as [] : [this.State.BookingAccountValue as number];\r\n const accounts = this.State.BookingAccountItems.filter(x => bookingAccounts.indexOf(x.EntryID) >= 0).map(x => x.AccountID).filter((value, index, arr) => arr.indexOf(value) === index);\r\n\r\n if (accounts.length > 0) {\r\n if (this.AccountSettings.IsMultiple) { this.Change('Account', accounts); } // If multiple set whole array\r\n else if (accounts.length === 1) { this.Change('Account', accounts[0]); } // If single and in the array only once element set this element\r\n else { return; } // If single but array has more then one element - return\r\n\r\n this.State.BookingAccountItems = this.State.BookingAccountItems.filter(x => accounts.indexOf(x.AccountID) >= 0); //Filter booking accounts by selected accounts\r\n this.SetParentCompany();\r\n }\r\n }\r\n\r\n private SetOnceAccount() {\r\n if (!this.AccountSettings?.IsVisible) { return; }\r\n\r\n if (this.State.AccountItems?.length === 1) {\r\n this.Change('Account', this.State.AccountItems[0].EntryID);\r\n this.SetParentCompany();\r\n }\r\n }\r\n\r\n //#endregion\r\n\r\n //#region Booking account\r\n\r\n public OnBookingAccountChanged(value: number | number[]) {\r\n if (!this.BookingAccountSettings?.IsVisible) { return; }\r\n\r\n if (this.State.BookingAccountValue != value) {\r\n this.Change('BookingAccount', value);\r\n\r\n // Update account value\r\n this.SetParentAccount();\r\n\r\n this.ValueChanged(this.BookingAccountSettings, this.State.BookingAccountValue);\r\n }\r\n }\r\n\r\n private InitBookingAccount() {\r\n if (!this.BookingAccountSettings?.IsVisible) { return; }\r\n\r\n if (this.State.Mode === EnumSelectorModes.Independent) {\r\n this.State.BookingAccountCanBeLoaded = true;\r\n return;\r\n }\r\n\r\n // Subscribe to get data source\r\n this._subscriptions.push(this.BookingAccountSettings.FilterSettings.DataSource$.subscribe((dataSource) => {\r\n this.State.BookingAccountItems = dataSource;\r\n this.SetOnceBookingAccount();\r\n }));\r\n\r\n // Subscribe to set data source\r\n if (this.State.Mode === EnumSelectorModes.FilterMajor) {\r\n this._subscriptions.push(this.BookingAccountSettings.FilterSettings.LoadStatus$.subscribe((status) => {\r\n this.State.BookingAccountLoaded = status.IsLoaded;\r\n this.State.BookingAccountCanBeLoaded = status.CanBeLoaded;\r\n this.LoadBookingAccountItems();\r\n }));\r\n }\r\n }\r\n\r\n private LoadBookingAccountItems() {\r\n if (!this.BookingAccountSettings?.IsVisible) { return; }\r\n if (this.State.BookingAccountLoaded) { return; }\r\n\r\n // Set empty data source\r\n if (!this.BookingAccountSettings?.IsVisible || !this.State.BookingAccountCanBeLoaded || this.IsEmptyOgranization()) {\r\n this.SetBookingAccountItems([]);\r\n return;\r\n }\r\n\r\n // Load data source\r\n let params = this.GetParams(this.BookingAccountSettings);\r\n if (!params.OrganizationID) { params.OrganizationID = this.State.OrganizationID || Globals.OrganizationID; }\r\n if (!params.Companies || params.Companies.length === 0) { params.Companies = this.GetArray(this.State.CompanyValue); }\r\n if (!params.Accounts || params.Accounts.length === 0) { params.Accounts = this.GetArray(this.State.AccountValue); }\r\n\r\n this.Do(this.bookingAccountEndpoint.ListEx(params), false, (response) => {\r\n this.SetBookingAccountItems(response.Entities);\r\n this.Loaded(this.BookingAccountSettings);\r\n });\r\n }\r\n\r\n private SetBookingAccountItems(companies: BookingAccount[]) {\r\n if (!this.BookingAccountSettings?.IsVisible) { return; }\r\n\r\n if (this.State.Mode === EnumSelectorModes.Independent) {\r\n this.State.BookingAccountItems = companies;\r\n this.SetOnceBookingAccount();\r\n } else if (this.State.Mode === EnumSelectorModes.FilterMajor) {\r\n if (this.BookingAccountSettings.FilterSettings) { this.BookingAccountSettings.FilterSettings.DataSourceLoaded(companies); }\r\n }\r\n }\r\n\r\n private SetOnceBookingAccount() {\r\n if (!this.BookingAccountSettings?.IsVisible) { return; }\r\n\r\n if (this.State.BookingAccountItems?.length === 1) {\r\n this.Change('BookingAccount', this.State.BookingAccountItems[0].EntryID);\r\n this.SetParentAccount();\r\n }\r\n }\r\n\r\n //#endregion\r\n\r\n private GetWidth() {\r\n if (this.IsVertical) { return 'auto'; }\r\n if (this.InheritParentWidth) { return '100%'; }\r\n\r\n let countItems = 0;\r\n if (this.IsShowCompany()) { countItems++; }\r\n if (this.AccountSettings?.IsVisible) { countItems++; }\r\n if (this.BookingAccountSettings?.IsVisible) { countItems++; }\r\n\r\n if (countItems === 0) { return '0'; }\r\n\r\n return (countItems * 200 + (countItems - 1) * 20).toString() + 'px';\r\n }\r\n\r\n private GetArray(value: number | number[]) {\r\n if (!value) { return []; }\r\n if (Array.isArray(value)) { return value; }\r\n\r\n return [value];\r\n }\r\n\r\n private GetParams(settings: SelectorSettings) {\r\n if (!settings?.Params) { return {} as T; }\r\n if (typeof (settings?.Params) === 'function') { return (settings as any).Params(); }\r\n\r\n return Utils.CloneObject(settings.Params as any) as T;\r\n }\r\n\r\n private DefineMode() {\r\n const settings = this.CompanySettings || this.AccountSettings || this.BookingAccountSettings;\r\n\r\n if (!settings.FilterSettings) { this.State.Mode = EnumSelectorModes.Independent; }\r\n else if (this.IsMinor) { this.State.Mode = EnumSelectorModes.FilterMinor; }\r\n else { this.State.Mode = EnumSelectorModes.FilterMajor; }\r\n }\r\n\r\n private Loaded(settings: SelectorSettings) {\r\n if (this.State.Mode === EnumSelectorModes.FilterMajor && settings.FilterSettings) { settings.FilterSettings.Loaded(); }\r\n }\r\n\r\n private ValueChanged(settings: SelectorSettings, value: number | number[]) {\r\n if (this.State.Mode !== EnumSelectorModes.Independent) { setTimeout(() => { settings.FilterSettings?.ValueChanged(value); }); }\r\n }\r\n\r\n private IsEmpty(value: number | number[]) {\r\n if (!value) { return true; }\r\n const values = value as number[];\r\n if (values?.length === 0) { return true; }\r\n\r\n return false;\r\n }\r\n\r\n private IsEmptyOgranization() {\r\n return !this.State.OrganizationID && !Globals.OrganizationID;\r\n }\r\n\r\n private IdToEntity(ids: number | number[], entities) {\r\n if (!ids || !entities) return null;\r\n\r\n if (Array.isArray(ids)) {\r\n return entities.filter(a => ids.includes(a.EntryID));\r\n }\r\n\r\n return entities.find(a => a.EntryID === ids);\r\n }\r\n\r\n private EmitChange(name: 'Account' | 'BookingAccount' | 'Company', value: number | number[]) {\r\n const entities = this.State[`${name}Items`];\r\n\r\n this[`${name}ValueChange`].emit(value);\r\n this[`${name}Change`].emit(this.IdToEntity(value, entities));\r\n }\r\n\r\n private Change(name: 'Account' | 'BookingAccount' | 'Company', value: number | number[] | null) {\r\n const settings = this[`${name}Settings`];\r\n const IsMultiple = settings?.IsMultiple;\r\n\r\n const getNextValue = (v: number | number[] | null) => {\r\n if (IsMultiple) {\r\n if (v === null || v === undefined) return [];\r\n\r\n if (!Array.isArray(v)) return [v];\r\n }\r\n\r\n return v;\r\n };\r\n\r\n const currentValue = this.State[`${name}Value`];\r\n const nextValue = getNextValue(value);\r\n\r\n if (!isEqual(currentValue, nextValue)) {\r\n this.State[`${name}Value`] = nextValue;\r\n this.EmitChange(name, nextValue);\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\";","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { IBaseComponent } from '@m4u-angular/base/component/IBaseComponent';\r\nimport { ServiceBagService, ServiceBagServices } 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\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-filter-item-selector',\r\n templateUrl: './filter-item-selector.component.html',\r\n styleUrls: ['./filter-item-selector.component.scss']\r\n})\r\nexport class FilterItemSelectorComponent extends BaseComponent {\r\n\r\n @Input() public Component: IBaseComponent;\r\n @Input() Name: string;\r\n @Input() Label: string;\r\n @Input() IsMultiple: boolean;\r\n\r\n @Input() ValueExpr = \"EntryID\";\r\n @Input() DisplayExpr: any = \"Name\";\r\n @Input() ReadOnly: boolean = false;\r\n @Input() MaxDisplayedTags = 3;\r\n @Input() Items: any[];\r\n @Input() DataSource: DataSource;\r\n @Input() IsGrouped: boolean;\r\n @Input() IsShowSelectionControls: boolean;\r\n @Input() DropDownOptions: any;\r\n @Input() IsHideClearButton: boolean;\r\n @Input() IsSearchDisabled: boolean;\r\n @Input() IsRequired: boolean;\r\n\r\n @Input() Value: any;\r\n @Output() ValueChange: EventEmitter = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'FilterItemSelectorComponent', BaseState);\r\n }\r\n\r\n public OnValueChanged(e) {\r\n if (e?.value !== this.Value) {\r\n this.Value = e.value;\r\n this.ValueChange.emit(this.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\";","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { BanksListService } from '@kraken/services/banks-list.service';\r\nimport { OrganizationEndpoint } from '@kraken/_proxy/endpoints/organization.endpoint';\r\nimport { EnumBanks } from '@kraken/_proxy/enums';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport DataSource from 'devextreme/data/data_source';\r\nimport { BaseSelectorComponent, BaseSelectorState, SelectorSettings } from '../base-selector.component';\r\n\r\nclass State extends BaseSelectorState {\r\n IsOneItem: boolean;\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-bank-selector',\r\n templateUrl: './bank-selector.component.html',\r\n styleUrls: ['./bank-selector.component.scss']\r\n})\r\nexport class BankSelectorComponent extends BaseSelectorComponent {\r\n\r\n @Input() Settings: SelectorSettings;\r\n \r\n @Input() Value: EnumBanks | EnumBanks[];\r\n @Output() ValueChange: EventEmitter = new EventEmitter();\r\n\r\n @Input() override ShouldHandleDefault = true;\r\n @Input() override IsMinor = false;\r\n\r\n constructor(A: ServiceBagService, \r\n private banksListService: BanksListService,\r\n private organizationEndpoint: OrganizationEndpoint) {\r\n super(A, 'BankSelectorComponent', State);\r\n }\r\n \r\n public override GetDefaultDataSource() { \r\n const bankItems = this.DS('AllowedBanks') as unknown as GenericListEntity[];\r\n return this.banksListService.GetGroupedDSFromList(bankItems);\r\n }\r\n\r\n public override LoadDataSource() {\r\n return new Promise((resolve, reject) => {\r\n \r\n this.Do(this.organizationEndpoint.GetRelevantBanks(this.State.OrganizationID), false, (response) => {\r\n const bankItems = this.LIST('Banks').filter(s => response.Data.some(b => b === s.Value));\r\n const banksItemsDS = this.banksListService.GetGroupedDSFromList(bankItems);\r\n\r\n this.State.IsOneItem = response.Data.length === 1;\r\n if (this.State.IsOneItem) { this.OnValueChanged(response.Data[0]); }\r\n \r\n resolve(banksItemsDS);\r\n }, reject);\r\n \r\n })\r\n }\r\n}\r\n","export default \"\\r\\n\";","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { OrganizationEndpoint } from '@kraken/_proxy/endpoints/organization.endpoint';\r\nimport { EnumBookingAccountSubtypes } from '@kraken/_proxy/enums';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseSelectorComponent, BaseSelectorState, SelectorSettings } from '../base-selector.component';\r\n\r\nclass State extends BaseSelectorState {\r\n IsOneItem: boolean;\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-booking-account-subtype-selector',\r\n templateUrl: './booking-account-subtype-selector.component.html',\r\n styleUrls: ['./booking-account-subtype-selector.component.scss']\r\n})\r\nexport class BookingAccountSubtypeSelectorComponent extends BaseSelectorComponent {\r\n\r\n @Input() Settings: SelectorSettings;\r\n @Input() IsTransactionBookingAccountsSubtypes: boolean;\r\n\r\n @Input() Value: EnumBookingAccountSubtypes | EnumBookingAccountSubtypes[];\r\n @Output() ValueChange: EventEmitter = new EventEmitter();\r\n \r\n @Input() override IsMinor = false;\r\n\r\n constructor(A: ServiceBagService,\r\n private organizationEndpoint: OrganizationEndpoint) {\r\n super(A, 'BookingAccountSubtypeSelectorComponent', State);\r\n }\r\n\r\n public override GetDefaultDataSource() { return this.GetAllowedSubtypes(); }\r\n\r\n public override LoadDataSource() {\r\n return new Promise((resolve, reject) => {\r\n this.Do(this.organizationEndpoint.GetRelevantBookingAccountSubtypes(this.State.OrganizationID), false, (response) => {\r\n const subtypesItems = this.GetSubtypesItems(response.Data);\r\n\r\n resolve(subtypesItems)\r\n }, reject);\r\n });\r\n }\r\n\r\n private GetAllowedSubtypes() {\r\n let allowedSubtypes = this.DS('AllowedSubtypes') as unknown as GenericListEntity[] || [];\r\n if (this.IsTransactionBookingAccountsSubtypes) {\r\n allowedSubtypes = allowedSubtypes.filter(st => st.Value === EnumBookingAccountSubtypes.Current || st.Value === EnumBookingAccountSubtypes.CreditCard);\r\n }\r\n\r\n return allowedSubtypes;\r\n }\r\n\r\n private GetSubtypesItems(relevantSubtypes: EnumBookingAccountSubtypes[]) {\r\n const _allowedSubtypes = this.GetAllowedSubtypes().filter(s => relevantSubtypes.some(b => b === s.Value))\r\n const subtypesItems = _allowedSubtypes;\r\n\r\n if (!this.Value || !this.Value.length) {\r\n let isNeedFilterGarantee = true;\r\n if (this.Settings?.Custom?.IsDisableDefaultFilterGarantee) { isNeedFilterGarantee = false; }\r\n\r\n if (this.Settings?.IsMultiple && _allowedSubtypes.find(s => s.Value === EnumBookingAccountSubtypes.Guarantee) && isNeedFilterGarantee) {\r\n this.OnValueChanged(_allowedSubtypes.map(s => s.Value as EnumBookingAccountSubtypes));\r\n } else if (_allowedSubtypes.length === 1) {\r\n this.State.IsOneItem = true;\r\n this.OnValueChanged(_allowedSubtypes[0].Value as EnumBookingAccountSubtypes);\r\n }\r\n }\r\n\r\n return subtypesItems;\r\n }\r\n}\r\n","export default \"\\r\\n\";","import { Component, EventEmitter, Output, Input } from '@angular/core';\r\nimport { OrganizationEndpoint } from '@kraken/_proxy/endpoints/organization.endpoint';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseSelectorComponent, BaseSelectorState, SelectorSettings } from '../base-selector.component';\r\n\r\nclass State extends BaseSelectorState {\r\n IsOneItem: boolean;\r\n}\r\n@Component({\r\n selector: 'app-currency-selector',\r\n templateUrl: './currency-selector.component.html',\r\n styleUrls: ['./currency-selector.component.scss']\r\n})\r\nexport class CurrencySelectorComponent extends BaseSelectorComponent {\r\n\r\n @Input() Settings: SelectorSettings;\r\n @Input() Value: string | string[];\r\n @Output() ValueChange: EventEmitter = new EventEmitter();\r\n\r\n @Input() Label: string = this.RC('lblCurrency');\r\n @Input() IsLoadRelevantCurrencies = true;\r\n @Input() override ShouldHandleDefault = true;\r\n @Input() override IsMinor = false;\r\n\r\n\r\n protected override IsOnlyDefaultDataSource() { return this.IsLoadRelevantCurrencies; }\r\n\r\n constructor(A: ServiceBagService,\r\n private organizationEndpoint: OrganizationEndpoint) {\r\n super(A, 'CurrencySelectorComponent', State)\r\n }\r\n\r\n public override GetDefaultDataSource() { return this.LIST('Currencies'); }\r\n\r\n public override LoadDataSource() {\r\n return new Promise((resolve, reject) => {\r\n this.Do(this.organizationEndpoint.GetRelevantCurrencies(this.State.OrganizationID), false, (response) => {\r\n let currencyItems = this.LIST('Currencies').filter(s => response.Data.some(b => b === s.Value));\r\n if (currencyItems.length === 0) { currencyItems = this.LIST('Currencies').filter(s => s.Value === 'ILS'); }\r\n\r\n this.State.IsOneItem = response.Data.length === 1;\r\n if (this.State.IsOneItem) { this.OnValueChanged(response.Data[0]); }\r\n resolve(currencyItems)\r\n }, reject);\r\n })\r\n }\r\n\r\n GetCurrencyDisplayValue = (item) => {\r\n if (item) { return `${item.Text} (${item.Symbol})`; }\r\n }\r\n\r\n}\r\n\r\n","export default \"\\r\\n\";","import { Component, Output, Input, EventEmitter } from '@angular/core';\r\nimport { AccountGroupEndpoint } from '@kraken/_proxy/endpoints/accountgroup.endpoint';\r\nimport { AccountGroup } from '@kraken/_proxy/entities/accountgroup.entity';\r\nimport { AccountGroupListParams } from '@kraken/_proxy/params/accountgrouplist.param';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseSelectorComponent, BaseSelectorState, SelectorSettings } from '../base-selector.component';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-account-group-selector',\r\n templateUrl: './account-group-selector.component.html',\r\n styleUrls: ['./account-group-selector.component.scss']\r\n})\r\nexport class AccountGroupSelectorComponent extends BaseSelectorComponent, number, void, AccountGroup[]> {\r\n\r\n @Input() Settings: SelectorSettings;\r\n @Input() Value: number | number[];\r\n @Output() ValueChange: EventEmitter = new EventEmitter();\r\n\r\n @Input() override IsMinor = false;\r\n\r\n constructor(A: ServiceBagService,\r\n private accountGroupEndpoint: AccountGroupEndpoint) {\r\n super(A, 'AccountGroupSelectorComponent', BaseSelectorState);\r\n }\r\n\r\n public override GetDefaultDataSource() { return []; }\r\n\r\n public override LoadDataSource() {\r\n return new Promise((resolve, reject) => {\r\n const params = new AccountGroupListParams();\r\n params.OrganizationID = this.State.OrganizationID;\r\n params.LoadActive = true;\r\n\r\n this.Do(this.accountGroupEndpoint.ListEx(params, null), false, (response) => {\r\n resolve(response.Entities)\r\n }, reject);\r\n })\r\n }\r\n\r\n}\r\n","export default \"\\r\\n\";","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { TransactionCategoryEndpoint } from '@kraken/_proxy/endpoints/transactioncategory.endpoint';\r\nimport { TransactionCategory } from '@kraken/_proxy/entities/transactioncategory.entity';\r\nimport { ListTransactionCategoriesParams } from '@kraken/_proxy/params/listtransactioncategories.param';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseSelectorComponent, BaseSelectorState, SelectorSettings } from '../base-selector.component';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\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\r\n BaseSelectorComponent, number, ListTransactionCategoriesParams, TransactionCategory[]> {\r\n\r\n @Input() Settings: SelectorSettings;\r\n @Input() Value: number | number[];\r\n @Output() ValueChange: EventEmitter = new EventEmitter();\r\n\r\n @Input() override IsMinor = false;\r\n\r\n constructor(A: ServiceBagService,\r\n private transactionCategoryEndpoint: TransactionCategoryEndpoint) {\r\n super(A, 'CategorySelectorComponent', BaseSelectorState);\r\n }\r\n\r\n public override GetDefaultDataSource() {\r\n return [];\r\n }\r\n\r\n public override LoadDataSource() {\r\n return new Promise((resolve, reject) => {\r\n const params = this.GetParams();\r\n if (!params.OrganizationID) {\r\n params.OrganizationID = this.State.OrganizationID;\r\n }\r\n if (!params.LoadGlobal) {\r\n params.LoadGlobal = true;\r\n }\r\n if (!params.LoadActive) {\r\n params.LoadActive = true;\r\n }\r\n\r\n this.Do(this.transactionCategoryEndpoint.ListCategories(params, null), false, (response) => {\r\n const categoryItems = response.Entities;\r\n\r\n const uncategorized = new TransactionCategory();\r\n uncategorized.EntryID = -999;\r\n uncategorized.Name = this.RC('lblUncategorized');\r\n categoryItems.unshift(uncategorized);\r\n\r\n resolve(categoryItems);\r\n }, reject);\r\n });\r\n }\r\n\r\n}\r\n","export default \"\\r\\n\";","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { ForecastMapperListParams } from '@kraken/_proxy/params/forecastmapperlist.param';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseSelectorComponent, BaseSelectorState, SelectorSettings } from '../base-selector.component';\r\nimport { ForecastMapperEndpoint } from '@kraken/_proxy/endpoints/forecastmapper.endpoint';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-forecast-mapper-selector',\r\n templateUrl: './forecast-mapper-selector.component.html',\r\n styleUrls: ['./forecast-mapper-selector.component.scss']\r\n})\r\nexport class ForecastMapperSelectorComponent extends BaseSelectorComponent, string | number, ForecastMapperListParams, GenericListEntity[]> {\r\n\r\n @Input() Settings: SelectorSettings;\r\n @Input() Value: string | number | (string | number)[];\r\n @Output() ValueChange: EventEmitter = new EventEmitter();\r\n \r\n @Input() override IsMinor = false;\r\n\r\n constructor(A: ServiceBagService,\r\n private forecastMapperEndpoint: ForecastMapperEndpoint) {\r\n super(A, 'ForecastMapperSelectorComponent', BaseSelectorState);\r\n }\r\n\r\n public override GetDefaultDataSource() { return [...this.GetFirstItems(), ...this.GetLastItems()]; }\r\n\r\n public override LoadDataSource() {\r\n return new Promise((resolve, reject) => {\r\n const params = this.GetParams();\r\n if (!params.OrganizationID) { params.OrganizationID = this.State.OrganizationID; }\r\n\r\n this.Do(this.forecastMapperEndpoint.ListExByParams(params, null), false, (response) => {\r\n const forecastMapperItems = this.GetFirstItems();\r\n\r\n response.Entities.forEach(entity => {\r\n forecastMapperItems.push({\r\n EntryID: entity.EntryID,\r\n Value: entity.EntryID.toString(),\r\n Text: entity.AccountingEssense\r\n });\r\n })\r\n\r\n forecastMapperItems.push(...this.GetLastItems())\r\n resolve(forecastMapperItems)\r\n }, reject);\r\n })\r\n }\r\n\r\n private GetFirstItems() {\r\n return []\r\n // return this.LIST('ForecastTypes').filter(({ Value }) => Value === EnumForecastType.Manual || Value === EnumForecastType.Recurring);\r\n }\r\n\r\n private GetLastItems() {\r\n return []\r\n // return this.LIST('ForecastTypes').filter(({ Value }) => Value === EnumForecastType.CCExpense || Value === EnumForecastType.CCIncome || Value === EnumForecastType.Loans);\r\n }\r\n\r\n}\r\n","export default \"\\r\\n\";","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { ScenarioEndpoint } from '@kraken/_proxy/endpoints/scenario.endpoint';\r\nimport { Scenario } from '@kraken/_proxy/entities/scenario.entity';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseSelectorComponent, BaseSelectorState, SelectorSettings } from '../base-selector.component';\r\n\r\n@Component({\r\n selector: 'app-scenario-selector',\r\n templateUrl: './scenario-selector.component.html',\r\n styleUrls: ['./scenario-selector.component.scss']\r\n})\r\nexport class ScenarioSelectorComponent extends BaseSelectorComponent, number, void, Scenario[]> {\r\n\r\n @Input() Settings: SelectorSettings;\r\n @Input() Value: number | number[];\r\n @Output() ValueChange: EventEmitter = new EventEmitter();\r\n \r\n @Input() override IsMinor = false;\r\n\r\n constructor(A: ServiceBagService,\r\n private scenarioEndpoint: ScenarioEndpoint) {\r\n super(A, 'ScenarioSelectorComponent', BaseSelectorState);\r\n }\r\n \r\n public override GetDefaultDataSource() { return []; }\r\n\r\n public override LoadDataSource() {\r\n return new Promise((resolve, reject) => {\r\n this.Do(this.scenarioEndpoint.ListEx(this.State.OrganizationID, true, null), false, (response) => {\r\n const scenarioItems = response.Entities;\r\n const defaultScenario = response.Entities.find(scenario => scenario.IsDefault);\r\n\r\n if (defaultScenario) {\r\n this.OnValueChanged(defaultScenario.EntryID);\r\n }\r\n else if (response.Entities.length === 1) {\r\n this.OnValueChanged(response.Entities[0].EntryID);\r\n }\r\n \r\n resolve(scenarioItems)\r\n }, reject);\r\n })\r\n }\r\n\r\n}\r\n","export default \"\\r\\n\";","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { ProbabilityLevelEndpoint } from '@kraken/_proxy/endpoints/probabilitylevel.endpoint';\r\nimport { ProbabilityLevel } from '@kraken/_proxy/entities/probabilitylevel.entity';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseSelectorComponent, BaseSelectorState, SelectorSettings } from '../base-selector.component';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-probability-level-selector',\r\n templateUrl: './probability-level-selector.component.html',\r\n styleUrls: ['./probability-level-selector.component.scss']\r\n})\r\nexport class ProbabilityLevelSelectorComponent extends BaseSelectorComponent, number, void, ProbabilityLevel[]> {\r\n\r\n @Input() Settings: SelectorSettings;\r\n @Input() Value: number | number[];\r\n @Output() ValueChange: EventEmitter = new EventEmitter();\r\n \r\n @Input() override IsMinor = false;\r\n\r\n constructor(A: ServiceBagService,\r\n private probabilityLevelEndpoint: ProbabilityLevelEndpoint) {\r\n super(A, 'ProbabilityLevelSelectorComponent', BaseSelectorState);\r\n }\r\n\r\n public override GetDefaultDataSource() { return []; }\r\n\r\n public override LoadDataSource() {\r\n return new Promise((resolve, reject) => {\r\n this.Do(this.probabilityLevelEndpoint.ListEx(this.State.OrganizationID, true, null), false, (response) => {\r\n const probabilityLevelItems = response.Entities;\r\n\r\n const defaultProbabilityLevel = response.Entities.find(probabilityLevel => probabilityLevel.IsDefault);\r\n if (defaultProbabilityLevel) { this.OnValueChanged(defaultProbabilityLevel.EntryID); }\r\n else if (response.Entities.length === 1) { this.OnValueChanged(response.Entities[0].EntryID); }\r\n \r\n resolve(probabilityLevelItems)\r\n }, reject);\r\n })\r\n }\r\n\r\n}\r\n","export default \"\\r\\n\";","import { Component, Output, Input, EventEmitter } from '@angular/core';\r\nimport { EnumSide } from '@kraken/_proxy/enums';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseSelectorComponent, BaseSelectorState, SelectorSettings } from '../base-selector.component';\r\n\r\n@Component({\r\n selector: 'app-side-selector',\r\n templateUrl: './side-selector.component.html',\r\n styleUrls: ['./side-selector.component.scss']\r\n})\r\nexport class SideSelectorComponent extends BaseSelectorComponent, EnumSide, void, GenericListEntity[]> {\r\n @Input() Settings: SelectorSettings;\r\n @Input() Value: EnumSide | EnumSide[];\r\n @Output() ValueChange: EventEmitter = new EventEmitter();\r\n \r\n @Input() override IsMinor = false;\r\n\r\n protected override IsOnlyDefaultDataSource() { return false; }\r\n protected GetDefaultDataSource(): GenericListEntity[] { return this.LIST('Sides'); }\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'SideSelectorComponent', BaseSelectorState);\r\n }\r\n}\r\n","export default \"\\r\\n\";","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { BusinessPartnerEndpoint } from '@kraken/_proxy/endpoints/businesspartner.endpoint';\r\nimport { BusinessPartnerListParams } from '@kraken/_proxy/params/businesspartnerlist.param';\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 DataSource from 'devextreme/data/data_source';\r\nimport { BaseSelectorComponent, BaseSelectorState, SelectorSettings } from '../base-selector.component';\r\n\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-business-partner-selector',\r\n templateUrl: './business-partner-selector.component.html',\r\n styleUrls: ['./business-partner-selector.component.scss']\r\n})\r\nexport class BusinessPartnerSelectorComponent extends BaseSelectorComponent, number, BusinessPartnerListParams, DataSource> {\r\n\r\n @Input() Settings: SelectorSettings;\r\n @Input() Value: number | number[];\r\n @Output() ValueChange: EventEmitter = new EventEmitter();\r\n\r\n @Input() override IsMinor = false;\r\n\r\n constructor(A: ServiceBagService,\r\n private businessPartnerEndpoint: BusinessPartnerEndpoint) {\r\n super(A, 'BusinessPartnerSelectorComponent', BaseSelectorState);\r\n }\r\n\r\n public override GetDefaultDataSource() { return undefined; }\r\n\r\n public override LoadDataSource() {\r\n return new Promise((resolve) => {\r\n const params = new BusinessPartnerListParams;\r\n params.OrganizationID = this.State.OrganizationID;\r\n\r\n const dataSource = new DataSourceCustomAction((options: DataLoadOptions) => this.businessPartnerEndpoint.ListEx(params, options), (entryID: number) => this.businessPartnerEndpoint.Get(entryID), resolve, false);\r\n resolve(dataSource);\r\n })\r\n }\r\n\r\n\r\n}\r\n","export default \"\\r\\n\";","import { Component, Input } from '@angular/core';\r\nimport { OrganizationService } from '@kraken/services/organization.service';\r\nimport { Globals } from '@kraken/_globals';\r\nimport { CompanyEndpoint } from '@kraken/_proxy/endpoints/company.endpoint';\r\nimport { OrganizationEndpoint } from '@kraken/_proxy/endpoints/organization.endpoint';\r\nimport { Company } from '@kraken/_proxy/entities/company.entity';\r\nimport { Organization } from '@kraken/_proxy/entities/organization.entity';\r\nimport { CompanyListParams } from '@kraken/_proxy/params/companylist.param';\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 { Subscription } from 'rxjs';\r\nimport { CompanyGlobalService } from '@kraken/services/company-global.service';\r\nimport { AccessService } from '@kraken/services/access.service';\r\n\r\nclass State extends BaseState {\r\n OrganizationID: number;\r\n Organization: Organization;\r\n CompanyItems: Company[];\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-company-global-selector',\r\n templateUrl: './company-global-selector.component.html',\r\n styleUrls: ['./company-global-selector.component.scss']\r\n})\r\nexport class CompanyGlobalSelectorComponent extends BaseComponent {\r\n\r\n @Input() Params: CompanyListParams | null = null;\r\n\r\n get CompanyID() { return Globals.CompanyID; }\r\n set CompanyID(value: number) { Globals.CompanyID = value; }\r\n\r\n constructor(A: ServiceBagService, \r\n public accessService: AccessService,\r\n private organizationService: OrganizationService,\r\n private companyEndpoint: CompanyEndpoint,\r\n private organizationEndpoint: OrganizationEndpoint,\r\n private companyGlobalService: CompanyGlobalService) {\r\n super(A, 'CompanyGlobalSelectorComponent', State)\r\n }\r\n\r\n protected _subscriptions: Subscription[] = [];\r\n\r\n protected override OnInitComponent() {\r\n this.State.OrganizationID = Globals.OrganizationID;\r\n this._subscriptions.push(this.organizationService.Organization$.subscribe((organizationID) => { this.ChangeOrganization(organizationID); }));\r\n \r\n this.LoadOrganization();\r\n this.LoadDataSource();\r\n }\r\n\r\n protected override OnDestroyComponent() {\r\n this._subscriptions.forEach(x => x.unsubscribe());\r\n this._subscriptions = [];\r\n }\r\n\r\n IsShow() {\r\n return this.accessService.IsAdmin() || this.State.Organization?.IsAccountingOffice;\r\n }\r\n\r\n OnCompanyChanged() {\r\n if (this.CompanyID == undefined && this.State.OrganizationID) this.CompanyID = -1;\r\n this.companyGlobalService.ChangeCompany(Globals.CompanyID);\r\n }\r\n\r\n private ChangeOrganization(organizationID: number) {\r\n if (this.State.OrganizationID !== organizationID) {\r\n this.CompanyID = undefined;\r\n this.State.OrganizationID = organizationID;\r\n this.LoadOrganization();\r\n this.LoadDataSource();\r\n }\r\n }\r\n\r\n private LoadDataSource() {\r\n if (!this.State.OrganizationID) {\r\n this.State.CompanyItems = [];\r\n return;\r\n }\r\n\r\n const params = {\r\n OrganizationID: this.State.OrganizationID,\r\n LoadActive: true,\r\n ...this.Params\r\n } as CompanyListParams;\r\n this.Do(this.companyEndpoint.ListEx(params, null), false, (response) => {\r\n this.State.CompanyItems = response.Entities;\r\n\r\n const allCompaniesItem = this.AddAllCompniesItem();\r\n\r\n if (!this.State.CompanyItems.some(x => x.EntryID === this.CompanyID)) {\r\n let companyID = undefined;\r\n\r\n if (this.State.CompanyItems.length === 1) { companyID = this.State.CompanyItems[0].EntryID;\r\n } else if (this.State.CompanyItems.length > 1) { companyID = allCompaniesItem.EntryID; }\r\n \r\n if (!this.IsEqualCompanyID(companyID)) {\r\n this.CompanyID = companyID;\r\n this.OnCompanyChanged();\r\n } else {\r\n this.CompanyID = companyID;\r\n }\r\n }\r\n });\r\n }\r\n\r\n private AddAllCompniesItem() {\r\n const allCompaniesItem = new Company();\r\n allCompaniesItem.EntryID = -1;\r\n allCompaniesItem.Name = this.RC(\"lblAllCompanies\");\r\n\r\n if (this.State.CompanyItems?.length > 1) {\r\n this.State.CompanyItems.unshift(allCompaniesItem);\r\n }\r\n\r\n return allCompaniesItem;\r\n }\r\n\r\n private LoadOrganization() {\r\n if (this.State.OrganizationID && !this.accessService.IsAdmin()) {\r\n this.Do(this.organizationEndpoint.Get(this.State.OrganizationID), false, (response) => {\r\n this.State.Organization = response.Entity;\r\n });\r\n }\r\n }\r\n\r\n private IsEqualCompanyID(companyID: number) {\r\n const isEmptyNewCompanyID = companyID === undefined || companyID === -1;\r\n const isEmptyOldCompanyID = this.CompanyID === undefined || this.CompanyID === -1;\r\n\r\n return (isEmptyNewCompanyID && isEmptyOldCompanyID) || companyID === this.CompanyID;\r\n }\r\n\r\n OnGoToCompany() {\r\n this.Navigate(['pages/company', this.CompanyID]);\r\n }\r\n}\r\n","export default \"
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\";","import { Directive } from '@angular/core';\r\nimport { DxiColumnComponent } from 'devextreme-angular/ui/nested';\r\nimport { DxiDataGridColumn } from 'devextreme-angular/ui/nested/base/data-grid-column-dxi';\r\nimport { formatDate } from 'devextreme/localization';\r\nimport { AnyCatcher } from 'rxjs/internal/AnyCatcher';\r\nimport { get } from 'lodash'\r\n\r\nclass BaseDateGroupDirective {\r\n constructor(public column: DxiColumnComponent, options: Partial) {\r\n const defaultOptions: Partial = {\r\n groupCellTemplate: this.GroupCellTemplate,\r\n sortingMethod: (v1, v2) => {\r\n const normalizeValue = (v) => {\r\n if (!v) return v\r\n\r\n if (typeof v === 'string') {\r\n return v.split(';')[0]\r\n }\r\n\r\n return v\r\n }\r\n\r\n const sortValue1 = normalizeValue(v1)\r\n const sortValue2 = normalizeValue(v2)\r\n\r\n return sortValue1 > sortValue2 ? 1 : sortValue1 < sortValue2 ? -1 : 0\r\n },\r\n ...options,\r\n // @ts-ignore\r\n ...column._initialOptions // get options to ovveride defaults\r\n }\r\n\r\n Object.entries(defaultOptions).forEach(([key, value]) => {\r\n column[key] = value\r\n })\r\n }\r\n\r\n CalculateDisplayValue(rowData: AnyCatcher) {\r\n const { calculateDisplayValue, dataField, calculateCellValue } = this.column\r\n const getFromDisplayValue = () => typeof calculateDisplayValue === 'function' ? calculateDisplayValue(rowData) : get(rowData, calculateDisplayValue)\r\n const getFromCellValue = () => typeof calculateCellValue === 'function' ? calculateCellValue(rowData) : get(rowData, dataField)\r\n\r\n const value = calculateDisplayValue ? getFromDisplayValue() : getFromCellValue()\r\n const date = new Date(value)\r\n\r\n if (isNaN(+date)) {\r\n throw new Error('BaseDateGroupDirective: Value is not date!')\r\n }\r\n\r\n return date\r\n }\r\n\r\n GroupCellTemplate(cell, data) {\r\n const [sortValue, caption] = data.text.split(';')\r\n cell.innerHTML = caption ? caption : sortValue\r\n }\r\n}\r\n\r\n@Directive({\r\n selector: 'dxi-column[dateGroupColumn]'\r\n})\r\nexport class DateGroupColumnDirective extends BaseDateGroupDirective {\r\n constructor(column: DxiColumnComponent) {\r\n super(column, {\r\n format: 'dd/MM/yyyy',\r\n dataField: 'Date',\r\n calculateGroupValue: (rowData) => this.CalculateGroupValue(rowData),\r\n })\r\n }\r\n\r\n CalculateGroupValue(rowData) {\r\n const date = this.CalculateDisplayValue(rowData)\r\n const monthYear = date.toLocaleString('default', { month: '2-digit', year: 'numeric', day: '2-digit' })\r\n const [day, month, year] = monthYear.split('/')\r\n const sortValue = +year + +month / 12 + +day / 30 / 12\r\n const displayValue = formatDate(date, this.column.format)\r\n\r\n return `${sortValue};${displayValue}`\r\n }\r\n}\r\n\r\n@Directive({\r\n selector: 'dxi-column[monthGroupColumn]'\r\n})\r\nexport class MonthGroupColumnDirective extends BaseDateGroupDirective {\r\n constructor(column: DxiColumnComponent) {\r\n super(column, {\r\n format: 'MMMM/yyyy',\r\n dataField: 'Month',\r\n calculateGroupValue: (rowData) => this.CalculateGroupValue(rowData),\r\n })\r\n }\r\n\r\n CalculateGroupValue(rowData) {\r\n const date = this.CalculateDisplayValue(rowData)\r\n const monthYear = date.toLocaleString('default', { month: '2-digit', year: 'numeric' })\r\n const [month, year] = monthYear.split('/')\r\n const sortValue = +year + +month / 12\r\n const displayValue = formatDate(date, this.column.format)\r\n\r\n return `${sortValue};${displayValue}`\r\n }\r\n}\r\n\r\n@Directive({\r\n selector: 'dxi-column[yearGroupColumn]'\r\n})\r\nexport class YearGroupColumnDirective extends BaseDateGroupDirective {\r\n constructor(column: DxiColumnComponent) {\r\n super(column, {\r\n format: 'yyyy',\r\n dataField: 'Year',\r\n calculateGroupValue: (rowData) => this.CalculateGroupValue(rowData),\r\n })\r\n }\r\n\r\n CalculateGroupValue(rowData) {\r\n const date = this.CalculateDisplayValue(rowData)\r\n return formatDate(date, this.column.format)\r\n }\r\n}","import { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { 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 { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Interest } from '@kraken/_proxy/entities/interest.entity';\r\nimport { InterestEndpoint } from '@kraken/_proxy/endpoints/interest.endpoint';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-interest-dialog',\r\n templateUrl: './interest-dialog.component.html'\r\n})\r\nexport class InterestDialogComponent extends BasePageComponent\r\n{\r\n EntryID: number;\r\n Entity: Interest;\r\n @Input() set EntityEntryID(value: number) { \r\n this.EntryID = value;\r\n this.LoadEntity();\r\n }\r\n\r\n constructor(A: ServiceBagService, private endpoint: InterestEndpoint) {\r\n\r\n super(A, 'InterestDialogComponent', BaseEntity, BaseState, EnumPageDisplayModes.Dialog);\r\n }\r\n\r\n\r\n LoadEntity() {\r\n this.Do(this.endpoint.Get(this.EntryID), false, (response) => {\r\n this.Entity = response.Entity;\r\n })\r\n }\r\n}","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\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 { EnumBalanceDetailsReportModes } from '@kraken/_client.enums';\r\nimport { AdminAccessRequestEndpoint } from '@kraken/_proxy/endpoints/adminaccessrequest.endpoint';\r\nimport { BalanceEndpoint } from '@kraken/_proxy/endpoints/balance.endpoint';\r\nimport { LoanPaymentEndpoint } from '@kraken/_proxy/endpoints/loanpayment.endpoint';\r\nimport { AdminAccessRequest } from '@kraken/_proxy/entities/adminaccessrequest.entity';\r\nimport { BaseParamsFilter } from '@kraken/_proxy/entities/baseparamsfilter.entity';\r\nimport { EnumAdminAccessRequestStatus, EnumCredentialTypes } from '@kraken/_proxy/enums';\r\nimport { AdminAccessRequestReviewParams } from '@kraken/_proxy/params/adminaccessrequestreview.param';\r\nimport { EntitySavedEventArgs } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { BaseDataResponse, Notification } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { NavigatorService } from '@m4u-angular/core/framework/navigator.service';\r\nimport { NotificationConfigurationBaseService } from '@m4u-angular/core/framework/notification-configuration-base.service';\r\nimport { ResourcesService } from '@m4u-angular/core/framework/resources.service';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { SysEventsService } from '@m4u-angular/core/framework/sysevents.service';\r\nimport { UiService } from '@m4u-angular/core/framework/ui.service';\r\nimport { Observable } from 'rxjs';\r\nimport { TransactionEndpoint } from '../_proxy/endpoints/transaction.endpoint';\r\n\r\n@Injectable()\r\nexport class NotificationConfigurationService extends NotificationConfigurationBaseService {\r\n\r\n constructor(\r\n private adminAccessRequestEndpoint: AdminAccessRequestEndpoint,\r\n private balanceEndpoint: BalanceEndpoint,\r\n private transactionEndpoint: TransactionEndpoint,\r\n private loanPaymentEndpoint: LoanPaymentEndpoint,\r\n private ui: UiService,\r\n private resources: ResourcesService,\r\n private navigatorService: NavigatorService,\r\n private sysEventsService: SysEventsService) {\r\n super();\r\n }\r\n\r\n public override GetButtons(notification: Notification): any[] {\r\n const buttons = [];\r\n\r\n this.AddAdminAccessRequestButtons(notification, buttons);\r\n this.AddBusinessAlertButtons(notification, buttons);\r\n\r\n return buttons;\r\n }\r\n\r\n private AddBusinessAlertButtons(notification: Notification, buttons: any[]) {\r\n const btnView = { Text: 'View Details', Visible: true, OnClick: undefined };\r\n\r\n if (notification.NotificationTemplateName === 'EndingDeposits') {\r\n btnView.OnClick = () => this.OnAlertTemplateClick(\r\n '/pages/balance-depos-report',\r\n notification.ExternalReferenceID,\r\n (entryId) => this.balanceEndpoint.GetNavigationFilters(entryId), { Mode: EnumBalanceDetailsReportModes.Deposits });\r\n buttons.push(btnView);\r\n }\r\n if (notification.NotificationTemplateName === 'LoanPayment') {\r\n btnView.OnClick = () => this.OnAlertTemplateClick(\r\n '/pages/loan-payments-report',\r\n notification.ExternalReferenceID,\r\n (entryId) => this.loanPaymentEndpoint.GetNavigationFilters(entryId));\r\n buttons.push(btnView);\r\n }\r\n if (notification.NotificationTemplateName === 'BalanceDetailLoan') {\r\n btnView.OnClick = () => this.OnAlertTemplateClick(\r\n '/pages/balance-loans-report',\r\n notification.ExternalReferenceID,\r\n (entryId) => this.balanceEndpoint.GetNavigationFilters(entryId), { Mode: EnumBalanceDetailsReportModes.Loans });\r\n buttons.push(btnView);\r\n }\r\n if (notification.NotificationTemplateName === 'TransactionLimit') {\r\n btnView.OnClick = () => this.OnAlertTemplateClick(\r\n '/pages/transaction-report',\r\n notification.ExternalReferenceID,\r\n (entryId) => this.transactionEndpoint.GetNavigationFilters(entryId));\r\n buttons.push(btnView);\r\n }\r\n }\r\n\r\n OnAlertTemplateClick = (\r\n page: string,\r\n entryId: number,\r\n apicall: (entryId) => Observable>,\r\n customParams: any = null\r\n ) => {\r\n apicall(entryId).subscribe((response) => {\r\n if (response.IsSuccess && response.Data) {\r\n this.navigatorService.Navigate([page],\r\n { EntryID: entryId, ...response.Data, ...customParams });\r\n }\r\n });\r\n };\r\n\r\n private AddAdminAccessRequestButtons(notification: Notification, buttons: any[]) {\r\n if (notification.NotificationTemplateName !== 'AdminAccessRequest') {\r\n return;\r\n }\r\n\r\n // Create invisible buttons\r\n const btnApprove = { Text: 'Approve', Visible: false, OnClick: undefined };\r\n const btnDeny = { Text: 'Deny', Visible: false, OnClick: undefined };\r\n btnApprove.OnClick = () => {\r\n this.UpdateAdminAccessRequest(notification.RelatedObjectID, true, btnApprove, btnDeny);\r\n };\r\n btnDeny.OnClick = () => {\r\n this.UpdateAdminAccessRequest(notification.RelatedObjectID, false, btnApprove, btnDeny);\r\n };\r\n\r\n // Add invisible buttons\r\n buttons.push(btnApprove);\r\n buttons.push(btnDeny);\r\n\r\n // Check if an access is not reviewed and show buttons \r\n this.adminAccessRequestEndpoint.Get(notification.RelatedObjectID).subscribe((response) => {\r\n if (response.IsSuccess && response.Entity.Status === EnumAdminAccessRequestStatus.Requested) {\r\n btnApprove.Visible = true;\r\n btnDeny.Visible = true;\r\n }\r\n });\r\n }\r\n\r\n private UpdateAdminAccessRequest(entryID: number, isApprove: boolean, btnApprove: any, btnDeny: any) {\r\n const params = new AdminAccessRequestReviewParams();\r\n params.AdminAccessRequestID = entryID;\r\n params.IsApprove = isApprove;\r\n\r\n this.adminAccessRequestEndpoint.Review(params).subscribe((response) => {\r\n if (response.IsSuccess) {\r\n this.ui.InfoMessage(this.resources.RC('msgSuccess'));\r\n btnApprove.Visible = false;\r\n btnDeny.Visible = false;\r\n } else {\r\n this.ui.StopMessage(response.ResponseMessage);\r\n btnApprove.Visible = false;\r\n btnDeny.Visible = false;\r\n }\r\n\r\n this.sysEventsService.NotifyEntitySaved(new EntitySavedEventArgs(undefined, AdminAccessRequest, EnumCRUDActions.Update));\r\n });\r\n }\r\n}","\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { ContactUsSubject } from './../entities/contactussubject.entity';\r\n@Injectable()\r\nexport class ContactUsSubjectEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(api: APIGatewayService) {super(\"ContactUsSubject\", api);}\r\n\t\r\n}\r\n\r\n","\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { ContactUsSubject } from './../entities/contactussubject.entity';\r\nimport { ContactUsParams } from './../params/contactus.param';\r\n@Injectable()\r\nexport class ContactUsEndpoint extends BaseEndpoint\r\n{\r\n constructor(api: APIGatewayService) {super(\"ContactUs\", api);}\r\n\t\r\n\r\n public GetSubjects() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetSubjects', undefined );\r\n }\r\n\r\n public SaveComment(Params: ContactUsParams) : Observable\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'SaveComment', Params, undefined );\r\n }\r\n}\r\n\r\n","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class ContactUsParams extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ContactUsParams';\r\n }\r\n \r\n public SubjectID: number; \r\n public Comment: string; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { Component, ViewChild } from '@angular/core';\r\nimport { ContactUsEndpoint } from '@kraken/_proxy/endpoints/contactus.endpoint';\r\nimport { ContactUsSubject } from '@kraken/_proxy/entities/contactussubject.entity';\r\nimport { ContactUsParams } from '@kraken/_proxy/params/contactus.param';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { time } from 'console';\r\nimport { DxValidationGroupComponent } from 'devextreme-angular';\r\n\r\nclass State extends BaseState {\r\n Email: string;\r\n PortalSite: string;\r\n OurSite: string;\r\n Phone: string;\r\n Whatsapp: string;\r\n\r\n SubjectID: number;\r\n Content: string;\r\n\r\n SubjectDataSource: ContactUsSubject[];\r\n IsConfirmationMessage: boolean;\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-contact-us-dialog',\r\n templateUrl: './contact-us-dialog.component.html',\r\n styleUrls: ['./contact-us-dialog.component.scss']\r\n})\r\nexport class ContactUsDialogComponent extends BasePageComponent {\r\n\r\n @ViewChild('validationGroup') validationGroup: DxValidationGroupComponent;\r\n\r\n constructor(A: ServiceBagService, private contactUsEndpoint: ContactUsEndpoint) {\r\n super(A, 'ContactUsDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog);\r\n }\r\n\r\n protected OnInitComponent(): void {\r\n this.State.Email = this.SystemOption('ContactUsEmail');\r\n this.State.PortalSite = this.SystemOption('ContactUsPortalSite');\r\n this.State.OurSite = this.SystemOption('ContactUsOurSite');\r\n this.State.Phone = this.SystemOption('ContactUsPhone');\r\n this.State.Whatsapp = this.SystemOption('ContactUsWhatsapp');\r\n\r\n this.LoadSubjectDataSource();\r\n }\r\n\r\n public NavigateTo(type: 'Whatsapp' | 'Phone' | 'Email') {\r\n if (type === 'Email') {\r\n this.A.Navigator.NavigateEmail(this.State.Email);\r\n return;\r\n }\r\n\r\n if (type === 'Phone') {\r\n this.A.Navigator.NavigatePhone(this.State.Phone);\r\n return;\r\n }\r\n\r\n if (type === 'Whatsapp') {\r\n this.A.Navigator.NavigateWhatsApp(this.State.Whatsapp);\r\n return;\r\n }\r\n }\r\n\r\n public Send() {\r\n this.ValidateValidationGroup(this.validationGroup)\r\n .then(valid => {\r\n if (!valid) { return; }\r\n this.IsLoading = true;\r\n\r\n const params = new ContactUsParams();\r\n params.SubjectID = this.State.SubjectID;\r\n params.Comment = this.State.Content;\r\n\r\n this.Do(this.contactUsEndpoint.SaveComment(params), true, (response) => {\r\n if(response.IsSuccess) { \r\n this.State.IsConfirmationMessage = true;\r\n this.IsLoading = false;\r\n }\r\n }, (response) => {\r\n this.UI.StopMessage(response.ResponseMessage);\r\n this.IsLoading = false;\r\n });\r\n });\r\n }\r\n\r\n public Show() {\r\n if (this.validationGroup?.instance) {\r\n this.validationGroup.instance.reset();\r\n }\r\n\r\n this.ShowDialogShort(() => {});\r\n }\r\n\r\n private LoadSubjectDataSource() {\r\n this.Do(this.contactUsEndpoint.GetSubjects(), false, (response) => {\r\n this.State.SubjectDataSource = 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
{{ 'lblOurSite' | RC:THIS }}
\\r\\n {{State.OurSite}}\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n
{{ 'lblBankOneWhatsApp' | RC:THIS }}
\\r\\n {{State.Whatsapp}} \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n
{{ 'lblMail' | RC:THIS }}
\\r\\n {{ State.Email }} \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n
{{ 'lblSupportCenter' | RC:THIS }}
\\r\\n {{State.Phone}} \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n
{{ 'lblPortalSite' | RC:THIS }}
\\r\\n {{'lblPortalSiteLabel' | 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
{{'lblContactUsContent' | RC:THIS}}
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n {{'msgContactUsConfirmationMessage' | 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
\";","import { Observable, of } from 'rxjs';\r\nimport { BaseEntity } from './../entities/BaseEntities';\r\nimport { ServiceBagService } from './ServiceBag';\r\nimport { BaseState } from '../entities/BaseEntities';\r\nimport { BaseComponent } from './BaseComponent';\r\nimport { Input } from '@angular/core';\r\n\r\nexport abstract class BaseInjectableComponent extends BaseComponent {\r\n\r\n @Input() TargetAppName: string;\r\n @Input() TargetComponentName: string;\r\n @Input() TargetDocEntry: number;\r\n @Input() EntityType: (new () => TEntity);\r\n @Input() ButtonSettings: any;\r\n\r\n constructor (public override A: ServiceBagService,\r\n public override ComponentName: string,\r\n StateType: (new () => TState)) {\r\n super(A, ComponentName, StateType);\r\n }\r\n\r\n abstract BaseAction();\r\n\r\n public IsValidEntity: () => Observable = () => of(true);\r\n}\r\n","import { Component, ViewChild } from '@angular/core';\r\nimport { ContactUsDialogComponent } from '@kraken/dialogs/contact-us-dialog/contact-us-dialog.component';\r\nimport { BaseInjectableComponent } from '@m4u-angular/base/component/BaseInjectableComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState, BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-contact-us-injectable',\r\n templateUrl: './contact-us-injectable.component.html',\r\n styleUrls: ['./contact-us-injectable.component.scss']\r\n})\r\nexport class ContactUsInjectableComponent extends BaseInjectableComponent {\r\n\r\n @ViewChild(ContactUsDialogComponent) contactUsDialog: ContactUsDialogComponent;\r\n\r\n BaseAction() {\r\n this.contactUsDialog.Show();\r\n }\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'ContactUsInjectableComponent', BaseState);\r\n }\r\n\r\n}\r\n","export default \"\";","\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 { DownloadRetry } from './../entities/downloadretry.entity';\r\n@Injectable()\r\nexport class DownloadRetryEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"DownloadRetry\", api);}\r\n\t\r\n\r\n public DownloadData() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'DownloadData', undefined );\r\n }\r\n}\r\n\r\n","import { Component, OnInit, ViewChild } from '@angular/core';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DownloadRetry } from \"../../_proxy/entities/downloadretry.entity\";\r\nimport { DownloadRetryEndpoint } from \"../../_proxy/endpoints/downloadretry.endpoint\";\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { DxPopupComponent } from 'devextreme-angular';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { GlobalDownloadDialog } from './global-download-dialog.component';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-global-download-retry',\r\n templateUrl: './global-download-retry.component.html'\r\n})\r\nexport class GlobalDownloadRetryComponent extends BaseComponent {\r\n\r\n @ViewChild('downloadDialog') dialog: GlobalDownloadDialog;\r\n\r\n constructor(\r\n A: ServiceBagService,\r\n private endpoint: DownloadRetryEndpoint\r\n ) {\r\n super(A, 'GlobalDownloadRetryComponent', BaseState,);\r\n }\r\n\r\n protected override OnInitComponentFinished() {\r\n this.dialog.ShowDialogShort((e) => {\r\n this.NavigateBack();\r\n }, () => {\r\n this.NavigateBack();\r\n });\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n\";","import { BaseEntity, BaseState, GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Component } from '@angular/core';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { DownloadRetryEndpoint } from '../../_proxy/endpoints/downloadretry.endpoint';\r\n\r\n\r\nclass State extends BaseState {\r\n DestroyReasons: GenericListEntity[] = [];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-global-download-dialog',\r\n templateUrl: './global-download-dialog.component.html'\r\n})\r\nexport class GlobalDownloadDialog extends BasePageComponent\r\n{\r\n constructor(A: ServiceBagService, private DownloadRetryEndpoint: DownloadRetryEndpoint) {\r\n super(A, 'GlobalDownloadDialog', BaseEntity, State, EnumPageDisplayModes.Dialog);\r\n }\r\n\r\n override OnInitComponent(): void {\r\n \r\n }\r\n\r\n\r\n OnSave() {\r\n\r\n this.Do(this.DownloadRetryEndpoint.DownloadData(), false,\r\n () => {\r\n this.CloseDialogWithSuccess();\r\n this.Navigate([\"/pages/download-history\"])\r\n this.ToolbarSettings.ShowBackButton = false;});\r\n \r\n }\r\n\r\n \r\n}","export default \"\\r\\n \\r\\n \\r\\n
{{'lblGlobalDownloadDialog' | 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 { 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 { ExternalAPIKey } from './../entities/externalapikey.entity';\r\n@Injectable()\r\nexport class ExternalAPIKeyEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"ExternalAPIKey\", api);}\r\n\t\r\n\r\n public ListEx(OrganizationID: number, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'ListEx', {OrganizationID: OrganizationID, options:options?.GetLoadOptions()} );\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 ExternalAPIKey extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ExternalAPIKey';\r\n }\r\n \r\n public OrganizationID: number; \r\n public Name: string; \r\n public Description: string; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { Component, Input } from '@angular/core';\r\nimport { ExternalAPIKeyEndpoint } from '@kraken/_proxy/endpoints/externalapikey.endpoint';\r\nimport { ExternalAPIKey } from '@kraken/_proxy/entities/externalapikey.entity';\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 } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-external-api-key-list',\r\n templateUrl: './external-api-key-list.component.html'\r\n})\r\nexport class ExternalApiKeyListComponent extends BasePageComponent{\r\n\r\n @Input() OrganizationID: number;\r\n\r\n constructor(A: ServiceBagService, private endpoint: ExternalAPIKeyEndpoint) {\r\n super(A, 'ExternalApiKeyListComponent', ExternalAPIKey, BaseState);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n protected override OnExternalEntitySaved(\r\n ExternalEntity: BaseEntity,\r\n ExternalEntityType: new () => BaseEntity\r\n ) {\r\n if (ExternalEntityType === ExternalAPIKey) this.LoadDataSource();\r\n }\r\n\r\n public LoadDataSource() {\r\n this.DataSources['ExternalApiKeys'] = new DataSourceCustomAction(\r\n (options) => this.endpoint.ListEx(this.OrganizationID, options));\r\n }\r\n\r\n}\r\n","export default \"\";","import { Component, Input } from '@angular/core';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { ExternalAPIKey } from '@kraken/_proxy/entities/externalapikey.entity';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'external-api-key-grid',\r\n templateUrl: './external-api-key-grid.component.html'\r\n})\r\nexport class ExternalApiKeyGridComponent extends BaseGridComponent{\r\n @Input() OrganizationID: number;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'ExternalApiKeyGridComponent', ExternalAPIKey, BaseState);\r\n }\r\n\r\n OnNavigate(e: any) {\r\n this.A.Navigator.Navigate(['/pages/external-api-key', e.data.EntryID], { OrganizationID: e.data.OrganizationID });\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 { ExternalAPIKeyEndpoint } from '@kraken/_proxy/endpoints/externalapikey.endpoint';\r\nimport { OrganizationEndpoint } from '@kraken/_proxy/endpoints/organization.endpoint';\r\nimport { ExternalAPIKey } from '@kraken/_proxy/entities/externalapikey.entity';\r\nimport { Organization } from '@kraken/_proxy/entities/organization.entity';\r\nimport { ContextMenuElement, ToolbarSettings } 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 { BaseEntityResponse, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\nclass State extends BaseState {\r\n Organization: Organization = new Organization;\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-external-api-key',\r\n templateUrl: './external-api-key.component.html',\r\n styleUrls: ['./external-api-key.component.scss']\r\n})\r\nexport class ExternalApiKeyComponent extends BasePageCRUDComponent {\r\n\r\n constructor(A: ServiceBagService, private endpoint: ExternalAPIKeyEndpoint, private organizationEndpoint: OrganizationEndpoint) {\r\n super(A, 'ExternalApiKeyComponent', ExternalAPIKey, State, endpoint, EnumPageDisplayModes.Window);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.Do(this.organizationEndpoint.Get(this.QueryParams.OrganizationID),\r\n false, (response: BaseEntityResponse) => this.State.Organization = response.Entity);\r\n }\r\n\r\n override OnEntityInitObjectName() {\r\n return this.Entity && this.Entity.Name;\r\n }\r\n\r\n override OnEntityNew() {\r\n this.Entity.OrganizationID = this.QueryParams.OrganizationID;\r\n }\r\n\r\n override OnEntitySaved() {\r\n this.NavigateBack();\r\n }\r\n\r\n override OnInitContextMenus(): ContextMenuElement[] {\r\n if (this.IsAddMode) return undefined;\r\n const menus: ContextMenuElement[] =\r\n [\r\n {\r\n text: this.RC('btnManageOrganizationCredentials'),\r\n visible: true,\r\n onClick: this.OnManageCredentials.bind(this)\r\n }\r\n ];\r\n return menus;\r\n }\r\n\r\n OnManageCredentials() {\r\n this.Navigate(['/pages/passwordmanage'], { CredentialID: this.Entity.EntryID, Type: 3 });\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\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumRelevantFilteringTypes } from './../enums';\r\nexport class AlertTemplate extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'AlertTemplate';\r\n }\r\n \r\n public Name: string; \r\n public Description: string; \r\n public OrganizationID: number; \r\n public RelevantFilteringType: EnumRelevantFilteringTypes; \r\n public IsEndingDepositsActive: boolean; \r\n public IsEndingDepositsSendEmail: boolean; \r\n public IsEndingDepositsSendSMS: boolean; \r\n public IsEndingDepositsSendPushNotification: boolean; \r\n public EndingDepositsDaysAhead: number; \r\n public IsLoanPaymentActive: boolean; \r\n public IsLoanPaymentSendEmail: boolean; \r\n public IsLoanPaymentSendSMS: boolean; \r\n public IsLoanPaymentSendPushNotification: boolean; \r\n public LoanPaymentDaysAhead: number; \r\n public IsNewLoanActive: boolean; \r\n public IsNewLoanSendEmail: boolean; \r\n public IsNewLoanSendSMS: boolean; \r\n public IsNewLoanSendPushNotification: boolean; \r\n public IsExpiringGuaranteesActive: boolean; \r\n public IsExpiringGuaranteesSendEmail: boolean; \r\n public IsExpiringGuaranteesSendSMS: boolean; \r\n public IsExpiringGuaranteesSendPushNotification: boolean; \r\n public ExpiringGuaranteesDaysAhead: number; \r\n public IsNegativeCashflowActive: boolean; \r\n public IsNegativeCashflowSendEmail: boolean; \r\n public IsNegativeCashflowSendSMS: boolean; \r\n public IsNegativeCashflowSendPushNotification: boolean; \r\n public NegativeCashflowDaysAhead: number; \r\n public IsTransactionLimitsActive: boolean; \r\n public IsTransactionLimitsSendEmail: boolean; \r\n public IsTransactionLimitsSendSMS: boolean; \r\n public IsTransactionLimitsSendPushNotification: boolean; \r\n public AllowedCompanies: AlertTemplateAllowedCompany[] = []; \r\n public AllowedAccounts: AlertTemplateAllowedAccount[] = []; \r\n public TransactionLimits: AlertTemplateTransactionLimit[] = []; \r\n\t\r\n}\r\n\r\nexport class AlertTemplateAllowedCompany extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'AlertTemplateAllowedCompany';\r\n }\r\n \r\n public CompanyID: number; \r\n public LineID: number;\r\n}\r\nexport class AlertTemplateAllowedAccount extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'AlertTemplateAllowedAccount';\r\n }\r\n \r\n public AccountID: number; \r\n public LineID: number;\r\n}\r\nexport class AlertTemplateTransactionLimit extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'AlertTemplateTransactionLimit';\r\n }\r\n \r\n public TransactionCategoryID: number; \r\n public AmountLimit: number; \r\n public CompanyID: number; \r\n public LineID: number;\r\n}\r\n\r\n\r\n","import { Component, ViewChild } from '@angular/core';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { OrganizationEndpoint } from '../../_proxy/endpoints/organization.endpoint';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { BaseEntityResponse, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Organization } from '../../_proxy/entities/organization.entity';\r\nimport { AlertTemplateEndpoint } from '../../_proxy/endpoints/alerttemplate.endpoint';\r\nimport { CompanyEndpoint } from '../../_proxy/endpoints/company.endpoint';\r\nimport { AccountEndpoint } from '../../_proxy/endpoints/account.endpoint';\r\nimport { AlertTemplate, AlertTemplateAllowedAccount, AlertTemplateAllowedCompany, AlertTemplateTransactionLimit }\r\n from '../../_proxy/entities/alerttemplate.entity';\r\nimport { CompanyListParams } from '@kraken/_proxy/params/companylist.param';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { AccountListParams } from '../../_proxy/params/accountlist.param';\r\nimport { EnumRelevantFilteringTypes } from '@kraken/_proxy/enums';\r\nimport { CompanyGridComponent } from '../company/list/company-grid.component';\r\nimport { AccountGridComponent } from '../account/list/account-grid.component';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { TransactionCategoryEndpoint } from '@kraken/_proxy/endpoints/transactioncategory.endpoint';\r\nimport { ListTransactionCategoriesParams } from '@kraken/_proxy/params/listtransactioncategories.param';\r\nimport ArrayStore from 'devextreme/data/array_store';\r\nimport DataSource from 'devextreme/data/data_source';\r\nimport { of } from 'rxjs';\r\nimport { TransactionCategory } from '@kraken/_proxy/entities/transactioncategory.entity';\r\n\r\n\r\nclass State extends BaseState {\r\n Organization: Organization = new Organization;\r\n AllowedCompaniesKeys: number[];\r\n AllowedAccountsKeys: number[];\r\n Lines: AlertTemplateTransactionLimit[] = [];\r\n LineChanges: any[] = [];\r\n TransactionCategories: TransactionCategory[];\r\n Companies: any;\r\n}\r\n\r\nlet rowKey = 0;\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-alert-template',\r\n templateUrl: './alert-template.component.html',\r\n styleUrls: ['./alert-template.component.scss']\r\n})\r\nexport class AlertTemplateComponent extends BasePageCRUDComponent{\r\n @ViewChild('companyGrid') companyGrid: CompanyGridComponent;\r\n @ViewChild('accountGrid') accountGrid: AccountGridComponent;\r\n\r\n CategoriesStore: any;\r\n\r\n constructor(A: ServiceBagService,\r\n private endpoint: AlertTemplateEndpoint,\r\n private organizationEndpoint: OrganizationEndpoint,\r\n private companyEndpoint: CompanyEndpoint,\r\n private accountEndpoint: AccountEndpoint,\r\n private transactionCategoryEndpoint: TransactionCategoryEndpoint\r\n ) {\r\n super(A, 'AlertTemplateComponent', AlertTemplate, State, endpoint, EnumPageDisplayModes.Window);\r\n\r\n }\r\n\r\n override OnInitComponent() {\r\n this.Do(this.organizationEndpoint.Get(this.QueryParams.OrganizationID), false,\r\n (response: BaseEntityResponse) => this.State.Organization = response.Entity);\r\n this.LoadCompanies();\r\n this.LoadAccounts();\r\n this.LoadTransactionCategories();\r\n }\r\n\r\n override OnEntityInitObjectName() {\r\n return this.Entity && this.Entity.Name;\r\n }\r\n\r\n LoadCompanies() {\r\n const params = new CompanyListParams();\r\n params.OrganizationID = this.QueryParams.OrganizationID;\r\n params.LoadActive = true;\r\n\r\n this.Do(this.companyEndpoint.ListEx(params, null), false,\r\n (response) => {\r\n this.State.Companies = Utils.CloneObject(response.Entities) as any[];\r\n this.State.Companies.unshift({ EntryID: null, Name: this.RC('lblGlobal') });\r\n this.DataSources['Companies'] =\r\n new DataSourceCustomAction((options: DataLoadOptions) => of(response));\r\n });\r\n }\r\n\r\n LoadTransactionCategories() {\r\n const params = new ListTransactionCategoriesParams();\r\n params.LoadActive = true;\r\n params.LoadGlobal = true;\r\n params.OrganizationID = this.QueryParams.OrganizationID;\r\n this.Do(this.transactionCategoryEndpoint.ListEx(params, null), false, ({ Entities }) => {\r\n this.State.TransactionCategories = Entities;\r\n this.CategoriesStore = new DataSource({\r\n store: new ArrayStore({\r\n data: Entities,\r\n key: 'ID',\r\n }),\r\n paginate: true,\r\n pageSize: 5\r\n });\r\n this.State.AllowedCompaniesKeys = this.Entity.AllowedCompanies.map(item => item.CompanyID);\r\n this.State.AllowedAccountsKeys = this.Entity.AllowedAccounts.map(item => item.AccountID);\r\n this.State.Lines = Utils.CloneObject(this.Entity.TransactionLimits);\r\n });\r\n }\r\n\r\n LoadAccounts() {\r\n const params = new AccountListParams();\r\n params.OrganizationID = this.QueryParams.OrganizationID;\r\n params.LoadActive = true;\r\n\r\n this.DataSources['Accounts'] = new DataSourceCustomAction((options: DataLoadOptions) =>\r\n this.accountEndpoint.ListEx(params, options));\r\n }\r\n\r\n OnGridSelectionChanged() {\r\n this.SetDirty();\r\n }\r\n\r\n protected override OnEntityPrepareForSave(): void {\r\n this.Entity.AllowedCompanies = this.Entity.RelevantFilteringType !== EnumRelevantFilteringTypes.Companies\r\n ? []\r\n : this.companyGrid.G.GetSelectedRowKeys().map(key => Object.assign({},\r\n {\r\n EntryID: this.Entity.AllowedCompanies.find(item => item.CompanyID === key)?.EntryID,\r\n CompanyID: key\r\n } as AlertTemplateAllowedCompany));\r\n this.Entity.AllowedAccounts = this.Entity.RelevantFilteringType !== EnumRelevantFilteringTypes.Accounts\r\n ? []\r\n : this.accountGrid.G.GetSelectedRowKeys().map(key => Object.assign({},\r\n {\r\n EntryID: this.Entity.AllowedAccounts.find(item => item.AccountID === key)?.EntryID,\r\n AccountID: key\r\n } as AlertTemplateAllowedAccount));\r\n }\r\n\r\n override OnEntitySaved() {\r\n this.NavigateBack();\r\n }\r\n\r\n override OnEntityNew() {\r\n this.Entity.OrganizationID = this.QueryParams.OrganizationID;\r\n this.Entity.RelevantFilteringType = EnumRelevantFilteringTypes.None;\r\n }\r\n\r\n OnChangeValue(event: any, type: string) {\r\n if (!event.event) return;\r\n switch (type) {\r\n case 'EndingDeposits': {\r\n if (event.value) {\r\n this.Entity.EndingDepositsDaysAhead = 7;\r\n } else {\r\n this.Entity.EndingDepositsDaysAhead = null;\r\n this.Entity.IsEndingDepositsSendEmail = false;\r\n this.Entity.IsEndingDepositsSendSMS = false;\r\n this.Entity.IsEndingDepositsSendPushNotification = false;\r\n }\r\n break;\r\n }\r\n case 'LoanPayment': {\r\n if (event.value) {\r\n this.Entity.LoanPaymentDaysAhead = 7;\r\n } else {\r\n this.Entity.LoanPaymentDaysAhead = null;\r\n this.Entity.IsLoanPaymentSendEmail = false;\r\n this.Entity.IsLoanPaymentSendSMS = false;\r\n this.Entity.IsLoanPaymentSendPushNotification = false;\r\n }\r\n break;\r\n }\r\n case 'NewLoan': {\r\n if (!event.value) {\r\n this.Entity.IsNewLoanSendEmail = false;\r\n this.Entity.IsNewLoanSendSMS = false;\r\n this.Entity.IsNewLoanSendPushNotification = false;\r\n }\r\n break;\r\n }\r\n case 'ExpiringGuarantees': {\r\n if (event.value) {\r\n this.Entity.ExpiringGuaranteesDaysAhead = 30;\r\n } else {\r\n this.Entity.ExpiringGuaranteesDaysAhead = null;\r\n this.Entity.IsExpiringGuaranteesSendEmail = false;\r\n this.Entity.IsExpiringGuaranteesSendSMS = false;\r\n this.Entity.IsExpiringGuaranteesSendPushNotification = false;\r\n }\r\n break;\r\n }\r\n case 'NegativeCashflow': {\r\n if (event.value) {\r\n this.Entity.NegativeCashflowDaysAhead = 30;\r\n } else {\r\n this.Entity.NegativeCashflowDaysAhead = null;\r\n this.Entity.IsNegativeCashflowSendEmail = false;\r\n this.Entity.IsNegativeCashflowSendSMS = false;\r\n this.Entity.IsNegativeCashflowSendPushNotification = false;\r\n }\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n OnSendTestAlertTemplate(type: string) {\r\n if (!this.OnEntityValidate()) return;\r\n\r\n const testAlertTemplate = Utils.CloneObject(this.Entity) as AlertTemplate;\r\n delete testAlertTemplate.IsEndingDepositsActive;\r\n delete testAlertTemplate.IsLoanPaymentActive;\r\n delete testAlertTemplate.IsNewLoanActive;\r\n delete testAlertTemplate.IsExpiringGuaranteesActive;\r\n delete testAlertTemplate.IsNegativeCashflowActive;\r\n delete testAlertTemplate.IsTransactionLimitsActive;\r\n\r\n switch (type) {\r\n case 'EndingDeposits': {\r\n testAlertTemplate.IsEndingDepositsActive = true;\r\n break;\r\n }\r\n case 'LoanPayment': {\r\n testAlertTemplate.IsLoanPaymentActive = true;\r\n break;\r\n }\r\n case 'NewLoan': {\r\n testAlertTemplate.IsNewLoanActive = true;\r\n break;\r\n }\r\n case 'ExpiringGuarantees': {\r\n testAlertTemplate.IsExpiringGuaranteesActive = true;\r\n break;\r\n }\r\n case 'NegativeCashflow': {\r\n testAlertTemplate.IsNegativeCashflowActive = true;\r\n break;\r\n }\r\n case 'TransactionLimit': {\r\n testAlertTemplate.IsTransactionLimitsActive = true;\r\n break;\r\n }\r\n }\r\n\r\n this.Do(this.endpoint.SendTestAlertTemplate(testAlertTemplate), true, () => { });\r\n }\r\n\r\n OnSavingTransactionLimitLine(event: any) {\r\n const { changes } = event;\r\n const insert = ({ data }) => {\r\n this.State.Lines.unshift({ ...data, LineID: --rowKey });\r\n };\r\n const update = ({ data, key }) => {\r\n const line = this.State.Lines.find(l => l.LineID === key);\r\n\r\n if ('CompanyID' in data) {\r\n line.TransactionCategoryID = null;\r\n }\r\n if (line) Object.assign(line, data);\r\n };\r\n const remove = ({ key }) => {\r\n this.State.Lines = this.State.Lines.filter(l => l.LineID !== key);\r\n };\r\n\r\n event.cancel = true;\r\n\r\n changes.forEach((change) => {\r\n switch (change.type) {\r\n case 'insert':\r\n return insert(change);\r\n case 'update':\r\n return update(change);\r\n case 'remove':\r\n return remove(change);\r\n }\r\n });\r\n\r\n this.State.LineChanges = [];\r\n\r\n this.Entity.TransactionLimits = this.State.Lines.map(l => {\r\n const p = new AlertTemplateTransactionLimit();\r\n p.TransactionCategoryID = l.TransactionCategoryID;\r\n p.AmountLimit = l.AmountLimit;\r\n p.CompanyID = l.CompanyID;\r\n return p;\r\n });\r\n }\r\n\r\n CompanyCellTemplate = (container: any, options: any) => {\r\n const text = !Utils.IsEmpty(options?.text) ? options?.text : this.RC('lblGlobal');\r\n container.textContent = text;\r\n container.title = text;\r\n };\r\n\r\n OnEditingStartTansactionLimits(event) {\r\n if (event.column.dataField === 'TransactionCategoryID') {\r\n this.FilterCategories(event.data.CompanyID);\r\n }\r\n }\r\n\r\n FilterCategories(companyID) {\r\n let filteredCategories: TransactionCategory[];\r\n if (companyID) {\r\n filteredCategories = this.State.TransactionCategories.filter(c => c.CompanyID == companyID);\r\n } else {\r\n filteredCategories = this.State.TransactionCategories.filter(c => !c.CompanyID);\r\n }\r\n\r\n this.CategoriesStore = new DataSource({\r\n store: new ArrayStore({\r\n data: filteredCategories,\r\n key: 'ID',\r\n }),\r\n paginate: true,\r\n pageSize: 5\r\n });\r\n }\r\n}","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\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 { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCRUDActions } 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 { AlertTemplateEndpoint } from '../../../_proxy/endpoints/alerttemplate.endpoint';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport {AlertTemplate} from '../../../_proxy/entities/alerttemplate.entity';\r\nimport { DataSourceEndpointCRUD } from '@m4u-angular/base/datalayer/BaseDataSources';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-organization-alert-template-list',\r\n templateUrl: './alert-template-list.component.html'\r\n})\r\nexport class AlertTemplateListComponent extends BaseComponent\r\n{\r\n private _organizationID: number;\r\n @Input() set OrganizationID(value){\r\n this._organizationID = value;\r\n if (this._organizationID > -1) this.LoadDataSource();\r\n }\r\n\r\n constructor(A: ServiceBagService, private endpoint: AlertTemplateEndpoint){\r\n super(A, 'AlertTemplateListComponent', BaseState);\r\n }\r\n\r\n 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 == AlertTemplate) this.LoadDataSource();\r\n }\r\n\r\n public LoadDataSource(){\r\n this.DataSources['AlertTemplates'] = new DataSourceCustomAction((options: DataLoadOptions) => \r\n this.endpoint.ListEx(this._organizationID, options)); \r\n }\r\n\r\n GetLinkParams(){\r\n return { OrganizationID: this._organizationID };\r\n }\r\n}\r\n\r\n","export default \"\\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 { AlertTemplate } from '@kraken/_proxy/entities/alerttemplate.entity';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-organization-alert-template-grid',\r\n templateUrl: './alert-template-grid.component.html'\r\n})\r\nexport class AlertTemplateGridComponent extends BaseGridComponent\r\n{\r\n constructor(A: ServiceBagService){\r\n super(A, 'AlertTemplateGridComponent', AlertTemplate, BaseState);\r\n }\r\n\r\n OnNavigate(e){\r\n this.A.Navigator.Navigate(['/pages/alert-organization-template', e.data.EntryID], { OrganizationID: e.data.OrganizationID });\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\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 { EnumForecastSystemSource } from './../enums';\r\nexport class ParentCategory extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ParentCategory';\r\n }\r\n \r\n public CompanyID: number; \r\n public Name: string; \r\n public Description: string; \r\n public SortingOrder: number; \r\n public Lines: ParentCategoryLine[] = []; \r\n public CompanyName: string; \r\n\t\r\n}\r\n\r\nexport class ParentCategoryLine extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ParentCategoryLine';\r\n }\r\n \r\n public Type: number; \r\n public TransactionCategoryID: number; \r\n public AccountingForecastCategoryID: number; \r\n public CashflowStaticCategory: EnumForecastSystemSource; \r\n public TransactionCategoryCompanyId: number; \r\n public LineID: number;\r\n}\r\n\r\n\r\n","import { Component } from '@angular/core';\r\nimport { ParentCategoryEndpoint } from '@kraken/_proxy/endpoints/parentcategory.endpoint';\r\nimport { TransactionCategoryEndpoint } from '@kraken/_proxy/endpoints/transactioncategory.endpoint';\r\nimport { ParentCategory, ParentCategoryLine } from '@kraken/_proxy/entities/parentcategory.entity';\r\nimport { TransactionCategory } from '@kraken/_proxy/entities/transactioncategory.entity';\r\nimport { EnumForecastSystemSource } from '@kraken/_proxy/enums';\r\nimport { AccessService } from '@kraken/services/access.service';\r\nimport { ContextMenuElement, ToolbarSettings } 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 { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { SelectionChangedEvent } from 'devextreme/ui/data_grid';\r\n\r\n\r\nclass State extends BaseState {\r\n RelatedTransactionCategoriesKeys: number[] = [];\r\n CurrentTabIndex: number = 0;\r\n Tabs: any[];\r\n RelatedForecastCategoriesKeys: string[] = [];\r\n CompanyID: number;\r\n RelatedStaticCategoriesKeys: string[] = [];\r\n StaticCategories: any[];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-parent-category',\r\n templateUrl: './parent-category.component.html',\r\n styleUrls: ['./parent-category.component.scss'],\r\n})\r\nexport class ParentCategoryComponent extends BasePageCRUDComponent {\r\n\r\n get IsGlobal() {\r\n return !(this.State.CompanyID);\r\n }\r\n\r\n constructor(A: ServiceBagService,\r\n public accessService: AccessService,\r\n public parentCategoryEndpoint: ParentCategoryEndpoint,\r\n public categoryEndpoint: TransactionCategoryEndpoint\r\n ) {\r\n super(A, 'ParentCategoryComponent', ParentCategory, State, parentCategoryEndpoint, EnumPageDisplayModes.Window);\r\n this.State.StaticCategories = this.LIST('CashflowStaticCategories');\r\n }\r\n\r\n override OnEntitySaved() {\r\n this.NavigateBack();\r\n }\r\n\r\n override OnEntityLoaded() {\r\n if (!this.IsAddMode) {\r\n this.State.CompanyID = this.Entity.CompanyID ?? this.QueryParams.CompanyID;\r\n this.State.Tabs = this.LIST('ParentCategoryTabs');\r\n this.State.Tabs[1].visible = !!this.Entity.CompanyID;\r\n\r\n let transactionCategories = this.Entity.Lines.filter(x => x.TransactionCategoryID);\r\n if (this.IsGlobal) transactionCategories = this.Entity.Lines.filter(x => x.TransactionCategoryCompanyId == null);\r\n this.State.RelatedTransactionCategoriesKeys = transactionCategories.map(x => x.TransactionCategoryID);\r\n\r\n this.State.RelatedForecastCategoriesKeys = this.Entity.Lines\r\n .filter(x => x.AccountingForecastCategoryID)\r\n .map(x => x.AccountingForecastCategoryID.toString());\r\n\r\n this.State.RelatedStaticCategoriesKeys = this.Entity.Lines\r\n .filter(x => x.CashflowStaticCategory && x.CashflowStaticCategory !== EnumForecastSystemSource.Transactions)\r\n .map(x => x.CashflowStaticCategory);\r\n\r\n this.Do(this.parentCategoryEndpoint.GetStaticParentCategories(this.Entity.CompanyID), false, (res) => {\r\n var parentCategories = res.Entities;\r\n this.State.StaticCategories.forEach(cat => {\r\n cat.ParentName = res.Entities\r\n .find(x => x.CashflowStaticCategory === cat.Value && x.CompanyId === this.Entity.CompanyID)?.ParentName ??\r\n res.Entities.find(x => x.CashflowStaticCategory === cat.Value)?.ParentName;\r\n });\r\n });\r\n }\r\n }\r\n\r\n override OnEntityNew() {\r\n this.Entity.CompanyID = this.QueryParams.CompanyID;\r\n this.State.CompanyID = this.QueryParams.CompanyID;\r\n\r\n this.Do(\r\n this.parentCategoryEndpoint.GetNextPossibleSortingOrder(this.QueryParams.CompanyID),\r\n false,\r\n (response) => {\r\n this.Entity.SortingOrder = response.Data;\r\n }\r\n );\r\n }\r\n\r\n protected override OnEntityPrepareForSave(): void {\r\n this.Entity.Lines = this.State.RelatedTransactionCategoriesKeys.map(chidCategoryId => {\r\n return {\r\n TransactionCategoryID: chidCategoryId\r\n } as ParentCategoryLine;\r\n });\r\n this.Entity.Lines.push(\r\n ...this.State.RelatedForecastCategoriesKeys.map(chidCategoryId => {\r\n return {\r\n AccountingForecastCategoryID: Number(chidCategoryId)\r\n } as ParentCategoryLine;\r\n })\r\n );\r\n this.Entity.Lines.push(\r\n ...this.State.RelatedStaticCategoriesKeys.map(chidCategoryId => {\r\n return {\r\n CashflowStaticCategory: chidCategoryId\r\n } as ParentCategoryLine;\r\n })\r\n );\r\n }\r\n\r\n override OnEntityInitObjectName() {\r\n return this.Entity && this.Entity.Name;\r\n }\r\n\r\n override OnInitContextMenus(): ContextMenuElement[] {\r\n if (this.IsAddMode || this.IsGlobal) return undefined;\r\n\r\n const menus: ContextMenuElement[] =\r\n [\r\n {\r\n text: this.RC('titleDelete'),\r\n visible: true,\r\n onClick: () => {\r\n this.OnDelete();\r\n }\r\n }\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 OnTransactionGridSelectionChanged(e: SelectionChangedEvent) {\r\n console.log(e.selectedRowKeys, this.State.RelatedTransactionCategoriesKeys);\r\n this.SetDirty();\r\n this.State.RelatedTransactionCategoriesKeys = e.selectedRowKeys;\r\n }\r\n\r\n OnForecastGridSelectionChanged(e: SelectionChangedEvent) {\r\n this.SetDirty();\r\n this.State.RelatedForecastCategoriesKeys = e.selectedRowKeys;\r\n }\r\n\r\n OnStaticCategoriesSelectionChanged(e: SelectionChangedEvent) {\r\n this.SetDirty();\r\n this.State.RelatedStaticCategoriesKeys = e.selectedRowKeys;\r\n }\r\n\r\n get IsReadOnly() {\r\n return !(this.Entity.CompanyID || this.accessService.IsSuperAdmin());\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\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 { Component } from '@angular/core';\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\n\r\n@Component({\r\n selector: 'app-parent-category-list-page',\r\n templateUrl: './parent-category-list-page.component.html'\r\n})\r\nexport class ParentCategoryListPageComponent extends BasePageComponent\r\n{\r\n constructor(A: ServiceBagService) {\r\n super(A, 'ParentCategoryListPageComponent', BaseEntity, BaseState);\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { ParentCategoryEndpoint } from '@kraken/_proxy/endpoints/parentcategory.endpoint';\r\nimport { ParentCategory } from '@kraken/_proxy/entities/parentcategory.entity';\r\nimport { ParentCategoryListParams } from '@kraken/_proxy/params/parentcategorylist.param';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\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 { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\n@Component({\r\n selector: 'app-parent-category-list',\r\n templateUrl: './parent-category-list.component.html'\r\n})\r\nexport class ParentCategoryListComponent extends BaseComponent {\r\n\r\n private _companyID: number;\r\n @Input() set CompanyID(value: number) {\r\n this._companyID = value;\r\n if (this._companyID > -1) this.LoadDataSource();\r\n }\r\n get CompanyID() {\r\n return this._companyID;\r\n }\r\n\r\n private _isLoadGlobal: boolean = false;\r\n @Input() set IsLoadGlobal(value: boolean) {\r\n if (this._isLoadGlobal !== value) {\r\n this._isLoadGlobal = value;\r\n this.LoadDataSource();\r\n }\r\n }\r\n get IsLoadGlobal() {\r\n return this._isLoadGlobal;\r\n }\r\n\r\n @Input() IsShowIsLoadGlobalCheckox: boolean = false;\r\n\r\n @Output() OnUpdateCount = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService, private endpoint: ParentCategoryEndpoint) {\r\n super(A, 'ParentCategoryListComponent', BaseState);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity,\r\n ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n if (ExternalEntityType == ParentCategory) this.LoadDataSource();\r\n }\r\n\r\n private LoadDataSource() {\r\n const params = new ParentCategoryListParams();\r\n params.LoadGlobal = this.IsLoadGlobal;\r\n params.Companies = this.CompanyID ? [this.CompanyID] : [];\r\n\r\n this.DataSources['ParentCategories'] = new DataSourceCustomAction(\r\n (options: DataLoadOptions) => this.endpoint.ListEx(params, options), null, (data) => {\r\n this.OnUpdateCount.emit(data.length);\r\n });\r\n }\r\n\r\n GetLinkParams() {\r\n return { CompanyID: this.CompanyID };\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\n\r\nexport class ParentCategoryReorderingParams extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ParentCategoryReorderingParams';\r\n }\r\n \r\n public ParentCategoryID: number; \r\n public NewOrder: number; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { ParentCategoryEndpoint } from '@kraken/_proxy/endpoints/parentcategory.endpoint';\r\nimport { ParentCategory } from '@kraken/_proxy/entities/parentcategory.entity';\r\nimport { ParentCategoryReorderingParams } from '@kraken/_proxy/params/parentcategoryreordering.param';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\n@Component({\r\n selector: 'app-parent-category-grid',\r\n templateUrl: './parent-category-grid.component.html'\r\n})\r\nexport class ParentCategoryGridComponent extends BaseGridComponent{\r\n @Input() CompanyID: number;\r\n @Input() IsLoadGlobal: boolean = false;\r\n @Input() IsShowIsLoadGlobalCheckox: boolean = false;\r\n @Output() IsLoadGlobalChange = new EventEmitter();\r\n @Output() Reorder = new EventEmitter();\r\n\r\n get AllowReordering() : boolean {\r\n return !this.IsLoadGlobal;\r\n }\r\n\r\n constructor(A: ServiceBagService, private parentCategoryEndpoint: ParentCategoryEndpoint) {\r\n super(A, 'ParentCategoryGridComponent', ParentCategory, BaseState);\r\n }\r\n\r\n OnNavigate(e) {\r\n this.Navigate(['/pages/parent-category', e.data.EntryID], { CompanyID: this.CompanyID }, true);\r\n }\r\n\r\n OnToolbarPreparing(e) {\r\n if (this.IsShowIsLoadGlobalCheckox) {\r\n e.toolbarOptions.items.unshift({\r\n location: 'after',\r\n template: 'showGlobalSettings',\r\n isCustom: true\r\n });\r\n }\r\n }\r\n\r\n OnReorder = (e) => {\r\n const params = new ParentCategoryReorderingParams();\r\n params.ParentCategoryID = e.itemData.EntryID;\r\n params.NewOrder = e.component.getVisibleRows()[e.toIndex].data.SortingOrder;\r\n\r\n\r\n this.Do(\r\n this.parentCategoryEndpoint.Reorder(params), \r\n false, \r\n () => {\r\n this.NotifyEntitySaved(e.itemData, ParentCategory);\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 {{cell.data.CompanyName}}\\r\\n {{'lblGlobal' | RC:THIS}}\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n
\";","\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntityReplication } from './../entities/baseentityreplication.entity';\r\nimport { EnumSide } from './../enums';\r\nexport class AccountingForecastCategory extends BaseEntityReplication {\r\n constructor() {\r\n super();\r\n this.TypeName = 'AccountingForecastCategory';\r\n }\r\n \r\n public Name: string; \r\n public Side: EnumSide; \r\n public IsActive: boolean; \r\n public AccountingCode: 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 { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { AccessService } from '@kraken/services/access.service';\r\nimport { AccountingForecastCategory } from '@kraken/_proxy/entities/accountingforecastcategory.entity';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-account-forecast-category-grid',\r\n templateUrl: './account-forecast-category-grid.component.html'\r\n})\r\nexport class AccountForecastCategoryGridComponent extends BaseGridComponent {\r\n @Input() IsShowCompanyID: boolean = false;\r\n @Input() CompanyID: number;\r\n\r\n @Input() IsShowIsLoadActiveOnlyCheckox: boolean = false;\r\n @Input() IsLoadActiveOnly: boolean = true;\r\n @Input() IsSelectionMode: boolean = false;\r\n @Input() SelectedRows: number[];\r\n\r\n @Output() IsLoadActiveOnlyChange = new EventEmitter();\r\n @Output() OnSelectionChanged = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService,\r\n private accessService: AccessService) {\r\n super(A, 'AccountForecastCategoryGridComponent', AccountingForecastCategory, BaseState);\r\n }\r\n\r\n OnToolbarPreparing(e) {\r\n if (this.IsShowIsLoadActiveOnlyCheckox) {\r\n e.toolbarOptions.items.unshift({\r\n location: 'after',\r\n template: 'showActiveOnlySettings',\r\n isCustom: true\r\n });\r\n }\r\n }\r\n\r\n OnGridSelectionChanged(e) {\r\n this.OnSelectionChanged.emit(e);\r\n }\r\n}\r\n","export default \"\\r\\n \\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.CompanyName}}\\r\\n {{'lblGlobal' | RC:THIS}}\\r\\n
\\r\\n
\\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState, BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { 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 { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { AccountingForecastCategoryEndpoint } from '@kraken/_proxy/endpoints/accountingforecastcategory.endpoint';\r\nimport { AccountingForecastCategory } from '@kraken/_proxy/entities/accountingforecastcategory.entity';\r\nimport { AccountingForecastCategoryParams } from '@kraken/_proxy/params/accountingforecastcategory.param';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-account-forecast-category-list',\r\n templateUrl: './account-forecast-category-list.component.html'\r\n})\r\nexport class AccountForecastCategoryListComponent extends BaseComponent {\r\n\r\n private _companyID: number;\r\n @Input() set CompanyID(value: number) {\r\n this._companyID = value;\r\n if (this._companyID > -1) this.LoadDataSource();\r\n }\r\n get CompanyID() {\r\n return this._companyID;\r\n }\r\n\r\n private _isLoadActiveOnly: boolean;\r\n @Input() set IsLoadActiveOnly(value: boolean) {\r\n if (this._isLoadActiveOnly !== value) {\r\n this._isLoadActiveOnly = value;\r\n this.LoadDataSource();\r\n }\r\n }\r\n get IsLoadActiveOnly() {\r\n return this._isLoadActiveOnly;\r\n }\r\n\r\n @Input() IsShowIsLoadActiveOnlyCheckox: boolean = false;\r\n @Input() IsAutoHeight: boolean = false;\r\n @Input() Title: string;\r\n @Input() IsSelectionMode: boolean = false;\r\n @Input() SelectedRows: number[];\r\n @Output() OnUpdateCount = new EventEmitter();\r\n @Output() OnSelectionChanged = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService,\r\n private endpoint: AccountingForecastCategoryEndpoint) {\r\n super(A, 'AccountForecastCategoryListComponent', BaseState);\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity,\r\n ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n if (ExternalEntityType == AccountingForecastCategory) this.LoadDataSource();\r\n }\r\n\r\n private LoadDataSource() {\r\n if (this.IsLoadActiveOnly === undefined || this.IsLoadActiveOnly === null) return;\r\n\r\n const params = new AccountingForecastCategoryParams();\r\n params.Companies = this.CompanyID ? [this.CompanyID] : [];\r\n params.LoadActive = this.IsLoadActiveOnly;\r\n\r\n this.DataSources['AccountForecastCategories'] = new DataSourceCustomAction(\r\n (options: DataLoadOptions) => this.endpoint.ListEx(params, options), null, (data) => {\r\n this.OnUpdateCount.emit(data.length);\r\n });\r\n }\r\n\r\n OnGridSelectionChanged(e) {\r\n this.OnSelectionChanged.emit(e);\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 { IncomingPaymentView } from './../views/incomingpayment.view';\r\nimport { TransactionPaymentProcessingView } from './../views/transactionpaymentprocessing.view';\r\nimport { IncomingPaymentTransactionIrrelevantRule } from './../entities/incomingpaymenttransactionirrelevantrule.entity';\r\nimport { DocumentPaymentProcessingView } from './../views/documentpaymentprocessing.view';\r\nimport { TransactionPaymentProcessingParams } from './../params/transactionpaymentprocessing.param';\r\nimport { IncomingPaymentProcessingSaveParams } from './../params/incomingpaymentprocessingsave.param';\r\nimport { ProcessTransactionsIncomingPaymentsParams } from './../params/processtransactionsincomingpayments.param';\r\n@Injectable()\r\nexport class IncomingPaymentProcessingEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"IncomingPaymentProcessing\", api);}\r\n\t\r\n\r\n public GetTransactionsPaymentProcessing(Params: TransactionPaymentProcessingParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'GetTransactionsPaymentProcessing', Params, undefined );\r\n }\r\n\r\n public override Get(EntryID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'Get', {EntryID: EntryID} );\r\n }\r\n\r\n public GetTransactionPaymentProcessing(TransactionID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetTransactionPaymentProcessing', {TransactionID: TransactionID} );\r\n }\r\n\r\n public GetIncomingPaymentViewForTransaction(TransactionID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetIncomingPaymentViewForTransaction', {TransactionID: TransactionID} );\r\n }\r\n\r\n public CreateIrrelevantRule(Entity: IncomingPaymentTransactionIrrelevantRule) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'CreateIrrelevantRule', Entity, undefined );\r\n }\r\n\r\n public GetBusinessPartnerIncomingPaymentDocuments(BusinessPartnerID: number, TransactionID: number) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetBusinessPartnerIncomingPaymentDocuments', {BusinessPartnerID: BusinessPartnerID, TransactionID: TransactionID} );\r\n }\r\n\r\n public SaveIncomingPayment(Params: IncomingPaymentProcessingSaveParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'SaveIncomingPayment', Params, undefined );\r\n }\r\n\r\n public ProcessTransactionPaymentProcessingViews(Params: ProcessTransactionsIncomingPaymentsParams) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ProcessTransactionPaymentProcessingViews', 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 { EnumIncomingPaymentStatus } from './../enums';\r\nimport { EnumIncomingPaymentInvoiceLineTypes } from './../enums';\r\nexport class IncomingPayment extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'IncomingPayment';\r\n }\r\n \r\n public BusinessPartnerID: number; \r\n public Status: EnumIncomingPaymentStatus; \r\n public OriginalStatus: EnumIncomingPaymentStatus; \r\n public PostingDate: Date; \r\n public Notes: string; \r\n public JournalNotes: string; \r\n public TransferReference: string; \r\n public CompanyID: number; \r\n public UploadID: number; \r\n public BookingDocumentNumber: number; \r\n public Exception: string; \r\n public PostedDate: Date; \r\n public IsVirtual: boolean; \r\n public IncomingPaymentAllocations: IncomingPaymentAllocation[] = []; \r\n\t\r\n}\r\n\r\nexport class IncomingPaymentAllocation extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'IncomingPaymentAllocation';\r\n }\r\n \r\n public LineType: EnumIncomingPaymentInvoiceLineTypes; \r\n public AccountJournalEntryID: number; \r\n public DocumentID: number; \r\n public Sum: 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 { IncomingPayment } from './../entities/incomingpayment.entity';\r\nimport { DocumentPaymentProcessingView } from './../views/documentpaymentprocessing.view';\r\nexport class IncomingPaymentView extends IncomingPayment {\r\n constructor() {\r\n super();\r\n this.TypeName = 'IncomingPaymentView';\r\n }\r\n \r\n public Documents: DocumentPaymentProcessingView[] = []; \r\n public ExtractedBusinessPartnerName: string; \r\n public BusinessPartnerCurrency: string; \r\n public IrrelevantRuleID: 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 { IncomingPaymentView } from './../views/incomingpayment.view';\r\nexport class IncomingPaymentProcessingSaveParams extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'IncomingPaymentProcessingSaveParams';\r\n }\r\n \r\n public TransactionID: number; \r\n public IncomingPaymentView: IncomingPaymentView = new IncomingPaymentView; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { Injectable } from '@angular/core';\r\nimport { DocumentPaymentProcessingView } from '@kraken/_proxy/views/documentpaymentprocessing.view';\r\nimport { IncomingPaymentView } from '@kraken/_proxy/views/incomingpayment.view';\r\nimport { TransactionPaymentProcessingView } from '@kraken/_proxy/views/transactionpaymentprocessing.view';\r\nimport * as _ from 'lodash';\r\nimport { EnumIncomingPaymentStatus } from '../../../../../Kraken/Angular/ClientApp/_proxy/enums';\r\n\r\n@Injectable()\r\nexport class IncomingPaymentProcessingService {\r\n private TransactionPaymentProcessingViews: TransactionPaymentProcessingView[] = [];\r\n private CurrentIdx = -1;\r\n // posted docs and transactions where docs were posted\r\n private postedDocuments = new Map();\r\n // \"transactionID-documentID\" - open sum\r\n // to store Open sum for the current transaction and doc. We need this in case Selected sum less than Open sum\r\n private transactionDocumentOpenSum = new Map();\r\n // store the latest doc sum to set it as the Open Sum upon the retrieveing the Incoming Payment.\r\n private latestDocOpenSum = new Map();\r\n\r\n HasUpdatedRecords = false;\r\n\r\n get NumberOfRecords(): number {\r\n return this.TransactionPaymentProcessingViews.length;\r\n }\r\n\r\n get CurrentRecordNo() : number {\r\n return this.CurrentIdx + 1;\r\n }\r\n\r\n IsRecordInTheList(record: TransactionPaymentProcessingView) {\r\n return this.TransactionPaymentProcessingViews.length > 0\r\n && this.TransactionPaymentProcessingViews.findIndex(t => t.EntryID == record.EntryID) >= 0;\r\n }\r\n\r\n ResetState() {\r\n this.TransactionPaymentProcessingViews = [];\r\n this.CurrentIdx = -1;\r\n this.postedDocuments = new Map();\r\n this.HasUpdatedRecords = false; \r\n }\r\n\r\n InitTransactionPaymentProcessingViews(rows: TransactionPaymentProcessingView[]) {\r\n // keep the same sorting order as on the grid\r\n this.TransactionPaymentProcessingViews = rows.sort((a, b) => {\r\n if (a.CompanyName < b.CompanyName) {\r\n return -1;\r\n }\r\n if (a.CompanyName > b.CompanyName) {\r\n return 1;\r\n }\r\n\r\n if (a.AccountName < b.AccountName) {\r\n return -1;\r\n }\r\n if (a.AccountName > b.AccountName) {\r\n return 1;\r\n }\r\n\r\n if (a.BookingAccountCode < b.BookingAccountCode) {\r\n return -1;\r\n }\r\n if (a.BookingAccountCode > b.BookingAccountCode) {\r\n return 1;\r\n }\r\n\r\n return 0;\r\n });\r\n this.HasUpdatedRecords = false;\r\n this.postedDocuments = new Map();\r\n\r\n this.transactionDocumentOpenSum = new Map();\r\n this.latestDocOpenSum = new Map();\r\n }\r\n\r\n MarkIncomingPaymentsIrrelevantByNotes(notes1: string, notes2: string) {\r\n if(!notes1 && !notes2) {\r\n return;\r\n }\r\n\r\n this.TransactionPaymentProcessingViews.filter(i => (notes1? i.Notes1 == notes1 : true) && (notes2? i.Notes2 == notes2 : true))\r\n .forEach(t => {\r\n if(t.IncomingPaymentView) {\r\n if(!t.IncomingPaymentView.EntryID || t.IncomingPaymentView.EntryID <= 0) {\r\n t.IncomingPaymentView.Status = EnumIncomingPaymentStatus.Irrelevant;\r\n t.Status = EnumIncomingPaymentStatus.Irrelevant;\r\n }\r\n } else {\r\n t.Status = EnumIncomingPaymentStatus.Irrelevant;\r\n }\r\n });\r\n }\r\n\r\n SelectIncomingPaymentProcessingView(record: TransactionPaymentProcessingView) {\r\n this.CurrentIdx = this.TransactionPaymentProcessingViews.findIndex(t => t.EntryID == record.EntryID);\r\n }\r\n\r\n GetPrevIncomingPyamnetProcessinView() : TransactionPaymentProcessingView | undefined {\r\n this.CurrentIdx--;\r\n return this.GetIncomingPaymentWithDocsFiltered(this.CurrentIdx);\r\n }\r\n\r\n GetCurrentIncomingPaymentProcessingView(): TransactionPaymentProcessingView | undefined {\r\n return this.GetIncomingPaymentWithDocsFiltered(this.CurrentIdx);\r\n }\r\n\r\n GetNextIncomingPyamnetProcessinView() : TransactionPaymentProcessingView | undefined {\r\n this.CurrentIdx++;\r\n return this.GetIncomingPaymentWithDocsFiltered(this.CurrentIdx);\r\n }\r\n\r\n UpdateCurrentIncomingPayment(incomingPayment: IncomingPaymentView, docs: DocumentPaymentProcessingView[] = []) {\r\n if(this.CurrentIdx >= 0) {\r\n const transactionIncomingPayment = this.TransactionPaymentProcessingViews[this.CurrentIdx].IncomingPaymentView;\r\n if(!transactionIncomingPayment) {\r\n return;\r\n }\r\n\r\n transactionIncomingPayment.EntryID = incomingPayment.EntryID;\r\n transactionIncomingPayment.Status = incomingPayment.Status;\r\n transactionIncomingPayment.BusinessPartnerID = incomingPayment.BusinessPartnerID;\r\n this.TransactionPaymentProcessingViews[this.CurrentIdx].Status = incomingPayment.Status;\r\n\r\n if(docs.length > 0) {\r\n transactionIncomingPayment.Documents = _.cloneDeep(docs);\r\n }\r\n\r\n transactionIncomingPayment.Documents.forEach(d => {\r\n const docId = incomingPayment.Documents.findIndex(i => i.EntryID == d.EntryID);\r\n if(docId >= 0) {\r\n d.SelectedSum = incomingPayment.Documents[docId].SelectedSum;\r\n }\r\n });\r\n }\r\n }\r\n\r\n AddPostedIncomingPaymentDocuments(incomingPayment: IncomingPaymentView, transactionId: number) {\r\n incomingPayment.Documents.forEach(d => {\r\n if(d.OpenSum == d.SelectedSum) {\r\n this.postedDocuments.set(d.EntryID, transactionId);\r\n } else {\r\n const transactionDocIds = `${transactionId}-${d.EntryID}`;\r\n this.transactionDocumentOpenSum.set(transactionDocIds, d.OpenSum);\r\n this.latestDocOpenSum.set(d.EntryID, d.OpenSum - d.SelectedSum);\r\n }\r\n });\r\n }\r\n\r\n private GetIncomingPaymentWithDocsFiltered(index: number) : TransactionPaymentProcessingView | undefined {\r\n if(index > -1 && index < this.TransactionPaymentProcessingViews.length) {\r\n const incomingPaymentTransaction = _.cloneDeep(this.TransactionPaymentProcessingViews[index]);\r\n\r\n const documents : DocumentPaymentProcessingView[] = [];\r\n for(const doc of incomingPaymentTransaction.IncomingPaymentView.Documents) {\r\n \r\n const transactionDocIds = `${incomingPaymentTransaction.EntryID}-${doc.EntryID}`;\r\n\r\n if(!this.postedDocuments.has(doc.EntryID) \r\n || this.postedDocuments.get(doc.EntryID) == incomingPaymentTransaction.EntryID \r\n || this.transactionDocumentOpenSum.has(transactionDocIds)) {\r\n documents.push(doc);\r\n\r\n if(this.transactionDocumentOpenSum.has(transactionDocIds)) {\r\n doc.OpenSum = this.transactionDocumentOpenSum.get(transactionDocIds);\r\n } else if (this.latestDocOpenSum.has(doc.EntryID)) {\r\n doc.OpenSum = this.latestDocOpenSum.get(doc.EntryID);\r\n }\r\n }\r\n }\r\n\r\n incomingPaymentTransaction.IncomingPaymentView.Documents = documents;\r\n \r\n return incomingPaymentTransaction;\r\n }\r\n return undefined;\r\n }\r\n}","import { Component, Input, ViewChild } from '@angular/core';\r\nimport { TransactionPaymentProcessingView } from '@kraken/_proxy/views/transactionpaymentprocessing.view';\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 } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { DxValidatorComponent } from 'devextreme-angular/ui/validator';\r\n\r\nexport class State extends BaseState {\r\n CreateRule: boolean;\r\n UseNotes1: boolean;\r\n UseNotes2: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-mark-as-irrelevant-dialog',\r\n templateUrl: './mark-as-irrelevant-dialog.component.html',\r\n styleUrls: ['./mark-as-irrelevant-dialog.component.scss']\r\n})\r\nexport class MarkAsIrrelevantDialogComponent extends BasePageComponent {\r\n @Input() Transaction: TransactionPaymentProcessingView;\r\n\r\n @ViewChild('notes1Validation') notes1Validation: DxValidatorComponent;\r\n @ViewChild('notes2Validation') notes2Validation: DxValidatorComponent;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'MarkAsIrrelevantDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n this.BindHandler('ValidateNotes');\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.State.CreateRule = false;\r\n this.State.UseNotes1 = true;\r\n this.State.UseNotes2 = true;\r\n }\r\n\r\n OnMarkAsIrrelevantWithRule(e) {\r\n this.State.CreateRule = true;\r\n\r\n if(!this.ValidateCheckboxes()) {\r\n return;\r\n }\r\n\r\n this.MarkIrrelevant();\r\n }\r\n\r\n OnIrrelevantActionButtonClick(e) {\r\n if(e.itemData.Value == 'Rule') {\r\n this.State.CreateRule = true;\r\n } else {\r\n this.State.CreateRule = false;\r\n }\r\n\r\n this.MarkIrrelevant();\r\n }\r\n\r\n ValidateNotes(e) {\r\n return !this.State.CreateRule || this.State.UseNotes1 || this.State.UseNotes2;\r\n }\r\n\r\n private MarkIrrelevant() {\r\n if(!this.ValidateCheckboxes()) {\r\n return;\r\n }\r\n\r\n const state = {\r\n CreateRule: this.State.CreateRule, \r\n Notes1: this.State.CreateRule && this.State.UseNotes1 ? this.Transaction?.Notes1 : '',\r\n Notes2: this.State.CreateRule && this.State.UseNotes2 ? this.Transaction?.Notes2 : ''\r\n };\r\n\r\n this.CloseDialogWithSuccess(state);\r\n }\r\n\r\n private ValidateCheckboxes(): boolean {\r\n const checkboxNotes1Validation = this.notes1Validation.instance.validate();\r\n const checkboxNotes2Validation = this.notes2Validation.instance.validate();\r\n return checkboxNotes1Validation.isValid && checkboxNotes2Validation.isValid;\r\n }\r\n}","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\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 IncomingPaymentTransactionIrrelevantRule extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'IncomingPaymentTransactionIrrelevantRule';\r\n }\r\n \r\n public CompanyID: number; \r\n public Notes1: string; \r\n public Notes2: string; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { Component, ViewChild } from '@angular/core';\r\nimport { Globals } from '@kraken/_globals';\r\nimport { BusinessPartnerEndpoint } from '@kraken/_proxy/endpoints/businesspartner.endpoint';\r\nimport { IncomingPaymentProcessingEndpoint } from '@kraken/_proxy/endpoints/incomingpaymentprocessing.endpoint';\r\nimport { EnumIncomingPaymentStatus, EnumSide } from '@kraken/_proxy/enums';\r\nimport { BusinessPartnerListParams } from '@kraken/_proxy/params/businesspartnerlist.param';\r\nimport { IncomingPaymentProcessingSaveParams } from '@kraken/_proxy/params/incomingpaymentprocessingsave.param';\r\nimport { DocumentPaymentProcessingView } from '@kraken/_proxy/views/documentpaymentprocessing.view';\r\nimport { IncomingPaymentView } from '@kraken/_proxy/views/incomingpayment.view';\r\nimport { AccessService } from '@kraken/services/access.service';\r\nimport { OrganizationService } from '@kraken/services/organization.service';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\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 { ScreenService } from '@m4u-angular/core/framework/screen.service';\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 { of } from 'rxjs';\r\nimport { ItemClickEvent } from 'devextreme/ui/drop_down_button';\r\nimport { IncomingPaymentDocumentsGridComponent } from './incoming-payment-documents-grid/incoming-payment-documents-grid.component';\r\nimport { IncomingPaymentProcessingService } from '@kraken/services/incoming-payment-processing.service';\r\nimport { DxValidatorComponent } from 'devextreme-angular';\r\nimport { TransactionPaymentProcessingView } from '@kraken/_proxy/views/transactionpaymentprocessing.view';\r\nimport { IncomingPaymentActions } from '@kraken/_client.enums';\r\nimport { MarkAsIrrelevantDialogComponent } from './mark-as-irrelevant-dialog/mark-as-irrelevant-dialog.component';\r\nimport { IncomingPaymentTransactionIrrelevantRule } from '@kraken/_proxy/entities/incomingpaymenttransactionirrelevantrule.entity';\r\nimport { RouteHistoryService } from '@m4u-angular/core/framework/route-history.service';\r\n\r\nexport class State extends BaseState {\r\n EntryID: number;\r\n ShowCurrency: boolean;\r\n Transaction: TransactionPaymentProcessingView;\r\n TransactionID: number;\r\n TransactionSum: number;\r\n SelectedSum: number;\r\n DifferenceSum: number;\r\n OrganizationID: number;\r\n SelectedDocuments: DocumentPaymentProcessingView[] = [];\r\n SelectedDocumentsIDs: number[] = [];\r\n ActionsMenu: ActionsMenu[] = [];\r\n IsBusinessPartnerMandatory = false;\r\n PreferableAction: IncomingPaymentActions;\r\n PreferableActionText: string;\r\n BookingAccountCurrency: string;\r\n CompanyName: string;\r\n MaxDocumentDate: Date;\r\n Notes: string; \r\n JournalNotes: string; \r\n TransferReference: string;\r\n BusinessPartnerID: number;\r\n HasBeenProcessedPreviously: boolean;\r\n\r\n BusinessPartnerControlTouched = false;\r\n}\r\n\r\nexport class ActionsMenu {\r\n Text: string;\r\n Value: IncomingPaymentActions;\r\n disabled: boolean;\r\n\r\n constructor(value: string, text: string, disabled: boolean = false) {\r\n this.Value = IncomingPaymentActions[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-incoming-payment-processing',\r\n templateUrl: './incoming-payment-processing.component.html',\r\n styleUrls: ['./incoming-payment-processing.component.scss']\r\n})\r\nexport class IncomingPaymentProcessingComponent \r\n extends BasePageCRUDComponent {\r\n @ViewChild('messageDialog') messageBoxDialog: MessageBoxDialogComponent;\r\n @ViewChild('grid') incomingPaymentDocsGrid: IncomingPaymentDocumentsGridComponent;\r\n @ViewChild('businessPartnerValidator', {static: false}) businessPartnerValidator: DxValidatorComponent;\r\n @ViewChild(MarkAsIrrelevantDialogComponent) markAsIrrelevandDialog: MarkAsIrrelevantDialogComponent;\r\n\r\n get IsReadOnly(): boolean {\r\n return this.Entity.Status == EnumIncomingPaymentStatus.Posted \r\n || this.Entity.Status == EnumIncomingPaymentStatus.HandleManually\r\n || this.Entity.Status == EnumIncomingPaymentStatus.Pending\r\n || (this.Entity.Status == EnumIncomingPaymentStatus.Irrelevant && !this.State.BusinessPartnerControlTouched);\r\n }\r\n\r\n get IsBusinessPartnerControlReadonly() : boolean {\r\n return this.IsReadOnly && this.Entity.Status != EnumIncomingPaymentStatus.Irrelevant;\r\n }\r\n\r\n get IsAllocateFIFOButtonDisabled() : boolean {\r\n return this.Entity.Documents.length == 0 || this.State.SelectedDocuments.length > 0 || this.IsReadOnly;\r\n }\r\n\r\n get NumberOf() : string | undefined {\r\n if(this.incomingPaymentProcessingService.NumberOfRecords) {\r\n return this.RC('lblDocumentNumberOf', \r\n this.incomingPaymentProcessingService.CurrentRecordNo, \r\n this.incomingPaymentProcessingService.NumberOfRecords);\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n get GotDisabledDocuments() : boolean {\r\n return this.Entity.Documents.some(d => d.Currency != this.State.Transaction?.Currency);\r\n }\r\n \r\n constructor(A: ServiceBagService,\r\n private incomingPaymentProcessingEndpoint: IncomingPaymentProcessingEndpoint,\r\n private accessService: AccessService,\r\n private organizationService: OrganizationService,\r\n private businessPartnerEndpoint: BusinessPartnerEndpoint,\r\n public screen: ScreenService,\r\n private incomingPaymentProcessingService: IncomingPaymentProcessingService,\r\n private routeHistoryService: RouteHistoryService) {\r\n\r\n super(A, \r\n 'IncomingPaymentProcessingComponent', \r\n IncomingPaymentView, \r\n State, \r\n incomingPaymentProcessingEndpoint, \r\n EnumPageDisplayModes.Window\r\n );\r\n \r\n this.ValidateBusinessPartner = this.ValidateBusinessPartner.bind(this);\r\n\r\n }\r\n\r\n override GetTitle() {\r\n const defaultTitle = this.GetDefaultTitle();\r\n const customTitle = this.Entity?.BookingDocumentNumber;\r\n return customTitle > 0 ? `${defaultTitle} - ${customTitle}` : defaultTitle;\r\n }\r\n\r\n\r\n protected override OnEntityNew() {\r\n const transactionIncomingPaymentView = this.incomingPaymentProcessingService.GetCurrentIncomingPaymentProcessingView();\r\n\r\n if(transactionIncomingPaymentView) {\r\n this.OnTransactionPaymentProcessingViewLoaded(transactionIncomingPaymentView);\r\n } else {\r\n this.Do(\r\n this.incomingPaymentProcessingEndpoint.GetTransactionPaymentProcessing(this.State.TransactionID),\r\n false,\r\n (response) => {\r\n this.OnTransactionPaymentProcessingViewLoaded(response.Entity);\r\n }\r\n );\r\n }\r\n }\r\n\r\n protected override OnInitSubtitle(): string {\r\n return this.State.CompanyName;\r\n }\r\n\r\n private OnGetEntityNew(entity: IncomingPaymentView) {\r\n this.Entity = entity;\r\n this.Entity.Notes = this.RC('txtReceiptFromBankOne');\r\n this.State.ShowCurrency = this.Entity.BusinessPartnerCurrency == '##';\r\n this.SelectDocuments();\r\n }\r\n\r\n public override OnIsDirtyDisabled(): boolean {\r\n return true;\r\n }\r\n\r\n protected override OnInitState() {\r\n this.InitStateFromQuery();\r\n }\r\n\r\n protected override OnEntityLoaded() {\r\n if (this.State.BusinessPartnerControlTouched){\r\n this.InitBusinessPartnerFromState();\r\n }\r\n this.SelectDocuments();\r\n this.LoadAllowedActions();\r\n this.State.ShowCurrency = this.Entity.BusinessPartnerCurrency == '##';\r\n }\r\n\r\n protected override LoadEntity(iEntryID: number) {\r\n const transactionIncomingPaymentView = this.incomingPaymentProcessingService.GetCurrentIncomingPaymentProcessingView();\r\n if(transactionIncomingPaymentView) {\r\n this.OnTransactionPaymentProcessingViewLoaded(transactionIncomingPaymentView);\r\n super.ReflectEntityLoaded();\r\n } else {\r\n this.Do(\r\n this.incomingPaymentProcessingEndpoint.GetTransactionPaymentProcessing(this.State.TransactionID),\r\n false,\r\n (response) => {\r\n this.OnTransactionPaymentProcessingViewLoaded(response.Entity);\r\n }\r\n );\r\n }\r\n }\r\n\r\n override OnInitComponent() {\r\n this.LoadOrganization();\r\n this.InitStateTransactionData();\r\n this.LoadBusinessPartnersDataSource();\r\n this.LoadAllowedActions();\r\n \r\n this.routeHistoryService.ClearHistory(1);\r\n }\r\n\r\n OnAllocateFifo() {\r\n const docsToSelect: number[] = [];\r\n let remainingSum = this.State.TransactionSum;\r\n for(const doc of this.Entity.Documents.map(d => d).sort((a,b) => a.DocumentDate.getTime() - b.DocumentDate.getTime())) {\r\n if(doc.OpenSum == 0) {\r\n continue;\r\n }\r\n\r\n if(doc.OpenSum <= remainingSum) {\r\n doc.SelectedSum = doc.OpenSum;\r\n remainingSum -= doc.OpenSum;\r\n docsToSelect.push(doc.EntryID);\r\n } else if (remainingSum > 0) {\r\n doc.SelectedSum = remainingSum;\r\n remainingSum = 0;\r\n docsToSelect.push(doc.EntryID);\r\n }\r\n }\r\n\r\n this.incomingPaymentDocsGrid?.UpdateGridSelection(docsToSelect);\r\n }\r\n\r\n OnIncomingPaymentProcessingActionsClick(e: ItemClickEvent) {\r\n this.ExecuteAction(e.itemData?.Value);\r\n }\r\n\r\n OnBusinessPartnerChange(e) {\r\n if(!this.IsUIEvent(e)) {\r\n return;\r\n }\r\n\r\n if(e?.component?._dataSource?._items) {\r\n this.State.ShowCurrency = (e?.component?._dataSource?._items.find(i => i.EntryID == e.value)?.Currency) == '##';\r\n }\r\n \r\n this.State.BusinessPartnerControlTouched = true;\r\n this.State.BusinessPartnerID = this.Entity.BusinessPartnerID;\r\n\r\n if(this.Entity.BusinessPartnerID) {\r\n this.LoadDocumentsForBusinessPartner();\r\n if(this.Entity.Status == EnumIncomingPaymentStatus.Irrelevant) {\r\n this.LoadAllowedActions();\r\n }\r\n } else {\r\n this.Entity.Documents = [];\r\n this.State.SelectedDocuments.length = 0;\r\n }\r\n }\r\n\r\n OnClose() : boolean {\r\n if(this.incomingPaymentProcessingService.HasUpdatedRecords) {\r\n this.NotifyEntitySaved(undefined, IncomingPaymentView);\r\n }\r\n return true;\r\n }\r\n\r\n ValidateBusinessPartner() {\r\n if(this.State.IsBusinessPartnerMandatory && !this.Entity.BusinessPartnerID) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n OnActionButtonClick(e) {\r\n this.ExecuteAction(this.State.PreferableAction);\r\n }\r\n\r\n OnNavigatePrev() {\r\n this.NavigateToPrevEntity();\r\n }\r\n\r\n OnNavigateNext() {\r\n this.NavigateToNextEntity();\r\n }\r\n\r\n OnBusinessPartnerInfoClick() {\r\n if(this.Entity.BusinessPartnerID > 0 && this.accessService.IsAllowAccountingReports()) {\r\n this.Navigate(['/pages/business-partner', this.Entity.BusinessPartnerID]);\r\n }\r\n }\r\n\r\n OnSelectedDocsChanged(selectedDocs: DocumentPaymentProcessingView[]) {\r\n if(!selectedDocs || selectedDocs.length == 0) {\r\n this.Entity.JournalNotes = undefined;\r\n this.State.MaxDocumentDate = undefined;\r\n }\r\n\r\n this.State.MaxDocumentDate = selectedDocs.reduce((max, document) => {\r\n return document.DocumentDate > max ? document.DocumentDate : max;\r\n }, new Date(0));\r\n\r\n this.Entity.JournalNotes = selectedDocs.map(d => d.DocumentNumber).join(', ');\r\n }\r\n\r\n PostingDateChanged($event) {\r\n this.incomingPaymentDocsGrid.Refresh();\r\n }\r\n\r\n private ExecuteAction(action: IncomingPaymentActions) {\r\n if(action == IncomingPaymentActions.HandleManually) {\r\n this.HandleManually();\r\n } else if(action == IncomingPaymentActions.Post) {\r\n this.SaveAndPost();\r\n } else if(action == IncomingPaymentActions.MoveToTheNext) {\r\n this.MoveNext();\r\n } else if(action == IncomingPaymentActions.Save) {\r\n this.SaveForLaterProcessing();\r\n } else if (action == IncomingPaymentActions.MarkAsIrrelevant) {\r\n this.MarkAsIrrelevent();\r\n }\r\n }\r\n\r\n private SaveForLaterProcessing() {\r\n if(!this.Entity.BusinessPartnerID) {\r\n this.State.IsBusinessPartnerMandatory = false;\r\n this.businessPartnerValidator.instance?.reset();\r\n }\r\n\r\n this.Entity.Status = EnumIncomingPaymentStatus.Saved;\r\n\r\n this.Save();\r\n }\r\n\r\n private MoveNext() {\r\n this.NavigateToNextEntity();\r\n }\r\n\r\n private MarkAsIrrelevent() { \r\n this.markAsIrrelevandDialog.ShowDialogShort(\r\n (result: { CreateRule: boolean, Notes1: string, Notes2: string }) => {\r\n this.Entity.Status = EnumIncomingPaymentStatus.Irrelevant;\r\n this.State.IsBusinessPartnerMandatory = false;\r\n \r\n if(result.CreateRule) {\r\n const rule = this.CreateIrrelevantRule(result.Notes1, result.Notes2);\r\n this.IsLoading = true;\r\n this.Do(\r\n this.incomingPaymentProcessingEndpoint.CreateIrrelevantRule(rule),\r\n false,\r\n () => {\r\n this.incomingPaymentProcessingService.MarkIncomingPaymentsIrrelevantByNotes(result.Notes1, result.Notes2);\r\n this.IsLoading = false;\r\n\r\n if(this.Entity.EntryID > 0) {\r\n this.Save();\r\n } else {\r\n this.NavigateToNextOrClose();\r\n }\r\n },\r\n (response) => {\r\n this.UI.StopMessage(response.ResponseMessage);\r\n this.IsLoading = false;\r\n }\r\n );\r\n } else {\r\n this.Save();\r\n }\r\n }\r\n );\r\n }\r\n\r\n private CreateIrrelevantRule(notes1: string, notes2: string) {\r\n const rule: IncomingPaymentTransactionIrrelevantRule = new IncomingPaymentTransactionIrrelevantRule();\r\n rule.CompanyID = this.State.Transaction.CompanyID;\r\n rule.Notes1 = notes1;\r\n rule.Notes2 = notes2;\r\n\r\n return rule;\r\n }\r\n\r\n private HandleManually() {\r\n this.State.IsBusinessPartnerMandatory = false;\r\n this.businessPartnerValidator.instance?.reset();\r\n this.Entity.Status = EnumIncomingPaymentStatus.HandleManually;\r\n\r\n this.Save();\r\n }\r\n\r\n private SaveAndPost() {\r\n this.State.IsBusinessPartnerMandatory = true;\r\n this.ValidateValidationGroup(this.validationGroup).then(isValid => {\r\n if (!isValid) return;\r\n\r\n const selectedDocsSum = this.State.SelectedDocuments.map(d => d.SelectedSum)\r\n .reduce((accumulator, currentValue) => accumulator + currentValue, 0);\r\n\r\n const truncatedRemainder = Math.abs(this.State.TransactionSum - selectedDocsSum).toPrecision(2);\r\n const remainderIsNotZero: boolean = parseFloat(truncatedRemainder) !== 0;\r\n\r\n const conditionalMessages = [\r\n {\r\n condition: remainderIsNotZero,\r\n message: 'lblRemainderSumIsNotZero'\r\n },\r\n {\r\n condition: this.State.HasBeenProcessedPreviously,\r\n message: 'msgIncomingPaymentTransactionHasBeenProcessedAlready'\r\n }\r\n ];\r\n\r\n this.ShowConditionalMessagesYesNoDialog(\r\n conditionalMessages, \r\n () => {\r\n this.Entity.Status = EnumIncomingPaymentStatus.Pending;\r\n this.Save();\r\n }\r\n );\r\n \r\n });\r\n }\r\n\r\n // Show message when condition is true. \r\n // finalAction will be executed either when all the answers to messageBox dialog are Yes or when all the conditions are false\r\n ShowConditionalMessagesYesNoDialog(conditionalMessages: { condition: boolean, message: string }[], finalAction: () => void) {\r\n let index = 0;\r\n\r\n const nextStep = () => {\r\n // Need this delay, because when it is absent, due to the async nature of TS\r\n // We will update the CURRENT state of the messageBoxDialog\r\n // So, when we have two messages one after another, the second one will have wrong state buttons\r\n setTimeout(() => {\r\n while (index < conditionalMessages.length && !conditionalMessages[index].condition) {\r\n index++;\r\n }\r\n\r\n if (index < conditionalMessages.length) {\r\n const { message } = conditionalMessages[index++];\r\n this.messageBoxDialog.Prompt = this.RC(message);\r\n this.messageBoxDialog.Type = EnumMessageBoxTypes.YesNo;\r\n \r\n this.messageBoxDialog.ShowDialogShort(nextStep);\r\n } else {\r\n finalAction();\r\n }\r\n }, 500);\r\n };\r\n\r\n nextStep();\r\n\r\n }\r\n\r\n private Save() {\r\n const params = new IncomingPaymentProcessingSaveParams();\r\n params.TransactionID = this.State.TransactionID;\r\n params.IncomingPaymentView = this.Entity;\r\n \r\n this.IsLoading = true;\r\n const originalDocsList = this.Entity.Documents;\r\n params.IncomingPaymentView.Documents = this.State.SelectedDocuments;\r\n this.Do(\r\n this.incomingPaymentProcessingEndpoint.SaveIncomingPayment(params),\r\n false,\r\n (data) => {\r\n this.incomingPaymentProcessingService.UpdateCurrentIncomingPayment(data.Entity, originalDocsList);\r\n this.incomingPaymentProcessingService.AddPostedIncomingPaymentDocuments(data.Entity, this.State.TransactionID);\r\n this.incomingPaymentProcessingService.HasUpdatedRecords = true;\r\n this.NavigateToNextOrClose();\r\n },\r\n () => {\r\n this.IsLoading = false;\r\n }\r\n );\r\n }\r\n\r\n private NavigateToNextOrClose() {\r\n if(this.incomingPaymentProcessingService.CurrentRecordNo == this.incomingPaymentProcessingService.NumberOfRecords) {\r\n this.ClosePage();\r\n } else {\r\n this.NavigateToNextEntity();\r\n }\r\n }\r\n\r\n private InitStateFromQuery() {\r\n if(this.A.Navigator.GetRouteParams().EntryID && typeof this.A.Navigator.GetRouteParams().EntryID === 'number') {\r\n this.State.EntryID = +this.A.Navigator.GetRouteParams().EntryID;\r\n }\r\n\r\n if (Object.entries(this.QueryParams).length <= 0) return;\r\n if (this.QueryParams.TransactionID) this.State.TransactionID = +this.QueryParams.TransactionID;\r\n }\r\n\r\n private SelectDocuments() {\r\n const ids = this.Entity.Documents\r\n .filter(d => d.SelectedSum != undefined && d.SelectedSum != 0)\r\n .map(d => d.EntryID);\r\n\r\n setTimeout(() => {\r\n this.State.SelectedDocumentsIDs = ids;\r\n }, 100);\r\n }\r\n\r\n private LoadDocumentsForBusinessPartner() {\r\n this.Do(\r\n this.incomingPaymentProcessingEndpoint.GetBusinessPartnerIncomingPaymentDocuments(\r\n this.Entity.BusinessPartnerID, \r\n this.State.TransactionID),\r\n false,\r\n (response) => {\r\n this.Entity.Documents = response.Entities;\r\n this.SelectDocuments();\r\n }\r\n );\r\n }\r\n\r\n private LoadOrganization() {\r\n const organizationId$ = this.accessService.IsAdmin()?\r\n this.organizationService.Organization$ :\r\n of(Globals.OrganizationID);\r\n \r\n this.RegisterSubscription(\r\n organizationId$.subscribe(organizationId => {\r\n this.State.OrganizationID = organizationId;\r\n })\r\n );\r\n }\r\n\r\n private LoadBusinessPartnersDataSource() {\r\n const params = new BusinessPartnerListParams;\r\n params.OrganizationID = this.State.OrganizationID;\r\n params.IncomeExpenseSides = [EnumSide.Income];\r\n const companyID = this.incomingPaymentProcessingService.GetCurrentIncomingPaymentProcessingView()?.CompanyID;\r\n if(companyID) {\r\n params.Companies = [companyID];\r\n }\r\n\r\n this.DataSources['BusinessPartners'] = new DataSourceCustomAction(\r\n (options: DataLoadOptions) => this.businessPartnerEndpoint.ListEx(params, options),\r\n (entryID: number) => this.businessPartnerEndpoint.Get(entryID), \r\n undefined, \r\n false);\r\n }\r\n\r\n private LoadAllowedActions() {\r\n this.State.ActionsMenu = this.LIST('IncomingPaymentProcessingActions').map(i => new ActionsMenu(i.Value, i.Text));\r\n\r\n if(this.Entity.Status == EnumIncomingPaymentStatus.Exception) {\r\n this.State.ActionsMenu.find(a => a.Value == IncomingPaymentActions.Post).Text = this.RC('lblRetryPosting');\r\n }\r\n\r\n if(this.IsReadOnly) {\r\n for(const action of this.State.ActionsMenu) {\r\n if(action.Value != IncomingPaymentActions.MoveToTheNext) {\r\n action.disabled = true;\r\n } else {\r\n this.State.PreferableAction = action.Value;\r\n this.State.PreferableActionText = action.Text;\r\n }\r\n }\r\n } else {\r\n this.State.PreferableAction = IncomingPaymentActions.Post;\r\n this.State.PreferableActionText = this.State.ActionsMenu.find(a => a.Value == IncomingPaymentActions.Post).Text;\r\n }\r\n\r\n \r\n }\r\n\r\n private NavigateToNextEntity() {\r\n if(this.incomingPaymentProcessingService.CurrentRecordNo == this.incomingPaymentProcessingService.NumberOfRecords) {\r\n return;\r\n }\r\n \r\n const transactionIncomingPaymentView = this.incomingPaymentProcessingService.GetNextIncomingPyamnetProcessinView();\r\n\r\n this.NavigateToEntity(transactionIncomingPaymentView);\r\n }\r\n\r\n private NavigateToPrevEntity() {\r\n if(this.incomingPaymentProcessingService.CurrentRecordNo == 1) {\r\n return;\r\n }\r\n\r\n const transactionIncomingPaymentView = this.incomingPaymentProcessingService.GetPrevIncomingPyamnetProcessinView();\r\n\r\n this.NavigateToEntity(transactionIncomingPaymentView);\r\n }\r\n\r\n private NavigateToEntity(entity: TransactionPaymentProcessingView) {\r\n if(!entity) {\r\n return;\r\n }\r\n\r\n this.State.BusinessPartnerID = null;\r\n this.State.BusinessPartnerControlTouched = false;\r\n\r\n if (entity.IncomingPaymentView?.IsVirtual) {\r\n this.Navigate([`/pages/incoming-payment-processing-virtual/${entity.EntryID}`], {\r\n TransactionID: entity.EntryID\r\n });\r\n return;\r\n }\r\n\r\n const id = entity.IncomingPaymentView?.EntryID > 0 ? entity.IncomingPaymentView.EntryID : 'new';\r\n\r\n this.Navigate([`/pages/incoming-payment-processing/${id}`], {\r\n TransactionID: entity.EntryID\r\n });\r\n }\r\n\r\n private InitStateTransactionData() {\r\n const transactionIncomingPaymentView = this.incomingPaymentProcessingService.GetCurrentIncomingPaymentProcessingView();\r\n\r\n if(transactionIncomingPaymentView) {\r\n this.State.Transaction = transactionIncomingPaymentView;\r\n this.State.TransactionID = transactionIncomingPaymentView.EntryID;\r\n this.State.TransactionSum = transactionIncomingPaymentView.Sum;\r\n this.State.CompanyName = transactionIncomingPaymentView.CompanyName;\r\n\r\n return;\r\n }\r\n\r\n this.Do(\r\n this.incomingPaymentProcessingEndpoint.GetTransactionPaymentProcessing(this.State.TransactionID), \r\n false, \r\n (response) => {\r\n this.State.Transaction = response.Entity;\r\n this.State.TransactionSum = response.Entity.Sum;\r\n this.State.CompanyName = response.Entity.CompanyName;\r\n }\r\n );\r\n }\r\n\r\n private OnTransactionPaymentProcessingViewLoaded(transactionIncomingPaymentView: TransactionPaymentProcessingView) {\r\n this.State.Transaction = transactionIncomingPaymentView;\r\n this.State.CompanyName = transactionIncomingPaymentView.CompanyName;\r\n this.State.HasBeenProcessedPreviously = transactionIncomingPaymentView.HasBeenProcessedPreviously;\r\n this.OnGetEntityNew(transactionIncomingPaymentView.IncomingPaymentView);\r\n }\r\n\r\n InitBusinessPartnerFromState() {\r\n const partnerId = this.State.BusinessPartnerID;\r\n\r\n if(this.DataSources['BusinessPartners']?._items) {\r\n this.State.ShowCurrency = (this.DataSources['BusinessPartners']?._items.find(i => i.EntryID == partnerId)?.Currency) == '##';\r\n }\r\n\r\n this.Entity.BusinessPartnerID = partnerId;\r\n\r\n if(this.Entity.BusinessPartnerID) {\r\n this.LoadDocumentsForBusinessPartner();\r\n if(this.Entity.Status == EnumIncomingPaymentStatus.Irrelevant) {\r\n this.LoadAllowedActions();\r\n }\r\n } else {\r\n this.Entity.Documents = [];\r\n this.State.SelectedDocuments.length = 0;\r\n }\r\n }\r\n\r\n // Because of the way the component is structured,\r\n // the SaveState method is not called for this component, when we go to document from grid\r\n OnGoToDocument(){\r\n //this.SaveState();\r\n }\r\n}","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\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\\\" Label=\\\"{{'lblDocuments' | RC:THIS}}\\\" [IsCollapsable]=\\\"true\\\">\\r\\n\\r\\n 5\\\"\\r\\n [ShowDocsCurrency]=\\\"State.ShowCurrency\\\"\\r\\n [IncomingPaymentPostingDate]=\\\"Entity.PostingDate\\\"\\r\\n [TransactionCurrency]=\\\"State.Transaction?.Currency\\\"\\r\\n [TransactionSum]=\\\"State.TransactionSum\\\"\\r\\n (OnGoToDocumentEvent)=\\\"OnGoToDocument()\\\">\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\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\\\"\\r\\n [Icon]=\\\"'mdi mdi-chevron-' + (A.Screen.IsRTL() ? 'right': 'left')\\\"\\r\\n (OnClick)=\\\"OnNavigatePrev()\\\">\\r\\n \\r\\n
\\r\\n {{NumberOf}}\\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 { TransactionPaymentProcessingView } from './../views/transactionpaymentprocessing.view';\r\nexport class ProcessTransactionsIncomingPaymentsParams extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ProcessTransactionsIncomingPaymentsParams';\r\n }\r\n \r\n public TransactionPaymentProcessingViews: TransactionPaymentProcessingView[] = []; \r\n\t\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 { TransactionPaymentProcessingParams } from '@kraken/_proxy/params/transactionpaymentprocessing.param';\r\nimport { FilterSettings } from '@kraken/components/filter/filter.component';\r\nimport { Globals } from '@kraken/_globals';\r\nimport { EnumBookingAccountSubtypes, EnumIncomingPaymentStatus } from '@kraken/_proxy/enums';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { BaseReportComponent, BaseReportState } from '@kraken/pages/base-report/base-report.component';\r\nimport { IncomingPaymentProcessingGridComponent } from '../incoming-payment-processing-grid/incoming-payment-processing-grid.component';\r\nimport { QuickFilterSettings } from '@kraken/components/quick-filter/quick-filter.component';\r\nimport { IncomingPaymentView } from '@kraken/_proxy/views/incomingpayment.view';\r\nimport { IncomingPayment } from '@kraken/_proxy/entities/incomingpayment.entity';\r\nimport { EnumCRUDActions, EnumMessageBoxTypes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { IncomingPaymentProcessingEndpoint } from '@kraken/_proxy/endpoints/incomingpaymentprocessing.endpoint';\r\nimport { IncomingPaymentProcessingService } from '@kraken/services/incoming-payment-processing.service';\r\nimport { TransactionPaymentProcessingView } from '@kraken/_proxy/views/transactionpaymentprocessing.view';\r\nimport { MessageBoxDialogComponent } from '@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\nimport { ProcessTransactionsIncomingPaymentsParams } from '@kraken/_proxy/params/processtransactionsincomingpayments.param';\r\n\r\nclass State extends BaseReportState {\r\n IncomingPaymentStatuses: EnumIncomingPaymentStatus[] = [];\r\n IsShowForTreatmentOnly: boolean;\r\n SelectedRows: TransactionPaymentProcessingView[] = [];\r\n ShowAllCategories: boolean = false;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-incoming-payment-processing-list',\r\n templateUrl: './incoming-payment-processing-list.component.html',\r\n styleUrls: ['./incoming-payment-processing-list.component.scss']\r\n})\r\nexport class IncomingPaymentProcessingListComponent extends BaseReportComponent{\r\n\r\n @ViewChild('reportGrid') reportGrid: IncomingPaymentProcessingGridComponent;\r\n @ViewChild('messageDialog') messageBoxDialog: MessageBoxDialogComponent;\r\n\r\n constructor(A: ServiceBagService,\r\n private incomingPaymentProcessingService: IncomingPaymentProcessingService,\r\n private incomingPaymentProcessingEndpoint: IncomingPaymentProcessingEndpoint) {\r\n super(A, 'IncomingPaymentProcessingListComponent', State);\r\n }\r\n\r\n protected override OnGetCustomFilterSettings() {\r\n return {\r\n Company: { IsVisible: true, IsMultiple: true },\r\n Account: {\r\n IsVisible: true,\r\n IsMultiple: true,\r\n Params: {\r\n BookingAccountSubtypes: [EnumBookingAccountSubtypes.Current, EnumBookingAccountSubtypes.CreditCard]\r\n } \r\n },\r\n Bank: { IsVisible: true, IsMultiple: true },\r\n CurrencyFilter: { IsVisible: true, IsMultiple: true },\r\n BusinessPartner: { IsVisible: false },\r\n BookingAccount: { \r\n IsVisible: true, \r\n IsMultiple: true, \r\n Params: { \r\n BookingAccountSubtypes: [EnumBookingAccountSubtypes.Current]\r\n } \r\n },\r\n AccountGroup: { IsVisible: true, IsMultiple: true },\r\n\r\n IsDatesVisible: true,\r\n IsAmountsVisible: true,\r\n MaxReportDate: Globals.Yesterday\r\n } as FilterSettings;\r\n }\r\n\r\n protected override OnGetCustomQuickFilterSettings(): QuickFilterSettings {\r\n return {\r\n Company: { IsVisible: true, IsMultiple: true },\r\n Account: { \r\n IsVisible: true, \r\n IsMultiple: true, \r\n Params: { BookingAccountSubtypes: [EnumBookingAccountSubtypes.Current, EnumBookingAccountSubtypes.CreditCard] } \r\n },\r\n IsDatesVisible: true,\r\n BookingAccount: { \r\n IsVisible: true, \r\n IsMultiple: true, \r\n Params: { \r\n BookingAccountSubtypes: [EnumBookingAccountSubtypes.Current]\r\n } \r\n },\r\n } as QuickFilterSettings;\r\n }\r\n\r\n override OnInitState() {\r\n this.OnResetFilterValues();\r\n this.InitStateFromQuery();\r\n }\r\n\r\n protected override OnResetFilterValues() {\r\n super.OnResetFilterValues();\r\n this.State.FilterValues.DateFrom = Globals.SevenDaysAgoDate;\r\n this.State.FilterValues.DateTo = Globals.Yesterday;\r\n this.State.IncomingPaymentStatuses = this.GetDefaultStatuses();\r\n this.State.IsShowForTreatmentOnly = false;\r\n this.State.ShowAllCategories = false;\r\n }\r\n\r\n protected override OnLoadData() {\r\n if (!this.State.FilterValues.OrganizationID) {\r\n this.DataSources['TransactionsPaymentProcessing'] = undefined;\r\n return;\r\n }\r\n\r\n this.State.IsLoading = true;\r\n const params = this.GetParams();\r\n params.ShowForTreatmentOnly = this.State.IsShowForTreatmentOnly;\r\n params.Statuses = this.State.IncomingPaymentStatuses;\r\n params.ShowAllCategories = this.State.ShowAllCategories;\r\n\r\n this.DataSources['TransactionsPaymentProcessing'] = new DataSourceCustomAction(\r\n () => this.incomingPaymentProcessingEndpoint.GetTransactionsPaymentProcessing(params), \r\n undefined, \r\n (data) => {\r\n this.incomingPaymentProcessingService.InitTransactionPaymentProcessingViews(data);\r\n this.State.IsLoading = false;\r\n }, \r\n false\r\n );\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, \r\n ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n\r\n if (ExternalEntityType == IncomingPaymentView || ExternalEntityType === IncomingPayment) {\r\n this.OnLoadData();\r\n }\r\n }\r\n\r\n protected override OnDestroyComponent() {\r\n this.incomingPaymentProcessingService.ResetState();\r\n }\r\n\r\n OnSelectedRowsChanged(rows: TransactionPaymentProcessingView[]) {\r\n this.State.SelectedRows = rows;\r\n }\r\n\r\n OnProcessSelectedRecords() {\r\n this.messageBoxDialog.Prompt = this.RC('lblProcessSelectedRecords');\r\n this.messageBoxDialog.Type = EnumMessageBoxTypes.YesNo;\r\n\r\n this.messageBoxDialog.ShowDialogShort(\r\n () => {\r\n this.ProcessRecords();\r\n }\r\n );\r\n }\r\n\r\n OnStatusValueChanged(e) {\r\n if(!this.IsUIEvent(e)) {\r\n return;\r\n }\r\n\r\n this.OnLoadData();\r\n }\r\n\r\n private ProcessRecords() {\r\n if(!this.State.SelectedRows) {\r\n return;\r\n }\r\n\r\n const params = new ProcessTransactionsIncomingPaymentsParams();\r\n params.TransactionPaymentProcessingViews = this.State.SelectedRows;\r\n this.Do(\r\n this.incomingPaymentProcessingEndpoint.ProcessTransactionPaymentProcessingViews(params),\r\n true,\r\n () => {\r\n this.reportGrid.ClearSelection();\r\n this.OnLoadData();\r\n },\r\n undefined\r\n );\r\n }\r\n\r\n private GetDefaultStatuses(): EnumIncomingPaymentStatus[] {\r\n const statuses: EnumIncomingPaymentStatus[] = [];\r\n\r\n for (const enumMember in EnumIncomingPaymentStatus) {\r\n if (\r\n EnumIncomingPaymentStatus[enumMember] !== EnumIncomingPaymentStatus.Undefined &&\r\n EnumIncomingPaymentStatus[enumMember] !== EnumIncomingPaymentStatus.Posted &&\r\n EnumIncomingPaymentStatus[enumMember] !== EnumIncomingPaymentStatus.HandleManually &&\r\n EnumIncomingPaymentStatus[enumMember] !== EnumIncomingPaymentStatus.Irrelevant\r\n ) {\r\n statuses.push(EnumIncomingPaymentStatus[enumMember]);\r\n }\r\n }\r\n\r\n return statuses;\r\n }\r\n}","export default \"\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\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 { EnumIncomingPaymentStatus } from './../enums';\r\nimport { IncomingPaymentView } from './../views/incomingpayment.view';\r\nexport class TransactionPaymentProcessingView extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'TransactionPaymentProcessingView';\r\n }\r\n \r\n public AccountName: string; \r\n public AccountID: number; \r\n public CompanyName: string; \r\n public CompanyID: number; \r\n public BookingAccountCode: string; \r\n public Currency: string; \r\n public Date: Date; \r\n public Notes1: string; \r\n public Notes2: string; \r\n public Reference: string; \r\n public Sum: number; \r\n public Status: EnumIncomingPaymentStatus; \r\n public BusinessPartnerID: number; \r\n public BusinessPartnerName: string; \r\n public IncomingPaymentID: number; \r\n public HasBeenProcessedPreviously: boolean; \r\n public IncomingPaymentView: IncomingPaymentView = new IncomingPaymentView; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { EnumIncomingPaymentStatus } from '@kraken/_proxy/enums';\r\nimport { TransactionPaymentProcessingView } from '@kraken/_proxy/views/transactionpaymentprocessing.view';\r\nimport { AccessService } from '@kraken/services/access.service';\r\nimport { IncomingPaymentProcessingService } from '@kraken/services/incoming-payment-processing.service';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DxDataGridTypes } from 'devextreme-angular/ui/data-grid';\r\nimport * as _ from 'lodash';\r\n\r\nexport class State extends BaseState{\r\n SelectedRowKeys: number[] = [];\r\n OrganizationID: number;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-incoming-payment-processing-grid',\r\n templateUrl: './incoming-payment-processing-grid.component.html'\r\n})\r\nexport class IncomingPaymentProcessingGridComponent extends BaseGridComponent {\r\n @Output() SelectedRowsChanged = new EventEmitter();\r\n @Input() IsLoading: boolean = false;\r\n\r\n @Input() set OrganizationID(value: number) {\r\n if (value && value !== this.State.OrganizationID) {\r\n this.State.OrganizationID = value;\r\n }\r\n }\r\n \r\n constructor(A: ServiceBagService,\r\n private accessService: AccessService,\r\n private incomingPaymentProcessingService: IncomingPaymentProcessingService) {\r\n super(A, 'IncomingPaymentProcessingGridComponent', TransactionPaymentProcessingView, State);\r\n }\r\n\r\n OnNavigateToIncomingPaymentProcessing(e) {\r\n if(e.rowType != 'data') {\r\n return;\r\n }\r\n\r\n this.incomingPaymentProcessingService.SelectIncomingPaymentProcessingView(e.data as TransactionPaymentProcessingView);\r\n \r\n\r\n if (e.data.IncomingPaymentView?.IsVirtual) {\r\n this.Navigate([`/pages/incoming-payment-processing-virtual/${e.data.EntryID}`], {\r\n TransactionID: e.data.EntryID\r\n });\r\n return;\r\n }\r\n\r\n const id = e.data.IncomingPaymentView?.EntryID? e.data.IncomingPaymentView.EntryID : 'new';\r\n\r\n this.Navigate([`/pages/incoming-payment-processing/${id}`], {\r\n TransactionID: e.data.EntryID\r\n });\r\n }\r\n\r\n OnSelectionChanged(e: DxDataGridTypes.SelectionChangedEvent) {\r\n const selectedRows : TransactionPaymentProcessingView[] = [];\r\n e.selectedRowsData.forEach((d: TransactionPaymentProcessingView) => {\r\n if(d.Status != EnumIncomingPaymentStatus.MatchFull) {\r\n e.component.deselectRows([d.EntryID]);\r\n } else {\r\n selectedRows.push(d);\r\n }\r\n });\r\n\r\n this.SelectedRowsChanged.emit(selectedRows);\r\n }\r\n\r\n ClearSelection() {\r\n this.State.SelectedRowKeys = [];\r\n }\r\n\r\n GetStatusColor(data) {\r\n switch (data.Status) {\r\n case this.Enums.EnumIncomingPaymentStatus.Posted:\r\n return 'green-cyan';\r\n case this.Enums.EnumIncomingPaymentStatus.Pending:\r\n case this.Enums.EnumIncomingPaymentStatus.MatchFull:\r\n case this.Enums.EnumIncomingPaymentStatus.MatchNone:\r\n case this.Enums.EnumIncomingPaymentStatus.MatchBusinessPartner:\r\n return 'base-color';\r\n case this.Enums.EnumIncomingPaymentStatus.Exception:\r\n return 'cinnabar';\r\n case this.Enums.EnumIncomingPaymentStatus.Saved:\r\n case this.Enums.EnumIncomingPaymentStatus.Irellevant:\r\n case this.Enums.EnumIncomingPaymentStatus.HandleManually:\r\n return 'olive';\r\n }\r\n }\r\n\r\n OnGoToBusinessPartner(e) {\r\n const data = e.data as TransactionPaymentProcessingView;\r\n if(data && data.BusinessPartnerID > 0 && this.accessService.IsAllowAccountingReports()) {\r\n this.Navigate(['/pages/business-partner', data.BusinessPartnerID]);\r\n }\r\n }\r\n\r\n IsBusinessPartnerLinkDisabled = (cell) => {\r\n return !this.accessService.IsAllowAccountingReports() || cell.data.BusinessPartnerID == 0;\r\n };\r\n}","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\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.displayValue}}\\r\\n
\\r\\n
\";","\r\n\r\n\r\n\r\nimport { BaseEntity, CommonSettingEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumIncomingPaymentDocumentType } from './../enums';\r\nexport class DocumentPaymentProcessingView extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'DocumentPaymentProcessingView';\r\n }\r\n \r\n public DocumentType: EnumIncomingPaymentDocumentType; \r\n public DocumentNumber: number; \r\n public DocumentDate: Date; \r\n public DueDate: Date; \r\n public DocumentSum: number; \r\n public OpenSum: number; \r\n public SelectedSum: number; \r\n public Currency: string; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { EnumIncomingPaymentDocumentType } from '@kraken/_proxy/enums';\r\nimport { DocumentPaymentProcessingView } from '@kraken/_proxy/views/documentpaymentprocessing.view';\r\nimport { AccessService } from '@kraken/services/access.service';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DxDataGridTypes } from 'devextreme-angular/ui/data-grid';\r\n\r\nexport class State extends BaseState {\r\n SelectedSum: number;\r\n DifferenceSum: number;\r\n}\r\n\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-incoming-payment-documents-grid',\r\n templateUrl: './incoming-payment-documents-grid.component.html',\r\n styleUrls: ['./incoming-payment-documents-grid.component.scss']\r\n})\r\nexport class IncomingPaymentDocumentsGridComponent extends BaseGridComponent {\r\n\r\n @Input() TransactionSum: number;\r\n @Input() SelectedDocuments: DocumentPaymentProcessingView[];\r\n @Input() SelectedRowKeys: number[] = [];\r\n @Input() Disabled: boolean = false;\r\n @Input() ShowDocsCurrency: boolean = false;\r\n @Input() TransactionCurrency: string;\r\n @Input() IncomingPaymentPostingDate: Date;\r\n\r\n @Output() OnGoToDocumentEvent: EventEmitter = new EventEmitter();\r\n @Output() SelectionChanged: EventEmitter = new EventEmitter();\r\n\r\n get SelectionMode() : 'multiple' | 'none' {\r\n if(this.Disabled) {\r\n return 'none';\r\n }\r\n\r\n return 'multiple';\r\n }\r\n\r\n get IsSelectAllEnabled() : boolean {\r\n return (this.DataSource as DocumentPaymentProcessingView[])?.some(\r\n i => i.Currency?.toUpperCase() == this.TransactionCurrency?.toUpperCase());\r\n }\r\n\r\n get IsShowPartialAmountMessage() : boolean {\r\n if(this.Disabled) {\r\n return false;\r\n }\r\n\r\n return this.SelectedDocuments.some(d => d.SelectedSum != d.OpenSum);\r\n }\r\n\r\n get IsShowDocsMissingMessage(): boolean {\r\n return this.SelectedDocuments.some(d => d.EntryID <= 0);\r\n }\r\n \r\n constructor(A: ServiceBagService, private accessService: AccessService ) {\r\n super(A, 'IncomingPaymentDocumentsGridComponent', DocumentPaymentProcessingView, State);\r\n\r\n this.OnCalculateSummary = this.OnCalculateSummary.bind(this);\r\n }\r\n\r\n Refresh() {\r\n this.grid?.instance.refresh();\r\n }\r\n\r\n UpdateGridSelection(ids: number[]) { \r\n this.grid?.instance?.selectRows(ids, true);\r\n }\r\n\r\n ValidateSelectedSum(e) {\r\n return (e.data.DocumentType == EnumIncomingPaymentDocumentType.Invoice \r\n && e.data.OpenSum >= e.data.SelectedSum && e.data.SelectedSum >= 0) || \r\n (e.data.DocumentType == EnumIncomingPaymentDocumentType.Refund \r\n && e.data.SelectedSum >= e.data.OpenSum && e.data.SelectedSum <= 0);\r\n }\r\n\r\n OnCalculateSummary(options: Parameters[0]) {\r\n if (options.name === 'SelectedRowsSummary') {\r\n if (options.summaryProcess === 'start') {\r\n options.totalValue = 0;\r\n }\r\n\r\n const isRowSelected = options.component.isRowSelected(options.value?.EntryID);\r\n\r\n if (options.summaryProcess === 'calculate' && isRowSelected) {\r\n options.totalValue += options.value.SelectedSum;\r\n }\r\n\r\n if(options.summaryProcess == 'finalize') {\r\n this.State.SelectedSum = options.totalValue;\r\n } \r\n }\r\n\r\n if (options.name === 'Difference') {\r\n if (options.summaryProcess === 'start') {\r\n options.totalValue = this.TransactionSum;\r\n }\r\n\r\n const isRowSelected = options.component.isRowSelected(options.value?.EntryID);\r\n\r\n if (options.summaryProcess === 'calculate' && isRowSelected) {\r\n options.totalValue -= options.value.SelectedSum;\r\n }\r\n\r\n if(options.summaryProcess == 'finalize') {\r\n this.State.DifferenceSum = options.totalValue;\r\n }\r\n }\r\n }\r\n\r\n onEditorPreparing(e) {\r\n if (e.type !== 'selection') return;\r\n\r\n if (e.parentType === 'dataRow' && e.row) {\r\n e.editorOptions.disabled = !this.IsDocumentSelectable(e.row.data as DocumentPaymentProcessingView);\r\n }\r\n }\r\n\r\n OnSelectionChanged(e: DxDataGridTypes.SelectionChangedEvent) {\r\n // If grid is disabled no need to deselect or validate rows.\r\n // Retrieve SelectedDocuments to keep some logic working.\r\n if(this.Disabled) {\r\n this.SelectedDocuments.length = 0;\r\n this.SelectedDocuments.push(...e.selectedRowsData);\r\n\r\n return;\r\n }\r\n\r\n const selectedRowsData = [];\r\n\r\n e.selectedRowsData.forEach((d) => {\r\n if(!this.IsDocumentSelectable(d)) {\r\n e.component.deselectRows([d.EntryID]);\r\n } else {\r\n selectedRowsData.push(d);\r\n }\r\n });\r\n\r\n this.SelectedDocuments.length = 0;\r\n this.SelectedDocuments.push(...selectedRowsData);\r\n\r\n this.SelectedDocuments.forEach(d => {\r\n if(e.currentSelectedRowKeys.findIndex(i => i == d.EntryID) >= 0 && d.SelectedSum == 0) {\r\n d.SelectedSum = Math.min(d.OpenSum, this.State.DifferenceSum);\r\n\r\n if(e.currentSelectedRowKeys.length > 1) {\r\n this.State.DifferenceSum -= d.SelectedSum;\r\n }\r\n }\r\n });\r\n\r\n if(e.currentDeselectedRowKeys.length > 0 && Array.isArray(this.DataSource)) {\r\n (this.DataSource as any)?.forEach(d => {\r\n if(e.currentDeselectedRowKeys.includes(d.EntryID)) {\r\n d.SelectedSum = 0;\r\n }\r\n });\r\n }\r\n\r\n e.component.refresh(true);\r\n this.SelectionChanged.emit(this.SelectedDocuments);\r\n }\r\n\r\n IsDocumentNumberLinkDisabled = (cell) => {\r\n return !this.accessService.IsAllowAccountingReports();\r\n };\r\n\r\n OnGoToDocument(cell) {\r\n const document: DocumentPaymentProcessingView = cell.data;\r\n if (document.EntryID <= 0 || !this.accessService.IsAllowAccountingReports()) return;\r\n\r\n this.OnGoToDocumentEvent.emit();\r\n this.Navigate(['/pages/document', document.EntryID]);\r\n }\r\n\r\n private IsDocumentSelectable(document: DocumentPaymentProcessingView) : boolean {\r\n return document?.Currency?.toUpperCase() == this.TransactionCurrency?.toUpperCase()\r\n && document?.DocumentDate <= this.IncomingPaymentPostingDate;\r\n }\r\n}","export default \"
\\r\\n {{RC('msgPartialAmountDocuments')}}\\r\\n
\\r\\n
\\r\\n {{RC('msgDocsMissing')}}\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\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.DocumentSum | formatNumberSum}} \\r\\n  {{ cell.data.Currency?.toUpperCase() | LookupList:LIST('Currencies'):'Symbol' }}\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n {{cell.data.OpenSum | formatNumberSum}} \\r\\n  {{ cell.data.Currency?.toUpperCase() | LookupList:LIST('Currencies'):'Symbol' }}\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\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 { BaseUpload } from './../entities/baseupload.entity';\r\nexport class IncomingPaymentUpload extends BaseUpload {\r\n constructor() {\r\n super();\r\n this.TypeName = 'IncomingPaymentUpload';\r\n }\r\n \r\n public CompanyID: 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 { IncomingPaymentUpload } from './../entities/incomingpaymentupload.entity';\r\nimport { BaseUpload } from './../entities/baseupload.entity';\r\nexport class IncomingPaymentUploadView extends IncomingPaymentUpload {\r\n constructor() {\r\n super();\r\n this.TypeName = 'IncomingPaymentUploadView';\r\n }\r\n \r\n public OrganizationID: number; \r\n public OrganizationName: string; \r\n public DeploymentName: string; \r\n public CompanyName: string; \r\n public Duration: number; \r\n public IncomingPaymentsCount: number; \r\n\t\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 } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ContextMenuElement } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { IncomingPaymentUploadView } from './../../../_proxy/views/incomingpaymentupload.view';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-upload-incoming-payment-history-grid',\r\n templateUrl: './upload-incoming-payment-history-grid.component.html',\r\n styles: [` \r\n .grid-detail-item {\r\n padding: 6px 12px;\r\n }\r\n `]\r\n})\r\nexport class UploadIncomingPaymentHistoryGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'UploadIncomingPaymentHistoryGridComponent', IncomingPaymentUploadView, BaseState);\r\n }\r\n\r\n OnRowPrepared(row: any): void { \r\n if (row.rowType === 'data' && (!row.data || !row.data.Exception)) {\r\n if (row.cells[0]?.cellElement) {\r\n row.cells[0].cellElement.classList.remove('dx-datagrid-expand'); \r\n row.cells[0].cellElement.childNodes[0].classList.remove('dx-datagrid-group-closed');\r\n }\r\n }\r\n }\r\n\r\n OnGoToCompany(e) {\r\n const row = e?.row?.data;\r\n if (!row) return;\r\n \r\n this.Navigate([`/pages/company/${e.row.data.CompanyID}`], { OrganizationID: e.row.data.OrganizationID });\r\n }\r\n\r\n GetStatusColor(data) {\r\n switch(data.Status) {\r\n case this.Enums.EnumUploadStatuses.Success:\r\n case this.Enums.EnumUploadStatuses.FileExported:\r\n return 'green-cyan';\r\n case this.Enums.EnumUploadStatuses.Initiated:\r\n return 'olive';\r\n case this.Enums.EnumUploadStatuses.NoData:\r\n return 'light-green';\r\n case this.Enums.EnumUploadStatuses.Exception:\r\n return 'cinnabar';\r\n case this.Enums.EnumUploadStatuses.DataSent:\r\n return 'dark-cyan';\r\n case this.Enums.EnumUploadStatuses.BalanceMismatch:\r\n return 'base-color';\r\n case this.Enums.EnumUploadStatuses.BalanceNotExistsForDate:\r\n return 'hollywood';\r\n case this.Enums.EnumUploadStatuses.CompanyNotFound:\r\n return 'mango';\r\n case this.Enums.EnumUploadStatuses.AccountNotFound:\r\n return 'atomic-tangerine';\r\n }\r\n }\r\n\r\n protected override GetGridRowContextMenu(options?: any): ContextMenuElement[] {\r\n return [{\r\n text: this.RC('titleGoToCompany'),\r\n onClick: () => this.OnGoToCompany(options)\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 {{text}}\\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 { BalanceManualEditView } from './../views/balancemanualedit.view';\r\nexport class BalanceManualEditSaveParams extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'BalanceManualEditSaveParams';\r\n }\r\n \r\n public Balances: BalanceManualEditView[] = []; \r\n public BalanceDate: Date; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { Component } from '@angular/core';\r\nimport { Globals } from '@kraken/_globals';\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 } from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\nexport class State extends BaseState {\r\n ResetDateFrom: Date;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-reset-balances-dialog',\r\n templateUrl: './reset-balances-dialog.component.html',\r\n styleUrls: ['./reset-balances-dialog.component.scss']\r\n})\r\nexport class ResetBalancesDialogComponent extends BasePageComponent {\r\n\r\n get MaxDate() : Date {\r\n return Globals.Yesterday;\r\n }\r\n \r\n constructor(A: ServiceBagService) {\r\n super(A, 'ResetBalancesDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n\r\n OnOK() {\r\n this.CloseDialogWithSuccess(this.State.ResetDateFrom);\r\n }\r\n}","export default \"\\r\\n \\r\\n \\r\\n \\r\\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 ResetManualBalanceEntryParams extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ResetManualBalanceEntryParams';\r\n }\r\n \r\n public ResetFromDate: Date; \r\n public BookingAccountID: number; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { Component, ViewChild } from '@angular/core';\r\nimport { BalanceEndpoint } from '@kraken/_proxy/endpoints/balance.endpoint';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { BaseReportComponent, BaseReportState } from '../base-report/base-report.component';\r\nimport { FilterSettings } from '@kraken/components/filter/filter.component';\r\nimport { Globals } from '@kraken/_globals';\r\nimport { BalanceReportParams } from '@kraken/_proxy/params/balancereport.param';\r\nimport { ManualBalancesEntryGridComponent } from './manual-balances-entry-grid/manual-balances-entry-grid.component';\r\nimport { QuickFilterComponent, QuickFilterSettings } from '@kraken/components/quick-filter/quick-filter.component';\r\nimport { BalanceManualEditView } from '@kraken/_proxy/views/balancemanualedit.view';\r\nimport { BalanceManualEditSaveParams } from '@kraken/_proxy/params/balancemanualeditsave.param';\r\nimport { ResetBalancesDialogComponent } from './reset-balances-dialog/reset-balances-dialog.component';\r\nimport { ResetManualBalanceEntryParams } from '@kraken/_proxy/params/resetmanualbalanceentry.param';\r\n\r\nclass State extends BaseReportState {\r\n IsHideZeroBalances = false;\r\n Balances: BalanceManualEditView[] = [];\r\n UpdatedBalances: BalanceManualEditView[] = [];\r\n UpdatedBalancesMap: Map = new Map();\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-manual-balances-entry',\r\n templateUrl: './manual-balances-entry.component.html',\r\n styleUrls: ['./manual-balances-entry.component.scss']\r\n})\r\nexport class ManualBalancesEntryComponent extends BaseReportComponent{\r\n @ViewChild('reportGrid') reportGrid: ManualBalancesEntryGridComponent;\r\n @ViewChild('quickFilter') quickfilterComponent: QuickFilterComponent;\r\n @ViewChild(ResetBalancesDialogComponent) resetBalances: ResetBalancesDialogComponent;\r\n\r\n constructor(A: ServiceBagService, private balanceEndpoint: BalanceEndpoint, public screenService: ScreenService) {\r\n super(A, 'ManualBalancesEntryComponent', State);\r\n }\r\n\r\n protected OnLoadData() {\r\n if (!this.State.FilterValues.OrganizationID) {\r\n this.State.Balances = undefined;\r\n return;\r\n }\r\n\r\n this.State.IsLoading = true;\r\n this.State.UpdatedBalances\r\n const params = this.GetParams();\r\n params.IsHideZeroBalances = this.State.IsHideZeroBalances;\r\n params.IsManualBalancesEntry = true;\r\n\r\n this.ResetBalancesState();\r\n\r\n this.Do(\r\n this.balanceEndpoint.ListForBalanceManualEdit(params),\r\n false,\r\n (response) => {\r\n this.State.Balances = response.Entities;\r\n this.State.IsLoading = false;\r\n }\r\n );\r\n }\r\n\r\n protected override OnGetCustomQuickFilterSettings(): QuickFilterSettings {\r\n return {\r\n Company: { \r\n IsVisible: true,\r\n IsMultiple: true,\r\n Params: () => {\r\n return { IsManualBalancesEntry: true };\r\n }\r\n },\r\n Account: { \r\n IsVisible: true, \r\n IsMultiple: true,\r\n Params: () => {\r\n return { IsManualBalancesEntry: true };\r\n }\r\n },\r\n BookingAccount: { IsVisible: true, IsMultiple: true },\r\n Bank: { IsVisible: true, IsMultiple: true },\r\n IsDateVisible: true\r\n } as QuickFilterSettings;\r\n }\r\n\r\n protected OnGetCustomFilterSettings(): FilterSettings {\r\n return {\r\n Company: { \r\n IsVisible: true,\r\n IsMultiple: true,\r\n Params: () => {\r\n return { IsManualBalancesEntry: true };\r\n }\r\n },\r\n AccountGroup: { IsVisible: true, IsMultiple: true },\r\n Account: { \r\n IsVisible: true, \r\n IsMultiple: true,\r\n Params: () => {\r\n return { IsManualBalancesEntry: true };\r\n }\r\n },\r\n CurrencyFilter: { IsVisible: true, IsMultiple: true },\r\n BookingAccountSubtype: { IsVisible: true, IsMultiple: true },\r\n BookingAccount: { IsVisible: true, IsMultiple: true },\r\n Bank: { IsVisible: true, IsMultiple: true },\r\n IsDateVisible: true,\r\n MaxReportDate: Globals.Yesterday\r\n } as FilterSettings;\r\n }\r\n\r\n protected override OnResetFilterValues() {\r\n super.OnResetFilterValues();\r\n this.State.FilterValues.Date = Globals.Yesterday;\r\n }\r\n\r\n OnBalanceUpdated(balance: BalanceManualEditView) {\r\n if(this.State.UpdatedBalancesMap.has(balance.BookingAccountID)) {\r\n this.State.UpdatedBalances[this.State.UpdatedBalancesMap.get(balance.BookingAccountID)] = balance;\r\n } else {\r\n const idx = this.State.UpdatedBalances.push(balance) - 1;\r\n this.State.UpdatedBalancesMap.set(balance.BookingAccountID, idx);\r\n }\r\n }\r\n\r\n OnBalanceReset(balance: BalanceManualEditView) {\r\n this.resetBalances.ShowDialogShort(\r\n (resetDateFrom: Date) => {\r\n this.ResetBalance(balance, resetDateFrom);\r\n }\r\n );\r\n }\r\n\r\n SaveBalances() {\r\n this.State.IsLoading = true;\r\n const params = new BalanceManualEditSaveParams();\r\n params.Balances = this.State.UpdatedBalances.filter(b => b.BalanceActual - b.BalanceOriginal !== 0);\r\n params.BalanceDate = this.State.FilterValues.Date;\r\n\r\n this.Do(\r\n this.balanceEndpoint.SaveManualBalances(params),\r\n true,\r\n () => {\r\n this.OnLoadData();\r\n this.State.IsLoading = false;\r\n },\r\n () => {\r\n this.State.IsLoading = false;\r\n }\r\n );\r\n }\r\n\r\n private ResetBalance(balance: BalanceManualEditView, resetDateFrom: Date) {\r\n const params = new ResetManualBalanceEntryParams();\r\n params.BookingAccountID = balance.BookingAccountID;\r\n params.ResetFromDate = resetDateFrom;\r\n\r\n this.State.IsLoading = true;\r\n this.Do(\r\n this.balanceEndpoint.ResetManualBalance(params),\r\n true,\r\n () => {\r\n this.OnLoadData();\r\n this.State.IsLoading = false;\r\n },\r\n () => this.State.IsLoading = false\r\n );\r\n }\r\n\r\n private ResetBalancesState() {\r\n this.State.UpdatedBalances = [];\r\n this.State.UpdatedBalancesMap = new Map();\r\n }\r\n}","export default \"\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\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 { EnumBookingAccountSubtypes } from './../enums';\r\nexport class BalanceManualEditView extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'BalanceManualEditView';\r\n }\r\n \r\n public BookingAccountID: number; \r\n public DownloadID: number; \r\n public Date: Date; \r\n public BalanceNominal: number; \r\n public BalanceActual: number; \r\n public OrganizationID: number; \r\n public CompanyID: number; \r\n public CompanyName: string; \r\n public AccountID: number; \r\n public AccountName: string; \r\n public BookingAccountCode: string; \r\n public BookingAccountName: string; \r\n public BookingAccountFullName: string; \r\n public Subtype: EnumBookingAccountSubtypes; \r\n public Currency: string; \r\n public Editable: boolean; \r\n public BalanceOriginal: number; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { formatNumber } from '@angular/common';\r\nimport { Component, EventEmitter, Output } from '@angular/core';\r\nimport { BalanceManualEditView } from '@kraken/_proxy/views/balancemanualedit.view';\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 } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\n\r\nclass State extends BaseState {\r\n IsFlatMode: boolean;\r\n IsWindowMode: boolean;\r\n DisplayCurrency: string;\r\n Date: Date;\r\n GroupByCompany: boolean;\r\n GroupByBookingAccountSubtype: boolean;\r\n GroupByCurrency: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-manual-balances-entry-grid',\r\n templateUrl: './manual-balances-entry-grid.component.html',\r\n styleUrls: ['./manual-balances-entry-grid.component.scss']\r\n})\r\nexport class ManualBalancesEntryGridComponent extends BaseGridComponent {\r\n \r\n @Output() BalanceUpdated: EventEmitter = new EventEmitter();\r\n @Output() BalanceResetClick: EventEmitter = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService, public screenService: ScreenService) {\r\n super(A, 'ManualBalancesEntryGridComponent', BalanceManualEditView, State);\r\n\r\n this.BindHandler('GetGroupRowCaption');\r\n }\r\n\r\n protected override GetGridRowContextMenu(options?: any): ContextMenuElement[] {\r\n return [\r\n {\r\n text: this.RC('titleResetBalances'),\r\n visible: true,\r\n onClick: () => this.BalanceResetClick.emit(options?.data)\r\n }\r\n ];\r\n }\r\n\r\n CustomSortingFunction(rowData) {\r\n const column = this as any;\r\n if (rowData.Currency == 'ILS') return column.sortOrder == 'asc' ? 'aaa' : 'zzz';\r\n return rowData.Currency;\r\n }\r\n\r\n GetGroupRowCaption(e) {\r\n const summaryItem = e.summaryItems && e.summaryItems[0];\r\n if (!summaryItem || !summaryItem.value || !summaryItem.valueFormat) return e.displayValue;\r\n const value = summaryItem.value;\r\n const currencyText = this.State.DisplayCurrency\r\n ? (this.LISTITEMX('Currencies', this.State.DisplayCurrency) as any).Symbol\r\n : '';\r\n return `${e.displayValue} (${formatNumber(value, summaryItem.valueFormat)} ${\r\n currencyText || e.displayValue\r\n })`;\r\n }\r\n\r\n OnEditorPreparing(e: any) {\r\n if (e.row.data && e.row.data.Editable === false) {\r\n e.cancel = true;\r\n e.allowEditing = false;\r\n }\r\n\r\n const { editorOptions, setValue } = e;\r\n editorOptions.onValueChanged = ({ value }) => {\r\n setValue(value);\r\n };\r\n }\r\n\r\n OnEditingStart(e: any) {\r\n if (e.data && e.data.Editable === false) {\r\n e.cancel = true;\r\n e.allowEditing = false;\r\n }\r\n }\r\n\r\n OnRowUpdated(e) {\r\n if(!e || !e.data || !(e.data as BalanceManualEditView)) {\r\n return;\r\n }\r\n this.BalanceUpdated.emit(e.data as BalanceManualEditView)\r\n }\r\n}","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n {{GetGroupRowCaption(data) | LookupList: LIST('BookingAccountSubTypes')}}\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n
\\r\\n {{GetGroupRowCaption(data)}}\\r\\n
\\r\\n\\r\\n
\";","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { DepositCategory } from '@kraken/_proxy/entities/depositcategory.entity';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { RowClickEvent } from 'devextreme/ui/data_grid';\r\n\r\n\r\n\r\n@Component({\r\n selector: 'app-base-category-grid',\r\n templateUrl: './base-category-grid.component.html'\r\n})\r\nexport class BaseCategoryGridComponent extends BaseGridComponent {\r\n @Input() IsShowGlobalCheckox: boolean = false;\r\n\r\n @Input() ShowActiveOnly: boolean;\r\n @Output() ShowActiveOnlyChange = new EventEmitter();\r\n\r\n @Input() IsLoadGlobal: boolean = false;\r\n @Output() IsLoadGlobalChange = new EventEmitter();\r\n \r\n @Output() OnRowClick = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'DepositGridComponent', DepositCategory, BaseState);\r\n }\r\n\r\n RowClick(e: RowClickEvent) {\r\n this.OnRowClick.emit(e);\r\n }\r\n\r\n OnToolbarPreparing(e) {\r\n if (this.IsShowGlobalCheckox) {\r\n e.toolbarOptions.items.unshift({\r\n location: 'after',\r\n widget: 'dxCheckBox',\r\n isCustom: true,\r\n options: {\r\n text: this.RC('lblShowGlobal'),\r\n value: this.IsLoadGlobal,\r\n onValueChanged: (e) => {\r\n this.IsLoadGlobalChange.emit(e.value);\r\n }\r\n }\r\n });\r\n }\r\n e.toolbarOptions.items.unshift({\r\n location: 'after',\r\n widget: 'dxCheckBox',\r\n isCustom: true,\r\n options: {\r\n text: this.RC('lblShowActiveOnly'),\r\n value: this.ShowActiveOnly,\r\n onValueChanged: (e) => {\r\n this.ShowActiveOnlyChange.emit(e.value);\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 {{cell.data.Organization.Name}}\\r\\n {{'lblGlobal' | RC:THIS}}\\r\\n
\\r\\n
\\r\\n \\r\\n
\";","import { Component } from '@angular/core';\r\nimport { DepositCategoryEndpoint } from '@kraken/_proxy/endpoints/depositcategory.endpoint';\r\nimport { DepositCategory } from '@kraken/_proxy/entities/depositcategory.entity';\r\nimport { AccessService } from '@kraken/services/access.service';\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 { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\nclass State extends BaseState {\r\n Tabs: any[];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-deposit-category',\r\n templateUrl: './deposit-category.component.html'\r\n})\r\nexport class DepositCategoryComponent extends BasePageCRUDComponent {\r\n constructor(A: ServiceBagService,\r\n private depositCategoryEndpoint: DepositCategoryEndpoint,\r\n public accessService: AccessService) {\r\n super(A, 'DepositCategoryComponent', DepositCategory, State, depositCategoryEndpoint, EnumPageDisplayModes.Window);\r\n }\r\n\r\n protected override OnInitComponent(): void {\r\n this.State.Tabs = this.LIST('TransactionCategoryTabs').slice(0, 1);\r\n }\r\n\r\n override OnEntitySaved() {\r\n this.NavigateBack();\r\n }\r\n\r\n override OnEntityNew() {\r\n this.Entity.IsActive = true;\r\n this.Entity.OrganizationID = this.QueryParams.OrganizationID;\r\n }\r\n\r\n override OnEntityInitObjectName() {\r\n return this.Entity && this.Entity.Name;\r\n }\r\n\r\n override OnInitContextMenus(): ContextMenuElement[] {\r\n if (this.IsAddMode || this.IsGlobal) return undefined;\r\n\r\n const menus: ContextMenuElement[] =\r\n [\r\n {\r\n text: this.RC('titleDelete'),\r\n visible: true,\r\n onClick: () => {\r\n this.OnDelete();\r\n }\r\n }\r\n ];\r\n\r\n return menus;\r\n }\r\n\r\n get IsGlobal() {\r\n return !(this.Entity.OrganizationID || this.accessService.IsSuperAdmin());\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\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 { 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 { DepositCategory } from '../../../_proxy/entities/depositcategory.entity';\r\nimport { DepositCategoryEndpoint } from '@kraken/_proxy/endpoints/depositcategory.endpoint';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { RowClickEvent } from 'devextreme/ui/data_grid';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { map } from 'rxjs';\r\nimport { DepositCategoryListParams } from '@kraken/_proxy/params/depositcategorylist.param';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-deposit-category-list',\r\n templateUrl: './deposit-category-list.component.html'\r\n})\r\nexport class DepositCategoryListComponent extends BasePageComponent {\r\n @Input() OrganizationID: number;\r\n @Input() ShowAsPage = true;\r\n @Input() ActiveOnly = true;\r\n @Input() IsShowGlobalCheckox: boolean = false;\r\n @Input() IsLoadGlobal = false;\r\n\r\n @Output() OnUpdateCount = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService, private endpoint: DepositCategoryEndpoint) {\r\n super(A, 'DepositCategoryListComponent', DepositCategory, BaseState);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity,\r\n ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n if (ExternalEntityType == DepositCategory) this.LoadDataSource();\r\n }\r\n\r\n public LoadDataSource() {\r\n const reqParams = new DepositCategoryListParams();\r\n reqParams.OrganizationID = this.OrganizationID;\r\n reqParams.LoadActive = this.ActiveOnly;\r\n this.DataSources['DepositCategories'] =\r\n new DataSourceCustomAction((options) => this.endpoint.ListEx(reqParams, null).pipe(map(x => {\r\n if (!this.IsLoadGlobal && this.OrganizationID) {\r\n x.Entities = x.Entities.filter(rec => !!(rec as DepositCategory).OrganizationID);\r\n }\r\n return x;\r\n })), null, (data) => {\r\n this.OnUpdateCount.emit(data.length);\r\n });\r\n }\r\n\r\n OnNavigate(e: RowClickEvent) {\r\n this.Navigate(['/pages/deposit-category', e.data.EntryID], { OrganizationID: this.OrganizationID }, true);\r\n }\r\n\r\n GetLinkParams() {\r\n return { OrganizationID: this.OrganizationID };\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\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 { DepositClassificationRule } from './../entities/depositclassificationrule.entity';\r\nimport { BaseClassificationRuleListParams } from './../params/baseclassificationrulelist.param';\r\nimport { ClassificationRuleMovePriorityParams } from './../params/classificationrulemovepriority.param';\r\n@Injectable()\r\nexport class DepositClassificationRuleEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"DepositClassificationRule\", api);}\r\n\t\r\n\r\n public ListEx(Params: BaseClassificationRuleListParams, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListEx', Params, options?.GetLoadOptions() );\r\n }\r\n\r\n public GetNextPossiblePriority() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetNextPossiblePriority', undefined );\r\n }\r\n\r\n public MovePriority(Params: ClassificationRuleMovePriorityParams) : Observable\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'MovePriority', Params, undefined );\r\n }\r\n}\r\n\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { DepositClassificationRuleEndpoint } from '@kraken/_proxy/endpoints/depositclassificationrule.endpoint';\r\nimport { DepositCategory } from '@kraken/_proxy/entities/depositcategory.entity';\r\nimport { DepositClassificationRule } from '@kraken/_proxy/entities/depositclassificationrule.entity';\r\nimport { ClassificationRuleMovePriorityParams } from '@kraken/_proxy/params/classificationrulemovepriority.param';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { RowClickEvent } from 'devextreme/ui/data_grid';\r\n\r\n\r\n\r\n@Component({\r\n selector: 'app-base-classification-rule-grid',\r\n templateUrl: './base-classification-rule-grid.component.html'\r\n})\r\nexport class BaseClassificationRuleGridComponent extends BaseGridComponent {\r\n @Input() IsShowGlobalCheckox: boolean = false;\r\n\r\n @Input() ShowActiveOnly: boolean;\r\n @Output() ShowActiveOnlyChange = new EventEmitter();\r\n\r\n @Input() IsLoadGlobal: boolean = false;\r\n @Output() IsLoadGlobalChange = new EventEmitter();\r\n \r\n @Output() OnRowClick = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService, private classificationRuleEndpoint: DepositClassificationRuleEndpoint) {\r\n super(A, 'DeploymentGridComponent', DepositClassificationRule, BaseState);\r\n }\r\n \r\n OnToolbarPreparing(e) {\r\n if (this.IsShowGlobalCheckox) {\r\n e.toolbarOptions.items.unshift({\r\n location: 'after',\r\n widget: 'dxCheckBox',\r\n isCustom: true,\r\n options: {\r\n text: this.RC('lblShowGlobal'),\r\n value: this.IsLoadGlobal,\r\n onValueChanged: (e) => {\r\n this.IsLoadGlobalChange.emit(e.value);\r\n }\r\n }\r\n });\r\n }\r\n e.toolbarOptions.items.unshift({\r\n location: 'after',\r\n widget: 'dxCheckBox',\r\n isCustom: true,\r\n options: {\r\n text: this.RC('lblShowActiveOnly'),\r\n value: this.ShowActiveOnly,\r\n onValueChanged: (e) => {\r\n this.ShowActiveOnlyChange.emit(e.value);\r\n }\r\n }\r\n });\r\n }\r\n\r\n RowClick(e: RowClickEvent) {\r\n this.OnRowClick.emit(e);\r\n }\r\n\r\n OnReorder = (e) => {\r\n const params = new ClassificationRuleMovePriorityParams();\r\n params.ClassificationRuleID = e.itemData.EntryID;\r\n params.NewPriority = e.component.getVisibleRows()[e.toIndex].data.Priority;\r\n\r\n this.Do(this.classificationRuleEndpoint.MovePriority(params), false, () => {\r\n this.NotifyEntitySaved(e.itemData, DepositClassificationRule);\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 {{cell.data.Organization.Name}}\\r\\n {{'lblGlobal' | 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 {{ line.FieldType | LookupList:LIST('ClassificarionRuleFieldTypes') }} -\\r\\n {{ line.MatchType | LookupList:LIST('ClassificarionRuleMatchTypes') }} -\\r\\n {{ line.MatchData }}\\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 { BaseParamsFilter } from './../entities/baseparamsfilter.entity';\r\nexport class BaseClassificationRuleListParams extends BaseParamsFilter {\r\n constructor() {\r\n super();\r\n this.TypeName = 'BaseClassificationRuleListParams';\r\n }\r\n \r\n public LoadGlobal: boolean; \r\n public CategoryID: number; \r\n\t\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, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DepositCategory } from '../../../_proxy/entities/depositcategory.entity';\r\nimport { DepositClassificationRuleEndpoint } from '@kraken/_proxy/endpoints/depositclassificationrule.endpoint';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { RowClickEvent } from 'devextreme/ui/data_grid';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { map } from 'rxjs';\r\nimport { BaseClassificationRuleListParams } from '@kraken/_proxy/params/baseclassificationrulelist.param';\r\nimport { DepositClassificationRule } from '@kraken/_proxy/entities/depositclassificationrule.entity';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-deposit-classification-rule-list',\r\n templateUrl: './deposit-classification-rule-list.component.html'\r\n})\r\nexport class DepositClassificationRuleListComponent extends BasePageComponent {\r\n @Input() OrganizationID: number;\r\n @Input() ShowAsPage = true;\r\n @Input() ActiveOnly = true;\r\n @Input() CategoryID: number;\r\n\r\n @Input() IsShowGlobalCheckox: boolean = false;\r\n @Input() IsLoadGlobal = false;\r\n @Input() LoadGlobal = true;\r\n\r\n @Output() OnUpdateCount = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService, private endpoint: DepositClassificationRuleEndpoint) {\r\n super(A, 'DepositClassificationRuleListComponent', DepositClassificationRule, BaseState);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity,\r\n ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n if (ExternalEntityType == DepositClassificationRule) this.LoadDataSource();\r\n }\r\n\r\n public LoadDataSource() {\r\n const reqParams = new BaseClassificationRuleListParams();\r\n reqParams.OrganizationID = this.OrganizationID;\r\n reqParams.LoadActive = this.ActiveOnly;\r\n reqParams.CategoryID = this.CategoryID;\r\n reqParams.LoadGlobal = this.LoadGlobal;\r\n this.DataSources['DepositClassificationRules'] =\r\n new DataSourceCustomAction((options) => this.endpoint.ListEx(reqParams, null).pipe(map(x => {\r\n if (!this.IsLoadGlobal && this.OrganizationID) {\r\n x.Entities = x.Entities.filter(rec => !!(rec as DepositClassificationRule).OrganizationID);\r\n }\r\n return x;\r\n })), null, (data) => {\r\n this.OnUpdateCount.emit(data.length);\r\n });\r\n }\r\n\r\n OnNavigate(e: RowClickEvent) {\r\n this.Navigate(['/pages/deposit-classification-rule', e.data.EntryID], { CategoryID: this.CategoryID }, true);\r\n }\r\n\r\n GetLinkParams() {\r\n return { OrganizationID: this.OrganizationID, CategoryID: this.CategoryID };\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\";","import { Component } from '@angular/core';\r\nimport { DepositCategoryEndpoint } from '@kraken/_proxy/endpoints/depositcategory.endpoint';\r\nimport { DepositClassificationRuleEndpoint } from '@kraken/_proxy/endpoints/depositclassificationrule.endpoint';\r\nimport { OrganizationEndpoint } from '@kraken/_proxy/endpoints/organization.endpoint';\r\nimport { DepositCategory } from '@kraken/_proxy/entities/depositcategory.entity';\r\nimport { DepositClassificationRule } from '@kraken/_proxy/entities/depositclassificationrule.entity';\r\nimport {\r\n EnumCategoryClassificationFieldType, EnumCategoryType,\r\n EnumClassificarionRuleMatchType, EnumMatchingRelationship\r\n} from '@kraken/_proxy/enums';\r\nimport { DepositCategoryListParams } from '@kraken/_proxy/params/depositcategorylist.param';\r\nimport { RecategorizeParams } from '@kraken/_proxy/params/recategorize.param';\r\nimport { AccessService } from '@kraken/services/access.service';\r\nimport { ContextMenuElement, ToolbarSettings } 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 { 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 { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\nclass State extends BaseState {\r\n IsLoading = false;\r\n Categories: DepositCategory[];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-deposit-category-classification-rule',\r\n templateUrl: './deposit-category-classification-rule.component.html',\r\n styleUrls: ['./category-classification-rule.component.scss']\r\n})\r\nexport class DepositCategoryClassificationRuleComponent\r\n extends BasePageCRUDComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private endpoint: DepositClassificationRuleEndpoint,\r\n private categoryEndpoint: DepositCategoryEndpoint,\r\n private organizationEndpoint: OrganizationEndpoint,\r\n public accessService: AccessService) {\r\n super(A, 'DepositClassificationRuleComponent', DepositClassificationRule, State, endpoint, EnumPageDisplayModes.Window);\r\n }\r\n\r\n override OnEntityNew() {\r\n this.Entity.IsActive = true;\r\n this.Entity.MatchingRelationship = EnumMatchingRelationship.And;\r\n this.Entity.OrganizationID = this.QueryParams.OrganizationID;\r\n if (this.QueryParams.CategoryID) {\r\n this.Entity.CategoryID = parseInt(this.QueryParams.CategoryID);\r\n }\r\n if (this.QueryParams.Name) {\r\n this.Entity.Lines.push({\r\n FieldType: EnumCategoryClassificationFieldType.Name,\r\n MatchType: EnumClassificarionRuleMatchType.Equal,\r\n MatchData: this.QueryParams.Name,\r\n EntryID: this.Entity.EntryID,\r\n LineID: 1\r\n });\r\n }\r\n this.Do(this.endpoint.GetNextPossiblePriority(), false, (response) => {\r\n this.Entity.Priority = response.Data;\r\n });\r\n this.LoadCategories();\r\n }\r\n\r\n override OnEntityLoaded() {\r\n this.LoadCategories();\r\n }\r\n\r\n override OnEntityInitObjectName() {\r\n return this.Entity && this.Entity.Name;\r\n }\r\n\r\n private LoadCategories() {\r\n const reqParams = new DepositCategoryListParams();\r\n reqParams.OrganizationID = this.Entity.OrganizationID;\r\n reqParams.LoadActive = true;\r\n\r\n this.DataSources['Categories'] = new DataSourceCustomAction(\r\n (options: DataLoadOptions) => this.categoryEndpoint.ListEx(reqParams, options), undefined, (data) => {\r\n if (data && !this.Entity.Name) {\r\n this.Entity.Name = data.find(x => x.EntryID == this.QueryParams.CategoryID)?.Name ?? this.QueryParams.NewCategoryName;\r\n }\r\n }\r\n );\r\n this.DS('Categories').Reload();\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 public OnCustomSave() {\r\n if (this.QueryParams.NewCategoryName) {\r\n const newCategory = new DepositCategory();\r\n newCategory.Name = this.QueryParams.NewCategoryName;\r\n newCategory.IsActive = true;\r\n newCategory.OrganizationID = this.Entity.OrganizationID;\r\n this.Do(this.categoryEndpoint.Save(newCategory), false, (res) => {\r\n this.Entity.CategoryID = res.Entity.EntryID;\r\n this.OnSave();\r\n });\r\n } else {\r\n this.OnSave();\r\n }\r\n }\r\n\r\n override OnEntitySaved() {\r\n if (this.QueryParams.NewCategoryName || this.QueryParams.CategoryID) {\r\n const params = new RecategorizeParams();\r\n params.OrganizationID = this.Entity.OrganizationID;\r\n params.CategoryType = EnumCategoryType.Deposit;\r\n this.State.IsLoading = true;\r\n this.Do(this.organizationEndpoint.Recategorize(params), false, () => {\r\n this.IsLoading = false;\r\n this.NotifyEntitySaved(null, DepositClassificationRule);\r\n this.NavigateBack();\r\n }, () => this.NavigateBack());\r\n } else {\r\n this.NavigateBack();\r\n }\r\n }\r\n\r\n public override OnIsDirtyDisabled() {\r\n return !!this.QueryParams.Name;\r\n }\r\n\r\n override OnInitContextMenus(): ContextMenuElement[] {\r\n if (this.IsAddMode || this.IsReadOnly) return undefined;\r\n\r\n const menus: ContextMenuElement[] =\r\n [\r\n {\r\n text: this.RC('titleDelete'),\r\n visible: true,\r\n onClick: () => {\r\n this.OnDelete();\r\n }\r\n }\r\n ];\r\n\r\n return menus;\r\n }\r\n\r\n get IsReadOnly() {\r\n return !(this.Entity.OrganizationID || this.accessService.IsSuperAdmin());\r\n }\r\n}","export default \"\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
{{ 'titleDateSelection' | RC:THIS }}
\\r\\n
{{ 'subtitleDateSelection' | 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
\";","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, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { StockCategory } from '../../../_proxy/entities/stockcategory.entity';\r\nimport { DepositCategoryEndpoint } from '@kraken/_proxy/endpoints/depositcategory.endpoint';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { RowClickEvent } from 'devextreme/ui/data_grid';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { map } from 'rxjs';\r\nimport { DepositCategoryListParams } from '@kraken/_proxy/params/depositcategorylist.param';\r\nimport { StockCategoryEndpoint } from '@kraken/_proxy/endpoints/stockcategory.endpoint';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-stock-category-list',\r\n templateUrl: './stock-category-list.component.html'\r\n})\r\nexport class StockCategoryListComponent extends BasePageComponent {\r\n\r\n @Input() OrganizationID: number;\r\n @Input() ShowAsPage = true;\r\n @Input() ActiveOnly = true;\r\n @Input() IsShowGlobalCheckox: boolean = false;\r\n @Input() IsLoadGlobal = false;\r\n\r\n @Output() OnUpdateCount = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService, private endpoint: StockCategoryEndpoint) {\r\n super(A, 'StockCategoryListComponent', StockCategory, BaseState);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity,\r\n ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n if (ExternalEntityType == StockCategory) this.LoadDataSource();\r\n }\r\n\r\n public LoadDataSource() {\r\n const reqParams = new DepositCategoryListParams();\r\n reqParams.OrganizationID = this.OrganizationID;\r\n reqParams.LoadActive = this.ActiveOnly;\r\n this.DataSources['StockCategories'] =\r\n new DataSourceCustomAction((options) => this.endpoint.ListEx(reqParams, null).pipe(map(x => {\r\n if (!this.IsLoadGlobal && this.OrganizationID) {\r\n x.Entities = x.Entities.filter(rec => !!(rec as StockCategory).OrganizationID);\r\n }\r\n return x;\r\n })), null, (data) => {\r\n this.OnUpdateCount.emit(data.length);\r\n });\r\n }\r\n\r\n OnNavigate(e: RowClickEvent) {\r\n this.Navigate(['/pages/stock-category', e.data.EntryID], { OrganizationID: this.OrganizationID }, true);\r\n }\r\n\r\n GetLinkParams() {\r\n return { OrganizationID: this.OrganizationID };\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\";","import { Component } from '@angular/core';\r\nimport { StockCategoryEndpoint } from '@kraken/_proxy/endpoints/stockcategory.endpoint';\r\nimport { StockCategory } from '@kraken/_proxy/entities/stockcategory.entity';\r\nimport { AccessService } from '@kraken/services/access.service';\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 { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\nclass State extends BaseState {\r\n Tabs: any[];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-stock-category',\r\n templateUrl: './stock-category.component.html'\r\n})\r\nexport class StockCategoryComponent extends BasePageCRUDComponent {\r\n constructor(A: ServiceBagService,\r\n private endpoint: StockCategoryEndpoint,\r\n public accessService: AccessService) {\r\n super(A, 'StockCategoryComponent', StockCategory, State, endpoint, EnumPageDisplayModes.Window);\r\n }\r\n\r\n protected override OnInitComponent(): void {\r\n this.State.Tabs = this.LIST('TransactionCategoryTabs').slice(0, 1);\r\n }\r\n\r\n override OnEntitySaved() {\r\n this.NavigateBack();\r\n }\r\n\r\n override OnEntityNew() {\r\n this.Entity.IsActive = true;\r\n this.Entity.OrganizationID = this.QueryParams.OrganizationID;\r\n }\r\n\r\n override OnEntityInitObjectName() {\r\n return this.Entity && this.Entity.Name;\r\n }\r\n\r\n override OnInitContextMenus(): ContextMenuElement[] {\r\n if (this.IsAddMode || this.IsGlobal) return undefined;\r\n\r\n const menus: ContextMenuElement[] =\r\n [\r\n {\r\n text: this.RC('titleDelete'),\r\n visible: true,\r\n onClick: () => {\r\n this.OnDelete();\r\n }\r\n }\r\n ];\r\n\r\n return menus;\r\n }\r\n\r\n get IsGlobal() {\r\n return !(this.Entity.OrganizationID || this.accessService.IsSuperAdmin());\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\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 { 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 { DepositCategory } from '../../../_proxy/entities/depositcategory.entity';\r\nimport { DepositCategoryEndpoint } from '@kraken/_proxy/endpoints/depositcategory.endpoint';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { RowClickEvent } from 'devextreme/ui/data_grid';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { map } from 'rxjs';\r\nimport { DepositCategoryListParams } from '@kraken/_proxy/params/depositcategorylist.param';\r\nimport { LoanCategory } from '@kraken/_proxy/entities/loancategory.entity';\r\nimport { LoanCategoryEndpoint } from '@kraken/_proxy/endpoints/loancategory.endpoint';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-loan-category-list',\r\n templateUrl: './loan-category-list.component.html'\r\n})\r\nexport class LoanCategoryListComponent extends BasePageComponent {\r\n\r\n @Input() OrganizationID: number;\r\n @Input() ShowAsPage = true;\r\n @Input() ActiveOnly = true;\r\n @Input() IsShowGlobalCheckox: boolean = false;\r\n @Input() IsLoadGlobal = false;\r\n\r\n @Output() OnUpdateCount = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService, private endpoint: LoanCategoryEndpoint) {\r\n super(A, 'LoanCategoryListComponent', DepositCategory, BaseState);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity,\r\n ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n if (ExternalEntityType == LoanCategory) this.LoadDataSource();\r\n }\r\n\r\n public LoadDataSource() {\r\n const reqParams = new DepositCategoryListParams();\r\n reqParams.OrganizationID = this.OrganizationID;\r\n reqParams.LoadActive = this.ActiveOnly;\r\n this.DataSources['LoanCategories'] =\r\n new DataSourceCustomAction((options) => this.endpoint.ListEx(reqParams, null).pipe(map(x => {\r\n if (!this.IsLoadGlobal && this.OrganizationID) {\r\n x.Entities = x.Entities.filter(rec => !!(rec as LoanCategory).OrganizationID);\r\n }\r\n return x;\r\n })), null, (data) => {\r\n this.OnUpdateCount.emit(data.length);\r\n });\r\n }\r\n\r\n OnNavigate(e: RowClickEvent) {\r\n this.Navigate(['/pages/loan-category', e.data.EntryID], { OrganizationID: this.OrganizationID }, true);\r\n }\r\n\r\n GetLinkParams() {\r\n return { OrganizationID: this.OrganizationID };\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\";","import { Component } from '@angular/core';\r\nimport { LoanCategoryEndpoint } from '@kraken/_proxy/endpoints/loancategory.endpoint';\r\nimport { LoanCategory } from '@kraken/_proxy/entities/loancategory.entity';\r\nimport { AccessService } from '@kraken/services/access.service';\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 { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\nclass State extends BaseState {\r\n Tabs: any[];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-loan-category',\r\n templateUrl: './loan-category.component.html'\r\n})\r\nexport class LoanCategoryComponent extends BasePageCRUDComponent {\r\n constructor(A: ServiceBagService,\r\n private endpoint: LoanCategoryEndpoint,\r\n public accessService: AccessService) {\r\n super(A, 'LoanCategoryComponent', LoanCategory, State, endpoint, EnumPageDisplayModes.Window);\r\n }\r\n\r\n protected override OnInitComponent(): void {\r\n this.State.Tabs = this.LIST('TransactionCategoryTabs').slice(0, 1);\r\n }\r\n\r\n override OnEntitySaved() {\r\n this.NavigateBack();\r\n }\r\n\r\n override OnEntityNew() {\r\n this.Entity.IsActive = true;\r\n this.Entity.OrganizationID = this.QueryParams.OrganizationID;\r\n }\r\n\r\n override OnEntityInitObjectName() {\r\n return this.Entity && this.Entity.Name;\r\n }\r\n\r\n override OnInitContextMenus(): ContextMenuElement[] {\r\n if (this.IsAddMode || this.IsGlobal) return undefined;\r\n\r\n const menus: ContextMenuElement[] =\r\n [\r\n {\r\n text: this.RC('titleDelete'),\r\n visible: true,\r\n onClick: () => {\r\n this.OnDelete();\r\n }\r\n }\r\n ];\r\n\r\n return menus;\r\n }\r\n\r\n get IsGlobal() {\r\n return !(this.Entity.OrganizationID || this.accessService.IsSuperAdmin());\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\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 { 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 { DepositCategory } from '../../../_proxy/entities/depositcategory.entity';\r\nimport { DepositCategoryEndpoint } from '@kraken/_proxy/endpoints/depositcategory.endpoint';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { RowClickEvent } from 'devextreme/ui/data_grid';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { map } from 'rxjs';\r\nimport { DepositCategoryListParams } from '@kraken/_proxy/params/depositcategorylist.param';\r\nimport { GuaranteeCategory } from '@kraken/_proxy/entities/guaranteecategory.entity';\r\nimport { GuaranteeCategoryEndpoint } from '@kraken/_proxy/endpoints/guaranteecategory.endpoint';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-guarantee-category-list',\r\n templateUrl: './guarantee-category-list.component.html'\r\n})\r\nexport class GuaranteeCategoryListComponent extends BasePageComponent {\r\n\r\n @Input() OrganizationID: number;\r\n @Input() ShowAsPage = true;\r\n @Input() ActiveOnly = true;\r\n @Input() IsShowGlobalCheckox: boolean = false;\r\n @Input() IsLoadGlobal = false;\r\n\r\n @Output() OnUpdateCount = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService, private endpoint: GuaranteeCategoryEndpoint) {\r\n super(A, 'GuaranteeCategoryListComponent', GuaranteeCategory, BaseState);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity,\r\n ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n if (ExternalEntityType == GuaranteeCategory) this.LoadDataSource();\r\n }\r\n\r\n public LoadDataSource() {\r\n const reqParams = new DepositCategoryListParams();\r\n reqParams.OrganizationID = this.OrganizationID;\r\n reqParams.LoadActive = this.ActiveOnly;\r\n this.DataSources['GuaranteeCategories'] =\r\n new DataSourceCustomAction((options) => this.endpoint.ListEx(reqParams, null).pipe(map(x => {\r\n if (!this.IsLoadGlobal && this.OrganizationID) {\r\n x.Entities = x.Entities.filter(rec => !!(rec as GuaranteeCategory).OrganizationID);\r\n }\r\n return x;\r\n })), null, (data) => {\r\n this.OnUpdateCount.emit(data.length);\r\n });\r\n }\r\n\r\n OnNavigate(e: RowClickEvent) {\r\n this.Navigate(['/pages/guarantee-category', e.data.EntryID], { OrganizationID: this.OrganizationID }, true);\r\n }\r\n\r\n GetLinkParams() {\r\n return { OrganizationID: this.OrganizationID };\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\";","import { Component } from '@angular/core';\r\nimport { DepositCategoryEndpoint } from '@kraken/_proxy/endpoints/depositcategory.endpoint';\r\nimport { GuaranteeCategoryEndpoint } from '@kraken/_proxy/endpoints/guaranteecategory.endpoint';\r\nimport { GuaranteeCategory } from '@kraken/_proxy/entities/guaranteecategory.entity';\r\nimport { AccessService } from '@kraken/services/access.service';\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 { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\nclass State extends BaseState {\r\n Tabs: any[];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-guarantee-category',\r\n templateUrl: './guarantee-category.component.html'\r\n})\r\nexport class GuaranteeCategoryComponent extends BasePageCRUDComponent {\r\n constructor(A: ServiceBagService,\r\n private endpoint: GuaranteeCategoryEndpoint,\r\n public accessService: AccessService) {\r\n super(A, 'GuaranteeCategoryComponent', GuaranteeCategory, State, endpoint, EnumPageDisplayModes.Window);\r\n }\r\n\r\n protected override OnInitComponent(): void {\r\n this.State.Tabs = this.LIST('TransactionCategoryTabs').slice(0, 1);\r\n }\r\n\r\n override OnEntitySaved() {\r\n this.NavigateBack();\r\n }\r\n\r\n override OnEntityNew() {\r\n this.Entity.IsActive = true;\r\n this.Entity.OrganizationID = this.QueryParams.OrganizationID;\r\n }\r\n\r\n override OnEntityInitObjectName() {\r\n return this.Entity && this.Entity.Name;\r\n }\r\n \r\n override OnInitContextMenus(): ContextMenuElement[] {\r\n if (this.IsAddMode || this.IsGlobal) return undefined;\r\n\r\n const menus: ContextMenuElement[] =\r\n [\r\n {\r\n text: this.RC('titleDelete'),\r\n visible: true,\r\n onClick: () => {\r\n this.OnDelete();\r\n }\r\n }\r\n ];\r\n\r\n return menus;\r\n }\r\n\r\n get IsGlobal() {\r\n return !(this.Entity.OrganizationID || this.accessService.IsSuperAdmin());\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\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 { StockClassificationRule } from './../entities/stockclassificationrule.entity';\r\nimport { BaseClassificationRuleListParams } from './../params/baseclassificationrulelist.param';\r\nimport { ClassificationRuleMovePriorityParams } from './../params/classificationrulemovepriority.param';\r\n@Injectable()\r\nexport class StockClassificationRuleEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"StockClassificationRule\", api);}\r\n\t\r\n\r\n public ListEx(Params: BaseClassificationRuleListParams, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListEx', Params, options?.GetLoadOptions() );\r\n }\r\n\r\n public GetNextPossiblePriority() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetNextPossiblePriority', undefined );\r\n }\r\n\r\n public MovePriority(Params: ClassificationRuleMovePriorityParams) : Observable\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'MovePriority', Params, undefined );\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, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { StockClassificationRuleEndpoint } from '@kraken/_proxy/endpoints/stockclassificationrule.endpoint';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { RowClickEvent } from 'devextreme/ui/data_grid';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { map } from 'rxjs';\r\nimport { BaseClassificationRuleListParams } from '@kraken/_proxy/params/baseclassificationrulelist.param';\r\nimport { StockClassificationRule } from '@kraken/_proxy/entities/stockclassificationrule.entity';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-stock-classification-rule-list',\r\n templateUrl: './stock-classification-rule-list.component.html'\r\n})\r\nexport class StockClassificationRuleListComponent extends BasePageComponent {\r\n @Input() OrganizationID: number;\r\n @Input() ShowAsPage = true;\r\n @Input() ActiveOnly = true;\r\n @Input() CategoryID: number;\r\n\r\n @Input() IsShowGlobalCheckox: boolean = false;\r\n @Input() IsLoadGlobal = false;\r\n @Input() LoadGlobal = true;\r\n\r\n @Output() OnUpdateCount = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService, private endpoint: StockClassificationRuleEndpoint) {\r\n super(A, 'StockClassificationRuleListComponent', StockClassificationRule, BaseState);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity,\r\n ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n if (ExternalEntityType == StockClassificationRule) this.LoadDataSource();\r\n }\r\n\r\n public LoadDataSource() {\r\n const reqParams = new BaseClassificationRuleListParams();\r\n reqParams.OrganizationID = this.OrganizationID;\r\n reqParams.LoadActive = this.ActiveOnly;\r\n reqParams.CategoryID = this.CategoryID;\r\n reqParams.LoadGlobal = this.LoadGlobal;\r\n this.DataSources['StockClassificationRules'] =\r\n new DataSourceCustomAction((options) => this.endpoint.ListEx(reqParams, null).pipe(map(x => {\r\n if (!this.IsLoadGlobal && this.OrganizationID) {\r\n x.Entities = x.Entities.filter(rec => !!(rec as StockClassificationRule).OrganizationID);\r\n }\r\n return x;\r\n })), null, (data) => {\r\n this.OnUpdateCount.emit(data.length);\r\n });\r\n }\r\n\r\n OnNavigate(e: RowClickEvent) {\r\n this.Navigate(['/pages/stock-classification-rule', e.data.EntryID], { CategoryID: this.CategoryID }, true);\r\n }\r\n\r\n GetLinkParams() {\r\n return { OrganizationID: this.OrganizationID, CategoryID: this.CategoryID };\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\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 { LoanClassificationRule } from './../entities/loanclassificationrule.entity';\r\nimport { BaseClassificationRuleListParams } from './../params/baseclassificationrulelist.param';\r\nimport { ClassificationRuleMovePriorityParams } from './../params/classificationrulemovepriority.param';\r\n@Injectable()\r\nexport class LoanClassificationRuleEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"LoanClassificationRule\", api);}\r\n\t\r\n\r\n public ListEx(Params: BaseClassificationRuleListParams, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListEx', Params, options?.GetLoadOptions() );\r\n }\r\n\r\n public GetNextPossiblePriority() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetNextPossiblePriority', undefined );\r\n }\r\n\r\n public MovePriority(Params: ClassificationRuleMovePriorityParams) : Observable\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'MovePriority', Params, undefined );\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, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { LoanClassificationRuleEndpoint } from '@kraken/_proxy/endpoints/loanclassificationrule.endpoint';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { RowClickEvent } from 'devextreme/ui/data_grid';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { map } from 'rxjs';\r\nimport { BaseClassificationRuleListParams } from '@kraken/_proxy/params/baseclassificationrulelist.param';\r\nimport { LoanClassificationRule } from '@kraken/_proxy/entities/loanclassificationrule.entity';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-loan-classification-rule-list',\r\n templateUrl: './loan-classification-rule-list.component.html'\r\n})\r\nexport class LoanClassificationRuleListComponent extends BasePageComponent {\r\n @Input() OrganizationID: number;\r\n @Input() ShowAsPage = true;\r\n @Input() ActiveOnly = true;\r\n @Input() CategoryID: number;\r\n\r\n @Input() IsShowGlobalCheckox: boolean = false;\r\n @Input() IsLoadGlobal = false;\r\n @Input() LoadGlobal = true;\r\n\r\n @Output() OnUpdateCount = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService, private endpoint: LoanClassificationRuleEndpoint) {\r\n super(A, 'LoanClassificationRuleListComponent', LoanClassificationRule, BaseState);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity,\r\n ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n if (ExternalEntityType == LoanClassificationRule) this.LoadDataSource();\r\n }\r\n\r\n public LoadDataSource() {\r\n const reqParams = new BaseClassificationRuleListParams();\r\n reqParams.OrganizationID = this.OrganizationID;\r\n reqParams.LoadActive = this.ActiveOnly;\r\n reqParams.CategoryID = this.CategoryID;\r\n reqParams.LoadGlobal = this.LoadGlobal;\r\n this.DataSources['LoanClassificationRules'] =\r\n new DataSourceCustomAction((options) => this.endpoint.ListEx(reqParams, null).pipe(map(x => {\r\n if (!this.IsLoadGlobal && this.OrganizationID) {\r\n x.Entities = x.Entities.filter(rec => !!(rec as LoanClassificationRule).OrganizationID);\r\n }\r\n return x;\r\n })), null, (data) => {\r\n this.OnUpdateCount.emit(data.length);\r\n });\r\n }\r\n\r\n OnNavigate(e: RowClickEvent) {\r\n this.Navigate(['/pages/loan-classification-rule', e.data.EntryID], { CategoryID: this.CategoryID }, true);\r\n }\r\n\r\n GetLinkParams() {\r\n return { OrganizationID: this.OrganizationID, CategoryID: this.CategoryID };\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\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 { GuaranteeClassificationRule } from './../entities/guaranteeclassificationrule.entity';\r\nimport { BaseClassificationRuleListParams } from './../params/baseclassificationrulelist.param';\r\nimport { ClassificationRuleMovePriorityParams } from './../params/classificationrulemovepriority.param';\r\n@Injectable()\r\nexport class GuaranteeClassificationRuleEndpoint extends BaseEndpointCRUD\r\n{\r\n constructor(@Inject(EMPTY_STRING_TOKEN)name: string, api: APIGatewayService) {super(name || \"GuaranteeClassificationRule\", api);}\r\n\t\r\n\r\n public ListEx(Params: BaseClassificationRuleListParams, options: DataLoadOptions) : Observable>\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ListEx', Params, options?.GetLoadOptions() );\r\n }\r\n\r\n public GetNextPossiblePriority() : Observable>\r\n\t{\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetNextPossiblePriority', undefined );\r\n }\r\n\r\n public MovePriority(Params: ClassificationRuleMovePriorityParams) : Observable\r\n\t{\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'MovePriority', Params, undefined );\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, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GuaranteeClassificationRule } from '../../../_proxy/entities/guaranteeclassificationrule.entity';\r\nimport { GuaranteeClassificationRuleEndpoint } from '@kraken/_proxy/endpoints/guaranteeclassificationrule.endpoint';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { RowClickEvent } from 'devextreme/ui/data_grid';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { map } from 'rxjs';\r\nimport { BaseClassificationRuleListParams } from '@kraken/_proxy/params/baseclassificationrulelist.param';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-guarantee-classification-rule-list',\r\n templateUrl: './guarantee-classification-rule-list.component.html'\r\n})\r\nexport class GuaranteeClassificationRuleListComponent extends BasePageComponent {\r\n @Input() OrganizationID: number;\r\n @Input() ShowAsPage = true;\r\n @Input() ActiveOnly = true;\r\n @Input() CategoryID: number;\r\n\r\n @Input() IsShowGlobalCheckox: boolean = false;\r\n @Input() IsLoadGlobal = false;\r\n @Input() LoadGlobal = true;\r\n\r\n @Output() OnUpdateCount = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService, private endpoint: GuaranteeClassificationRuleEndpoint) {\r\n super(A, 'GuaranteeClassificationRuleListComponent', GuaranteeClassificationRule, BaseState);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity,\r\n ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n if (ExternalEntityType == GuaranteeClassificationRule) this.LoadDataSource();\r\n }\r\n\r\n public LoadDataSource() {\r\n const reqParams = new BaseClassificationRuleListParams();\r\n reqParams.OrganizationID = this.OrganizationID;\r\n reqParams.LoadActive = this.ActiveOnly;\r\n reqParams.CategoryID = this.CategoryID;\r\n reqParams.LoadGlobal = this.LoadGlobal;\r\n this.DataSources['GuaranteeClassificationRules'] =\r\n new DataSourceCustomAction((options) => this.endpoint.ListEx(reqParams, null).pipe(map(x => {\r\n if (!this.IsLoadGlobal && this.OrganizationID) {\r\n x.Entities = x.Entities.filter(rec => !!(rec as GuaranteeClassificationRule).OrganizationID);\r\n }\r\n return x;\r\n })), null, (data) => {\r\n this.OnUpdateCount.emit(data.length);\r\n });\r\n }\r\n\r\n OnNavigate(e: RowClickEvent) {\r\n this.Navigate(['/pages/guarantee-classification-rule', e.data.EntryID], { CategoryID: this.CategoryID }, true);\r\n }\r\n\r\n GetLinkParams() {\r\n return { OrganizationID: this.OrganizationID, CategoryID: this.CategoryID };\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\";","import { Component } from '@angular/core';\r\nimport { LoanCategoryEndpoint } from '@kraken/_proxy/endpoints/loancategory.endpoint';\r\nimport { LoanClassificationRuleEndpoint } from '@kraken/_proxy/endpoints/loanclassificationrule.endpoint';\r\nimport { OrganizationEndpoint } from '@kraken/_proxy/endpoints/organization.endpoint';\r\nimport { LoanCategory } from '@kraken/_proxy/entities/loancategory.entity';\r\nimport { LoanClassificationRule } from '@kraken/_proxy/entities/loanclassificationrule.entity';\r\nimport { EnumCategoryClassificationFieldType, EnumCategoryType, EnumClassificarionRuleMatchType } from '@kraken/_proxy/enums';\r\nimport { DepositCategoryListParams } from '@kraken/_proxy/params/depositcategorylist.param';\r\nimport { RecategorizeParams } from '@kraken/_proxy/params/recategorize.param';\r\nimport { AccessService } from '@kraken/services/access.service';\r\nimport { ContextMenuElement, ToolbarSettings } 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 { 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 { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\nclass State extends BaseState {\r\n IsLoading = false;\r\n Categories: LoanCategory[];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-loan-category-classification-rule',\r\n templateUrl: './loan-category-classification-rule.component.html',\r\n styleUrls: ['./category-classification-rule.component.scss']\r\n})\r\nexport class LoanCategoryClassificationRuleComponent\r\n extends BasePageCRUDComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private endpoint: LoanClassificationRuleEndpoint,\r\n private categoryEndpoint: LoanCategoryEndpoint,\r\n private organizationEndpoint: OrganizationEndpoint,\r\n public accessService: AccessService) {\r\n super(A, 'LoanClassificationRuleComponent', LoanClassificationRule, State, endpoint, EnumPageDisplayModes.Window);\r\n }\r\n\r\n override OnEntityNew() {\r\n this.Entity.IsActive = true;\r\n this.Entity.OrganizationID = this.QueryParams.OrganizationID;\r\n if (this.QueryParams.CategoryID) {\r\n this.Entity.CategoryID = parseInt(this.QueryParams.CategoryID);\r\n }\r\n\r\n if (this.QueryParams.Name) {\r\n this.Entity.Lines.push({\r\n FieldType: EnumCategoryClassificationFieldType.Name,\r\n MatchType: EnumClassificarionRuleMatchType.Equal,\r\n MatchData: this.QueryParams.Name,\r\n EntryID: this.Entity.EntryID,\r\n LineID: 1\r\n });\r\n }\r\n this.Do(this.endpoint.GetNextPossiblePriority(), false, (response) => {\r\n this.Entity.Priority = response.Data;\r\n });\r\n this.LoadCategories();\r\n }\r\n\r\n override OnEntityLoaded() {\r\n this.LoadCategories();\r\n }\r\n\r\n override OnEntityInitObjectName() {\r\n return this.Entity && this.Entity.Name;\r\n }\r\n\r\n private LoadCategories() {\r\n const reqParams = new DepositCategoryListParams();\r\n reqParams.OrganizationID = this.Entity.OrganizationID;\r\n reqParams.LoadActive = true;\r\n\r\n this.DataSources['Categories'] = new DataSourceCustomAction(\r\n (options: DataLoadOptions) => this.categoryEndpoint.ListEx(reqParams, options), undefined, (data) => {\r\n if (data && !this.Entity.Name) {\r\n this.Entity.Name = data.find(x => x.EntryID == this.QueryParams.CategoryID)?.Name ?? this.QueryParams.NewCategoryName;\r\n }\r\n }\r\n );\r\n this.DS('Categories').Reload();\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 public OnCustomSave() {\r\n if (this.QueryParams.NewCategoryName) {\r\n const newCategory = new LoanCategory();\r\n newCategory.Name = this.QueryParams.NewCategoryName;\r\n newCategory.IsActive = true;\r\n newCategory.OrganizationID = this.Entity.OrganizationID;\r\n this.Do(this.categoryEndpoint.Save(newCategory), false, (res) => {\r\n this.Entity.CategoryID = res.Entity.EntryID;\r\n this.OnSave();\r\n });\r\n } else {\r\n this.OnSave();\r\n }\r\n }\r\n\r\n override OnEntitySaved() {\r\n if (this.QueryParams.NewCategoryName || this.QueryParams.CategoryID) {\r\n const params = new RecategorizeParams();\r\n params.OrganizationID = this.Entity.OrganizationID;\r\n params.CategoryType = EnumCategoryType.Loan;\r\n this.State.IsLoading = true;\r\n this.Do(this.organizationEndpoint.Recategorize(params), false, () => {\r\n this.IsLoading = false;\r\n this.NotifyEntitySaved(null, LoanClassificationRule);\r\n this.NavigateBack();\r\n }, () => this.NavigateBack());\r\n } else {\r\n this.NavigateBack();\r\n }\r\n }\r\n\r\n public override OnIsDirtyDisabled() {\r\n return !!this.QueryParams.Name;\r\n }\r\n\r\n override OnInitContextMenus(): ContextMenuElement[] {\r\n if (this.IsAddMode || this.IsReadOnly) return undefined;\r\n\r\n const menus: ContextMenuElement[] =\r\n [\r\n {\r\n text: this.RC('titleDelete'),\r\n visible: true,\r\n onClick: () => {\r\n this.OnDelete();\r\n }\r\n }\r\n ];\r\n\r\n return menus;\r\n }\r\n\r\n get IsReadOnly() {\r\n return !(this.Entity.OrganizationID || this.accessService.IsSuperAdmin());\r\n }\r\n}","export default \"\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
{{ 'titleDateSelection' | RC:THIS }}
\\r\\n
{{ 'subtitleDateSelection' | 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
\";","import { Component } from '@angular/core';\r\nimport { OrganizationEndpoint } from '@kraken/_proxy/endpoints/organization.endpoint';\r\nimport { StockCategoryEndpoint } from '@kraken/_proxy/endpoints/stockcategory.endpoint';\r\nimport { StockClassificationRuleEndpoint } from '@kraken/_proxy/endpoints/stockclassificationrule.endpoint';\r\nimport { StockCategory } from '@kraken/_proxy/entities/stockcategory.entity';\r\nimport { StockClassificationRule } from '@kraken/_proxy/entities/stockclassificationrule.entity';\r\nimport { EnumCategoryClassificationFieldType, EnumCategoryType, EnumClassificarionRuleMatchType } from '@kraken/_proxy/enums';\r\nimport { DepositCategoryListParams } from '@kraken/_proxy/params/depositcategorylist.param';\r\nimport { RecategorizeParams } from '@kraken/_proxy/params/recategorize.param';\r\nimport { AccessService } from '@kraken/services/access.service';\r\nimport { ContextMenuElement, ToolbarSettings } 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 { 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 { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\nclass State extends BaseState {\r\n IsLoading = false;\r\n Categories: StockCategory[];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-stock-category-classification-rule',\r\n templateUrl: './stock-category-classification-rule.component.html',\r\n styleUrls: ['./category-classification-rule.component.scss']\r\n})\r\nexport class StockCategoryClassificationRuleComponent\r\n extends BasePageCRUDComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private endpoint: StockClassificationRuleEndpoint,\r\n private categoryEndpoint: StockCategoryEndpoint,\r\n private organizationEndpoint: OrganizationEndpoint,\r\n public accessService: AccessService) {\r\n super(A, 'StockClassificationRuleComponent', StockClassificationRule, State, endpoint, EnumPageDisplayModes.Window);\r\n }\r\n\r\n override OnEntityNew() {\r\n this.Entity.IsActive = true;\r\n this.Entity.OrganizationID = this.QueryParams.OrganizationID;\r\n if (this.QueryParams.CategoryID) {\r\n this.Entity.CategoryID = parseInt(this.QueryParams.CategoryID);\r\n }\r\n\r\n if (this.QueryParams.Name) {\r\n this.Entity.Lines.push({\r\n FieldType: EnumCategoryClassificationFieldType.Name,\r\n MatchType: EnumClassificarionRuleMatchType.Equal,\r\n MatchData: this.QueryParams.Name,\r\n EntryID: this.Entity.EntryID,\r\n LineID: 1\r\n });\r\n }\r\n this.Do(this.endpoint.GetNextPossiblePriority(), false, (response) => {\r\n this.Entity.Priority = response.Data;\r\n });\r\n this.LoadCategories();\r\n }\r\n\r\n override OnEntityLoaded() {\r\n this.LoadCategories();\r\n }\r\n\r\n override OnEntityInitObjectName() {\r\n return this.Entity && this.Entity.Name;\r\n }\r\n\r\n private LoadCategories() {\r\n const reqParams = new DepositCategoryListParams();\r\n reqParams.OrganizationID = this.Entity.OrganizationID;\r\n reqParams.LoadActive = true;\r\n\r\n this.DataSources['Categories'] = new DataSourceCustomAction(\r\n (options: DataLoadOptions) => this.categoryEndpoint.ListEx(reqParams, options), undefined, (data) => {\r\n if (data && !this.Entity.Name) {\r\n this.Entity.Name = data.find(x => x.EntryID == this.QueryParams.CategoryID)?.Name ?? this.QueryParams.NewCategoryName;\r\n }\r\n }\r\n );\r\n this.DS('Categories').Reload();\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 public OnCustomSave() {\r\n if (this.QueryParams.NewCategoryName) {\r\n const newCategory = new StockCategory();\r\n newCategory.Name = this.QueryParams.NewCategoryName;\r\n newCategory.IsActive = true;\r\n newCategory.OrganizationID = this.Entity.OrganizationID;\r\n this.Do(this.categoryEndpoint.Save(newCategory), false, (res) => {\r\n this.Entity.CategoryID = res.Entity.EntryID;\r\n this.OnSave();\r\n });\r\n } else {\r\n this.OnSave();\r\n }\r\n }\r\n\r\n override OnEntitySaved() {\r\n if (this.QueryParams.NewCategoryName || this.QueryParams.CategoryID) {\r\n const params = new RecategorizeParams();\r\n params.OrganizationID = this.Entity.OrganizationID;\r\n params.CategoryType = EnumCategoryType.Stock;\r\n this.State.IsLoading = true;\r\n this.Do(this.organizationEndpoint.Recategorize(params), false, () => {\r\n this.IsLoading = false;\r\n this.NotifyEntitySaved(null, StockClassificationRule);\r\n this.NavigateBack();\r\n }, () => this.NavigateBack());\r\n } else {\r\n this.NavigateBack();\r\n }\r\n }\r\n\r\n public override OnIsDirtyDisabled() {\r\n return !!this.QueryParams.Name;\r\n }\r\n\r\n override OnInitContextMenus(): ContextMenuElement[] {\r\n if (this.IsAddMode || this.IsReadOnly) return undefined;\r\n\r\n const menus: ContextMenuElement[] =\r\n [\r\n {\r\n text: this.RC('titleDelete'),\r\n visible: true,\r\n onClick: () => {\r\n this.OnDelete();\r\n }\r\n }\r\n ];\r\n\r\n return menus;\r\n }\r\n\r\n get IsReadOnly() {\r\n return !(this.Entity.OrganizationID || this.accessService.IsSuperAdmin());\r\n }\r\n}","export default \"\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\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 { GuaranteeCategoryEndpoint } from '@kraken/_proxy/endpoints/guaranteecategory.endpoint';\r\nimport { GuaranteeClassificationRuleEndpoint } from '@kraken/_proxy/endpoints/guaranteeclassificationrule.endpoint';\r\nimport { OrganizationEndpoint } from '@kraken/_proxy/endpoints/organization.endpoint';\r\nimport { GuaranteeCategory } from '@kraken/_proxy/entities/guaranteecategory.entity';\r\nimport { GuaranteeClassificationRule } from '@kraken/_proxy/entities/guaranteeclassificationrule.entity';\r\nimport { EnumCategoryClassificationFieldType, EnumCategoryType, EnumClassificarionRuleMatchType } from '@kraken/_proxy/enums';\r\nimport { DepositCategoryListParams } from '@kraken/_proxy/params/depositcategorylist.param';\r\nimport { RecategorizeParams } from '@kraken/_proxy/params/recategorize.param';\r\nimport { AccessService } from '@kraken/services/access.service';\r\nimport { ContextMenuElement, ToolbarSettings } 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 { 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 { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\nclass State extends BaseState {\r\n IsLoading = false;\r\n Categories: GuaranteeCategory[];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-guarantee-category-classification-rule',\r\n templateUrl: './guarantee-category-classification-rule.component.html',\r\n styleUrls: ['./category-classification-rule.component.scss']\r\n})\r\nexport class GuaranteeCategoryClassificationRuleComponent\r\n extends BasePageCRUDComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private endpoint: GuaranteeClassificationRuleEndpoint,\r\n private categoryEndpoint: GuaranteeCategoryEndpoint,\r\n private organizationEndpoint: OrganizationEndpoint,\r\n public accessService: AccessService) {\r\n super(A, 'GuaranteeClassificationRuleComponent', GuaranteeClassificationRule, State, endpoint, EnumPageDisplayModes.Window);\r\n }\r\n\r\n override OnEntityNew() {\r\n this.Entity.IsActive = true;\r\n this.Entity.OrganizationID = this.QueryParams.OrganizationID;\r\n if (this.QueryParams.CategoryID) {\r\n this.Entity.CategoryID = parseInt(this.QueryParams.CategoryID);\r\n }\r\n\r\n if (this.QueryParams.Name) {\r\n this.Entity.Lines.push({\r\n FieldType: EnumCategoryClassificationFieldType.Name,\r\n MatchType: EnumClassificarionRuleMatchType.Equal,\r\n MatchData: this.QueryParams.Name,\r\n EntryID: this.Entity.EntryID,\r\n LineID: 1\r\n });\r\n }\r\n this.Do(this.endpoint.GetNextPossiblePriority(), false, (response) => {\r\n this.Entity.Priority = response.Data;\r\n });\r\n this.LoadCategories();\r\n }\r\n\r\n\r\n override OnEntityLoaded() {\r\n this.LoadCategories();\r\n }\r\n\r\n override OnEntityInitObjectName() {\r\n return this.Entity && this.Entity.Name;\r\n }\r\n\r\n private LoadCategories() {\r\n const reqParams = new DepositCategoryListParams();\r\n reqParams.OrganizationID = this.Entity.OrganizationID;\r\n reqParams.LoadActive = true;\r\n\r\n this.DataSources['Categories'] = new DataSourceCustomAction(\r\n (options: DataLoadOptions) => this.categoryEndpoint.ListEx(reqParams, options), undefined, (data) => {\r\n if (data && !this.Entity.Name) {\r\n this.Entity.Name = data.find(x => x.EntryID == this.QueryParams.CategoryID)?.Name ?? this.QueryParams.NewCategoryName;\r\n }\r\n }\r\n );\r\n this.DS('Categories').Reload();\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 public OnCustomSave() {\r\n if (this.QueryParams.NewCategoryName) {\r\n const newCategory = new GuaranteeCategory();\r\n newCategory.Name = this.QueryParams.NewCategoryName;\r\n newCategory.IsActive = true;\r\n newCategory.OrganizationID = this.Entity.OrganizationID;\r\n this.Do(this.categoryEndpoint.Save(newCategory), false, (res) => {\r\n this.Entity.CategoryID = res.Entity.EntryID;\r\n this.OnSave();\r\n });\r\n } else {\r\n this.OnSave();\r\n }\r\n }\r\n\r\n override OnEntitySaved() {\r\n if (this.QueryParams.NewCategoryName || this.QueryParams.CategoryID) {\r\n const params = new RecategorizeParams();\r\n params.OrganizationID = this.Entity.OrganizationID;\r\n params.CategoryType = EnumCategoryType.Guarantee;\r\n this.State.IsLoading = true;\r\n this.Do(this.organizationEndpoint.Recategorize(params), false, () => {\r\n this.IsLoading = false;\r\n this.NotifyEntitySaved(null, GuaranteeClassificationRule);\r\n this.NavigateBack();\r\n }, () => this.NavigateBack());\r\n } else {\r\n this.NavigateBack();\r\n }\r\n }\r\n\r\n public override OnIsDirtyDisabled() {\r\n return !!this.QueryParams.Name;\r\n }\r\n\r\n override OnInitContextMenus(): ContextMenuElement[] {\r\n if (this.IsAddMode || this.IsReadOnly) return undefined;\r\n\r\n const menus: ContextMenuElement[] =\r\n [\r\n {\r\n text: this.RC('titleDelete'),\r\n visible: true,\r\n onClick: () => {\r\n this.OnDelete();\r\n }\r\n }\r\n ];\r\n\r\n return menus;\r\n }\r\n\r\n get IsReadOnly() {\r\n return !(this.Entity.OrganizationID || this.accessService.IsSuperAdmin());\r\n }\r\n}","export default \"\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
{{ 'titleDateSelection' | RC:THIS }}
\\r\\n
{{ 'subtitleDateSelection' | 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
\";","import { 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 { Component, Input } from '@angular/core';\r\nimport { TransactionCategory } from '../../../_proxy/entities/transactioncategory.entity';\r\nimport { AccessService } from '@kraken/services/access.service';\r\nimport { Globals } from '@kraken/_globals';\r\n\r\nclass State extends BaseState {\r\n SearchCategory: TransactionCategory;\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-balance-category-selector',\r\n templateUrl: './balance-category-selector.component.html',\r\n styleUrls: ['./balance-category-selector.component.scss']\r\n})\r\nexport class BalanceCategorySelectorComponent extends BaseComponent {\r\n\r\n @Input() Category: TransactionCategory;\r\n @Input() CategoryID: number;\r\n @Input() CategoryName: number;\r\n @Input() RecordName: string;\r\n @Input() CategoryType: string;\r\n\r\n\r\n private CategoriesItems: any[];\r\n @Input() set Categories(value: any[]) {\r\n this.State.SearchCategory = null;\r\n if (value) {\r\n this.CategoriesItems = value.filter(x => !x.OrganizationID || x.OrganizationID === Globals.OrganizationID);\r\n }\r\n }\r\n\r\n set searchKeyword(value: string) {\r\n if (value) {\r\n this.AddSearchCategory();\r\n\r\n this.State.SearchCategory.Name = value;\r\n\r\n if (this.CategoriesItems.some(x => x.Name === value && x.EntryID)) {\r\n this.RemoveSearchCategory();\r\n }\r\n } else if (this.State.SearchCategory) {\r\n this.RemoveSearchCategory();\r\n }\r\n\r\n }\r\n\r\n constructor(A: ServiceBagService,\r\n public accessService: AccessService) {\r\n super(A, 'BalanceCategorySelectorComponent', State);\r\n }\r\n\r\n GetText() {\r\n return this.CategoryName ? this.CategoryName : this.RC('lblUnknown');\r\n }\r\n\r\n OnItemClick(e) {\r\n if (!e.itemData) return;\r\n\r\n const params = {\r\n CategoryID: null,\r\n NewCategoryName: null,\r\n Name: this.RecordName,\r\n OrganizationID: Globals.OrganizationID\r\n };\r\n\r\n if (e.itemData.EntryID) {\r\n params.CategoryID = e.itemData.EntryID;\r\n } else {\r\n params.NewCategoryName = e.itemData.Name;\r\n }\r\n\r\n this.Navigate([`/pages/${this.CategoryType}-classification-rule/new`], params);\r\n }\r\n\r\n GetCategoryHint() {\r\n if (this.CategoryID) return this.RC('lblChangeCategory');\r\n return this.RC('lblAddCategory');\r\n }\r\n\r\n\r\n private AddSearchCategory() {\r\n if (!this.State.SearchCategory) {\r\n this.State.SearchCategory = new TransactionCategory();\r\n }\r\n\r\n const index = this.CategoriesItems.indexOf(this.State.SearchCategory);\r\n if (index < 0) {\r\n this.CategoriesItems.push(this.State.SearchCategory);\r\n }\r\n }\r\n\r\n private RemoveSearchCategory() {\r\n const index = this.CategoriesItems.indexOf(this.State.SearchCategory);\r\n\r\n if (index >= 0) {\r\n this.CategoriesItems.splice(index);\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
{{ data.Name }}
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
{{ 'lblCreate' | RC:THIS }} '{{ data.Name }}'
\\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 ExchangeAccessCodeParams extends BaseEntity {\r\n constructor() {\r\n super();\r\n this.TypeName = 'ExchangeAccessCodeParams';\r\n }\r\n \r\n public State: string; \r\n public AccessCode: string; \r\n\t\r\n}\r\n\r\n\r\n\r\n","import { Component } from '@angular/core';\r\nimport { ConsentsEndpoint } from '@kraken/_proxy/endpoints/consents.endpoint';\r\nimport { ExchangeAccessCodeParams } from '@kraken/_proxy/params/exchangeaccesscode.param';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nclass State extends BaseState {\r\n State: string;\r\n AccessCode: string;\r\n Error: string;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n templateUrl: './callback.component.html'\r\n})\r\nexport class CallbackComponent extends BasePageComponent {\r\n \r\n constructor(A: ServiceBagService, private consentsEndpoint: ConsentsEndpoint) {\r\n super(A, 'CallbackComponent', BaseEntity, State);\r\n }\r\n\r\n protected OnInitState(): void {\r\n if (Object.keys(this.QueryParams).length <= 0) return;\r\n\r\n if (this.QueryParams.code) {\r\n this.State.AccessCode = this.QueryParams.code as string;\r\n }\r\n\r\n \r\n if (this.QueryParams.state) {\r\n this.State.State = this.QueryParams.state as string;\r\n }\r\n\r\n if (this.QueryParams.error) {\r\n this.State.Error = this.QueryParams.Error as string;\r\n }\r\n }\r\n\r\n\r\n override OnInitComponent() {\r\n this.IsLoading = true;\r\n \r\n if(this.State.Error) {\r\n this.UI.StopMessage(this.State.Error);\r\n \r\n return;\r\n }\r\n\r\n const params = new ExchangeAccessCodeParams();\r\n params.State = this.State.State;\r\n params.AccessCode = this.State.AccessCode;\r\n\r\n this.Do(\r\n this.consentsEndpoint.ExchangeAccessCode(params),\r\n false,\r\n (response) => {\r\n window.postMessage({ callbackResponse: response, type: 'Kr_callback' }, window.location.origin);\r\n },\r\n (errResponse) => {\r\n this.UI.StopMessage(errResponse.ResponseMessage);\r\n window.postMessage({ callbackResponse: errResponse, type: 'Kr_callback' }, window.location.origin);\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\tselector: 'mobile-content-header',\r\n\ttemplateUrl: './mobile-content-header.component.html',\r\n\tstyleUrls: ['./mobile-content-header.component.scss']\r\n})\r\nexport class MobileContentHeaderComponent {\r\n\r\n}\r\n","export default \"
\\r\\n\\t
\\r\\n\\t\\t\\r\\n\\r\\n\\t\\t\\r\\n\\t
\\r\\n
\";","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'mobile-total-balance',\r\n templateUrl: './mobile-total-balance.component.html',\r\n styleUrls: ['./mobile-total-balance.component.scss']\r\n})\r\nexport class MobileTotalBalanceComponent {\r\n\r\n @Input() Label: string;\r\n @Input() BalanceAmount: number | null = null;\r\n @Input() Currency: string;\r\n @Input() LinkLabel: string;\r\n\r\n @Output() OnLinkClicked = new EventEmitter();\r\n\r\n constructor() { }\r\n\r\n LinkClicked(event: any) {\r\n this.OnLinkClicked.emit(event);\r\n }\r\n}\r\n","export default \"
\\r\\n
\\r\\n
{{Label}}
\\r\\n
{{LinkLabel}}
\\r\\n
\\r\\n
\\r\\n {{BalanceAmount | formatNumberGeneral}} {{Currency}}
\\r\\n
\";","import { Component, Input, OnInit } from '@angular/core';\r\nimport { ItemDetails } from '../models';\r\n\r\n@Component({\r\n selector: 'mobile-item-details',\r\n templateUrl: './mobile-item-details.component.html',\r\n styleUrls: ['./mobile-item-details.component.scss']\r\n})\r\nexport class MobileItemDetailsComponent {\r\n\r\n @Input() ItemDetails: ItemDetails[];\r\n @Input() HeaderIcon?: string;\r\n @Input() HeaderText?: string;\r\n\r\n constructor() { }\r\n\r\n}\r\n","export default \"
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n {{HeaderText}}\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\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 { Globals } from '@kraken/_globals';\r\nimport { TransactionEndpoint } from '@kraken/_proxy/endpoints/transaction.endpoint';\r\nimport { EnumBookingAccountSubtypes } from '@kraken/_proxy/enums';\r\nimport { TransactionReportParams } from '@kraken/_proxy/params/transactionreport.param';\r\nimport { TransactionView } from '@kraken/_proxy/views/transaction.view';\r\nimport { FilterSettings, FilterValues } from '@kraken/components/filter/filter.component';\r\nimport { BaseMobileReport, BaseMobileReportState } from '@kraken/mobile/common/base-report/base-mobile-report';\r\nimport { MobileHistoryChartComponent } from '@kraken/mobile/common/mobile-history-chart/mobile-history-chart.component';\r\nimport { ReportNestedListItem } from '@kraken/mobile/common/models';\r\nimport { BaseReportService } from '@kraken/mobile/services/base-report.service';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseState, GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BottomSheetContentParams, BottomSheetService } from '@m4u-angular/core/framework/bottom-sheet.service';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { formatDate, formatNumber } from 'devextreme/localization';\r\nimport { RowClickEvent } from 'devextreme/ui/tree_list';\r\nimport * as _ from 'lodash';\r\n\r\nclass State extends BaseMobileReportState {\r\n SelectedDateRange: [Date, Date];\r\n ReportItems: ReportNestedListItem[] = [];\r\n FilteredReportItems: ReportNestedListItem[] = [];\r\n Transactions: TransactionView[];\r\n SelectedTransaction: TransactionView & ReportNestedListItem;\r\n TransactionHistoryParams: TransactionReportParams;\r\n SelectedCard: any;\r\n HistoryChartTypes: GenericListEntity[];\r\n AvailableHistoryChartTypes: GenericListEntity[];\r\n SearchText: string;\r\n}\r\n\r\nenum CardItemType {\r\n Simple,\r\n List\r\n}\r\n\r\n@Component({\r\n selector: 'mobile-cc-report',\r\n templateUrl: './mobile-cc-report.component.html',\r\n styleUrls: ['../../css/mobile-common.scss', './mobile-cc-report.component.scss']\r\n})\r\nexport class MobileCreditCardReportComponent extends BaseMobileReport{\r\n protected reportGrid: BaseGridComponent;\r\n Cards: any[];\r\n\r\n @ViewChild('historyChartOptions') historyChartOptions: TemplateRef;\r\n\r\n constructor(\r\n A: ServiceBagService,\r\n private baseReportService: BaseReportService,\r\n private transactionEndpoint: TransactionEndpoint,\r\n private bottomSheetService: BottomSheetService) {\r\n super(A, 'CreditCardsReportComponent', State);\r\n }\r\n\r\n protected OnLoadData() {\r\n if (!Globals.OrganizationID) {\r\n this.State.Balances = undefined;\r\n return;\r\n }\r\n\r\n this.State.HistoryChartTypes = this.LIST('ClassificarionRuleFieldTypes');\r\n\r\n const params = this.GetParams();\r\n if (!params.OrganizationID) {\r\n params.OrganizationID = Globals.OrganizationID;\r\n }\r\n params.BankChargeDateFrom = this.State.SelectedDateRange[0];\r\n params.BankChargeDateTo = this.State.SelectedDateRange[1];\r\n params.BookingAccountSubtypes = [EnumBookingAccountSubtypes.CreditCard];\r\n params.IsBankCharge = 0;\r\n\r\n this.Do(this.transactionEndpoint.ListEx(params), false, res => {\r\n this.State.Transactions = res.Entities.map(x => ({\r\n ...x,\r\n MonthAndyear: formatDate(x.BankChargeDate, 'MM/yyyy'),\r\n CurrencySortOrder: (this.LISTITEMX('Currencies', x.Currency) as any)?.SortOrder\r\n }));\r\n\r\n this.PrepareCards(this.State.Transactions);\r\n this.ProcessData(this.State.Transactions);\r\n });\r\n }\r\n\r\n ProcessData(arr: any[]) {\r\n let groupedTransactions: any[];\r\n if (this.State.SelectedCard?.Type === CardItemType.Simple) {\r\n groupedTransactions = this.GetGroupedItems(\r\n this.State.Transactions\r\n .filter(x => x.CC4Digits === this.State.SelectedCard.CC4Digits && x.CCBrand === this.State.SelectedCard.CCBrand),\r\n (item) => `${item.MonthAndyear} ${item.Currency}`\r\n );\r\n } else {\r\n groupedTransactions = this.GetGroupedItems(this.State.Transactions, 'MonthAndyear', 'BookingAccountCode');\r\n }\r\n\r\n if (groupedTransactions.length > 0) {\r\n this.State.ReportItems = this.State.FilteredReportItems = groupedTransactions;\r\n } else {\r\n this.State.ReportItems = this.State.FilteredReportItems = [];\r\n }\r\n }\r\n\r\n OnGetGroupBalances(data: any, subGroupKey?: string) {\r\n if (this.State.SelectedCard?.Type === CardItemType.Simple) {\r\n return _.map(data, (items, group) => {\r\n return {\r\n ItemID: group + '_' + items[0].EntryID,\r\n items: items.map(item => ({\r\n ...item,\r\n ItemID: item.EntryID,\r\n Title: item.Notes1,\r\n Notes: formatDate(item.Date, this.F.DateFormatShort),\r\n CurrencySymbol: (this.LISTITEMX('Currencies', item.Currency) as any)?.Symbol,\r\n Depth: 2,\r\n })),\r\n Depth: 0,\r\n Title: items[0].MonthAndyear,\r\n CurrencySymbol: (this.LISTITEMX('Currencies', items[0].Currency) as any)?.Symbol,\r\n Amount: _.sumBy(items, 'Amount')\r\n };\r\n });\r\n } else {\r\n const nestedGroupedData = _.mapValues(data, (groupArray) => {\r\n return _.groupBy(groupArray, subGroupKey);\r\n });\r\n return _.map(nestedGroupedData, (subGroups, group) => {\r\n const items = _.map(subGroups, (items, subGroup) => {\r\n return {\r\n ItemID: group + '_' + subGroup,\r\n items: items?.map(item => ({\r\n ...item,\r\n ItemID: item.EntryID,\r\n Title: item.Notes1,\r\n Notes: formatDate(item.Date, this.F.DateFormatShort),\r\n CurrencySymbol: (this.LISTITEMX('Currencies', item.Currency) as any)?.Symbol,\r\n Depth: 2,\r\n })),\r\n Depth: 1,\r\n Title: (this.LISTITEMX('Brands', items[0].CCBrand)?.Text ?? this.RC('lblIsApplyToSubTypeCredit')) +\r\n ' - ' + items[0].CC4Digits,\r\n Icon: (this.LISTITEMX('Brands', items[0].CCBrand) as any)?.Icon ?? 'assets/projects/kraken/cc-brand-generic.svg',\r\n Notes: `${items[0].CompanyName} - ${items[0].AccountName}`,\r\n CurrencySymbol: (this.LISTITEMX('Currencies', items[0].Currency) as any)?.Symbol,\r\n Amount: _.sumBy(items, 'Amount'),\r\n Currency: items[0].Currency\r\n };\r\n });\r\n return {\r\n ItemID: group + '_' + items[0].ItemID,\r\n items: items,\r\n Depth: 0,\r\n Title: group,\r\n Amount: this.GetItemHeader(items),\r\n } as any;\r\n });\r\n }\r\n }\r\n\r\n protected OnGetCustomFilterSettings(): FilterSettings {\r\n return {\r\n Company: { IsVisible: true, IsMultiple: true, IsSearchDisabled: true },\r\n AccountGroup: { IsVisible: true, IsMultiple: true, IsSearchDisabled: true },\r\n Account: {\r\n IsVisible: true, IsMultiple: true, IsSearchDisabled: true,\r\n Params: { BookingAccountSubtypes: [EnumBookingAccountSubtypes.CreditCard] }\r\n },\r\n BookingAccount: {\r\n IsVisible: true, IsMultiple: true, IsSearchDisabled: true,\r\n Params: { BookingAccountSubtypes: [EnumBookingAccountSubtypes.CreditCard] }\r\n },\r\n CurrencyFilter: { IsVisible: true, IsMultiple: true, IsSearchDisabled: true, },\r\n Bank: { IsVisible: true, IsMultiple: true, IsSearchDisabled: true, },\r\n Category: { IsVisible: true, IsMultiple: true, IsSearchDisabled: true, },\r\n\r\n IsCustomOptionsSettings: true,\r\n } as FilterSettings;\r\n }\r\n\r\n protected override OnInitState() {\r\n super.OnInitState();\r\n this.State.SelectedDateRange = this.GetDefaultTimeframe();\r\n }\r\n\r\n protected override OnResetFilterValues() {\r\n super.OnResetFilterValues();\r\n this.State.SelectedDateRange = this.GetDefaultTimeframe();\r\n }\r\n\r\n PrepareCards(records: TransactionView[]) {\r\n if (records.length > 0) {\r\n const uniqueAccounts = records\r\n .filter((value, index, array) => array.findIndex(x => x.AccountName === value.AccountName) === index);\r\n const uniqueCards = records\r\n .filter((value, index, array) => array.findIndex(x => x.CC4Digits === value.CC4Digits &&\r\n x.CCBrand === value.CCBrand) === index);\r\n\r\n this.Cards = [\r\n {\r\n Title: this.RC('lblAllCards'),\r\n TitleIcon: 'assets/projects/kraken/cc-brand-generic.svg',\r\n Type: CardItemType.List,\r\n Labels: uniqueAccounts.length < 4 ? uniqueAccounts.map(x => x.AccountName) :\r\n uniqueAccounts.map(x => x.AccountName).slice(0, 3).concat('...'),\r\n Key: 'overall-card'\r\n }];\r\n uniqueCards.forEach(card => {\r\n this.Cards.push({\r\n ...card,\r\n Title: (this.LISTITEMX('Brands', card.CCBrand)?.Text ?? this.RC('lblIsApplyToSubTypeCredit')) + ' - ' + card.CC4Digits,\r\n TitleIcon: (this.LISTITEMX('Brands', card.CCBrand) as any)?.Icon ?? 'assets/projects/kraken/cc-brand-generic.svg',\r\n Type: CardItemType.Simple,\r\n Label: card.CompanyName,\r\n FooterLabel: (this.LISTITEMX('Banks', card.Bank) as any)?.TextShort,\r\n FooterIcon: this.baseReportService.GetBankIcon(card.Bank),\r\n Key: `${card.BookingAccountName}-card`\r\n });\r\n });\r\n } else {\r\n this.Cards = null;\r\n }\r\n }\r\n\r\n GetItemHeader(items: any[]) {\r\n return _(items)\r\n .sortBy('CurrencySortOrder')\r\n .groupBy('Currency')\r\n .map(x =>\r\n `${formatNumber(_.sumBy(x, 'Amount'), this.F.NumberSum)} ${(this.LISTITEMX('Currencies', x[0].Currency) as any)?.Symbol}`\r\n )\r\n .value().join(' | ');\r\n }\r\n\r\n OnSelectedRangeChange(event: [Date, Date]) {\r\n this.OnLoadData();\r\n }\r\n\r\n OnFilterValueChange(filterValues: FilterValues) {\r\n this.Cards = null;\r\n this.State.SelectedCard = null;\r\n }\r\n\r\n GetDefaultTimeframe(): [Date, Date] {\r\n return [Globals.ThirtyDaysAgoDate, Globals.Yesterday];\r\n }\r\n\r\n OnItemClicked(event: RowClickEvent) {\r\n if (event.data.Depth === 2) {\r\n this.State.SelectedTransaction = event.data as TransactionView & ReportNestedListItem;\r\n this.State.ItemDetails = this.baseReportService.GetCreditCardTransactionProperties(this.State.SelectedTransaction);\r\n this.State.ItemDetailsHeaderText = event.data.BookingAccountFullName;\r\n this.State.ItemDetailsHeaderIcon = this.GetBankIcon(event.data.Bank);\r\n const contentParams = new BottomSheetContentParams();\r\n contentParams.Class = 'no-padding';\r\n contentParams.Content = this.detailsViewInfo;\r\n contentParams.Title = this.State.SelectedTransaction.CompanyName;\r\n this.bottomSheetService.Show(contentParams);\r\n }\r\n }\r\n\r\n OnSelectedCardChange(event: any) {\r\n this.State.SelectedCard = event;\r\n this.ProcessData(this.State.Transactions);\r\n this.OnSearch(this.State.SearchText);\r\n }\r\n\r\n OnBankChargeDateFromChange(e) {\r\n this.State.SelectedDateRange = [e.value, this.State.SelectedDateRange[1]];\r\n }\r\n\r\n OnBankChargeDateToChange(e) {\r\n this.State.SelectedDateRange = [this.State.SelectedDateRange[0], e.value];\r\n }\r\n\r\n OpenHistoryChart() {\r\n this.State.AvailableHistoryChartTypes = this.State.HistoryChartTypes.filter(x => this.State.SelectedTransaction[x.Value]);\r\n if (this.State.AvailableHistoryChartTypes?.length === 1) {\r\n const filterType = this.State.AvailableHistoryChartTypes[0].Value;\r\n this.ShowHistoryChart(filterType);\r\n } else {\r\n const contentParams = new BottomSheetContentParams();\r\n contentParams.Class = 'no-padding';\r\n contentParams.Content = this.historyChartOptions;\r\n contentParams.Title = this.RC('lblViewHistoryBy');\r\n this.bottomSheetService.Show(contentParams);\r\n }\r\n }\r\n\r\n ShowHistoryChart(filterType: string) {\r\n const content = this.GetHistoryChartParams(this.State.SelectedTransaction, filterType);\r\n this.bottomSheetService.Show(content);\r\n }\r\n\r\n override OnSearch(text: string) {\r\n this.State.SearchText = text;\r\n this.State.FilteredReportItems = [];\r\n if (!text) {\r\n this.State.FilteredReportItems = Utils.CloneObject(this.State.ReportItems);\r\n return;\r\n }\r\n\r\n this.State.FilteredReportItems = Utils.FilterTree(this.State.ReportItems, 'Title,Notes,Amount,Notes1,Notes2', text);\r\n }\r\n}","import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { RowClickEvent } from 'devextreme/ui/tree_list';\r\nimport { LabelType, ReportNestedListItem } from '../models';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\n\r\n@Component({\r\n selector: 'report-nested-list',\r\n templateUrl: './report-nested-list.component.html',\r\n styleUrls: ['./report-nested-list.component.scss']\r\n})\r\nexport class ReportNestedListComponent {\r\n\r\n @Input() Data: ReportNestedListItem[];\r\n\r\n @Output() OnItemClicked = new EventEmitter();\r\n\r\n @ViewChild('treeList') TreeList;\r\n\r\n constructor(private screenService: ScreenService) { }\r\n\r\n ItemClicked(event: RowClickEvent) {\r\n if (event.data.ItemID !== -1) {\r\n if (event.isExpanded) {\r\n event.component.collapseRow(event.key);\r\n } else {\r\n event.component.expandRow(event.key);\r\n }\r\n }\r\n this.OnItemClicked.emit(event);\r\n }\r\n\r\n GetToggleItemIcon(item: any) {\r\n if (item.data.Depth === 0) {\r\n return item.row.isExpanded ? 'mdi mdi-triangle-small-up' : 'mdi mdi-triangle-small-down';\r\n }\r\n\r\n if (item.data.Depth === 1) {\r\n return item.row.isExpanded ? 'mdi mdi-chevron-up' : 'mdi mdi-chevron-down';\r\n }\r\n return 'mdi mdi-arrow-right-thin';\r\n }\r\n\r\n GetToggleItemImage(item: any) {\r\n const urlPathPrefix = 'assets/projects/kraken';\r\n\r\n if (item.data.HasNoItems) {\r\n return null;\r\n }\r\n\r\n if (item.data.RightIcon) {\r\n return item.data.RightIcon;\r\n }\r\n\r\n if (item.data.Depth === 0) {\r\n return item.row.isExpanded ? `${urlPathPrefix}/mob-triangle-up.svg` : `${urlPathPrefix}/mob-triangle-down.svg`;\r\n }\r\n\r\n if (item.data.Depth === 1) {\r\n return item.row.isExpanded ? `${urlPathPrefix}/mob-chevron-up.svg` : `${urlPathPrefix}/mob-chevron-down.svg`;\r\n }\r\n\r\n if (item.data.Depth === 2) {\r\n return this.screenService.IsRTL() ? `${urlPathPrefix}/mob-arrow-left.svg` : `${urlPathPrefix}/mob-arrow-right.svg`;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n IsNoteError(item: any) {\r\n return item.data.Notes?.LabelType === LabelType.Error;\r\n }\r\n\r\n ShowNotes2(item: any) {\r\n return !!item.data.Notes2;\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n\\t\\r\\n\\r\\n\\t
\\r\\n\\t\\t
\\r\\n\\t\\t\\t\\r\\n\\t\\t
\\r\\n\\t\\t
\\r\\n\\t\\t\\t{{item.data.Title}}\\r\\n\\t\\t\\t{{item.data.Notes?.Text??item.data.Notes}}\\r\\n\\t\\t\\t{{item.data.Notes2}}\\r\\n\\t\\t
\\r\\n\\t\\t
0\\\" [class.negative-amount]=\\\"item.data.Amount<0\\\">\\r\\n\\t\\t\\t{{item.data.Amount|formatNumberGeneral}}\\r\\n\\t\\t\\t\\t{{item.data.CurrencySymbol}}\\r\\n\\t\\t\\t{{item.data.AdditionalAmount|formatNumberGeneral}}\\r\\n\\t\\t\\t\\t{{item.data.AdditionalCurrencySymbol}}\\r\\n\\t\\t
\\r\\n\\t\\t
\\r\\n\\t\\t\\t\\r\\n\\t\\t
\\r\\n\\t
\\r\\n
\";","import { BaseReportComponent, BaseReportState } from '@kraken/pages/base-report/base-report.component';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BalanceByCompany, ItemDetails, ReportNestedListItem } from '../models';\r\nimport { Globals } from '@kraken/_globals';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { Component, HostListener, TemplateRef, ViewChild } from '@angular/core';\r\nimport * as _ from 'lodash';\r\nimport { TransactionView } from '@kraken/_proxy/views/transaction.view';\r\nimport { TransactionReportParams } from '@kraken/_proxy/params/transactionreport.param';\r\nimport { BottomSheetContentParams } from '@m4u-angular/core/framework/bottom-sheet.service';\r\nimport { MobileHistoryChartComponent } from '../mobile-history-chart/mobile-history-chart.component';\r\n\r\nexport class BaseMobileReportState extends BaseReportState {\r\n Balances: BalanceByCompany[];\r\n BalancesFiltered: BalanceByCompany[];\r\n SelectedCompany: BalanceByCompany;\r\n SelectedIndex = 0;\r\n TotalBalanceAmount = 0;\r\n Currency: string;\r\n ItemDetails: ItemDetails[] = [];\r\n ItemDetailsHeaderText: string;\r\n ItemDetailsHeaderIcon: string;\r\n TransactionHistoryParams: TransactionReportParams;\r\n}\r\n\r\n@Component({\r\n selector: 'base-mobile-report-component',\r\n template: '
'\r\n})\r\nexport abstract class BaseMobileReport extends BaseReportComponent {\r\n\r\n @ViewChild('tabs') tabs: any;\r\n @ViewChild('detailsViewInfo') detailsViewInfo: TemplateRef;\r\n @ViewChild('nestedList') treeList: any;\r\n @ViewChild('historyChart') historyChart: TemplateRef;\r\n\r\n protected maxDate = Globals.Yesterday;\r\n\r\n protected constructor(A: ServiceBagService, ComponentName: string, StateType: (new () => TState)) {\r\n super(A, ComponentName, StateType);\r\n }\r\n\r\n protected SelectCompany(itemIndex: number) {\r\n this.State.SelectedCompany = this.State.BalancesFiltered[itemIndex];\r\n this.State.SelectedIndex = itemIndex;\r\n this.ExpandListContainingOnlyOneItem();\r\n }\r\n\r\n protected OnFilterEndDateChanged = (event: any) => {\r\n this.OnLoadData();\r\n };\r\n\r\n protected override OnResetFilterValues() {\r\n super.OnResetFilterValues();\r\n this.State.FilterValues.Date = Globals.Yesterday;\r\n }\r\n\r\n protected override OnGetToolbarSettings(): ToolbarSettings {\r\n const settings = new ToolbarSettings();\r\n settings.IsAllowFilter = true;\r\n return settings;\r\n }\r\n\r\n protected GetBankIcon(bank: string) {\r\n const urlPathPrefix = 'assets/projects/kraken/';\r\n const bankItem = this.LISTITEMX('Banks', bank) as any;\r\n return bankItem && bankItem.Icon && `${urlPathPrefix}${bankItem.Icon}`;\r\n }\r\n\r\n protected OnSearch(text: string) {\r\n this.State.BalancesFiltered = Utils.CloneObject(this.State.Balances);\r\n if (!text) {\r\n this.SelectCompany(0);\r\n return;\r\n }\r\n if (this.State.Balances?.length > 0) {\r\n this.State.BalancesFiltered = [];\r\n\r\n //if company found with text, filter only by it\r\n this.State.BalancesFiltered = this.State.Balances.filter(x => x.text.toLowerCase().includes(text.toLocaleLowerCase()));\r\n if (this.State.BalancesFiltered.length === 0) {\r\n this.State.Balances.forEach((company, i) => {\r\n this.State.BalancesFiltered.push({\r\n ...company,\r\n items: Utils.FilterTree(company.items, 'Title,Notes,Amount,Notes1,Notes2', text)\r\n });\r\n });\r\n }\r\n\r\n this.State.BalancesFiltered = this.State.BalancesFiltered.filter(x => x.items?.length > 0);\r\n const listHeader = this.OnGetListHeader();\r\n if (listHeader) {\r\n this.State.BalancesFiltered.forEach(x => {\r\n if (!x.items.find(item => item.ItemID == -1)) {\r\n x.items.unshift(listHeader);\r\n }\r\n });\r\n }\r\n\r\n if (this.State.SelectedIndex > this.State.BalancesFiltered.length) {\r\n this.SelectCompany(0);\r\n } else {\r\n const newIndex = this.State.BalancesFiltered.findIndex(x => x.text.includes(this.State.SelectedCompany.text));\r\n this.SelectCompany(newIndex > -1 ? newIndex : 0);\r\n }\r\n }\r\n }\r\n\r\n protected OnBeforeProcessData(arr: any[]) {\r\n\r\n }\r\n\r\n protected ProcessData(arr: any[], groupKey: string, subGroupKey?: string) {\r\n this.OnBeforeProcessData(arr);\r\n this.State.Balances = [];\r\n arr.forEach(balance => {\r\n if (!this.State.Balances.find(x => x.id == balance.CompanyID)) {\r\n this.State.Balances.push({\r\n id: balance.CompanyID,\r\n text: balance.CompanyName,\r\n items: this.GetGroupedItems(arr.filter(x => x.CompanyID === balance.CompanyID), groupKey, subGroupKey)\r\n });\r\n }\r\n });\r\n this.State.BalancesFiltered = Utils.CloneObject(this.State.Balances);\r\n this.SelectCompany(0);\r\n this.OnAfterProcessData();\r\n //TODO: maybe move to OnAfterProcessData\r\n this.ExpandListContainingOnlyOneItem();\r\n }\r\n\r\n protected ExpandListContainingOnlyOneItem() {\r\n const firstLevelChildren = this.State.SelectedCompany?.items?.filter(x => x.ItemID !== -1);\r\n if (firstLevelChildren?.length === 1) {\r\n this.treeList.TreeList.instance.option('expandedRowKeys', [firstLevelChildren[0].ItemID]);\r\n } else {\r\n this.treeList.TreeList.instance.option('expandedRowKeys', []);\r\n }\r\n }\r\n\r\n protected OnAfterProcessData() {\r\n\r\n }\r\n\r\n protected GetGroupedItems = (items, groupKey: string | ((item: any) => string), subGroupKey?: string) => {\r\n let groupBalances = [];\r\n if (items?.length > 0) {\r\n const grouped = _.groupBy(items, groupKey);\r\n groupBalances = this.OnGetGroupBalances(grouped, subGroupKey);\r\n }\r\n if (this.OnGetListHeader()) {\r\n groupBalances.unshift(this.OnGetListHeader());\r\n }\r\n return groupBalances;\r\n };\r\n\r\n protected OnGetGroupBalances(data: any, subGroupKey?: string) {\r\n return [];\r\n }\r\n\r\n protected OnGetListHeader() {\r\n return null;\r\n }\r\n\r\n OnTabsReady() {\r\n this.tabs.selectedIndex = this.State.SelectedIndex;\r\n }\r\n\r\n GetHistoryChartParams(transaction: TransactionView & ReportNestedListItem, filterType: string) {\r\n const params = this.GetParams();\r\n if (!params.OrganizationID) {\r\n params.OrganizationID = Globals.OrganizationID;\r\n }\r\n const fromDate = new Date(Globals.Yesterday);\r\n fromDate.setMonth(fromDate.getMonth() - 6);\r\n params.DateFrom = fromDate;\r\n params.DateTo = Globals.Yesterday;\r\n params.Accounts = [transaction.AccountID];\r\n params.BookingAccounts = [transaction.BookingAccountID];\r\n if (filterType) {\r\n params[filterType] = transaction[filterType];\r\n }\r\n\r\n this.State.TransactionHistoryParams = params;\r\n\r\n const contentParams = new BottomSheetContentParams();\r\n contentParams.Class = 'no-padding';\r\n contentParams.Content = this.historyChart;\r\n contentParams.Title = this.RC('lblHistory');\r\n return contentParams;\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { BalanceDetailDepositsView } from \"@kraken/_proxy/views/balancedetaildeposits.view\";\r\nimport { BaseService } from '@m4u-angular/base/service/BaseService';\r\nimport { ItemDetails, ReportNestedListItem } from \"../common/models\";\r\nimport { ResourcesService } from \"@m4u-angular/core/framework/resources.service\";\r\nimport { formatDate, formatNumber } from \"devextreme/localization\";\r\nimport { FrameworkService } from \"@m4u-angular/core/framework/framework.service\";\r\nimport { BalanceDetailStocksView } from \"@kraken/_proxy/views/balancedetailstocks.view\";\r\nimport { BalanceDetailLoansView } from \"@kraken/_proxy/views/balancedetailloans.view\";\r\nimport { Globals } from \"@kraken/_globals\";\r\nimport { TransactionView } from \"@kraken/_proxy/views/transaction.view\";\r\nimport { ScreenService } from \"@m4u-angular/core/framework/screen.service\";\r\nimport { TransactionReportParams } from \"@kraken/_proxy/params/transactionreport.param\";\r\nimport { BalanceDetailGuaranteesView } from \"@kraken/_proxy/views/balancedetailguarantees.view\";\r\n\r\n@Injectable()\r\nexport class BaseReportService extends BaseService {\r\n\r\n constructor(\r\n private frameworkService: FrameworkService,\r\n private resourseService: ResourcesService,\r\n private screenService: ScreenService) {\r\n super();\r\n }\r\n\r\n GetBaseFilterSettings() {\r\n return {\r\n Company: { IsVisible: true, IsMultiple: true, IsSearchDisabled: true },\r\n Account: { IsVisible: true, IsMultiple: true, IsSearchDisabled: true },\r\n BookingAccount: { IsVisible: true, IsMultiple: true, IsSearchDisabled: true },\r\n AccountGroup: { IsVisible: true, IsMultiple: true, IsSearchDisabled: true },\r\n CurrencyFilter: { IsVisible: true, IsMultiple: true, IsSearchDisabled: true },\r\n Bank: { IsVisible: true, IsMultiple: true, IsSearchDisabled: true },\r\n Currency: { IsVisible: true, IsSearchDisabled: true },\r\n IsDateVisible: true,\r\n MaxReportDate: Globals.Yesterday\r\n };\r\n }\r\n\r\n GetDetailsDeposProperties(balanceDetail: BalanceDetailDepositsView & ReportNestedListItem): ItemDetails[] {\r\n const details: ItemDetails[] = [{\r\n Label: this.RC('BL.Balance.BalanceDetailDepos.BalanceNominal'),\r\n Value: `${formatNumber(balanceDetail.BalanceNominal, this.frameworkService.CompanyInfo.NumberSum)}\r\n ${balanceDetail.CurrencySymbol ?? ''}`,\r\n Class: this.GetClassForAmount(balanceDetail.BalanceNominal)\r\n }, {\r\n Label: this.RC('BL.Balance.BalanceDetailDepos.BalanceActual'),\r\n Value: `${formatNumber(balanceDetail.BalanceActual, this.frameworkService.CompanyInfo.NumberSum)}\r\n ${balanceDetail.CurrencySymbol ?? ''}`,\r\n Class: this.GetClassForAmount(balanceDetail.BalanceActual)\r\n }, {\r\n Label: this.RC('BL.Balance.BalanceDetailDepos.StartDate'),\r\n Value: formatDate(balanceDetail.StartDate, this.frameworkService.CompanyInfo.DateFormatShort)\r\n }, {\r\n Label: this.RC('lblEndDate'),\r\n Value: formatDate(balanceDetail.EndDate, this.frameworkService.CompanyInfo.DateFormatShort)\r\n }, {\r\n Label: this.RC('lblNextExitDate'),\r\n Value: formatDate(balanceDetail.NextExitDate, this.frameworkService.CompanyInfo.DateFormatShort)\r\n }, {\r\n Label: this.RC('lblInterestRate'),\r\n Value: formatNumber(balanceDetail.InterestRate, this.frameworkService.CompanyInfo.NumberRate)\r\n }, {\r\n Label: this.RC('lblDepType'),\r\n Value: this.resourseService.LISTITEMX('DepositTypes', balanceDetail.DepType, this.ModuleName)?.Text\r\n }, {\r\n Label: this.RC('lblCurrency'),\r\n Value: (this.resourseService.LISTITEMX('Currencies', balanceDetail.Currency, this.ModuleName) as any)?.Text\r\n }];\r\n\r\n if (balanceDetail.AdditionalCurrencySymbol) {\r\n details.push({\r\n Label: this.RC('lblBalanceOriginal'),\r\n Value: `${formatNumber(balanceDetail.BalanceOriginal, this.frameworkService.CompanyInfo.NumberSum)}\r\n ${balanceDetail.AdditionalCurrencySymbol ?? ''}`,\r\n Class: this.GetClassForAmount(balanceDetail.BalanceOriginal)\r\n }, {\r\n Label: this.RC('lblCurrencyRate'),\r\n Value: formatNumber(balanceDetail.CurrencyRate, this.frameworkService.CompanyInfo.NumberRate)\r\n });\r\n }\r\n\r\n return details;\r\n }\r\n\r\n GetDetailsStocksProperties(balanceDetail: BalanceDetailStocksView & ReportNestedListItem): ItemDetails[] {\r\n const deltaIcon = balanceDetail.BalanceActual < balanceDetail.BalanceNominal ? '▼' : '▲';\r\n const details: ItemDetails[] = [{\r\n Label: this.RC('BL.Balance.BalanceDetailStocks.Reference'),\r\n Value: balanceDetail.Reference\r\n }, {\r\n Label: this.RC('BL.Balance.BalanceDetailStocks.BalanceNominal'),\r\n Value: `${formatNumber(balanceDetail.BalanceNominal, this.frameworkService.CompanyInfo.NumberSum)}\r\n ${balanceDetail.CurrencySymbol ?? ''}`\r\n }, {\r\n Label: this.RC('BL.Balance.BalanceDetailStocks.BalanceActual'),\r\n Value: `${formatNumber(balanceDetail.BalanceActual, this.frameworkService.CompanyInfo.NumberSum)}\r\n ${balanceDetail.CurrencySymbol ?? ''}`\r\n }, {\r\n Label: this.RC('lblChangePercent'),\r\n Value: this.screenService.IsRTL() ?\r\n `${deltaIcon} % ${formatNumber(balanceDetail.ChangePercent, this.frameworkService.CompanyInfo.NumberPercent)}` :\r\n `${deltaIcon} ${formatNumber(balanceDetail.ChangePercent, this.frameworkService.CompanyInfo.NumberPercent)} %`\r\n ,\r\n Class: this.GetClassForAmount(balanceDetail.ChangePercent)\r\n }, {\r\n Label: this.RC('lblQuantity'),\r\n Value: formatNumber(balanceDetail.Quantity, this.frameworkService.CompanyInfo.NumberQuantity)\r\n }, {\r\n Label: this.RC('lblAveragePurchasePrice'),\r\n Value: `${formatNumber(balanceDetail.AveragePurchasePrice, this.frameworkService.CompanyInfo.NumberPrice)}\r\n ${balanceDetail.CurrencySymbol ?? ''}`\r\n }, {\r\n Label: this.RC('lblLastPrice'),\r\n Value: `${formatNumber(balanceDetail.LastPrice, this.frameworkService.CompanyInfo.NumberPrice)} \r\n ${balanceDetail.CurrencySymbol ?? ''}`\r\n }, {\r\n Label: this.RC('lblGroupType'),\r\n Value: this.resourseService.LISTITEMX('StockTypes', balanceDetail.GroupType, this.ModuleName)?.Text\r\n }, {\r\n Label: this.RC('lblCurrency'),\r\n Value: (this.resourseService.LISTITEMX('Currencies', balanceDetail.Currency, this.ModuleName) as any)?.Text\r\n }];\r\n\r\n if (balanceDetail.AdditionalCurrencySymbol) {\r\n details.push({\r\n Label: this.RC('lblBalanceOriginal'),\r\n Value: `${formatNumber(balanceDetail.BalanceOriginal, this.frameworkService.CompanyInfo.NumberSum)}\r\n ${balanceDetail.AdditionalCurrencySymbol ?? ''}`\r\n }, {\r\n Label: this.RC('lblCurrencyRate'),\r\n Value: formatNumber(balanceDetail.CurrencyRate, this.frameworkService.CompanyInfo.NumberRate)\r\n });\r\n }\r\n\r\n return details;\r\n }\r\n\r\n GetDetailsLoansProperties(balanceDetail: BalanceDetailLoansView & ReportNestedListItem): ItemDetails[] {\r\n const details: ItemDetails[] = [{\r\n Label: this.RC('lblLoanPrincipal'),\r\n Value: `${formatNumber(balanceDetail.BalanceNominal, this.frameworkService.CompanyInfo.NumberSum)}\r\n ${balanceDetail.CurrencySymbol ?? ''}`\r\n }, {\r\n Label: this.RC('lblBalanceCalcAmount'),\r\n Value: `${formatNumber(balanceDetail.BalanceActual, this.frameworkService.CompanyInfo.NumberSum)}\r\n ${balanceDetail.CurrencySymbol ?? ''}`\r\n }, {\r\n Label: this.RC('lblStartDate'),\r\n Value: formatDate(balanceDetail.StartDate, this.frameworkService.CompanyInfo.DateFormatShort)\r\n }, {\r\n Label: this.RC('lblEndDate'),\r\n Value: formatDate(balanceDetail.EndDate, this.frameworkService.CompanyInfo.DateFormatShort)\r\n }, {\r\n Label: this.RC('lblNextPaymentDate'),\r\n Value: formatDate(balanceDetail.NextPaymentDate, this.frameworkService.CompanyInfo.DateFormatShort)\r\n }, {\r\n Label: this.RC('lblBalancePrincipal'),\r\n Value: formatNumber(balanceDetail.BalancePrincipal, this.frameworkService.CompanyInfo.NumberSum)\r\n }, {\r\n Label: this.RC('lblInterestRate'),\r\n Value: formatNumber(balanceDetail.InterestRate, this.frameworkService.CompanyInfo.NumberRate)\r\n }, {\r\n Label: this.RC('lblNextPaymentSum'),\r\n Value: formatNumber(balanceDetail.NextPaymentSum, this.frameworkService.CompanyInfo.NumberSum)\r\n }, {\r\n Label: this.RC('BL.Balance.BalanceDetailStocks.Reference'),\r\n Value: balanceDetail.Reference\r\n }, {\r\n Label: this.RC('lblUniqueLoanID'),\r\n Value: balanceDetail.UniqueLoanID?.toString()\r\n }, {\r\n Label: this.RC('lblCurrency'),\r\n Value: (this.resourseService.LISTITEMX('Currencies', balanceDetail.Currency, this.ModuleName) as any)?.Text\r\n }];\r\n\r\n if (balanceDetail.AdditionalCurrencySymbol) {\r\n details.push({\r\n Label: this.RC('lblBalanceOriginal'),\r\n Value: `${formatNumber(balanceDetail.BalanceOriginal, this.frameworkService.CompanyInfo.NumberSum)}\r\n ${balanceDetail.AdditionalCurrencySymbol ?? ''}`\r\n }, {\r\n Label: this.RC('lblCurrencyRate'),\r\n Value: formatNumber(balanceDetail.CurrencyRate, this.frameworkService.CompanyInfo.NumberRate)\r\n });\r\n }\r\n\r\n return details;\r\n }\r\n \r\n GetDetailsGuaranteesProperties(balanceDetail: BalanceDetailGuaranteesView & ReportNestedListItem): ItemDetails[] {\r\n const details: ItemDetails[] = [{\r\n Label: this.RC('BL.Balance.BalanceDetailGuarantees.BalanceNominal'),\r\n Value: `${formatNumber(balanceDetail.BalanceNominal, this.frameworkService.CompanyInfo.NumberSum)}\r\n ${balanceDetail.CurrencySymbol}`\r\n }, {\r\n Label: this.RC('BL.Balance.BalanceDetailGuarantees.BalanceActual'),\r\n Value: `${formatNumber(balanceDetail.BalanceActual, this.frameworkService.CompanyInfo.NumberSum)}\r\n ${balanceDetail.CurrencySymbol}`\r\n }, {\r\n Label: this.RC('BL.Balance.BalanceDetailGuarantees.StartDate'),\r\n Value: formatDate(balanceDetail.StartDate, this.frameworkService.CompanyInfo.DateFormatShort)\r\n }, {\r\n Label: this.RC('BL.Balance.BalanceDetailGuarantees.EndDate'),\r\n Value: formatDate(balanceDetail.EndDate, this.frameworkService.CompanyInfo.DateFormatShort)\r\n }, {\r\n Label: this.RC('BL.Balance.BalanceDetailGuarantees.Name'),\r\n Value: balanceDetail.Name\r\n }, {\r\n Label: this.RC('BL.Balance.BalanceDetailGuarantees.Type'),\r\n Value: balanceDetail.Type\r\n }, {\r\n Label: this.RC('BL.Balance.BalanceDetailGuarantees.LinkageType'),\r\n Value: balanceDetail.LinkageType\r\n }, {\r\n Label: this.RC('BL.Balance.BalanceDetailGuarantees.GuarantDetails'),\r\n Value: balanceDetail.GuarantDetails\r\n },{\r\n Label: this.RC('lblCurrency'),\r\n Value: balanceDetail.Currency\r\n }];\r\n\r\n if (balanceDetail.AdditionalCurrencySymbol) {\r\n details.push({\r\n Label: this.RC('lblBalanceOriginal'),\r\n Value: `${formatNumber(balanceDetail.BalanceOriginal, this.frameworkService.CompanyInfo.NumberSum)}\r\n ${balanceDetail.AdditionalCurrencySymbol}`\r\n }, {\r\n Label: this.RC('lblCurrencyRate'),\r\n Value: formatNumber(balanceDetail.CurrencyRate, this.frameworkService.CompanyInfo.NumberRate)\r\n });\r\n }\r\n\r\n return details;\r\n }\r\n \r\n GetTransactionProperties(balanceDetail: TransactionView & ReportNestedListItem): ItemDetails[] {\r\n const details: ItemDetails[] = [];\r\n\r\n if (balanceDetail.Credit) {\r\n details.push({\r\n Label: this.RC('BL.Transaction.Credit'),\r\n Value: `${formatNumber(balanceDetail.Credit, this.frameworkService.CompanyInfo.NumberSum)}\r\n ${balanceDetail.CurrencySymbol ?? ''}`,\r\n Class: this.GetClassForAmount(balanceDetail.Credit)\r\n });\r\n } else {\r\n details.push({\r\n Label: this.RC('BL.Transaction.Debit'),\r\n Value: `${formatNumber(- balanceDetail.Debit, this.frameworkService.CompanyInfo.NumberSum)}\r\n ${balanceDetail.CurrencySymbol ?? ''} `,\r\n Class: this.GetClassForAmount(-balanceDetail.Debit)\r\n });\r\n }\r\n\r\n details.push({\r\n Label: this.RC('BL.Transaction.Date'),\r\n Value: formatDate(balanceDetail.Date, this.frameworkService.CompanyInfo.DateFormatShort)\r\n }, {\r\n Label: this.RC('lblBookingAccountCode'),\r\n Value: balanceDetail.BookingAccountCode\r\n }, {\r\n Label: this.RC('BL.Transaction.Notes1'),\r\n Value: balanceDetail.Notes1\r\n }, {\r\n Label: this.RC('BL.Transaction.Notes2'),\r\n Value: balanceDetail.Notes2\r\n }, {\r\n Label: this.RC('BL.Transaction.Reference'),\r\n Value: balanceDetail.Reference\r\n }, {\r\n Label: this.RC('lblCategory'),\r\n Value: balanceDetail.TransactionCategoryName\r\n }, {\r\n Label: this.RC('BL.Transaction.Balance'),\r\n Value: `${formatNumber(balanceDetail.Balance, this.frameworkService.CompanyInfo.NumberSum)}\r\n ${balanceDetail.CurrencySymbol ?? ''} `\r\n });\r\n\r\n return details;\r\n }\r\n\r\n GetCreditCardTransactionProperties(transactionDetail: TransactionView & ReportNestedListItem): ItemDetails[] {\r\n const details: ItemDetails[] = [{\r\n Label: this.RC('lblAccountingCode'),\r\n Value: transactionDetail.BookingAccountCode\r\n }, {\r\n Label: this.RC('lblAmount'),\r\n Value: `${formatNumber(transactionDetail.Amount, this.frameworkService.CompanyInfo.NumberSum)}\r\n ${transactionDetail.CurrencySymbol ?? ''} `\r\n }, {\r\n Label: this.RC('lblCurrency'),\r\n Value: (this.resourseService.LISTITEMX('Currencies', transactionDetail.Currency, this.ModuleName) as any)?.Text\r\n }, {\r\n Label: this.RC('BL.Transaction.Date'),\r\n Value: formatDate(transactionDetail.Date, this.frameworkService.CompanyInfo.DateFormatShort)\r\n }, {\r\n Label: this.RC('lblBankChargeDate'),\r\n Value: formatDate(transactionDetail.BankChargeDate, this.frameworkService.CompanyInfo.DateFormatShort)\r\n }, {\r\n Label: this.RC('BL.Transaction.Notes1'),\r\n Value: transactionDetail.Notes1\r\n }, {\r\n Label: this.RC('BL.Transaction.Notes2'),\r\n Value: transactionDetail.Notes2\r\n }, {\r\n Label: this.RC('lblCategory'),\r\n Value: transactionDetail.TransactionCategoryName\r\n },];\r\n\r\n return details;\r\n }\r\n\r\n GetBankIcon(bank: string) {\r\n const urlPathPrefix = 'assets/projects/kraken/';\r\n const bankItem = this.resourseService.LISTITEMX('Banks', bank, this.ModuleName) as any;\r\n return bankItem && bankItem.Icon && `${urlPathPrefix}${bankItem.Icon} `;\r\n }\r\n\r\n GetChartIcon() {\r\n return 'assets/projects/kraken/mob-chart.svg';\r\n }\r\n\r\n GetChequeIcon() {\r\n return 'assets/projects/kraken/mob-cheque.svg';\r\n }\r\n\r\n GetClassForAmount(number: number): string {\r\n return number > 0 ? 'mob-positive-amount' : number < 0 ? 'mob-negative-amount' : '';\r\n }\r\n}","import { Component, TemplateRef, ViewChild } from '@angular/core';\r\nimport { Globals } from '@kraken/_globals';\r\nimport { BalanceEndpoint } from '@kraken/_proxy/endpoints/balance.endpoint';\r\nimport { TransactionEndpoint } from '@kraken/_proxy/endpoints/transaction.endpoint';\r\nimport { EnumBookingAccountSubtypes } from '@kraken/_proxy/enums';\r\nimport { BalanceReportParams } from '@kraken/_proxy/params/balancereport.param';\r\nimport { TransactionReportParams } from '@kraken/_proxy/params/transactionreport.param';\r\nimport { BalanceView } from '@kraken/_proxy/views/balance.view';\r\nimport { FilterSettings } from '@kraken/components/filter/filter.component';\r\nimport { BaseMobileReport, BaseMobileReportState } from '@kraken/mobile/common/base-report/base-mobile-report';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseState, GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DateHelpers } from '@m4u-angular/core/helpers/DateHelpers';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { FormatDatePipe } from '@m4u-angular/ui/directives/Pipes';\r\nimport { RowClickEvent } from 'devextreme/ui/tree_list';\r\nimport { BottomSheetContentParams, BottomSheetService } from '@m4u-angular/core/framework/bottom-sheet.service';\r\nimport { BaseReportService } from '@kraken/mobile/services/base-report.service';\r\nimport * as _ from 'lodash';\r\nimport { LabelType, ReportNestedListItem } from '@kraken/mobile/common/models';\r\nimport { ChequeView } from '@kraken/_proxy/views/cheque.view';\r\nimport { TransactionView } from '@kraken/_proxy/views/transaction.view';\r\nimport { ChequeEndpoint } from '@kraken/_proxy/endpoints/cheque.endpoint';\r\nimport { MobileHistoryChartComponent } from '@kraken/mobile/common/mobile-history-chart/mobile-history-chart.component';\r\n\r\n\r\nclass State extends BaseMobileReportState {\r\n IsHideZeroBalances = true;\r\n ShowChequeDialog = false;\r\n ChequeDetails: ChequeView[] = [];\r\n TransactionHistoryParams: TransactionReportParams;\r\n SelectedTransaction: TransactionView & ReportNestedListItem;\r\n HistoryChartTypes: GenericListEntity[];\r\n AvailableHistoryChartTypes: GenericListEntity[];\r\n}\r\n\r\n@Component({\r\n selector: 'app-mobile-balance-report',\r\n templateUrl: './mobile-balance-report.component.html',\r\n styleUrls: ['../../css/mobile-common.scss', './mobile-balance-report.component.scss']\r\n})\r\nexport class MobileBalanceReportComponent extends BaseMobileReport{\r\n protected reportGrid: BaseGridComponent;\r\n\r\n @ViewChild('historyChartOptions') historyChartOptions: TemplateRef;\r\n\r\n subTypeDetails = new Map([\r\n [EnumBookingAccountSubtypes.Deposits, 'DetailsDepoViews'],\r\n [EnumBookingAccountSubtypes.Loans, 'DetailsLoanViews'],\r\n [EnumBookingAccountSubtypes.Stocks, 'DetailsStockViews'],\r\n [EnumBookingAccountSubtypes.Guarantee, 'DetailsGuarantViews']\r\n ]);\r\n maxDate = Globals.Yesterday;\r\n\r\n constructor(\r\n A: ServiceBagService,\r\n private baseReportService: BaseReportService,\r\n private bottomSheetService: BottomSheetService,\r\n private balanceEndpoint: BalanceEndpoint,\r\n private transactionEndpoint: TransactionEndpoint,\r\n private formatDatePipe: FormatDatePipe,\r\n private chequeEndpoint: ChequeEndpoint\r\n ) {\r\n super(A, 'BalanceReportComponent', State);\r\n this.State.HistoryChartTypes = this.LIST('ClassificarionRuleFieldTypes');\r\n }\r\n\r\n protected override OnLoadData() {\r\n if (!this.State.FilterValues.OrganizationID) {\r\n this.State.Balances = undefined;\r\n return;\r\n }\r\n\r\n const params = this.GetParams();\r\n params.IsLoadDetails = true;\r\n params.IsHideZeroBalances = this.State.IsHideZeroBalances;\r\n\r\n this.Do(this.balanceEndpoint.ListForBalanceReport(params), false,\r\n res => this.ProcessData(res.Entities, 'AccountName', 'BookingAccountName'));\r\n }\r\n\r\n protected override OnBeforeProcessData(arr: any[]): void {\r\n arr.sort((a, b) => {\r\n const aSubtypeSortOrder = (this.LISTITEMX('BookingAccountSubTypes', a.Subtype) as any).SortOrder;\r\n const bSubtypeSortORder = (this.LISTITEMX('BookingAccountSubTypes', b.Subtype) as any).SortOrder;\r\n if (aSubtypeSortOrder > bSubtypeSortORder) return 1;\r\n if (aSubtypeSortOrder === bSubtypeSortORder) {\r\n if (a.CC4Digits > b.CC4Digits) return 1;\r\n if (a.CC4Digits === b.CC4Digits) {\r\n return ((this.LISTITEMX('Currencies', a.Currency) as any).SortOrder >\r\n (this.LISTITEMX('Currencies', b.Currency) as any).SortOrder) ? 1 : -1;\r\n }\r\n return -1;\r\n }\r\n return -1;\r\n });\r\n }\r\n\r\n protected override OnAfterProcessData() {\r\n this.State.TotalBalanceAmount = 0;\r\n this.State.Currency = (this.LISTITEMX('Currencies', this.State.FilterValues.Currency) as any)?.Symbol;\r\n this.State.Balances.forEach(companyBalance => {\r\n this.State.TotalBalanceAmount += _.sumBy(companyBalance.items?.filter(x => x.ItemID !== -1), 'Amount');\r\n });\r\n }\r\n\r\n protected override OnGetCustomFilterSettings(): FilterSettings {\r\n const settings: any = this.baseReportService.GetBaseFilterSettings();\r\n settings.BookingAccountSubtype = {\r\n IsVisible: true,\r\n IsMultiple: true, IsSearchDisabled: true\r\n };\r\n return settings as FilterSettings;\r\n }\r\n\r\n protected override OnGetGroupBalances(groupBalances: any, subGroupKey?: string) {\r\n const nestedGroupedData = _.mapValues(groupBalances, (groupArray) => {\r\n return _.groupBy(groupArray, subGroupKey); //(item) => `${item.Subtype} ${item.Currency}`\r\n });\r\n const transformedData = _.map(nestedGroupedData, (subGroups, group) => {\r\n const items = _.map(subGroups, (items, subGroup) => {\r\n return {\r\n EntryID: items[0].EntryID,\r\n Subtype: items[0].Subtype,\r\n BookingAccountID: items[0].BookingAccountID,\r\n AccountID: items[0].AccountID,\r\n CompanyID: items[0].CompanyID,\r\n ItemID: group + '_' + subGroup,\r\n items: this.PrepareLeafData(items),\r\n Depth: 1,\r\n Title: subGroup,\r\n Amount: _.sumBy(items, 'BalanceAmount'),\r\n CurrencySymbol: (this.LISTITEMX('Currencies', this.State.FilterValues.Currency) as any)?.Symbol,\r\n AdditionalCurrencySymbol: this.State.FilterValues.Currency !== items[0].Currency ?\r\n (this.LISTITEMX('Currencies', items[0].Currency) as any)?.Symbol : null,\r\n Notes: items.find(x => x.Notes)?.Notes ? { Text: items.find(x => x.Notes)?.Notes, LabelType: LabelType.Error } : null\r\n };\r\n });\r\n return {\r\n ItemID: group + '_' + items[0].EntryID,\r\n items: items,\r\n Depth: 0,\r\n Title: group,\r\n Amount: _.sumBy(items, 'Amount'),\r\n CurrencySymbol: items[0].CurrencySymbol,\r\n Icon: this.GetBankIcon(subGroups[Object.keys(subGroups)[0]][0].Bank)\r\n } as any;\r\n });\r\n transformedData.unshift({\r\n ItemID: -1,\r\n Title: this.RC('listHeaderBalanceReport'),\r\n Amount: _.sumBy(transformedData, 'Amount'),\r\n CurrencySymbol: (this.LISTITEMX('Currencies', this.State.FilterValues.Currency) as any)?.Symbol,\r\n Class: 'list-item-header'\r\n });\r\n return transformedData;\r\n }\r\n\r\n PrepareLeafData(items: BalanceView[]) {\r\n const leafs = [];\r\n if (items.length > 0) {\r\n items.forEach(item => {\r\n const details = this.subTypeDetails.get(item.Subtype);\r\n if (details) {\r\n leafs.push(...this.GetLeafsData(item, details));\r\n }\r\n });\r\n }\r\n return leafs;\r\n }\r\n\r\n private GetLeafsData(item: BalanceView, viewKey: string) {\r\n return item[viewKey].map(d => ({\r\n ...d,\r\n ItemID: d.Name + '_' + d.LineID,\r\n Title: d.Name,\r\n Amount: d.BalanceActual,\r\n CurrencySymbol: (this.LISTITEMX('Currencies', this.State.FilterValues.Currency) as any)?.Symbol,\r\n AdditionalCurrencySymbol: this.State.FilterValues.Currency !== d.Currency ?\r\n (this.LISTITEMX('Currencies', d.Currency) as any)?.Symbol : null,\r\n Depth: 2,\r\n Subtype: item.Subtype,\r\n Notes: null\r\n }));\r\n }\r\n\r\n OnItemClicked = (event: RowClickEvent) => {\r\n if (event.data.Depth === 1 && [EnumBookingAccountSubtypes.Current, EnumBookingAccountSubtypes.CreditCard]\r\n .indexOf(event.data.Subtype) >= 0) {\r\n this.LoadTransactions(event);\r\n }\r\n if (event.data.Depth == 2) {\r\n this.State.SelectedTransaction = event.data;\r\n this.State.ItemDetailsHeaderText = `${event.data.AccountName} - ${event.data.Name}`;\r\n this.State.ItemDetailsHeaderIcon = this.GetBankIcon(event.data.Bank);\r\n switch (event.data.Subtype) {\r\n case EnumBookingAccountSubtypes.Deposits:\r\n this.State.ItemDetails = this.baseReportService.GetDetailsDeposProperties(event.data);\r\n break;\r\n case EnumBookingAccountSubtypes.Stocks:\r\n this.State.ItemDetails = this.baseReportService.GetDetailsStocksProperties(event.data);\r\n break;\r\n case EnumBookingAccountSubtypes.Loans:\r\n this.State.ItemDetails = this.baseReportService.GetDetailsLoansProperties(event.data);\r\n break;\r\n case EnumBookingAccountSubtypes.Guarantee:\r\n this.State.ItemDetails = this.baseReportService.GetDetailsGuaranteesProperties(event.data);\r\n break;\r\n case EnumBookingAccountSubtypes.Current:\r\n case EnumBookingAccountSubtypes.CreditCard:\r\n this.State.ItemDetails = this.baseReportService.GetTransactionProperties(event.data);\r\n this.State.ItemDetailsHeaderText = event.data.BookingAccountFullName;\r\n break;\r\n }\r\n if (event.data.Subtype) {\r\n const contentParams = new BottomSheetContentParams();\r\n contentParams.Class = 'no-padding';\r\n contentParams.Content = this.detailsViewInfo;\r\n contentParams.Title = this.State.SelectedCompany.text;\r\n this.bottomSheetService.Show(contentParams);\r\n }\r\n }\r\n };\r\n\r\n LoadTransactions(event: RowClickEvent) {\r\n const params = new TransactionReportParams();\r\n params.OrganizationID = this.State.FilterValues.OrganizationID;\r\n params.BookingAccounts = [event.data.BookingAccountID];\r\n params.DateFrom = DateHelpers.AddMonth(this.State.FilterValues.Date, -1);\r\n params.DateTo = this.State.FilterValues.Date;\r\n params.Accounts = [event.data.AccountID];\r\n params.Companies = [event.data.CompanyID];\r\n\r\n\r\n this.Do(this.transactionEndpoint.ListEx(params), false, (response) => {\r\n const node = Utils.SearchTree(this.State.SelectedCompany, event.data.ItemID, 'ItemID');\r\n if (response.Entities?.length > 0) {\r\n node.items = [];\r\n response.Entities.sort((a, b) => a.EntryID > b.EntryID ? -1 : 1).forEach(transaction => {\r\n node.items.push({\r\n ...transaction,\r\n ItemID: transaction.EntryID,\r\n Notes: transaction.Notes1,\r\n Title: this.formatDatePipe.transform(transaction.Date),\r\n Amount: transaction.Credit ?? -transaction.Debit,\r\n AdditionalAmount: transaction.Balance,\r\n CurrencySymbol: (this.LISTITEMX('Currencies', transaction.Currency) as any).Symbol,\r\n AdditionalCurrencySymbol: (this.LISTITEMX('Currencies', transaction.OriginalCurrency) as any)?.Symbol ??\r\n (this.LISTITEMX('Currencies', transaction.Currency) as any).Symbol,\r\n Depth: 2,\r\n Subtype: transaction.BookingAccountSubtype\r\n });\r\n });\r\n } else {\r\n node.HasNoItems = true;\r\n }\r\n event.component.refresh();\r\n });\r\n }\r\n\r\n ItemIsCurrentOrCardTransaction(item: any) {\r\n return item.Subtype === EnumBookingAccountSubtypes.Current || item.Subtype === EnumBookingAccountSubtypes.CreditCard;\r\n }\r\n\r\n ShowCheques() {\r\n this.Do(this.chequeEndpoint.ListChequesWithImages(this.State.SelectedTransaction.EntryID), false, cheques => {\r\n this.State.ChequeDetails = [];\r\n this.State.ChequeDetails.push(...cheques.Entities);\r\n this.State.ShowChequeDialog = true;\r\n });\r\n }\r\n\r\n OpenHistoryChart() {\r\n this.State.AvailableHistoryChartTypes = this.State.HistoryChartTypes.filter(x => this.State.SelectedTransaction[x.Value]);\r\n if (this.State.AvailableHistoryChartTypes?.length === 1) {\r\n const filterType = this.State.AvailableHistoryChartTypes[0].Value;\r\n this.ShowHistoryChart(filterType);\r\n } else {\r\n const contentParams = new BottomSheetContentParams();\r\n contentParams.Class = 'no-padding';\r\n contentParams.Content = this.historyChartOptions;\r\n contentParams.Title = this.RC('lblViewHistoryBy');\r\n this.bottomSheetService.Show(contentParams);\r\n }\r\n }\r\n\r\n ShowHistoryChart(filterType: string) {\r\n const content = this.GetHistoryChartParams(this.State.SelectedTransaction, filterType);\r\n this.bottomSheetService.Show(content);\r\n }\r\n}","export default \"\\r\\n\\t\\r\\n\\t\\r\\n\\r\\n\\r\\n\\r\\n\\t\\r\\n\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\t\\t\\r\\n\\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
\\r\\n\\t
\\r\\n
\\r\\n\\r\\n\\r\\n\\t\\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\\r\\n\\t\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\t\\r\\n\\r\\n\\r\\n\\r\\n\\t
\\r\\n\\t\\t
\\r\\n\\t\\t\\t{{option.Text}}\\r\\n\\t\\t
\\r\\n\\t
\\r\\n
\";","import { Component, TemplateRef, ViewChild } from '@angular/core';\r\nimport { EnumBalanceDetailsReportModes } from '@kraken/_client.enums';\r\nimport { Globals } from '@kraken/_globals';\r\nimport { BalanceEndpoint } from '@kraken/_proxy/endpoints/balance.endpoint';\r\nimport { EnumBookingAccountSubtypes } from '@kraken/_proxy/enums';\r\nimport { BalanceReportParams } from '@kraken/_proxy/params/balancereport.param';\r\nimport { BalanceDetailDepositsView } from '@kraken/_proxy/views/balancedetaildeposits.view';\r\nimport { BalanceDetailLoansView } from '@kraken/_proxy/views/balancedetailloans.view';\r\nimport { BalanceDetailStocksView } from '@kraken/_proxy/views/balancedetailstocks.view';\r\nimport { BalanceDetailGuaranteesView } from '@kraken/_proxy/views/balancedetailguarantees.view';\r\nimport { FilterSettings } from '@kraken/components/filter/filter.component';\r\nimport { BaseMobileReport, BaseMobileReportState } from '@kraken/mobile/common/base-report/base-mobile-report';\r\nimport { ItemDetails, ReportNestedListItem } from '@kraken/mobile/common/models';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BottomSheetContentParams, BottomSheetService } from '@m4u-angular/core/framework/bottom-sheet.service';\r\nimport { formatDate, formatNumber } from 'devextreme/localization';\r\nimport { RowClickEvent } from 'devextreme/ui/tree_list';\r\nimport { BaseReportService } from '@kraken/mobile/services/base-report.service';\r\nimport * as _ from 'lodash';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\n\r\nclass State extends BaseMobileReportState {\r\n Mode: EnumBalanceDetailsReportModes;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'mobile-balance-details-report',\r\n templateUrl: './mobile-balance-details-report.component.html',\r\n styleUrls: ['../../css/mobile-common.scss', './mobile-balance-details-report.component.scss']\r\n})\r\nexport class MobileBalanceDetailsReportComponent extends BaseMobileReport {\r\n\r\n protected reportGrid: BaseGridComponent;\r\n\r\n constructor(\r\n A: ServiceBagService,\r\n private baseReportService: BaseReportService,\r\n private balanceEndpoint: BalanceEndpoint,\r\n private bottomSheetService: BottomSheetService,\r\n private screenService: ScreenService\r\n ) {\r\n super(A, 'MobileDepositReportComponent', State);\r\n }\r\n\r\n protected override InitStateFromQuery() {\r\n super.InitStateFromQuery();\r\n if (this.QueryParams?.Mode) {\r\n this.State.Mode = +this.QueryParams?.Mode;\r\n }\r\n }\r\n\r\n protected override OnGetCustomFilterSettings(): FilterSettings {\r\n const settings: any = this.baseReportService.GetBaseFilterSettings();\r\n settings.Account.Params = () => {\r\n return { BookingAccountSubtypes: this.GetSubtypes() };\r\n };\r\n settings.BookingAccount.Params = () => {\r\n return { BookingAccountSubtypes: this.GetSubtypes() };\r\n };\r\n settings.CurrencyFilter.Default = () => {\r\n return [Globals.OrganizationDefaultCurrency || 'ILS'];\r\n };\r\n\r\n return settings as FilterSettings;\r\n }\r\n\r\n protected OnLoadData() {\r\n if (!this.State.FilterValues.OrganizationID) {\r\n this.State.Balances = undefined;\r\n return;\r\n }\r\n\r\n const params = this.GetParams();\r\n params.IsLoadDetails = true;\r\n\r\n switch (this.State.Mode) {\r\n case EnumBalanceDetailsReportModes.Deposits:\r\n this.Do(this.balanceEndpoint.ListDepos(params), false, res => this.ProcessData(res.Entities, 'AccountName'));\r\n break;\r\n case EnumBalanceDetailsReportModes.Stocks:\r\n this.Do(this.balanceEndpoint.ListStocks(params), false, res => this.ProcessData(res.Entities, 'AccountName'));\r\n break;\r\n case EnumBalanceDetailsReportModes.Loans:\r\n this.Do(this.balanceEndpoint.ListLoans(params), false, res => this.ProcessData(res.Entities, 'AccountName'));\r\n break;\r\n case EnumBalanceDetailsReportModes.Guarantees:\r\n this.Do(this.balanceEndpoint.ListGuarant(params), false, res => this.ProcessData(res.Entities, 'AccountName'));\r\n break;\r\n }\r\n }\r\n\r\n OnGetGroupBalances(data: any) {\r\n return _.map(data, (items, group) => {\r\n return {\r\n ItemID: group + '_' + items[0].EntryID,\r\n items: items.map(item => ({\r\n ...item,\r\n ItemID: item.EntryID + '_' + item.LineID,\r\n Title: item.Name,\r\n Amount: item.BalanceActual,\r\n AdditionalAmount: this.State.FilterValues.Currency === item.Currency ? null : item.BalanceOriginal,\r\n CurrencySymbol: (this.LISTITEMX('Currencies', this.State.FilterValues.Currency) as any)?.Symbol,\r\n AdditionalCurrencySymbol: this.State.FilterValues.Currency === item.Currency ? null :\r\n (this.LISTITEMX('Currencies', item.Currency) as any).Symbol,\r\n Depth: 2,\r\n Notes: this.RenderNotes(item)\r\n })),\r\n Depth: 0,\r\n Title: group,\r\n Amount: _.sumBy(items, 'BalanceActual'),\r\n CurrencySymbol: (this.LISTITEMX('Currencies', this.State.FilterValues.Currency) as any)?.Symbol,\r\n ...items[0],\r\n Notes: null,\r\n Notes1: null,\r\n Notes2: null,\r\n Icon: this.GetBankIcon(items[0].Bank)\r\n };\r\n });\r\n }\r\n\r\n protected override OnGetListHeader() {\r\n return {\r\n ItemID: -1,\r\n Title: this.RC('lblAccountList'),\r\n Class: 'list-item-header'\r\n };\r\n }\r\n\r\n private GetSubtypes() {\r\n switch (this.State.Mode) {\r\n case EnumBalanceDetailsReportModes.Deposits: return [EnumBookingAccountSubtypes.Deposits];\r\n case EnumBalanceDetailsReportModes.Loans: return [EnumBookingAccountSubtypes.Loans];\r\n case EnumBalanceDetailsReportModes.Stocks: return [EnumBookingAccountSubtypes.Stocks];\r\n case EnumBalanceDetailsReportModes.Guarantees: return [EnumBookingAccountSubtypes.Guarantee];\r\n default: return [];\r\n }\r\n }\r\n\r\n public OnInitTitle() {\r\n switch (this.State.Mode) {\r\n case EnumBalanceDetailsReportModes.Deposits:\r\n return this.RC('Pages.mobile_deposit_report');\r\n case EnumBalanceDetailsReportModes.Stocks:\r\n return this.RC('Pages.mobile_stock_report');\r\n case EnumBalanceDetailsReportModes.Loans:\r\n return this.RC('Pages.mobile_loan_report');\r\n case EnumBalanceDetailsReportModes.Guarantees:\r\n return this.RC('Pages.mobile_guarant_report');\r\n }\r\n }\r\n\r\n RenderNotes(item: any) {\r\n let Notes = '';\r\n if (this.State.Mode === EnumBalanceDetailsReportModes.Deposits || this.State.Mode === EnumBalanceDetailsReportModes.Loans) {\r\n Notes += item.InterestRate ?\r\n this.screenService.IsRTL() ?\r\n `% ${formatNumber(item.InterestRate, this.F.NumberRate)}` :\r\n `${formatNumber(item.InterestRate, this.F.NumberRate)} %`\r\n : null;\r\n if (this.State.Mode === EnumBalanceDetailsReportModes.Deposits) {\r\n Notes = Notes + ` | ${this.RC('lblEndDate')}: ${formatDate(item.EndDate, this.F.DateFormatShort) ?? ''}`;\r\n }\r\n }\r\n return Notes;\r\n }\r\n\r\n OnItemClicked = (event: RowClickEvent) => {\r\n if (event.data.Depth === 2) {\r\n switch (this.State.Mode) {\r\n case EnumBalanceDetailsReportModes.Deposits:\r\n this.State.ItemDetails =\r\n this.baseReportService.GetDetailsDeposProperties(event.data as BalanceDetailDepositsView & ReportNestedListItem);\r\n break;\r\n case EnumBalanceDetailsReportModes.Stocks:\r\n this.State.ItemDetails =\r\n this.baseReportService.GetDetailsStocksProperties(event.data as BalanceDetailStocksView & ReportNestedListItem);\r\n break;\r\n case EnumBalanceDetailsReportModes.Loans:\r\n this.State.ItemDetails =\r\n this.baseReportService.GetDetailsLoansProperties(event.data as BalanceDetailLoansView & ReportNestedListItem);\r\n break;\r\n case EnumBalanceDetailsReportModes.Guarantees:\r\n this.State.ItemDetails =\r\n this.baseReportService.GetDetailsGuaranteesProperties(event.data as BalanceDetailGuaranteesView & ReportNestedListItem);\r\n break;\r\n }\r\n this.State.ItemDetailsHeaderText = `${event.data.AccountName} - ${event.data.Name}`;\r\n this.State.ItemDetailsHeaderIcon = this.GetBankIcon(event.data.Bank);\r\n const contentParams = new BottomSheetContentParams();\r\n contentParams.Class = 'no-padding';\r\n contentParams.Content = this.detailsViewInfo;\r\n contentParams.Title = this.State.SelectedCompany.text;\r\n this.bottomSheetService.Show(contentParams);\r\n }\r\n };\r\n}","export default \"\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\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, OnInit, Output, ViewChild } from '@angular/core';\r\nimport { DxDateBoxComponent } from 'devextreme-angular';\r\n\r\n@Component({\r\n selector: 'mobile-date-picker',\r\n templateUrl: './mobile-date-picker.component.html',\r\n styleUrls: ['./mobile-date-picker.component.scss']\r\n})\r\nexport class MobileDatePickerComponent {\r\n\r\n @ViewChild('datebox') dateBox: DxDateBoxComponent;\r\n\r\n @Input() MaxDate: Date;\r\n @Input() SelectedDate!: Date;\r\n @Output() SelectedDateChange = new EventEmitter();\r\n\r\n calendarDropDownBtn = {\r\n icon: 'spindown',\r\n stylingMode: 'text',\r\n onClick: () => {\r\n const sbInstance = this.dateBox.instance;\r\n sbInstance.option('opened') ? sbInstance.close() : sbInstance.open();\r\n }\r\n };\r\n\r\n calendarBtn = {\r\n icon: 'assets/projects/kraken/mob-calendar-icon.svg',\r\n stylingMode: 'text',\r\n onClick: () => {\r\n const sbInstance = this.dateBox.instance;\r\n sbInstance.option('opened') ? sbInstance.close() : sbInstance.open();\r\n }\r\n };\r\n\r\n constructor() { }\r\n\r\n OnDateChanged = (event: any) => {\r\n this.SelectedDateChange.emit(event.value);\r\n };\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\";","import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\r\nimport { DxDateRangeBoxComponent } from 'devextreme-angular';\r\n\r\n@Component({\r\n\tselector: 'mobile-date-range-picker',\r\n\ttemplateUrl: './mobile-date-range-picker.component.html',\r\n\tstyleUrls: ['./mobile-date-range-picker.component.scss']\r\n})\r\nexport class MobileDateRangePickerComponent {\r\n\r\n\t@Input() MaxDate: Date;\r\n\t@Input() SelectedRange!: [Date, Date];\r\n\t@Input() DisplayFormat: string;\r\n\t@Output() SelectedRangeChange = new EventEmitter<[Date, Date]>();\r\n\r\n\t@ViewChild(\"dateRangebox\") dateRangeBox: DxDateRangeBoxComponent;\r\n\r\n\tcalendarBtn = {\r\n\t\ticon: \"assets/projects/kraken/mob-calendar-icon.svg\",\r\n\t\tstylingMode: \"text\",\r\n\t\tonClick: () => {\r\n\t\t\tconst sbInstance = this.dateRangeBox.instance;\r\n\t\t\tsbInstance.option(\"opened\") ? sbInstance.close() : sbInstance.open();\r\n\t\t}\r\n\t};\r\n\tcalendarDropDownBtn = {\r\n\t\ticon: \"spindown\",\r\n\t\tstylingMode: \"text\",\r\n\t\tonClick: () => {\r\n\t\t\tconst sbInstance = this.dateRangeBox.instance;\r\n\t\t\tsbInstance.option(\"opened\") ? sbInstance.close() : sbInstance.open();\r\n\t\t}\r\n\t};\r\n\r\n\tconstructor() { }\r\n\r\n\tOnDateRangeChanged = (event: any) => {\r\n\t\tthis.SelectedRangeChange.emit(event.value);\r\n\t}\r\n\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\";","import { Component, TemplateRef, ViewChild } from '@angular/core';\r\nimport { Globals } from '@kraken/_globals';\r\nimport { ChequeEndpoint } from '@kraken/_proxy/endpoints/cheque.endpoint';\r\nimport { TransactionEndpoint } from '@kraken/_proxy/endpoints/transaction.endpoint';\r\nimport { EnumBookingAccountSubtypes } from '@kraken/_proxy/enums';\r\nimport { TransactionReportParams } from '@kraken/_proxy/params/transactionreport.param';\r\nimport { ChequeView } from '@kraken/_proxy/views/cheque.view';\r\nimport { TransactionView } from '@kraken/_proxy/views/transaction.view';\r\nimport { FilterSettings, FilterValues } from '@kraken/components/filter/filter.component';\r\nimport { BaseMobileReport, BaseMobileReportState } from '@kraken/mobile/common/base-report/base-mobile-report';\r\nimport { MobileHistoryChartComponent } from '@kraken/mobile/common/mobile-history-chart/mobile-history-chart.component';\r\nimport { ReportNestedListItem } from '@kraken/mobile/common/models';\r\nimport { BaseReportService } from '@kraken/mobile/services/base-report.service';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseState, GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BottomSheetContentParams, BottomSheetService } from '@m4u-angular/core/framework/bottom-sheet.service';\r\nimport { FrameworkService } from '@m4u-angular/core/framework/framework.service';\r\nimport { formatDate } from 'devextreme/localization';\r\nimport { RowClickEvent } from 'devextreme/ui/tree_list';\r\nimport * as _ from 'lodash';\r\n\r\nclass State extends BaseMobileReportState {\r\n SelectedDateRange: [Date, Date] = [Globals.ThirtyDaysAgoDate, Globals.Yesterday];\r\n SelectedTransaction: TransactionView & ReportNestedListItem;\r\n ShowChequeDialog = false;\r\n ChequeDetails: ChequeView[] = [];\r\n IsDebitOnly: boolean;\r\n IsCreditOnly: boolean;\r\n HistoryChartTypes: GenericListEntity[];\r\n AvailableHistoryChartTypes: GenericListEntity[];\r\n}\r\n\r\n@Component({\r\n selector: 'app-mobile-transactions-report',\r\n templateUrl: './mobile-transactions-report.component.html',\r\n styleUrls: ['../../css/mobile-common.scss', './mobile-transactions-report.component.scss']\r\n})\r\nexport class MobileTransactionsReportComponent extends BaseMobileReport {\r\n protected reportGrid: BaseGridComponent;\r\n\r\n @ViewChild('historyChartOptions') historyChartOptions: TemplateRef;\r\n\r\n constructor(\r\n A: ServiceBagService,\r\n private baseReportService: BaseReportService,\r\n private transactionEndpoint: TransactionEndpoint,\r\n private frameworkService: FrameworkService,\r\n private bottomSheetService: BottomSheetService,\r\n private chequeEndpoint: ChequeEndpoint) {\r\n super(A, 'TransactionReportComponent', State);\r\n }\r\n\r\n protected OnLoadData() {\r\n if (!this.State.FilterValues.OrganizationID) {\r\n this.State.Balances = undefined;\r\n return;\r\n }\r\n\r\n const params = this.GetParams();\r\n params.IsDebitOnly = this.State.IsDebitOnly;\r\n params.IsCreditOnly = this.State.IsCreditOnly;\r\n this.Do(this.transactionEndpoint.ListEx(params), false, res => this.ProcessData(res.Entities, 'BookingAccountFullName'));\r\n this.State.HistoryChartTypes = this.LIST('ClassificarionRuleFieldTypes');\r\n }\r\n\r\n override InitStateFromQuery() {\r\n super.InitStateFromQuery();\r\n\r\n if (Object.entries(this.QueryParams).length <= 0) return;\r\n\r\n if (this.QueryParams.IsDebitOnly) this.State.IsDebitOnly = this.QueryParams.IsDebitOnly;\r\n if (this.QueryParams.IsCreditOnly) this.State.IsCreditOnly = this.QueryParams.IsCreditOnly;\r\n }\r\n\r\n protected OnGetCustomFilterSettings(): FilterSettings {\r\n return {\r\n Company: { IsVisible: true, IsMultiple: true, IsSearchDisabled: true },\r\n Account: {\r\n IsVisible: true, IsMultiple: true, IsSearchDisabled: true, Params:\r\n { BookingAccountSubtypes: [EnumBookingAccountSubtypes.Current, EnumBookingAccountSubtypes.CreditCard] }\r\n },\r\n BookingAccount: {\r\n IsVisible: true, IsMultiple: true, IsSearchDisabled: true, Params:\r\n { BookingAccountSubtypes: [EnumBookingAccountSubtypes.Current, EnumBookingAccountSubtypes.CreditCard] }\r\n },\r\n Bank: { IsVisible: true, IsMultiple: true, IsSearchDisabled: true },\r\n BookingAccountSubtype: { IsVisible: true, IsMultiple: true, IsSearchDisabled: true },\r\n CurrencyFilter: { IsVisible: true, IsMultiple: true, IsSearchDisabled: true },\r\n AccountGroup: { IsVisible: true, IsMultiple: true, IsSearchDisabled: true },\r\n Category: { IsVisible: true, IsMultiple: true, IsSearchDisabled: true },\r\n\r\n IsDatesVisible: true,\r\n IsAmountsVisible: true,\r\n MaxReportDate: Globals.Yesterday,\r\n IsTransactionBookingAccountsSubtypes: true\r\n } as FilterSettings;\r\n }\r\n\r\n protected override OnResetFilterValues() {\r\n super.OnResetFilterValues();\r\n this.State.FilterValues.DateFrom = Globals.ThirtyDaysAgoDate;\r\n this.State.FilterValues.DateTo = Globals.Yesterday;\r\n }\r\n\r\n OnGetGroupBalances(data: any) {\r\n return _.map(data, (items, group) => {\r\n return {\r\n ItemID: group + '_' + items[0].EntryID,\r\n items: items.map(item => ({\r\n ...item,\r\n ItemID: item.EntryID + '_' + item.LineID,\r\n Title: formatDate(item.Date, this.frameworkService.CompanyInfo.DateFormatShort),\r\n Notes: item.Notes1,\r\n Notes2: item.Notes2,\r\n Amount: item.Credit ?? -item.Debit,\r\n AdditionalAmount: item.Balance,\r\n CurrencySymbol: (this.LISTITEMX('Currencies', item.Currency) as any).Symbol,\r\n AdditionalCurrencySymbol: (this.LISTITEMX('Currencies', item.Currency) as any).Symbol,\r\n Depth: 2\r\n })),\r\n Depth: 0,\r\n Title: items[0].AccountName,\r\n Notes: items[0].BookingAccountName,\r\n Icon: this.GetBankIcon(items[0].Bank)\r\n };\r\n });\r\n }\r\n\r\n protected override OnBeforeProcessData(arr: any[]): void {\r\n arr.sort((a, b) => {\r\n return a.EntryID > b.EntryID ? -1 : 1;\r\n });\r\n }\r\n\r\n protected override OnGetListHeader() {\r\n return {\r\n ItemID: -1,\r\n Title: this.RC('lblAccountList'),\r\n Class: 'list-item-header'\r\n };\r\n }\r\n\r\n OnItemClicked(event: RowClickEvent) {\r\n if (event.data.Depth === 2) {\r\n this.State.SelectedTransaction = event.data as TransactionView & ReportNestedListItem;\r\n this.State.ItemDetails = this.baseReportService.GetTransactionProperties(this.State.SelectedTransaction);\r\n this.State.ItemDetailsHeaderText = event.data.BookingAccountFullName;\r\n this.State.ItemDetailsHeaderIcon = this.GetBankIcon(event.data.Bank);\r\n const contentParams = new BottomSheetContentParams();\r\n contentParams.Class = 'no-padding';\r\n contentParams.Content = this.detailsViewInfo;\r\n contentParams.Title = this.State.SelectedCompany.text;\r\n this.bottomSheetService.Show(contentParams);\r\n }\r\n }\r\n\r\n OnSelectedRangeChange(event: [Date, Date]) {\r\n this.State.FilterValues.DateFrom = event[0];\r\n this.State.FilterValues.DateTo = event[1];\r\n this.OnLoadData();\r\n }\r\n\r\n OnFilterValueChange(filterValues: FilterValues) {\r\n this.State.SelectedDateRange = [filterValues.DateFrom, filterValues.DateTo];\r\n }\r\n\r\n ShowCheques() {\r\n this.Do(this.chequeEndpoint.ListChequesWithImages(this.State.SelectedTransaction.EntryID), false, cheques => {\r\n this.State.ChequeDetails = [];\r\n this.State.ChequeDetails.push(...cheques.Entities);\r\n this.State.ShowChequeDialog = true;\r\n });\r\n }\r\n\r\n OpenHistoryChart() {\r\n this.State.AvailableHistoryChartTypes = this.State.HistoryChartTypes.filter(x => this.State.SelectedTransaction[x.Value]);\r\n if (this.State.AvailableHistoryChartTypes?.length === 1) {\r\n const filterType = this.State.AvailableHistoryChartTypes[0].Value;\r\n this.ShowHistoryChart(filterType);\r\n } else {\r\n const contentParams = new BottomSheetContentParams();\r\n contentParams.Class = 'no-padding';\r\n contentParams.Content = this.historyChartOptions;\r\n contentParams.Title = this.RC('lblViewHistoryBy');\r\n this.bottomSheetService.Show(contentParams);\r\n }\r\n }\r\n\r\n ShowHistoryChart(filterType: string) {\r\n const content = this.GetHistoryChartParams(this.State.SelectedTransaction, filterType);\r\n this.bottomSheetService.Show(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\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n
\\r\\n
\\r\\n {{option.Text}}\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n \\r\\n\";","import { Component } from '@angular/core';\r\nimport { Globals } from '@kraken/_globals';\r\nimport { ChequeEndpoint } from '@kraken/_proxy/endpoints/cheque.endpoint';\r\nimport { ChequeImageEndpoint } from '@kraken/_proxy/endpoints/chequeimage.endpoint';\r\nimport { FutureChequeImageEndpoint } from '@kraken/_proxy/endpoints/futurechequeimage.endpoint';\r\nimport { EnumChequeTypes, EnumFutureChequeStatus } from '@kraken/_proxy/enums';\r\nimport { ChequeListParams } from '@kraken/_proxy/params/chequelist.param';\r\nimport { ChequeView } from '@kraken/_proxy/views/cheque.view';\r\nimport { FilterSettings, FilterValues } from '@kraken/components/filter/filter.component';\r\nimport { BaseMobileReport, BaseMobileReportState } from '@kraken/mobile/common/base-report/base-mobile-report';\r\nimport { ReportNestedListItem } from '@kraken/mobile/common/models';\r\nimport { BaseReportService } from '@kraken/mobile/services/base-report.service';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { formatDate } from 'devextreme/localization';\r\nimport { RowClickEvent } from 'devextreme/ui/tree_list';\r\nimport * as _ from 'lodash';\r\n\r\nclass State extends BaseMobileReportState {\r\n SelectedDateRange: [Date, Date];\r\n CurrentTabIndex: number = 0;\r\n Cheques: ReportNestedListItem[] = [];\r\n FilteredCheques: ReportNestedListItem[] = [];\r\n ShowChequeDialog = false;\r\n ChequeDetails: ChequeView[] = [];\r\n CheckSumFrom: number;\r\n CheckSumTo: number;\r\n ShowDepositedCheques: boolean;\r\n ShowFutureCheques: boolean;\r\n SearchText = '';\r\n}\r\n\r\n@Component({\r\n selector: 'app-mobile-cheques-report',\r\n templateUrl: './mobile-cheques-report.component.html',\r\n styleUrls: ['../../css/mobile-common.scss', './mobile-cheques-report.component.scss']\r\n})\r\nexport class MobileChequesReportComponent extends BaseMobileReport {\r\n protected reportGrid: BaseGridComponent;\r\n\r\n constructor(\r\n A: ServiceBagService,\r\n protected baseReportService: BaseReportService,\r\n private chequeEndpoint: ChequeEndpoint,\r\n private chequeImageEndpoint: ChequeImageEndpoint,\r\n private futureChequeImageEndpoint: FutureChequeImageEndpoint) {\r\n super(A, 'ChequesReportComponent', State);\r\n }\r\n\r\n protected override OnInitState() {\r\n super.OnInitState();\r\n this.State.ShowDepositedCheques = true;\r\n this.State.SelectedDateRange = this.GetDefaultTimeframe();\r\n }\r\n\r\n protected OnLoadData() {\r\n if (!this.State.FilterValues.OrganizationID) {\r\n this.State.Balances = undefined;\r\n return;\r\n }\r\n\r\n const params = new ChequeListParams();\r\n params.ChequeType = this.State.CurrentTabIndex === 0 ? EnumChequeTypes.Incoming : EnumChequeTypes.Outgoing;\r\n params.ShowDepositedCheques = this.State.ShowDepositedCheques;\r\n params.ShowFutureCheques = this.State.ShowFutureCheques;\r\n\r\n params.FutureChequeParams.DateFrom = this.State.FilterValues.DateFrom;\r\n params.FutureChequeParams.DateTo = this.State.FilterValues.DateTo;\r\n params.FutureChequeParams.AmountFrom = this.State.FilterValues.AmountFrom;\r\n params.FutureChequeParams.AmountTo = this.State.FilterValues.AmountTo;\r\n params.FutureChequeParams.OrganizationID = Globals.OrganizationID;\r\n params.FutureChequeParams.Companies = this.State.FilterValues.Company as number[];\r\n params.FutureChequeParams.Accounts = this.State.FilterValues.Account as number[];\r\n params.FutureChequeParams.BookingAccounts = this.State.FilterValues.BookingAccount as number[];\r\n params.FutureChequeParams.AccountGroups = this.State.FilterValues.AccountGroup as number[];\r\n params.FutureChequeParams.LoadActive = true;\r\n\r\n params.DepositedChequeParams.DateFrom = this.State.FilterValues.DateFrom;\r\n params.DepositedChequeParams.DateTo = this.State.FilterValues.DateTo;\r\n params.DepositedChequeParams.AmountFrom = this.State.FilterValues.AmountFrom;\r\n params.DepositedChequeParams.AmountTo = this.State.FilterValues.AmountTo;\r\n params.DepositedChequeParams.OrganizationID = Globals.OrganizationID;\r\n params.DepositedChequeParams.Companies = this.State.FilterValues.Company as number[];\r\n params.DepositedChequeParams.Accounts = this.State.FilterValues.Account as number[];\r\n params.DepositedChequeParams.BookingAccounts = this.State.FilterValues.BookingAccount as number[];\r\n params.DepositedChequeParams.AccountGroups = this.State.FilterValues.AccountGroup as number[];\r\n params.DepositedChequeParams.LoadActive = true;\r\n this.Do(this.chequeEndpoint.ListForReport(params), false, res => this.ProcessData(res.Entities));\r\n }\r\n\r\n protected override ProcessData(arr: any[]) {\r\n const groupedCheques = this.GetGroupedItems(arr, (item) => `${item.CompanyName} ${item.AccountName} ${item.BookingAccountName}`);\r\n if (groupedCheques.length > 0) {\r\n this.State.Cheques = this.State.FilteredCheques = groupedCheques;\r\n } else {\r\n this.State.Cheques = this.State.FilteredCheques = [];\r\n }\r\n const firstLevelChildren = this.State.Cheques?.filter(x => x.ItemID !== -1);\r\n if (firstLevelChildren?.length === 1) {\r\n this.treeList.TreeList.instance.option('expandedRowKeys', [firstLevelChildren[0].ItemID]);\r\n } else {\r\n this.treeList.TreeList.instance.option('expandedRowKeys', []);\r\n }\r\n }\r\n\r\n protected OnGetCustomFilterSettings(): FilterSettings {\r\n const settings: any = this.baseReportService.GetBaseFilterSettings();\r\n settings.IsDateVisible = false;\r\n settings.IsDatesVisible = true;\r\n settings.IsAmountsVisible = true;\r\n delete settings.CurrencyFilter;\r\n delete settings.Bank;\r\n settings.Currency = null;\r\n return settings as FilterSettings;\r\n }\r\n\r\n protected override OnResetFilterValues() {\r\n super.OnResetFilterValues();\r\n [this.State.FilterValues.DateFrom, this.State.FilterValues.DateTo] = this.GetDefaultTimeframe();\r\n }\r\n\r\n OnGetGroupBalances(data: any) {\r\n return _.map(data, (items, group) => {\r\n return {\r\n ItemID: group + '_' + items[0].EntryID,\r\n items: items.map(item => ({\r\n ...item,\r\n ItemID: item.EntryID + '_' + item.LineID,\r\n Title: formatDate(item.TransactionDate, this.F.DateFormatLong),\r\n Notes: item.ChequeNumber,\r\n Amount: item.CheckSum,\r\n CurrencySymbol: (this.LISTITEMX('Currencies', item.Currency) as any).Symbol,\r\n Icon: this.baseReportService.GetChequeIcon(),\r\n Depth: 2\r\n })),\r\n Depth: 0,\r\n Title: items[0].CompanyName,\r\n Notes: `${items[0].AccountName} - ${items[0].BookingAccountName}`,\r\n Icon: this.GetBankIcon(items[0].BookingAccountBank)\r\n };\r\n });\r\n }\r\n\r\n protected override OnGetListHeader() {\r\n return {\r\n ItemID: -1,\r\n Title: this.RC('lblAccountList'),\r\n Class: 'list-item-header'\r\n };\r\n }\r\n\r\n protected override OnSearch(text: string) {\r\n this.State.SearchText = text;\r\n this.State.FilteredCheques = Utils.CloneObject(this.State.Cheques);\r\n if (!text) {\r\n return;\r\n }\r\n if (this.State.FilteredCheques?.length > 0) {\r\n this.State.FilteredCheques = Utils.FilterTree(this.State.FilteredCheques, 'Title,Notes,Amount', text);\r\n }\r\n }\r\n\r\n OnItemClicked(event: RowClickEvent) {\r\n if (event.data.Depth === 2) {\r\n\r\n const oCheque = (event.data as ChequeView);\r\n const endpoint = oCheque?.Source == EnumFutureChequeStatus.Future ? this.futureChequeImageEndpoint : this.chequeImageEndpoint;\r\n this.Do(endpoint.Get(oCheque.ChequeImageID), false, (response) => {\r\n this.State.ChequeDetails = [\r\n {\r\n ...oCheque,\r\n Image: response.Entity.Image1,\r\n ReverseImage: response.Entity.Image2\r\n }\r\n ];\r\n this.State.ShowChequeDialog = true;\r\n });\r\n }\r\n }\r\n\r\n OnSelectedRangeChange(event: [Date, Date]) {\r\n this.State.FilterValues.DateFrom = event[0];\r\n this.State.FilterValues.DateTo = event[1];\r\n this.OnLoadData();\r\n }\r\n\r\n OnFilterValueChange(filterValues: FilterValues) {\r\n this.State.SelectedDateRange = [filterValues.DateFrom, filterValues.DateTo];\r\n }\r\n\r\n OnTabChange() {\r\n this.State.SearchText = '';\r\n this.OnLoadData();\r\n }\r\n\r\n GetDefaultTimeframe(): [Date, Date] {\r\n return [Globals.ThirtyDaysAgoDate, Globals.Yesterday];\r\n }\r\n}","export default \"\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\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, ViewEncapsulation } from '@angular/core';\r\nimport { ChequeView } from '@kraken/_proxy/views/cheque.view';\r\n\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 {\r\n IsReversed = false;\r\n SelectedCheque: ChequeView;\r\n}\r\n\r\n@Component({\r\n selector: 'mobile-cheque-dialog',\r\n templateUrl: './mobile-cheque-dialog.component.html',\r\n styleUrls: ['./mobile-cheque-dialog.component.scss'],\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class MobileChequeDialogComponent extends BaseComponent {\r\n @Input() Cheques: ChequeView[] = [];\r\n @Input() IsVisible = false;\r\n @Output() IsVisibleChange = new EventEmitter();\r\n\r\n constructor(\r\n A: ServiceBagService,\r\n private cd: ChangeDetectorRef) {\r\n super(A, 'MobileChequeDialogComponent', State);\r\n }\r\n\r\n CloseDialog() {\r\n this.State.IsReversed = false;\r\n this.IsVisible = false;\r\n this.IsVisibleChange.emit(false);\r\n }\r\n\r\n OnValueChange(event: any) {\r\n this.State.SelectedCheque = this.Cheques.find(cheque => cheque.EntryID === event.addedItems[0].EntryID);\r\n }\r\n\r\n OnGalleryReady(event: any) {\r\n this.State.SelectedCheque = this.Cheques?.length > 0 ? this.Cheques[0] : null;\r\n this.cd.detectChanges();\r\n }\r\n\r\n ReverseCheque() {\r\n this.State.IsReversed = !this.State.IsReversed;\r\n }\r\n\r\n GetBankIcon() {\r\n const urlPathPrefix = 'assets/projects/kraken/';\r\n const bankItem = this.LISTITEMX('Banks', this.State.SelectedCheque?.BankDisplayValue) as any;\r\n return bankItem && bankItem.Icon && `${urlPathPrefix}${bankItem.Icon}`;\r\n }\r\n\r\n GetHeaderTitle() {\r\n return this.Cheques?.length > 1 ? `${this.Cheques?.length} ${this.RC('lblCheques')}` : '';\r\n }\r\n\r\n GetChequeImage(item: ChequeView) {\r\n return this.State.IsReversed ? `data:image/png;base64,${item.ReverseImage}` : `data:image/png;base64,${item.Image}`;\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\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.SelectedCheque?.BankDisplayValue}}\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\";","export default \"\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
{{item.Title}}
\\r\\n
    \\r\\n
  • {{label}}
  • \\r\\n
\\r\\n
\\r\\n
\\r\\n
{{item.Title}}
\\r\\n
\\r\\n
{{item.Label}}
\\r\\n
{{item.FooterLabel}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n\\r\\n\\r\\n\\r\\n
\\r\\n {{option.Text}}\\r\\n
\\r\\n
\";","import { Component, ContentChild, EventEmitter, Input, OnInit, Output, TemplateRef } from '@angular/core';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\n\r\n@Component({\r\n selector: 'mobile-carousel',\r\n templateUrl: './mobile-carousel.component.html',\r\n styleUrls: ['./mobile-carousel.component.scss']\r\n})\r\nexport class MobileCarouselComponent {\r\n\r\n @ContentChild('itemContent', { static: false }) itemContentTemplateRef: TemplateRef;\r\n @Input() Items: { Key: string }[];\r\n @Input() SelectedItem: { Key: string };\r\n @Output() SelectedItemChange = new EventEmitter<{ Key: string }>();\r\n\r\n X_Down: number = null;\r\n Y_Down: number = null;\r\n\r\n constructor(private screenService: ScreenService) {\r\n }\r\n\r\n ngOnInit() {\r\n if (!this.SelectedItem) {\r\n this.SelectedItem = this.Items[0];\r\n }\r\n }\r\n\r\n GetTouches(evt) {\r\n return evt.touches ||\r\n evt.originalEvent.touches;\r\n }\r\n\r\n OnTouchStart(event: any) {\r\n const firstTouch = this.GetTouches(event)[0];\r\n this.X_Down = firstTouch.clientX;\r\n this.Y_Down = firstTouch.clientY;\r\n }\r\n\r\n OnTouchMove(event: any) {\r\n if (!this.X_Down || !this.Y_Down) {\r\n return;\r\n }\r\n\r\n const xUp = event.touches[0].clientX;\r\n const yUp = event.touches[0].clientY;\r\n\r\n const xDiff = this.X_Down - xUp;\r\n const yDiff = this.Y_Down - yUp;\r\n\r\n if (Math.abs(xDiff) > Math.abs(yDiff)) {\r\n const currentIndex = this.Items.findIndex(x => x.Key === this.SelectedItem.Key);\r\n if (xDiff > 0) {\r\n //right\r\n if (this.screenService.IsRTL()) {\r\n this.SwipeToPreviousItem(currentIndex);\r\n } else {\r\n this.SwipeToNextItem(currentIndex);\r\n }\r\n } else {\r\n //left\r\n if (this.screenService.IsRTL()) {\r\n this.SwipeToNextItem(currentIndex);\r\n } else {\r\n this.SwipeToPreviousItem(currentIndex);\r\n }\r\n }\r\n } else {\r\n if (yDiff > 0) {\r\n /* down swipe */\r\n } else {\r\n /* up swipe */\r\n }\r\n }\r\n /* reset values */\r\n this.X_Down = null;\r\n this.Y_Down = null;\r\n }\r\n\r\n OnItemSelection(item: any) {\r\n document.getElementById(this.SelectedItem.Key)\r\n .scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'center' });\r\n this.SelectedItemChange.emit(this.SelectedItem);\r\n }\r\n\r\n SwipeToPreviousItem(currentIndex: number) {\r\n if (currentIndex > 0) {\r\n this.SelectedItem = this.Items[currentIndex - 1];\r\n this.OnItemSelection(this.SelectedItem);\r\n }\r\n }\r\n\r\n SwipeToNextItem(currentIndex: number) {\r\n if (currentIndex < this.Items.length - 1) {\r\n this.SelectedItem = this.Items[currentIndex + 1];\r\n this.OnItemSelection(this.SelectedItem);\r\n }\r\n }\r\n\r\n}","export default \"
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\";","import { ChangeDetectorRef, Component, Input, OnInit } from '@angular/core';\r\nimport { TransactionEndpoint } from '@kraken/_proxy/endpoints/transaction.endpoint';\r\nimport { TransactionReportParams } from '@kraken/_proxy/params/transactionreport.param';\r\nimport { TransactionView } from '@kraken/_proxy/views/transaction.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 { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { formatDate, formatNumber } from 'devextreme/localization';\r\nimport * as _ from 'lodash';\r\n\r\nexport class MonthData {\r\n Month: string;\r\n Total: number;\r\n}\r\n\r\nclass State extends BaseState {\r\n ChartData: MonthData[];\r\n SelectedChartMonth: MonthData;\r\n Transactions: TransactionView[] = [];\r\n FilteredTransactions: TransactionView[] = [];\r\n IsLoading = false;\r\n}\r\n\r\n@Component({\r\n selector: 'mobile-history-chart',\r\n templateUrl: './mobile-history-chart.component.html',\r\n styleUrls: ['./mobile-history-chart.component.scss']\r\n})\r\nexport class MobileHistoryChartComponent extends BaseComponent{\r\n\r\n @Input() TransactionHistoryParams: TransactionReportParams;\r\n\r\n\r\n\r\n constructor(A: ServiceBagService, private cd: ChangeDetectorRef, private transactionEndpoint: TransactionEndpoint) {\r\n super(A, 'MobileHistoryChartComponent', State);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.State.IsLoading = true;\r\n this.Do(this.transactionEndpoint.ListEx(this.TransactionHistoryParams), false, res => {\r\n this.State.Transactions = res.Entities;\r\n this.State.ChartData = this.GetChartData();\r\n this.State.FilteredTransactions = Utils.CloneObject(this.State.Transactions);\r\n this.State.IsLoading = false;\r\n });\r\n }\r\n\r\n GetDate(transaction: TransactionView) {\r\n return formatDate(transaction.Date, this.F.DateFormatLong);\r\n }\r\n\r\n GetMonthTotal() {\r\n return `${formatNumber(this.State.SelectedChartMonth?.Total, this.F.NumberSum)} \r\n ${(this.LISTITEMX('Currencies', this.State.Transactions[0]?.Currency) as any)?.Symbol}`;\r\n }\r\n\r\n GetChartData() {\r\n const transactions = this.State.Transactions.map(t => ({ ...t, MonthAndYear: formatDate(t.Date, 'MM/yy') }));\r\n return _(transactions)\r\n .groupBy('MonthAndYear')\r\n .map(x => {\r\n return {\r\n Month: x[0].MonthAndYear,\r\n Total: _.sumBy(x, 'Amount')\r\n };\r\n })\r\n .value();\r\n }\r\n\r\n OnChartLoaded(event: any) {\r\n const point = event.component.getSeriesByPos(0)?.getAllPoints()[0];\r\n this.State.SelectedChartMonth = point.data;\r\n point.select();\r\n this.cd.detectChanges();\r\n }\r\n\r\n OnMonthSelected(event: any) {\r\n const point = event.target;\r\n this.State.SelectedChartMonth = point.data;\r\n if (point.isSelected()) {\r\n point.clearSelection();\r\n } else {\r\n point.select();\r\n }\r\n }\r\n\r\n OnSearch(searchString: string) {\r\n this.State.FilteredTransactions = this.State.Transactions\r\n .filter(t => t.Notes1?.toLowerCase().includes(searchString)\r\n || t.Reference?.toLowerCase().includes(searchString)\r\n || t.Debit?.toString().includes(searchString)\r\n || t.Credit?.toString().includes(searchString));\r\n }\r\n\r\n}","export default \"\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n {{GetDate(item)}}\\r\\n \\r\\n \\r\\n \\r\\n \\r\\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 { Globals } from '@kraken/_globals';\r\nimport { BalanceEndpoint } from '@kraken/_proxy/endpoints/balance.endpoint';\r\nimport { CashflowReportEndpoint } from '@kraken/_proxy/endpoints/cashflowreport.endpoint';\r\nimport { ChequeEndpoint } from '@kraken/_proxy/endpoints/cheque.endpoint';\r\nimport { DownloadRequestEndpoint } from '@kraken/_proxy/endpoints/downloadrequest.endpoint';\r\nimport { LoanPaymentEndpoint } from '@kraken/_proxy/endpoints/loanpayment.endpoint';\r\nimport { TransactionEndpoint } from '@kraken/_proxy/endpoints/transaction.endpoint';\r\nimport { EnumBanks, EnumBookingAccountSubtypes, EnumCashflowSummarizedAggregationLevel, EnumDashboardGroupBy, EnumSummaryLevel }\r\n from '@kraken/_proxy/enums';\r\nimport { BalanceReportParams } from '@kraken/_proxy/params/balancereport.param';\r\nimport { CashflowReportParams } from '@kraken/_proxy/params/cashflowreport.param';\r\nimport { CashflowSummarizedParams } from '@kraken/_proxy/params/cashflowsummarized.param';\r\nimport { DashboardParams } from '@kraken/_proxy/params/dashboard.param';\r\nimport { TransactionReportParams } from '@kraken/_proxy/params/transactionreport.param';\r\nimport { BalanceView } from '@kraken/_proxy/views/balance.view';\r\nimport { ChequeView } from '@kraken/_proxy/views/cheque.view';\r\nimport { TransactionView } from '@kraken/_proxy/views/transaction.view';\r\nimport { TransactionSummaryGroupView } from '@kraken/_proxy/views/transactionsummarygroup.view';\r\nimport { FilterSettings } from '@kraken/components/filter/filter.component';\r\nimport { OtpInputDialogComponent } from '@kraken/components/otp-input-dialog/otp-input-dialog.component';\r\nimport { BaseMobileReport, BaseMobileReportState } from '@kraken/mobile/common/base-report/base-mobile-report';\r\nimport { ReportNestedListItem } from '@kraken/mobile/common/models';\r\nimport { BaseReportService } from '@kraken/mobile/services/base-report.service';\r\nimport { DownloadRequestDialogComponent } from '@kraken/pages/dashboard';\r\nimport { AccessService } from '@kraken/services/access.service';\r\nimport { ContextMenuElement, ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseState, GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BottomSheetContentParams, BottomSheetService } from '@m4u-angular/core/framework/bottom-sheet.service';\r\nimport { LocalStorageService } from '@m4u-angular/core/framework/local-storage.service';\r\nimport { DateHelpers } from '@m4u-angular/core/helpers/DateHelpers';\r\nimport { formatDate, formatNumber } from 'devextreme/localization';\r\nimport { RowClickEvent } from 'devextreme/ui/tree_list';\r\nimport * as _ from 'lodash';\r\n\r\nclass State extends BaseMobileReportState {\r\n IsShowCurrentOnly = true;\r\n BalanceFilterBy: string;\r\n BalanceDetails: ReportNestedListItem[] = [];\r\n CurrentTabIndex: number = 0;\r\n Liabilities: BalanceView[];\r\n Assets: BalanceView[];\r\n TransactionsGrouped: TransactionSummaryGroupView[] = [];\r\n TransactionsGroupedList: ReportNestedListItem[] = [];\r\n TransactionsGroupedDatePeriod: string | number;\r\n TransactionsGroupOptions: any[];\r\n TransactionsGroupedFilterBy: number[];\r\n TransactionsDatePeriod: string | number;\r\n TransactionsList: any[] = [];\r\n Cards: any[] = [];\r\n SelectedTransaction: TransactionView & ReportNestedListItem;\r\n ShowChequeDialog = false;\r\n ChequeDetails: ChequeView[] = [];\r\n TransactionHistoryParams: TransactionReportParams;\r\n HistoryChartTypes: GenericListEntity[];\r\n AvailableHistoryChartTypes: GenericListEntity[];\r\n}\r\n\r\n@Component({\r\n selector: 'mobile-dashboard',\r\n templateUrl: './mobile-dashboard.component.html',\r\n styleUrls: ['../../css/mobile-common.scss', './mobile-dashboard.component.scss']\r\n})\r\nexport class MobileDashboardComponent extends BaseMobileReport {\r\n protected reportGrid: BaseGridComponent;\r\n\r\n @ViewChild(DownloadRequestDialogComponent) downloadRequestDialog: DownloadRequestDialogComponent;\r\n @ViewChild(OtpInputDialogComponent) otpInputDialog: OtpInputDialogComponent;\r\n @ViewChild('historyChartOptions') historyChartOptions: TemplateRef;\r\n\r\n constructor(A: ServiceBagService,\r\n private balanceEndpoint: BalanceEndpoint,\r\n private transactionEndpoint: TransactionEndpoint,\r\n private loanPaymentEndpoint: LoanPaymentEndpoint,\r\n private cashflowReportEndpoint: CashflowReportEndpoint,\r\n private baseReportService: BaseReportService,\r\n public downloadRequestEndpoint: DownloadRequestEndpoint,\r\n private bottomSheetService: BottomSheetService,\r\n private localStorageService: LocalStorageService,\r\n private accessService: AccessService,\r\n private chequeEndpoint: ChequeEndpoint\r\n ) {\r\n super(A, 'MobileDashboardComponent', State);\r\n this.State.BalanceFilterBy = this.LISTITEMX('DashboardGroupBy', EnumDashboardGroupBy.Currency)?.Value;\r\n this.State.TransactionsGroupOptions = this.LIST('TransactionsGroupOptions');\r\n this.State.TransactionsGroupedFilterBy = [(this.LISTITEMX('TransactionsGroupOptions', 'Credit') as any).index];\r\n this.InitStateFromLocalStorage();\r\n this.State.HistoryChartTypes = this.LIST('ClassificarionRuleFieldTypes');\r\n }\r\n\r\n InitStateFromLocalStorage() {\r\n const lastTransactionsDateCount = this.localStorageService.GetItem(this.GetSettingName('LastTransactionsDateCount'));\r\n const transactionsGroupedDatePeriod = this.localStorageService.GetItem(\r\n this.GetSettingName('LastTransactionsCategoryGroupsDateCount')\r\n );\r\n\r\n this.State.TransactionsDatePeriod = lastTransactionsDateCount\r\n ? Number(lastTransactionsDateCount)\r\n : this.LISTITEMX('LastTransactionsDateOptions', 1)?.Value;\r\n this.State.TransactionsGroupedDatePeriod = transactionsGroupedDatePeriod\r\n ? Number(transactionsGroupedDatePeriod)\r\n : this.LISTITEMX('LastTransactionsDateOptions', 1)?.Value;\r\n }\r\n\r\n protected override OnLoadData() {\r\n if (!this.State.FilterValues.OrganizationID) {\r\n this.State.Balances = undefined;\r\n return;\r\n }\r\n this.LoadBalanceData();\r\n this.LoadAssetsData();\r\n this.LoadLiabilitiesData();\r\n this.LoadGroupedTransactionsData();\r\n this.LoadTransactionsData();\r\n }\r\n\r\n protected override OnGetCustomFilterSettings(): FilterSettings {\r\n const settings: any = this.baseReportService.GetBaseFilterSettings();\r\n delete settings.CurrencyFilter;\r\n delete settings.BookingAccount;\r\n return settings as FilterSettings;\r\n }\r\n\r\n override OnInitContextMenus(): ContextMenuElement[] {\r\n return [\r\n {\r\n text: this.RC('btnDownloadUpdatedData'),\r\n visible: true,\r\n onClick: () => {\r\n this.OnDownloadRequestedData();\r\n }\r\n }\r\n ];\r\n }\r\n\r\n OnDownloadRequestedData() {\r\n this.downloadRequestDialog.ShowDialogShort(\r\n (EntryID) => {\r\n this.Do(this.downloadRequestEndpoint.DownloadBankPassUpdatedData(EntryID), true,\r\n (data) => {\r\n if (data.Entity) {\r\n this.otpInputDialog.downloadRequest = data.Entity;\r\n this.otpInputDialog.Message = data.ResponseMessage;\r\n this.otpInputDialog.ShowDialogShort((Otp) => this.ClosePage(), () => this.ClosePage());\r\n } else {\r\n this.ClosePage();\r\n }\r\n });\r\n },\r\n () => {\r\n this.ClosePage();\r\n }\r\n );\r\n }\r\n\r\n GetGeneralDashboardParams() {\r\n const params = new DashboardParams();\r\n params.OrganizationID = Globals.OrganizationID;\r\n params.Currency = this.State.FilterValues.Currency as string;\r\n params.Date = this.State.FilterValues.Date;\r\n params.Banks = this.State.FilterValues.Bank as EnumBanks[];\r\n params.Companies = this.State.FilterValues.Company as number[];\r\n params.AccountGroups = this.State.FilterValues.AccountGroup as number[];\r\n params.Accounts = this.State.FilterValues.Account as number[];\r\n params.BookingAccountSubtypes = this.State.IsShowCurrentOnly ? [EnumBookingAccountSubtypes.Current] : [];\r\n params.LoadActive = true;\r\n return params;\r\n }\r\n\r\n GetGeneralTransactionsParams(): TransactionReportParams {\r\n const params = new TransactionReportParams();\r\n params.OrganizationID = Globals.OrganizationID;\r\n params.CurrenciesFilter = [this.State.FilterValues.Currency as string];\r\n params.Banks = this.State.FilterValues.Bank as EnumBanks[];\r\n params.Companies = this.State.FilterValues.Company as number[];\r\n params.AccountGroups = this.State.FilterValues.AccountGroup as number[];\r\n params.Accounts = this.State.FilterValues.Account as number[];\r\n params.DateTo = this.State.FilterValues.Date;\r\n if (this.State.IsShowCurrentOnly) params.BookingAccountSubtypes = [EnumBookingAccountSubtypes.Current];\r\n else params.BookingAccountSubtypes = this.State.FilterValues.BookingAccountSubtype as EnumBookingAccountSubtypes[];\r\n return params;\r\n }\r\n\r\n GetCashflowReportParams() {\r\n const params = new BalanceReportParams();\r\n params.OrganizationID = this.State.FilterValues.OrganizationID;\r\n params.Companies = this.State.FilterValues.Company as number[];\r\n params.AccountGroups = this.State.FilterValues.AccountGroup as number[];\r\n params.Accounts = this.State.FilterValues.Account as number[];\r\n params.Currency = this.State.FilterValues.Currency as string;\r\n params.BookingAccounts = [];\r\n params.DateFrom = DateHelpers.AddDay(this.State.FilterValues.Date, -1);\r\n params.DateTo = DateHelpers.AddDay(this.State.FilterValues.Date, 0);\r\n if (this.State.IsShowCurrentOnly) params.BookingAccountSubtypes = [EnumBookingAccountSubtypes.Current];\r\n params.IsActiveCashflow = true;\r\n return params;\r\n }\r\n\r\n LoadBalanceData() {\r\n const params = this.GetGeneralDashboardParams();\r\n params.GroupBy = this.State.BalanceFilterBy as any;\r\n this.Do(this.balanceEndpoint.ListForDashboardByAccount(params), false,\r\n res => this.ProcessBalanceData(res.Entities));\r\n }\r\n\r\n ProcessBalanceData(balances: BalanceView[]) {\r\n this.State.TotalBalanceAmount = Math.floor(_.sumBy(balances, 'BalanceAmount'));\r\n this.State.Currency = (this.LISTITEMX('Currencies', this.State.FilterValues.Currency) as any)?.Symbol;\r\n switch (this.State.BalanceFilterBy) {\r\n case EnumDashboardGroupBy.Currency:\r\n this.State.BalanceDetails = balances.map(b => {\r\n return {\r\n ...b,\r\n ItemID: b.Currency,\r\n Title: (this.LISTITEMX('Currencies', b.Currency) as any).Text,\r\n Amount: Math.floor(b.BalanceOriginal),\r\n CurrencySymbol: (this.LISTITEMX('Currencies', b.Currency) as any)?.Symbol,\r\n Notes: b.Currency !== this.State.FilterValues.Currency ? b.CurrencyRateFormatted : null,\r\n AdditionalAmount: b.Currency !== this.State.FilterValues.Currency ? Math.floor(b.BalanceAmount) : null,\r\n AdditionalCurrencySymbol: b.Currency !== this.State.FilterValues.Currency ?\r\n (this.LISTITEMX('Currencies', this.State.FilterValues.Currency) as any)?.Symbol : null,\r\n RightIcon: this.GetArrowIcon()\r\n };\r\n });\r\n break;\r\n case EnumDashboardGroupBy.Company:\r\n this.State.BalanceDetails = balances.map(b => {\r\n return {\r\n ...b,\r\n ItemID: b.CompanyName,\r\n Title: b.CompanyName,\r\n Amount: Math.floor(b.BalanceAmount),\r\n CurrencySymbol: (this.LISTITEMX('Currencies', this.State.FilterValues.Currency) as any)?.Symbol,\r\n RightIcon: this.GetArrowIcon()\r\n };\r\n });\r\n break;\r\n case EnumDashboardGroupBy.Bank:\r\n this.State.BalanceDetails = balances.map(b => {\r\n return {\r\n ...b,\r\n ItemID: b.Bank,\r\n Title: b.BankName,\r\n Amount: Math.floor(b.BalanceAmount),\r\n CurrencySymbol: (this.LISTITEMX('Currencies', this.State.FilterValues.Currency) as any)?.Symbol,\r\n Icon: this.baseReportService.GetBankIcon(b.Bank),\r\n RightIcon: this.GetArrowIcon()\r\n };\r\n });\r\n break;\r\n case EnumDashboardGroupBy.Account:\r\n this.State.BalanceDetails = balances.map(b => {\r\n return {\r\n ...b,\r\n ItemID: b.AccountID,\r\n Title: b.AccountName,\r\n Amount: Math.floor(b.BalanceAmount),\r\n CurrencySymbol: (this.LISTITEMX('Currencies', this.State.FilterValues.Currency) as any)?.Symbol,\r\n Notes: b.CompanyName,\r\n Icon: this.baseReportService.GetBankIcon(b.Bank),\r\n RightIcon: this.GetArrowIcon()\r\n };\r\n });\r\n break;\r\n case EnumDashboardGroupBy.AccountGroup:\r\n this.State.BalanceDetails = balances.map(b => {\r\n return {\r\n ...b,\r\n ItemID: b.AccountGroupID,\r\n Title: b.AccountGroupName,\r\n Amount: Math.floor(b.BalanceAmount),\r\n CurrencySymbol: (this.LISTITEMX('Currencies', this.State.FilterValues.Currency) as any)?.Symbol,\r\n RightIcon: this.GetArrowIcon()\r\n };\r\n });\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n LoadAssetsData() {\r\n const params = this.GetGeneralDashboardParams();\r\n params.GroupBy = EnumDashboardGroupBy.BookingAccountAssetsSubtype as any;\r\n params.BookingAccountSubtypes = [];\r\n this.Do(this.balanceEndpoint.ListForDashboardByAccount(params), false,\r\n res => this.State.Assets = res.Entities);\r\n }\r\n\r\n LoadLiabilitiesData() {\r\n const params = this.GetGeneralDashboardParams();\r\n params.GroupBy = EnumDashboardGroupBy.BookingAccountLiabilitiesSubtype as any;\r\n params.BookingAccountSubtypes = [];\r\n this.Do(this.balanceEndpoint.ListForDashboardByAccount(params), false,\r\n res => {\r\n this.State.Liabilities = res.Entities;\r\n this.PrepareCards();\r\n });\r\n }\r\n\r\n LoadGroupedTransactionsData() {\r\n if (this.State.TransactionsGroupedDatePeriod) {\r\n this.localStorageService.SetItem(this.GetSettingName('LastTransactionsCategoryGroupsDateCount'),\r\n this.State.TransactionsGroupedDatePeriod as string);\r\n }\r\n const params = this.GetGeneralTransactionsParams();\r\n params.DateFrom = DateHelpers.AddDay(this.State.FilterValues.Date, - this.State.TransactionsGroupedDatePeriod + 1);\r\n this.Do(this.transactionEndpoint.GetLastTransactionsGroupedByCategory(params), false,\r\n res => this.ProcessGroupedTransactionData(res.Entities));\r\n }\r\n\r\n ProcessGroupedTransactionData(groupedTransactions: TransactionSummaryGroupView[]) {\r\n this.State.TransactionsGrouped = groupedTransactions;\r\n this.State.TransactionsGroupedList = groupedTransactions\r\n .filter(transaction => this.AreTransactionsGroupedByCredit() ? transaction.Credit : transaction.Debit)\r\n .map(transaction => {\r\n return {\r\n ...transaction,\r\n ItemID: transaction.Key,\r\n Title: transaction.Key,\r\n Amount: this.AreTransactionsGroupedByCredit() ? Math.floor(transaction.Credit) : -Math.floor(transaction.Debit),\r\n CurrencySymbol: (this.LISTITEMX('Currencies', this.State.FilterValues.Currency) as any)?.Symbol,\r\n RightIcon: this.GetArrowIcon()\r\n };\r\n });\r\n }\r\n\r\n AreTransactionsGroupedByCredit() {\r\n return this.State.TransactionsGroupedFilterBy[0] === (this.LISTITEMX('TransactionsGroupOptions', 'Credit') as any).index;\r\n }\r\n\r\n LoadTransactionsData() {\r\n const params = this.GetGeneralTransactionsParams();\r\n params.DateFrom = DateHelpers.AddDay(this.State.FilterValues.Date, - this.State.TransactionsDatePeriod + 1);\r\n if (this.State.TransactionsDatePeriod) {\r\n this.localStorageService.SetItem(this.GetSettingName('LastTransactionsDateCount'), this.State.TransactionsDatePeriod as string);\r\n }\r\n this.Do(this.transactionEndpoint.ListEx(params), false,\r\n res => {\r\n this.State.TransactionsList = _(res.Entities)\r\n .groupBy('AccountName')\r\n .map((items, group) => {\r\n return {\r\n ItemID: group + '_' + items[0].EntryID,\r\n Title: items[0].CompanyName,\r\n Depth: 0,\r\n Notes: items[0].AccountName,\r\n Icon: this.baseReportService.GetBankIcon(items[0].Bank),\r\n items: items.map(item => ({\r\n ...item,\r\n ItemID: item.EntryID,\r\n Title: formatDate(item.Date, this.F.DateFormatShort),\r\n Notes: item.Notes1,\r\n Amount: item.Credit ? Math.floor(item.Credit) : -Math.floor(item.Debit),\r\n Depth: 1,\r\n CurrencySymbol: (this.LISTITEMX('Currencies', item.Currency) as any)?.Symbol,\r\n RightIcon: this.GetArrowIcon()\r\n }))\r\n };\r\n })\r\n .value();\r\n });\r\n }\r\n\r\n PrepareCards() {\r\n this.State.Cards = [];\r\n const creditTotals = this.State.Liabilities?.find(t => t.Subtype === EnumBookingAccountSubtypes.CreditCard);\r\n\r\n if (creditTotals) {\r\n //Remove for now request 699874\r\n // this.State.Cards.push({\r\n // Title: this.RC('lblTotalCredit'),\r\n // Icon: 'assets/projects/kraken/mob-group-credit.svg',\r\n // Class: 'credit',\r\n // Amount: `${formatNumber(- Math.floor(creditTotals.BalanceAmount), this.F.NumberGeneral)} ${this.GetCurrency()}`\r\n // });\r\n }\r\n if (this.accessService.IsAllowCashflow()) {\r\n const cashflowParams = this.GetCashflowReportParams();\r\n this.Do(this.cashflowReportEndpoint.CashflowBalanceView(cashflowParams), false,\r\n (response) => {\r\n const params = new CashflowReportParams();\r\n params.OrganizationID = cashflowParams.OrganizationID;\r\n params.Companies = this.State.FilterValues.Company as number[];\r\n params.Currency = this.State.FilterValues.Currency as string;\r\n params.DateFrom = DateHelpers.AddDay(response.Entity.CalculationDate, 1);\r\n params.DateTo = Globals.ThisMonthLastDate;\r\n params.CalculationDate = response.Entity.CalculationDate;\r\n\r\n this.Do(this.cashflowReportEndpoint.GetCashflowBalance(params), false, ({ Data }) => {\r\n this.State.Cards.push({\r\n Title: this.RC('lblTotalCashflow'),\r\n Icon: 'assets/projects/kraken/mob-group-cashflow.svg',\r\n Class: 'cashflow',\r\n Amount: `${formatNumber(Math.floor(Data), this.F.NumberGeneral)} ${this.GetCurrency()}`\r\n });\r\n });\r\n },\r\n () => {\r\n //copy same behaviour as in desktop version\r\n });\r\n }\r\n if (this.accessService.IsAllowLoans()) {\r\n const params = this.GetGeneralDashboardParams();\r\n delete params.BookingAccountSubtypes;\r\n this.Do(this.loanPaymentEndpoint.GetLoansKpi(params as any), false, (res) => {\r\n if (res.Data) {\r\n this.State.Cards.push({\r\n Title: this.RC('lblTotalLoans'),\r\n Icon: 'assets/projects/kraken/mob-group-loans.svg',\r\n Class: 'loans',\r\n Amount: `${formatNumber(Math.floor(res.Data), this.F.NumberGeneral)} ${this.GetCurrency()}`\r\n });\r\n }\r\n });\r\n\r\n }\r\n }\r\n\r\n GetArrowIcon = () => this.A.Screen.IsRTL() ? 'assets/projects/kraken/mob-arrow-left.svg' : 'assets/projects/kraken/mob-arrow-right.svg';\r\n\r\n GetCurrency = () => (this.LISTITEMX('Currencies', this.State.FilterValues.Currency) as any)?.Symbol;\r\n\r\n ShowOnlyCurrentChanged() {\r\n this.OnLoadData();\r\n }\r\n\r\n OnTransactionGroupChanged(e) {\r\n this.State.TransactionsGroupedFilterBy = e.addedItems.map(x => x.index);\r\n this.ProcessGroupedTransactionData(this.State.TransactionsGrouped);\r\n }\r\n\r\n OnBalanceFilterByChanged() {\r\n this.LoadBalanceData();\r\n }\r\n\r\n OnBalanceLinkClicked(e: any) {\r\n let page = '/pages/mobile-balance-report';\r\n const navigationProps: any = {\r\n OrganizationID: Globals.OrganizationID,\r\n Date: this.State.FilterValues.Date,\r\n Currency: this.State.FilterValues.Currency,\r\n Accounts: this.State.FilterValues.Account,\r\n AccountGroups: this.State.FilterValues.AccountGroup,\r\n Banks: this.State.FilterValues.Bank,\r\n CompanyIDs: this.State.FilterValues.Company,\r\n IsFromDashboard: true,\r\n BookingAccountSubtypes: this.State.IsShowCurrentOnly ?\r\n [EnumBookingAccountSubtypes.Current] : this.State.FilterValues.BookingAccountSubtype\r\n };\r\n\r\n if (e.Subtype) {\r\n switch (e.Subtype) {\r\n case EnumBookingAccountSubtypes.Deposits:\r\n page = '/pages/mobile-deposit-report';\r\n navigationProps.Mode = 0;\r\n break;\r\n case EnumBookingAccountSubtypes.Stocks:\r\n page = '/pages/mobile-stock-report';\r\n navigationProps.Mode = 1;\r\n break;\r\n case EnumBookingAccountSubtypes.Loans:\r\n page = '/pages/mobile-loan-report';\r\n navigationProps.Mode = 2;\r\n break;\r\n case EnumBookingAccountSubtypes.CreditCard:\r\n page = '/pages/mobile-credit-cards-report';\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n return this.Navigate([page], navigationProps, true);\r\n }\r\n\r\n OnNavigate(e, page: string) {\r\n if (e.rowType !== 'data') return;\r\n const accounts = e.data.AccountID ? [e.data.AccountID] : null;\r\n const companies = e.data.CompanyID ? [e.data.CompanyID] : null;\r\n const accountGroups = e.data.AccountGroupID ? [e.data.AccountGroupID] : null;\r\n const banks = e.data.Bank ? [e.data.Bank] : null;\r\n const subTypes = this.State.IsShowCurrentOnly ?\r\n [EnumBookingAccountSubtypes.Current] : this.State.FilterValues.BookingAccountSubtype;\r\n\r\n const navigationProperties: any = {\r\n OrganizationID: Globals.OrganizationID,\r\n Accounts: accounts,\r\n CompanyIDs: companies,\r\n Banks: banks,\r\n AccountGroups: accountGroups,\r\n Date: this.State.FilterValues.Date,\r\n DateFrom: DateHelpers.AddDay(this.State.FilterValues.Date, - this.State.TransactionsGroupedDatePeriod + 1),\r\n DateTo: this.State.FilterValues.Date,\r\n Currency: e.data.Currency ? [e.data.Currency] : this.State.FilterValues.Currency,\r\n CurrenciesFilter: e.data.Currency ? [e.data.Currency] : null,\r\n BookingAccountSubtypes: subTypes,\r\n IsFromDashboard: true\r\n };\r\n\r\n if (this.State.CurrentTabIndex === 1) {\r\n navigationProperties.Category = e.data?.EntryID;\r\n navigationProperties.IsDebitOnly = e.data.Debit ? true : false;\r\n navigationProperties.IsCreditOnly = e.data.Credit ? true : false;\r\n }\r\n\r\n return this.Navigate([`/pages/${page}`], navigationProperties, true);\r\n }\r\n\r\n OnTransactionItemClicked(event: RowClickEvent) {\r\n if (event.data.Depth === 1) {\r\n this.State.SelectedTransaction = event.data as TransactionView & ReportNestedListItem;\r\n this.State.ItemDetails = this.baseReportService.GetTransactionProperties(this.State.SelectedTransaction);\r\n this.State.ItemDetailsHeaderText = event.data.BookingAccountFullName;\r\n this.State.ItemDetailsHeaderIcon = this.GetBankIcon(event.data.Bank);\r\n const contentParams = new BottomSheetContentParams();\r\n contentParams.Class = 'no-padding';\r\n contentParams.Content = this.detailsViewInfo;\r\n contentParams.Title = this.State.SelectedTransaction.CompanyName;\r\n this.bottomSheetService.Show(contentParams);\r\n }\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n const settings = new ToolbarSettings();\r\n settings.IsAllowFilter = true;\r\n settings.ShowContextMenuAsUsualOnMobile = true;\r\n return settings;\r\n }\r\n\r\n GetTotalForeignValue(item: any) {\r\n return `${formatNumber(Math.floor(item.BalanceAmountFilteredByNotCurrency), this.F.NumberGeneral)} ${this.GetCurrency()}`;\r\n }\r\n\r\n GetTotalByFilterCurrencyValue(item: any) {\r\n return `${formatNumber(Math.floor(item.BalanceAmountFilteredByCurrency), this.F.NumberGeneral)} ${this.GetCurrency()}`;\r\n }\r\n\r\n GetTotal(item: any) {\r\n return `${formatNumber(Math.floor(item.BalanceAmount), this.F.NumberGeneral)} ${this.GetCurrency()}`;\r\n }\r\n\r\n ShowCheques() {\r\n this.Do(this.chequeEndpoint.ListChequesWithImages(this.State.SelectedTransaction.EntryID), false, cheques => {\r\n this.State.ChequeDetails = [];\r\n this.State.ChequeDetails.push(...cheques.Entities);\r\n this.State.ShowChequeDialog = true;\r\n });\r\n }\r\n\r\n OpenHistoryChart() {\r\n this.State.AvailableHistoryChartTypes = this.State.HistoryChartTypes.filter(x => this.State.SelectedTransaction[x.Value]);\r\n if (this.State.AvailableHistoryChartTypes?.length === 1) {\r\n const filterType = this.State.AvailableHistoryChartTypes[0].Value;\r\n this.ShowHistoryChart(filterType);\r\n } else {\r\n const contentParams = new BottomSheetContentParams();\r\n contentParams.Class = 'no-padding';\r\n contentParams.Content = this.historyChartOptions;\r\n contentParams.Title = this.RC('lblViewHistoryBy');\r\n this.bottomSheetService.Show(contentParams);\r\n }\r\n }\r\n\r\n ShowHistoryChart(filterType: string) {\r\n const content = this.GetHistoryChartParams(this.State.SelectedTransaction, filterType);\r\n this.bottomSheetService.Show(content);\r\n }\r\n\r\n GetSettingName(name: string) {\r\n return `${this.ComponentName}.State.${name}`;\r\n }\r\n\r\n // override OnReadyFilter() { // fix load data on open page\r\n // //removed double calls\r\n // }\r\n\r\n OnOrganizationChanged(organizationId: number) {\r\n this.State.FilterValues.OrganizationID = organizationId;\r\n this.OnLoadData();\r\n }\r\n}","export default \"\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
{{RC('btnShowCurrentOnly')}}
\\r\\n
\\r\\n
\\r\\n \\r\\n \\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.Title}}
\\r\\n
{{item.Amount}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\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.SubtypeName}}
\\r\\n 0\\\"\\r\\n [class.negative-amount]=\\\"item.BalanceAmountFilteredByCurrency<0\\\" Position=\\\"horizontal\\\"\\r\\n [Value]=\\\"GetTotalByFilterCurrencyValue(item)\\\" ValueAlignment=\\\"end\\\">\\r\\n \\r\\n 0\\\"\\r\\n [class.negative-amount]=\\\"item.BalanceAmountFilteredByNotCurrency<0\\\" Position=\\\"horizontal\\\"\\r\\n [Value]=\\\"GetTotalForeignValue(item)\\\" ValueAlignment=\\\"end\\\">\\r\\n \\r\\n 0\\\" [class.negative-amount]=\\\"item.BalanceAmount<0\\\"\\r\\n Position=\\\"horizontal\\\" [Value]=\\\"GetTotal(item)\\\" ValueAlignment=\\\"end\\\" class=\\\"total-line\\\">\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n\\r\\n\\r\\n\\r\\n
\\r\\n
\\r\\n {{option.Text}}\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\";","import { Component } from '@angular/core';\r\nimport { Globals } from '@kraken/_globals';\r\nimport { BankPassEndpoint } from '@kraken/_proxy/endpoints/bankpass.endpoint';\r\nimport { DeploymentEndpoint } from '@kraken/_proxy/endpoints/deployment.endpoint';\r\nimport { SyncStatusAccountEndpoint } from '@kraken/_proxy/endpoints/syncstatusaccount.endpoint';\r\nimport { SyncStatusContractEndpoint } from '@kraken/_proxy/endpoints/syncstatuscontract.endpoint';\r\nimport {\r\n EnumBankGroups, EnumBanks, EnumBookingAccountSubtypes,\r\n EnumCCProcessingCompanies, EnumDataExportType, EnumDownloadTaskStatuses, EnumUploadStatuses\r\n} from '@kraken/_proxy/enums';\r\nimport { BankPassListParams } from '@kraken/_proxy/params/bankpasslist.param';\r\nimport { BankPassView } from '@kraken/_proxy/views/bankpass.view';\r\nimport { SyncStatusAccountView } from '@kraken/_proxy/views/syncstatusaccount.view';\r\nimport { SyncStatusContractView } from '@kraken/_proxy/views/syncstatuscontract.view';\r\nimport { FilterSettings, FilterValues } from '@kraken/components/filter/filter.component';\r\nimport { BaseMobileReport, BaseMobileReportState } from '@kraken/mobile/common/base-report/base-mobile-report';\r\nimport { AccessService } from '@kraken/services/access.service';\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 { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport * as _ from 'lodash';\r\n\r\nclass ExtraFilterValues {\r\n DownloadTaskStatuses: EnumDownloadTaskStatuses[] = [];\r\n UploadStatuses: EnumUploadStatuses[] = [];\r\n JEUploadStatuses: EnumUploadStatuses[] = [];\r\n BankGroups: EnumBankGroups[] = [];\r\n ShowFailedOnly = false;\r\n ProcessingCompanies: EnumCCProcessingCompanies[] = [];\r\n DeploymentID: number;\r\n BankPassIDs: number[];\r\n}\r\n\r\nclass State extends BaseMobileReportState {\r\n Statuses: SyncStatusAccountView[] = [];\r\n StatusesByCompany: SyncStatusAccountView[];\r\n ContractStatuses: SyncStatusContractView[] = [];\r\n ContractStatusesByCompany: SyncStatusContractView[];\r\n Companies: any[];\r\n ExtraFilterValues: ExtraFilterValues = new ExtraFilterValues();\r\n SyncGroupOptions: any[];\r\n SyncGroup: number[];\r\n UploadStatusesSource: any[];\r\n BankPassSource: BankPassView[];\r\n IsShowOnlyAutomatic: boolean = false;\r\n Deployments: any[];\r\n}\r\n\r\n@Component({\r\n selector: 'mobile-sync-status',\r\n templateUrl: './mobile-sync-status.component.html',\r\n styleUrls: ['../../css/mobile-common.scss', './mobile-sync-status.component.scss']\r\n})\r\nexport class MobileSyncStatusComponent extends BaseMobileReport{\r\n protected reportGrid: BaseGridComponent;\r\n\r\n constructor(\r\n A: ServiceBagService,\r\n public accessService: AccessService,\r\n private syncStatusAccountEndpoint: SyncStatusAccountEndpoint,\r\n private syncStatusContractEndpoint: SyncStatusContractEndpoint,\r\n private bankPassEndpoint: BankPassEndpoint,\r\n private deploynmentEndpoint: DeploymentEndpoint,\r\n ) {\r\n super(A, 'SyncStatusComponent', State);\r\n this.State.SyncGroupOptions = this.LIST('SyncStatusTabs');\r\n this.State.SyncGroup = [(this.LISTITEMX('SyncStatusTabs', 'Account') as any).index];\r\n this.State.UploadStatusesSource = this.LIST('UploadStatuses').filter(x => x.Value !== this.Enums.EnumUploadStatuses.NoData);\r\n }\r\n\r\n\r\n protected OnLoadData() {\r\n\r\n if (!this.State.FilterValues.OrganizationID) {\r\n return;\r\n }\r\n\r\n this.LoadBankPasses();\r\n this.LoadDeployments();\r\n\r\n const params: any = {};\r\n params.OrganizationID = this.State.FilterValues.OrganizationID;\r\n params.Companies = this.State.FilterValues.Company ? [this.State.FilterValues.Company as number] : [];\r\n params.ShowFailedOnly = this.State.ExtraFilterValues.ShowFailedOnly;\r\n params.DownloadTaskStatuses = this.State.ExtraFilterValues.DownloadTaskStatuses;\r\n params.UploadStatuses = this.State.ExtraFilterValues.UploadStatuses;\r\n params.ShowFailedOnly = this.State.ExtraFilterValues.ShowFailedOnly;\r\n params.DeploymentID = this.State.ExtraFilterValues.DeploymentID;\r\n params.AccountGroups = this.State.FilterValues.AccountGroup as number[];\r\n params.JournalEntryUploadStatuses = this.State.ExtraFilterValues.JEUploadStatuses;\r\n\r\n if (this.IsGroupByAccount()) {\r\n params.Accounts = this.State.FilterValues.Account ? [this.State.FilterValues.Account as number] : [];\r\n params.BookingAccountSubtypes = this.State.FilterValues.BookingAccountSubtype as EnumBookingAccountSubtypes[];\r\n params.BankGroups = this.State.ExtraFilterValues.BankGroups;\r\n params.Banks = this.State.FilterValues.Bank as EnumBanks[];\r\n params.BankPassIDs = this.State.ExtraFilterValues.BankPassIDs;\r\n\r\n this.Do(this.syncStatusAccountEndpoint.ListEx(params, null), false,\r\n (response) => {\r\n this.SetCompanies(response.Entities);\r\n this.State.Statuses = response.Entities;\r\n this.State.StatusesByCompany = response.Entities\r\n .filter(x => x.CompanyID === this.State.Companies[this.State.SelectedIndex]?.id);\r\n });\r\n } else {\r\n params.ProcessingCompanies = this.State.ExtraFilterValues.ProcessingCompanies;\r\n this.Do(this.syncStatusContractEndpoint.ListEx(params, null), false,\r\n (response) => {\r\n this.SetCompanies(response.Entities);\r\n this.State.ContractStatuses = response.Entities;\r\n this.State.ContractStatusesByCompany = response.Entities\r\n .filter(x => x.CompanyID === this.State.Companies[this.State.SelectedIndex]?.id);\r\n });\r\n }\r\n }\r\n\r\n protected OnGetCustomFilterSettings(): FilterSettings {\r\n return {\r\n Company: {\r\n IsVisible: true,\r\n IsSearchDisabled: true\r\n },\r\n Account: {\r\n IsVisible: this.IsGroupByAccount(),\r\n IsSearchDisabled: true\r\n },\r\n Bank: {\r\n IsVisible: this.IsGroupByAccount(),\r\n IsMultiple: true,\r\n IsSearchDisabled: true\r\n },\r\n BookingAccountSubtype: {\r\n IsVisible: this.IsGroupByAccount(),\r\n IsMultiple: true,\r\n IsSearchDisabled: true\r\n },\r\n AccountGroup: {\r\n IsVisible: true, IsMultiple: true,\r\n IsSearchDisabled: true\r\n },\r\n\r\n IsForceOptionsSectionVisible: true\r\n } as FilterSettings;\r\n }\r\n\r\n override OnInitComponent() {\r\n super.OnInitComponent();\r\n if (Object.keys(this.QueryParams).length <= 0) return;\r\n\r\n if (this.QueryParams.BankGroup) this.State.ExtraFilterValues.BankGroups = [this.QueryParams.BankGroup as EnumBankGroups];\r\n if (this.QueryParams.DownloadStatus)\r\n this.State.ExtraFilterValues.DownloadTaskStatuses = [this.QueryParams.DownloadStatus as EnumDownloadTaskStatuses];\r\n if (this.QueryParams.UploadStatus)\r\n this.State.ExtraFilterValues.UploadStatuses = [this.QueryParams.UploadStatus as EnumUploadStatuses];\r\n if (this.QueryParams.JEUploadStatus)\r\n this.State.ExtraFilterValues.JEUploadStatuses = [this.QueryParams.JEUploadStatus as EnumUploadStatuses];\r\n if (this.QueryParams.ShowFailedOnly) this.State.ExtraFilterValues.ShowFailedOnly = !!this.QueryParams.ShowFailedOnly;\r\n }\r\n\r\n OnTabChange(itemIndex: number) {\r\n this.State.SelectedIndex = itemIndex;\r\n this.State.StatusesByCompany = this.State.Statuses\r\n .filter(x => x.CompanyID === this.State.Companies[this.State.SelectedIndex]?.id);\r\n this.State.ContractStatusesByCompany = this.State.ContractStatuses\r\n .filter(x => x.CompanyID === this.State.Companies[this.State.SelectedIndex]?.id);\r\n }\r\n\r\n OnStatusChanged() {\r\n if ((this.State.ExtraFilterValues.DownloadTaskStatuses && this.State.ExtraFilterValues.DownloadTaskStatuses.length > 0\r\n || this.State.ExtraFilterValues.UploadStatuses && this.State.ExtraFilterValues.UploadStatuses.length > 0\r\n || this.State.ExtraFilterValues.JEUploadStatuses && this.State.ExtraFilterValues.JEUploadStatuses.length > 0)\r\n && this.State.ExtraFilterValues.ShowFailedOnly) this.State.ExtraFilterValues.ShowFailedOnly = false;\r\n }\r\n\r\n OnShowFailedOnlyChanged() {\r\n if (this.State.ExtraFilterValues.ShowFailedOnly)\r\n this.State.ExtraFilterValues.DownloadTaskStatuses = this.State.ExtraFilterValues.UploadStatuses\r\n = this.State.ExtraFilterValues.JEUploadStatuses = undefined;\r\n }\r\n\r\n OnSyncGroupChanged(e) {\r\n this.State.StatusesByCompany = this.State.ContractStatusesByCompany = [];\r\n this.State.SelectedIndex = 0;\r\n this.State.SyncGroup = e.addedItems.map(x => x.index);\r\n this.State.FilterSettings = this.OnGetCustomFilterSettings();\r\n this.OnLoadData();\r\n }\r\n\r\n override OnClearFilter() {\r\n this.State.FilterValues = new FilterValues();\r\n this.State.ExtraFilterValues = new ExtraFilterValues();\r\n if (!this.State.FilterValues.OrganizationID) {\r\n this.State.FilterValues.OrganizationID = Globals.OrganizationID;\r\n }\r\n this.OnLoadData();\r\n }\r\n\r\n IsGroupByAccount() {\r\n return this.State.SyncGroup[0] === (this.LISTITEMX('SyncStatusTabs', 'Account') as any).index;\r\n }\r\n\r\n GetDownloadStatusColor(data: SyncStatusAccountView) {\r\n switch (data.DownloadTaskStatus) {\r\n case this.Enums.EnumDownloadTaskStatuses.Success:\r\n return 'green-cyan';\r\n case this.Enums.EnumDownloadTaskStatuses.Failure:\r\n return 'cinnabar';\r\n case this.Enums.EnumDownloadTaskStatuses.NoData:\r\n return 'lucky-point';\r\n case this.Enums.EnumDownloadTaskStatuses.Pending:\r\n return 'mango';\r\n case this.Enums.EnumDownloadTaskStatuses.Reviewed:\r\n return 'dark-cyan';\r\n case this.Enums.EnumDownloadTaskStatuses.NotSynched:\r\n return 'midnight';\r\n }\r\n }\r\n\r\n GetUploadStatusColor(data: SyncStatusAccountView) {\r\n switch (data.JournalEntryUploadStatus) {\r\n case this.Enums.EnumUploadStatuses.Success:\r\n case this.Enums.EnumUploadStatuses.FileExported:\r\n return 'green-cyan';\r\n case this.Enums.EnumUploadStatuses.Initiated:\r\n return 'olive';\r\n case this.Enums.EnumUploadStatuses.NoData:\r\n return 'light-green';\r\n case this.Enums.EnumUploadStatuses.Exception:\r\n return 'cinnabar';\r\n case this.Enums.EnumUploadStatuses.DataSent:\r\n return 'dark-cyan';\r\n case this.Enums.EnumUploadStatuses.BalanceMismatch:\r\n return 'base-color';\r\n case this.Enums.EnumUploadStatuses.BalanceNotExistsForDate:\r\n return 'hollywood';\r\n case this.Enums.EnumUploadStatuses.CompanyNotFound:\r\n return 'mango';\r\n case this.Enums.EnumUploadStatuses.AccountNotFound:\r\n return 'atomic-tangerine';\r\n case this.Enums.EnumUploadStatuses.NotSynched:\r\n return 'midnight';\r\n }\r\n }\r\n\r\n GetDownloadStatusValue(data: SyncStatusAccountView) {\r\n return `${this.LISTITEMX('DownloadTaskStatuses', data.DownloadTaskStatus)?.Text ?? ' '}`;\r\n }\r\n\r\n GetJournalEntryUploadStatusStatusValue(data: SyncStatusAccountView) {\r\n return `${this.LISTITEMX('UploadStatuses', data.JournalEntryUploadStatus)?.Text ?? ' '}`;\r\n }\r\n\r\n SetCompanies(statuses: any[]) {\r\n this.State.Companies = _.uniqBy(statuses, 'CompanyID')\r\n .map(x => {\r\n return {\r\n id: x.CompanyID,\r\n text: x.CompanyName,\r\n };\r\n });\r\n }\r\n\r\n private LoadBankPasses() {\r\n const params = new BankPassListParams();\r\n params.OrganizationID = this.State.FilterValues.OrganizationID;\r\n params.LoadGlobal = true;\r\n\r\n this.Do(this.bankPassEndpoint.ListEx(params, null), false, (response) => {\r\n this.State.BankPassSource = response.Entities;\r\n });\r\n }\r\n\r\n LoadDeployments() {\r\n if (!Globals.OrganizationID) return;\r\n\r\n const dataExportTypes = this.State.IsShowOnlyAutomatic\r\n ? [EnumDataExportType.Automatic]\r\n : Object.values(EnumDataExportType);\r\n\r\n this.Do(this.deploynmentEndpoint.ListEx(Globals.OrganizationID, dataExportTypes, null), false, (response) => {\r\n this.State.Deployments = response.Entities;\r\n });\r\n }\r\n}","export default \"\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\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 { Globals } from '@kraken/_globals';\r\nimport { SyncStatusAccountEndpoint } from '@kraken/_proxy/endpoints/syncstatusaccount.endpoint';\r\nimport { SyncStatusListParams } from '@kraken/_proxy/params/syncstatuslist.param';\r\nimport { AccessService } from '@kraken/services/access.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\n\r\nclass State extends BaseState {\r\n IsError: boolean = false;\r\n IsClosed: boolean = false;\r\n}\r\n\r\n@Component({\r\n selector: 'mobile-sync-error',\r\n templateUrl: './mobile-sync-error.component.html',\r\n styleUrls: ['./mobile-sync-error.component.scss']\r\n})\r\nexport class MobileSyncErrorComponent extends BaseComponent{\r\n\r\n constructor(A: ServiceBagService,\r\n public accessService: AccessService,\r\n private syncStatusAccountEndpoint: SyncStatusAccountEndpoint) {\r\n super(A, 'MobileSyncErrorComponent', State);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.LoadSyncStatus();\r\n }\r\n\r\n OnLinkClick(event: any) {\r\n event.stopPropagation();\r\n this.Navigate(['/pages/mobile-sync-status'], {\r\n OrganizationID: Globals.OrganizationID,\r\n ShowFailedOnly: true\r\n }, true);\r\n }\r\n\r\n OnClose() {\r\n this.State.IsClosed = true;\r\n }\r\n\r\n OnOpen() {\r\n this.State.IsClosed = false;\r\n }\r\n\r\n LoadSyncStatus() {\r\n if (this.accessService.IsAdmin()) return;\r\n\r\n const params = new SyncStatusListParams();\r\n params.OrganizationID = this.UserInfo?.OrganizationID;\r\n params.ShowFailedOnly = true;\r\n\r\n this.Do(this.syncStatusAccountEndpoint.ListEx(params, null), false,\r\n (response) => this.State.IsError = response.Entities.length > 0);\r\n }\r\n\r\n}\r\n","export default \"
\\r\\n
\\r\\n \\r\\n {{RC('txtSyncError')}},\\r\\n {{RC('lblMoreInfo').toLowerCase()}}\\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 { 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 dxSelectBox from 'devextreme/ui/select_box';\r\n\r\nclass State extends BaseState {\r\n ListParams: BottomSheetListParams;\r\n}\r\n\r\n@Component({\r\n selector: 'app-organization-selector-bottom-sheet',\r\n templateUrl: './organization-selector-bottom-sheet.component.html',\r\n styleUrls: ['./organization-selector-bottom-sheet.component.scss']\r\n})\r\nexport class OrganizationSelectorBottomSheetComponent extends BaseComponent implements IBottomSheetComponent {\r\n @Input() SelectBox: dxSelectBox;\r\n Context: BottomSheetDialogComponent;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'OrganizationSelectorBottomSheetComponent', State);\r\n }\r\n\r\n protected override OnInitState(): void {\r\n if (!this.SelectBox) return;\r\n\r\n const listParams = new BottomSheetListParams();\r\n listParams.Title = this.SelectBox.option('placeholder');\r\n listParams.DataSource = this.SelectBox.option('dataSource') as any;\r\n listParams.IsMultiSelection = false;\r\n listParams.ValueExpr = this.SelectBox.option('valueExpr').toString();\r\n listParams.DisplayExpr = this.SelectBox.option('displayExpr');\r\n listParams.Value = this.SelectBox.option('selectedItems') || [];\r\n listParams.OnCompleted = (result) => { \r\n this.SelectBox.option('value', result);\r\n this.SelectBox.close();\r\n this.Context.CloseDialogWithSuccess(result);\r\n };\r\n listParams.OnCanceled = () => {\r\n this.SelectBox.close();\r\n this.Context.CloseDialogWithCancel();\r\n };\r\n this.State.ListParams = listParams;\r\n this.OnSearch('');\r\n }\r\n\r\n OnSearch(e) {\r\n const dataSource = this.State.ListParams.DataSource as any;\r\n dataSource.filter('Name', 'contains', e);\r\n dataSource.load();\r\n }\r\n\r\n}\r\n","export default \"\\r\\n\\r\\n\";","import { TransactionCategorizationSetupComponent } from './pages/transaction-report/transaction-categorization-setup/transaction-categorization-setup.component';\r\nimport { FinancialReportEndpoint } from './_proxy/endpoints/financialreport.endpoint';\r\nimport { FinancialReportComponent } from './pages/financial-report/financial-report.component';\r\nimport { PaymentEndpoint } from './_proxy/endpoints/payment.endpoint';\r\nimport { ReplicationSummaryResultHistoryGridComponent } from './pages/replication/replication-summary-result-history-grid/replication-summary-result-history-grid.component';\r\nimport { MainMenuElement, DefaultRouteParams, InjectableComponentOptions } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { AppConfig } from '@m4u-angular/configuration/app.config.model';\r\nimport { EnumBankTypes, EnumBookingAccountSubtypes, Enums, EnumSystemOptionsZ, EnumSide, EnumFinancialReportType, EnumCredentialTypes } from './_proxy/enums';\r\nimport { forkJoin, Observable, of } from 'rxjs';\r\nimport { OrganizationListComponent } from './pages/organization/list/organization-list.component';\r\nimport { OrganizationGridComponent } from './pages/organization/list/organization-grid.component';\r\nimport { OrganizationComponent } from './pages/organization/organization.component';\r\nimport { CompanyListComponent } from './pages/company/list/company-list.component';\r\nimport { CompanyGridComponent } from './pages/company/list/company-grid.component';\r\nimport { ProblemIndicatorComponent } from './components/problem-indicator/problem-indicator.component';\r\nimport { AccountGroupComponent } from './pages/account-group/account-group.component';\r\nimport { AccountGroupGridComponent } from './pages/account-group/list/account-group-grid.component';\r\nimport { AccountGroupListComponent } from './pages/account-group/list/account-group-list.component';\r\nimport { AccountActionDialogComponent } from './pages/account/account-action-dialog.component';\r\nimport { AccountComponent } from './pages/account/account.component';\r\nimport { AccountGridComponent } from './pages/account/list/account-grid.component';\r\nimport { AccountListComponent } from './pages/account/list/account-list.component';\r\nimport { AdminComponent } from './pages/admin/admin.component';\r\nimport { AdminGridComponent } from './pages/admin/list/admin-grid.component';\r\nimport { AdminListComponent } from './pages/admin/list/admin-list.component';\r\nimport { BalanceReportGridComponent } from './pages/balance-report/balance-report-grid.component';\r\nimport { BalanceReportComponent } from './pages/balance-report/balance-report.component';\r\nimport { BankPassComponent } from './pages/bankpass/bankpass.component';\r\nimport { BankPassGridComponent } from './pages/bankpass/list/bankpass-grid.component';\r\nimport { BankpassListComponent } from './pages/bankpass/list/bankpass-list.component';\r\nimport { AccountMappingListComponent } from './pages/account-mapping/account-mapping-list/account-mapping-list.component';\r\nimport { AccountMappingGridComponent } from './pages/account-mapping/account-mapping-grid/account-mapping-grid.component';\r\nimport { BillingReportChartComponent } from './pages/billing-report/billing-report-chart.component';\r\nimport { BillingReportGridComponent } from './pages/billing-report/billing-report-grid.component';\r\nimport { BillingReportComponent } from './pages/billing-report/billing-report.component';\r\nimport { BillingContractsReportGridComponent } from './pages/billing-contracts-report/billing-contracts-report-summary-grid/billing-contracts-report-grid.component';\r\nimport { BillingContractsReportBillingGridComponent } from './pages/billing-contracts-report/billing-contracts-report-billing-grid/billing-contracts-report-billing-grid.component';\r\nimport { BillingContractsReportComponent } from './pages/billing-contracts-report/billing-contracts-report.component';\r\nimport { BookingAccountActionDialogComponent } from './pages/booking-account/booking-account-action-dialog.component';\r\nimport { BookingAccountGridComponent } from './pages/booking-account/list/booking-account-grid.component';\r\nimport { BookingAccountListComponent } from './pages/booking-account/list/booking-account-list.component';\r\nimport { CompanyComponent } from './pages/company/company.component';\r\nimport { AssetsLiabilitiesDashboardChartComponent } from './pages/dashboard/assets-liabilities-dashboard/assets-liabilities-dashboard-chart.component';\r\nimport { AssetsLiabilitiesDashboardGridComponent } from './pages/dashboard/assets-liabilities-dashboard/assets-liabilities-dashboard-grid.component';\r\nimport { BalanceDashboardChartComponent } from './pages/dashboard/balance-dashboard/balance-dashboard-chart.component';\r\nimport { BalanceDashboardGridComponent } from './pages/dashboard/balance-dashboard/balance-dashboard-grid.component';\r\nimport { BalanceGroupingPerCurrencyDashboardChartComponent } from './pages/dashboard/balance-grouping-per-currency-dashboard/balance-grouping-per-currency-dashboard-chart.component';\r\nimport { BalancePerCurrencyDashboardChartComponent } from './pages/dashboard/balance-per-currency-dashboard/balance-per-currency-dashboard-chart.component';\r\nimport { BalancePerCurrencyDashboardGridComponent } from './pages/dashboard/balance-per-currency-dashboard/balance-per-currency-dashboard-grid.component';\r\nimport { CurrencyRateDashboardChartComponent } from './pages/dashboard/currency-rate-dashboard/currency-rate-dashboard-chart.component';\r\nimport { DashboardFooterComponent } from './pages/dashboard/dashboard-footer/dashboard-footer.component';\r\nimport { DashboardComponent } from './pages/dashboard/dashboard.component';\r\nimport { DownloadHistoryGridComponent } from './pages/download/download-history-grid.component';\r\nimport { DownloadHistoryComponent } from './pages/download/download-history.component';\r\nimport { DownloadStepHistoryGridComponent } from './pages/download/download-step-history-grid.component';\r\nimport { DownloadTaskHistoryGridComponent } from './pages/download/download-task-history-grid.component';\r\nimport { NotificationTemplateGridComponent } from './pages/notification-template/list/notification-template-grid.component';\r\nimport { NotificationTemplateListComponent } from './pages/notification-template/list/notification-template-list.component';\r\nimport { NotificationOrganizationTemplateComponent } from './pages/notification-template/notification-template.component';\r\nimport { SyncStatusChartComponent } from './pages/sync-status-chart/sync-status-chart.component';\r\nimport { SyncStatusDownloadsComponent } from './pages/sync-status-downloads/sync-status-downloads.component';\r\nimport { SyncStatusUploadsComponent } from './pages/sync-status-uploads/sync-status-uploads.component';\r\nimport { TransactionReportGridComponent } from './pages/transaction-report/transaction-report-grid.component';\r\nimport { TransactionReportComponent } from './pages/transaction-report/transaction-report.component';\r\nimport { UploadHistoryGridComponent } from './pages/upload/upload-history-grid.component';\r\nimport { UploadHistoryComponent } from './pages/upload/upload-history.component';\r\nimport { UserGridComponent } from './pages/user/list/user-grid.component';\r\nimport { UserListComponent } from './pages/user/list/user-list.component';\r\nimport { UserComponent } from './pages/user/user.component';\r\nimport { BookingAccountTemplateService } from './services/booking-account-template.service';\r\nimport { InjectedComponentsService } from './services/injected-components.service';\r\nimport { InjectedComponentsBaseService } from '@m4u-angular/core/framework/injected-components-base.service';\r\nimport { AdminEndpoint } from './_proxy/endpoints/admin.endpoint';\r\nimport { AccountEndpoint } from './_proxy/endpoints/account.endpoint';\r\nimport { AccountGroupEndpoint } from './_proxy/endpoints/accountgroup.endpoint';\r\nimport { BalanceEndpoint } from './_proxy/endpoints/balance.endpoint';\r\nimport { BankPassEndpoint } from './_proxy/endpoints/bankpass.endpoint';\r\nimport { BillingReportEndpoint } from './_proxy/endpoints/billingreport.endpoint';\r\nimport { BillingContractsReportEndpoint } from './_proxy/endpoints/billingcontractsreport.endpoint';\r\nimport { BookingAccountEndpoint } from './_proxy/endpoints/bookingaccount.endpoint';\r\nimport { CompanyEndpoint } from './_proxy/endpoints/company.endpoint';\r\nimport { CurrencyRateEndpoint } from './_proxy/endpoints/currencyrate.endpoint';\r\nimport { DownloadEndpoint } from './_proxy/endpoints/download.endpoint';\r\nimport { DownloadRequestEndpoint } from './_proxy/endpoints/downloadrequest.endpoint';\r\nimport { NotificationTemplateEndpoint } from './_proxy/endpoints/notificationtemplate.endpoint';\r\nimport { OrganizationEndpoint } from './_proxy/endpoints/organization.endpoint';\r\nimport { SyncStatusEndpoint } from './_proxy/endpoints/syncstatus.endpoint';\r\nimport { SyncStatusAccountEndpoint } from './_proxy/endpoints/syncstatusaccount.endpoint';\r\nimport { SyncStatusContractEndpoint } from './_proxy/endpoints/syncstatuscontract.endpoint';\r\nimport { TransactionEndpoint } from './_proxy/endpoints/transaction.endpoint';\r\nimport { UploadEndpoint } from './_proxy/endpoints/upload.endpoint';\r\nimport { ConsentsEndpoint } from './_proxy/endpoints/consents.endpoint';\r\nimport { UserEndpoint } from './_proxy/endpoints/user.endpoint';\r\nimport { TransactionCategoryListPageComponent } from './pages/transaction-category/list/transaction-category-list-page.component';\r\nimport { TransactionCategoryGridComponent } from './pages/transaction-category/list/transaction-category-grid.component';\r\nimport { TransactionCategoryComponent } from './pages/transaction-category/transaction-category.component';\r\nimport { TransactionCategoryListComponent } from './pages/transaction-category/list/transaction-category-list.component';\r\nimport { ClassificationRuleListPageComponent } from './pages/transaction-classification-rule/list/classification-rule-list-page.component';\r\nimport { ClassificationRuleListComponent } from './pages/transaction-classification-rule/list/classification-rule-list.component';\r\nimport { ClassificationRuleComponent } from './pages/transaction-classification-rule/classification-rule.component';\r\nimport { ClassificationRuleGridComponent } from './pages/transaction-classification-rule/list/classification-rule-grid.component';\r\nimport { PostingTemplateListComponent } from './pages/posting-template/list/posting-template-list.component';\r\nimport { PostingTemplateGridComponent } from './pages/posting-template/list/posting-template-grid.component';\r\nimport { PostingTemplateComponent } from './pages/posting-template/posting-template.component';\r\nimport { JournalEntryListComponent } from './pages/journal-entry/list/journal-entry-list.component';\r\nimport { JournalEntryGridComponent } from './pages/journal-entry/list/journal-entry-grid.component';\r\nimport { JournalEntryComponent } from './pages/journal-entry/journal-entry.component';\r\nimport { TransactionCategoryEndpoint } from './_proxy/endpoints/transactioncategory.endpoint';\r\nimport { TransactionClassificationRuleEndpoint } from './_proxy/endpoints/transactionclassificationrule.endpoint';\r\nimport { PostingTemplateEndpoint } from './_proxy/endpoints/postingtemplate.endpoint';\r\nimport { JournalEntryEndpoint } from './_proxy/endpoints/journalentry.endpoint';\r\nimport { BalanceHistoryReportComponent } from './pages/balance-history-report/balance-history-report.component';\r\nimport { BalanceHistoryReportGridComponent } from './pages/balance-history-report/balance-history-report-grid/balance-history-report-grid.component';\r\nimport { ChequeListDialogComponent } from './dialogs/cheque-dialog/list/cheque-list-dialog.component';\r\nimport { Lists_EN } from './_resources/LISTS_EN';\r\nimport { Lists_HE } from './_resources/LISTS_HE';\r\nimport { Lists_ES } from './_resources/LISTS_ES';\r\nimport { ScenarioListComponent } from './pages/scenario/list/scenario-list.component';\r\nimport { ScenarioGridComponent } from './pages/scenario/grid/scenario-grid.component';\r\nimport { ScenarioEndpoint } from './_proxy/endpoints/scenario.endpoint';\r\nimport { ScenarioComponent } from './pages/scenario/scenario.component';\r\nimport { ProbabilityLevelEndpoint } from './_proxy/endpoints/probabilitylevel.endpoint';\r\nimport { ProbabilityLevelComponent } from './pages/probability-level/probability-level.component';\r\nimport { ProbabilityLevelGridComponent } from './pages/probability-level/grid/probability-level-grid.component';\r\nimport { ProbabilityLevelListComponent } from './pages/probability-level/list/probability-level-list.component';\r\nimport { ForecastMapperComponent } from './pages/forecast-mapper/forecast-mapper.component';\r\nimport { ForecastMapperListComponent } from './pages/forecast-mapper/list/forecast-mapper-list.component';\r\nimport { ForecastMapperGridComponent } from './pages/forecast-mapper/grid/forecast-mapper-grid.component';\r\nimport { ForecastMapperEndpoint } from './_proxy/endpoints/forecastmapper.endpoint';\r\nimport { Globals } from './_globals';\r\nimport { ChequeGridComponent } from './dialogs/cheque-dialog/list/cheque-grid.component';\r\nimport { ChequeMobileListComponent } from './dialogs/cheque-dialog/list/cheque-mobile-list.component';\r\nimport { ChequeEndpoint } from './_proxy/endpoints/cheque.endpoint';\r\nimport { ChequeImageEndpoint } from './_proxy/endpoints/chequeimage.endpoint';\r\nimport { CashflowService } from './services/cashflow.service';\r\nimport { CashflowDetailedGridComponent } from './pages/cashflow-report/detailed-view/grid/cashflow-detailed-grid.component';\r\nimport { CashflowReportEndpoint } from './_proxy/endpoints/cashflowreport.endpoint';\r\nimport { ShareInformationDialogComponent } from './dialogs/share-information-dialog/share-information-dialog.component';\r\nimport { NotificationRequestEndpoint } from './_proxy/endpoints/notificationrequest.endpoint';\r\nimport { CashflowReportComponent } from './pages/cashflow-report/cashflow-report.component';\r\nimport { AssetsLiabilitiesReportGridComponent } from './pages/assets-liabilities-report/assets-liabilities-report-grid.component';\r\nimport { AssetsLiabilitiesReportComponent } from './pages/assets-liabilities-report/assets-liabilities-report.component';\r\nimport { CashflowReportDetailedComponent } from './pages/cashflow-report/detailed-view/cashflow-report-detailed.component';\r\nimport { CashflowDetailedListComponent } from './pages/cashflow-report/detailed-view/list/cashflow-detailed-list.component';\r\nimport { CashflowChartViewComponent } from './pages/cashflow-report/chart-view/cashflow-chart-view.component';\r\nimport { CreditLimitEndpoint } from './_proxy/endpoints/creditlimit.endpoint';\r\nimport { CreditLimitListComponent } from './pages/credit-limit/list/credit-limit-list.component';\r\nimport { CreditLimitGridComponent } from './pages/credit-limit/grid/credit-limit-grid.component';\r\nimport { CreditLimitComponent } from './pages/credit-limit/credit-limit.component';\r\nimport { ForecastOperationComponent } from './pages/forecast-operation/forecast-operation.component';\r\nimport { ForecastOperationEndpoint } from './_proxy/endpoints/forecastoperation.endpoint';\r\nimport { BusinessPartnerEndpoint } from './_proxy/endpoints/businesspartner.endpoint';\r\nimport { NotificationTemplateAccordionComponent } from './pages/notification-template/notification-template-accordion.component';\r\nimport { NotificationTemplateSectionFiltersGridComponent } from './pages/notification-template/notification-template-section-filters-grid.component';\r\nimport { GenerateJournalEntryDialogComponent } from './dialogs/generate-journal-entry-dialog/generate-journal-entry-dialog.component';\r\nimport { ReconciliationDialogComponent } from './dialogs/reconciliation-dialog/reconciliation-dialog.component';\r\nimport { ReconciliationFormComponent } from './pages/reconciliation/reconciliation-form/reconciliation-form.component';\r\nimport { ReconciliationEndpoint } from './_proxy/endpoints/reconciliation.endpoint';\r\nimport { DownloadFailureReviewEndpoint } from './_proxy/endpoints/downloadfailurereview.endpoint';\r\nimport { ReconciliationViewComponent } from './pages/reconciliation/reconciliation-view.component';\r\nimport { ReconciliationGridComponent } from './pages/reconciliation/reconciliation-grid/reconciliation-grid.component';\r\nimport { TransactionGridComponent } from './pages/reconciliation/transaction-grid/transaction-grid.component';\r\nimport { ForecastOperationGridComponent } from './pages/reconciliation/forecast-operation-grid/forecast-operation-grid.component';\r\nimport { RecurringForecastComponent } from './pages/recurring-forecast/recurring-forecast.component';\r\nimport { RecurringForecastEndpoint } from './_proxy/endpoints/recurringforecast.endpoint';\r\nimport { RecurringForecastListComponent } from './pages/recurring-forecast/recurring-forecast-list/recurring-forecast-list.component';\r\nimport { RecurringForecastGridComponent } from './pages/recurring-forecast/recurring-forecast-grid/recurring-forecast-grid.component';\r\nimport { RecurringForecastRecommendationComponent } from './pages/recurring-forecast-recommendation/recurring-forecast-recommendation.component';\r\nimport { RecurringForecastRecommendationGridComponent } from './pages/recurring-forecast-recommendation/grid/recurring-forecast-recommendation-grid.component';\r\nimport { ImportForecastsComponent } from './pages/recurring-forecast/import-forecasts/import-forecasts.component';\r\nimport { CurrencyIconComponent } from './components/currency-icon/currency-icon.component';\r\nimport { BaseDataSourceAbstract } from '@m4u-angular/base/datalayer/BaseDataSourceAbstract';\r\nimport { AppInjector } from '@m4u-angular/core/injector/injector.module';\r\nimport { BanksListService } from './services/banks-list.service';\r\nimport { map } from 'rxjs/operators';\r\nimport { ResourcesService } from '@m4u-angular/core/framework/resources.service';\r\nimport { SessionService } from '@m4u-angular/core/framework/session.service';\r\nimport { DashboardTotalCardsComponent } from './pages/dashboard/dashboard-total-cards/dashboard-total-cards.component';\r\nimport { FilterComponent } from './components/filter/filter.component';\r\nimport { BalanceReportDepositsDetailsComponent } from './pages/balance-report/balance-report-details/balance-report-deposits-details.component';\r\nimport { BalanceReportGuaranteeDetailsComponent } from './pages/balance-report/balance-report-details/balance-report-guarantee-details.component';\r\nimport { BalanceReportLoansDetailsComponent } from './pages/balance-report/balance-report-details/balance-report-loans-details.component';\r\nimport { BalanceReportStocksDetailsComponent } from './pages/balance-report/balance-report-details/balance-report-stocks-details.component';\r\nimport { DataSourceCustomAction } from '../../src/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '../../src/base/datalayer/DataLoadOptions';\r\nimport { ReplicationHistoryComponent } from './pages/replication/replication-history/replication-history.component';\r\nimport { ReplicationHistoryGridComponent } from './pages/replication/replication-history-grid/replication-history-grid.component';\r\nimport { ReplicationEndpoint } from './_proxy/endpoints/replication.endpoint';\r\nimport { ReplicationEntityErrorHistoryGridComponent } from './pages/replication/replication-entity-error-history-grid/replication-entity-error-history-grid.component';\r\nimport { SyncStatusReplicationComponent } from './pages/sync-status-replication/sync-status-replication.component';\r\nimport { EnumBalanceDetailsReportModes, EnumExpenseReportModes } from './_client.enums';\r\nimport { BalanceDetailsReportGridBaseComponent } from './pages/balance-details-report/grid/balance-details-report-grid-base';\r\nimport { BalanceStocksReportGridComponent } from './pages/balance-details-report/grid/balance-stocks-report-grid.component';\r\nimport { BalanceLoansReportGridComponent } from './pages/balance-details-report/grid/balance-loans-report-grid.component';\r\nimport { BalanceDepositsReportGridComponent } from './pages/balance-details-report/grid/balance-deposits-report-grid.component';\r\nimport { BalanceGuaranteesReportGridComponent } from './pages/balance-details-report/grid/balance-guarantees-report-grid.component';\r\nimport { PaymentComponent } from './pages/payment/payment.component';\r\nimport { PaymentListComponent } from './pages/payment/payment-list/payment-list.component';\r\nimport { PaymentGridComponent } from './pages/payment/payment-grid/payment-grid.component';\r\nimport { PaymentClosedDocumentGridComponent } from './pages/payment/payment-closed-document-grid/payment-closed-document-grid.component';\r\nimport { PaymentMeanGridComponent } from './pages/payment/payment-mean-grid/payment-mean-grid.component';\r\nimport { TransactionGroupViewDialogComponent } from './pages/transaction-drill-view/transaction-group-view-dialog.component';\r\nimport { TransactionGroupGridComponent } from './pages/transaction-drill-view/group-grid/transaction-group-grid.component';\r\nimport { TransactionGroupChartComponent } from './pages/transaction-drill-view/group-chart/transaction-group-chart.component';\r\nimport { OrganizationSelectorComponent } from './components/organization-selector/organization-selector.component';\r\nimport { FlatModeButtonComponent } from './components/flat-mode-button/flat-mode-button.component';\r\nimport { ExpandCollapseButtonComponent } from './components/expand-collapse-button/expand-collapse-button.component';\r\nimport { AccountRebalanceViewComponent } from './pages/account-rebalance/account-rebalance-view.component';\r\nimport { AccountRebalanceGridComponent } from './pages/account-rebalance/grid/account-rebalance-grid.component';\r\nimport { OtpInputDialogComponent } from './components/otp-input-dialog/otp-input-dialog.component';\r\nimport { DocumentComponent } from './pages/document/document.component';\r\nimport { DocumentDetailsComponent } from './pages/document/document-details/document-details.component';\r\nimport { DocumentEndpoint } from './_proxy/endpoints/document.endpoint';\r\nimport { DocumentLinesGridComponent } from './pages/document/document-lines-grid/document-lines-grid.component';\r\nimport { AccountingJournalEntryEndpoint } from './_proxy/endpoints/accountingjournalentry.endpoint';\r\nimport { AccountingJournalEntryComponent } from './pages/accounting-journal-entry/accounting-journal-entry.component';\r\nimport { AccountingJournalEntryDetailsComponent } from './pages/accounting-journal-entry/accounting-journal-entry-details/accounting-journal-entry-details.component';\r\nimport { AccountingJournalEntryLinesGridComponent } from './pages/accounting-journal-entry/accounting-journal-entry-lines-grid/accounting-journal-entry-lines-grid.component';\r\nimport { BusinessPartnerComponent } from './pages/business-partner/business-partner.component';\r\nimport { BusinessPartnerListComponent } from './pages/business-partner/business-partner-list/business-partner-list.component';\r\nimport { BusinessPartnerGridComponent } from './pages/business-partner/business-partner-grid/business-partner-grid.component';\r\nimport { BusinessPartnerGroupEndpoint } from './_proxy/endpoints/businesspartnergroup.endpoint';\r\nimport { DocumentGridComponent } from './pages/document/document-grid/document-grid.component';\r\nimport { LedgerAccountComponent } from './pages/ledger-account/ledger-account.component';\r\nimport { LedgerAccountEndpoint } from './_proxy/endpoints/ledgeraccount.endpoint';\r\nimport { LedgerGridComponent } from './pages/ledger/ledger-grid/ledger-grid.component';\r\nimport { LedgerEndpoint } from './_proxy/endpoints/ledger.endpoint';\r\nimport { SalesPersonEndpoint } from './_proxy/endpoints/salesperson.endpoint';\r\nimport { DocumentListComponent } from './pages/document/document-list/document-list.component';\r\nimport { DocumentChartDialogComponent } from './pages/document/document-chart-dialog/document-chart-dialog.component';\r\nimport { PaymentChartDialogComponent } from './pages/payment/payment-chart-dialog/payment-chart-dialog.component';\r\nimport { BankpassListPageComponent } from './pages/bankpass/list/bankpass-list-page.component';\r\nimport { LoanComponent } from './pages/loan/loan.component';\r\nimport { LoanListComponent } from './pages/loan/list/loan-list.component';\r\nimport { LoanGridComponent } from './pages/loan/grid/loan-grid.component';\r\nimport { LoanEndpoint } from './_proxy/endpoints/loan.endpoint';\r\nimport { LoanPaymentEndpoint } from './_proxy/endpoints/loanpayment.endpoint';\r\nimport { IndexEndpoint } from './_proxy/endpoints/index.endpoint';\r\nimport { InterestEndpoint } from './_proxy/endpoints/interest.endpoint';\r\nimport { LoanPaymentsGridComponent } from './pages/loan/loan-payments/grid/loan-payments-grid.component';\r\nimport { IndexListComponent } from './pages/index/list/index-list.component';\r\nimport { IndexGridComponent } from './pages/index/grid/index-grid.component';\r\nimport { IndexComponent } from './pages/index/index.component';\r\nimport { InterestListComponent } from './pages/interest/list/interest-list.component';\r\nimport { InterestGridComponent } from './pages/interest/grid/interest-grid.component';\r\nimport { InterestComponent } from './pages/interest/interest.component';\r\nimport { HolidayEndpoint } from './_proxy/endpoints/holiday.endpoint';\r\nimport { HolidayComponent } from './pages/holiday/holiday.component';\r\nimport { HolidayListComponent } from './pages/holiday/list/holiday-list.component';\r\nimport { HolidayGridComponent } from './pages/holiday/grid/holiday-grid.component';\r\nimport { PostPaymentComponent } from './pages/post-payment/post-payment.component';\r\nimport { SecurityListComponent } from './pages/security/list/security-list.component';\r\nimport { SecurityGridComponent } from './pages/security/grid/security-grid.component';\r\nimport { SecurityComponent } from './pages/security/security.component';\r\nimport { SecurityEndpoint } from './_proxy/endpoints/security.endpoint';\r\nimport { SecurityReportComponent } from './pages/security-report/security-report.component';\r\nimport { SecurityReportGridComponent } from './pages/security-report/grid/security-report-grid.component';\r\nimport { SecurityReportListComponent } from './pages/security-report/list/security-report-list.component';\r\nimport { CompanyCreationWizardComponent } from './pages/company-creation-wizard/company-creation-wizard.component';\r\nimport { CompanyCreationPageCompanyComponent } from './pages/company-creation-wizard/pages/company-creation-page-company.component';\r\nimport { CompanyCreationPageAccountComponent } from './pages/company-creation-wizard/pages/company-creation-page-account.component';\r\nimport { CompanyCreationPageBookingAccountsComponent } from './pages/company-creation-wizard/pages/company-creation-page-bookingaccounts.component';\r\nimport { CompanyCreationPageFinishedComponent } from './pages/company-creation-wizard/pages/company-creation-page-finished.component';\r\nimport { LoanTransactionGridComponent } from './pages/post-payment/transactions-grid/loan-transactions-grid.component';\r\nimport { LoanPaymentsReportListComponent } from './pages/loan-payments-report/list/loan-payments-report-list.component';\r\nimport { LoanPaymentsReportGridComponent } from './pages/loan-payments-report/grid/loan-payments-reprort-grid.component';\r\nimport { NewBankpassInlineComponent } from './components/new-bankpass-inline/new-bankpass-inline.component';\r\nimport { FinancialReportTreeComponent } from './pages/financial-report/financial-report-tree/financial-report-tree.component';\r\nimport { LastTransactionsDashboardGridComponent } from './pages/dashboard/last-transactions/grid/last-transactions-grid.component';\r\nimport { GridChartComponent } from './pages/dashboard/grid-chart/grid-chart.component';\r\nimport { LastTransactionsCategoryGroupsDashboardGridComponent }\r\n from './pages/dashboard/last-transactions-category-groups/last-transactions-category-groups-grid.component';\r\nimport { BalanceReportTransactionsDetailsComponent }\r\n from './pages/balance-report/balance-report-details/transactions/balance-report-transactions-details.component';\r\nimport { CreditCardsReportComponent } from './pages/credit-cards-report/credit-cards-report.component';\r\nimport { CreditCardsReportGridComponent } from './pages/credit-cards-report/grid/credit-cards-report-grid.component';\r\nimport { TransactionCategorySelectorComponent }\r\n from './pages/transaction-report/transaction-category-selector/transaction-category-selector.component';\r\nimport { TransactionCategoryFormComponent }\r\n from './pages/transaction-category/transaction-category-form/transaction-category-form.component';\r\nimport { ClassificationRuleFormComponent }\r\n from './pages/transaction-classification-rule/classification-rule-form/classification-rule-form.component';\r\nimport { PostingTemplateFormComponent } from './pages/posting-template/posting-template-form/posting-template-form.component';\r\nimport { TransactionsExportComponent } from './pages/transactions-export/transactions-export.component';\r\nimport { TransactionsExportGridComponent } from './pages/transactions-export/transactions-export-grid.component';\r\nimport { FilterDescriptionComponent } from './components/filter-description/filter-description.component';\r\nimport { CreditCardTransactionsDetailComponent } from './pages/credit-cards-report/transactions/credit-card-transactions-detail.component';\r\nimport { CreditCardTransactionsGridComponent } from './pages/credit-cards-report/transactions/credit-card-transactions-grid.component';\r\nimport { DeploymentListComponent } from './pages/deployment/list/deployment-list.component';\r\nimport { DeploymentGridComponent } from './pages/deployment/list/deployment-grid.component';\r\nimport { DeploymentEndpoint } from './_proxy/endpoints/deployment.endpoint';\r\nimport { DeploymentComponent } from './pages/deployment/deployment.component';\r\nimport { BillingContractListComponent } from './pages/billing-contract/list/billing-contract-list.component';\r\nimport { BillingContractGridComponent } from './pages/billing-contract/list/billing-contract-grid.component';\r\nimport { BillingContractEndpoint } from './_proxy/endpoints/billingcontract.endpoint';\r\nimport { BillingContractComponent } from './pages/billing-contract/billing-contract.component';\r\nimport { LedgerChartDialogComponent } from './pages/ledger/ledger-chart-dialog/ledger-chart-dialog.component';\r\nimport { CompanyMetadataEndpoint } from './_proxy/endpoints/companymetadata.endpoint';\r\nimport { UpdatePrincipalDialogComponent } from './pages/loan/update-principal-dialog/update-principal-dialog.component';\r\nimport { ChequesReportComponent } from './pages/cheques-report/cheques-report.component';\r\nimport { ChequesReportGridComponent } from './pages/cheques-report/cheques-report-grid.component';\r\nimport { CCContractListComponent } from './pages/cccontract/list/cccontract-list.component';\r\nimport { CCContractGridComponent } from './pages/cccontract/list/cccontract-grid.component';\r\nimport { CCContractEndpoint } from './_proxy/endpoints/cccontract.endpoint';\r\nimport { CCContractComponent } from './pages/cccontract/cccontract.component';\r\nimport { CCInvoicesProcessingComponent, CCInvoiceComponent, CCInvoicesProcessingGridComponent, CCInvoiceTransfersGridComponent }\r\n from './pages/cc-invoices-processing';\r\nimport { CCInvoicesHistoryComponent } from './pages/cc-invoices-history';\r\nimport { CCInvoiceEndpoint } from './_proxy/endpoints/ccinvoice.endpoint';\r\nimport { CCTransferEndpoint } from './_proxy/endpoints/cctransfer.endpoint';\r\nimport { CCTransferReportGridComponent } from './pages/cc-transfers-report';\r\nimport { CCTransfersReportComponent } from './pages/cc-transfers-report';\r\nimport { UploadJournalEntryHistoryGridComponent } from './pages/upload/upload-journal-entry-history-grid.component';\r\nimport { JournalEntryUploadEndpoint } from './_proxy/endpoints/journalentryupload.endpoint';\r\nimport { FutureChequeImageEndpoint } from './_proxy/endpoints/futurechequeimage.endpoint';\r\nimport { CCInvoiceImageEndpoint } from './_proxy/endpoints/ccinvoiceimage.endpoint';\r\nimport { ExportNoteRuleListComponent } from './pages/export-note-rule/list/export-note-rule-list.component';\r\nimport { ExportNoteRuleComponent } from './pages/export-note-rule/export-note-rule.component';\r\nimport { ExportNoteRuleGridComponent } from './pages/export-note-rule/list/export-note-rule-grid.component';\r\nimport { ExportNoteRuleEndpoint } from './_proxy/endpoints/exportnoterule.endpoint';\r\nimport { RecategorizeDialogComponent } from './dialogs/recategorize-dialog/recategorize-dialog.component';\r\nimport { JournalEntryFormComponent } from './pages/journal-entry/journal-entry-form/journal-entry-form.component';\r\nimport { FileImportTemplateListComponent } from './pages/file-import-template/list/file-import-template-list.component';\r\nimport { FileImportTemplateEndpoint } from './_proxy/endpoints/fileimporttemplate.endpoint';\r\nimport { FileImportTemplateGridComponent } from './pages/file-import-template/list/file-import-template-grid.component';\r\nimport { FileImportTemplateListPageComponent } from './pages/file-import-template/list/file-import-template-list-page.component';\r\nimport { FileImportTemplateComponent } from './pages/file-import-template/file-import-template.component';\r\nimport * as pages from './pages';\r\nimport { TransactionsImportComponent } from './pages/transactions-import/transactions-import.component';\r\nimport { ImportTransactionsEndpoint } from './_proxy/endpoints/importtransactions.endpoint';\r\nimport { AdminActivityRecordEndpoint } from './_proxy/endpoints/adminactivityrecord.endpoint';\r\nimport { AdminActionsComponent } from './pages/admin-actions/admin-actions.component';\r\nimport { AdminActionsGridComponent } from './pages/admin-actions/grid/admin-actions-grid.component';\r\nimport { AccessService } from './services/access.service';\r\nimport { AdminAccessRequestComponent } from './pages/admin-access-request/admin-access-request.component';\r\nimport { AdminAccessRequestEndpoint } from './_proxy/endpoints/adminaccessrequest.endpoint';\r\nimport { AdminAccessRequestListComponent } from './pages/admin-access-request/list/admin-access-request-list.component';\r\nimport { AdminAccessRequestGridComponent } from './pages/admin-access-request/list/admin-access-request-grid.component';\r\nimport { TransactionsImportGridComponent } from './pages/transactions-import/list/transactions-import-grid.component';\r\nimport {\r\n TransactionsImportErrorsGridComponent\r\n} from './pages/transactions-import/list/transactions-import-errors-grid.component';\r\nimport { BookingAccountCodeBoxComponent } from './components/booking-account-code-box/booking-account-code-box.component';\r\nimport { UploadDialogComponent } from './dialogs/upload-dialog/upload-dialog.component';\r\nimport { QuickFilterComponent } from './components/quick-filter/quick-filter.component';\r\nimport { OrganizationService } from './services/organization.service';\r\nimport { UploadRequestEndpoint } from './_proxy/endpoints/uploadrequest.endpoint';\r\nimport { BaseEntity, BaseState, GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { FileExportTransactionsComponent } from './components/file-export-transactions/file-export-transactions.component';\r\nimport { BalanceHistoryDateRangeComponent } from './pages/balance-history-report/balance-history-date-range/balance-history-date-range.component';\r\nimport { BookingAccountSelectorComponent } from './components/selectors/booking-account-selector/booking-account-selector.component';\r\nimport { FilterItemSelectorComponent } from './components/selectors/filter-item-selector/filter-item-selector.component';\r\nimport { BankSelectorComponent } from './components/selectors/bank-selector/bank-selector.component';\r\nimport { BookingAccountSubtypeSelectorComponent } from './components/selectors/booking-account-subtype-selector/booking-account-subtype-selector.component';\r\nimport { CurrencySelectorComponent } from './components/selectors/currency-selector/currency-selector.component';\r\nimport { AccountGroupSelectorComponent } from './components/selectors/account-group-selector/account-group-selector.component';\r\nimport { CategorySelectorComponent } from './components/selectors/category-selector/category-selector.component';\r\nimport { ForecastMapperSelectorComponent } from './components/selectors/forecast-mapper-selector/forecast-mapper-selector.component';\r\nimport { ScenarioSelectorComponent } from './components/selectors/scenario-selector/scenario-selector.component';\r\nimport { ProbabilityLevelSelectorComponent } from './components/selectors/probability-level-selector/probability-level-selector.component';\r\nimport { SideSelectorComponent } from './components/selectors/side-selector/side-selector.component';\r\nimport { BusinessPartnerSelectorComponent } from './components/selectors/business-partner-selector/business-partner-selector.component';\r\nimport { CompanyGlobalSelectorComponent } from './components/selectors/company-global-selector/company-global-selector.component';\r\nimport { CompanyGlobalService } from './services/company-global.service';\r\nimport { FilterService } from './services/filter.service';\r\nimport * as directives from './directives';\r\nimport * as components from './components';\r\nimport { IndexDialogComponent } from './pages/index/dialog/index-dialog.component';\r\nimport { InterestDialogComponent } from './pages/interest/dialog/interest-dialog.component';\r\nimport { NotificationConfigurationBaseService } from '@m4u-angular/core/framework/notification-configuration-base.service';\r\nimport { NotificationConfigurationService } from './services/notification-configuration.service';\r\nimport { ContactUsSubjectEndpoint } from './_proxy/endpoints/contactussubject.endpoint';\r\nimport { ContactUsSubject } from './_proxy/entities/contactussubject.entity';\r\nimport { BaseDataStoreCRUDServer } from '@m4u-angular/base/datalayer/BaseDataStoreCRUDServer';\r\nimport { CommonSettingComponent } from '../../src/ui/components/general/commonsettings/commonsetting.component';\r\nimport { ContactUsInjectableComponent } from '@kraken/components/contact-us-injectable/contact-us-injectable.component';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ContactUsDialogComponent } from '@kraken/dialogs/contact-us-dialog/contact-us-dialog.component';\r\nimport { ScheduleDialogComponent } from '@kraken/dialogs/schedule-dialog/schedule-dialog.component';\r\nimport { ContactUsEndpoint } from './_proxy/endpoints/contactus.endpoint';\r\nimport { AccountingForecastEndpoint } from './_proxy/endpoints/accountingforecast.endpoint';\r\nimport { AccountingForecastCategoryEndpoint } from './_proxy/endpoints/accountingforecastcategory.endpoint';\r\nimport { SystemOptionsService } from '@m4u-angular/core/framework/system-options.service';\r\nimport { GlobalDownloadRetryComponent } from './pages/global-download-retry/global-download-retry.component';\r\nimport { GlobalDownloadDialog } from './pages/global-download-retry/global-download-dialog.component';\r\nimport { DownloadRetryEndpoint } from './_proxy/endpoints/downloadretry.endpoint';\r\nimport { ReplicationRequestEndpoint } from './_proxy/endpoints/replicationrequest.endpoint';\r\nimport { ExternalApiKeyListComponent } from './pages/external-api-key/list/external-api-key-list.component';\r\nimport { ExternalApiKeyGridComponent } from './pages/external-api-key/list/external-api-key-grid.component';\r\nimport { ExternalAPIKeyEndpoint } from './_proxy/endpoints/externalapikey.endpoint';\r\nimport { ExternalApiKeyComponent } from './pages/external-api-key/external-api-key.component';\r\nimport { AlertTemplateComponent } from './pages/alert-template/alert-template.component';\r\nimport { AlertTemplateListComponent } from './pages/alert-template/list/alert-template-list.component';\r\nimport { AlertTemplateGridComponent } from './pages/alert-template/list/alert-template-grid.component';\r\nimport { AlertTemplateEndpoint } from './_proxy/endpoints/alerttemplate.endpoint';\r\nimport { DateRangeComponent } from './components/date-range/date-range.component';\r\nimport { ParentCategoryEndpoint } from './_proxy/endpoints/parentcategory.endpoint';\r\nimport { ParentCategoryComponent } from './pages/parent-category/parent-category.component';\r\nimport { ParentCategoryListPageComponent } from './pages/parent-category/list/parent-category-list-page.component';\r\nimport { ParentCategoryListComponent } from './pages/parent-category/list/parent-category-list.component';\r\nimport { ParentCategoryGridComponent } from './pages/parent-category/list/parent-category-grid.component';\r\nimport { AccountForecastCategoryGridComponent } from './pages/account-forecast-category/account-forecast-category-grid.component';\r\nimport { AccountForecastCategoryListComponent } from './pages/account-forecast-category/account-forecast-category-list.component';\r\n\r\nimport { IncomingPaymentProcessingComponent } from './pages/incoming-payment-processing/incoming-payment-processing.component';\r\nimport {\r\n IncomingPaymentProcessingListComponent\r\n} from './pages/incoming-payment-processing/incoming-payment-processing-list/incoming-payment-processing-list.component';\r\nimport {\r\n IncomingPaymentProcessingGridComponent\r\n} from './pages/incoming-payment-processing/incoming-payment-processing-grid/incoming-payment-processing-grid.component';\r\nimport { \r\n MarkAsIrrelevantDialogComponent \r\n} from './pages/incoming-payment-processing/mark-as-irrelevant-dialog/mark-as-irrelevant-dialog.component';\r\nimport { \r\n IncomingPaymentDocumentsGridComponent\r\n} from './pages/incoming-payment-processing/incoming-payment-documents-grid/incoming-payment-documents-grid.component';\r\nimport { IncomingPaymentProcessingService } from './services/incoming-payment-processing.service';\r\nimport {\r\n UploadIncomingPaymentHistoryGridComponent\r\n} from './pages/upload/upload-incoming-payment-history-grid/upload-incoming-payment-history-grid.component';\r\nimport { IncomingPaymentUploadEndpoint } from './_proxy/endpoints/incomingpaymentupload.endpoint';\r\nimport {\r\n ShowTransactionsByDialogComponent\r\n} from './pages/transaction-report/show-transactions-by-dialog/show-transactions-by-dialog.component';\r\nimport { ManualBalancesEntryComponent } from './pages/manual-balances-entry/manual-balances-entry.component';\r\nimport { \r\n ManualBalancesEntryGridComponent \r\n} from './pages/manual-balances-entry/manual-balances-entry-grid/manual-balances-entry-grid.component';\r\nimport { \r\n ResetBalancesDialogComponent \r\n} from './pages/manual-balances-entry/reset-balances-dialog/reset-balances-dialog.component';\r\n\r\nimport { BaseCategoryGridComponent } from './pages/categories/list/base-category-grid.component';\r\nimport { DepositCategoryComponent } from './pages/categories/deposit-category.component';\r\nimport { DepositCategoryListComponent } from './pages/categories/list/deposit-category-list.component';\r\nimport { DepositCategoryEndpoint } from './_proxy/endpoints/depositcategory.endpoint';\r\nimport { BaseClassificationRuleGridComponent } from './pages/category-classification-rules/list/base-classification-rule-grid.component';\r\nimport { DepositClassificationRuleListComponent }\r\n from './pages/category-classification-rules/list/deposit-classification-rule-list.component';\r\nimport { DepositCategoryClassificationRuleComponent }\r\n from './pages/category-classification-rules/deposit-category-classification-rule.component';\r\nimport { DepositClassificationRuleEndpoint } from './_proxy/endpoints/depositclassificationrule.endpoint';\r\nimport { StockCategoryEndpoint } from './_proxy/endpoints/stockcategory.endpoint';\r\nimport { LoanCategoryEndpoint } from './_proxy/endpoints/loancategory.endpoint';\r\nimport { GuaranteeCategoryEndpoint } from './_proxy/endpoints/guaranteecategory.endpoint';\r\nimport { StockCategoryListComponent } from './pages/categories/list/stock-category-list.component';\r\nimport { StockCategoryComponent } from './pages/categories/stock-category.component';\r\nimport { LoanCategoryListComponent } from './pages/categories/list/loan-category-list.component';\r\nimport { LoanCategoryComponent } from './pages/categories/loan-category.component';\r\nimport { GuaranteeCategoryListComponent } from './pages/categories/list/guarantee-category-list.component';\r\nimport { GuaranteeCategoryComponent } from './pages/categories/guarantee-category.component';\r\nimport { StockClassificationRuleListComponent } from './pages/category-classification-rules/list/stock-classification-rule-list.component';\r\nimport { LoanClassificationRuleListComponent } from './pages/category-classification-rules/list/loan-classification-rule-list.component';\r\nimport { GuaranteeClassificationRuleListComponent }\r\n from './pages/category-classification-rules/list/guarantee-classification-rule-list.component';\r\nimport { LoanClassificationRuleEndpoint } from './_proxy/endpoints/loanclassificationrule.endpoint';\r\nimport { StockClassificationRuleEndpoint } from './_proxy/endpoints/stockclassificationrule.endpoint';\r\nimport { GuaranteeClassificationRuleEndpoint } from './_proxy/endpoints/guaranteeclassificationrule.endpoint';\r\nimport { LoanCategoryClassificationRuleComponent } from './pages/category-classification-rules/loan-category-classification-rule.component';\r\nimport { StockCategoryClassificationRuleComponent }\r\n from './pages/category-classification-rules/stock-category-classification-rule.component';\r\nimport { GuaranteeCategoryClassificationRuleComponent }\r\n from './pages/category-classification-rules/guarantee-category-classification-rule.component';\r\nimport { BalanceCategorySelectorComponent } from './pages/categories/balance-category-selector/balance-category-selector.component';\r\nimport { PlaidEndpoint } from './_proxy/endpoints/plaid.endpoint';\r\nimport { CallbackComponent } from './pages/callback/callback.component'\r\n\r\n// mobile region\r\nimport { MobileContentHeaderComponent } from './mobile/common/mobile-content-header/mobile-content-header.component';\r\nimport { MobileTotalBalanceComponent } from './mobile/common/mobile-total-balance/mobile-total-balance.component';\r\nimport { MobileItemDetailsComponent } from './mobile/common/mobile-item-details/mobile-item-details.component';\r\nimport { ReportNestedListComponent } from './mobile/common/report-nested-list/report-nested-list.component';\r\nimport { MobileBalanceReportComponent } from './mobile/pages/mobile-balance-report/mobile-balance-report.component';\r\nimport { FormatDatePipe, FormatNumberSumPipe } from '@m4u-angular/ui/directives/Pipes';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { MobileBalanceDetailsReportComponent } from './mobile/pages/mobile-balance-details-report/mobile-balance-details-report.component';\r\nimport { MobileDatePickerComponent } from './mobile/common/mobile-date-picker/mobile-date-picker.component';\r\nimport { MobileDateRangePickerComponent } from './mobile/common/mobile-date-range-picker/mobile-date-range-picker.component';\r\nimport { MobileTransactionsReportComponent } from './mobile/pages/mobile-transactions-report/mobile-transactions-report.component';\r\nimport { BaseReportService } from './mobile/services/base-report.service';\r\nimport { MobileChequesReportComponent } from './mobile/pages/mobile-cheques-report/mobile-cheques-report.component';\r\nimport { MobileChequeDialogComponent } from './mobile/common/mobile-cheque-dialog/mobile-cheque-dialog.component';\r\nimport { MobileCreditCardReportComponent } from './mobile/pages/mobile-cc-report/mobile-cc-report.component';\r\nimport { MobileCarouselComponent } from './mobile/common/mobile-carousel/mobile-carousel.component';\r\nimport { MobileHistoryChartComponent } from './mobile/common/mobile-history-chart/mobile-history-chart.component';\r\nimport { MobileDashboardComponent } from './mobile/pages/mobile-dashboard/mobile-dashboard.component';\r\nimport { MobileSyncStatusComponent } from './mobile/pages/mobile-sync-status/mobile-sync-status.component';\r\nimport { MobileSyncErrorComponent } from './mobile/common/mobile-sync-error/mobile-sync-error.component';\r\nimport { OrganizationSelectorBottomSheetComponent } from './components/organization-selector/organization-selector-bottom-sheet/organization-selector-bottom-sheet.component';\r\nimport { IncomingPaymentProcessingEndpoint } from './_proxy/endpoints/incomingpaymentprocessing.endpoint';\r\nimport { PlaidService } from './services/plaid.service';\r\nimport { PlaidScriptLoader } from './services/plaid-script-loader.service';\r\nimport DataGrid from 'devextreme/ui/data_grid';\r\nimport { CashflowBalancesErrorDialogComponent } from \r\n './pages/cashflow-report/cashflow-balances-error-dialog/cashflow-balances-error-dialog.component';\r\n\r\nexport class KrakenAppConfig extends AppConfig {\r\n override ModuleName = 'Kraken';\r\n override ShowBreadcrumb = () => AppInjector.get(ScreenService).IsDesktop();\r\n override IsAllowNotifications = true;\r\n\r\n override Components = [\r\n OrganizationListComponent,\r\n OrganizationGridComponent,\r\n OrganizationComponent,\r\n\r\n CompanyListComponent,\r\n CompanyGridComponent,\r\n CompanyComponent,\r\n\r\n BankpassListComponent,\r\n BankPassGridComponent,\r\n BankPassComponent,\r\n BankpassListPageComponent,\r\n\r\n AccountMappingListComponent,\r\n AccountMappingGridComponent,\r\n\r\n\r\n AccountListComponent,\r\n AccountGridComponent,\r\n AccountComponent,\r\n\r\n BookingAccountListComponent,\r\n BookingAccountGridComponent,\r\n BookingAccountActionDialogComponent,\r\n\r\n UserListComponent,\r\n UserGridComponent,\r\n UserComponent,\r\n\r\n AccountGroupListComponent,\r\n AccountGroupGridComponent,\r\n AccountGroupComponent,\r\n\r\n AdminListComponent,\r\n AdminGridComponent,\r\n AdminComponent,\r\n\r\n DownloadHistoryComponent,\r\n DownloadHistoryGridComponent,\r\n DownloadTaskHistoryGridComponent,\r\n DownloadStepHistoryGridComponent,\r\n\r\n UploadHistoryComponent,\r\n UploadHistoryGridComponent,\r\n UploadJournalEntryHistoryGridComponent,\r\n\r\n SyncStatusDownloadsComponent,\r\n SyncStatusUploadsComponent,\r\n SyncStatusChartComponent,\r\n SyncStatusReplicationComponent,\r\n\r\n TransactionReportComponent,\r\n TransactionReportGridComponent,\r\n ShowTransactionsByDialogComponent,\r\n\r\n BalanceReportComponent,\r\n BalanceReportGridComponent,\r\n\r\n AccountActionDialogComponent,\r\n\r\n DashboardComponent,\r\n\r\n BalanceDashboardGridComponent,\r\n BalanceDashboardChartComponent,\r\n BalancePerCurrencyDashboardGridComponent,\r\n BalancePerCurrencyDashboardChartComponent,\r\n AssetsLiabilitiesDashboardGridComponent,\r\n AssetsLiabilitiesDashboardChartComponent,\r\n BalanceGroupingPerCurrencyDashboardChartComponent,\r\n DashboardTotalCardsComponent,\r\n\r\n BillingReportComponent,\r\n BillingReportChartComponent,\r\n BillingReportGridComponent,\r\n\r\n BillingContractsReportComponent,\r\n BillingContractsReportGridComponent,\r\n BillingContractsReportBillingGridComponent,\r\n\r\n CurrencyRateDashboardChartComponent,\r\n DashboardFooterComponent,\r\n\r\n NotificationOrganizationTemplateComponent,\r\n NotificationTemplateAccordionComponent,\r\n NotificationTemplateSectionFiltersGridComponent,\r\n NotificationTemplateListComponent,\r\n NotificationTemplateGridComponent,\r\n ProblemIndicatorComponent,\r\n\r\n TransactionCategoryListPageComponent,\r\n TransactionCategoryGridComponent,\r\n TransactionCategoryComponent,\r\n TransactionCategoryListComponent,\r\n\r\n ClassificationRuleListPageComponent,\r\n ClassificationRuleListComponent,\r\n ClassificationRuleComponent,\r\n ClassificationRuleGridComponent,\r\n\r\n ScenarioListComponent,\r\n ScenarioGridComponent,\r\n ScenarioComponent,\r\n\r\n ProbabilityLevelGridComponent,\r\n ProbabilityLevelListComponent,\r\n ProbabilityLevelComponent,\r\n\r\n ForecastMapperComponent,\r\n ForecastMapperListComponent,\r\n ForecastMapperGridComponent,\r\n\r\n PostingTemplateListComponent,\r\n PostingTemplateGridComponent,\r\n PostingTemplateComponent,\r\n\r\n JournalEntryListComponent,\r\n JournalEntryGridComponent,\r\n JournalEntryComponent,\r\n\r\n BalanceHistoryReportComponent,\r\n BalanceHistoryReportGridComponent,\r\n\r\n ChequeGridComponent,\r\n ChequeListDialogComponent,\r\n ChequeMobileListComponent,\r\n\r\n CashflowReportComponent,\r\n CashflowReportDetailedComponent,\r\n CashflowDetailedGridComponent,\r\n CashflowDetailedListComponent,\r\n CashflowChartViewComponent,\r\n\r\n ReconciliationFormComponent,\r\n ReconciliationViewComponent,\r\n ReconciliationGridComponent,\r\n TransactionGridComponent,\r\n ForecastOperationGridComponent,\r\n\r\n RecurringForecastGridComponent,\r\n RecurringForecastListComponent,\r\n RecurringForecastRecommendationComponent,\r\n RecurringForecastRecommendationGridComponent,\r\n ImportForecastsComponent,\r\n\r\n CreditLimitListComponent,\r\n CreditLimitGridComponent,\r\n CreditLimitComponent,\r\n\r\n ForecastOperationComponent,\r\n RecurringForecastComponent,\r\n\r\n ChequeMobileListComponent,\r\n ShareInformationDialogComponent,\r\n\r\n AssetsLiabilitiesReportGridComponent,\r\n AssetsLiabilitiesReportComponent,\r\n\r\n GenerateJournalEntryDialogComponent,\r\n ReconciliationDialogComponent,\r\n CurrencyIconComponent,\r\n\r\n FilterComponent,\r\n FilterDescriptionComponent,\r\n BalanceReportDepositsDetailsComponent,\r\n BalanceReportLoansDetailsComponent,\r\n BalanceReportStocksDetailsComponent,\r\n BalanceReportGuaranteeDetailsComponent,\r\n\r\n\r\n ReplicationHistoryComponent,\r\n ReplicationHistoryGridComponent,\r\n ReplicationSummaryResultHistoryGridComponent,\r\n ReplicationEntityErrorHistoryGridComponent,\r\n BalanceDetailsReportGridBaseComponent,\r\n BalanceStocksReportGridComponent,\r\n BalanceLoansReportGridComponent,\r\n BalanceDepositsReportGridComponent,\r\n BalanceGuaranteesReportGridComponent,\r\n\r\n PaymentComponent,\r\n PaymentListComponent,\r\n PaymentGridComponent,\r\n PaymentClosedDocumentGridComponent,\r\n PaymentMeanGridComponent,\r\n PaymentChartDialogComponent,\r\n\r\n TransactionGroupViewDialogComponent,\r\n TransactionGroupChartComponent,\r\n TransactionGroupGridComponent,\r\n\r\n OrganizationSelectorComponent,\r\n FlatModeButtonComponent,\r\n ExpandCollapseButtonComponent,\r\n\r\n AccountRebalanceViewComponent,\r\n AccountRebalanceGridComponent,\r\n LoanPaymentsGridComponent,\r\n\r\n OtpInputDialogComponent,\r\n DocumentComponent,\r\n DocumentDetailsComponent,\r\n DocumentLinesGridComponent,\r\n DocumentGridComponent,\r\n DocumentListComponent,\r\n DocumentChartDialogComponent,\r\n\r\n AccountingJournalEntryComponent,\r\n AccountingJournalEntryDetailsComponent,\r\n AccountingJournalEntryLinesGridComponent,\r\n\r\n BusinessPartnerComponent,\r\n BusinessPartnerListComponent,\r\n BusinessPartnerGridComponent,\r\n\r\n LedgerAccountComponent,\r\n LedgerGridComponent,\r\n LedgerChartDialogComponent,\r\n LoanComponent,\r\n LoanListComponent,\r\n LoanGridComponent,\r\n IndexListComponent,\r\n IndexGridComponent,\r\n IndexComponent,\r\n\r\n InterestListComponent,\r\n InterestGridComponent,\r\n InterestComponent,\r\n\r\n HolidayComponent,\r\n HolidayListComponent,\r\n HolidayGridComponent,\r\n PostPaymentComponent,\r\n SecurityListComponent,\r\n SecurityGridComponent,\r\n SecurityComponent,\r\n SecurityReportComponent,\r\n SecurityReportGridComponent,\r\n SecurityReportListComponent,\r\n\r\n LoanTransactionGridComponent,\r\n LoanPaymentsReportListComponent,\r\n LoanPaymentsReportGridComponent,\r\n\r\n CompanyCreationWizardComponent,\r\n CompanyCreationPageCompanyComponent,\r\n CompanyCreationPageAccountComponent,\r\n CompanyCreationPageBookingAccountsComponent,\r\n CompanyCreationPageFinishedComponent,\r\n NewBankpassInlineComponent,\r\n\r\n FinancialReportComponent,\r\n FinancialReportTreeComponent,\r\n NewBankpassInlineComponent,\r\n\r\n LastTransactionsDashboardGridComponent,\r\n GridChartComponent,\r\n LastTransactionsCategoryGroupsDashboardGridComponent,\r\n BalanceReportTransactionsDetailsComponent,\r\n CreditCardsReportComponent,\r\n CreditCardsReportGridComponent,\r\n TransactionsExportComponent,\r\n TransactionsExportGridComponent,\r\n CreditCardTransactionsDetailComponent,\r\n CreditCardTransactionsGridComponent,\r\n DeploymentListComponent,\r\n DeploymentGridComponent,\r\n DeploymentComponent,\r\n BillingContractListComponent,\r\n BillingContractGridComponent,\r\n BillingContractComponent,\r\n UpdatePrincipalDialogComponent,\r\n ChequesReportComponent,\r\n ChequesReportGridComponent,\r\n CCContractListComponent,\r\n CCContractGridComponent,\r\n CCContractComponent,\r\n CCInvoicesProcessingComponent,\r\n CCInvoicesProcessingGridComponent,\r\n CCInvoiceTransfersGridComponent,\r\n CCInvoiceComponent,\r\n CCInvoicesHistoryComponent,\r\n CCTransferReportGridComponent,\r\n CCTransfersReportComponent,\r\n TransactionCategorySelectorComponent,\r\n TransactionCategorizationSetupComponent,\r\n TransactionCategoryFormComponent,\r\n ClassificationRuleFormComponent,\r\n PostingTemplateFormComponent,\r\n ExportNoteRuleListComponent,\r\n ExportNoteRuleComponent,\r\n ExportNoteRuleGridComponent,\r\n RecategorizeDialogComponent,\r\n JournalEntryFormComponent,\r\n FileImportTemplateListComponent,\r\n FileImportTemplateGridComponent,\r\n FileImportTemplateListPageComponent,\r\n FileImportTemplateComponent,\r\n TransactionsImportComponent,\r\n AdminActionsComponent,\r\n AdminActionsGridComponent,\r\n AdminAccessRequestComponent,\r\n AdminAccessRequestListComponent,\r\n AdminAccessRequestGridComponent,\r\n TransactionsImportErrorsGridComponent,\r\n TransactionsImportGridComponent,\r\n BookingAccountCodeBoxComponent,\r\n UploadDialogComponent,\r\n QuickFilterComponent,\r\n FileExportTransactionsComponent,\r\n BalanceHistoryDateRangeComponent,\r\n BookingAccountSelectorComponent,\r\n FilterItemSelectorComponent,\r\n BankSelectorComponent,\r\n BookingAccountSubtypeSelectorComponent,\r\n CurrencySelectorComponent,\r\n AccountGroupSelectorComponent,\r\n CategorySelectorComponent,\r\n ForecastMapperSelectorComponent,\r\n ScenarioSelectorComponent,\r\n ProbabilityLevelSelectorComponent,\r\n SideSelectorComponent,\r\n BusinessPartnerSelectorComponent,\r\n CompanyGlobalSelectorComponent,\r\n IndexDialogComponent,\r\n InterestDialogComponent,\r\n ContactUsInjectableComponent,\r\n ContactUsDialogComponent,\r\n ScheduleDialogComponent,\r\n GlobalDownloadRetryComponent,\r\n GlobalDownloadDialog,\r\n ExternalApiKeyListComponent,\r\n ExternalApiKeyGridComponent,\r\n ExternalApiKeyComponent,\r\n ManualBalancesEntryComponent,\r\n ManualBalancesEntryGridComponent,\r\n ResetBalancesDialogComponent,\r\n CallbackComponent,\r\n\r\n // mobile region \r\n ReportNestedListComponent,\r\n MobileTotalBalanceComponent,\r\n MobileItemDetailsComponent,\r\n MobileContentHeaderComponent,\r\n MobileDatePickerComponent,\r\n MobileDateRangePickerComponent,\r\n MobileBalanceReportComponent,\r\n MobileBalanceDetailsReportComponent,\r\n MobileTransactionsReportComponent,\r\n MobileChequesReportComponent,\r\n MobileChequeDialogComponent,\r\n MobileCreditCardReportComponent,\r\n MobileCarouselComponent,\r\n MobileHistoryChartComponent,\r\n MobileDashboardComponent,\r\n MobileSyncStatusComponent,\r\n MobileSyncErrorComponent,\r\n\r\n OrganizationSelectorBottomSheetComponent,\r\n\r\n AlertTemplateListComponent,\r\n AlertTemplateGridComponent,\r\n AlertTemplateComponent,\r\n\r\n DateRangeComponent,\r\n\r\n ParentCategoryComponent,\r\n ParentCategoryGridComponent,\r\n ParentCategoryListComponent,\r\n ParentCategoryListPageComponent,\r\n AccountForecastCategoryGridComponent,\r\n AccountForecastCategoryListComponent,\r\n\r\n IncomingPaymentProcessingComponent,\r\n IncomingPaymentProcessingListComponent,\r\n IncomingPaymentProcessingGridComponent,\r\n MarkAsIrrelevantDialogComponent,\r\n IncomingPaymentDocumentsGridComponent,\r\n UploadIncomingPaymentHistoryGridComponent,\r\n\r\n DepositCategoryComponent,\r\n DepositCategoryListComponent,\r\n BaseCategoryGridComponent,\r\n BaseClassificationRuleGridComponent,\r\n DepositClassificationRuleListComponent,\r\n DepositCategoryClassificationRuleComponent,\r\n StockCategoryListComponent,\r\n StockCategoryComponent,\r\n LoanCategoryListComponent,\r\n LoanCategoryComponent,\r\n GuaranteeCategoryListComponent,\r\n GuaranteeCategoryComponent,\r\n StockClassificationRuleListComponent,\r\n LoanClassificationRuleListComponent,\r\n GuaranteeClassificationRuleListComponent,\r\n LoanCategoryClassificationRuleComponent,\r\n StockCategoryClassificationRuleComponent,\r\n GuaranteeCategoryClassificationRuleComponent,\r\n BalanceCategorySelectorComponent,\r\n CashflowBalancesErrorDialogComponent,\r\n\r\n ...Object.values(pages),\r\n ...Object.values(directives),\r\n ...Object.values(components),\r\n ];\r\n override EntryComponents = [\r\n ProblemIndicatorComponent\r\n ];\r\n override Endpoints = [\r\n OrganizationEndpoint,\r\n CompanyEndpoint,\r\n BankPassEndpoint,\r\n AccountEndpoint,\r\n BookingAccountEndpoint,\r\n UserEndpoint,\r\n AccountGroupEndpoint,\r\n AdminEndpoint,\r\n DownloadRequestEndpoint,\r\n DownloadEndpoint,\r\n UploadEndpoint,\r\n SyncStatusEndpoint,\r\n SyncStatusAccountEndpoint,\r\n SyncStatusContractEndpoint,\r\n TransactionEndpoint,\r\n BalanceEndpoint,\r\n CurrencyRateEndpoint,\r\n BillingReportEndpoint,\r\n BillingContractsReportEndpoint,\r\n NotificationTemplateEndpoint,\r\n TransactionCategoryEndpoint,\r\n TransactionClassificationRuleEndpoint,\r\n ScenarioEndpoint,\r\n ProbabilityLevelEndpoint,\r\n ForecastMapperEndpoint,\r\n PostingTemplateEndpoint,\r\n JournalEntryEndpoint,\r\n ChequeEndpoint,\r\n ChequeImageEndpoint,\r\n NotificationRequestEndpoint,\r\n ChequeImageEndpoint,\r\n CashflowReportEndpoint,\r\n CreditLimitEndpoint,\r\n ForecastOperationEndpoint,\r\n RecurringForecastEndpoint,\r\n AccountingForecastEndpoint,\r\n ReconciliationEndpoint,\r\n BusinessPartnerEndpoint,\r\n DownloadFailureReviewEndpoint,\r\n ReplicationEndpoint,\r\n PaymentEndpoint,\r\n DocumentEndpoint,\r\n AccountingJournalEntryEndpoint,\r\n BusinessPartnerGroupEndpoint,\r\n LedgerAccountEndpoint,\r\n LedgerEndpoint,\r\n SalesPersonEndpoint,\r\n LoanEndpoint,\r\n LoanPaymentEndpoint,\r\n IndexEndpoint,\r\n InterestEndpoint,\r\n IndexListComponent,\r\n IndexGridComponent,\r\n HolidayEndpoint,\r\n SecurityEndpoint,\r\n FinancialReportEndpoint,\r\n DeploymentEndpoint,\r\n BillingContractEndpoint,\r\n CompanyMetadataEndpoint,\r\n CCContractEndpoint,\r\n CCInvoiceEndpoint,\r\n CCTransferEndpoint,\r\n CCInvoiceEndpoint,\r\n JournalEntryUploadEndpoint,\r\n FutureChequeImageEndpoint,\r\n CCInvoiceImageEndpoint,\r\n ExportNoteRuleEndpoint,\r\n FileImportTemplateEndpoint,\r\n ImportTransactionsEndpoint,\r\n AdminActivityRecordEndpoint,\r\n AdminAccessRequestEndpoint,\r\n UploadRequestEndpoint,\r\n AccountingForecastCategoryEndpoint,\r\n ContactUsSubjectEndpoint,\r\n ContactUsEndpoint,\r\n AccountingForecastCategoryEndpoint,\r\n DownloadRetryEndpoint,\r\n ReplicationRequestEndpoint,\r\n ExternalAPIKeyEndpoint,\r\n ParentCategoryEndpoint,\r\n AlertTemplateEndpoint,\r\n IncomingPaymentProcessingEndpoint,\r\n IncomingPaymentUploadEndpoint,\r\n DepositCategoryEndpoint,\r\n DepositClassificationRuleEndpoint,\r\n StockCategoryEndpoint,\r\n LoanCategoryEndpoint,\r\n GuaranteeCategoryEndpoint,\r\n LoanClassificationRuleEndpoint,\r\n StockClassificationRuleEndpoint,\r\n GuaranteeClassificationRuleEndpoint,\r\n ConsentsEndpoint,\r\n PlaidEndpoint,\r\n ];\r\n override Services = [\r\n BanksListService,\r\n BookingAccountTemplateService,\r\n AccessService,\r\n OrganizationService,\r\n CompanyGlobalService,\r\n FilterService,\r\n { provide: InjectedComponentsBaseService, useClass: InjectedComponentsService },\r\n { provide: NotificationConfigurationBaseService, useClass: NotificationConfigurationService },\r\n FormatDatePipe,\r\n FormatNumberSumPipe,\r\n BaseReportService,\r\n CashflowService,\r\n IncomingPaymentProcessingService,\r\n PlaidService,\r\n PlaidScriptLoader,\r\n ];\r\n override RoutesProtected = [\r\n { path: 'scenario/:EntryID', component: ScenarioComponent, outlet: 'window' },\r\n { path: 'probability-level/:EntryID', component: ProbabilityLevelComponent, outlet: 'window' },\r\n { path: 'forecast-mapper/:EntryID', component: ForecastMapperComponent, outlet: 'window' },\r\n { path: 'organizations', component: OrganizationListComponent, data: { Menu: 'organizations' } },\r\n { path: 'organization/:EntryID', component: OrganizationComponent, data: { Menu: 'my_organization' } },\r\n { path: 'organization/:EntryID', component: OrganizationComponent, data: { Menu: 'my_organization' }, outlet: 'window' },\r\n { path: 'dashboard', component: DashboardComponent, data: { Menu: 'dashboard' } },\r\n { path: 'company/:EntryID', component: CompanyComponent },\r\n { path: 'company/:EntryID', component: CompanyComponent, outlet: 'window' },\r\n { path: 'credit-limits', component: CreditLimitListComponent },\r\n { path: 'credit-limit/:EntryID', component: CreditLimitComponent, outlet: 'window' },\r\n { path: 'forecast-operation/:EntryID', component: ForecastOperationComponent, outlet: 'window' },\r\n { path: 'loans', component: LoanListComponent, data: { Menu: 'loan_folder' } },\r\n { path: 'loan/:EntryID', component: LoanComponent, outlet: 'window' },\r\n {\r\n path: 'recurring-forecasts-recommendation', component: RecurringForecastRecommendationComponent,\r\n data: { Menu: 'recurring-forecasts-recommendation' }\r\n },\r\n { path: 'recurring-forecasts', component: RecurringForecastListComponent, data: { Menu: 'recurring-forecasts' } },\r\n { path: 'import-forecasts', component: ImportForecastsComponent, outlet: 'window' },\r\n { path: 'recurring-forecast/:EntryID', component: RecurringForecastComponent, outlet: 'window' },\r\n { path: 'bankpasses', component: BankpassListPageComponent, data: { Menu: 'bank-passes-global' } },\r\n ///EntryID is the BankPass EntryID\r\n { path: 'bankpass-accounts-mappings/:EntryID', component: AccountMappingListComponent, outlet: 'window' },\r\n { path: 'bankpass/:EntryID', component: BankPassComponent, outlet: 'window' },\r\n { path: 'change-bankpass/:EntryID', component: BankPassComponent },\r\n { path: 'account/:EntryID', component: AccountComponent, outlet: 'window' },\r\n { path: 'user/:EntryID', component: UserComponent, outlet: 'window' },\r\n { path: 'account-group/:EntryID', component: AccountGroupComponent, outlet: 'window' },\r\n { path: 'admins', component: AdminListComponent, data: { Menu: 'admins' } },\r\n { path: 'admin/:EntryID', component: AdminComponent, outlet: 'window' },\r\n { path: 'download-history', component: DownloadHistoryComponent, data: { Menu: 'download_history' } },\r\n { path: 'upload-history', component: UploadHistoryComponent, data: { Menu: 'upload_history' } },\r\n { path: 'sync-status', component: pages.SyncStatusComponent, data: { Menu: 'sync_status' } },\r\n { path: 'sync-status-downloads', component: SyncStatusDownloadsComponent, data: { Menu: 'sync_status_downloads' } },\r\n { path: 'sync-status-uploads', component: SyncStatusUploadsComponent, data: { Menu: 'sync_status_uploads' } },\r\n { path: 'transaction-report', component: TransactionReportComponent, data: { Menu: 'transaction_report' } },\r\n { path: 'transaction-report-grid', component: TransactionReportComponent, data: { Menu: 'transaction_report' }, outlet: 'window' },\r\n { path: 'index-list', component: IndexListComponent },\r\n { path: 'index/:EntryID', component: IndexComponent, outlet: 'window' },\r\n { path: 'interest-list', component: InterestListComponent },\r\n { path: 'interest/:EntryID', component: InterestComponent, outlet: 'window' },\r\n { path: 'holiday-list', component: HolidayListComponent },\r\n { path: 'holiday/:EntryID', component: HolidayComponent, outlet: 'window' },\r\n { path: 'reconciliation', component: ReconciliationViewComponent, data: { Menu: 'reconciliation' } },\r\n { path: 'reconciliation-form', component: ReconciliationFormComponent, data: { Menu: 'reconciliation_form' } },\r\n { path: 'cashflow-report', component: CashflowReportComponent, data: { Menu: 'cashflow_report' } },\r\n { path: 'cashflow-report-grid', component: CashflowReportDetailedComponent, data: { Menu: 'cashflow_report' }, outlet: 'window' },\r\n { path: 'balance-report', component: BalanceReportComponent, data: { Menu: 'balance_report' } },\r\n { path: 'mobile-balance-report', component: MobileBalanceReportComponent, data: { Menu: 'balance_report' } },\r\n { path: 'mobile-deposit-report', component: MobileBalanceDetailsReportComponent },\r\n { path: 'mobile-stock-report', component: MobileBalanceDetailsReportComponent },\r\n { path: 'mobile-loan-report', component: MobileBalanceDetailsReportComponent },\r\n { path: 'mobile-guarant-report', component: MobileBalanceDetailsReportComponent },\r\n { path: 'mobile-transactions-report', component: MobileTransactionsReportComponent },\r\n { path: 'mobile-cheques-report', component: MobileChequesReportComponent },\r\n { path: 'mobile-credit-cards-report', component: MobileCreditCardReportComponent },\r\n { path: 'mobile-dashboard', component: MobileDashboardComponent },\r\n { path: 'mobile-sync-status', component: MobileSyncStatusComponent },\r\n { path: 'credit-cards-report', component: CreditCardsReportComponent, data: { Menu: 'credit_cards_report' } },\r\n { path: 'balance-depos-report', component: pages.BalanceDetailsReportComponent, data: { Menu: 'balance_report_depos' } },\r\n { path: 'balance-stocks-report', component: pages.BalanceDetailsReportComponent, data: { Menu: 'balance_report_stocks' } },\r\n { path: 'balance-loans-report', component: pages.BalanceDetailsReportComponent, data: { Menu: 'balance_report_loans' } },\r\n { path: 'balance-guarantees-report', component: pages.BalanceDetailsReportComponent, data: { Menu: 'balance-guarantees-report' } },\r\n { path: 'balance-report-grid', component: BalanceReportComponent, data: { Menu: 'balance_report' }, outlet: 'window' },\r\n { path: 'balance-history-report', component: BalanceHistoryReportComponent, data: { Menu: 'balance_history_report' } },\r\n { path: 'billing-report', component: BillingReportComponent, data: { Menu: 'billing_report' } },\r\n { path: 'billing-contracts-report', component: BillingContractsReportComponent, data: { Menu: 'billing_contracts_report' } },\r\n { path: 'currency-history', component: CurrencyRateDashboardChartComponent, outlet: 'window' },\r\n { path: 'notification-organization-template/:EntryID', component: NotificationOrganizationTemplateComponent, outlet: 'window' },\r\n { path: 'alert-organization-template/:EntryID', component: AlertTemplateComponent, outlet: 'window' },\r\n { path: 'transaction-categories', component: TransactionCategoryListPageComponent, data: { Menu: 'categories' } },\r\n { path: 'transaction-category/:EntryID', component: TransactionCategoryComponent, outlet: 'window' },\r\n { path: 'classification-rules', component: ClassificationRuleListPageComponent, data: { Menu: 'classification_rules' } },\r\n { path: 'classification-rule/:EntryID', component: ClassificationRuleComponent, outlet: 'window' },\r\n { path: 'posting-template/:EntryID', component: PostingTemplateComponent, outlet: 'window' },\r\n { path: 'journal-entry-report', component: JournalEntryListComponent, data: { Menu: 'journal_entry_report' } },\r\n { path: 'journal-entry/:EntryID', component: JournalEntryComponent, outlet: 'window' },\r\n { path: 'assets-liabilities-report', component: AssetsLiabilitiesReportComponent, data: { Menu: 'assets_liabilities_report' } },\r\n { path: 'replication-history', component: ReplicationHistoryComponent, data: { Menu: 'replication_history' } },\r\n { path: 'sync-status-replications', component: SyncStatusReplicationComponent, data: { Menu: 'sync_status_replications' } },\r\n { path: 'payment-list-income', component: PaymentListComponent, data: { Menu: 'payment_list_income', Side: EnumSide.Income } },\r\n { path: 'payment-list-expense', component: PaymentListComponent, data: { Menu: 'payment_list_expense', Side: EnumSide.Expense } },\r\n { path: 'payment/:EntryID', component: PaymentComponent, outlet: 'window' },\r\n { path: 'document/:EntryID', component: DocumentComponent, outlet: 'window' },\r\n { path: 'accounting-journal-entry/:EntryID', component: AccountingJournalEntryComponent, outlet: 'window' },\r\n { path: 'business-partner/:EntryID', component: BusinessPartnerComponent, outlet: 'window' },\r\n { path: 'customers', component: BusinessPartnerListComponent, data: { Menu: 'customers', Side: EnumSide.Income } },\r\n { path: 'vendors', component: BusinessPartnerListComponent, data: { Menu: 'vendors', Side: EnumSide.Expense } },\r\n { path: 'ledger-account/:EntryID', component: LedgerAccountComponent, outlet: 'window' },\r\n { path: 'income-documents', component: DocumentListComponent, data: { Menu: 'income_documents', Side: EnumSide.Income } },\r\n { path: 'expense-documents', component: DocumentListComponent, data: { Menu: 'expense_documents', Side: EnumSide.Expense } },\r\n { path: 'post-payment/:EntryID', component: PostPaymentComponent, outlet: 'window' },\r\n { path: 'security/:EntryID', component: SecurityComponent, outlet: 'window' },\r\n { path: 'security-report/:EntryID', component: SecurityReportComponent, outlet: 'window' },\r\n { path: 'security-report-list', component: SecurityReportListComponent },\r\n { path: 'company-creation-wizard', component: CompanyCreationWizardComponent, outlet: 'window' },\r\n { path: 'loan-payments-report', component: LoanPaymentsReportListComponent },\r\n { path: 'loan-revaluation-report', component: pages.LoanRevaluationReportComponent },\r\n {\r\n path: 'profit-and-loss-report', component: FinancialReportComponent,\r\n data: { Menu: 'profit_and_loss_report', ReportType: EnumFinancialReportType.PnL }\r\n },\r\n {\r\n path: 'balance-sheet-report', component: FinancialReportComponent,\r\n data: { Menu: 'balance_sheet_report', ReportType: EnumFinancialReportType.BalanceSheet }\r\n },\r\n {\r\n path: 'trial-balance-report', component: FinancialReportComponent,\r\n data: { Menu: 'trial_balance_report', ReportType: EnumFinancialReportType.TrialBalance }\r\n },\r\n { path: 'transactions-export', component: TransactionsExportComponent },\r\n { path: 'deployment/:EntryID', component: DeploymentComponent, outlet: 'window' },\r\n { path: 'billing-contract/:EntryID', component: BillingContractComponent, outlet: 'window' },\r\n { path: 'cheques-report', component: ChequesReportComponent, data: { Menu: 'cheques_report' } },\r\n { path: 'cccontract/:EntryID', component: CCContractComponent, outlet: 'window' },\r\n { path: 'ccinvoices-processing', component: CCInvoicesProcessingComponent, data: { Menu: 'ccinvoices_processing' } },\r\n { path: 'ccinvoice/:EntryID', component: CCInvoiceComponent, outlet: 'window' },\r\n { path: 'ccinvoices-history', component: CCInvoicesHistoryComponent, data: { Menu: 'ccinvoices_history' } },\r\n { path: 'cctransfers-report', component: CCTransfersReportComponent, data: { Menu: 'cctransfers_report' } },\r\n { path: 'transaction-categorizaton-setup', component: TransactionCategorizationSetupComponent, outlet: 'window' },\r\n { path: 'export-note-rules', component: ExportNoteRuleListComponent, data: { Menu: 'export_note_rules' } },\r\n { path: 'export-note-rule/:EntryID', component: ExportNoteRuleComponent, outlet: 'window' },\r\n { path: 'file-import-templates', component: FileImportTemplateListPageComponent },\r\n { path: 'file-import-template/:EntryID', component: FileImportTemplateComponent, outlet: 'window' },\r\n { path: 'transactions-import', component: TransactionsImportComponent },\r\n { path: 'manual-balances-entry', component: ManualBalancesEntryComponent, data: { Menu: 'manual_balances_entry' } },\r\n { path: 'admin-actions', component: AdminActionsComponent },\r\n { path: 'admin-access-request/:EntryID', component: AdminAccessRequestComponent, outlet: 'window' },\r\n { path: 'admin-access-requests', component: AdminAccessRequestListComponent },\r\n { path: 'loan-payments-schedule', component: pages.LoanPaymentSheduleComponent, outlet: 'window' },\r\n {\r\n path: 'contact-us-subjects', component: CommonSettingComponent,\r\n data: { Menu: 'contact_us_subjects', Title: 'lblContactUsSubjects', DataSource: 'ContactUsSubjects' }\r\n },\r\n { path: 'global-download-retry', component: GlobalDownloadRetryComponent },\r\n { path: 'external-link', component: pages.ExternalLinkComponent },\r\n { path: 'external-api-key/:EntryID', component: ExternalApiKeyComponent, outlet: 'window' },\r\n { path: 'parent-categories', component: ParentCategoryListPageComponent, data: { Menu: 'parent_categories' } },\r\n { path: 'parent-category/:EntryID', component: ParentCategoryComponent, outlet: 'window' },\r\n {\r\n path: 'incoming-payment-processing-list',\r\n component: IncomingPaymentProcessingListComponent,\r\n data: { Menu: 'incoming_payment_processing' }\r\n },\r\n {\r\n path: 'incoming-payment-processing/:EntryID',\r\n component: IncomingPaymentProcessingComponent,\r\n outlet: 'window'\r\n },\r\n {\r\n path: 'incoming-payment-processing-virtual/:EntryID',\r\n component: IncomingPaymentProcessingComponent,\r\n outlet: 'window'\r\n },\r\n { path: 'deposit-categories', component: DepositCategoryListComponent, data: { Menu: 'deposit_categories' } },\r\n { path: 'deposit-category/:EntryID', component: DepositCategoryComponent, outlet: 'window' },\r\n {\r\n path: 'deposit-classification-rules',\r\n component: DepositClassificationRuleListComponent,\r\n data: { Menu: 'deposit_classifications' }\r\n },\r\n { path: 'deposit-classification-rule/:EntryID', component: DepositCategoryClassificationRuleComponent, outlet: 'window' },\r\n { path: 'stock-categories', component: StockCategoryListComponent, data: { Menu: 'stock_categories' } },\r\n { path: 'stock-category/:EntryID', component: StockCategoryComponent, outlet: 'window' },\r\n { path: 'loan-categories', component: LoanCategoryListComponent, data: { Menu: 'loan_categories' } },\r\n { path: 'loan-category/:EntryID', component: LoanCategoryComponent, outlet: 'window' },\r\n { path: 'guarantee-categories', component: GuaranteeCategoryListComponent, data: { Menu: 'guarantee_categories' } },\r\n { path: 'guarantee-category/:EntryID', component: GuaranteeCategoryComponent, outlet: 'window' },\r\n {\r\n path: 'stock-classification-rules',\r\n component: StockClassificationRuleListComponent,\r\n data: { Menu: 'stock_classifications' }\r\n },\r\n { path: 'stock-classification-rule/:EntryID', component: StockCategoryClassificationRuleComponent, outlet: 'window' },\r\n {\r\n path: 'loan-classification-rules',\r\n component: LoanClassificationRuleListComponent,\r\n data: { Menu: 'loan_classifications' }\r\n },\r\n { path: 'loan-classification-rule/:EntryID', component: LoanCategoryClassificationRuleComponent, outlet: 'window' },\r\n {\r\n path: 'guarantee-classification-rules',\r\n component: GuaranteeClassificationRuleListComponent,\r\n data: { Menu: 'guarantee_classifications' }\r\n },\r\n { path: 'guarantee-classification-rule/:EntryID', component: GuaranteeCategoryClassificationRuleComponent, outlet: 'window' },\r\n { path: 'callback', component: CallbackComponent},\r\n ];\r\n SystemOptions = EnumSystemOptionsZ;\r\n override Enums = Enums;\r\n\r\n override OnGetMenu = () => {\r\n const accessService = AppInjector.get(AccessService);\r\n const screen = AppInjector.get(ScreenService);\r\n\r\n return of([\r\n new MainMenuElement('organizations', '/pages/organizations', 'mdi mdi-domain', undefined,\r\n (userInfo?: any) => accessService.IsAdmin(), undefined, false),\r\n new MainMenuElement('my_organization', '/pages/organization', 'mdi mdi-domain', undefined,\r\n (userInfo?: any) => !screen.IsMobile() &&\r\n (accessService.IsAllowMyOrganizationForUser() || (accessService.IsAdmin() && !!Globals.OrganizationID)),\r\n (userInfo) => accessService.IsUser() ? [userInfo.OrganizationID] : [Globals.OrganizationID], true),\r\n\r\n new MainMenuElement('dashboard', '/pages/dashboard', 'mdi mdi-view-dashboard', undefined,\r\n (userInfo?: any) => accessService.IsAllowDashboard(), undefined, false),\r\n new MainMenuElement('mobile_dashboard', '/pages/mobile-dashboard', 'mdi mdi-view-dashboard', undefined,\r\n (userInfo?: any) => accessService.IsAllowDashboard() && screen.IsMobile(), undefined, true),\r\n\r\n new MainMenuElement('reports_folder', undefined, 'mdi mdi-clipboard-text-multiple', undefined, (userInfo?: any) => accessService.IsAllowReports(), undefined, true,\r\n [\r\n new MainMenuElement('balance_report', '/pages/balance-report', 'mdi mdi-bag-personal-outline', undefined, (userInfo?: any) => accessService.IsAllowReports(), undefined, false),\r\n new MainMenuElement('mobile_balance_report', '/pages/mobile-balance-report', 'mdi mdi-bag-personal-outline', undefined, (userInfo?: any) => accessService.IsAllowReports() && screen.IsMobile(), undefined, true),\r\n new MainMenuElement('mobile_transactions_report', '/pages/mobile-transactions-report', 'mdi mdi-bag-personal-outline', undefined, (userInfo?: any) => accessService.IsAllowReports() && screen.IsMobile(), undefined, true, undefined),\r\n new MainMenuElement('mobile_deposit_report', '/pages/mobile-deposit-report', 'mdi mdi-bag-personal-outline', undefined, (userInfo?: any) => accessService.IsAllowAdvancedReports() && screen.IsMobile(), undefined, true, undefined, { Mode: EnumBalanceDetailsReportModes.Deposits }),\r\n new MainMenuElement('mobile_stock_report', '/pages/mobile-stock-report', 'mdi mdi-bag-personal-outline', undefined, (userInfo?: any) => accessService.IsAllowAdvancedReports() && screen.IsMobile(), undefined, true, undefined, { Mode: EnumBalanceDetailsReportModes.Stocks }),\r\n new MainMenuElement('mobile_loan_report', '/pages/mobile-loan-report', 'mdi mdi-bag-personal-outline', undefined, (userInfo?: any) => accessService.IsAllowAdvancedReports() && screen.IsMobile(), undefined, true, undefined, { Mode: EnumBalanceDetailsReportModes.Loans }),\r\n new MainMenuElement('mobile_guarant_report', '/pages/mobile-guarant-report', 'mdi mdi-bag-personal-outline', undefined, (userInfo?: any) => accessService.IsAllowAdvancedReports() && screen.IsMobile(), undefined, true, undefined, { Mode: EnumBalanceDetailsReportModes.Guarantees }),\r\n new MainMenuElement('mobile_cheques_report', '/pages/mobile-cheques-report', 'mdi mdi-bag-personal-outline', undefined, (userInfo?: any) => accessService.IsAllowReports() && screen.IsMobile(), undefined, true, undefined),\r\n new MainMenuElement('mobile_credit_cards_report', '/pages/mobile-credit-cards-report', 'mdi mdi-bag-personal-outline', undefined, (userInfo?: any) => accessService.IsAllowReports() && screen.IsMobile(), undefined, true),\r\n new MainMenuElement('transaction_report', '/pages/transaction-report', 'mdi mdi-clipboard-arrow-right-outline', undefined, (userInfo?: any) => accessService.IsAllowReports(), undefined, false),\r\n new MainMenuElement('balance_history_report', '/pages/balance-history-report', 'mdi mdi-archive-outline', undefined, (userInfo?: any) => accessService.IsAllowReports(), undefined, false),\r\n new MainMenuElement('assets_liabilities_report', '/pages/assets-liabilities-report', 'mdi mdi-scale-balance', undefined, (userInfo?: any) => accessService.IsAllowReports(), undefined, false),\r\n new MainMenuElement('credit_cards_report', '/pages/credit-cards-report', 'mdi mdi-bag-personal-outline', undefined, (userInfo?: any) => accessService.IsAllowReports(), undefined, false),\r\n new MainMenuElement('cheques_report', '/pages/cheques-report', 'mdi mdi-checkbook', undefined, (userInfo?: any) => accessService.IsAllowReports(), undefined, false),\r\n new MainMenuElement('balance_depos_report', '/pages/balance-depos-report', 'mdi mdi-bag-personal-outline', undefined, (userInfo?: any) => accessService.IsAllowAdvancedReports(), undefined, false, undefined, { Mode: EnumBalanceDetailsReportModes.Deposits }),\r\n new MainMenuElement('balance_stocks_report', '/pages/balance-stocks-report', 'mdi mdi-bag-personal-outline', undefined, (userInfo?: any) => accessService.IsAllowAdvancedReports(), undefined, false, undefined, { Mode: EnumBalanceDetailsReportModes.Stocks }),\r\n new MainMenuElement('balance_loans_report', '/pages/balance-loans-report', 'mdi mdi-bag-personal-outline', undefined, (userInfo?: any) => accessService.IsAllowAdvancedReports(), undefined, false, undefined, { Mode: EnumBalanceDetailsReportModes.Loans }),\r\n new MainMenuElement('balance_guarantees_report', '/pages/balance-guarantees-report', 'mdi mdi-bag-personal-outline', undefined, (userInfo?: any) => accessService.IsAllowAdvancedReports(), undefined, false, undefined, { Mode: EnumBalanceDetailsReportModes.Guarantees }),\r\n ]\r\n ),\r\n new MainMenuElement('accounting_postings', undefined,\r\n 'mdi mdi-clipboard-edit-outline', undefined,\r\n (userInfo?: any) => accessService.IsAllowAccountingPosting(), undefined, false,\r\n [\r\n new MainMenuElement(\r\n 'journal_entry_report', '/pages/journal-entry-report', 'mdi mdi-note-text-outline',\r\n undefined, (userInfo?: any) => accessService.IsAllowJournalEntryReport(), undefined, false\r\n ),\r\n new MainMenuElement(\r\n 'incoming_payment_processing', '/pages/incoming-payment-processing-list', 'mdi mdi-note-text-outline',\r\n undefined, (userInfo?: any) => accessService.IsAllowIncomingPaymentProcessing(), undefined, false\r\n ),\r\n ]\r\n ),\r\n new MainMenuElement('cc_processing_folder', undefined, 'mdi mdi-alpha-c-circle-outline',\r\n undefined, (userInfo?: any) => accessService.IsAllowCCProcessing(), undefined, false,\r\n [\r\n new MainMenuElement('ccinvoices_processing', '/pages/ccinvoices-processing', 'mdi mdi-alpha-c-circle-outline', undefined, (userInfo?: any) => accessService.IsAllowCCProcessing(), undefined, true),\r\n new MainMenuElement('ccinvoices_history', '/pages/ccinvoices-history', 'mdi mdi-alpha-c-circle-outline', undefined, (userInfo?: any) => accessService.IsAllowCCProcessing(), undefined, true),\r\n new MainMenuElement('cctransfers_report', '/pages/cctransfers-report', 'mdi mdi-alpha-c-circle-outline', undefined, (userInfo?: any) => accessService.IsAllowCCProcessing(), undefined, true),\r\n ]\r\n ),\r\n new MainMenuElement('accounting_reports_folder', undefined, 'mdi mdi-calculator', undefined, (userInfo?: any) => accessService.IsAllowAccountingReports(), undefined, false,\r\n [\r\n new MainMenuElement('sales_accounting_reports', undefined, 'mdi mdi-bank-plus', undefined, (userInfo?: any) => accessService.IsAllowAccountingReports(), undefined, false, [\r\n new MainMenuElement('customers', '/pages/customers', 'mdi mdi-account-multiple-outline', undefined, (userInfo?: any) => accessService.IsAllowAccountingReports()),\r\n new MainMenuElement('income_documents', '/pages/income-documents', 'mdi mdi-file-document-multiple-outline', undefined, (userInfo?: any) => accessService.IsAllowAccountingReports()),\r\n new MainMenuElement('payment_list_income', '/pages/payment-list-income', 'mdi mdi-briefcase-plus-outline', undefined, (userInfo?: any) => accessService.IsAllowAccountingReports())\r\n ]),\r\n new MainMenuElement('purchase_accounting_reports', undefined, 'mdi mdi-bank-minus', undefined, (userInfo?: any) => accessService.IsAllowAccountingReports(), undefined, false, [\r\n new MainMenuElement('vendors', '/pages/vendors', 'mdi mdi-account-multiple-outline', undefined, (userInfo?: any) => accessService.IsAllowAccountingReports()),\r\n new MainMenuElement('expense_documents', '/pages/expense-documents', 'mdi mdi-file-document-multiple-outline', undefined, (userInfo?: any) => accessService.IsAllowAccountingReports()),\r\n new MainMenuElement('payment_list_expense', '/pages/payment-list-expense', 'mdi mdi-briefcase-minus-outline', undefined, (userInfo?: any) => accessService.IsAllowAccountingReports())\r\n ]),\r\n // new MainMenuElement('financial_reports', undefined, 'mdi mdi-chart-box-outline', undefined, (userInfo?: any) => accessService.IsAllowAccountingReports(), undefined, false, [\r\n // new MainMenuElement('profit_and_loss_report', '/pages/profit-and-loss-report', 'mdi mdi-chart-box-outline', undefined, (userInfo?: any) => accessService.IsAllowAccountingReports()),\r\n // new MainMenuElement('balance_sheet_report', '/pages/balance-sheet-report', 'mdi mdi-chart-box-outline', undefined, (userInfo?: any) => accessService.IsAllowAccountingReports()),\r\n // new MainMenuElement('trial_balance_report', '/pages/trial-balance-report', 'mdi mdi-chart-box-outline', undefined, (userInfo?: any) => accessService.IsAllowAccountingReports())\r\n // ])\r\n ]\r\n ),\r\n\r\n new MainMenuElement('cashflow_folder', undefined, 'mdi mdi-finance', undefined, (userInfo?: any) => accessService.IsAllowCashflow(), undefined, false,\r\n [\r\n new MainMenuElement('cashflow_report', '/pages/cashflow-report', 'mdi mdi-cash-register', undefined, (userInfo?: any) => accessService.IsAllowCashflow(), undefined, true),\r\n new MainMenuElement('reconciliation_form', '/pages/reconciliation-form', 'dx-icon dx-icon-link', undefined, (userInfo?: any) => accessService.IsAllowCashflow(), undefined, true),\r\n new MainMenuElement('reconciliation', '/pages/reconciliation', 'dx-icon dx-icon-datafield', undefined, (userInfo?: any) => accessService.IsAllowCashflow(), undefined, true),\r\n new MainMenuElement('recurring-forecasts', '/pages/recurring-forecasts', 'dx-icon dx-icon-clock', undefined, (userInfo?: any) => accessService.IsAllowCashflow(), undefined, true),\r\n new MainMenuElement('recurring-forecasts-recommendation', '/pages/recurring-forecasts-recommendation', 'dx-icon dx-icon-hierarchy', undefined, (userInfo?: any) => accessService.IsAllowCashflow(), undefined, true),\r\n ]\r\n ),\r\n\r\n new MainMenuElement('loan_folder', undefined, 'mdi mdi-cash-multiple', undefined, (userInfo?: any) => accessService.IsAllowLoans(), undefined, false,\r\n [\r\n new MainMenuElement('loans', '/pages/loans', 'mdi mdi-cash-register', undefined, (userInfo?: any) => accessService.IsAllowLoans(), undefined, true),\r\n new MainMenuElement('security-report', '/pages/security-report-list', 'mdi mdi-cash-register', undefined, (userInfo?: any) => accessService.IsAllowLoans(), undefined, true),\r\n new MainMenuElement('loan-payments-report', '/pages/loan-payments-report', 'mdi mdi-cash-register', undefined, (userInfo?: any) => accessService.IsAllowLoans(), undefined, true),\r\n new MainMenuElement('loan-revaluation-report', '/pages/loan-revaluation-report', 'mdi mdi-cash-register', undefined, (userInfo?: any) => accessService.IsAllowLoans(), undefined, true),\r\n ]\r\n ),\r\n new MainMenuElement('settings', undefined, 'mdi mdi-cog', undefined, (userInfo?: any) => accessService.IsSuperAdmin(), undefined, false,\r\n [\r\n new MainMenuElement('system_settings', undefined, 'mdi mdi-folder-wrench-outline', undefined, (userInfo?: any) => accessService.IsSuperAdmin(), undefined, false, [\r\n new MainMenuElement('admins', '/pages/admins', 'mdi mdi-account-key', undefined, (userInfo?: any) => accessService.IsSuperAdmin()),\r\n new MainMenuElement('bank-passes-global', '/pages/bankpasses', 'mdi mdi-key', undefined, (userInfo?: any) => accessService.IsSuperAdmin()),\r\n new MainMenuElement('notification_servers', '/pages/general/notification-servers', 'mdi mdi-email-send', undefined, (userInfo?: any) => accessService.IsSuperAdmin()),\r\n new MainMenuElement('notification_templates', '/pages/general/notification-templates', 'mdi mdi-email-multiple', undefined, (userInfo?: any) => accessService.IsSuperAdmin()),\r\n new MainMenuElement('system_options', '/pages/general/system-options', 'mdi mdi-hammer-wrench', undefined, (userInfo?: any) => accessService.IsSuperAdmin()),\r\n new MainMenuElement('contact_us_subjects', '/pages/contact-us-subjects', 'mdi mdi-hammer-wrench', undefined, (userInfo?: any) => accessService.IsSuperAdmin()),\r\n ]),\r\n\r\n new MainMenuElement('master_data', undefined, 'mdi mdi-database-cog-outline',\r\n undefined, (userInfo?: any) => accessService.IsAdmin(), undefined, false, [\r\n new MainMenuElement('parent_categories', '/pages/parent-categories', 'mdi mdi-database-outline'),\r\n new MainMenuElement('transaction-categories', '/pages/transaction-categories', 'mdi mdi-database-outline'),\r\n new MainMenuElement('classification_rules', '/pages/classification-rules', 'mdi mdi-database-search-outline'),\r\n new MainMenuElement('deposit-categories', '/pages/deposit-categories', 'mdi mdi-database-outline'),\r\n new MainMenuElement('deposit-classification-rules', '/pages/deposit-classification-rules', 'mdi mdi-database-outline'),\r\n new MainMenuElement('stock-categories', '/pages/stock-categories', 'mdi mdi-database-outline'),\r\n new MainMenuElement('stock-classification-rules', '/pages/stock-classification-rules', 'mdi mdi-database-outline'),\r\n new MainMenuElement('loan-categories', '/pages/loan-categories', 'mdi mdi-database-outline'),\r\n new MainMenuElement('loan-classification-rules', '/pages/loan-classification-rules', 'mdi mdi-database-outline'),\r\n new MainMenuElement('guarantee-categories', '/pages/guarantee-categories', 'mdi mdi-database-outline'),\r\n new MainMenuElement('guarantee-classification-rules', '/pages/guarantee-classification-rules', 'mdi mdi-database-outline'),\r\n new MainMenuElement('export_note_rules', '/pages/export-note-rules', 'mdi mdi-format-letter-matches'),\r\n new MainMenuElement('index-list', '/pages/index-list', 'mdi mdi-database-search-outline'),\r\n new MainMenuElement('interest-list', '/pages/interest-list', 'mdi mdi-database-search-outline'),\r\n new MainMenuElement('holiday-list', '/pages/holiday-list', 'mdi mdi-calendar'),\r\n new MainMenuElement('file-import-templates', '/pages/file-import-templates', 'mdi mdi-file-import')\r\n ]),\r\n\r\n new MainMenuElement('settings_admin_actions', undefined, 'mdi mdi-gesture-tap', undefined, (userInfo?: any) => accessService.IsSuperAdmin(), undefined, false, [\r\n new MainMenuElement('global-download-retry', '/pages/global-download-retry', 'mdi mdi-database-outline', undefined, (userInfo?: any) => accessService.IsSuperAdmin()),\r\n ])\r\n ]),\r\n\r\n new MainMenuElement('data_sync_folder', undefined, 'mdi mdi-folder-sync', undefined,\r\n (userInfo?: any) => accessService.IsAllowSyncLogs(), undefined, true,\r\n [\r\n new MainMenuElement('mobile_sync_status', '/pages/mobile-sync-status', 'mdi mdi-sync', undefined,\r\n (userInfo?: any) => accessService.IsAllowSyncLogs() && screen.IsMobile(), undefined, true),\r\n new MainMenuElement('transactions_export', '/pages/transactions-export', 'mdi mdi-database-export', undefined,\r\n (userInfo?: any) => accessService.IsAllowManualExport(), undefined, false),\r\n new MainMenuElement('transactions-import', '/pages/transactions-import', 'mdi mdi-database-import', undefined,\r\n (userInfo?: any) => accessService.IsAllowReports(), undefined, false),\r\n new MainMenuElement('manual_balances_entry', '/pages/manual-balances-entry', 'mdi mdi-playlist-edit', undefined,\r\n (userInfo?: any) => accessService.IsAllowReports(), undefined, false),\r\n new MainMenuElement('sync_status', '/pages/sync-status', 'mdi mdi-sync', undefined,\r\n (userInfo?: any) => accessService.IsAllowSyncLogs(), undefined, false),\r\n new MainMenuElement('download_history', '/pages/download-history', 'mdi mdi-download', undefined,\r\n (userInfo?: any) => accessService.IsAllowSyncLogs(), undefined, false),\r\n new MainMenuElement('upload_history', '/pages/upload-history', 'mdi mdi-upload', undefined,\r\n (userInfo?: any) => accessService.IsAllowUploads(), undefined, false),\r\n new MainMenuElement('replication_history', '/pages/replication-history', 'mdi mdi-checkbox-multiple-blank', undefined,\r\n (userInfo?: any) => accessService.IsAllowReplications(), undefined, false)\r\n ]),\r\n\r\n new MainMenuElement('admin_dashboards_folder', undefined, 'mdi mdi-monitor-dashboard', undefined, (userInfo?: any) => accessService.IsSuperAdmin(), undefined, false,\r\n [\r\n new MainMenuElement('sync_status_downloads', '/pages/sync-status-downloads', 'mdi mdi-file-download-outline', undefined, (userInfo?: any) => accessService.IsSuperAdmin()),\r\n new MainMenuElement('sync_status_uploads', '/pages/sync-status-uploads', 'mdi mdi-file-upload-outline', undefined, (userInfo?: any) => accessService.IsSuperAdmin()),\r\n new MainMenuElement('sync_status_replications', '/pages/sync-status-replications', 'mdi mdi-checkbox-multiple-blank-outline', undefined, (userInfo?: any) => accessService.IsSuperAdmin()),\r\n new MainMenuElement('billing_report', '/pages/billing-report', 'dx-icon dx-icon-rowfield', undefined, (userInfo?: any) => accessService.IsSuperAdmin()),\r\n new MainMenuElement('billing_contracts_report', '/pages/billing-contracts-report', 'dx-icon dx-icon-chart', undefined, (userInfo?: any) => accessService.IsAdmin()),\r\n new MainMenuElement('notificationshistory', '/pages/general/notificationshistory', 'dx-icon dx-icon-message', undefined, (userInfo?: any) => accessService.IsSuperAdmin()),\r\n new MainMenuElement('notification_dispatches', '/pages/general/notification-dispatches', 'mdi mdi-note-multiple-outline', undefined, (userInfo?: any) => accessService.IsSuperAdmin())\r\n ]),\r\n\r\n new MainMenuElement('security_and_audit_folder', undefined, 'mdi mdi-shield-account', undefined, (userInfo?: any) => accessService.IsSuperAdmin(), undefined, false,\r\n [\r\n new MainMenuElement('credentials_report', '/pages/general/credentials-report', 'mdi mdi-account-circle', undefined, (userInfo?: any) => accessService.IsSuperAdmin()),\r\n new MainMenuElement('credentials_activity_status', '/pages/general/credentials-activity-status', 'mdi mdi-account-circle', undefined, (userInfo?: any) => accessService.IsSuperAdmin()),\r\n new MainMenuElement('credential_login_history', '/pages/general/credential-login-history', 'mdi mdi-account-circle', undefined, (userInfo?: any) => accessService.IsSuperAdmin()),\r\n new MainMenuElement('request_history', '/pages/general/requests-history', 'mdi mdi-access-point', undefined, (userInfo?: any) => accessService.IsSuperAdmin()),\r\n new MainMenuElement('admin_actions', '/pages/admin-actions', 'mdi mdi-gesture-double-tap', undefined, (userInfo?: any) => accessService.IsSuperAdmin()),\r\n new MainMenuElement('admin_access_requests', '/pages/admin-access-requests', 'mdi mdi-access-point', undefined, (userInfo?: any) => accessService.IsSuperAdmin()),\r\n ]),\r\n ]);\r\n };\r\n override OnGetDefaultRouteParams = (userInfo?: any) => {\r\n const screen = AppInjector.get(ScreenService);\r\n const defaultRouteParams = new DefaultRouteParams();\r\n if (!userInfo) {\r\n return of(defaultRouteParams);\r\n }\r\n\r\n switch (userInfo.Type) {\r\n case EnumCredentialTypes.Admin:\r\n defaultRouteParams.Route = screen.IsMobile() ? '/pages/mobile-dashboard' : '/pages/organizations';\r\n break;\r\n case EnumCredentialTypes.User:\r\n defaultRouteParams.Route = screen.IsMobile() ? '/pages/mobile-dashboard' : '/pages/dashboard';\r\n break;\r\n }\r\n\r\n return of(defaultRouteParams);\r\n };\r\n\r\n override OnGetGlobalDataSources = (): Observable<{ [id: string]: BaseDataSourceAbstract }> => {\r\n\r\n const banksListService = AppInjector.get(BanksListService);\r\n const resourcesService = AppInjector.get(ResourcesService);\r\n const sessionService = AppInjector.get(SessionService);\r\n const organizationEndpoint = AppInjector.get(OrganizationEndpoint);\r\n const accessService = AppInjector.get(AccessService);\r\n let subtypesList = resourcesService.LIST('BookingAccountSubTypes', this.ModuleName);\r\n\r\n if (!accessService.IsAllowAdvancedReports()) {\r\n subtypesList = subtypesList.filter(s => s.Value !== EnumBookingAccountSubtypes.Deposits && s.Value !== EnumBookingAccountSubtypes.Stocks && s.Value !== EnumBookingAccountSubtypes.Loans && s.Value !== EnumBookingAccountSubtypes.Guarantee);\r\n }\r\n\r\n const banks: Record> = {\r\n AllowedBanks: banksListService.GetUserAllowedBanks(),\r\n LocalBanks: banksListService.GetBanksByType(EnumBankTypes.Local),\r\n ExternalCreditCardBanks: banksListService.GetBanksByType(EnumBankTypes.ExternalCreditCard),\r\n ForeignBanks: banksListService.GetBanksByType(EnumBankTypes.Foreign),\r\n ExternalLoanersBanks: banksListService.GetBanksByType(EnumBankTypes.ExternalLoaner),\r\n CCProcessors: banksListService.GetBanksByType(EnumBankTypes.CCProcessor)\r\n };\r\n\r\n return forkJoin(banks).pipe(\r\n map(ds => {\r\n const dataSources = {};\r\n\r\n Object.entries(ds).forEach(([name, data]) => {\r\n dataSources[name] = data;\r\n });\r\n\r\n dataSources['AllowedSubtypes'] = subtypesList;\r\n dataSources['Organizations'] = new DataSourceCustomAction((options: DataLoadOptions) => organizationEndpoint.ListEx(true, options));\r\n dataSources['SelectorOrganizations'] = new DataSourceCustomAction((options: DataLoadOptions) => organizationEndpoint.ListAccessible(options));\r\n\r\n if (accessService.IsSuperAdmin()) {\r\n dataSources['ContactUsSubjects'] = new BaseDataStoreCRUDServer(AppInjector.get(ContactUsSubjectEndpoint));\r\n }\r\n\r\n return dataSources;\r\n })\r\n );\r\n };\r\n\r\n override OnInitApplicationAsync = (): Observable => {\r\n const sessionService = AppInjector.get(SessionService);\r\n const organizationEndpoint = AppInjector.get(OrganizationEndpoint);\r\n Globals.OrganizationID = sessionService.UserInfoDict[this.ModuleName].OrganizationID;\r\n\r\n DataGrid.defaultOptions({\r\n options: {\r\n columnResizingMode: 'widget', // Override default for columnResizingMode\r\n }\r\n });\r\n\r\n if (Globals.OrganizationID) {\r\n return organizationEndpoint.Get(Globals.OrganizationID).pipe(\r\n map(o => {\r\n if (!o.IsSuccess) return true;\r\n\r\n Globals.OrganizationDefaultCurrency = o.Entity?.DefaultCurrency;\r\n return true;\r\n })\r\n );\r\n }\r\n return of(true);\r\n };\r\n override GetLists = () => [Lists_EN, Lists_HE, Lists_ES];\r\n\r\n override GetInjectableComponentOptions = (): Observable[]> => {\r\n const accessService = AppInjector.get(AccessService);\r\n const resourcesService = AppInjector.get(ResourcesService);\r\n const systemOptionsService = AppInjector.get(SystemOptionsService);\r\n\r\n const options = new InjectableComponentOptions();\r\n options.TargetModuleName = 'Kraken';\r\n options.TargetComponentType = 'contact-us';\r\n options.ButtonText = resourcesService.RC('btnContactUs', this.ModuleName);\r\n options.ButtonIcon = 'mdi mdi-chat-processing-outline';\r\n options.ComponentType = ContactUsInjectableComponent;\r\n options.IsVisibleButton = (page: BasePageComponent) => {\r\n if (page.DisplayMode !== EnumPageDisplayModes.FullScreen || !accessService.IsUser() || !systemOptionsService.getSystemOptionAsBoolean(this.SystemOptions.ContactUsEnabled)) return false;\r\n\r\n return true;\r\n };\r\n\r\n return of([options]);\r\n };\r\n}\r\n\r\nexport const appConfig: AppConfig = new KrakenAppConfig();\r\n","import { ServiceBagService } from '@base/component/ServiceBag';\r\nimport { BaseInjectableComponent } from '@base/component/BaseInjectableComponent';\r\nimport { EnumCRUDActions, EnumToggle, EnumLoginExtensionLinkType, EnumMessageBoxTypes, EnumWindowSizes, EnumPrintingType } from '@core/framework/sysenums.enum';\r\nimport { BasePageComponent } from '../component/BasePageComponent';\r\nimport { BaseDataSourceAbstract } from '../datalayer/BaseDataSourceAbstract';\r\nimport { BaseEntity, BaseState, DataGroupInfo } from '../entities/BaseEntities';\r\nimport { GridExtender } from '../grid/Grid.extender';\r\nimport { TemplateRef } from '@angular/core';\r\nimport { BaseComponent } from '../component/BaseComponent';\r\n\r\nexport class StringMapElement {\r\n Old: string;\r\n New: string;\r\n}\r\n\r\nexport class BaseCustomizationElementFilter {\r\n Component: string | string[];\r\n Name: string | string[];\r\n User: number | number[];\r\n}\r\n\r\nexport class BaseCustomizationElementLogic {\r\n Hide: boolean;\r\n HideOnMobile: boolean;\r\n HideOnDesktop: boolean;\r\n}\r\n\r\nexport class BaseCustomizationElement {\r\n Filter: BaseCustomizationElementFilter;\r\n Logic: BaseCustomizationElementLogic;\r\n}\r\n\r\nexport class FieldCustomizationElementLogic extends BaseCustomizationElementLogic {\r\n ReadOnly: boolean;\r\n Required: boolean;\r\n Label: string;\r\n DefaultValue: string;\r\n HideValues: string[];\r\n ValidationFunction: (Entity: BaseEntity, State: BaseState) => boolean;\r\n ValidationMessage: string;\r\n}\r\n\r\nexport class ComponentCustomizationElementFilter extends BaseCustomizationElementFilter {\r\n Columns: string[];\r\n}\r\n\r\nexport class FieldCustomizationElement extends BaseCustomizationElement {\r\n override Logic: FieldCustomizationElementLogic;\r\n}\r\n\r\nexport class ComponentCustomization extends BaseCustomizationElement {\r\n override Filter: ComponentCustomizationElementFilter;\r\n}\r\n\r\nexport class EntitySavedEventArgs {\r\n constructor(\r\n public Entity: BaseEntity,\r\n public Type: new () => BaseEntity,\r\n public Action: EnumCRUDActions\r\n ) {\r\n }\r\n}\r\n\r\nexport class EntityLoadedEventArgs {\r\n constructor(\r\n public Entity: BaseEntity,\r\n public Type: new () => BaseEntity,\r\n ) {\r\n }\r\n}\r\n\r\n\r\nexport class ViewModeElement {\r\n viewmode: any;\r\n visible?: boolean;\r\n text: string;\r\n callback: any;\r\n}\r\n\r\nexport class ContextMenuElement {\r\n constructor(\r\n public text: string,\r\n public onClick: () => any,\r\n public visible?: boolean | (() => boolean),\r\n public icon?: string\r\n ) { }\r\n}\r\n\r\nexport class MainMenuElement {\r\n public visible = false;\r\n public text: string;\r\n public moduleName: string;\r\n\r\n constructor(\r\n public menu: string,\r\n public path: string,\r\n public icon: string,\r\n public permission?: string,\r\n public permissionFunction?: (userInfo?: any) => boolean,\r\n public pathParams?: (userInfo?: any) => any[],\r\n public isVisibleOnMobile?: boolean,\r\n public items?: MainMenuElement[],\r\n public queryParams?: {},\r\n public showAsBottomSheet?: boolean,\r\n public click?: () => void,\r\n public isAssetIcon?: boolean\r\n ) { }\r\n}\r\n\r\n\r\n\r\nexport class DataGroupInfoHeader extends DataGroupInfo {\r\n constructor(\r\n public override Name: string,\r\n public override Value: string,\r\n public override TotalRows = 0,\r\n ) {\r\n super(Name, Value, TotalRows); \r\n }\r\n public Toggle: EnumToggle = EnumToggle.Out;\r\n public DataSource: BaseDataSourceAbstract;\r\n public Items: BaseEntity[];\r\n}\r\n\r\n\r\n\r\nexport class FieldInfo {\r\n constructor(\r\n public Name: string,\r\n public Translation: string) { }\r\n}\r\n\r\n\r\nexport class MessageBoxCustomButton {\r\n Text: string;\r\n ButtonID: number;\r\n TabIndex?: number;\r\n}\r\n\r\nexport class LoginExtensionLink {\r\n Name: string;\r\n Link: string;\r\n Type: EnumLoginExtensionLinkType;\r\n ModuleName: string;\r\n}\r\n\r\nexport class DefaultRouteParams {\r\n Route: string = '';\r\n Params: any;\r\n}\r\n\r\nexport class ToolbarSettings {\r\n PageComponentName: string;\r\n Page: BasePageComponent;\r\n\r\n Title: string;\r\n Subtitle: string;\r\n SubtitleTemplate: TemplateRef;\r\n\r\n ShowMenuButton: boolean;\r\n ShowBackButton: boolean;\r\n BackButtonClick: () => void;\r\n ViewModes: ViewModeElement[];\r\n ShowCloseButton: boolean;\r\n CloseButtonClick: () => void;\r\n OnGetPreviewTitle: () => string = () => '';\r\n\r\n OnGetContextMenuItems: () => ContextMenuElement[];\r\n ContextMenuTitle: string;\r\n ShowContextMenuAsUsualOnMobile: boolean = false;\r\n\r\n IsAllowFilter: boolean = false;\r\n IsAllowExport: boolean = false;\r\n IsAllowPrint: boolean = false;\r\n IsAllowShare: boolean = false;\r\n IsAllowNotifications: boolean = false;\r\n IsSupportHistory: boolean = false;\r\n ShowButtonsText: boolean = false;\r\n GridExtender: GridExtender | (() => GridExtender);\r\n\r\n FilterPanelWidth: EnumWindowSizes;\r\n\r\n OnPrintButtonClick: (e) => void;\r\n OnShareButtonClick: (e) => void;\r\n OnTitleClick: () => void;\r\n\r\n CustomFilterCssClass: string;\r\n}\r\n\r\nexport class InjectableComponentOptions> {\r\n TargetModuleName: string;\r\n TargetComponentName: string;\r\n TargetComponentType?: 'contact-us';\r\n ButtonText: string;\r\n ButtonIcon: string;\r\n ShowInToolbarOnMobile: boolean;\r\n IsVisibleButton: (page: BasePageComponent) => boolean;\r\n ComponentType: (new (A: ServiceBagService, ComponentName: string, StateType: (new () => BaseState)) => TComponentType);\r\n}\r\n\r\nexport class MessageBoxOptions {\r\n constructor(public Type: EnumMessageBoxTypes, public Prompt: string) {\r\n\r\n }\r\n}\r\n\r\nexport class ShareableEntity {\r\n constructor(public PageType: EnumPrintingType, public EntityType: (new () => BaseEntity), public PageComponents: ((new (...args: any[]) => BaseComponent)) []) { }\r\n}","import { AfterViewInit, ContentChildren, ViewChildren, ContentChild, OnChanges, OnDestroy, OnInit, QueryList, \r\n SimpleChanges, ViewChild, Component } from '@angular/core';\r\nimport { DxDataGridComponent, DxTabsComponent, DxValidationGroupComponent } from 'devextreme-angular';\r\nimport { Observable, Subscription } from 'rxjs';\r\nimport { SectionComponent } from '@ui/layouts/fieldlayouts/section/section.component';\r\nimport { FrameworkService } from '@core/framework/framework.service';\r\nimport { EnumCRUDActions, SysEnumsService } from '@core/framework/sysenums.enum';\r\nimport { SysGlobals } from '@core/framework/sysglobals';\r\nimport { Utils } from '@core/helpers/Utils';\r\nimport { BaseDataSourceAbstract } from '../datalayer/BaseDataSourceAbstract';\r\nimport { BaseEntity, BaseResponse, BaseState, CompanyInfo, GenericListEntity } from '../entities/BaseEntities';\r\nimport { EntityLoadedEventArgs, EntitySavedEventArgs } from '../classes/BaseClasses';\r\nimport { ServiceBagService } from './ServiceBag';\r\nimport { EnumSystemOptions } from '@core/framework/sysenums.enum';\r\nimport { IBaseComponent, IBaseModuleComponent } from './IBaseComponent';\r\nimport { dxValidationGroupResult } from 'devextreme/ui/validation_group';\r\nimport { UiService } from '@core/framework/ui.service';\r\n\r\n@Component({\r\n selector: 'base-component',\r\n template: '
'\r\n})\r\n/** Base component with state */\r\n// eslint-disable-next-line max-len\r\nexport abstract class BaseComponent implements OnInit, AfterViewInit, OnDestroy, OnChanges, IBaseComponent, IBaseModuleComponent {\r\n //Class members\r\n public State: TState = {} as TState;\r\n public DataSources: BaseDataSourceAbstract[] = {} as BaseDataSourceAbstract[];\r\n\r\n public ModuleName: string = this.A.AppConfigService.getModuleNameByInstance(this);\r\n\r\n private subscribtionOnEntitySaved: Subscription;\r\n private subscribtionOnEntityLoaded: Subscription;\r\n private subscribtionOnReloadComponent: Subscription;\r\n private registeredSubscriptions: Subscription[] = [];\r\n private registeredInitComponentHandlers: (() => void)[] = [];\r\n\r\n //Child component iterators and combiners.\r\n //Since content may be injected from outside, consider both options here\r\n @ViewChild('FocusOnMe') private FocusOnMe_V: any;\r\n @ViewChildren(DxValidationGroupComponent) private validationGroups: QueryList;\r\n @ContentChild('FocusOnMe') private FocusOnMe_C: any;\r\n private get FocusOnMe(): any {\r\n return Utils.CombineChild(this.FocusOnMe_V, this.FocusOnMe_C); \r\n }\r\n @ViewChildren(SectionComponent) private Sections_V: QueryList;\r\n @ContentChildren(SectionComponent) private Sections_C: QueryList;\r\n private get Sections(): SectionComponent[] {\r\n return Utils.CombineChildren(this.Sections_V, this.Sections_C); \r\n }\r\n @ViewChildren(DxTabsComponent) Tabs: QueryList;\r\n @ViewChildren(DxDataGridComponent) Grids: QueryList;\r\n\r\n //Overrides - for usage by actual components\r\n protected OnInitComponent() { }\r\n protected OnInitComponentFinished() { }\r\n protected OnStartInitCycle() { }\r\n protected OnDestroyComponent() { }\r\n protected OnInitDataSources() { }\r\n protected OnInitState() { }\r\n // eslint-disable-next-line max-len\r\n protected OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) { }\r\n protected OnExternalEntityLoaded(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity) { }\r\n protected OnInputPropertiesChanged(changes: SimpleChanges) { }\r\n protected OnPropertiesChanged() {}\r\n protected OnGetCustomComponentStateName(): string {\r\n return undefined; \r\n }\r\n protected IsAutoFocusEnabled(): boolean {\r\n return true; \r\n }\r\n protected IsUseFinishCycleChangeDetection(): boolean {\r\n return false; \r\n }\r\n\r\n //Internal overrides - for usage by BaseComponent* framework classes only\r\n protected OnInitComponentInternal() { }\r\n protected OnInitComponentFinishedInternal() { }\r\n protected OnInitComponentFinishedAfterDetectInternal() { }\r\n protected OnStartInitCycleInternal() { }\r\n protected OnDestroyComponentInternal() { }\r\n\r\n constructor\r\n (\r\n public A: ServiceBagService,\r\n public ComponentName: string,\r\n protected StateType: (new () => TState)\r\n ) {\r\n this.State = Utils.GetNewInstance(this.StateType);\r\n }\r\n\r\n\r\n //Return name used for state, configuration, etc\r\n public get ComponentStateName(): string {\r\n const sCustom: string = this.OnGetCustomComponentStateName();\r\n return sCustom != undefined ? sCustom : this.ComponentName;\r\n }\r\n\r\n protected InitState() {\r\n //Init state\r\n this.State = { ...Utils.GetNewInstance(this.StateType), ...this.State };\r\n\r\n //Attempt to load saved state\r\n let bStateLoaded: boolean;\r\n if (!SysGlobals.IsResetState) bStateLoaded = this.LoadState();\r\n SysGlobals.IsResetState = false;\r\n\r\n //If no saved state was loaded, init fresh\r\n if (!bStateLoaded) {\r\n this.OnInitState();\r\n if (this.DoValidatorReset()) {\r\n this.validationGroups?.forEach(validationGroup => {\r\n validationGroup?.instance?.reset();\r\n });\r\n }\r\n }\r\n\r\n //Set\r\n SysGlobals.CurrentState = this.State;\r\n }\r\n\r\n //Run internal change detection, in cases when Angular does not detect on its own. For instance, when changing references inside State\r\n protected DetectChanges() {\r\n if (this.A.ChangeDetector == undefined) return;\r\n if ((this.A.ChangeDetector as any).destroyed) return;\r\n this.A.ChangeDetector.detectChanges();\r\n }\r\n\r\n public get UI(): UiService {\r\n return this.A.UI;\r\n }\r\n\r\n public get UserInfo(): any {\r\n return this.ModuleName && this.A.Session.UserInfoDict[this.ModuleName];\r\n }\r\n\r\n //This construction is required so that the component can access this member\r\n public DS(Name: string): BaseDataSourceAbstract {\r\n return this.DataSources[Name] \r\n ? this.DataSources[Name] \r\n : this.A.Session.DataSources \r\n ? this.A.Session.DataSources[`${this.ModuleName}${Name}`] \r\n : null;\r\n }\r\n\r\n public get Enums(): any {\r\n return this.A.Enums;\r\n }\r\n\r\n public get SysEnums(): SysEnumsService {\r\n return this.A.SysEnums;\r\n }\r\n\r\n public LIST(sListName): GenericListEntity[] {\r\n return this.A.ResourcesService.LIST(sListName, this.ModuleName);\r\n }\r\n\r\n public LISTITEM(sListName, sValue): string {\r\n return this.A.ResourcesService.LISTITEM(sListName, sValue, this.ModuleName);\r\n }\r\n\r\n public LISTITEMX(sListName, sValue): GenericListEntity {\r\n return this.A.ResourcesService.LISTITEMX(sListName, sValue, this.ModuleName);\r\n }\r\n\r\n public RC(value, ...args: string[] | number[]): string {\r\n return this.A.ResourcesService.RC(value, this.ModuleName, ...args);\r\n }\r\n\r\n public RCF(value, ...args: string[] | number[]): string {\r\n return this.A.ResourcesService.RC(value, '', ...args);\r\n }\r\n\r\n public get Framework(): FrameworkService {\r\n return this.A.Framework;\r\n }\r\n\r\n public CustomBuild(build: string, execute: () => void) {\r\n if (this.Framework.IsCustomBuild(build)) execute();\r\n }\r\n\r\n public IsCustomBuild(build: string): boolean {\r\n return this.Framework.IsCustomBuild(build);\r\n }\r\n\r\n //Preserve state into global variable\r\n SaveState() {\r\n SysGlobals.PageStates[this.ComponentStateName] = this.State;\r\n }\r\n\r\n //Load state from global variable\r\n protected LoadState(): boolean {\r\n const oState = SysGlobals.PageStates[this.ComponentStateName];\r\n if (oState == undefined) return false;\r\n this.State = Utils.CloneObject(oState);\r\n return true;\r\n }\r\n\r\n\r\n //Go to route\r\n public Navigate(params: any[], optionalParams?: any, bSaveState = false, bSaveCurrentLocation = false) {\r\n //Preserve current state\r\n if (this.IsNeedSaveState(params)) this.SaveState();\r\n return this.A.Navigator.Navigate(params, optionalParams);\r\n }\r\n\r\n private IsNeedSaveState(params: any[]) {\r\n const path = params[0] as string;\r\n return !path.includes('system/');\r\n }\r\n\r\n //Go back\r\n public NavigateBack() {\r\n this.A.RouteHistoryService.GoBack();\r\n return Promise.resolve(true);\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n this.OnInputPropertiesChanged(changes);\r\n }\r\n\r\n ngDoCheck() {\r\n this.OnPropertiesChanged();\r\n }\r\n\r\n //Attach events\r\n private SubscribeEvents() {\r\n this.subscribtionOnEntitySaved = this.A.SysEvents.OnEntitySaved.subscribe(\r\n (e: EntitySavedEventArgs) => this.OnExternalEntitySaved(e.Entity, e.Type, e.Action));\r\n this.subscribtionOnEntityLoaded = this.A.SysEvents.OnEntityLoaded.subscribe(\r\n (e: EntityLoadedEventArgs) => this.OnExternalEntityLoaded(e.Entity, e.Type));\r\n this.subscribtionOnReloadComponent = this.A.SysEvents.OnReloadComponent.subscribe(\r\n (sComponentName: string) => this.OnReloadComponent(sComponentName));\r\n }\r\n\r\n //Detach events\r\n private UnsubscribeEvents() {\r\n this.subscribtionOnEntitySaved && this.subscribtionOnEntitySaved.unsubscribe();\r\n this.subscribtionOnEntityLoaded && this.subscribtionOnEntityLoaded.unsubscribe();\r\n this.subscribtionOnReloadComponent && this.subscribtionOnReloadComponent.unsubscribe();\r\n }\r\n\r\n //Reload event handler\r\n protected OnReloadComponent(sComponentName: string) {\r\n if (this.ComponentName == sComponentName) this.ReloadComponent();\r\n }\r\n\r\n //Fully reload the component, as if user just navigated to it\r\n //Use SetTimeout in order for the navigation changes to be applied\r\n protected ReloadComponent(sComponentName: string = undefined) {\r\n if (sComponentName == undefined || sComponentName == this.ComponentName) {\r\n //Reload the current component\r\n setTimeout(() => {\r\n this.RunDestroyCycle(false);\r\n this.RunInitStartCycle(false);\r\n this.RunInitFinishCycle(false);\r\n }, 100);\r\n } else {\r\n //Send a message to reload a different one\r\n this.A.Navigator.ReloadComponent(sComponentName);\r\n }\r\n }\r\n\r\n //Lifecycle event executors\r\n protected RunInitStartCycle(bFromAngularEvent: boolean) {\r\n this.RunInitStartCycleInternal(); \r\n }\r\n protected RunInitFinishCycle(bFromAngularEvent: boolean) {\r\n this.RunInitFinishCycleInternal(); \r\n }\r\n protected RunDestroyCycle(bFromAngularEvent: boolean) {\r\n this.RunDestroyCycleInternal(); \r\n }\r\n\r\n //Lifecycle event hooks\r\n ngOnInit() {\r\n this.RunInitStartCycle(true); \r\n }\r\n ngAfterViewInit() {\r\n this.RunInitFinishCycle(true); \r\n }\r\n ngOnDestroy() {\r\n this.UnsubscribeRegisteredSubscriptions();\r\n this.RunDestroyCycle(true); \r\n }\r\n\r\n //Component initialization start cylce\r\n private RunInitStartCycleInternal() {\r\n //Before life-cycle events for child component overrides\r\n this.OnStartInitCycleInternal();\r\n this.OnStartInitCycle();\r\n\r\n //Page initialization lifecycle\r\n this.SubscribeEvents();\r\n this.InitState();\r\n this.OnInitDataSources();\r\n this.OnInitComponentInternal();\r\n this.ExecuteInitComponentHandler();\r\n this.OnInitComponent();\r\n }\r\n\r\n //Component initialization finish cylce\r\n private RunInitFinishCycleInternal() {\r\n //Focus on first textbox\r\n this.InitFocus();\r\n\r\n //Allow override\r\n this.OnInitComponentFinishedInternal();\r\n this.OnInitComponentFinished();\r\n\r\n //Run detection since FieldCustomizations set some values on the controls after view has been checked\r\n //!!! Code below -> PERFORMANCE GAP.\r\n //if (SysGlobals.ComponentCustomizations?.length || SysGlobals.FieldCustomizations?.length) {\r\n if (this.IsUseFinishCycleChangeDetection()) {\r\n this.DetectChanges(); \r\n }\r\n\r\n //Allow override after detect\r\n this.OnInitComponentFinishedAfterDetectInternal();\r\n\r\n this.CustomizeComponentsVisibility();\r\n }\r\n\r\n CustomizeComponentsVisibility() {\r\n if (!SysGlobals.ComponentCustomizations) return;\r\n\r\n //Customize components if already on the page\r\n this.A.CustomizationService.SetComponentCustomizations(this.Grids.toArray(), this.ComponentStateName);\r\n this.A.CustomizationService.SetComponentCustomizations(this.Sections_V.toArray(), this.ComponentStateName);\r\n const tabsItems = this.Tabs.toArray().reduce((p, c) => [...p, ...c.items], []);\r\n this.A.CustomizationService.SetComponentCustomizations(tabsItems, this.ComponentStateName);\r\n\r\n //Customize components after they will appear on the page by some conditions\r\n this.Grids.changes.subscribe((grids) => {\r\n this.A.CustomizationService.SetComponentCustomizations(grids.toArray(), this.ComponentStateName);\r\n });\r\n this.Sections_V.changes.subscribe((sections) => {\r\n this.A.CustomizationService.SetComponentCustomizations(sections.toArray(), this.ComponentStateName);\r\n });\r\n this.Tabs.changes.subscribe((tabs) => {\r\n const tabsItems = tabs.toArray().reduce((p, c) => [...p, ...c.items], []);\r\n this.A.CustomizationService.SetComponentCustomizations(tabsItems, this.ComponentStateName);\r\n });\r\n }\r\n\r\n //Destruction cycle\r\n private RunDestroyCycleInternal() {\r\n this.UnsubscribeEvents();\r\n this.UnsubscribeRegisteredSubscriptions();\r\n\r\n //Overrides\r\n this.OnDestroyComponentInternal();\r\n this.OnDestroyComponent();\r\n }\r\n\r\n //Focus on the marked control\r\n public InitFocus() {\r\n if (this.FocusOnMe && this.FocusOnMe.instance && this.IsAutoFocusEnabled()) setTimeout(() => this.FocusOnMe.instance.focus(), 500);\r\n }\r\n\r\n //Generic executer for observable\r\n protected Do(serviceResponse: Observable, bShowSuccessMessage = true, \r\n after?: (response: T) => void, fail?: (response: T) => void) {\r\n this.Framework.Do(serviceResponse, bShowSuccessMessage, after, fail);\r\n }\r\n\r\n //Lock controls. Use setTimeout since it's usually called after all kinds of values are changed, to allow DetectChanges to run before\r\n public LockControls(bLock: boolean) {\r\n setTimeout(() => {\r\n this.Sections.forEach(x => x.LockControls(bLock));\r\n });\r\n }\r\n\r\n //Reset the validation.\r\n protected ResetValidation() {\r\n this.Sections.forEach(x => x.ResetValidation());\r\n }\r\n\r\n //todo: rename it \r\n protected AcceptGridChanges(): Promise[] {\r\n const gridValidations = new Array>();\r\n this.Sections.forEach(x => x.AcceptGridChanges().forEach(v => gridValidations.push(v)));\r\n return gridValidations;\r\n }\r\n\r\n public SystemOptionFlag(OptionName: EnumSystemOptions | string): boolean {\r\n return this.Framework.SystemOptionFlag(OptionName);\r\n }\r\n\r\n public SystemOption(OptionName: EnumSystemOptions | string): any {\r\n return this.Framework.SystemOption(OptionName);\r\n }\r\n\r\n //Raise an event to notify potential subscribers that the entity was saved\r\n //This is in the base class since different components might be using it, not only entity ones\r\n protected NotifyEntitySaved(Entity: BaseEntity, Type: new () => BaseEntity, Action: EnumCRUDActions = EnumCRUDActions.CreateOrUpdate) {\r\n const args = new EntitySavedEventArgs(Entity, Type, Action);\r\n this.A.EntityService.SetLastSavedEntity(args);\r\n this.A.SysEvents.NotifyEntitySaved(args);\r\n }\r\n\r\n protected NotifyEntityLoaded(Entity: BaseEntity, Type: new () => BaseEntity) {\r\n this.A.SysEvents.OnEntityLoaded.emit(new EntityLoadedEventArgs(Entity, Type));\r\n }\r\n\r\n protected DoValidatorReset(): boolean {\r\n return true;\r\n }\r\n\r\n public get THIS(): BaseComponent {\r\n return this;\r\n }\r\n\r\n //Validate the group, and focus on the first elemt\r\n public ValidateValidationGroup(validationGroup: DxValidationGroupComponent, beforeMoveFocus?: () => void): Promise {\r\n //Validate\r\n const result = validationGroup.instance.validate();\r\n if (result.status === 'pending') return new Promise((resolve) => {\r\n (>result.complete).then(res => resolve(res.isValid));\r\n });\r\n\r\n return new Promise((resolve) => {\r\n if (result.isValid) {\r\n resolve(true);\r\n return;\r\n }\r\n\r\n if (beforeMoveFocus) beforeMoveFocus();\r\n\r\n //Focus and return error. Use SetTimeout since beforeMoveFocus may take some time to reflect\r\n setTimeout(() => {\r\n (result.brokenRules[0] as any).validator.focus();\r\n //Call validate method after focus again to redraw controls for correct validation error message position\r\n setTimeout(() => validationGroup.instance.validate(), 0);\r\n }, 100);\r\n resolve(false);\r\n });\r\n }\r\n\r\n //Shortcut to specify formats\r\n public get F(): CompanyInfo {\r\n return this.A.Framework.CompanyInfo;\r\n }\r\n\r\n //Return whether user has one of the permissions\r\n public IsAllow(permissions: string[]) {\r\n if (!permissions || permissions.length == 0) return true;\r\n return permissions.some((p) => this.UserInfo && this.UserInfo.hasOwnProperty('IsAllow' + p) && this.UserInfo['IsAllow' + p]);\r\n }\r\n\r\n //Filter out events that are not generated by UI\r\n //Include special way to force event by passing e==true\r\n protected IsUIEvent(e: any): boolean {\r\n if (e == true) return true;\r\n return (e != undefined && e.event != undefined);\r\n }\r\n\r\n //Bind context this to the event. It cannot be done other way\r\n protected BindHandler(sHandlerName: string) {\r\n if (this[sHandlerName] == undefined) throw (`Invalid handler ${sHandlerName} was specified`);\r\n this[sHandlerName] = this[sHandlerName].bind(this);\r\n }\r\n\r\n public RegisterSubscription(subscription: Subscription): Subscription {\r\n !this.registeredSubscriptions.includes(subscription) && this.registeredSubscriptions.push(subscription);\r\n return subscription;\r\n }\r\n\r\n public RegisterInitComponentHandler(handler: () => void) {\r\n this.registeredInitComponentHandlers.push(handler);\r\n }\r\n\r\n private UnsubscribeRegisteredSubscriptions() {\r\n //\r\n //console.log('UnsubscribeRegisteredSubscriptions: ' + this.registeredSubscriptions.length);\r\n //\r\n this.registeredSubscriptions.forEach(s => {\r\n s && !s.closed && s.unsubscribe();\r\n });\r\n }\r\n\r\n private ExecuteInitComponentHandler() {\r\n this.registeredInitComponentHandlers.forEach(h => {\r\n h && h();\r\n });\r\n }\r\n}\r\n","\r\nimport { Component, ComponentFactoryResolver, ComponentRef, Input, TemplateRef, ViewChild, ViewContainerRef } from '@angular/core';\r\nimport { DxContextMenuComponent, DxDataGridComponent } from 'devextreme-angular';\r\nimport { GridExtender } from '../grid/Grid.extender';\r\nimport { BaseDataSourceAbstract } from '../datalayer/BaseDataSourceAbstract';\r\nimport { BaseState, BaseEntity } from './../entities/BaseEntities';\r\nimport { BaseComponent } from './BaseComponent';\r\nimport { ServiceBagService } from './ServiceBag';\r\nimport { BasePageComponent } from './BasePageComponent';\r\nimport { GridToolbarComponent } from '@m4u-angular/ui/layouts/componentlayouts/grid-toolbar/grid-toolbar.component';\r\nimport { AppInjector } from '@m4u-angular/core/injector/injector.module';\r\nimport dxButton from 'devextreme/ui/button';\r\nimport { Column } from 'devextreme/ui/data_grid';\r\nimport { ContextMenuElement } from '../classes/BaseClasses';\r\nimport { Subscription } from 'rxjs';\r\nimport { GridHelper } from '@m4u-angular/core/helpers/GridHelper';\r\n\r\n@Component({\r\n selector: 'base-grid',\r\n template: '
'\r\n})\r\n// eslint-disable-next-line max-len\r\nexport abstract class BaseGridComponent extends BaseComponent implements IGridComponent {\r\n private _gridToolbarRef: ComponentRef;\r\n private _gridToolbarComponent: GridToolbarComponent;\r\n private _subscriptions: Subscription[] = [];\r\n\r\n private _dataSource: BaseDataSourceAbstract | any[];\r\n @Input() set DataSource(value: BaseDataSourceAbstract | any[]) {\r\n this._dataSource = value;\r\n if (value) this.InitDataSource();\r\n }\r\n get DataSource() {\r\n return this._dataSource;\r\n }\r\n\r\n private _showAddButton: boolean;\r\n @Input() set ShowAddButton(value: boolean) {\r\n this._showAddButton = value;\r\n this._gridToolbarComponent && (this._gridToolbarComponent.ShowAddButton = this._showAddButton);\r\n }\r\n get ShowAddButton() {\r\n return this._showAddButton;\r\n }\r\n\r\n private _addButtonText: string;\r\n @Input() set AddButtonText(value: string) {\r\n this._addButtonText = value;\r\n this._gridToolbarComponent && (this._gridToolbarComponent.AddButtonText = this._addButtonText);\r\n }\r\n get AddButtonText() {\r\n return this._addButtonText;\r\n }\r\n\r\n private _title: string;\r\n @Input() set Title(value: string) {\r\n this._title = value;\r\n this._gridToolbarComponent && (this._gridToolbarComponent.Title = this._title);\r\n }\r\n get Title() {\r\n return this._title;\r\n }\r\n\r\n private _addButtonNavParams: any;\r\n @Input() set AddButtonNavParams(value: any) {\r\n this._addButtonNavParams = value;\r\n this._gridToolbarComponent && (this._gridToolbarComponent.AddButtonNavParams = this._addButtonNavParams);\r\n }\r\n get AddButtonNavParams() {\r\n return this._addButtonNavParams;\r\n }\r\n\r\n @Input() set Visible(value: boolean) {\r\n this.grid && (this.grid.visible = value);\r\n }\r\n\r\n @Input() IsAutoHeight: boolean;\r\n @Input() Page: BasePageComponent;\r\n @Input() AddButtonNavPath: string;\r\n @Input() StartExtraButtonsTemplate: TemplateRef;\r\n @Input() EndExtraButtonsTemplate: TemplateRef;\r\n\r\n @ViewChild(DxDataGridComponent) protected grid: DxDataGridComponent;\r\n @ViewChild(DxDataGridComponent, { read: ViewContainerRef }) containerRef: ViewContainerRef;\r\n\r\n public get gridAny(): any {\r\n return this.grid;\r\n }\r\n public get G(): GridExtender {\r\n return this.gridAny && this.gridAny.G;\r\n }\r\n\r\n private _isUpdateScrollPosition: boolean = false;\r\n\r\n protected AfterInit() { }\r\n\r\n constructor(public override A: ServiceBagService,\r\n public override ComponentName: string,\r\n public EntityType: (new () => TEntity),\r\n StateType: (new () => TState)) {\r\n super(A, ComponentName, StateType);\r\n }\r\n\r\n protected override OnInitComponent(): void {\r\n this.A.SysEvents.SetLoadPanelState(true);\r\n this._isUpdateScrollPosition = this.A.Screen.IsRTL();\r\n this.RegisterSubscription(this.A.SysEvents.MenuPositon.subscribe(() => this.SetScrollPosition()));\r\n }\r\n\r\n InitDataSource() {\r\n this.AfterInit();\r\n }\r\n\r\n override OnInitComponentFinished() {\r\n this._gridToolbarComponent = this.CreateGridToolbarComponent();\r\n\r\n this._subscriptions.push(this.grid.onContentReady.subscribe(() => {\r\n setTimeout(() => this.RefreshGridHeight());\r\n // this.SetScrollPosition();\r\n // Get context menu items without putting data there, just to know if any exists\r\n const contextMenuItems = this.GetGridRowContextMenu();\r\n // If no context menu items then no need to add column at all\r\n if (!contextMenuItems || !contextMenuItems.length) return;\r\n\r\n // TODO: better to use addColumn API method.\r\n const columns = this.grid.instance.option('columns');\r\n const gridColumns = columns.map((column: Column) => ({\r\n ...column,\r\n visible: column.type === 'buttons' ? column.visible : this.grid.instance.columnOption(column.dataField, 'visible'),\r\n width: column.type === 'buttons' ? column.width : this.grid.instance.columnOption(column.dataField, 'width'),\r\n visibleIndex: column.type === 'buttons' ? column.visibleIndex : this.grid.instance.columnOption(column.dataField, 'visibleIndex'),\r\n groupIndex: column.type === 'buttons' ? column.groupIndex : this.grid.instance.columnOption(column.dataField, 'groupIndex')\r\n }));\r\n\r\n const gridRowContextMenuColumn = gridColumns.find(x => x.name == 'gridRowContextMenu');\r\n if (!gridRowContextMenuColumn) {\r\n const columnOptions = {\r\n name: 'gridRowContextMenu',\r\n showInColumnChooser: false,\r\n type: 'buttons',\r\n cellTemplate: this.GridRowContextMenu,\r\n search: {\r\n enabled: false\r\n },\r\n cssClass: 'context-menu-column',\r\n allowResizing: false,\r\n allowReordering: false,\r\n width: 32\r\n } as any;\r\n gridColumns.push(columnOptions);\r\n (this.grid.instance as any).option('columns', gridColumns);\r\n }\r\n }));\r\n\r\n //this._subscriptions.push(this.grid.onOptionChanged.subscribe((e) => {\r\n // if (e.name !== 'dataSource') return;\r\n\r\n // this.grid?.instance?.getScrollable()?.scrollTo({ top: 0 });\r\n // this.grid?.instance?.repaint();\r\n //}));\r\n\r\n this.A.SysEvents.SetLoadPanelState(false);\r\n }\r\n\r\n GridRowContextMenu = (container, options) => {\r\n if (options.row.rowType !== 'data') return;\r\n\r\n const contextMenuItems = this.GetGridRowContextMenu(options);\r\n if (!contextMenuItems.length || !contextMenuItems.some(x => x.visible == null || x.visible)) return;\r\n\r\n const div = document.createElement('div');\r\n container.appendChild(div);\r\n\r\n const contextMenuButton = new dxButton(div, {\r\n icon: 'mdi mdi-dots-vertical',\r\n elementAttr: { class: 'grid-row-context-menu-button btn-size-small' },\r\n onClick: (event) => {\r\n event.event?.stopPropagation();\r\n const contextMenu = this.CreateContextMenuComponent();\r\n contextMenu.items = contextMenuItems.map(x => {\r\n const visible = typeof x.visible == 'function' ? x.visible() : x.visible;\r\n return {\r\n ...x,\r\n visible: visible\r\n };\r\n });\r\n contextMenu.target = div;\r\n contextMenu.visible = true;\r\n }\r\n });\r\n };\r\n\r\n private CreateContextMenuComponent() {\r\n const componentFactoryResolver = AppInjector.get(ComponentFactoryResolver);\r\n const componentFactory = componentFactoryResolver.resolveComponentFactory(DxContextMenuComponent);\r\n const componentRef = this.containerRef.createComponent(componentFactory);\r\n\r\n return componentRef.instance;\r\n }\r\n\r\n // Please make sure that options?.row?.rowData or options?.data is using with '?' \r\n // (for example, options?.row?.rowData?.EntryID) when overriding this method\r\n protected GetGridRowContextMenu(options?: any): ContextMenuElement[] {\r\n return [];\r\n }\r\n\r\n RefreshGridHeight() {\r\n if (this.IsAutoHeight) GridHelper.RefreshGridHeight(this.grid.instance, this.Page);\r\n }\r\n\r\n SetScrollPosition() {\r\n setTimeout(() => {\r\n if (!this._isUpdateScrollPosition) return;\r\n\r\n const scrollable = this.grid.instance.getScrollable();\r\n if (!scrollable) return;\r\n\r\n const maxScrollLeft = scrollable.scrollWidth();\r\n scrollable.scrollTo({\r\n x: maxScrollLeft\r\n });\r\n }, 150);\r\n }\r\n\r\n override Navigate(params: any[], optionalParams?: any, bSaveState = false, bSaveCurrentLocation = false): Promise {\r\n if (this.Page != undefined) (this.Page as any).SaveState();\r\n return super.Navigate(params, optionalParams, bSaveState, bSaveCurrentLocation);\r\n }\r\n\r\n private CreateGridToolbarComponent(): GridToolbarComponent {\r\n if (!this.Title && !this.ShowAddButton && !this.StartExtraButtonsTemplate && !this.EndExtraButtonsTemplate) return;\r\n\r\n const previousElement = this.containerRef.element.nativeElement.parentElement.previousSibling;\r\n if (previousElement?.tagName?.toLowerCase() === 'm4u-grid-toolbar') previousElement.remove();\r\n\r\n const componentFactoryResolver = AppInjector.get(ComponentFactoryResolver);\r\n const componentFactory = componentFactoryResolver.resolveComponentFactory(GridToolbarComponent);\r\n const componentRef = this.containerRef.createComponent(componentFactory);\r\n\r\n componentRef.instance.Grid = this.grid;\r\n componentRef.instance.ShowAddButton = this.ShowAddButton;\r\n componentRef.instance.Title = this.Title;\r\n componentRef.instance.AddButtonNavPath = this.AddButtonNavPath;\r\n componentRef.instance.AddButtonNavParams = this.AddButtonNavParams;\r\n componentRef.instance.StartExtraButtonsTemplate = this.StartExtraButtonsTemplate;\r\n componentRef.instance.EndExtraButtonsTemplate = this.EndExtraButtonsTemplate;\r\n componentRef.instance.AddButtonText = this.AddButtonText;\r\n\r\n this.containerRef.element.nativeElement.parentElement.before(componentRef.location.nativeElement);\r\n this._gridToolbarRef = componentRef;\r\n return componentRef.instance;\r\n }\r\n\r\n protected OnReorder(e, lines) {\r\n const visibleRows = e.component.getVisibleRows();\r\n const toIndex = lines.indexOf(visibleRows[e.toIndex].data);\r\n const fromIndex = lines.indexOf(e.itemData);\r\n lines.splice(fromIndex, 1);\r\n lines.splice(toIndex, 0, e.itemData);\r\n }\r\n\r\n protected override OnDestroyComponent(): void {\r\n this._subscriptions.forEach(x => x.unsubscribe());\r\n this._gridToolbarRef?.destroy();\r\n }\r\n}\r\n\r\n\r\nexport interface IGridComponent {\r\n readonly G: GridExtender;\r\n}\r\n","import { BaseInjectableComponent } from '@base/component/BaseInjectableComponent';\r\nimport { EnumCRUDActions, EnumNotificationDeliveryOptions, EnumPageDisplayModes, EnumPageEntitySources } from '@core/framework/sysenums.enum';\r\nimport { BaseEntity, BaseState, HistoryChangesSet, BaseEntitiesResponse, BaseEntityResponse, FileView, SharingInformation, BaseResponse, RenderedTemplate } from '../entities/BaseEntities';\r\nimport { BaseEndpointCRUD } from '../endpoint/BaseEndpointCRUD';\r\nimport { BasePageComponent } from './BasePageComponent';\r\nimport { ServiceBagService } from './ServiceBag';\r\nimport { Observable, map, tap, Subscription } from 'rxjs';\r\nimport { SysGlobals } from '@m4u-angular/core/framework/sysglobals';\r\nimport { Utils } from '@core/helpers/Utils';\r\nimport { Component, ComponentFactoryResolver, ContentChildren, QueryList, SimpleChanges, ViewChild, ViewChildren } from '@angular/core';\r\nimport { FieldFormComponent } from '@m4u-angular/ui/layouts/fieldlayouts/field-form/fieldform.component';\r\nimport { DxCheckBoxComponent } from 'devextreme-angular';\r\nimport { BaseEndpoint } from '../endpoint/BaseEndpoint';\r\n\r\n@Component({\r\n selector: 'base-page-crud-component',\r\n template: '
'\r\n})\r\nexport abstract class BasePageCRUDComponent> extends BasePageComponent {\r\n //Mode\r\n public IsAddMode: boolean;\r\n public IsSaving: boolean = false;\r\n private IsDuplicateMode: boolean;\r\n protected EntityEntryID: number;\r\n\r\n //Overrides\r\n protected OnEntitySaved() { }\r\n protected OnEntityLoaded() { }\r\n protected OnEntityDeleted() { }\r\n protected OnEntityNew() { }\r\n protected OnEntityValidate(): boolean {\r\n return true; \r\n }\r\n protected OnEntityInitObjectName(): string {\r\n return undefined; \r\n }\r\n protected OnEntityDuplicated() { }\r\n protected OnEntityPrepareForSave() { }\r\n protected OnEntityConfirmSave(resumeSave: () => void) {\r\n resumeSave(); \r\n }\r\n protected OnIsAllowDuplicate() {\r\n return false; \r\n }\r\n protected IsAllowNavbar() {\r\n return false; \r\n }\r\n protected OnGetEndpoint(): BaseEndpointCRUD {\r\n return this.Endpoint; \r\n }\r\n\r\n // Functions validation the entity\r\n private EntityValidations: (() => Observable)[] = [];\r\n private _subscriptions: Subscription[] = [];\r\n\r\n @ViewChildren(FieldFormComponent) private Fields_V: QueryList;\r\n @ContentChildren(FieldFormComponent) private Fields_C: QueryList;\r\n protected get Fields(): FieldFormComponent[] {\r\n return Utils.CombineChildren(this.Fields_V, this.Fields_C); \r\n }\r\n\r\n constructor(\r\n A: ServiceBagService,\r\n PageName: string,\r\n EntityType: (new () => TEntity),\r\n StateType: (new () => TState),\r\n protected Endpoint: TEndpoint,\r\n DisplayMode: EnumPageDisplayModes = EnumPageDisplayModes.Window,\r\n EntityMode: EnumPageEntitySources = EnumPageEntitySources.CRUD\r\n ) {\r\n super(A, PageName, EntityType, StateType, DisplayMode, EntityMode);\r\n }\r\n\r\n //This is done here since before this place, ViewChildren is not initiallized\r\n //DetectChanges is called in base class\r\n override OnInitComponentFinishedInternal() {\r\n if (this.IsAddMode) this.SetFieldDefaultValues();\r\n super.OnInitComponentFinishedInternal();\r\n }\r\n\r\n override OnInitComponentFinishedAfterDetectInternal() {\r\n super.OnInitComponentFinishedAfterDetectInternal();\r\n this.SetDefaultFieldsLabels();\r\n }\r\n\r\n //Actually initialize the component\r\n override OnInitComponentInternal() {\r\n this.IsDuplicateMode = this.QueryParams?.IsDuplicate == 'true' || this.QueryParams?.IsDuplicate === true;\r\n\r\n //Perform base initialization\r\n super.OnInitComponentInternal();\r\n\r\n //Read params from route snapshot\r\n const sParam: string = this.EntityEntryID || this.A.Navigator.GetRouteParams().EntryID;\r\n\r\n //Reset flags\r\n this.IsAddMode = false;\r\n this.IsLoading = true;\r\n\r\n //Fire Onnew or OnLoad event\r\n if (sParam == 'new') {\r\n this.StartNewEntity();\r\n } else {\r\n if (+sParam > 0) {\r\n if (!this.EntityEntryID) this.EntityEntryID = +sParam;\r\n this.LoadEntity(+sParam);\r\n } else {\r\n this.UI.UnexpectedMessage('Invalid route was specified');\r\n }\r\n }\r\n\r\n if (this.OnIsAllowDuplicate() && !this.IsAddMode) {\r\n this.ContextMenuDefault.push({\r\n text: this.RC('titleDuplicate'),\r\n visible: true,\r\n onClick: this.OnDuplicateInternal.bind(this)\r\n });\r\n }\r\n\r\n this._subscriptions.push(this.A.SysEvents.Toolbar.subscribe(toolbarSettings => {\r\n if (!toolbarSettings || !this.ToolbarSettings ||toolbarSettings.PageComponentName != this.ToolbarSettings.PageComponentName) return;\r\n\r\n this.SetDefaultFieldsLabels();\r\n }));\r\n }\r\n\r\n protected override OnShare(): (sharingInformation: SharingInformation) => Observable> {\r\n return (sharingInformation) => {\r\n sharingInformation && (sharingInformation.EntityEntryID = this.EntityEntryID);\r\n return this.Endpoint.Share(sharingInformation);\r\n }\r\n }\r\n\r\n protected override OnGetRenderedTemplate(): (notificationTemplateID: number, deliveryOption: EnumNotificationDeliveryOptions) => Observable> {\r\n return (notificationTemplateID, deliveryOption) => this.Endpoint.GetRenderedTemplate(this.EntityEntryID, notificationTemplateID, deliveryOption);\r\n }\r\n\r\n //Load an existing entity\r\n //InitEntity is called here as well since load is asynchronous event and we need \r\n //the entity in existing state in order not to have undefined references in the template\r\n protected LoadEntity(iEntryID: number) {\r\n this.InitEntity();\r\n this.SetEntity(this.EntityType, this.OnGetEndpoint().Get(iEntryID), false, () => this.ReflectEntityLoaded());\r\n }\r\n\r\n //Perform entity validation\r\n protected ValidateEntity(): Promise {\r\n if (!this.OnEntityValidate()) return new Promise((response) => response(false));\r\n\r\n return new Promise((resolve) => {\r\n const validations = this.AcceptGridChanges().concat(this.EntityValidations.map((x) => x().toPromise()));\r\n\r\n //if no grids\r\n if (!validations.length) {\r\n resolve(true);\r\n return;\r\n }\r\n\r\n //wait for all validations\r\n Promise.all(validations).then((validationResults: []) => {\r\n //if all validations true\r\n if (validationResults.filter(r => r === false).length === 0)\r\n resolve(true);\r\n else\r\n resolve(false);\r\n });\r\n });\r\n }\r\n\r\n //Performs the life-cycle part after entity has been set to the component\r\n protected ReflectEntityLoaded() {\r\n this.IsAddMode = false;\r\n this.OnEntityLoaded();\r\n this.NotifyEntityLoaded(this.Entity, this.EntityType);\r\n this.NotifyReloadTitle();\r\n //this.RefreshEntityOriginal()\r\n this.IsLoading = false;\r\n }\r\n\r\n //Performs the life-cycle part after entity has been set to the component\r\n protected ReflectEntitySaved() {\r\n this.OnEntitySaved();\r\n this.NotifyEntitySaved(this.Entity, this.EntityType, this.IsAddMode ? EnumCRUDActions.Create : EnumCRUDActions.Update);\r\n this.IsAddMode = false;\r\n this.IsSaving = false;\r\n //this.RefreshEntityOriginal();\r\n this.NotifyReloadTitle();\r\n }\r\n\r\n //Performs the life-cycle part after entity has been set to the component\r\n protected ReflectEntityDeleted() {\r\n this.OnEntityDeleted();\r\n this.NotifyEntitySaved(this.Entity, this.EntityType, EnumCRUDActions.Delete);\r\n this.NavigateBack();\r\n }\r\n\r\n //Event handler for validating and saving current entity, DON'T override it\r\n public OnSave() {\r\n this.OnEntityPrepareForSave();\r\n this.ValidateEntity().then(isValid => {\r\n if (isValid) {\r\n this.OnEntityConfirmSave(() => this.OnDoSave());\r\n } else {\r\n this.IsDuplicateMode = false;\r\n }\r\n });\r\n }\r\n\r\n //default save implementation, can be overriden\r\n protected OnDoSave() {\r\n this.IsSaving = true;\r\n this.SetEntity(this.EntityType, this.Endpoint.Save(this.Entity), true, (_) => this.ReflectEntitySaved(), (response) => {\r\n this.A.UI.StopMessage(response.ResponseMessage);\r\n this.IsSaving = false;\r\n });\r\n }\r\n\r\n OnDelete() {\r\n this.DeleteEntity();\r\n }\r\n\r\n DeleteEntity() {\r\n this.Do(this.Endpoint.Delete(this.Entity.EntryID), true, () => this.ReflectEntityDeleted());\r\n }\r\n\r\n //Create a new entity\r\n protected StartNewEntity() {\r\n this.IsAddMode = true;\r\n this.OnEntityNew();\r\n this.RefreshEntityOriginal();\r\n this.IsLoading = false;\r\n this.SubscribeOnEntityChanges();\r\n }\r\n\r\n protected override InitEntity() {\r\n\r\n //Save global entity before it will be empty in base logic\r\n let duplicatedEntity = null;\r\n\r\n if (this.IsDuplicateMode) {\r\n const currentEntity = SysGlobals.CurrentEntity as TEntity;\r\n if (currentEntity) {\r\n duplicatedEntity = Utils.MapObject(this.EntityType, currentEntity);\r\n duplicatedEntity.EntryID = -1;\r\n }\r\n }\r\n\r\n super.InitEntity();\r\n\r\n // Duplicate entity to current\r\n if (this.IsDuplicateMode && duplicatedEntity) {\r\n this.Entity = Utils.MapObject(this.EntityType, duplicatedEntity);\r\n this.OnEntityDuplicated();\r\n\r\n this.IsDuplicateMode = false;\r\n }\r\n }\r\n\r\n public SetFieldDefaultValues() {\r\n this.A.SysEvents.OnSetDefaults.emit();\r\n }\r\n\r\n //Return title with document number\r\n protected override OnInitTitle(): string {\r\n const sObjectName: string = this.GetEntityObjectName();\r\n return `${this.GetDefaultTitle()}${(sObjectName ? (' - ' + sObjectName) : '')}`;\r\n }\r\n\r\n //Return entity object name allowing overide\r\n public GetEntityObjectName(): string {\r\n const sCustomObjectName: string = this.OnEntityInitObjectName();\r\n return sCustomObjectName ? sCustomObjectName : this.GetDefaultEntityObjectName();\r\n }\r\n\r\n public override OnInitInjectableComponent(injectableComponent: BaseInjectableComponent) {\r\n // Set DocEntry in the injectable component\r\n injectableComponent.TargetDocEntry = this.EntityEntryID;\r\n // Get validation function for the entity from the injectable component\r\n this.EntityValidations.push(injectableComponent.IsValidEntity);\r\n }\r\n\r\n //Return default name for the object\r\n private GetDefaultEntityObjectName(): string {\r\n return (this.Entity != null && this.Entity.EntryID > 0 ? `${this.Entity.EntryID}` : '');\r\n }\r\n\r\n OnDuplicateInternal() {\r\n const currentRoute = this.A.Navigator.GetCurrentRouteWithoutParams();\r\n this.A.Navigator.Navigate([`${currentRoute}/new`], { IsDuplicate: true });\r\n }\r\n\r\n override OnGetHistoryInternal() {\r\n return this.Endpoint.GetHistory(this.Entity.EntryID)\r\n .pipe(\r\n tap(h => {\r\n if (!h.IsSuccess) {\r\n this.UI.StopMessage(h.ResponseMessage); \r\n } \r\n }),\r\n map(h => h.Entities)\r\n );\r\n }\r\n\r\n private _fieldsCount: number;\r\n private _fieldsNames: string[];\r\n protected override OnPropertiesChanged(): void {\r\n if (this._fieldsCount !== this.Fields.length) {\r\n const currentFieldNames = this.Fields.map(x => x.Name);\r\n if (JSON.stringify(this._fieldsNames) != JSON.stringify(currentFieldNames)) this.SetDefaultFieldsLabels();\r\n }\r\n }\r\n\r\n SetDefaultFieldsLabels() {\r\n this._fieldsNames = this.Fields.map(x => x.Name);\r\n this._fieldsCount = this.Fields.length;\r\n setTimeout(() => this.Fields.forEach(field => {\r\n if (Utils.IsEmpty(this.Entity.TypeName)) return;\r\n\r\n const control = field.GetEditorControl();\r\n const fieldLabel = this.RC(`BL.${this.Entity.TypeName}.${field.Name}`);\r\n\r\n if (control instanceof DxCheckBoxComponent) {\r\n Utils.IsEmpty(control.text) && Utils.IsEmpty(field.Label) && (control.text = fieldLabel);\r\n } else {\r\n Utils.IsEmpty(field.Label) && (field.Label = fieldLabel);\r\n }\r\n }));\r\n }\r\n\r\n override OnDestroyComponentInternal() {\r\n super.OnDestroyComponentInternal();\r\n this._subscriptions.forEach(x => x.unsubscribe());\r\n this._subscriptions = [];\r\n }\r\n}\r\n","import { Component, ComponentFactoryResolver, Input, ViewChild, ViewContainerRef } from '@angular/core';\r\nimport { BaseInjectableComponent } from '@base/component/BaseInjectableComponent';\r\nimport { SysGlobals } from '@core/framework/sysglobals';\r\nimport { Utils } from '@core/helpers/Utils';\r\nimport { PageLayoutComponent } from '@ui/layouts/layout/page-layout/pagelayout.component';\r\nimport { DxValidationGroupComponent } from 'devextreme-angular';\r\nimport validationEngine from 'devextreme/ui/validation_engine';\r\nimport { Observable, Subject, Subscription, of, mergeMap } from 'rxjs';\r\nimport { ContextMenuElement, ToolbarSettings, ViewModeElement } from '../classes/BaseClasses';\r\nimport { EnumApplicationMode, EnumFilterPanelActions, EnumNotificationDeliveryOptions, EnumPageDisplayModes, EnumPageEntitySources } from '@core/framework/sysenums.enum';\r\nimport { BaseEntity, BaseEntityResponse, BaseResponse, BaseState, FileView, HistoryChangesSet, SharingInformation, RenderedTemplate } from '../entities/BaseEntities';\r\nimport { BaseComponent } from './BaseComponent';\r\nimport { ServiceBagService } from './ServiceBag';\r\nimport { AppInjector } from '@m4u-angular/core/injector/injector.module';\r\n\r\n@Component({\r\n selector: 'base-page-component',\r\n template: '
'\r\n})\r\nexport abstract class BasePageComponent extends BaseComponent {\r\n //Entity bindings\r\n @Input() public Entity: TEntity = {} as TEntity;\r\n public EntityOriginal: TEntity = {} as TEntity;\r\n\r\n //Flags\r\n public IsLoading: boolean;\r\n private _isDirtyEntity: boolean = false;\r\n private _isDirtyCustom: boolean = false;\r\n public OnIsDirtyDisabled() {\r\n return false;\r\n }\r\n\r\n //Primary links\r\n public ToolbarSettings: ToolbarSettings;\r\n\r\n //Major fields\r\n public QueryParams: any;\r\n public ContextMenuDefault: ContextMenuElement[] = [];\r\n protected EntityTypes: string[];\r\n\r\n //Subscriptions\r\n private onScreenSizeChanged$Subscription: Subscription;\r\n private onFilterPanel$Subscription: Subscription;\r\n private onEntityChange$Subscription: Subscription;\r\n private pageHistory$Subscription: Subscription;\r\n\r\n //Overrides\r\n protected OnInitEntity() { }\r\n protected OnInitTitle(): string {\r\n return undefined;\r\n }\r\n protected OnInitSubtitle(): string {\r\n return undefined;\r\n }\r\n protected OnInitContextMenus(): ContextMenuElement[] {\r\n return undefined;\r\n }\r\n protected OnInitViewModes(): ViewModeElement[] {\r\n return undefined;\r\n }\r\n protected OnInitDefaultViewModeID(): any {\r\n return undefined;\r\n }\r\n public OnClose() {\r\n return true;\r\n }\r\n protected OnSubmitPage() { }\r\n protected OnApplyFilter() { }\r\n protected OnClearFilter() { }\r\n protected OnReadyFilter() { }\r\n protected OnGetContextMenuTitle(): string {\r\n return '';\r\n }\r\n public OnGetFilterDescription(): string {\r\n return '';\r\n }\r\n protected OnGetPrintTitle(): string {\r\n return '';\r\n }\r\n public OnInitInjectableComponent(injectableComponent: BaseInjectableComponent) { }\r\n public OnGetHistoryCustom(): Observable {\r\n return of(undefined);\r\n }\r\n public OnGetHistoryInternal(): Observable {\r\n return of(undefined);\r\n }\r\n\r\n\r\n private _showAsWindowOnMobile: boolean;\r\n get ShowAsWindowOnMobile() {\r\n return this._showAsWindowOnMobile || this.OnShowAsWindowOnMobile();\r\n }\r\n protected OnShowAsWindowOnMobile() {\r\n return false;\r\n }\r\n\r\n @ViewChild(DxValidationGroupComponent) protected validationGroup: DxValidationGroupComponent;\r\n @ViewChild(PageLayoutComponent) protected layout: PageLayoutComponent;\r\n\r\n constructor\r\n (\r\n public override A: ServiceBagService,\r\n public override ComponentName: string,\r\n public EntityType: (new () => TEntity),\r\n StateType: (new () => TState),\r\n public DisplayMode: EnumPageDisplayModes = EnumPageDisplayModes.FullScreen,\r\n public EntityMode: EnumPageEntitySources = EnumPageEntitySources.Internal\r\n ) {\r\n super(A, ComponentName, StateType);\r\n\r\n if (this.A.Screen.IsMobile() && DisplayMode == EnumPageDisplayModes.Window && !this.ShowAsWindowOnMobile) {\r\n this.DisplayMode = EnumPageDisplayModes.BottomSheet;\r\n }\r\n this.BindHandler('NavigateBack');\r\n }\r\n\r\n public get IsDirty(): boolean {\r\n return !this.OnIsDirtyDisabled() && (this._isDirtyEntity || this._isDirtyCustom);\r\n }\r\n\r\n public SetDirty() {\r\n this._isDirtyCustom = true;\r\n }\r\n\r\n //Run initialization cycle\r\n protected override RunInitStartCycle(bFromAngularEvent: boolean) {\r\n if (this.IsRunCycle(bFromAngularEvent)) super.RunInitStartCycle(bFromAngularEvent);\r\n }\r\n protected override RunInitFinishCycle(bFromAngularEvent: boolean) {\r\n if (this.IsRunCycle(bFromAngularEvent)) super.RunInitFinishCycle(bFromAngularEvent);\r\n }\r\n protected override RunDestroyCycle(bFromAngularEvent: boolean) {\r\n if (this.IsRunCycle(bFromAngularEvent)) super.RunDestroyCycle(bFromAngularEvent);\r\n }\r\n private IsRunCycle(bFromAngularEvent: boolean) {\r\n return !(bFromAngularEvent && this.DisplayMode == EnumPageDisplayModes.Dialog);\r\n }\r\n\r\n //Initialize page\r\n override OnInitComponentInternal() {\r\n super.OnInitComponentInternal();\r\n this.InitEntity();\r\n\r\n // check that it is redundant\r\n /*this.onScreenSizeChanged$Subscription = this.A.Screen.ScreenSize$\r\n .subscribe(() => {\r\n this.ReloadToolbar();\r\n });*/\r\n\r\n this.pageHistory$Subscription = this.A.RouteHistoryService.PageHistory$.subscribe((historyItem) => {\r\n if (this instanceof historyItem.Component) {\r\n historyItem.Title = this.GetTitle();\r\n historyItem.ComponentName = this.ComponentName;\r\n this.A.RouteHistoryService.UpdateHistoryItem(historyItem);\r\n }\r\n });\r\n\r\n this.onFilterPanel$Subscription = this.A.SysEvents.FilterPanel\r\n .subscribe(action => {\r\n switch (action) {\r\n case EnumFilterPanelActions.Apply:\r\n this.OnApplyFilter();\r\n break;\r\n case EnumFilterPanelActions.Clear:\r\n this.OnClearFilter();\r\n break;\r\n case EnumFilterPanelActions.Ready:\r\n this.OnReadyFilter();\r\n break;\r\n }\r\n });\r\n\r\n if (this.A.Screen.IsMobile() && this.DisplayMode == EnumPageDisplayModes.BottomSheet && !this.ShowAsWindowOnMobile) {\r\n this.m_IsDialogVisible = this.m_IsDialogRendered = true;\r\n }\r\n }\r\n\r\n override OnDestroyComponentInternal() {\r\n this.onScreenSizeChanged$Subscription && this.onScreenSizeChanged$Subscription.unsubscribe();\r\n this.onFilterPanel$Subscription && this.onFilterPanel$Subscription.unsubscribe();\r\n this.onEntityChange$Subscription && this.onEntityChange$Subscription.unsubscribe();\r\n this.pageHistory$Subscription && this.pageHistory$Subscription.unsubscribe();\r\n }\r\n\r\n override OnStartInitCycleInternal() {\r\n //Query params are not supported for dialog and bottom sheet\r\n if (this.DisplayMode == EnumPageDisplayModes.Dialog) return;\r\n //Get renamed query params\r\n this.QueryParams = this.A.Navigator.GetQueryParams(this.A.Navigator.IsCurrentRouteWindow());\r\n\r\n if (this.A.Screen.IsMobile() && this.QueryParams && this.DisplayMode === EnumPageDisplayModes.BottomSheet && this.QueryParams.ShowAsWindowOnMobile) {\r\n this.DisplayMode = EnumPageDisplayModes.Window;\r\n this._showAsWindowOnMobile = true;\r\n }\r\n }\r\n\r\n override OnInitComponentFinishedInternal() {\r\n this.InitToolbarSettings();\r\n this.NotifyReloadTitle();\r\n\r\n //if (this.PageLayout) {\r\n // const containerRef = this.PageLayout.containerRef;\r\n // const componentFactoryResolver = AppInjector.get(ComponentFactoryResolver);\r\n\r\n // SysGlobals.InjectableComponentsOptions.forEach(x => {\r\n // if (x.TargetModuleName === this.ModuleName && x.TargetComponentName === this.ComponentName) {\r\n // // Resolve an injectable component\r\n // const componentFactory = componentFactoryResolver.resolveComponentFactory(x.ComponentType);\r\n // const componentRef = containerRef.createComponent>(componentFactory);\r\n // // Set fields\r\n // componentRef.instance.TargetComponentName = this.ComponentName;\r\n // componentRef.instance.TargetAppName = this.ModuleName;\r\n // componentRef.instance.EntityType = this.EntityType;\r\n\r\n // // Handle the injectable component on high levels\r\n // this.OnInitInjectableComponent(componentRef.instance);\r\n\r\n // if (this.A.Screen.IsDesktop()) {\r\n // // Add buttons to toolbar\r\n // const buttonSettings = {\r\n // Type: 'normal',\r\n // Text: x.ButtonText,\r\n // Click: () => { componentRef.instance.BaseAction(); }\r\n // };\r\n // this.PageLayout.ToolbarButtons.push(buttonSettings);\r\n\r\n // // Give buttons settings to ths injectable component\r\n // componentRef.instance.ButtonSettings = buttonSettings;\r\n // } else {\r\n // this.ContextMenuDefault.push({\r\n // text: x.ButtonText,\r\n // onClick: () => { componentRef.instance.BaseAction(); }\r\n // });\r\n // }\r\n\r\n // }\r\n // });\r\n //}\r\n }\r\n\r\n override OnInitComponentFinishedAfterDetectInternal() {\r\n if (this.DisplayMode != EnumPageDisplayModes.Dialog) return;\r\n\r\n //Reset the validation\r\n this.ResetValidation();\r\n }\r\n\r\n public RefreshEntityOriginal() {\r\n this.EntityOriginal = Utils.MapObject(this.EntityType, this.Entity);\r\n this._isDirtyEntity = false;\r\n this._isDirtyCustom = false;\r\n }\r\n\r\n //Initialize an empty entity\r\n protected InitEntity() {\r\n if (this.EntityMode == EnumPageEntitySources.External) return;\r\n this.Entity = Utils.GetNewInstance(this.EntityType);\r\n SysGlobals.CurrentEntity = this.Entity;\r\n this.OnInitEntity();\r\n this.RefreshEntityOriginal();\r\n }\r\n\r\n //Apply a new entity to the page\r\n protected SetEntity(type: (new () => TEntity), serviceResponse: Observable>, bShowSuccessMessage: boolean = false, after?: (response: BaseEntityResponse) => void, fail?: (response: BaseEntityResponse) => void) {\r\n this.Do(serviceResponse, bShowSuccessMessage, (response: BaseEntityResponse) => {\r\n //Set entities\r\n this.Entity = Utils.MapObject(type, response.Entity);\r\n SysGlobals.CurrentEntity = this.Entity;\r\n\r\n //Save original (after event on purpose, to allow comparing with previous state)\r\n this.RefreshEntityOriginal();\r\n\r\n //subscribe on entity changes\r\n this.SubscribeOnEntityChanges();\r\n\r\n //Post-load event\r\n if (after != undefined) after(response);\r\n }, fail);\r\n }\r\n\r\n protected SubscribeOnEntityChanges() {\r\n if (this.OnIsDirtyDisabled()) return;\r\n const changed = new Subject();\r\n\r\n //add proxy for emiting changes\r\n this.Entity = Utils.DeepProxy(this.Entity, changed) as TEntity;\r\n\r\n //add subscription for handling changes\r\n this.onEntityChange$Subscription && this.onEntityChange$Subscription.unsubscribe();\r\n this.onEntityChange$Subscription = changed.subscribe((_) => {\r\n this._isDirtyEntity = !Utils.IsEquals(this.Entity, this.EntityOriginal, true);\r\n });\r\n }\r\n\r\n //Return default title for the page\r\n //If defined using menu path, use it. \r\n //If not, fallback to component name\r\n protected GetDefaultTitle(): string {\r\n let sTitle: string;\r\n if (this.DisplayMode != EnumPageDisplayModes.Dialog) sTitle = this.RC(`$$Pages.${SysGlobals.MenuPath}`);\r\n if (sTitle == undefined) sTitle = this.RC(`Pages.${this.ComponentStateName}`);\r\n return sTitle;\r\n }\r\n\r\n //Return the title for the component\r\n public GetTitle(): string {\r\n const sCustomTitle: string = this.OnInitTitle();\r\n const sFinalTitle: string = sCustomTitle ? sCustomTitle : this.GetDefaultTitle();\r\n return sFinalTitle;\r\n }\r\n\r\n public GetSubtitle(): string {\r\n const customSubtitle = this.OnInitSubtitle();\r\n return customSubtitle || '';\r\n }\r\n\r\n //Return context menu to the toolbar\r\n public GetContextMenus(): ContextMenuElement[] {\r\n let contextMenu = this.OnInitContextMenus();\r\n if (contextMenu === undefined) {\r\n contextMenu = [];\r\n }\r\n\r\n contextMenu = this.ContextMenuDefault.concat(contextMenu);\r\n\r\n return contextMenu;\r\n }\r\n\r\n\r\n //Return context menu to the toolbar\r\n public GetViewModes(): ViewModeElement[] {\r\n return this.OnInitViewModes();\r\n }\r\n\r\n public GetDefaultViewModeID(): any {\r\n\r\n return this.OnInitDefaultViewModeID();\r\n }\r\n\r\n //Signal toolbar to reload the title\r\n protected NotifyReloadTitle() {\r\n this.SetToolbarTitle();\r\n this.SetToolbarButtonsVisibility();\r\n\r\n this.A.SysEvents.ReloadToolbar(this.ToolbarSettings);\r\n }\r\n\r\n protected RepaintToolbar() {\r\n this.SetToolbarTitle();\r\n this.SetToolbarButtonsVisibility();\r\n\r\n this.A.SysEvents.ReloadToolbar(this.ToolbarSettings);\r\n }\r\n\r\n protected ReloadToolbar() {\r\n this.InitToolbarSettings();\r\n\r\n this.A.SysEvents.ReloadToolbar(this.ToolbarSettings);\r\n }\r\n\r\n InitToolbarSettings() {\r\n this.ToolbarSettings = new ToolbarSettings;\r\n this.ToolbarSettings.BackButtonClick = this.NavigateBack;\r\n this.ToolbarSettings.PageComponentName = this.ComponentName;\r\n this.ToolbarSettings.Page = this;\r\n this.ToolbarSettings.OnGetContextMenuItems = () => this.GetContextMenus();\r\n this.ToolbarSettings.ContextMenuTitle = this.OnGetContextMenuTitle();\r\n this.ToolbarSettings.ViewModes = this.GetViewModes();\r\n this.ToolbarSettings.CloseButtonClick = () => this.ClosePage();\r\n this.ToolbarSettings.OnShareButtonClick = (e) => {\r\n this.A.ShareService.OpenShareDialog(this.ComponentName, this.EntityOriginal?.TypeName, this.OnGetRenderedTemplate() , this.OnShare());\r\n };\r\n\r\n this.SetToolbarTitle();\r\n this.SetToolbarButtonsVisibility();\r\n\r\n const customToolbarSettings = this.OnGetToolbarSettings();\r\n if (customToolbarSettings) this.ToolbarSettings = { ...this.ToolbarSettings, ...customToolbarSettings };\r\n }\r\n\r\n protected OnShare(): (sharingInformation: SharingInformation) => Observable> {\r\n return null;\r\n }\r\n\r\n protected OnGetRenderedTemplate(): (notificationTemplateID: number, deliveryOption: EnumNotificationDeliveryOptions) => Observable> {\r\n return this.A.ShareService.GetDefaultOnGetRenderedTemplate();\r\n }\r\n\r\n protected SetToolbarTitle() {\r\n if (this.ToolbarSettings == undefined) return;\r\n this.ToolbarSettings.Title = this.GetTitle();\r\n this.ToolbarSettings.Subtitle = this.GetSubtitle();\r\n\r\n this.A.RouteHistoryService.SetHistoryItemTitle(this.ComponentName, this.ToolbarSettings.Title);\r\n }\r\n\r\n protected SetToolbarButtonsVisibility() {\r\n if (this.ToolbarSettings == undefined) return;\r\n\r\n const customToolbarSettings = this.OnGetToolbarSettings();\r\n this.ToolbarSettings.ShowMenuButton = customToolbarSettings?.ShowMenuButton != null\r\n ? customToolbarSettings.ShowMenuButton\r\n : this.A.Screen.IsMobile() && this.A.AppConfigService.AppConfig.Mode === EnumApplicationMode.Standard && this.DisplayMode == EnumPageDisplayModes.FullScreen;\r\n this.ToolbarSettings.ShowBackButton = customToolbarSettings?.ShowBackButton != null\r\n ? customToolbarSettings.ShowBackButton\r\n : !this.A.AppConfigService.AppConfig.ShowBreadcrumb() && (\r\n (this.IsShowAsFullScreen() && this.A.RouteHistoryService.HistoryLength > 1) ||\r\n (this.DisplayMode == EnumPageDisplayModes.Window && this.A.RouteHistoryService.HasHistoryForWindow())\r\n );\r\n this.ToolbarSettings.ShowCloseButton = customToolbarSettings?.ShowCloseButton != null\r\n ? customToolbarSettings.ShowCloseButton\r\n : !this.IsShowAsFullScreen() && (this.DisplayMode == EnumPageDisplayModes.Window || this.DisplayMode == EnumPageDisplayModes.Dialog)\r\n || this.DisplayMode == EnumPageDisplayModes.BottomSheet;\r\n this.ToolbarSettings.IsAllowNotifications = customToolbarSettings?.IsAllowNotifications != null\r\n ? customToolbarSettings.IsAllowNotifications\r\n : this.A.AppConfigService.AppConfig.IsAllowNotifications && this.DisplayMode == EnumPageDisplayModes.FullScreen;\r\n }\r\n\r\n protected OnGetToolbarSettings() {\r\n return undefined;\r\n }\r\n\r\n protected override DoValidatorReset(): boolean {\r\n return !this.Entity || !this.Entity.EntryID;\r\n }\r\n\r\n //*IsDialogRendered is to prevent *ngIf from removing the content and causes unexplainable errors\r\n private m_IsDialogRendered: boolean;\r\n public get IsDialogRendered(): boolean {\r\n return this.m_IsDialogRendered;\r\n }\r\n\r\n //This is an indication for the template whether it is visible at the moment\r\n private m_IsDialogVisible: boolean;\r\n public get IsDialogVisible(): boolean {\r\n return this.m_IsDialogVisible;\r\n }\r\n\r\n private _showDialogAsBottomSheet: boolean;\r\n public get ShowDialogAsBottomSheet(): boolean {\r\n return this._showDialogAsBottomSheet;\r\n }\r\n\r\n //Must be executed to initialize the dialog, before setting any values to it\r\n //The reason we have this is that because the same dialog might be reused many times\r\n public InitDialog(InitialEntity?: TEntity) {\r\n if (InitialEntity != undefined) this.Entity = InitialEntity;\r\n this.RunInitStartCycle(false);\r\n this.RunInitFinishCycle(false);\r\n }\r\n\r\n //Show the component as a dialog\r\n private m_DialogCompletedHandler: (e: any) => void;\r\n private m_DialogCanceledHandler: () => void;\r\n private ShowDialog(DialogCompletedHandler: (e: any) => void, DialogCanceledHandler?: () => void) {\r\n //Check\r\n if (this.DisplayMode != EnumPageDisplayModes.Dialog && this.DisplayMode != EnumPageDisplayModes.BottomSheet)\r\n throw new Error('Your page is not a dialog, use navigation methods instead');\r\n\r\n //Reload title since it may be dependant on state that was loaded so far\r\n this.NotifyReloadTitle();\r\n\r\n //Set visibility flags and handler\r\n this.m_IsDialogVisible = true;\r\n this.m_IsDialogRendered = true;\r\n this.m_DialogCompletedHandler = DialogCompletedHandler;\r\n this.m_DialogCanceledHandler = DialogCanceledHandler;\r\n }\r\n\r\n //Combine both methods for cases when no initial state data has to be set\r\n public ShowDialogShort(\r\n DialogCompletedHandler: (e: any) => void,\r\n DialogCanceledHandler?: () => void,\r\n showAsUsualOnMobile?: boolean,\r\n initialEntity?: TEntity | any) {\r\n if (this.A.Screen.IsMobile() && !showAsUsualOnMobile) {\r\n this._showDialogAsBottomSheet = true;\r\n }\r\n\r\n this.InitDialog(initialEntity);\r\n this.ShowDialog(DialogCompletedHandler, DialogCanceledHandler);\r\n }\r\n\r\n public ShowBottomSheet(\r\n DialogCompletedHandler: (e: any) => void,\r\n DialogCanceledHandler?: () => void,\r\n initialEntity?: TEntity | any) {\r\n\r\n this._showDialogAsBottomSheet = true;\r\n this.InitDialog(initialEntity);\r\n this.ShowDialog(DialogCompletedHandler, DialogCanceledHandler);\r\n }\r\n\r\n //Close dialog and raise the callback to parent\r\n public CloseDialogWithSuccess(e?: any) {\r\n this.HideDialog();\r\n if (this.m_DialogCompletedHandler) this.m_DialogCompletedHandler(e);\r\n }\r\n\r\n //Close dialog without any event\r\n public CloseDialogWithCancel() {\r\n this.HideDialog();\r\n if (this.m_DialogCanceledHandler) this.m_DialogCanceledHandler();\r\n }\r\n\r\n //Hide the dialog\r\n private HideDialog() {\r\n this.State = Utils.GetNewInstance(this.StateType);\r\n\r\n //if (this.validationGroup && this.validationGroup.instance) {\r\n // const result = validationEngine.validateGroup(this.validationGroup.instance);\r\n // result.isValid && this.validationGroup.instance.reset();\r\n //}\r\n\r\n this.m_IsDialogVisible = false;\r\n this.RunDestroyCycle(false);\r\n }\r\n\r\n //public ScrollToTop() {\r\n // this.PageLayout.scroll.instance.scrollTo(0);\r\n //}\r\n\r\n public IsShowAsFullScreen(): boolean {\r\n //Screen and current page sizes\r\n const bMobile: boolean = this.A.Screen.IsMobile();\r\n\r\n //No need for special classes if showing full screen, unless this is a mobile device\r\n if (this.DisplayMode == EnumPageDisplayModes.FullScreen) return true;\r\n\r\n //For window - show full screen or in window according to screen size. Use window dimensions\r\n if (this.DisplayMode == EnumPageDisplayModes.Window) return bMobile ? true : false;\r\n\r\n //For dialog - show always in partial view\r\n if (this.DisplayMode == EnumPageDisplayModes.Dialog) return false;//bMobile ? true : false;\r\n }\r\n\r\n //Closes page, whether dialog or window\r\n public ClosePage() {\r\n if (this.OnClose()) {\r\n switch (this.DisplayMode) {\r\n case EnumPageDisplayModes.Window:\r\n this.A.RouteHistoryService.CloseWindow();\r\n return;\r\n case EnumPageDisplayModes.Dialog:\r\n this.CloseDialogWithCancel();\r\n return;\r\n case EnumPageDisplayModes.BottomSheet:\r\n if (this._showDialogAsBottomSheet) {\r\n this._showDialogAsBottomSheet = false;\r\n this.CloseDialogWithCancel();\r\n } else {\r\n this.A.RouteHistoryService.CloseWindow();\r\n }\r\n return;\r\n }\r\n }\r\n }\r\n\r\n GetFirstModuleName() {\r\n const moduleNames = this.A.AppConfigService.AppConfig.ModuleName.split(',');\r\n return moduleNames[0];\r\n }\r\n\r\n public get ClientHeight(): number {\r\n return this.GetLastPageBodyElement()?.getBoundingClientRect()?.height || 0;\r\n }\r\n\r\n public get ClientWidth(): number {\r\n return this.GetLastPageBodyElement()?.getBoundingClientRect()?.width || 0;\r\n }\r\n\r\n private GetLastPageBodyElement() {\r\n const pageBodyElements = document.querySelectorAll(`.${this.ComponentName} .page-body`);\r\n return pageBodyElements && pageBodyElements.length > 0 ? pageBodyElements[pageBodyElements.length - 1] : null;\r\n }\r\n\r\n public ShowPreview(pdfData: string | Blob, fileName: string) {\r\n this.A.SysEvents.SetPagePreviewState(this.ComponentName, true, pdfData, fileName);\r\n }\r\n\r\n public HidePreview() {\r\n this.A.SysEvents.SetPagePreviewState(this.ComponentName, false);\r\n }\r\n\r\n public GetHistory(): Observable {\r\n return this.OnGetHistoryCustom().pipe(\r\n mergeMap(h => {\r\n if (!h) {\r\n return this.OnGetHistoryInternal();\r\n }\r\n return of(h);\r\n }));\r\n }\r\n}\r\n","import { ChangeDetectorRef, Injectable, Optional } from \"@angular/core\";\r\nimport { FrameworkService } from \"@core/framework/framework.service\";\r\nimport { NavigatorService } from \"@core/framework/navigator.service\";\r\nimport { SysEventsService } from \"@core/framework/sysevents.service\";\r\nimport { SysEnumsService } from \"@core/framework/sysenums.enum\";\r\nimport { GenericListEndpoint } from \"@core/endpoints/genericlist.endpoint\";\r\nimport { SessionService } from '@core/framework/session.service';\r\nimport { ResourcesService } from '@core/framework/resources.service';\r\nimport { AppConfigService } from '@configuration/app.config.service';\r\nimport { CustomizationService } from '@core/framework/customization-service';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { UiService } from '@core/framework/ui.service';\r\nimport { RouteHistoryService } from '@m4u-angular/core/framework/route-history.service';\r\nimport { EntityService } from '@m4u-angular/core/framework/entity.service';\r\nimport { ShareService } from \"@core/framework/share.service\";\r\n\r\n@Injectable()\r\nexport class ServiceBagService {\r\n Enums: any = {};\r\n constructor(\r\n public Framework: FrameworkService,\r\n @Optional() public ChangeDetector: ChangeDetectorRef,\r\n public GenericListEndpoint: GenericListEndpoint,\r\n public SysEnums: SysEnumsService,\r\n public Session: SessionService,\r\n public Navigator: NavigatorService,\r\n public SysEvents: SysEventsService,\r\n public ResourcesService: ResourcesService,\r\n public AppConfigService: AppConfigService,\r\n public CustomizationService: CustomizationService,\r\n public Screen: ScreenService,\r\n public UI: UiService,\r\n public RouteHistoryService: RouteHistoryService,\r\n public EntityService: EntityService,\r\n public ShareService: ShareService) {\r\n this.Enums = this.AppConfigService.AppConfig.Enums;\r\n }\r\n\r\n}\r\n\r\nexport const ServiceBagServices =\r\n [\r\n ServiceBagService,\r\n NavigatorService\r\n ]\r\n","import 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 { 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 { 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 { 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 { Utils } from \"@core/helpers/Utils\";\r\n\r\nexport class DataLoadOptions\r\n{\r\n\r\n //Member variables\r\n private Search: string\r\n private SearchFields: string[]\r\n private Sort: string\r\n private IsSortDescending: boolean;\r\n private Skip: number\r\n private Take: number\r\n private ComplexFilter: string;\r\n private DistinctField: string\r\n\r\n //Convert the loadOptions received from DevExpress controls to a structure we can recognize\r\n constructor(loadOptions: any)\r\n {\r\n //If empty object was passed, means we in raw mode and do not need this at all\r\n if (loadOptions == undefined) return;\r\n\r\n //Parse search \r\n if (!Utils.IsEmpty(loadOptions.searchValue))\r\n {\r\n this.Search = loadOptions.searchValue;\r\n this.SearchFields = loadOptions.searchExpr;\r\n }\r\n\r\n //Parse complex filter\r\n if (!Utils.IsEmpty(loadOptions.filter) && typeof loadOptions.filter !== 'function')\r\n {\r\n this.ComplexFilter = (JSON.stringify({ Filter: loadOptions.filter }));\r\n }\r\n\r\n //Parse sort - can come as an array or simple field name\r\n if (!Utils.IsEmpty(loadOptions.sort) )\r\n {\r\n if (Array.isArray(loadOptions.sort))\r\n {\r\n this.Sort = loadOptions.sort[0].selector;\r\n this.IsSortDescending = loadOptions.sort[0].desc;\r\n }\r\n else\r\n {\r\n this.Sort = loadOptions.sort;\r\n }\r\n }\r\n\r\n \r\n\r\n\r\n //Parse search \r\n if (!Utils.IsEmpty(loadOptions.dataField)) this.DistinctField = loadOptions.dataField;\r\n\r\n\r\n //Parse take/skip\r\n if (!Utils.IsEmpty(loadOptions.skip)) this.Skip = loadOptions.skip;\r\n if (!Utils.IsEmpty(loadOptions.take)) this.Take = loadOptions.take;\r\n\r\n }\r\n \r\n //Return the load options as a query string \r\n public GetLoadOptions(): any\r\n {\r\n\r\n //Sort+Search\r\n var result: any = {};\r\n if (!Utils.IsEmpty(this.Search) && !Utils.IsEmpty(this.SearchFields))\r\n {\r\n result.DLOSearch = Utils.ConvertStringToBase64(this.Search);\r\n result.DLOSearchFields = Utils.ConvertStringToBase64(this.SearchFields.toString());\r\n }\r\n if (!Utils.IsEmpty(this.Sort))\r\n {\r\n result.DLOSort = this.Sort;\r\n if (this.IsSortDescending) result.DLOIsSortDescending = 1;\r\n }\r\n\r\n //Skip+Take\r\n if (this.Skip > 0) result.DLOSkip = this.Skip;\r\n if (this.Take > 0) result.DLOTake = this.Take;\r\n\r\n if (!Utils.IsEmpty(this.ComplexFilter)) result.DLOComplexFilter = Utils.ConvertStringToBase64(this.ComplexFilter);\r\n if (!Utils.IsEmpty(this.DistinctField)) result.DLODistinctField = Utils.ConvertStringToBase64(this.DistinctField);\r\n\r\n return result;\r\n }\r\n\r\n\r\n}\r\n","import { APIGatewayService } from \"@core/gateway/APIGateway.service\";\r\nimport { AppInjector } from \"@core/injector/injector.module\";\r\nimport { AppConfigService } from '@configuration/app.config.service';\r\nimport { IBaseModuleComponent } from '../component/IBaseComponent';\r\nimport { Inject, InjectionToken } from \"@angular/core\"; \r\n\r\nexport const EMPTY_STRING_TOKEN = new InjectionToken('name');\r\n\r\nexport abstract class BaseEndpoint implements IBaseModuleComponent {\r\n ControllerName: string;\r\n\r\n ModuleName: string = AppInjector.get(AppConfigService).getModuleNameByInstance(this);\r\n\r\n constructor(\r\n @Inject(EMPTY_STRING_TOKEN) ControllerName: string,\r\n protected api: APIGatewayService) {\r\n this.ControllerName = this.ModuleName ? `${this.ModuleName}/${ControllerName}` : ControllerName;\r\n }\r\n\r\n GetControllerURL(): string {\r\n return this.api.GetAPIURL() + this.ControllerName;\r\n }\r\n\r\n}","import { BaseEndpoint } from \"./BaseEndpoint\";\r\nimport { BaseEntity, BaseEntitiesResponse, BaseEntityResponse, BaseResponse, BaseDataResponse, HistoryChangesSet, SharingInformation, FileView, RenderedTemplate } from \"../entities/BaseEntities\";\r\nimport { APIGatewayService } from \"@core/gateway/APIGateway.service\";\r\nimport { Observable } from \"rxjs\";\r\nimport { DataLoadOptions } from \"../datalayer/DataLoadOptions\";\r\nimport { EnumNotificationDeliveryOptions } from \"@core/framework/sysenums.enum\";\r\n\r\n\r\nexport abstract class BaseEndpointCRUD extends BaseEndpoint {\r\n constructor(ControllerName: string, protected override api: APIGatewayService) {\r\n super(ControllerName, api);\r\n }\r\n\r\n public Get(EntryID: number): Observable> { return this.api.ExecuteGetAction(this.ControllerName, 'Get', { EntryID: EntryID }); }\r\n public GetShallow(EntryID: number): Observable> { return this.api.ExecuteGetAction(this.ControllerName, 'GetShallow', { EntryID: EntryID }); }\r\n public GetList(options?: DataLoadOptions): Observable> { return this.api.ExecuteGetAction(this.ControllerName, 'List', options ? options.GetLoadOptions() : undefined); }\r\n public GetListShallow(options?: DataLoadOptions): Observable> { return this.api.ExecuteGetAction(this.ControllerName, 'ListShallow', options ? options.GetLoadOptions() : undefined); }\r\n public Save(Entity: TEntity): Observable> { return this.api.ExecutePostAction(this.ControllerName, 'Save', Entity); }\r\n public SaveBatch(Entities: TEntity[]): Observable> { return this.api.ExecutePostAction(this.ControllerName, 'SaveBatch', Entities as any); }\r\n public Delete(EntryID: number): Observable { return this.api.ExecuteDeleteAction(this.ControllerName, 'Delete', { EntryID: EntryID }); }\r\n public DeleteBatch(EntryIDs: number[]): Observable { return this.api.ExecuteDeleteAction(this.ControllerName, 'DeleteBatch', { EntryIDs: EntryIDs }); }\r\n public IsExists(EntryID: number): Observable> { return this.api.ExecuteGetAction(this.ControllerName, 'IsExists', { EntryID: EntryID }); }\r\n public IsDeletable(EntryID: number): Observable> { return this.api.ExecuteGetAction(this.ControllerName, 'IsDeletable', { EntryID: EntryID }); }\r\n public IsEditable(EntryID: number): Observable> { return this.api.ExecuteGetAction(this.ControllerName, 'IsEditable', { EntryID: EntryID }); }\r\n public Count(options?: DataLoadOptions): Observable> { return this.api.ExecuteGetAction(this.ControllerName, 'Count', options ? options.GetLoadOptions() : undefined); }\r\n public GetHistory(EntryID: number): Observable> { return this.api.ExecuteGetAction(this.ControllerName, 'GetHistory', { EntryID: EntryID }); }\r\n public GetRenderedTemplate(EntryID: number, NotificationTemplateID: number, DeliveryOption: EnumNotificationDeliveryOptions): Observable> { return this.api.ExecuteGetAction(this.ControllerName, 'GetRenderedTemplate', { EntryID: EntryID, NotificationTemplateID: NotificationTemplateID, DeliveryOption: DeliveryOption }); }\r\n public Share(sharingInformation: SharingInformation): Observable> { return this.api.ExecutePostAction(this.ControllerName, 'Share', sharingInformation as any); }\r\n\r\n}\r\n","import {\r\n EnumCheckCredentialsResult,\r\n EnumInfoUTypes,\r\n EnumLoginSecureKeyTypes,\r\n EnumMFAMethods,\r\n EnumNotificationDeliveryOptions,\r\n EnumNotificationStatuses,\r\n EnumPopupShowStatuses,\r\n HistoryEventTypesEnum,\r\n EnumSystemOptionDataTypes, EnumUserLoginStatus, EnumLocalizationTypes, EnumNotificationTemplateEditingMode, EnumPrintingType,\r\n EnumLogLevel\r\n} from '@core/framework/sysenums.enum';\r\n\r\nexport class BaseState { }\r\nexport class BaseEntity {\r\n EntryID: number;\r\n TypeName?: string;\r\n}\r\n\r\nexport class BaseResponse {\r\n IsSuccess: boolean;\r\n ResponseCode: number;\r\n ResponseMessage: string;\r\n ResponseExtendedMessage: string;\r\n}\r\n\r\nexport class KeyValueEntity extends BaseEntity {\r\n Key: string;\r\n Value: string;\r\n}\r\n\r\nexport class GenericListEntity extends BaseEntity {\r\n constructor(\r\n public Value?: string,\r\n public Text?: string,\r\n public Description?: string,\r\n public SortOrder?: number\r\n ) { super(); }\r\n}\r\n\r\n\r\n//Response types prototypes - for single entity, list of entities, and single data field response\r\nexport class BaseEntityResponse extends BaseResponse { Entity: TEntity; }\r\nexport class BaseEntitiesResponse extends BaseResponse { Entities: TEntity[] }\r\nexport class BaseDataResponse extends BaseResponse { Data: TData; }\r\n\r\nexport class CredentialsCheckResponse {\r\n public CredentialID: number;\r\n public CredentialType: number;\r\n public CheckResult: EnumCheckCredentialsResult;\r\n public CheckResultMessage: string;\r\n public UserName: string;\r\n}\r\n\r\n\r\nexport class CredentialActivityStatus extends BaseEntity {\r\n DisplayUserName: string;\r\n LastUseDate: Date;\r\n IsOnline: boolean;\r\n}\r\n\r\n\r\nexport class LoginParams extends BaseEntity {\r\n public UserName: string\r\n public SecureKey: string\r\n public SecureKeyType: EnumLoginSecureKeyTypes;\r\n public DeliveryOption: EnumNotificationDeliveryOptions;\r\n public Language: string;\r\n public NewPassword: string;\r\n public TaxNumber: string;\r\n public ClientFingerprint: string;\r\n}\r\n\r\nexport class PasswordRecoveryParams extends BaseEntity {\r\n public UserName: string\r\n public Address: string;\r\n public DeliveryOption: EnumNotificationDeliveryOptions;\r\n public Token: string;\r\n public Language: string;\r\n public NewPassword: string;\r\n\r\n}\r\n\r\nexport class CompanyInfo extends BaseEntity {\r\n public DecimalSeparator: string\r\n public ThousandsSeparator: string\r\n\r\n public NumberGeneral: string\r\n public NumberPercent: string\r\n public NumberPrice: string\r\n public NumberQuantity: string\r\n public NumberRate: string\r\n public NumberSum: string\r\n\r\n public DateFormatShort: string\r\n public DateFormatLong: string\r\n public DateFormatCompact: string\r\n public DateFormatFull: string\r\n public TimeFormatLong: string\r\n public TimeFormatShort: string\r\n public DefaultVatGroupCode: string;\r\n\r\n public CurrencyLocal: string\r\n public CurrencySystem: string\r\n\r\n public VatPercent: number;\r\n public IsVatLiable: boolean;\r\n\r\n public ServerVersion: string;\r\n public ClientVersion: string;\r\n public SBOVersion: string;\r\n public LocalizationType: EnumLocalizationTypes;\r\n}\r\n\r\nexport class ClientException extends BaseEntity {\r\n Type: string\r\n Message: string\r\n StackTrace: string\r\n\r\n Device: string;\r\n DeviceType: string\r\n Browser: string\r\n BrowserVersion: string\r\n OS: string\r\n OSVersion: string\r\n}\r\n\r\nexport class DataGroupInfo extends BaseEntity {\r\n constructor(\r\n public Name: string,\r\n public Value: string,\r\n public TotalRows = 0,\r\n ) { super(); }\r\n}\r\n\r\nexport class ItemPriceInfo extends BaseEntity {\r\n Price: number;\r\n DiscountPercent: number;\r\n Currency: string;\r\n}\r\n\r\n\r\nexport class Media extends BaseEntity {\r\n ImageBase64: string;\r\n ImageBytes: number[];\r\n VideoBytes: number[];\r\n VideoDataUrl: any;\r\n}\r\n\r\nexport class WebAPICredential extends BaseEntity {\r\n UserName: string;\r\n Password: string;\r\n Type: number;\r\n IsActive: boolean = true;\r\n IsPendingWelcome: boolean;\r\n MFAMethod: EnumMFAMethods;\r\n IsRestrictByIP: boolean;\r\n IsExcludeFromMFA: boolean;\r\n\r\n WebAPIAllowedIPs: WebAPIAllowedIP[];\r\n}\r\n\r\nexport class WebAPIAllowedIP extends BaseEntity {\r\n CredentialID: number;\r\n IPRangeStart: string;\r\n IPRangeEnd: string;\r\n}\r\n\r\nexport class WebAPICredentialInfo extends BaseEntity {\r\n UserName: string;\r\n Type: number;\r\n IsActive: boolean;\r\n IsPendingWelcome: boolean;\r\n MFAMethod: EnumMFAMethods\r\n IsRestrictByIP: boolean;\r\n IsExcludeFromMFA: boolean;\r\n IsLockedOut: boolean;\r\n IsSupportedUserWelcome: boolean;\r\n\r\n WebAPIAllowedIPs: WebAPIAllowedIP[];\r\n}\r\n\r\nexport class CredentialExternalInfo extends BaseEntity {\r\n DisplayUserName: string;\r\n DisplayUserDescription: string;\r\n Phone: string;\r\n Email: string;\r\n AdditionalInfo1: string;\r\n AdditionalInfo2: string;\r\n AdditionalInfo3: string;\r\n AdditionalInfo4: string;\r\n AdditionalInfo5: string;\r\n IsActive: true;\r\n Type: number;\r\n}\r\n\r\nexport class AttachedFile extends BaseEntity {\r\n public Name: string;\r\n public Extension: string;\r\n public NewFile: File;\r\n public Size: number;\r\n public IconStyle: string;\r\n public IsDisplayedAsImage: boolean;\r\n public Date: Date;\r\n public IsAllowDeleteForcely: boolean;\r\n}\r\n\r\nexport class UploadFile extends BaseEntity {\r\n public Name: string;\r\n public Type: string;\r\n public Data: any;\r\n public Buffer: ArrayBuffer;\r\n public File: File;\r\n}\r\n\r\nexport class CommonSettingEntity extends BaseEntity {\r\n public Name: string;\r\n public Description: string;\r\n}\r\n\r\nexport class NotificationView extends BaseEntity {\r\n public CreatedBy: number;\r\n public CreatedDate: Date;\r\n public DeliveryOption: EnumNotificationDeliveryOptions;\r\n public Status: EnumNotificationStatuses;\r\n public Subject: string;\r\n public FromAddress: string;\r\n public FromDisplayAddress: string;\r\n public Address: string;\r\n public CCAddress: string;\r\n public BccAddress: string;\r\n public NotificationTemplateID: number;\r\n public ReadDate: Date;\r\n public SharedFileUID: string;\r\n public TargetCredentialName: string;\r\n public CreatedByName: string;\r\n public UserName: string;\r\n public NotificationTemplateName: string;\r\n public IsAutomatic: boolean;\r\n public IsDeleted: boolean;\r\n}\r\n\r\nexport class Notification extends BaseEntity {\r\n public CreatedBy: number;\r\n public CreatedDate: Date;\r\n public DeliveryOption: EnumNotificationDeliveryOptions;\r\n public Status: EnumNotificationStatuses;\r\n public Subject: string;\r\n public Body: string;\r\n public FromAddress: string;\r\n public FromDisplayAddress: string;\r\n public Address: string;\r\n public CCAddress: string;\r\n public BccAddress: string;\r\n public ExternalReferenceID: any;\r\n public NotificationTemplateID: number;\r\n public ReadDate: Date;\r\n public IsRead: boolean;\r\n public TargetCredentialID: number;\r\n public SharedFileUID: string;\r\n public TargetCredentialName: string;\r\n public CreatedByName: string;\r\n public NotificationTemplateName: string;\r\n public FailureDescription: string;\r\n public RelatedObjectType: string;\r\n public RelatedObjectID: number;\r\n public PopupShowStatus: EnumPopupShowStatuses;\r\n public IsAutomatic: boolean;\r\n public IsDeleted: boolean;\r\n}\r\n\r\nexport class NotificationListParams extends BaseEntity {\r\n public Address: string;\r\n public UntilDate: Date;\r\n public FromDate: Date;\r\n public DeliveryOption: EnumNotificationDeliveryOptions;\r\n public Template: string;\r\n public NotificationDispatchID: number;\r\n}\r\n\r\nexport class NotificationDispatchListParams extends BaseEntity {\r\n public FromDate: Date;\r\n public UntilDate: Date;\r\n public DeliveryMethod: EnumNotificationDeliveryOptions;\r\n public Statuses: EnumNotificationStatuses[];\r\n public TemplateID: number;\r\n public CreatedByName: string\r\n public NotificationTemplateName: string;\r\n}\r\n\r\nexport class SendNotificationDispatchParams extends BaseEntity\r\n{\r\n public DeliveryMethod: EnumNotificationDeliveryOptions;\r\n public NotificationTemplateID: number;\r\n public Name: string;\r\n public Description: string;\r\n public Subject: string;\r\n public Body: string;\r\n public RecipientIDs: number[];\r\n public Header: string;\r\n public IsSimplifiedHtmlBodyEdit: boolean;\r\n}\r\n\r\nexport class NotificationServer extends BaseEntity {\r\n public SMTPServer: string;\r\n public SMTPPort: number;\r\n public SMTPUserName: string;\r\n public SMTPPassword: string;\r\n public SMTPUseSSL: boolean;\r\n public SMSEndpoint: string;\r\n public SMSUserName: string;\r\n public SMSPassword: string;\r\n public SMSToken: string;\r\n public SMSEndPointIsInforU: EnumInfoUTypes;\r\n}\r\n\r\nexport class NotificationTemplate extends BaseEntity {\r\n public Name: string;\r\n public Language: string;\r\n public Subject: string;\r\n public HTMLBody: string;\r\n public FromEmailDisplay: string;\r\n public FromEmail: string;\r\n public FromPhone: string;\r\n public SMSBody: string;\r\n public WhatsAppBody: string;\r\n public PushMessageBody: string;\r\n public NotificationServerID: number;\r\n public IsUserCustomTemplate: boolean;\r\n public EntityBindingPageType: EnumPrintingType;\r\n public EditingMode: EnumNotificationTemplateEditingMode;\r\n public EntityType: string;\r\n public PageName: string;\r\n public CrystalTemplateFileID: number;\r\n public IsSharePdf: boolean;\r\n public FileNameFormat: string;\r\n public CrystalTemplateFileView: FileView = new FileView;\r\n}\r\n\r\nexport class NotificationDispatch extends BaseEntity {\r\n public CreatedBy: number;\r\n public CreatedDate: Date;\r\n public Status: EnumNotificationStatuses;\r\n public DeliveryMethod: EnumNotificationDeliveryOptions;\r\n public NotificationTemplateID: number;\r\n public Name: string;\r\n public Description: string;\r\n public CanCancel: boolean;\r\n}\r\n\r\nexport class FileView extends BaseEntity {\r\n public FileData: number[] = [];\r\n public Name: string;\r\n public FullName: string;\r\n public Extension: string;\r\n public ContentType: string;\r\n}\r\n\r\nexport class NotificationTemplateView extends BaseEntity {\r\n public Name: string;\r\n public Language: string;\r\n}\r\n\r\nexport class NotificationTemplateListView extends BaseEntity {\r\n public Name: string;\r\n public Language: string;\r\n public IsSupportSharing: boolean;\r\n public IsSupportEmail: boolean;\r\n public IsSupportSMS: boolean;\r\n public IsSupportWhatsapp: boolean;\r\n public EntityType: string;\r\n public PageName: string;\r\n public EditingMode: EnumNotificationTemplateEditingMode;\r\n public EntityBindingPageType: EnumPrintingType;\r\n}\r\n\r\nexport class RenderedTemplate extends BaseEntity {\r\n public Subject: string;\r\n public Body: string;\r\n public CcAddress: string;\r\n public BccAddress: string;\r\n}\r\n\r\nexport class SharingInformation extends BaseEntity {\r\n public Subject: string;\r\n public Body: string;\r\n public PrefixBody: string;\r\n public DeliveryOption: EnumNotificationDeliveryOptions;\r\n public EntityEntryID: number;\r\n public Entities: BaseEntity[] = [];\r\n public NotificationTempalteID: number;\r\n public AttachmentUniqueID: number;\r\n public Address: string;\r\n public CcAddress: string;\r\n public BccAddress: string;\r\n}\r\n\r\nexport class PushMessageListParams extends BaseEntity {\r\n public IsLoadAllNotifications: boolean;\r\n}\r\n\r\nexport class NotificationTestParams extends BaseEntity {\r\n public NotificationServerID: number;\r\n public DeliveryOption: EnumNotificationDeliveryOptions;\r\n public FromAddress: string;\r\n public Address: string;\r\n}\r\n\r\nexport class CredentialLoginParams extends BaseEntity {\r\n public DateFrom: Date;\r\n public DateTo: Date;\r\n public Status: EnumUserLoginStatus;\r\n public CredentialType: number;\r\n public CredentialID: number;\r\n}\r\n\r\nexport class CredentialLogin extends BaseEntity {\r\n public ClientUserName: string;\r\n public CredentialType: number;\r\n public StartDate: Date;\r\n public LastUseDate: Date;\r\n public Status: EnumUserLoginStatus;\r\n public ClientIPAddress: string;\r\n public ImpersonateByID: number;\r\n public CredentialID: number;\r\n}\r\n\r\nexport class CredentialCheckResponse extends BaseEntity {\r\n public IsExists: boolean;\r\n public HasPhone: boolean;\r\n public HasEmail: boolean;\r\n}\r\n\r\nexport class SaveCredentialsParams extends BaseEntity {\r\n public CredentialID: number;\r\n public UserName: string;\r\n public Password: string;\r\n public Type: number;\r\n public IsActive: boolean;\r\n public MFAMethod: EnumMFAMethods;\r\n public IsRestrictByIP: boolean;\r\n public IsExcludeFromMFA: boolean;\r\n public WebAPIAllowedIPs: WebAPIAllowedIP[];\r\n}\r\n\r\nexport class SystemOptionEntity extends BaseEntity {\r\n public OptionName: string;\r\n public Value: string;\r\n public SectionInfo: string;\r\n public IsServer: boolean;\r\n public IsClient: boolean;\r\n public ModuleName: string;\r\n\r\n public SectionIndex: number;\r\n public ValueNumber: number;\r\n public ValueBoolean: boolean;\r\n public IsDeleted: boolean;\r\n public DataType: EnumSystemOptionDataTypes;\r\n public DefaultIsClient: boolean;\r\n}\r\n\r\nexport class CredentialType extends BaseEntity {\r\n public Value: number;\r\n public Text: string;\r\n}\r\n\r\nexport class WebAPIRequestListParams extends BaseEntity {\r\n CredentialID: number;\r\n ModuleName: string\r\n Controller: string;\r\n Action: string;\r\n DateFrom: Date;\r\n DateTo: Date;\r\n}\r\n\r\nexport class WebAPIRequest extends BaseEntity {\r\n SessionID: number;\r\n DateTime: Date;\r\n Duration: number;\r\n Controller: string;\r\n Action: string;\r\n ModuleName: string;\r\n Method: string;\r\n QueryString: string;\r\n Body: string;\r\n Response: string;\r\n StatusCode: number;\r\n}\r\n\r\nexport class HistoryChangesSet extends BaseEntity {\r\n public CreatedDate: Date;\r\n public CreatedBy: number;\r\n public Changeset: number;\r\n public CredentialName: string;\r\n public HistoryChanges: HistoryChangeDetails[];\r\n public HistoryLineChanges: HistoryChangeDetails[];\r\n}\r\n\r\nexport class HistoryChangeDetails extends BaseEntity {\r\n public Action: HistoryEventTypesEnum;\r\n public FieldName: string;\r\n public NewValue: string;\r\n public OldValue: string;\r\n public EntityType: string;\r\n public EntityEntryID: number;\r\n public EntityLineID: number;\r\n public Name: string;\r\n}\r\n\r\nexport class WebAPILoginResponse extends BaseEntity {\r\n public CheckResult: EnumCheckCredentialsResult;\r\n public CheckResultMessage: string;\r\n public SessionID: string;\r\n public CredentialID: number;\r\n public CredentialType: number;\r\n public DisplayUserName: string;\r\n public DisplayUserDescription: string;\r\n public UserInfo: any[] = [];\r\n}\r\n\r\nexport class SystemCredentialInfo extends BaseEntity {\r\n UserName: string;\r\n Type: number;\r\n IsPendingWelcome: boolean;\r\n MFAMethod: EnumMFAMethods;\r\n IsRestrictByIP: boolean;\r\n IsExcludeFromMFA: boolean;\r\n IsLockedOut: boolean;\r\n IsSupportedUserWelcome: boolean;\r\n WebAPIAllowedIPs: WebAPIAllowedIP[];\r\n\r\n DisplayUserName: string;\r\n DisplayUserDescription: string;\r\n Phone: string;\r\n Email: string;\r\n AdditionalInfo1: string;\r\n AdditionalInfo2: string;\r\n AdditionalInfo3: string;\r\n AdditionalInfo4: string;\r\n AdditionalInfo5: string;\r\n IsActive: boolean;\r\n LastUseDate: Date;\r\n}\r\n\r\nexport class AdditionalInfoMetadata {\r\n Caption: string;\r\n}\r\n\r\nexport class CredentialsCheckerMetadata extends BaseEntity {\r\n AdditionalInfo1: AdditionalInfoMetadata;\r\n AdditionalInfo2: AdditionalInfoMetadata;\r\n AdditionalInfo3: AdditionalInfoMetadata;\r\n AdditionalInfo4: AdditionalInfoMetadata;\r\n AdditionalInfo5: AdditionalInfoMetadata;\r\n}\r\n\r\nexport class CreateCredentialsParams extends BaseEntity {\r\n public DeliveryOption: number;\r\n public UserCreationOption: number;\r\n public Language: string;\r\n public CredentialsForCreation: CredentialExternalInfo[];\r\n}\r\n\r\nexport class SystemCredentialParams extends BaseEntity {\r\n public CredentialType: number;\r\n public CredentialID: number;\r\n public IsActive: boolean;\r\n public IsPendingWelcome: boolean;\r\n public IsLockedOut: boolean;\r\n public CredentialFilter: number;\r\n}\r\n\r\nexport class DataEditorView extends BaseEntity {\r\n public ObjectName: string;\r\n public DViewsDuration: number;\r\n public XViewsDuration: number;\r\n public DViewsDBName: string;\r\n public XViewsBName: string;\r\n public IsValid: boolean;\r\n public IsOverriden: boolean;\r\n public Error?: string;\r\n}\r\n\r\nexport class RemoteRequest extends BaseEntity {\r\n SessionID: number;\r\n DateTime: Date;\r\n Duration: number;\r\n Controller: string;\r\n Action: string;\r\n ModuleName: string;\r\n Method: string;\r\n QueryString: string;\r\n Body: string;\r\n Response: string;\r\n StatusCode: number;\r\n}\r\n\r\nexport class RemoteRequestListParams extends BaseEntity {\r\n Controllers?: string[];\r\n Actions?: string[];\r\n Methods?: string[];\r\n Statuses?: number[];\r\n public DateFrom: Date;\r\n public DateTo: Date;\r\n}\r\n\r\nexport class Log extends BaseEntity {\r\n Level: EnumLogLevel;\r\n Title: string;\r\n Body: string;\r\n RelatedObjectType: string;\r\n RelatedObjectID: string;\r\n}\r\n\r\nexport class LogParams extends BaseEntity {\r\n RelatedObjectType: string;\r\n RelatedObjectID: number;\r\n Level: EnumLogLevel;\r\n}","import { RC, ResourcesService } from '@core/framework/resources.service';\r\nimport { EnumGridModes } from '@core/framework/sysenums.enum';\r\nimport { UiService } from '@core/framework/ui.service';\r\nimport { Utils } from '@core/helpers/Utils';\r\nimport { AppInjector } from '@core/injector/injector.module';\r\nimport { AppConfigService } from '@m4u-angular/configuration/app.config.service';\r\nimport { FrameworkService } from '@m4u-angular/core/framework/framework.service';\r\nimport { DxDataGridComponent } from 'devextreme-angular';\r\nimport { exportDataGrid } from 'devextreme/excel_exporter';\r\nimport { exportDataGrid as exportToPdf } from 'devextreme/pdf_exporter';\r\nimport { Format, formatDate, formatNumber, parseNumber } from 'devextreme/localization';\r\nimport { Column } from 'devextreme/ui/data_grid';\r\nimport { Workbook } from 'exceljs';\r\nimport saveAs from 'file-saver';\r\nimport { Subscription } from 'rxjs';\r\nimport { BaseComponent } from '../component/BaseComponent';\r\nimport { BaseEntity, BaseState } from '../entities/BaseEntities';\r\nimport { IBaseComponent, IBaseModuleComponent } from './../component/IBaseComponent';\r\nimport { jsPDF } from 'jspdf';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport DataSource from 'devextreme/data/data_source';\r\n\r\nexport class GridCellEditHandlers {\r\n constructor(\r\n public BeforeEdit?: string,\r\n public AfterEdit?: string,\r\n public AfterEditPromise?: string,\r\n public AfterEditAsync?: string\r\n ) {}\r\n}\r\n\r\nexport class GridCellEditParams {\r\n constructor(\r\n public value: any,\r\n public rowData: any,\r\n public changes: any,\r\n public rowIndex: number\r\n ) {}\r\n}\r\n\r\nexport class GridCellEditAsyncParams {\r\n constructor(public value: any, public rowData: any, public rowIndex: number) {}\r\n}\r\n\r\nexport class GridCellOptionsParams {\r\n constructor(public value: any, public rowData: any, public rowIndex: number) {}\r\n}\r\n\r\nexport class GridCellOptionHandlers {\r\n public that?: any;\r\n constructor(public QueryEditCell?: string, public QueryShowCell?: string) {}\r\n}\r\n\r\nclass DefferedPromise extends Promise {\r\n constructor() {\r\n let resolve, reject;\r\n super((_resolve, _reject) => {\r\n resolve = _resolve;\r\n reject = _reject;\r\n });\r\n this.Resolve = resolve;\r\n this.Reject = reject;\r\n }\r\n Resolve: (value?: T | PromiseLike) => void;\r\n Reject: (reason?: any) => void;\r\n}\r\n\r\nexport class GridExtender {\r\n public get gridAny(): any {\r\n return this.grid;\r\n }\r\n public get CurrentRowIndex(): number {\r\n return this.currentRowIndex;\r\n }\r\n\r\n public constructor(\r\n grid: DxDataGridComponent,\r\n mode: EnumGridModes,\r\n allowCustomization: boolean,\r\n allowAdvancedFilters: boolean,\r\n component: IBaseComponent,\r\n entityTypeName: string,\r\n keepSorting: boolean\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.KeepSorting = keepSorting;\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 KeepSorting: boolean; \r\n private BeforePrintDataGridOptions: any;\r\n private BeforePrintRefs: {\r\n body: any[];\r\n gridParent: HTMLElement | null;\r\n gridEl: HTMLElement | null;\r\n } = {\r\n body: [],\r\n gridEl: null,\r\n gridParent: null\r\n };\r\n\r\n private Component: IBaseComponent;\r\n private isValid: DefferedPromise = new DefferedPromise();\r\n public IsAutoResizingEnabled = true; // auto grid resizing\r\n public EntityTypeName: string;\r\n\r\n // Link main objects\r\n public grid: DxDataGridComponent;\r\n\r\n private _resourceService = AppInjector.get(ResourcesService);\r\n private _appConfigService = AppInjector.get(AppConfigService);\r\n\r\n private _entityTypeName: string;\r\n\r\n // InitCompactMode(compactModeValue: boolean) {\r\n // const compactModeClass = 'grid-compact-mode';\r\n // const gridClassList = this.grid.instance.element().classList;\r\n // compactModeValue ? gridClassList.add(compactModeClass) : gridClassList.remove(compactModeClass);\r\n // this.grid.instance.repaint();\r\n // }\r\n\r\n // Shortcut for grid editing\r\n public Get(ColumnName: string, RowIndex: number): any {\r\n if (this.IsColumnExists(ColumnName) && this.IsRowExists(RowIndex)) {\r\n return this.grid.instance.cellValue(RowIndex, ColumnName);\r\n }\r\n }\r\n\r\n // Shortcut for grid editing\r\n public Set(ColumnName: string, RowIndex: number, oValue: any) {\r\n if (this.IsColumnExists(ColumnName) && this.IsRowExists(RowIndex)) {\r\n this.grid.instance.cellValue(RowIndex, ColumnName, oValue);\r\n }\r\n }\r\n\r\n public AcceptChanges() {\r\n this.grid.instance.saveEditData();\r\n }\r\n\r\n public HasEditData() {\r\n return this.grid.instance.hasEditData();\r\n }\r\n\r\n public CancelEditData() {\r\n this.grid.instance.cancelEditData();\r\n }\r\n\r\n public SetGridFilter(ColumnName: string, ComparisonOperator: string, oValue: any) {\r\n this.grid.instance.filter([ColumnName, ComparisonOperator, oValue]);\r\n }\r\n\r\n public Refresh() {\r\n return this.grid.instance.refresh();\r\n }\r\n\r\n public GetSelectedRowKeys(): number[] {\r\n return this.grid.instance.getSelectedRowKeys();\r\n }\r\n\r\n // Shortcut for grid editing with changes object\r\n // Provides safe column checking\r\n // Returns data considering changes that were made but not saved yet\r\n public GetData(ColumnName: string, e: GridCellEditParams | any): any {\r\n if (this.IsColumnExists(ColumnName)) {\r\n if (e instanceof GridCellEditParams) {\r\n return e.changes[ColumnName] !== undefined\r\n ? e.changes[ColumnName]\r\n : e.rowData[ColumnName];\r\n } else {\r\n return e[ColumnName];\r\n }\r\n }\r\n }\r\n\r\n // Shortcut for grid editing with changes object\r\n // Provides safe column checking\r\n // Returns previous data for this column\r\n public GetPrevData(ColumnName: string, e: GridCellEditParams | GridCellEditAsyncParams): any {\r\n if (this.IsColumnExists(ColumnName)) {\r\n return e.rowData[ColumnName];\r\n }\r\n }\r\n\r\n // Shortcut for grid editing with rowData object\r\n // Provides safe column checking\r\n public SetData(ColumnName: string, oValue: any, e: GridCellEditParams | any) {\r\n if (this.IsColumnExists(ColumnName)) {\r\n if (e instanceof GridCellEditParams) {\r\n e.changes[ColumnName] = oValue;\r\n } else {\r\n e[ColumnName] = oValue;\r\n }\r\n }\r\n }\r\n\r\n // Shortcut for grid editing\r\n public GotoCell(ColumnName: string, RowIndex: number): any {\r\n if (this.IsColumnExists(ColumnName) && this.IsRowExists(RowIndex)) {\r\n return this.grid.instance.editCell(RowIndex, ColumnName);\r\n }\r\n }\r\n\r\n // Check if column exists\r\n public IsColumnExists(ColumnName: string): any {\r\n if (this.GetColumn(ColumnName) === undefined) {\r\n throw new Error(`Column ${ColumnName} does not exist`);\r\n }\r\n return true;\r\n }\r\n\r\n // Return column by name\r\n public GetColumn(ColumnName: string): any {\r\n return this.grid.columns.find((x: any) => x.dataField === ColumnName);\r\n }\r\n\r\n public SetColumnVisibility(ColumnName: string, visible: boolean): void {\r\n this.grid.instance.columnOption(ColumnName, 'visible', visible);\r\n }\r\n\r\n // Check if row exists\r\n public IsRowExists(RowIndex: number): any {\r\n const iCount: number = this.GetRowCount();\r\n if (RowIndex < 0 || (RowIndex > iCount && iCount !== -1)) {\r\n throw new Error(`Row ${RowIndex} does not exist`);\r\n }\r\n return true;\r\n }\r\n\r\n public GetRowCount(): number {\r\n const iCount: number = this.grid.instance.totalCount();\r\n return iCount === -1 ? this.grid.instance.getVisibleRows().length : iCount;\r\n }\r\n\r\n private IsRowsExists() {\r\n return (\r\n this.grid.instance.totalCount() > 0 || this.grid.instance.getVisibleRows().length > 0\r\n );\r\n }\r\n\r\n public async ExportExcel() {\r\n const framework = AppInjector.get(FrameworkService);\r\n const formats = [\r\n framework.CompanyInfo.NumberPrice,\r\n framework.CompanyInfo.NumberSum,\r\n framework.CompanyInfo.NumberRate,\r\n framework.CompanyInfo.NumberPercent\r\n ];\r\n const exportFormat = 'xlsx';\r\n const gridExport = (this.grid.export as any) ?? {};\r\n const { customizeExcelCell, onAfterExporting } = gridExport;\r\n\r\n this.grid.instance.beginUpdate();\r\n this.grid.instance.option('loadPanel.enabled', false);\r\n this.grid.instance.endUpdate();\r\n\r\n this.grid.instance.beginUpdate();\r\n // Trigger native export event\r\n this.grid.onExporting.emit({\r\n component: this.grid.instance,\r\n element: this.grid.instance.element(),\r\n format: exportFormat,\r\n selectedRowsOnly: false\r\n });\r\n\r\n setTimeout(async () => {\r\n const workbook = new Workbook();\r\n const worksheet = workbook.addWorksheet('Main sheet');\r\n\r\n function parseNumberValue(v: unknown, format?: Format) {\r\n if (format && typeof v === 'string') {\r\n return parseNumber(v, format);\r\n }\r\n\r\n return v;\r\n }\r\n\r\n await exportDataGrid({\r\n component: this.grid.instance,\r\n worksheet: worksheet,\r\n ...this.grid.export,\r\n customizeCell: options => {\r\n const { gridCell, excelCell } = options;\r\n const { value, column, rowType } = gridCell;\r\n const { dataType } = column;\r\n\r\n const isGroupRow = rowType === 'group';\r\n const isDataRow = rowType === 'data';\r\n const isTotalRow = rowType === 'totalFooter';\r\n\r\n if (dataType === 'number' && isGroupRow) {\r\n excelCell.value = parseNumberValue(excelCell.value, column.format);\r\n }\r\n\r\n if (dataType === 'string' && isGroupRow) {\r\n if (typeof value === 'string') {\r\n const [, caption] = value.split(';');\r\n excelCell.value = caption ?? value;\r\n }\r\n }\r\n\r\n if (isDataRow && dataType === 'date' && column.format) {\r\n excelCell.value = formatDate(value, column.format);\r\n }\r\n\r\n if (isDataRow || isTotalRow || isGroupRow) {\r\n if (typeof column.format === 'string') {\r\n excelCell.numFmt = column.format;\r\n\r\n // TODO: need to keep number type as number. Aligment for number is right.\r\n if (formats.includes(column.format)) {\r\n excelCell.alignment = 'right';\r\n }\r\n }\r\n }\r\n\r\n if (customizeExcelCell) {\r\n customizeExcelCell(options);\r\n }\r\n }\r\n });\r\n\r\n const buffer = await workbook.xlsx.writeBuffer();\r\n if (onAfterExporting) {\r\n onAfterExporting({ component: this.grid.instance });\r\n }\r\n\r\n this.grid.instance.endUpdate();\r\n\r\n this.grid.instance.beginUpdate();\r\n this.grid.instance.option('loadPanel.enabled', 'auto');\r\n this.grid.instance.endUpdate();\r\n\r\n saveAs(\r\n new Blob([buffer], { type: 'application/octet-stream' }),\r\n `${this.grid.export?.texts?.exportTo}.${exportFormat}`\r\n );\r\n }, 0);\r\n }\r\n\r\n // Handler to remove current row\r\n RemoveCurrentRow(e) {\r\n if (!this.IsRowDeletable(e)) {\r\n return;\r\n }\r\n\r\n this.grid.instance.deleteRow(e.rowIndex);\r\n }\r\n\r\n // Handler for new row creation\r\n CreateNewRow() {\r\n if (!this.IsNewRowCreatable()) {\r\n return;\r\n }\r\n\r\n if (!this.grid.instance.hasEditData()) {\r\n this.grid.instance.addRow();\r\n } else {\r\n this.grid.instance\r\n .saveEditData()\r\n .then(() => this.grid.instance.addRow())\r\n .catch(() => {\r\n AppInjector.get(UiService).InfoMessage(RC('msgFinishEditing'));\r\n });\r\n }\r\n this.grid.instance.focus(this.grid.instance.getCellElement(0, 0));\r\n }\r\n\r\n // Bind context this to the event. It cannot be done other way\r\n private BindHandler(that: any, ColumnName: string, sHandlerName: string) {\r\n if (sHandlerName === undefined) {\r\n return;\r\n }\r\n\r\n if (that[sHandlerName] === undefined) {\r\n throw new Error(`Invalid handler was specified for ${ColumnName}`);\r\n }\r\n that[sHandlerName] = that[sHandlerName].bind(that);\r\n }\r\n\r\n /*\r\n * Attach handler event:\r\n * We have 4 events to choose from:\r\n * 1 - Before event - can be used for custom validation and such (not sure if needed yet). Can return false to prevent default operation\r\n * 2 - After event - can be used to update e.changes (by G.EditSet) directly on the row. Can return false to prevent default operation\r\n * 3 - AfterPromise event - can be used to return a promise that devextreme grid built-in mechanism will resolve\r\n * the promise can still set values using e.changes (throug G.EditSet) directly on the row\r\n * 4 - AfterAsync event - this one is fired after grid has finished processing, and value has been saved to the underlying row\r\n * this can be used for operations that relly on the underlying row value for their processing\r\n * This handler can not longer access the e.changes, but it has access to the rowIndex and can modify rows directly\r\n * as any other operation using G.Set\r\n */\r\n public AttachColumnEditHandler(\r\n that: BaseComponent,\r\n ColumnName: string,\r\n Handlers: GridCellEditHandlers\r\n ) {\r\n // Make sure column and handler both exists\r\n if (!this.IsColumnExists(ColumnName)) {\r\n return;\r\n }\r\n\r\n this.MapEventsEdit[ColumnName] = Handlers;\r\n\r\n // Bind handlers\r\n this.BindHandler(that, ColumnName, Handlers.BeforeEdit);\r\n this.BindHandler(that, ColumnName, Handlers.AfterEdit);\r\n this.BindHandler(that, ColumnName, Handlers.AfterEditPromise);\r\n this.BindHandler(that, ColumnName, Handlers.AfterEditAsync);\r\n\r\n // Bind the event to the column\r\n const column = this.GetColumn(ColumnName);\r\n column.setCellValue = this.ColumnEditHandler.bind(this, that, ColumnName, undefined);\r\n }\r\n\r\n /*\r\n * Attach event handler:\r\n * We have 2 events to choose from:\r\n * 1 - QueryEditCell - handler should return false if cell should not be editable\r\n * 2 - QueryPaintCell - handler should return false if cell should not be visible\r\n */\r\n public AttachColumnOptionsHandler(\r\n that: BaseComponent,\r\n ColumnName: string,\r\n Handlers: GridCellOptionHandlers\r\n ) {\r\n // Make sure column and handler both exists\r\n if (!this.IsColumnExists(ColumnName)) {\r\n return;\r\n }\r\n\r\n this.MapEventsOptions[ColumnName] = Handlers;\r\n\r\n // Bind handlers\r\n Handlers.that = that;\r\n this.BindHandler(that, ColumnName, Handlers.QueryEditCell);\r\n this.BindHandler(that, ColumnName, Handlers.QueryShowCell);\r\n\r\n // Bind form.customizeItem function to allow hiding items in form\r\n // Perform the binding only once\r\n if (this.grid.editing.form === undefined) {\r\n this.grid.editing.form = {};\r\n }\r\n\r\n if (this.grid.editing.form.customizeItem === undefined) {\r\n this.grid.editing.form.customizeItem = this.ColumnCustomizeItemHandler.bind(this, that);\r\n }\r\n }\r\n\r\n // Hide items in form edit mode\r\n private ColumnCustomizeItemHandler(that, item) {\r\n // See that we have a handler\r\n const handlers: GridCellOptionHandlers = this.MapEventsOptions[item.dataField];\r\n if (handlers === undefined || handlers.QueryShowCell === undefined) {\r\n return;\r\n }\r\n\r\n // Execute handler\r\n const row = this.grid.instance.getVisibleRows()[this.currentRowIndex].data;\r\n const args = new GridCellOptionsParams(\r\n this.GetData(item.dataField, row),\r\n row,\r\n this.currentRowIndex\r\n );\r\n const bPaint = handlers.that[handlers.QueryShowCell](args);\r\n\r\n // Set value\r\n item.visible = bPaint;\r\n }\r\n\r\n // Raise dependant events when newData is set by the handler\r\n // This is done for consistancy - the same event handling mechanism can handle also value changes as a result of other event handlers,\r\n // just like it happens when using cellValue programatically from Async handler, or just outside code\r\n // This procedure determines the changes made based on the previous version of newData (originalDate) and calls the matching handlers\r\n // for each column that such change took place\r\n private RaiseDependantEvents(that, ColumnName, originalData, newData, currentRowData) {\r\n // Get list of values that were updated during this handler - compare new vs original\r\n const columnsUpdated: string[] = [];\r\n for (const key in newData) {\r\n if (\r\n key !== ColumnName &&\r\n (originalData === undefined || newData[key] !== originalData[key])\r\n ) {\r\n columnsUpdated.push(key);\r\n }\r\n }\r\n\r\n // Preserve state at this event\r\n originalData = Utils.CloneObject(newData);\r\n\r\n // Process only those that were updated\r\n for (const column of columnsUpdated) {\r\n // See if we have handlers for the updated column\r\n const handlers: GridCellEditHandlers = this.MapEventsEdit[column];\r\n if (handlers === undefined) {\r\n continue;\r\n }\r\n\r\n // Raise event\r\n this.ColumnEditHandler(\r\n that,\r\n column,\r\n originalData,\r\n newData,\r\n newData[column],\r\n currentRowData\r\n );\r\n }\r\n }\r\n\r\n private ColumnEditHandler(that, ColumnName, originalData, newData, value, currentRowData) {\r\n\r\n // Ignore initial settings\r\n // When user resets a test field, data is set to \"\"\r\n if (value === undefined) {\r\n return;\r\n }\r\n\r\n console.log(`Editing cell: ${ColumnName} new value: ${value}`);\r\n // if (ColumnName == 'ItemDescription') debugger;\r\n\r\n // Prepare\r\n const handlers: GridCellEditHandlers = this.MapEventsEdit[ColumnName];\r\n const args: GridCellEditParams = new GridCellEditParams(\r\n value,\r\n currentRowData,\r\n newData,\r\n undefined\r\n );\r\n\r\n // Execute the before event. If it returns false, exit\r\n if (handlers === undefined) {\r\n return;\r\n }\r\n\r\n if (handlers.BeforeEdit !== undefined) {\r\n const handlerBefore = that[handlers.BeforeEdit];\r\n if (!handlerBefore(args)) {\r\n return;\r\n }\r\n }\r\n\r\n // Set value just on the column that was really edited\r\n // (basically execute the default behaviour)\r\n if (originalData === undefined) {\r\n this.grid.instance.columnOption(ColumnName).defaultSetCellValue(newData, value);\r\n }\r\n\r\n // Execute after event.\r\n if (handlers.AfterEdit !== undefined) {\r\n const handlerAfter = that[handlers.AfterEdit];\r\n handlerAfter(args);\r\n this.RaiseDependantEvents(that, ColumnName, originalData, newData, currentRowData);\r\n }\r\n\r\n // Execute the after event asynchronically\r\n // This is to be used for cases when we need the editable value to be already set in the grid\r\n // In such case, any modifications that need to be done, should be done only using G.Set and not through changes, since\r\n // changes was already updated at this point.\r\n if (handlers.AfterEditAsync !== undefined) {\r\n const argsAsync = new GridCellEditAsyncParams(\r\n args.value,\r\n args.rowData,\r\n this.currentRowIndex\r\n );\r\n if (argsAsync.rowIndex !== -1) {\r\n const handlerAsync = that[handlers.AfterEditAsync];\r\n setTimeout(() => handlerAsync(argsAsync), 100);\r\n }\r\n }\r\n\r\n // Execute the after event.\r\n // Handler must call resolve() inside\r\n // It is here after the async event on purpose -\r\n // since if user has specified both the regular and async event, the regular event must return a promise\r\n // At any case, the order of the regular and async events is random and should not be relied upon\r\n if (handlers.AfterEditPromise !== undefined) {\r\n const handlerPromise = that[handlers.AfterEditPromise];\r\n return new Promise(resolve => {\r\n const finalize = () => {\r\n this.RaiseDependantEvents(\r\n that,\r\n ColumnName,\r\n originalData,\r\n newData,\r\n currentRowData\r\n );\r\n if (originalData === undefined) {\r\n console.log(`Saving cell: ${ColumnName}`, newData);\r\n }\r\n resolve(true);\r\n };\r\n handlerPromise(args, finalize.bind(this));\r\n });\r\n }\r\n\r\n if (originalData === undefined) {\r\n console.log(`Saving cell: ${ColumnName}`, newData);\r\n }\r\n }\r\n\r\n // Returns whether new row can be created now\r\n public IsNewRowCreatable(): boolean {\r\n const method: any = this.grid.editing.allowAdding;\r\n let bResult;\r\n if (method instanceof Function) {\r\n bResult = method();\r\n } else {\r\n bResult = method;\r\n }\r\n return bResult;\r\n }\r\n\r\n // Returns whether row can be edited now\r\n public IsRowEditable(row: any): boolean {\r\n return this.IsRowEditableOrUpdatable(row, this.grid.editing.allowUpdating);\r\n }\r\n\r\n // Returns whether row can be deleted now\r\n public IsRowDeletable(row: any): boolean {\r\n return this.IsRowEditableOrUpdatable(row, this.grid.editing.allowDeleting);\r\n }\r\n\r\n // Check if the operation is allowed for the row\r\n // Executes the bound function\r\n private IsRowEditableOrUpdatable(e: any, method: any): boolean {\r\n let bResult: boolean;\r\n\r\n const args = {\r\n component: this.grid.instance,\r\n row: {\r\n rowType: e.rowType,\r\n data: e.data\r\n }\r\n };\r\n if (method instanceof Function) {\r\n bResult = method(args);\r\n } else {\r\n bResult = method;\r\n }\r\n return bResult;\r\n }\r\n\r\n // Enable editing on click\r\n private OnRowClick(e) {\r\n if (!this.IsRowEditable(e)) {\r\n return;\r\n }\r\n\r\n if (this.grid.instance.hasEditData()) {\r\n this.grid.instance.cancelEditData();\r\n }\r\n\r\n this.grid.instance.editRow(e.rowIndex);\r\n }\r\n\r\n // Preserve current row\r\n // getRowIndexByKey will return -1 if it's a new row. For cellValue purposes, we can use 0 for that\r\n private OnEditingStart(e) {\r\n this.currentRowIndex = e.component.getRowIndexByKey(e.key);\r\n if (this.currentRowIndex === -1) {\r\n this.currentRowIndex = 0;\r\n }\r\n }\r\n\r\n // When adding new row, set the row index\r\n private OnInitNewRow(e) {\r\n this.currentRowIndex = 0;\r\n }\r\n\r\n // Add readonly class to rows that cannot be edited\r\n private OnRowPrepared(e) {\r\n if (e.rowType !== 'data' && e.rowType !== 'detail') {\r\n return;\r\n }\r\n\r\n if (!this.IsRowEditable(e)) {\r\n e.rowElement.classList.add('dx-state-readonly');\r\n }\r\n }\r\n\r\n // Various adjustments to editor\r\n private OnEditorPreparing(e) {\r\n if (e.parentType !== 'dataRow') {\r\n return;\r\n }\r\n\r\n // See if we have handlers for the updated column\r\n const handlers: GridCellOptionHandlers = this.MapEventsOptions[e.dataField];\r\n if (handlers === undefined) {\r\n return;\r\n }\r\n\r\n // Execute handlers\r\n // If painting not allowed, editing is disabled as well\r\n const args = new GridCellOptionsParams(\r\n this.GetData(e.dataField, e.row.data),\r\n e.row.data,\r\n this.currentRowIndex\r\n );\r\n let bAllowEdit =\r\n handlers.QueryEditCell !== undefined\r\n ? handlers.that[handlers.QueryEditCell](args)\r\n : true;\r\n const bPaint =\r\n handlers.QueryShowCell !== undefined\r\n ? handlers.that[handlers.QueryShowCell](args)\r\n : true;\r\n if (!bPaint) {\r\n bAllowEdit = false;\r\n }\r\n if (bAllowEdit) {\r\n return;\r\n }\r\n\r\n // If both painting and editing is now allowed, and we're in cell mode, don't even create the editor\r\n // Otherwise, set it to readonly\r\n // This way, cells that are not pained will not show editor even when focusing on them\r\n if (this.grid.editing.mode === 'cell' && !bPaint) {\r\n e.cancel = true;\r\n } else {\r\n e.editorOptions.readOnly = true;\r\n e.editorOptions.tabIndex = -1;\r\n }\r\n }\r\n\r\n // Make cell as readonly and hide\r\n private OnCellPrepared(e) {\r\n // Handle rows only\r\n if (e.rowType !== 'data') {\r\n return;\r\n }\r\n\r\n // See if we have handlers for the updated column\r\n const handlers: GridCellOptionHandlers = this.MapEventsOptions[e.column.dataField];\r\n if (handlers === undefined) {\r\n return;\r\n }\r\n\r\n // Execute handler, and mark as readonly\r\n if (handlers.QueryEditCell !== undefined) {\r\n const args = new GridCellOptionsParams(\r\n this.GetData(e.column.dataField, e.row.data),\r\n e.row.data,\r\n e.rowIndex\r\n );\r\n const bAllowEdit = handlers.that[handlers.QueryEditCell](args);\r\n if (!bAllowEdit) {\r\n e.cellElement.classList.add('dx-state-readonly');\r\n }\r\n }\r\n\r\n // Execute handler, and mark as invisible\r\n if (handlers.QueryShowCell !== undefined) {\r\n const args = new GridCellOptionsParams(\r\n this.GetData(e.column.dataField, e.row.data),\r\n e.row.data,\r\n e.rowIndex\r\n );\r\n const bAllowEdit = handlers.that[handlers.QueryShowCell](args);\r\n if (!bAllowEdit) {\r\n e.cellElement.classList.add('m4u-hide-text');\r\n }\r\n }\r\n }\r\n\r\n // See if need to skip column\r\n private OnFocusCellChanging(e) {\r\n // See if moving forward or backward\r\n const bForward: boolean =\r\n e.newColumnIndex > e.prevColumnIndex || e.newRowIndex > e.prevRowIndex;\r\n\r\n // eslint-disable-next-line no-constant-condition\r\n while (true) {\r\n // See if this is a special column. Skip them\r\n const bSpecial = e.columns[e.newColumnIndex].type !== undefined ? true : false;\r\n if (!bSpecial) {\r\n // Get column focus is moving to\r\n const sColumnName: string = e.columns[e.newColumnIndex].dataField;\r\n\r\n // See if we have handlers for this column\r\n const handlers: GridCellOptionHandlers = this.MapEventsOptions[sColumnName];\r\n if (handlers === undefined) {\r\n return;\r\n }\r\n\r\n // Execute handler. If editing is allowed, we can break execution\r\n const row = e.rows[e.newRowIndex].data;\r\n const args = new GridCellOptionsParams(\r\n this.GetData(sColumnName, row),\r\n row,\r\n e.newRowIndex\r\n );\r\n const bAllowEdit: boolean = handlers.that[handlers.QueryEditCell](args);\r\n if (bAllowEdit) {\r\n return;\r\n }\r\n }\r\n\r\n // When moving forward\r\n if (bForward) {\r\n // When not last column - move to next\r\n if (e.newColumnIndex < e.columns.length - 1) {\r\n e.newColumnIndex += 1;\r\n } else {\r\n e.newColumnIndex = 0;\r\n e.newRowIndex += 1;\r\n }\r\n } else {\r\n // When not first column - move to prev\r\n if (e.newColumnIndex > 0) {\r\n e.newColumnIndex -= 1;\r\n } else {\r\n e.newColumnIndex = e.columns.length - 1;\r\n e.newRowIndex -= 1;\r\n }\r\n }\r\n }\r\n }\r\n // !!!THIS IS WORKING BECAUSE OF PROMISE VALUE IS IMMUTABLE AFTER RESOLVE/REJECT\r\n // validation sequence is:\r\n // create new deferred for IsValid\r\n // trigger grid's saveEditData\r\n // if grid in EDIT mode\r\n // then OnRowValidating will be triggered where IsValid will be resolved\r\n // else saveEditData().then will be called and IsValid will be resolved;\r\n\r\n public ValidateGrid(): Promise {\r\n this.isValid = new DefferedPromise();\r\n this.grid.instance.saveEditData().then(() => this.isValid.Resolve(true));\r\n return this.isValid;\r\n }\r\n\r\n private OnRowValidating(e) {\r\n if (e.status === 'pending') {\r\n e.promise.then(result => this.isValid.Resolve(result.isValid));\r\n } else {\r\n this.isValid.Resolve(e.isValid);\r\n }\r\n }\r\n\r\n // Sync column visibility and order in form with the one set by the user\r\n private OnOptionChanged(e) {\r\n if (e.name === 'columns') {\r\n this.SetColumnsCaption();\r\n }\r\n\r\n if (e.name === 'columns' && (e.fullName.endsWith('visible') || e.fullName.endsWith('visibleIndex'))) {\r\n this.grid.instance.beginUpdate();\r\n for (let i = 0; i < this.grid.instance.columnCount(); i++) {\r\n const colAny = this.grid.instance.columnOption(i);\r\n\r\n this.grid.instance.columnOption(i, {\r\n formItem: {\r\n visible: colAny.visible,\r\n visibleIndex: colAny.visibleIndex\r\n }\r\n });\r\n }\r\n this.grid.instance.endUpdate();\r\n }\r\n }\r\n\r\n // Initialization entry point\r\n public InitGrid() {\r\n this.InitGridGeneral();\r\n switch (this.Mode) {\r\n case EnumGridModes.Editable:\r\n this.InitGridEditable();\r\n break;\r\n case EnumGridModes.Report:\r\n this.InitGridReport();\r\n break;\r\n case EnumGridModes.Lines:\r\n this.InitGridLines();\r\n break;\r\n }\r\n }\r\n\r\n // Generic stuff for all grids\r\n private InitGridGeneral() {\r\n this.grid.allowColumnReordering = this.AllowCustomization;\r\n this.grid.allowColumnResizing = this.AllowCustomization;\r\n\r\n const stateStoring = this.grid.stateStoring;\r\n this.grid.stateStoring = {\r\n storageKey:\r\n stateStoring?.storageKey || `${this.Component.ComponentStateName}.Grid.State`,\r\n enabled: this.AllowCustomization,\r\n keepSorting: this.KeepSorting \r\n } as any;\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 (this.grid.instance as any).KeepSorting = this.KeepSorting;\r\n\r\n this.SetColumnsCaption();\r\n })\r\n );\r\n }\r\n\r\n private SetColumnsCaption() {\r\n const gridColumns = this.grid.instance.option('columns') || [];\r\n gridColumns.forEach((column: Column) => this.SetColumnCaption(column));\r\n }\r\n\r\n private SetColumnCaption(column: Column) {\r\n if (Utils.IsEmpty(this.CurrentEntityTypeName) || Utils.IsEmpty(column.dataField) || !Utils.IsEmpty(column.caption)) {\r\n return;\r\n }\r\n\r\n const resourceName = `BL.${this.CurrentEntityTypeName}.${column.dataField}`;\r\n const caption = this._resourceService.RC(resourceName, (this.Component as any as IBaseModuleComponent).ModuleName);\r\n this.grid.instance.columnOption(column.dataField, 'caption', caption);\r\n }\r\n\r\n public Print(): void {\r\n const screen = AppInjector.get(ScreenService);\r\n\r\n const doc = new jsPDF({\r\n orientation: 'l',\r\n putOnlyUsedFonts: true\r\n });\r\n\r\n doc.addFont('assets/fonts/Assistant-Regular.ttf', 'Assistant', 'normal');\r\n doc.addFont('assets/fonts/Assistant-Light.ttf', 'Assistant-Light', 'normal');\r\n doc.addFont('assets/fonts/Assistant-Medium.ttf', 'Assistant-Medium', 'normal');\r\n doc.addFont('assets/fonts/Assistant-Bold.ttf', 'Assistant', 'bold');\r\n doc.setTextColor('#294D92');\r\n\r\n const [title, printTitle, filterDescription] = this.GetPrintHeaderInfo();\r\n\r\n const arrFilterDescription = filterDescription.split('\\n');\r\n let yPosition = 16;\r\n if (title) {\r\n doc.setFontSize(28);\r\n doc.setFont('Assistant-Medium');\r\n const titleWidth = this.GetTextWidth(title, 28, 500);\r\n const titleXPosition = screen.IsRTL()\r\n ? doc.internal.pageSize.width - 14 - titleWidth / doc.internal.scaleFactor\r\n : 14;\r\n doc.text(this.ReverseHebrewText(title), titleXPosition, yPosition);\r\n yPosition += 8;\r\n }\r\n\r\n doc.setFontSize(14);\r\n doc.setFont('Assistant-Light');\r\n if (printTitle) {\r\n const printTitleWidth = this.GetTextWidth(printTitle, 14, 300);\r\n const printTitleXPosition = screen.IsRTL()\r\n ? doc.internal.pageSize.width - 14 - printTitleWidth / doc.internal.scaleFactor\r\n : 14;\r\n doc.text(this.ReverseHebrewText(printTitle), printTitleXPosition, yPosition);\r\n yPosition += 8;\r\n }\r\n\r\n if (arrFilterDescription) {\r\n for (let i = 0; i < arrFilterDescription.length; i++) {\r\n if (Utils.NZ(arrFilterDescription[i]) === '') {\r\n continue;\r\n }\r\n\r\n const filterDescriptionWidth = this.GetTextWidth(arrFilterDescription[i], 14, 300);\r\n const filterDescriptionXPosition = screen.IsRTL()\r\n ? doc.internal.pageSize.width - 14 - filterDescriptionWidth / doc.internal.scaleFactor\r\n : 14;\r\n doc.text(this.ReverseHebrewText(arrFilterDescription[i]), filterDescriptionXPosition, yPosition);\r\n if (i < arrFilterDescription.length - 1) {\r\n yPosition += 8;\r\n }\r\n }\r\n }\r\n\r\n const printLogoPath = this.GetPrintLogoPath();\r\n const iconXPosition = screen.IsRTL() ? 14 : doc.internal.pageSize.width - 34;\r\n doc.addImage(printLogoPath, 'jpeg', iconXPosition, 8, 20, 20);\r\n\r\n doc.setFontSize(16);\r\n doc.setFont('Assistant');\r\n exportToPdf({\r\n jsPDFDocument: doc,\r\n component: this.grid.instance,\r\n topLeft: { x: 0, y: yPosition - 4 },\r\n customizeCell: ({ gridCell, pdfCell }) => {\r\n pdfCell.textColor = '#294D92';\r\n pdfCell.borderColor = '#D2DAE8';\r\n pdfCell.borderWidth = 1;\r\n pdfCell.drawLeftBorder = false;\r\n pdfCell.drawRightBorder = false;\r\n if (gridCell.rowType === 'header') {\r\n pdfCell.backgroundColor = '#E5EAF2';\r\n pdfCell.font = { name: 'Assistant', size: 10, style: 'bold' };\r\n }\r\n if (gridCell.rowType === 'group') {\r\n const summaryCellValue =\r\n gridCell.groupSummaryItems &&\r\n gridCell.groupSummaryItems\r\n .map(x => {\r\n const column = gridCell.column as any;\r\n return column && column.parseValue\r\n ? column.parseValue(x.value)\r\n : x.value;\r\n })\r\n .filter(x => x && x !== 0)\r\n .map(x => formatNumber(x, gridCell.column?.format))\r\n .join(';');\r\n const lookupValue =\r\n gridCell.column?.lookup &&\r\n gridCell.column?.lookup.calculateCellValue(gridCell.value);\r\n const complexCellValue =\r\n gridCell.value && gridCell.value.includes && gridCell.value.includes(';')\r\n ? gridCell.value.split(';')[1]\r\n : gridCell.value;\r\n const formattedValue =\r\n gridCell.column?.dataType === 'date'\r\n ? formatDate(complexCellValue, gridCell.column?.format)\r\n : complexCellValue?.toString();\r\n const resultValue = lookupValue || formattedValue;\r\n pdfCell.text =\r\n summaryCellValue && resultValue\r\n ? resultValue\r\n : summaryCellValue || resultValue;\r\n }\r\n if (\r\n !screen.IsRTL() &&\r\n gridCell.rowType === 'data' &&\r\n gridCell.value &&\r\n Utils.ContainsHebrewLetters(gridCell.value)\r\n ) {\r\n pdfCell.text = this.ReverseHebrewText(gridCell.value);\r\n }\r\n const gridExport = this.grid.export as any;\r\n if (gridExport?.customizePdfCell) {\r\n gridExport.customizePdfCell({ gridCell, pdfCell });\r\n }\r\n }\r\n }).then(() => {\r\n window.open(doc.output('bloburl').toString());\r\n });\r\n\r\n return;\r\n }\r\n\r\n private GetPrintHeaderInfo() {\r\n const Page = (this.Component as any).Page;\r\n if (!Page) {\r\n return ['', '', ''];\r\n }\r\n\r\n const title = Page.GetTitle();\r\n const printTitle = Page.OnGetPrintTitle();\r\n const filterDescription = Page.OnGetFilterDescription();\r\n\r\n return [title, printTitle, filterDescription];\r\n }\r\n\r\n private GetTextWidth(text: string, fontSize: number, fontWeight: number) {\r\n const div = document.createElement('div');\r\n div.innerHTML = text;\r\n div.style.fontSize = `${fontSize}px`;\r\n div.style.fontWeight = `${fontWeight}`;\r\n div.style.position = 'absolute';\r\n div.style.height = 'auto';\r\n div.style.width = 'auto';\r\n div.style.whiteSpace = 'nowrap';\r\n div.style.visibility = 'hidden';\r\n const appContainer = document.querySelector('.app-container');\r\n appContainer.appendChild(div);\r\n const textWidth = div.clientWidth + 1;\r\n appContainer.removeChild(div);\r\n return textWidth;\r\n }\r\n\r\n private ReverseHebrewText(text: string) {\r\n return !Utils.ContainsHebrewLetters(text) ? text : text.split('').reverse().join('');\r\n }\r\n\r\n private GetPrintLogoPath(): string {\r\n const appConfig = AppInjector.get(AppConfigService);\r\n\r\n const projectAssetsFolder = `assets/projects/${appConfig.AppConfig.ModuleName.toLowerCase()}`;\r\n const projectPrintLogoPath = `${projectAssetsFolder}/print-logo.png`;\r\n const customProjectPrintLogoPath =\r\n appConfig.M4UConfig.customBuild &&\r\n `${projectAssetsFolder}/print-logo_${appConfig.M4UConfig.customBuild}.png`;\r\n\r\n return customProjectPrintLogoPath && Utils.IsIconExists(customProjectPrintLogoPath)\r\n ? customProjectPrintLogoPath\r\n : Utils.IsIconExists(projectPrintLogoPath)\r\n ? projectPrintLogoPath\r\n : 'assets/icons/icon-96x96.png';\r\n }\r\n\r\n // Initialize report grid\r\n private InitGridReport() {\r\n // Show adaptive row for reports\r\n this.grid.columnHidingEnabled = false;\r\n }\r\n\r\n // Initialize editable grid\r\n private InitGridEditable() {\r\n //Show adaptive row for reports\r\n this.grid.columnHidingEnabled = false;\r\n \r\n //Add delete column that looks normal\r\n this.grid.columns = [\r\n {\r\n type: 'buttons',\r\n width: 32,\r\n allowReordering: false,\r\n allowResizing: false,\r\n buttons: [{ name: 'delete' }]\r\n }\r\n ];\r\n\r\n if (!this.grid.sorting) {\r\n this.grid.sorting = {};\r\n }\r\n this.grid.sorting.mode = 'none';\r\n\r\n if (!this.grid.paging) {\r\n this.grid.paging = {};\r\n }\r\n this.grid.paging.pageSize = 99999;\r\n\r\n // Subscribe to events\r\n this.subscribtions.push(this.grid.onRowClick.subscribe(e => this.OnRowClick(e)));\r\n this.subscribtions.push(this.grid.onEditingStart.subscribe(e => this.OnEditingStart(e)));\r\n this.subscribtions.push(this.grid.onInitNewRow.subscribe(e => this.OnInitNewRow(e)));\r\n this.subscribtions.push(\r\n this.grid.onEditorPreparing.subscribe(e => this.OnEditorPreparing(e))\r\n );\r\n this.subscribtions.push(\r\n this.grid.onFocusedCellChanging.subscribe(e => this.OnFocusCellChanging(e))\r\n );\r\n this.subscribtions.push(this.grid.onCellPrepared.subscribe(e => this.OnCellPrepared(e)));\r\n this.subscribtions.push(this.grid.onOptionChanged.subscribe(e => this.OnOptionChanged(e)));\r\n this.subscribtions.push(this.grid.onRowPrepared.subscribe(e => this.OnRowPrepared(e)));\r\n this.subscribtions.push(this.grid.onRowValidating.subscribe(e => this.OnRowValidating(e)));\r\n }\r\n\r\n private InitGridLines() {\r\n this.InitGridReport();\r\n\r\n // tslint:disable-next-line:no-unused-expression\r\n this.grid &&\r\n this.grid.instance &&\r\n (this.grid.instance as any).option({\r\n 'selection.mode': 'single',\r\n 'selection.deferred': true,\r\n hoverStateEnabled: true\r\n });\r\n }\r\n\r\n // Unsubscribe\r\n public DestroyGrid() {\r\n this.subscribtions.forEach(o => o.unsubscribe());\r\n }\r\n\r\n OnDoubleSizePopup(e, data) {\r\n if (this.grid.editing.mode === 'form') {\r\n return;\r\n }\r\n\r\n const iWidth: number = data.column.visibleWidth * 2;\r\n e.component._popup.option('width', iWidth);\r\n }\r\n\r\n public OnGridClick() {\r\n if (!this.IsRowsExists()) {\r\n this.CreateNewRow();\r\n }\r\n }\r\n\r\n public GetDataLoadOptions(): DataLoadOptions {\r\n const dataSource = this.grid?.dataSource as DataSource;\r\n if (!dataSource?.loadOptions) return;\r\n const gridLoadOptions = dataSource.loadOptions();\r\n gridLoadOptions.filter = this.grid.instance.getCombinedFilter()\r\n const dataLoadOptions = new DataLoadOptions(gridLoadOptions);\r\n return dataLoadOptions;\r\n }\r\n}\r\n","import { Directive, HostListener, Input, OnDestroy, ViewContainerRef } from '@angular/core';\r\nimport { DxDataGridComponent } from 'devextreme-angular';\r\nimport { GridExtender } from './Grid.extender';\r\nimport { EnumGridModes } from '@core/framework/sysenums.enum';\r\nimport { IBaseComponent } from './../component/IBaseComponent';\r\nimport { IGridComponent } from '../component/BaseGridComponent';\r\n\r\n@Directive({ selector: '[configGrid]' })\r\nexport class M4UConfigGridDirective implements OnDestroy {\r\n //Set default options\r\n private grid: DxDataGridComponent;\r\n public get gridAny(): any { return this.grid; }\r\n // @ts-ignore\r\n constructor(private c: DxDataGridComponent) {\r\n this.grid = c;\r\n }\r\n\r\n //Set name (no instance yet), set directly\r\n private _Component: IBaseComponent;\r\n get Component(): IBaseComponent { return this._Component; }\r\n @Input() set Component(value: IBaseComponent) {\r\n this._Component = value;\r\n this.InitExtender();\r\n }\r\n\r\n //Initialize - should be only called once\r\n private _Mode: EnumGridModes;\r\n get Mode(): EnumGridModes { return this._Mode; }\r\n @Input() set Mode(value: EnumGridModes) {\r\n this._Mode = value;\r\n this.InitExtender();\r\n }\r\n\r\n private _AllowCustomization: boolean = false;\r\n get AllowCustomization(): boolean { return this._AllowCustomization; }\r\n @Input() set AllowCustomization(value: boolean) {\r\n this._AllowCustomization = value;\r\n this.InitExtender();\r\n }\r\n\r\n private _KeepSorting: boolean = false;\r\n get KeepSorting(): boolean { return this._KeepSorting; }\r\n @Input() set KeepSorting(value: boolean) {\r\n this._KeepSorting = 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, this.KeepSorting);\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, ShareableEntity } from '@base/classes/BaseClasses';\r\nimport { BaseDataSourceAbstract } from '@base/datalayer/BaseDataSourceAbstract';\r\nimport { Routes } from '@angular/router';\r\nimport { EnumApplicationMode } from '@core/framework/sysenums.enum';\r\nimport { BaseInjectableComponent } from '@m4u-angular/base/component/BaseInjectableComponent';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\n//Injection token for application configuration\r\nexport const APP_CONFIG = new InjectionToken('app.config');\r\n\r\nexport class AppConfig {\r\n //Module name. Can be obtained from server WebApi project name without 'WebAPI' prefix\r\n ModuleName: string = '';\r\n //Project name that was set up in menahel4u.json. No need to override, it is set automatically\r\n ProjectName: string = '';\r\n //Application Mode\r\n Mode: EnumApplicationMode = EnumApplicationMode.Standard;\r\n //Turn on/off notifications\r\n IsAllowNotifications: boolean;\r\n //Turn on/off breadcrumb\r\n ShowBreadcrumb: () => boolean = () => false;\r\n\r\n //Array of components\r\n Components = [];\r\n //Array of entry components\r\n EntryComponents = [];\r\n //Array of endpoints\r\n Endpoints = [];\r\n //Array of services\r\n Services = [];\r\n //Array of routes\r\n RoutesProtected: Routes = [];\r\n RoutesAnonymous: Routes = [];\r\n //\r\n RoutesWithEmptyLayout: Routes = [];\r\n //\r\n SupportLegacyDisplaySizes: boolean = false;\r\n\r\n //Get menu function\r\n OnGetMenu = (userInfos?: { [moduleName: string]: any }): Observable => of([]);\r\n //Get navbar items for mobile menu\r\n OnGetNavbarItems = (userInfos?: { [moduleName: string]: any }): Observable => of([]);\r\n //Get default route path with params function\r\n OnGetDefaultRouteParams = (userInfo?: any): Observable => of({} as DefaultRouteParams);\r\n //Get login page extension links function\r\n OnGetAppLoginExtensionLinks = (): Observable => of([]);\r\n //Get global datasources function\r\n OnGetGlobalDataSources = (): Observable<{ [id: string]: BaseDataSourceAbstract }> => of({});\r\n //Get home page instead of system/login\r\n OnGetHomePagePath = () => '';\r\n\r\n //Application lifecycle functions\r\n //On init application function\r\n OnInitApplicationAsync = (userInfo?: any): Observable => of(true);\r\n //On logout application function\r\n OnLogoutApplicationAsync = (): Observable => of(true);\r\n //On login page. Provides posibility to config/exec an additional functionality\r\n OnLoginPage = () => of(true);\r\n\r\n //Get injectable components options\r\n GetInjectableComponentOptions = (): Observable>[]> => of([]);\r\n\r\n //Get lists\r\n GetLists = (): any[] => [];\r\n\r\n //Module enums object\r\n Enums: any = {};\r\n\r\n // List of entities which can have default share button\r\n ShareableEntities: ShareableEntity[] = [];\r\n}","import { Inject, Injectable } from '@angular/core';\r\nimport { BaseDataSourceAbstract } from '@base/datalayer/BaseDataSourceAbstract';\r\nimport { combineLatest, forkJoin, of } from 'rxjs';\r\nimport { IBaseModuleComponent } from '@base/component/IBaseComponent';\r\nimport { APP_CONFIG, AppConfig } from './app.config.model';\r\nimport { map, mergeMap } from 'rxjs/operators';\r\nimport { Utils } from '@core/helpers/Utils';\r\nimport { EnumLanguages } from '@core/framework/sysenums.enum';\r\nimport { LoginGuard } from '@m4u-angular/core/framework/login.guard';\r\nimport { ConfirmCancelGuard } from '@m4u-angular/core/framework/confirm-cancel.guard';\r\nimport { BaseDataResponse } from '../base/entities/BaseEntities';\r\n\r\nexport interface VersionDescriptor {\r\n moduleName: string;\r\n major: number;\r\n minor: number;\r\n build: number;\r\n builds: number[];\r\n}\r\n\r\nexport interface AppBuildConfig {\r\n deploymentPort: string;\r\n deploymentLocation: string;\r\n deploymentApiRoot: string;\r\n customBuild: string;\r\n isRegisterServiceWorker: boolean;\r\n title: string;\r\n standaloneApplicationApiUrl: string;\r\n projects: [{\r\n [key: string]: {}\r\n }];\r\n languages: string[];\r\n [key: string]: any;\r\n}\r\n\r\n@Injectable()\r\nexport class AppConfigService {\r\n public AppConfig: AppConfig;\r\n public M4UConfig: AppBuildConfig;\r\n public Resources: any[];\r\n public CustomResources: any[];\r\n\r\n constructor(@Inject(APP_CONFIG) appConfig) {\r\n this.AppConfig = appConfig;\r\n this.M4UConfig = AppConfigService.loadM4UConfig();\r\n this.Resources = AppConfigService._resources;\r\n this.CustomResources = AppConfigService._customResources;\r\n }\r\n\r\n //Get module name by component, endpoint or service instance\r\n getModuleNameByInstance = (instance): string => {\r\n //If instance is in application components return its module name\r\n const componentInstance = this.AppConfig.Components.find(c => instance instanceof c);\r\n if (componentInstance) return (componentInstance as IBaseModuleComponent).ModuleName;\r\n\r\n //If instance is in application endpoints return its module name\r\n const endpointInstance = this.AppConfig.Endpoints.find(e => instance instanceof e);\r\n if (endpointInstance) return (endpointInstance as IBaseModuleComponent).ModuleName;\r\n\r\n //If instance is in application services return its module name\r\n const serviceInstance = this.AppConfig.Services.find(s => {\r\n if (typeof (s) === 'object') {\r\n if (s.hasOwnProperty('useClass')) return instance instanceof s['useClass'];\r\n if (s.hasOwnProperty('useValue')) return instance instanceof s['useValue'];\r\n return false;\r\n }\r\n return instance instanceof s;\r\n });\r\n if (serviceInstance) return (serviceInstance as IBaseModuleComponent).ModuleName;\r\n\r\n return '';\r\n }\r\n\r\n getModulesVersion = (): VersionDescriptor[] => {\r\n AppConfigService.loadM4UConfig();\r\n const result = Object.keys(AppConfigService._m4uConfig.projects).map(projectName => {\r\n const path = `assets/projects/${projectName}/version.json`;\r\n let version = Utils.LoadJsonFile(path);\r\n if (version) {\r\n version.moduleName = projectName;\r\n version.build = version.builds && version.builds.length ? Math.max(...version.builds) : 1;\r\n } else {\r\n version = { moduleName: projectName, major: 0, minor: 0, build: 0, builds: [] } as VersionDescriptor;\r\n }\r\n return version;\r\n });\r\n return result;\r\n }\r\n\r\n private static _m4uConfig: AppBuildConfig;\r\n static loadM4UConfig() {\r\n if (!this._m4uConfig) {\r\n this._m4uConfig = Utils.LoadJsonFile('menahel4u.json');\r\n this._m4uConfig.deploymentPort = this.GetDeploymentPort();\r\n this._m4uConfig.deploymentLocation = this.GetDeploymentLocation(); \r\n }\r\n return this._m4uConfig;\r\n }\r\n\r\n //Return real port in case it's development one\r\n private static GetDeploymentPort() : string\r\n {\r\n return this.IsDevelopmentPort() ? (location.protocol == 'http:' ? '4444' : '44333') : location.port;\r\n }\r\n\r\n //Check whether this is our special development port\r\n private static IsDevelopmentPort() : boolean\r\n {\r\n return (location.port == '4200' || location.port == '4201');\r\n }\r\n\r\n \r\n //We are calling the server using a relative path here, with a special override for development environment to switch the port\r\n private static GetDeploymentLocationAPIURL() : string\r\n {\r\n const sRelativePath = 'api/System/DeploymentLocation';\r\n if(this.IsDevelopmentPort()) return `http://${location.hostname}:${this.GetDeploymentPort()}/${sRelativePath}`;\r\n return sRelativePath;\r\n }\r\n\r\n //Obtain the deployment server-side location (IIS virtual directory name, basically) by calling the server\r\n private static GetDeploymentLocation() : string\r\n {\r\n const oDeploymentLocation: BaseDataResponse = Utils.LoadJsonFile(this.GetDeploymentLocationAPIURL());\r\n if (oDeploymentLocation != null && oDeploymentLocation.IsSuccess) return oDeploymentLocation.Data; else return '';\r\n }\r\n\r\n //Application config variable to avoid several times loading\r\n private static _appConfig: AppConfig;\r\n static loadConfig(): AppConfig {\r\n //If already loaded just return\r\n if (this._appConfig) return this._appConfig;\r\n\r\n const m4uConfig = this.loadM4UConfig();\r\n //Validation for any project in menahel4u configuration file\r\n if (!m4uConfig.projects || !m4uConfig.projects) {\r\n throw new Error(\"There should be at least one project in menahel4u.json\");\r\n }\r\n\r\n const configs = [];\r\n //Load application configuration for each project in menahel4u configuration file\r\n Object.keys(m4uConfig.projects).forEach(projectName => {\r\n const appConfigModule = require(`projects/${projectName}/_app.config`);\r\n appConfigModule.appConfig.ProjectName = projectName;\r\n configs.push(appConfigModule.appConfig);\r\n });\r\n this.loadResources(configs);\r\n //Merge all the projects application configuration files into one\r\n this._appConfig = this.mergeConfigs(configs);\r\n return this._appConfig;\r\n }\r\n\r\n private static getRoutes(_configs: AppConfig[], routeNames: string) {\r\n return _configs.map(x => x)\r\n .reduce((arr, el) => {\r\n const routes = el[routeNames];\r\n routes.forEach(r => {\r\n //Set module name for routes with CommonSetting component and its data\r\n if (r.data && r.data.DataSource) {\r\n (r.component as any as IBaseModuleComponent).ModuleName = el.ModuleName;\r\n r.data.ModuleName = el.ModuleName;\r\n }\r\n //Get current route component\r\n const routeComponent = r.component as any as IBaseModuleComponent;\r\n //Get current route component module name\r\n const moduleNameWithPrefix = routeComponent && routeComponent.ModuleName\r\n ? `${routeComponent.ModuleName}_`\r\n : '';\r\n //Set route path depends on its component module name\r\n r.path = `${moduleNameWithPrefix}${r.path}`;\r\n });\r\n return arr.concat(routes);\r\n }, [])\r\n }\r\n\r\n //Merge application configuration files into one\r\n static mergeConfigs(configs: AppConfig[]): AppConfig {\r\n //Set module name for each of the project components, endpoints and services before application starts\r\n configs.forEach(x => {\r\n x.Components.forEach(c => (c as IBaseModuleComponent).ModuleName = x.ModuleName);\r\n x.Endpoints.forEach(e => (e as IBaseModuleComponent).ModuleName = x.ModuleName);\r\n x.Services.forEach(s => {\r\n let service;\r\n if (typeof (s) === 'object') {\r\n if (s.hasOwnProperty('useClass')) service = s['useClass'];\r\n if (s.hasOwnProperty('useValue')) service = s['useValue'];\r\n } else service = s;\r\n (service as IBaseModuleComponent).ModuleName = x.ModuleName;\r\n });\r\n });\r\n return {\r\n //Join all the projects module names by ','\r\n OnGetHomePagePath: function () {\r\n let routes = [...this.RoutesWithEmptyLayout, ...this.RoutesAnonymous, ...this.RoutesProtected].filter(x => x?.data?.IsHomePage);\r\n return routes.length > 0 ? routes[0].path : '';\r\n },\r\n ModuleName: configs.map(x => x.ModuleName).join(),\r\n //Join all the projects project names by ','\r\n ProjectName: configs.map(x => x.ProjectName).join(),\r\n //Get application mode from the first app config file\r\n Mode: configs[0].Mode,\r\n //Get notifications available from the first app config file\r\n IsAllowNotifications: configs[0].IsAllowNotifications,\r\n //Get breadcrumb available from the first app config file\r\n ShowBreadcrumb: configs[0].ShowBreadcrumb,\r\n\r\n //Merge all the projects components into one array\r\n Components: configs.map(x => x.Components).reduce((arr, el) => arr.concat(el), []),\r\n //Merge all the projects entry components into one array\r\n EntryComponents: configs.map(x => x.EntryComponents).reduce((arr, el) => arr.concat(el), []),\r\n //Merge all the projects endpoints into one array\r\n Endpoints: configs.map(x => x.Endpoints).reduce((arr, el) => arr.concat(el), []),\r\n //Merge all the projects services into one array\r\n Services: configs.map(x => x.Services).reduce((arr, el) => arr.concat(el), []),\r\n\r\n //Merge all the projects routes into one array and add module name prefix for each of the route\r\n RoutesProtected: this.getRoutes(configs, 'RoutesProtected')\r\n .map((item) => {\r\n let canDeactivateModules = !!item.canDeactivate && item.canDeactivate.length > 0 ? [...item.canDeactivate.filter(d => !!d), ConfirmCancelGuard] : [ConfirmCancelGuard];\r\n return { ...item, canActivate: [LoginGuard, ...(item.canActivate || [])], canDeactivate: canDeactivateModules }\r\n }),\r\n RoutesAnonymous: this.getRoutes(configs, 'RoutesAnonymous')\r\n .map((item) => {\r\n let canDeactivateModules = !!item.canDeactivate && item.canDeactivate.length > 0 ? [...item.canDeactivate.filter(d => !!d), ConfirmCancelGuard] : [ConfirmCancelGuard];\r\n return { ...item, canDeactivate: canDeactivateModules }\r\n }),\r\n RoutesWithEmptyLayout: this.getRoutes(configs, 'RoutesWithEmptyLayout'),\r\n\r\n SupportLegacyDisplaySizes: configs.findIndex(x => !!x.SupportLegacyDisplaySizes) !== -1,\r\n\r\n OnInitApplicationAsync: (userInfo?: any) => {\r\n //Merge all the projects on init application functions into one\r\n return combineLatest(configs.map(x => x.OnInitApplicationAsync(userInfo)))\r\n .pipe(map(x => x.reduce((res, el) => res && el, true)))\r\n },\r\n\r\n //Merge all the projects on logout application functions into one\r\n OnLogoutApplicationAsync: () => combineLatest(\r\n configs.map(x => x.OnLogoutApplicationAsync()))\r\n .pipe(map(x => x.reduce((res, el) => res && el, true))\r\n ),\r\n\r\n //Merge all the projects data sources into one array and add module name prefix for each of the datasources\r\n OnGetGlobalDataSources: () => {\r\n let dssObservables = configs.map(x => x.OnGetGlobalDataSources());\r\n return forkJoin(dssObservables)\r\n .pipe(mergeMap(dss => {\r\n let result = {};\r\n dss.forEach((ds: { [id: string]: BaseDataSourceAbstract }, idx) => {\r\n Object.keys(ds).forEach(key => result[`${configs[idx].ModuleName}${key}`] = ds[key]);\r\n });\r\n return of(result);\r\n }));\r\n },\r\n\r\n //Get the default routes params from the first of the application configuration files\r\n OnGetDefaultRouteParams: configs[0].OnGetDefaultRouteParams,\r\n\r\n //Merge all the projects on get login extension links functions into one\r\n OnGetAppLoginExtensionLinks: () => {\r\n let linksObservables = configs.map(x => x.OnGetAppLoginExtensionLinks());\r\n return forkJoin(linksObservables)\r\n .pipe(mergeMap(links => {\r\n let result = [];\r\n links.forEach((link, idx) => {\r\n link.forEach(linkItem => this.setMenuModuleName(linkItem, configs[idx].ModuleName));\r\n result = result.concat(link);\r\n });\r\n return of(result);\r\n }));\r\n },\r\n\r\n //Merge all the projects menus into one array and add module name prefix for each of the menu and its child\r\n OnGetMenu: (userInfos?: { [moduleName: string]: any }) => {\r\n let menusObservables = configs.map(x => x.OnGetMenu(userInfos));\r\n return forkJoin(menusObservables)\r\n .pipe(mergeMap(menus => {\r\n let result = [];\r\n menus.forEach((menu, idx) => {\r\n menu.forEach(menuItem => this.setMenuModuleName(menuItem, configs[idx].ModuleName));\r\n result = result.concat(menu);\r\n });\r\n return of(result);\r\n }));\r\n },\r\n\r\n //Merge all the projects navbar items into one array and add module name prefix for each of the navbar\r\n OnGetNavbarItems: (userInfos?: { [moduleName: string]: any }) => {\r\n let menusObservables = configs.map(x => x.OnGetNavbarItems(userInfos));\r\n return forkJoin(menusObservables)\r\n .pipe(mergeMap(menus => {\r\n let result = [];\r\n menus.forEach((menu, idx) => {\r\n menu.forEach(menuItem => this.setMenuModuleName(menuItem, configs[idx].ModuleName));\r\n result = result.concat(menu);\r\n });\r\n return of(result);\r\n }));\r\n },\r\n\r\n GetLists: () => {\r\n let result = [];\r\n configs.forEach(x => {\r\n const lists = x.GetLists();\r\n lists.forEach(l => l.Properties.ModuleName = x.ModuleName);\r\n result = result.concat(lists);\r\n });\r\n return result;\r\n },\r\n\r\n GetInjectableComponentOptions: () => {\r\n let observables = configs.map(x => x.GetInjectableComponentOptions());\r\n return forkJoin(observables).pipe(mergeMap((options) => {\r\n let result = [];\r\n options.forEach((option) => { result = result.concat(option); })\r\n return of(result);\r\n }));\r\n },\r\n\r\n //Merge all the projects enums into one object\r\n Enums: configs.map(x => x.Enums)\r\n .reduce((obj, el) => Object.assign(obj, el), {}),\r\n\r\n OnLoginPage: () => {\r\n return combineLatest(configs.map(x => x.OnLoginPage()))\r\n .pipe(map(x => x.reduce((res, el) => res && el, true)))\r\n },\r\n\r\n ShareableEntities: configs.map(x => x.ShareableEntities).flat(1),\r\n } as AppConfig\r\n }\r\n\r\n //Set module name for the menu and its child\r\n static setMenuModuleName(menu, moduleName) {\r\n menu.moduleName = moduleName;\r\n menu.menu = moduleName + '.' + menu.menu;\r\n if (menu.items) menu.items.forEach(subMenu => this.setMenuModuleName(subMenu, moduleName));\r\n }\r\n\r\n //Merge resources function\r\n private static _resources: any[];\r\n private static _customResources: any[];\r\n static loadResources(configs: AppConfig[]) {\r\n this._resources = [];\r\n this._customResources = [];\r\n const languages = Object.values(EnumLanguages);\r\n const randomNoCacheParam = Math.random();\r\n\r\n configs.forEach(x => {\r\n languages.forEach(language => {\r\n if (this._m4uConfig.customBuild) {\r\n let path = `assets/i18n/${x.ProjectName}/${language}_${this._m4uConfig.customBuild}.json`;\r\n if (!(window as any).cordova) path += `?v=${randomNoCacheParam}`;\r\n const customResource = Utils.LoadJsonFile(path) as any;\r\n if (customResource) {\r\n customResource.Properties.ModuleName = x.ModuleName;\r\n this._customResources.push(customResource);\r\n }\r\n }\r\n\r\n let path = `assets/i18n/${x.ProjectName}/${language}.json`;\r\n if (!(window as any).cordova) path += `?v=${randomNoCacheParam}`;\r\n const resource = Utils.LoadJsonFile(path) as any;\r\n if (resource) {\r\n resource.Properties.ModuleName = x.ModuleName;\r\n this._resources.push(resource);\r\n }\r\n });\r\n });\r\n }\r\n\r\n public static GetLoadedLanguages(): string[] {\r\n let languages: string[]=[];\r\n for (var i = 0; i <= this._resources.length - 1; i++) {\r\n languages.push(this._resources[i].Properties.Language)\r\n }\r\n return languages;\r\n }\r\n}","import { Injectable } from \"@angular/core\";\r\nimport { Observable } from \"rxjs\";\r\nimport { GenericListEntity, BaseEntitiesResponse, BaseEntityResponse } from \"@base/entities/BaseEntities\";\r\nimport { APIGatewayService } from \"../gateway/APIGateway.service\";\r\nimport { BaseEndpoint } from \"@base/endpoint/BaseEndpoint\";\r\nimport { DataLoadOptions } from \"@base/datalayer/DataLoadOptions\";\r\n\r\n@Injectable()\r\nexport class GenericListEndpoint extends BaseEndpoint \r\n{\r\n public constructor(api: APIGatewayService)\r\n {\r\n super(\"GenericList\", api);\r\n }\r\n\r\n\r\n public GetList(DataSourceName: string, options?: DataLoadOptions): Observable>\r\n {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetList', options ? { ...{ DataSourceName: DataSourceName }, ...options.GetLoadOptions() } : {DataSourceName:DataSourceName});\r\n }\r\n \r\n public GetByValue(DataSourceName: string, Value: string): Observable>\r\n {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetByValue', { DataSourceName: DataSourceName, Value: Value });\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { Observable } from \"rxjs\";\r\nimport { BaseDataResponse, BaseEntityResponse, LoginParams, WebAPILoginResponse, BaseResponse, CredentialActivityStatus,\r\n PasswordRecoveryParams, CredentialExternalInfo, WebAPICredentialInfo, \r\n CredentialCheckResponse, SaveCredentialsParams, CredentialsCheckResponse } from \"@base/entities/BaseEntities\";\r\nimport { APIGatewayService } from \"../gateway/APIGateway.service\";\r\nimport { BaseEndpoint } from \"@base/endpoint/BaseEndpoint\";\r\nimport { EnumNotificationDeliveryOptions, EnumMFAMethods } from \"../framework/sysenums.enum\";\r\n\r\n\r\n@Injectable()\r\nexport class LoginEndpoint extends BaseEndpoint\r\n{\r\n //Constructor\r\n constructor(api: APIGatewayService)\r\n {\r\n super(\"Login\", api);\r\n }\r\n\r\n public Login(Params: LoginParams): Observable>\r\n {\r\n return this.api.ExecutePostAction(this.ControllerName, 'Login', Params);\r\n }\r\n\r\n public ChangePasswordExpired(Params: LoginParams): Observable\r\n {\r\n return this.api.ExecutePostAction(this.ControllerName, 'ChangePasswordExpired', Params);\r\n }\r\n\r\n public Logout(): Observable\r\n {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'Logout');\r\n }\r\n \r\n public VerifyPasswordComplexity(Params: LoginParams): Observable\r\n {\r\n return this.api.ExecutePostAction(this.ControllerName, 'VerifyPasswordComplexity', Params);\r\n }\r\n\r\n public ChangePassword(Params: LoginParams): Observable\r\n {\r\n return this.api.ExecutePostAction(this.ControllerName, 'ChangePassword', Params);\r\n }\r\n\r\n public RecoverPassword(Params: PasswordRecoveryParams): Observable\r\n {\r\n return this.api.ExecutePostAction(this.ControllerName, 'RecoverPassword', Params);\r\n }\r\n\r\n public VerifyRecoveryToken(Params: PasswordRecoveryParams): Observable\r\n {\r\n return this.api.ExecutePostAction(this.ControllerName, 'VerifyRecoveryToken', Params);\r\n }\r\n\r\n public ChangePasswordByToken(Params: PasswordRecoveryParams): Observable\r\n {\r\n return this.api.ExecutePostAction(this.ControllerName, 'ChangePasswordByToken', Params);\r\n }\r\n\r\n public SendOtp(Params: LoginParams): Observable\r\n {\r\n return this.api.ExecutePostAction(this.ControllerName, 'SendOtp', Params);\r\n }\r\n\r\n public GetCredentialInfo(CredentialID: number, CredentialType: number): Observable>\r\n {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetCredentialInfo', { CredentialID: CredentialID, CredentialType: CredentialType });\r\n }\r\n\r\n public GetExternalInfo(CredentialID: number, CredentialType: number): Observable>\r\n {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetExternalInfo', { CredentialID: CredentialID, CredentialType: CredentialType });\r\n }\r\n\r\n public GenerateRandomPassword(): Observable>\r\n {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GenerateRandomPassword');\r\n }\r\n\r\n public GetOAuthRedirectURL(ReturnURL: string): Observable>\r\n {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetOAuthRedirectURL', {ReturnURL: ReturnURL});\r\n }\r\n\r\n public SaveCredentials(params: SaveCredentialsParams) {\r\n return this.api.ExecutePostAction(this.ControllerName, 'SaveCredentials', params);\r\n }\r\n\r\n public SetCredentialIsActive(CredentialID: number, IsActive: boolean): Observable\r\n {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'SetCredentialIsActive', { CredentialID: CredentialID, IsActive: IsActive });\r\n }\r\n\r\n public UnlockCredentials(CredentialID: number): Observable\r\n {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'UnlockCredentials', { CredentialID: CredentialID });\r\n }\r\n\r\n public WelcomeUser(CredentialID: number, DeliveryOptions: EnumNotificationDeliveryOptions, Address: string,Language: string): Observable\r\n {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'WelcomeUser', { CredentialID: CredentialID, DeliveryOptions: DeliveryOptions, Address: Address, Language: Language});\r\n }\r\n\r\n public CheckUserName(Params: LoginParams): Observable>\r\n {\r\n return this.api.ExecutePostAction(this.ControllerName, 'CheckUserName', Params);\r\n }\r\n\r\n public ChangeLanguage(Language: string): Observable\r\n {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'ChangeLanguage', { Language: Language});\r\n }\r\n\r\n public ImpersonateLogin(credentialID: number): Observable> {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'ImpersonateLogin', { credentialID: credentialID });\r\n }\r\n}\r\n","import { HttpContext } from '@angular/common/http';\r\nimport { Injectable } from \"@angular/core\";\r\nimport { BaseDataResponse, BaseEntitiesResponse, BaseResponse, GenericListEntity, Notification, NotificationListParams, PushMessageListParams } from \"@base/entities/BaseEntities\";\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { Observable, ReplaySubject, tap } from \"rxjs\";\r\nimport { SysGlobals } from '../framework/sysglobals';\r\nimport { APIGatewayService } from \"../gateway/APIGateway.service\";\r\n\r\n\r\n@Injectable()\r\nexport class PushMessageEndpoint extends BaseEndpointCRUD {\r\n \r\n private _notificationReadSubject = new ReplaySubject(1);\r\n public NotificationRead$ = this._notificationReadSubject.asObservable();\r\n\r\n //Constructor\r\n constructor(api: APIGatewayService) {\r\n super(\"PushMessage\", api);\r\n }\r\n \r\n public GetPushMessages(Params: PushMessageListParams, options: DataLoadOptions): Observable> {\r\n return this.api.ExecutePostAction(this.ControllerName, 'GetPushMessages', Params, options?.GetLoadOptions());\r\n }\r\n public GetPushMessagesUnread(): Observable> {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetPushMessagesUnread', undefined, undefined, undefined,\r\n { 'ignoreLoadingBar': 'true' }, new HttpContext().set(SysGlobals.IgnoreSessionRefreshRequestToken, true));\r\n }\r\n public ReadPushNotification(notificationID: number): Observable {\r\n return this.api.ExecutePostAction(this.ControllerName, 'ReadPushMessage', null, { notificationID: notificationID })\r\n .pipe(tap(() => this._notificationReadSubject.next(true)));\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { BaseDataResponse, BaseEntitiesResponse, BaseEntityResponse, GenericListEntity, Notification, NotificationListParams, NotificationTemplateListView, RenderedTemplate } from '@base/entities/BaseEntities';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { BaseEndpoint } from \"@m4u-angular/base/endpoint/BaseEndpoint\";\r\nimport { Observable } from \"rxjs\";\r\nimport { APIGatewayService } from \"../gateway/APIGateway.service\";\r\nimport { EnumNotificationDeliveryOptions } from '@core/framework/sysenums.enum';\r\n\r\n\r\n@Injectable()\r\nexport class ShareEndpoint extends BaseEndpoint {\r\n //Constructor\r\n constructor(api: APIGatewayService) {\r\n super(\"Share\", api);\r\n }\r\n\r\n public GetRenderedTemplate(NotificationTemplateID: number, DeliveryOption: EnumNotificationDeliveryOptions): Observable> {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetRenderedTemplate', { NotificationTemplateID: NotificationTemplateID, DeliveryOption: DeliveryOption });\r\n }\r\n\r\n public GetNotificationsTemplates(): Observable> {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetNotificationsTemplates', {});\r\n }\r\n}\r\n","import { BaseDataResponse } from '../../base/entities/BaseEntities';\r\nimport { Injectable } from \"@angular/core\";\r\nimport { Observable } from \"rxjs\";\r\nimport { BaseEntitiesResponse, BaseEntityResponse, BaseResponse, CompanyInfo, KeyValueEntity, SystemOptionEntity} from '@base/entities/BaseEntities';\r\nimport { BaseEndpoint } from \"@base/endpoint/BaseEndpoint\";\r\nimport { APIGatewayService } from \"../gateway/APIGateway.service\";\r\n\r\n\r\n@Injectable()\r\nexport class SystemOptionsEndpoint extends BaseEndpoint \r\n{\r\n public constructor(api: APIGatewayService)\r\n {\r\n super(\"SystemOptions\", api);\r\n }\r\n\r\n public GetOptions(): Observable> {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetOptions');\r\n }\r\n\r\n public SaveOptions(options: SystemOptionEntity[]): Observable> {\r\n return this.api.ExecutePostAction(this.ControllerName, 'SaveOptions', options, undefined);\r\n }\r\n\r\n}\r\n","import { BaseDataResponse } from './../../base/entities/BaseEntities';\r\nimport { Injectable } from \"@angular/core\";\r\nimport { Observable } from \"rxjs\";\r\nimport {BaseEntitiesResponse, BaseEntityResponse, BaseResponse, CompanyInfo, KeyValueEntity, SystemOptionEntity} from '@base/entities/BaseEntities';\r\nimport { BaseEndpoint } from \"@base/endpoint/BaseEndpoint\";\r\nimport { APIGatewayService } from \"../gateway/APIGateway.service\";\r\n\r\n\r\n@Injectable()\r\nexport class SystemEndpoint extends BaseEndpoint \r\n{\r\n public constructor(api: APIGatewayService)\r\n {\r\n super(\"System\", api);\r\n }\r\n \r\n\r\n //Get company info\r\n public GetCompanyInfo(): Observable>\r\n {\r\n return this.api.ExecuteGetAction(this.ControllerName, \"CompanyInfo\");\r\n }\r\n\r\n //Get the settings\r\n public GetSystemOptions(ModuleName: string | null = null): Observable>\r\n {\r\n return this.api.ExecuteGetAction(this.ControllerName, \"SystemOptions\", { ModuleName: ModuleName });\r\n }\r\n public StoreMID(mid: string): Observable\r\n {\r\n return this.api.ExecuteGetAction(this.ControllerName, \"StoreMID\", { MID: mid } );\r\n }\r\n\r\n //Keep session alive\r\n public KeepAlive(): Observable\r\n {\r\n return this.api.ExecuteGetAction(this.ControllerName, \"KeepAlive\");\r\n }\r\n\r\n public GetEntitiesResources(): Observable> {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetEntitiesResources');\r\n }\r\n}\r\n","import { ComponentPortal, Portal, TemplatePortal } from '@angular/cdk/portal';\r\nimport { ComponentFactoryResolver, ComponentRef, Injectable, TemplateRef, Type, ViewContainerRef } from '@angular/core';\r\nimport { ContextMenuElement } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { BaseDataSourceAbstract } from '@m4u-angular/base/datalayer/BaseDataSourceAbstract';\r\nimport { BottomSheetContextMenuComponent } from '@m4u-angular/ui/components/bottom-sheet-context-menu/bottom-sheet-context-menu.component';\r\nimport { BottomSheetListComponent } from '@m4u-angular/ui/components/bottom-sheet-list/bottom-sheet-list.component';\r\nimport { BottomSheetDialogComponent } from '@m4u-angular/ui/dialogs/bottom-sheet-dialog/bottom-sheet-dialog.component';\r\nimport { AppInjector } from '../injector/injector.module';\r\nimport { EnumWindowSizes } from './sysenums.enum';\r\n\r\nexport class BottomSheetContentParams {\r\n Name: string = 'Default';\r\n Content: Type | TemplateRef;\r\n Title: string;\r\n Class: string;\r\n ContentParams?: any;\r\n Height?: EnumWindowSizes;\r\n OnCompleted: (e) => void;\r\n OnCanceled: () => void;\r\n}\r\n\r\nexport class BottomSheetListParams {\r\n Title: string;\r\n DataSource: BaseDataSourceAbstract | any[];\r\n IsMultiSelection: boolean;\r\n ValueExpr: string = 'EntryID';\r\n DisplayExpr: string | ((item) => string) = 'Name';\r\n ListTemplate: TemplateRef;\r\n Value: any;\r\n IsSearchEnabled: boolean;\r\n SearchExpr: string[];\r\n OnCompleted: (e) => void;\r\n OnCanceled: () => void;\r\n}\r\n\r\nexport class BottomSheetContextMenuParams {\r\n Title: string;\r\n Items: ContextMenuElement[];\r\n OnCompleted: (e) => void;\r\n OnCanceled: () => void;\r\n}\r\n\r\nexport interface IBottomSheetComponent {\r\n Context: BottomSheetDialogComponent;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class BottomSheetService {\r\n public ViewContainerRef: ViewContainerRef;\r\n\r\n constructor(private componentFactoryResolver: ComponentFactoryResolver) { }\r\n\r\n Show(contentParams: BottomSheetContentParams, keepAlive?: boolean) {\r\n const bottomSheet = this.CreateBottomSheetInstance();\r\n const bottomSheetDialog = bottomSheet.instance;\r\n bottomSheetDialog.ContentPortal = this.ResolveContent(contentParams.Content);\r\n bottomSheetDialog.Title = contentParams.Title;\r\n bottomSheetDialog.Class = contentParams.Class;\r\n bottomSheetDialog.ContentParams = {\r\n ...contentParams.ContentParams,\r\n Context: bottomSheetDialog\r\n };\r\n bottomSheetDialog.Height = contentParams.Height || EnumWindowSizes.WindowAutoSize;\r\n bottomSheetDialog.OnClose = () => {\r\n !keepAlive && bottomSheet.destroy();\r\n return true;\r\n };\r\n \r\n const randomName = Math.random().toString(36).substring(2, 5);\r\n bottomSheetDialog.ComponentName = `${bottomSheetDialog.ComponentName}_${contentParams.Name}_${randomName}`;\r\n\r\n bottomSheetDialog.ShowBottomSheet(contentParams.OnCompleted, contentParams.OnCanceled);\r\n }\r\n\r\n ShowList(listParams: BottomSheetListParams) {\r\n const contentParams = new BottomSheetContentParams();\r\n contentParams.Name = 'BottomSheetList';\r\n contentParams.Content = BottomSheetListComponent;\r\n contentParams.Title = listParams.Title;\r\n contentParams.ContentParams = {\r\n ListParams: listParams\r\n };\r\n contentParams.OnCompleted = listParams.OnCompleted;\r\n contentParams.OnCanceled = listParams.OnCanceled;\r\n\r\n this.Show(contentParams);\r\n }\r\n\r\n ShowContextMenu(contextMenuParams: BottomSheetContextMenuParams) {\r\n const contentParams = new BottomSheetContentParams();\r\n contentParams.Name = 'BottomSheetContextMenu';\r\n contentParams.Content = BottomSheetContextMenuComponent;\r\n contentParams.Title = contextMenuParams.Title;\r\n contentParams.ContentParams = {\r\n MenuItems: contextMenuParams.Items\r\n };\r\n contentParams.OnCompleted = contextMenuParams.OnCompleted;\r\n contentParams.OnCanceled = contextMenuParams.OnCanceled;\r\n\r\n this.Show(contentParams);\r\n }\r\n\r\n private CreateBottomSheetInstance(): ComponentRef {\r\n const componentFactory = this.componentFactoryResolver.resolveComponentFactory(BottomSheetDialogComponent);\r\n const bottomSheetDialogComponent = this.ViewContainerRef.createComponent(componentFactory);\r\n return bottomSheetDialogComponent;\r\n }\r\n\r\n private ResolveContent(content: Type | TemplateRef): Portal {\r\n return content instanceof TemplateRef\r\n ? new TemplatePortal(content, this.ViewContainerRef)\r\n : new ComponentPortal(content, this.ViewContainerRef, AppInjector, this.componentFactoryResolver);\r\n }\r\n\r\n}","import { Injectable } from '@angular/core';\r\nimport { LocalStorageService } from './local-storage.service';\r\n\r\nconst CLIENT_FINGERPRINT_STORAGE_NAME = 'ClientFingetprint';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ClientFingerprintService {\r\n constructor(private localStorageService: LocalStorageService) { }\r\n\r\n GetClientFingerprint() {\r\n let clientFingetprint = this.localStorageService.GetItem(CLIENT_FINGERPRINT_STORAGE_NAME);\r\n if (!clientFingetprint) {\r\n const clientFingetprintInt = Math.round(Math.random() * 1000000000);\r\n clientFingetprint = clientFingetprintInt.toString();\r\n this.localStorageService.SetItem(CLIENT_FINGERPRINT_STORAGE_NAME, clientFingetprint);\r\n }\r\n return clientFingetprint;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { CanDeactivate } from '@angular/router';\r\nimport { BaseEntity, BaseState } from \"../../base/entities/BaseEntities\";\r\nimport { BasePageComponent } from \"../../base/component/BasePageComponent\";\r\nimport { ResourcesService } from './resources.service';\r\nimport { MessageBoxOptions } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { EnumMessageBoxTypes } from './sysenums.enum';\r\nimport { FrameworkService } from './framework.service';\r\nimport { SysEventsService } from './sysevents.service';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport {UiService} from '@core/framework/ui.service';\r\nimport { of } from 'rxjs';\r\n\r\n@Injectable()\r\nexport class ConfirmCancelGuard implements CanDeactivate> {\r\n constructor(private framework: FrameworkService, private resourceService: ResourcesService, private sysEvents: SysEventsService, private ui: UiService) {\r\n\r\n }\r\n canDeactivate(page: BasePageComponent) {\r\n if (page instanceof BasePageCRUDComponent && !page.OnIsDirtyDisabled() && page.IsDirty) {\r\n const options = new MessageBoxOptions(EnumMessageBoxTypes.YesNo, this.resourceService.RC('titleLeavePageConfirmation'));\r\n this.ui.OpenMessageBox(options);\r\n return this.sysEvents.CloseMessageBoxSubject;\r\n }\r\n return of(true);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { SysGlobals } from './sysglobals';\r\nimport { SessionService } from './session.service';\r\nimport { ScreenService } from './screen.service';\r\nimport { FieldFormComponent } from '@ui/layouts/fieldlayouts/field-form/fieldform.component';\r\nimport { Utils } from '../helpers/Utils';\r\nimport Validator from \"devextreme/ui/validator\";\r\nimport { BaseCustomizationElement, ComponentCustomization, FieldCustomizationElement } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { DxDataGridComponent } from 'devextreme-angular';\r\n\r\n@Injectable()\r\nexport class CustomizationService {\r\n FieldsCustomizations: { [key: string]: FieldCustomizationElement[] } = {};\r\n ComponentsCustomizations: { [key: string]: ComponentCustomization[] } = {};\r\n\r\n constructor(private screenService: ScreenService,\r\n private sessionService: SessionService) {\r\n }\r\n\r\n /* Components customization */\r\n\r\n SetComponentCustomizations(components: any[], parentComponentName: string) {\r\n components.forEach(x => {\r\n let customizations = this.GetComponentCustomizations(x, parentComponentName);\r\n if (!customizations.length) return;\r\n\r\n if (x instanceof DxDataGridComponent) {\r\n //Separate customizations for columns and all the grid\r\n const [columnsCustomizations, gridCustomizations] = this.GetSeparatedGridCustomizations(customizations);\r\n //Hide grid columns\r\n this.HideGridColumns(x, columnsCustomizations);\r\n //Set customizations as grid customizations to check if need to hide all the grid\r\n customizations = gridCustomizations;\r\n }\r\n if (this.IsNeedToHideElement(customizations)) x.visible = false;\r\n });\r\n }\r\n\r\n GetComponentCustomizations(component: any, parentComponentName: string) {\r\n const componentName = component.Name;\r\n //Validate name is set - throw a clear exception to help find the component\r\n if (!componentName) {\r\n const componentType = component instanceof DxDataGridComponent\r\n ? 'data grid' : component.hasOwnProperty('index')\r\n ? 'tab' : 'section';\r\n throw new Error(`You forgot to define a name for some ${componentType} in ${parentComponentName} component`);\r\n }\r\n\r\n const componentKey = `${parentComponentName}_${componentName}`;\r\n\r\n if (!this.ComponentsCustomizations[componentKey]) {\r\n const fieldCustomizations = SysGlobals.ComponentCustomizations\r\n ? SysGlobals.ComponentCustomizations\r\n .filter(this.FilterCustomizations(parentComponentName, componentName))\r\n : [];\r\n this.ComponentsCustomizations[componentKey] = fieldCustomizations;\r\n }\r\n\r\n return this.ComponentsCustomizations[componentKey];\r\n }\r\n\r\n GetSeparatedGridCustomizations(customizations: ComponentCustomization[]) {\r\n return customizations\r\n .reduce((result, element) => {\r\n result[!!element.Filter.Columns ? 0 : 1].push(element);\r\n return result;\r\n }, [[], []]);\r\n }\r\n\r\n HideGridColumns(grid: DxDataGridComponent, customizations: ComponentCustomization[]) {\r\n //Get column names that need to hide\r\n const columns = grid.columns.filter((column: any) => {\r\n const columnCustomizations = customizations\r\n .filter(c => c.Filter.Columns && c.Filter.Columns.find(z => z == column.dataField));\r\n return this.IsNeedToHideElement(columnCustomizations);\r\n }).map((x: any) => x.dataField);\r\n\r\n if (columns.length) {\r\n //Remove columns that need to hide from grid\r\n const updatedColumns = grid.columns\r\n .filter((c: any) => columns.indexOf(c.dataField) < 0);\r\n grid.instance.option('columns', updatedColumns);\r\n }\r\n }\r\n\r\n /* Fields customization */\r\n\r\n public SetFieldDefaultValue(fieldComponent: FieldFormComponent) {\r\n //Skip\r\n const relevantCustomizations = this.GetRelevantCustomizations(fieldComponent);\r\n if (!relevantCustomizations.length) return;\r\n\r\n //Get default value\r\n const oDefaults = relevantCustomizations.filter(x => x.Logic.DefaultValue != undefined);\r\n if (!oDefaults.length) return;\r\n\r\n //Get control\r\n const control = fieldComponent.GetEditorControl();\r\n if (control == undefined) return;\r\n\r\n //Set value to control\r\n if (!control.value) control.value = oDefaults[oDefaults.length - 1].Logic.DefaultValue;\r\n }\r\n\r\n //Configures the customizations\r\n public SetFieldCustomizations(fieldComponent: FieldFormComponent) {\r\n //Get customizations\r\n const relevantCustomizations = this.GetRelevantCustomizations(fieldComponent);\r\n if (!relevantCustomizations.length) return;\r\n\r\n //Set label\r\n const oLabels = relevantCustomizations.filter(x => !Utils.IsEmpty(x.Logic.Label));\r\n if (oLabels.length) fieldComponent.Label = oLabels[oLabels.length - 1].Logic.Label;\r\n\r\n //Get relevant editor control\r\n //If none exists, the rest of the customizations do not apply\r\n const control = fieldComponent.GetEditorControl();\r\n if (control == undefined) return;\r\n\r\n //Get hide lists values customizations\r\n const oFieldFilters = relevantCustomizations.filter(x => x.Logic.HideValues != undefined);\r\n\r\n //Hide\r\n if (!oFieldFilters.length && this.IsNeedToHideElement(relevantCustomizations)) fieldComponent.IsHide = true;\r\n\r\n //Hide lists values by text\r\n if (oFieldFilters.length && control.items && this.IsNeedToHideElement(relevantCustomizations)) {\r\n control.items = control.items.filter(x => oFieldFilters[oFieldFilters.length - 1].Logic.HideValues.indexOf(x.Text) < 0);\r\n }\r\n\r\n //Get instance, rules, and validator\r\n const oElement = control.instance.element();\r\n let validatorInstance = Validator.getInstance(oElement) as Validator;\r\n\r\n //Make readonly\r\n if (relevantCustomizations.filter(x => x.Logic.ReadOnly).length > 0) control.readOnly = true;\r\n\r\n //Set mandatory rule\r\n const oMandatory = relevantCustomizations.filter(x => x.Logic.Required);\r\n if (oMandatory.length) {\r\n if (!validatorInstance) validatorInstance = new Validator(oElement, {});\r\n const rules = validatorInstance.option(\"validationRules\");\r\n rules.push({ type: \"required\" });\r\n validatorInstance.option(\"validationRules\", rules);\r\n }\r\n\r\n //Set custom validation rules\r\n const oCustomValidations = relevantCustomizations.filter(x => x.Logic.ValidationFunction);\r\n if (oCustomValidations.length) {\r\n if (!validatorInstance) validatorInstance = new Validator(oElement, {});\r\n const rules = validatorInstance.option(\"validationRules\") as any[];\r\n oCustomValidations.forEach(oValidation => rules.push(\r\n {\r\n type: \"custom\",\r\n validationCallback: this.OnFieldValidation,\r\n message: oValidation.Logic.ValidationMessage,\r\n ValidationFunction: oValidation.Logic.ValidationFunction\r\n }));\r\n validatorInstance.option(\"validationRules\", rules);\r\n }\r\n }\r\n\r\n OnFieldValidation(e): boolean {\r\n return e.rule.ValidationFunction(e.value, SysGlobals.CurrentEntity, SysGlobals.CurrentState);\r\n }\r\n\r\n //Returns the relevant customizations for this field\r\n private GetRelevantCustomizations(fieldComponent: FieldFormComponent): FieldCustomizationElement[] {\r\n //Validate component is set - throw a clear exception to help find the component\r\n if (fieldComponent.Component == undefined || fieldComponent.Name == undefined) {\r\n throw new Error(`You forgot to define a component binding or name for this field - ${fieldComponent.Name != undefined ? fieldComponent.Name : fieldComponent.Label}`);\r\n }\r\n\r\n const fieldKey = `${fieldComponent.Component.ComponentStateName}_${fieldComponent.Name}`;\r\n\r\n if (!this.FieldsCustomizations[fieldKey]) {\r\n const fieldCustomizations = SysGlobals.FieldCustomizations\r\n ? SysGlobals.FieldCustomizations\r\n .filter(this.FilterCustomizations(fieldComponent.Component.ComponentStateName, fieldComponent.Name))\r\n : [];\r\n this.FieldsCustomizations[fieldKey] = fieldCustomizations;\r\n }\r\n\r\n return this.FieldsCustomizations[fieldKey];\r\n }\r\n\r\n /* Common functions */\r\n\r\n private FilterCustomizations(componentName: string, elementName: string) {\r\n return x => {\r\n if (!x.Filter.Component || !x.Filter.Name) return false;\r\n\r\n //Check component\r\n if (x.Filter.Component != '*') {\r\n if (Array.isArray(x.Filter.Component)) {\r\n if (!x.Filter.Component.find(z => z == componentName)) return false;\r\n } else {\r\n if (x.Filter.Component != componentName) return false;\r\n }\r\n }\r\n\r\n //Check element\r\n if (x.Filter.Name != '*') {\r\n if (Array.isArray(x.Filter.Name)) {\r\n if (!x.Filter.Name.find(z => z == elementName)) return false;\r\n } else {\r\n if (x.Filter.Name != elementName) return false;\r\n }\r\n }\r\n\r\n //Check user\r\n if (x.Filter.User && (x.Filter.User as any) != '*') {\r\n if (Array.isArray(x.Filter.User)) {\r\n if (!x.Filter.User.find(z => z == this.sessionService.CurrentUserID)) return false;\r\n } else {\r\n if (x.Filter.User != this.sessionService.CurrentUserID) return false;\r\n }\r\n }\r\n\r\n //If got here - means customization applies here\r\n return true;\r\n };\r\n }\r\n\r\n IsNeedToHideElement(customizations: BaseCustomizationElement[]) {\r\n return customizations.filter(c => c.Logic.Hide).length\r\n || (this.screenService.IsDesktop() && customizations.filter(c => c.Logic.HideOnDesktop).length)\r\n || (this.screenService.IsMobile() && customizations.filter(c => c.Logic.HideOnMobile).length)\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport DateBox from 'devextreme/ui/date_box';\r\nimport ListBox from 'devextreme/ui/list';\r\nimport NumberBox from 'devextreme/ui/number_box';\r\nimport Popup from 'devextreme/ui/popup';\r\nimport RadioGroup from 'devextreme/ui/radio_group';\r\nimport SelectBox from 'devextreme/ui/select_box';\r\nimport TagBox from 'devextreme/ui/tag_box';\r\nimport TextArea from 'devextreme/ui/text_area';\r\nimport TextBox from 'devextreme/ui/text_box';\r\nimport Chart from 'devextreme/viz/chart';\r\nimport Funnel from 'devextreme/viz/funnel';\r\nimport PieChart from 'devextreme/viz/pie_chart';\r\nimport CheckBox from 'devextreme/ui/check_box';\r\nimport LoadPanel from 'devextreme/ui/load_panel';\r\nimport DropDownButton from 'devextreme/ui/drop_down_button';\r\nimport TreeList from 'devextreme/ui/tree_list';\r\nimport { DeviceDetectorService } from 'ngx-device-detector';\r\nimport { AppInjector } from '../injector/injector.module';\r\nimport { SetGridDefaults } from '@base/grid/Grid.defaults';\r\nimport { FrameworkService } from './framework.service';\r\nimport { RC } from './resources.service';\r\nimport globalConfig from 'devextreme/core/config';\r\nimport { SysGlobals } from './sysglobals';\r\nimport { EnumLanguages } from './sysenums.enum';\r\nimport repaintFloatingActionButton from 'devextreme/ui/speed_dial_action/repaint_floating_action_button';\r\nimport dxValidator from 'devextreme/ui/validator';\r\nimport { BottomSheetListParams, BottomSheetService } from './bottom-sheet.service';\r\nimport { Utils } from '../helpers/Utils';\r\nimport { DateHelpers } from '@core/helpers/DateHelpers';\r\nimport { ScreenService } from './screen.service';\r\nimport { SetPivotGridDefaults } from '@base/pivotgrid/PivotGrid.defaults';\r\n\r\n@Injectable()\r\nexport class DevExpressService {\r\n //Load DevExpress stuff\r\n public InitializeDevExpress(framework: FrameworkService) {\r\n const screenService = AppInjector.get(ScreenService);\r\n\r\n //Defaults for grid\r\n SetGridDefaults();\r\n\r\n //Defaults for pivotgrid\r\n SetPivotGridDefaults();\r\n\r\n this.SetFloatingButtonsDefault();\r\n\r\n //Defaults for textboxes \r\n TextBox.defaultOptions({\r\n options:\r\n {\r\n valueChangeEvent: 'input',\r\n inputAttr: { autocomplete: 'new-password' },\r\n onFocusIn: !screenService.IsDesktop() ? undefined : (e) => this.OnFocusIn(e),\r\n onKeyDown: !screenService.IsDesktop() ? undefined : (e) => this.OnChangeInputDirection(e),\r\n validationMessageMode: 'always',\r\n stylingMode: 'underlined',\r\n onContentReady: (e) => {\r\n const element = e?.component?.element();\r\n element && element.addEventListener('wheel', (e) => {\r\n e?.preventDefault();\r\n e?.stopPropagation();\r\n });\r\n }\r\n }\r\n });\r\n\r\n TextArea.defaultOptions({\r\n options:\r\n {\r\n valueChangeEvent: 'input',\r\n autoResizeEnabled: true,\r\n stylingMode: 'underlined',\r\n //minHeight: 30,\r\n onFocusIn: !screenService.IsDesktop() ? undefined : (e) => this.OnFocusIn(e),\r\n onKeyDown: !screenService.IsDesktop() ? undefined : (e) => this.OnChangeInputDirection(e),\r\n validationMessageMode: 'always'\r\n }\r\n });\r\n\r\n\r\n //Defaults for numbertboxes\r\n NumberBox.defaultOptions({\r\n options:\r\n {\r\n step: 0,\r\n onFocusIn: !screenService.IsDesktop() ? undefined : (e) => this.OnFocusIn(e),\r\n stylingMode: 'underlined',\r\n onKeyDown: (e) => {\r\n if (e.event.code === 'ArrowDown' || e.event.code === 'ArrowUp') {\r\n e.event.preventDefault();\r\n e.event.stopImmediatePropagation();\r\n }\r\n },\r\n validationMessageMode: 'always'\r\n }\r\n });\r\n\r\n //Set default options for dates\r\n DateBox.defaultOptions({\r\n options:\r\n {\r\n type: 'date',\r\n pickerType: screenService.IsMobile() || screenService.IsTablet() ? 'native' : 'calendar',\r\n displayFormat: framework.CompanyInfo.DateFormatLong,\r\n useMaskBehavior: true,\r\n min: '1900-01-01',\r\n max: '2100-12-31',\r\n stylingMode: 'underlined',\r\n calendarOptions: { showTodayButton: true },\r\n dropDownOptions: { container: '.app-container' },\r\n onOpened: (e: any) => {\r\n const todayButton = this.GetDateBoxTodayButton(e);\r\n todayButton && todayButton.addEventListener('click', () => {\r\n this.SetTodaysDate(e);\r\n this.OnCloseDateBox(e);\r\n });\r\n },\r\n onClosed: (e) => {\r\n const todayButton = this.GetDateBoxTodayButton(e);\r\n todayButton && todayButton.removeEventListener('click', () => {\r\n this.SetTodaysDate(e);\r\n this.OnCloseDateBox(e);\r\n });\r\n },\r\n onKeyDown: (e) => {\r\n if (e.event.code === 'ArrowDown' || e.event.code === 'ArrowUp') {\r\n e.event.preventDefault();\r\n e.event.stopImmediatePropagation();\r\n }\r\n },\r\n validationMessageMode: 'always'\r\n },\r\n });\r\n\r\n\r\n\r\n\r\n //Set default options for select boxes\r\n SelectBox.defaultOptions({\r\n options:\r\n {\r\n inputAttr: { autocomplete: 'new-password' },\r\n displayExpr: 'Text',\r\n valueExpr: 'Value',\r\n placeholder: '',\r\n stylingMode: 'underlined',\r\n dropDownOptions: { container: '.app-container' },\r\n searchTimeout: 100, //Without this, tabbing works bad since value is not looked up\r\n onOpened: (e: any) => this.ShowBottomSheetList(e, false),\r\n validationMessageMode: 'always'\r\n }\r\n });\r\n\r\n\r\n //Set default options for select boxes\r\n TagBox.defaultOptions(\r\n {\r\n options:\r\n {\r\n displayExpr: 'Text',\r\n valueExpr: 'Value',\r\n noDataText: RC('genNoData'),\r\n placeholder: '',\r\n showSelectionControls: true,\r\n multiline: false,\r\n stylingMode: 'underlined',\r\n maxDisplayedTags: screenService.IsDesktop() ? 8 : 4,\r\n applyValueMode: 'useButtons',\r\n dropDownOptions: { container: '.app-container' },\r\n onOpened: (e: any) => this.ShowBottomSheetList(e, true),\r\n validationMessageMode: 'always'\r\n }\r\n });\r\n\r\n //Set default options for list boxes\r\n ListBox.defaultOptions({\r\n options:\r\n {\r\n displayExpr: 'Text',\r\n valueExpr: 'Value',\r\n noDataText: RC('genNoData'),\r\n pageLoadMode: 'scrollBottom',\r\n activeStateEnabled: false,\r\n stylingMode: 'underlined',\r\n searchTimeout: 500,\r\n validationMessageMode: 'always'\r\n }\r\n });\r\n\r\n\r\n //Set default options for select boxes\r\n RadioGroup.defaultOptions({\r\n options:\r\n {\r\n displayExpr: 'Text',\r\n valueExpr: 'Value',\r\n layout: 'horizontal',\r\n validationMessageMode: 'always'\r\n }\r\n });\r\n\r\n\r\n //Basically just for messageboxes\r\n Popup.defaultOptions({\r\n options:\r\n {\r\n showTitle: true,\r\n showCloseButton: true,\r\n dragEnabled: false,\r\n hideOnOutsideClick: true,\r\n container: '.app-container'\r\n }\r\n });\r\n\r\n\r\n\r\n\r\n PieChart.defaultOptions({\r\n options:\r\n {\r\n animation:\r\n {\r\n duration: 3000\r\n },\r\n resolveLabelOverlapping: 'shift',\r\n type: 'doughnut',\r\n palette: 'Soft Blue',\r\n legend:\r\n {\r\n visible: screenService.IsDesktop()\r\n },\r\n title:\r\n {\r\n font:\r\n {\r\n size: '16px',\r\n weight: 600\r\n }\r\n },\r\n tooltip:\r\n {\r\n enabled: screenService.IsDesktop()\r\n }\r\n }\r\n });\r\n\r\n Chart.defaultOptions({\r\n options:\r\n {\r\n animation:\r\n {\r\n duration: 3000\r\n },\r\n palette: 'Soft Blue',\r\n legend:\r\n {\r\n visible: screenService.IsDesktop()\r\n },\r\n title:\r\n {\r\n horizontalAlignment: 'center',\r\n font:\r\n {\r\n size: '16px',\r\n weight: 600\r\n }\r\n },\r\n tooltip:\r\n {\r\n enabled: screenService.IsDesktop()\r\n },\r\n\r\n argumentAxis:\r\n {\r\n label:\r\n {\r\n overlappingBehavior: 'rotate',\r\n rotationAngle: 270\r\n }\r\n }\r\n }\r\n });\r\n\r\n Funnel.defaultOptions({\r\n options:\r\n {\r\n palette: 'Soft Blue',\r\n legend:\r\n {\r\n visible: false\r\n },\r\n title:\r\n {\r\n horizontalAlignment: 'center',\r\n font:\r\n {\r\n size: '16px',\r\n weight: 600\r\n }\r\n },\r\n tooltip:\r\n {\r\n enabled: screenService.IsDesktop()\r\n },\r\n }\r\n });\r\n\r\n CheckBox.defaultOptions({\r\n options:\r\n {\r\n onInitialized: function () {\r\n if ((this as any)._options.option('value') == null) {\r\n (this as any)._options.option('value', false);\r\n }\r\n },\r\n validationMessageMode: 'always'\r\n }\r\n });\r\n\r\n LoadPanel.defaultOptions({\r\n options:\r\n {\r\n showIndicator: true,\r\n showPane: true,\r\n shading: true,\r\n message: RC('msgLoading'),\r\n shadingColor: 'rgba(0,0,0,0.4)'\r\n }\r\n });\r\n\r\n DropDownButton.defaultOptions({\r\n options:\r\n {\r\n showArrowIcon: screenService.IsDesktop()\r\n }\r\n });\r\n\r\n TreeList.defaultOptions({\r\n options: {\r\n showBorders: true\r\n }\r\n });\r\n\r\n dxValidator.defaultOptions({\r\n options: {\r\n validationRules: [{\r\n type: 'required',\r\n message: RC('errorRequiredMessage')\r\n }]\r\n }\r\n });\r\n }\r\n\r\n public SetFloatingButtonsDefault() {\r\n globalConfig({\r\n floatingActionButtonConfig: {\r\n icon: 'menu',\r\n position: SysGlobals.Language == EnumLanguages.Hebrew\r\n ? {\r\n at: 'left bottom',\r\n my: 'left bottom',\r\n offset: '16 -16'\r\n }\r\n : undefined\r\n }\r\n });\r\n\r\n repaintFloatingActionButton();\r\n }\r\n\r\n private OnFocusIn(e) {\r\n const oElement = e.element.querySelector('input');\r\n if (oElement != undefined) oElement.select();\r\n }\r\n\r\n private OnChangeInputDirection(e) {\r\n const event = e.event;\r\n if (event.ctrlKey && event.key === 'Shift') {\r\n const bRTL = event.location === 2 ? true : false;\r\n e.component.option('rtlEnabled', bRTL);\r\n e.component.option('inputAttr',\r\n {\r\n class: bRTL ? 'm4u-force-text-right' : 'm4u-force-text-left',\r\n dir: bRTL ? 'rtl' : 'ltr'\r\n });\r\n e.component.focus();\r\n }\r\n }\r\n\r\n private GetDateBoxTodayButton(e: any) {\r\n const popupContentId = e.component && e.component._popupContentId;\r\n if (!popupContentId) return null;\r\n const popupContentSelector = `#${popupContentId}.dx-popup-content`;\r\n let todayButton = document.querySelector(`${popupContentSelector} .dx-calendar-today-button`);\r\n if (!todayButton) {\r\n todayButton = document.querySelector(`${popupContentSelector} + .dx-popup-bottom .dx-button-today`);\r\n }\r\n return todayButton;\r\n }\r\n\r\n private SetTodaysDate(e: any) {\r\n let todaysDate = new Date();\r\n const originalDate = e.component.option('value') && (new Date(e.component.option('value')));\r\n if (originalDate) {\r\n const originalHours = originalDate.getHours();\r\n const originalMinutes = originalDate.getMinutes();\r\n todaysDate.setHours(originalHours, originalMinutes);\r\n } else {\r\n todaysDate = DateHelpers.ToDateOnly(todaysDate);\r\n }\r\n e.component.option('value', todaysDate);\r\n }\r\n\r\n private OnCloseDateBox(e: any) {\r\n e.component && e.component.close();\r\n }\r\n\r\n private ShowBottomSheetList(e, isMultiSelection: boolean) {\r\n // Open as default select-box if it is Desktop view\r\n const detector = AppInjector.get(DeviceDetectorService);\r\n if (detector.isDesktop()) return;\r\n // Open as usual if dropDownOptions.showAsBottomSheet = false\r\n const dropDownOptions = e.component.option('dropDownOptions');\r\n if (dropDownOptions && dropDownOptions.hasOwnProperty('showAsBottomSheet') && !dropDownOptions.showAsBottomSheet) return;\r\n // Hide default select-box\r\n document.querySelector(`#${e.component._popupContentId}`).parentElement.style.display = 'none';\r\n e.component.option('opened', false);\r\n //(document.querySelector('.dx-selectbox-popup-wrapper .dx-overlay-content') as any).style.display = 'none';\r\n // Open as bottom sheet\r\n const bottomSheetService = AppInjector.get(BottomSheetService);\r\n const dataSource = e.component.option('dataSource') || e.component.option('items');\r\n\r\n const listParams = new BottomSheetListParams();\r\n listParams.Title = e.component.option('placeholder');\r\n listParams.DataSource = dataSource;\r\n listParams.IsMultiSelection = isMultiSelection;\r\n listParams.ValueExpr = e.component.option('valueExpr');\r\n listParams.DisplayExpr = e.component.option('displayExpr');\r\n listParams.Value = e.component.option('selectedItems') || [];\r\n listParams.IsSearchEnabled = e.component.option('searchEnabled');\r\n listParams.SearchExpr = e.component.option('searchExpr') || [e.component.option('displayExpr')];\r\n listParams.OnCompleted = (result) => {\r\n result.event && e.component._saveValueChangeEvent(result.event)\r\n e.component.option('value', result?.value);\r\n if (listParams.IsSearchEnabled) {\r\n e.component.option('searchEnabled', true);\r\n }\r\n e.component.close();\r\n };\r\n listParams.OnCanceled = () => {\r\n if (listParams.IsSearchEnabled) {\r\n e.component.option('searchEnabled', true);\r\n }\r\n e.component.close();\r\n };\r\n\r\n // Disable search directive and default search if bottom sheet list search enabled\r\n if (listParams.IsSearchEnabled) {\r\n setTimeout(() => e.component.option('searchEnabled', false));\r\n }\r\n\r\n bottomSheetService.ShowList(listParams);\r\n }\r\n}\r\n","import DataGrid from 'devextreme/ui/data_grid';\r\nimport { AppInjector } from '@core/injector/injector.module';\r\nimport { DeviceDetectorService } from 'ngx-device-detector';\r\nimport { RC } from '@m4u-angular/core/framework/resources.service';\r\nimport { SysGlobals } from '@m4u-angular/core/framework/sysglobals';\r\nimport { EnumLanguages } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { FrameworkService } from '@m4u-angular/core/framework/framework.service';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { LocalStorageService } from '@m4u-angular/core/framework/local-storage.service';\r\n\r\nexport function SetGridDefaults() {\r\n const Detector = AppInjector.get(DeviceDetectorService);\r\n const localStorageService = AppInjector.get(LocalStorageService);\r\n\r\n DataGrid.defaultOptions\r\n ({\r\n options:\r\n {\r\n columnResizingMode: 'nextColumn',\r\n allowColumnResizing: true,\r\n allowColumnReordering: true,\r\n columnHidingEnabled: true,\r\n columnAutoWidth: true,\r\n dateSerializationFormat: 'yyyy-MM-dd',\r\n hoverStateEnabled: true,\r\n showBorders: true,\r\n showRowLines: true,\r\n renderAsync: true,\r\n\r\n stateStoring:\r\n {\r\n enabled: true,\r\n type: 'custom',\r\n savingTimeout: 1000,\r\n storageKey: '', \r\n keepSorting: false,\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 if (!this.keepSorting) {\r\n delete column.sortOrder;\r\n delete column.sortIndex;\r\n }\r\n }\r\n localStorageService.SetItem(this.storageKey || 'storage', JSON.stringify(state));\r\n },\r\n customLoad() {\r\n return JSON.parse(localStorageService.GetItem(this.storageKey || 'storage'));\r\n }\r\n },\r\n\r\n columnChooser:\r\n {\r\n enabled: true,\r\n height: 400,\r\n mode: 'select',\r\n search: {\r\n enabled: true\r\n }\r\n },\r\n\r\n headerFilter:\r\n {\r\n height: 400,\r\n container: '.app-container',\r\n search: {\r\n enabled: true\r\n },\r\n visible: false\r\n },\r\n\r\n scrolling:\r\n {\r\n mode: 'infinite',\r\n preloadEnabled: true,\r\n useNative: false\r\n },\r\n\r\n export:\r\n {\r\n excelFilterEnabled: true,\r\n },\r\n\r\n remoteOperations:\r\n {\r\n filtering: true,\r\n paging: true,\r\n sorting: true,\r\n },\r\n\r\n\r\n editing:\r\n {\r\n useIcons: true,\r\n selectTextOnEditStart: !Detector.isMobile(),\r\n\r\n //Show as 2 columns even on small screens to make it more clear that is a row\r\n form:\r\n {\r\n colCountByScreen:\r\n {\r\n xs: 2\r\n }\r\n }\r\n },\r\n\r\n searchPanel: {\r\n width: '100%'\r\n },\r\n\r\n //Hide all items in the toolbar besides search (shown because of excel export, column chooser, add button)\r\n onToolbarPreparing: (e) => {\r\n const { items } = e.toolbarOptions;\r\n const newItems = items.filter(item => item.isCustom); // get custom items\r\n const instance = e.component.instance();\r\n\r\n if (instance.AllowCustomization) {\r\n const widget = items.find(x => x.name === 'columnChooserButton');\r\n widget.options.icon = 'm4u-icon m4u-icon-eye';\r\n newItems.push({\r\n ...widget,\r\n location: 'after'\r\n });\r\n }\r\n\r\n if (instance.option('searchPanel.visible')) {\r\n const widget = items.find(x => x.name === 'searchPanel');\r\n newItems.push({\r\n ...widget,\r\n location: 'center'\r\n });\r\n }\r\n\r\n if (instance.option('groupPanel.visible')) {\r\n instance.option('groupPanel.emptyPanelText', RC('lblGroupPanel'));\r\n const widget = items.find(x => x.name === 'groupPanel');\r\n\r\n //let groupingCount = 0;\r\n //for (var i = 0; i < instance.columnCount(); i++) {\r\n // const groupIndex = instance.columnOption(i, \"groupIndex\");\r\n // if (groupIndex != undefined && groupIndex >= 0) {\r\n // groupingCount++;\r\n // }\r\n //}\r\n //if (groupingCount === 0) {\r\n // const tooltip = document.createElement('div');\r\n // tooltip.classList.add('group-panel-tooltip-container');\r\n\r\n // const tooltipIcon = document.createElement('i');\r\n // tooltipIcon.classList.add('group-panel-tooltip-icon');\r\n // tooltipIcon.classList.add('mdi');\r\n // tooltipIcon.classList.add('mdi-information-outline');\r\n\r\n // const tooltipText = document.createElement('span');\r\n // tooltipText.classList.add('group-panel-tooltip-text');\r\n // tooltipText.append(RC('groupPanelTooltipText'));\r\n\r\n // tooltipIcon.appendChild(tooltipText);\r\n // tooltip.appendChild(tooltipIcon);\r\n\r\n // newItems.push({\r\n // name: 'tooltip',\r\n // options: {\r\n // icon: 'mdi mdi-information-outline',\r\n // widget: 'dxButton'\r\n // },\r\n // template: () => tooltip,\r\n // isCustom: true,\r\n // location: 'before'\r\n // });\r\n //}\r\n\r\n newItems.push({\r\n ...widget,\r\n location: 'before'\r\n });\r\n }\r\n\r\n if (!newItems.length) {\r\n e.element.classList.add('m4u-hidegridtoolbar');\r\n }\r\n\r\n e.toolbarOptions.items = newItems;\r\n },\r\n\r\n onContentReady: (e) => {\r\n const gridSummary = e.component.option('summary');\r\n let rowsCount = e.component.totalCount();\r\n rowsCount = rowsCount == -1 ? e.component.getVisibleRows().length : rowsCount;\r\n if (gridSummary && gridSummary.totalItems\r\n && gridSummary.totalItems.length && rowsCount > 0) e.element.classList.add('grid-has-summary');\r\n const screen = AppInjector.get(ScreenService);\r\n // this is official suggestion of devextreme support\r\n const columnChooserView = e.component.getView('columnChooserView');\r\n if (columnChooserView.element() && !columnChooserView._popupContainer) {\r\n columnChooserView._initializePopupContainer();\r\n columnChooserView.render();\r\n const position = screen.IsRTL() //SysGlobals.Language == EnumLanguages.Hebrew\r\n ? { of: e.element, at: 'left top', my: 'left top', offset: '0 50' }\r\n : { of: e.element, my: 'right top', at: 'right top', offset: '0 50' };\r\n columnChooserView._popupContainer.option('position', position);\r\n }\r\n },\r\n\r\n onRowPrepared: (e) => {\r\n if (e.rowType === 'group') {\r\n if (e.groupIndex > 0) {\r\n e.rowElement.classList.add('child-row');\r\n }\r\n if (e.isExpanded) e.rowElement.classList.add('row-expanded');\r\n }\r\n },\r\n\r\n onRowExpanded: (e) => {\r\n if (!e.key || (Array.isArray(e.key) && !e.key.every(i => i !== undefined))) return;\r\n\r\n const getItemByKey = (items: Array, key: Array) => {\r\n if (!(items && key)) {\r\n return undefined;\r\n }\r\n let item: any = { items: items };\r\n for (let i = 0; i < key.length && item; i++) {\r\n item = item.items.find(itm => itm.key === key[i]);\r\n }\r\n return item;\r\n };\r\n\r\n const expandRecursively = (grid, item, parentKey) => {\r\n if (!item) {\r\n return;\r\n }\r\n grid.expandRow(parentKey);\r\n const itemsCount = (item.items ? item.items.length : 0) + (item.collapsedItems ? item.collapsedItems.length : 0);\r\n\r\n if (itemsCount === 1) {\r\n if (item.items) {\r\n expandRecursively(grid, item.items[0], [...parentKey, item.items[0].key]);\r\n }\r\n if (item.collapsedItems) {\r\n expandRecursively(grid, item.collapsedItems[0], [...parentKey, item.collapsedItems[0].key]);\r\n }\r\n }\r\n };\r\n\r\n expandRecursively(e.component, getItemByKey(e.component.getDataSource()?.items(), e.key), e.key);\r\n },\r\n //Apply common properties on all columns\r\n customizeColumns(columns) {\r\n const screen = AppInjector.get(ScreenService);\r\n\r\n columns.forEach(oCol => {\r\n // Customize sorting and filtering\r\n if (oCol.allowSorting !== undefined) {\r\n oCol.allowFiltering = oCol.allowSorting;\r\n }\r\n\r\n if (oCol.search === undefined || !oCol.search.enabled) {\r\n oCol.search = {\r\n enabled: true\r\n };\r\n }\r\n\r\n //Take lookup columns\r\n if (oCol.lookup != undefined) {\r\n\r\n //Set default values\r\n if (oCol.lookup.valueExpr == undefined) oCol.lookup.valueExpr = 'Value';\r\n if (oCol.lookup.displayExpr == undefined) oCol.lookup.displayExpr = 'Text';\r\n\r\n //Take only columns with defined datasource, and ignore those where datasource is an array of values (usually coming from LIST())\r\n //Take columns that can be filtered\r\n if (oCol.allowFiltering && oCol.lookup.dataSource != undefined && !(oCol.lookup.dataSource instanceof Array)) {\r\n\r\n //Set the sorting for header filter from display expression\r\n oCol.lookup.dataSource =\r\n {\r\n store: oCol.lookup.dataSource,\r\n sort: oCol.lookup.displayExpr\r\n };\r\n }\r\n }\r\n\r\n //Init sub-settings for clearer code below\r\n if (oCol.formItem == undefined) oCol.formItem = {};\r\n if (oCol.editorOptions == undefined) oCol.editorOptions = {};\r\n\r\n\r\n //Hidden columns should not be shown in column chooser either\r\n //Use showInColumnChooser for \"system\" columns\r\n //if (oCol.showInColumnChooser == false) oCol.visible = false;\r\n\r\n //Hidden columns should not be shown in form mode either\r\n oCol.formItem.visible = oCol.visible;\r\n oCol.formItem.visibleIndex = oCol.visibleIndex;\r\n\r\n //Set format on editors as well\r\n if (oCol.format != undefined) {\r\n //Set for normal editors\r\n oCol.editorOptions.format = oCol.format;\r\n\r\n //Set for form editing mode\r\n oCol.formItem.format = oCol.format;\r\n }\r\n\r\n if (oCol.type === 'buttons') {\r\n oCol.cssClass = `${oCol.cssClass || ''} fixed-column`;\r\n oCol.minWidth = oCol.minWidth || 32;\r\n oCol.allowResizing = false;\r\n oCol.allowReordering = false;\r\n oCol.allowGrouping = false;\r\n }\r\n });\r\n },\r\n\r\n onCellPrepared: (e) => {\r\n //Add class to the boolean columns to change devexpress \"center\" alignment\r\n if (e.column.dataType === 'boolean') { // && (e.rowType === 'header' || (e.rowType === 'data' && e.row.isNewRow))) {\r\n e.cellElement.classList.add('dx-column-boolean-type');\r\n }\r\n if (e.column.dataType === 'number') {\r\n e.cellElement.classList.add('dx-column-number-type');\r\n\r\n const framework = AppInjector.get(FrameworkService);\r\n const formats = [framework.CompanyInfo.NumberPrice, framework.CompanyInfo.NumberSum,\r\n framework.CompanyInfo.NumberRate, framework.CompanyInfo.NumberPercent];\r\n if (formats.indexOf(e.column.format) >= 0) {\r\n e.cellElement.classList.add('dx-column-number-formatted');\r\n }\r\n }\r\n //Add tooltip to the header\r\n if (e.rowType === 'header' && e.column.caption) {\r\n e.cellElement.title = e.column.caption;\r\n }\r\n },\r\n\r\n onContextMenuPreparing: (e) => {\r\n if (e.target == 'header') {\r\n // e.items can be undefined\r\n if (!e.items) e.items = [];\r\n const grid = e.component;\r\n const gridInstance = grid.instance();\r\n const columns = grid.option('columns') as any[];\r\n const isAllowCustomization = (gridInstance as any).AllowCustomization;\r\n const isAllowAdvancedFilters = (gridInstance as any).AllowAdvancedFilters;\r\n\r\n if (isAllowCustomization) {\r\n\r\n // Add a Hide Column menu item\r\n if (e.column.allowHiding) {\r\n e.items.push({\r\n text: RC('lblHideColumn'),\r\n icon: ' mdi mdi-eye-off',\r\n onItemClick: () => {\r\n grid.columnOption(e.column.dataField, 'visible', false);\r\n grid.refresh();\r\n }\r\n });\r\n }\r\n\r\n e.items.push({\r\n text: RC('lblShowHiddenColumns'),\r\n icon: ' mdi mdi-eye',\r\n onItemClick: () => {\r\n columns.forEach(c => {\r\n if (!c.groupCellTemplate) grid.columnOption(c.dataField, 'visible', true);\r\n });\r\n grid.refresh();\r\n }\r\n });\r\n\r\n e.items.push({\r\n text: RC('lblColumnChooser'),\r\n icon: ' mdi mdi-cog',\r\n onItemClick: () => {\r\n gridInstance.option(\r\n {\r\n 'columnChooser.mode': 'select',\r\n 'columnChooser.search.enabled': true,\r\n });\r\n gridInstance.showColumnChooser();\r\n }\r\n });\r\n\r\n e.items.push({\r\n text: RC('lblRestoreDefaultView'),\r\n icon: ' mdi mdi-cog-refresh',\r\n onItemClick: () => {\r\n const storageKey = gridInstance.option('stateStoring.storageKey') || 'storage';\r\n localStorageService.RemoveItem(storageKey);\r\n gridInstance.state({});\r\n }\r\n });\r\n }\r\n const filterVisible = gridInstance.option('headerFilter.visible');\r\n const { column } = e;\r\n\r\n if (isAllowAdvancedFilters) {\r\n e.items.push({\r\n text: filterVisible ? RC('lblHideGridFilter') : RC('lblShowGridFilter'),\r\n icon: ' mdi mdi-filter-variant',\r\n onItemClick: () => {\r\n gridInstance.option(\r\n {\r\n headerFilter: {\r\n visible: !filterVisible,\r\n search: {\r\n enabled: true\r\n }\r\n }\r\n });\r\n\r\n if (filterVisible) {\r\n gridInstance.clearFilter();\r\n } else {\r\n //show filter popup\r\n if (column.allowFiltering !== false) {\r\n gridInstance.getController('headerFilter').showHeaderFilterMenu(column.index);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n\r\n }\r\n }\r\n\r\n }\r\n });\r\n}\r\n","import { LocalStorageService } from \"@m4u-angular/core/framework/local-storage.service\";\r\nimport { AppInjector } from \"@m4u-angular/core/injector/injector.module\";\r\nimport PivotGrid, { Properties } from \"devextreme/ui/pivot_grid\";\r\n\r\nexport function SetPivotGridDefaults() {\r\n const localStorageService = AppInjector.get(LocalStorageService);\r\n\r\n PivotGrid.defaultOptions\r\n ({\r\n options:\r\n {\r\n stateStoring:\r\n {\r\n enabled: true,\r\n type: 'custom',\r\n savingTimeout: 1000,\r\n storageKey: '',\r\n\r\n customSave(state) {\r\n for (const field of state.fields) { \r\n if (field.area === 'filter') {\r\n delete field.filterValues;\r\n }\r\n }\r\n localStorageService.SetItem(this.storageKey || 'storage', JSON.stringify(state));\r\n },\r\n customLoad() {\r\n return JSON.parse(localStorageService.GetItem(this.storageKey || 'storage'));\r\n }\r\n },\r\n }\r\n });\r\n}","import { Injectable } from '@angular/core';\r\nimport { EntitySavedEventArgs } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class SavedEntityInfo {\r\n public Entity: BaseEntity;\r\n public Type: new () => BaseEntity;\r\n public Field: string;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class EntityService {\r\n\r\n private _savedEntity: SavedEntityInfo;\r\n private _isEnabled: boolean;\r\n private _field: string;\r\n\r\n constructor() {}\r\n\r\n Activate(field?: string) {\r\n if (!this._isEnabled) this._isEnabled = true;\r\n this._field = field;\r\n }\r\n\r\n SetLastSavedEntity(entitySavedArgs: EntitySavedEventArgs) {\r\n if (!this._isEnabled) return;\r\n\r\n this._savedEntity = new SavedEntityInfo();\r\n this._savedEntity.Entity = entitySavedArgs.Entity;\r\n this._savedEntity.Type = entitySavedArgs.Type;\r\n this._savedEntity.Field = this._field;\r\n }\r\n\r\n GetLastSavedEntity(field?: string, type?: new () => BaseEntity): SavedEntityInfo {\r\n if (!this._isEnabled) return new SavedEntityInfo;\r\n if ((field && this._savedEntity?.Field != field) || (type && this._savedEntity.Type != type)) {\r\n return;\r\n }\r\n\r\n const entity = { ...this._savedEntity };\r\n this.Deactivate();\r\n \r\n return entity;\r\n }\r\n\r\n private Deactivate() {\r\n this._savedEntity = null;\r\n this._isEnabled = false;\r\n this._field = null;\r\n }\r\n}","export const 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","export const ResourcesDEVX_ES =\r\n{\r\n \"es\": {\r\n \"Yes\": \"Sí\",\r\n \"No\": \"No\",\r\n \"Cancel\": \"Cancelar\",\r\n \"CheckState\": \"Check state\",\r\n \"Close\": \"Cerca\",\r\n \"Clear\": \"Limpiar\",\r\n \"Done\": \"Hecho\",\r\n \"Loading\": \"Cargando...\",\r\n \"Select\": \"Seleccionar...\",\r\n \"Search\": \"Buscar\",\r\n \"Back\": \"Volver\",\r\n \"OK\": \"Aceptar\",\r\n\r\n \"dxCollectionWidget-noDataText\": \"Sin datos para mostrar\",\r\n\r\n \"dxDropDownEditor-selectLabel\": \"Seleccionar\",\r\n\r\n \"validation-required\": \"Obligatorio\",\r\n \"validation-required-formatted\": \"{0} es obligatorio\",\r\n \"validation-numeric\": \"Valor debe ser un número\",\r\n \"validation-numeric-formatted\": \"{0} debe ser un número\",\r\n \"validation-range\": \"Valor fuera de rango\",\r\n \"validation-range-formatted\": \"{0} fuera de rango\",\r\n \"validation-stringLength\": \"El tamaño del valor es incorrecto\",\r\n \"validation-stringLength-formatted\": \"El tamaño de {0} es incorrecto\",\r\n \"validation-custom\": \"Valor inválido\",\r\n \"validation-custom-formatted\": \"{0} inválido\",\r\n \"validation-async\": \"Valor inválido\",\r\n \"validation-async-formatted\": \"{0} inválido\",\r\n \"validation-compare\": \"Valores no coinciden\",\r\n \"validation-compare-formatted\": \"{0} no coinciden\",\r\n \"validation-pattern\": \"Valor no coincide con el patrón\",\r\n \"validation-pattern-formatted\": \"{0} no coincide con el patrón\",\r\n \"validation-email\": \"Email inválido\",\r\n \"validation-email-formatted\": \"{0} inválido\",\r\n \"validation-mask\": \"Valor inválido\",\r\n\r\n \"dxLookup-searchPlaceholder\": \"Cantidad mínima de caracteres: {0}\",\r\n\r\n \"dxList-pullingDownText\": \"Desliza hacia abajo para actualizar...\",\r\n \"dxList-pulledDownText\": \"Suelta para actualizar...\",\r\n \"dxList-refreshingText\": \"Actualizando...\",\r\n \"dxList-pageLoadingText\": \"Cargando...\",\r\n \"dxList-nextButtonText\": \"Más\",\r\n \"dxList-selectAll\": \"Seleccionar Todo\",\r\n \"dxList-listAriaLabel\": \"Items\",\r\n \"dxList-listAriaLabel-deletable\": \"Deletable items\",\r\n \"dxListEditDecorator-delete\": \"Eliminar\",\r\n \"dxListEditDecorator-more\": \"Más\",\r\n \"dxList-selectAll-indeterminate\": \"Half-checked\",\r\n \"dxList-selectAll-checked\": \"Checked\",\r\n \"dxList-selectAll-notChecked\": \"Not checked\",\r\n\r\n \"dxScrollView-pullingDownText\": \"Desliza hacia abajo para actualizar...\",\r\n \"dxScrollView-pulledDownText\": \"Suelta para actualizar...\",\r\n \"dxScrollView-refreshingText\": \"Actualizando...\",\r\n \"dxScrollView-reachBottomText\": \"Cargando...\",\r\n\r\n \"dxDateBox-simulatedDataPickerTitleTime\": \"Seleccione hora\",\r\n \"dxDateBox-simulatedDataPickerTitleDate\": \"Seleccione fecha\",\r\n \"dxDateBox-simulatedDataPickerTitleDateTime\": \"Seleccione fecha y hora\",\r\n \"dxDateBox-validation-datetime\": \"Valor debe ser una fecha u hora\",\r\n\r\n \"dxDateRangeBox-invalidStartDateMessage\": \"Start value must be a date\",\r\n \"dxDateRangeBox-invalidEndDateMessage\": \"End value must be a date\",\r\n \"dxDateRangeBox-startDateOutOfRangeMessage\": \"Start date is out of range\",\r\n \"dxDateRangeBox-endDateOutOfRangeMessage\": \"End date is out of range\",\r\n \"dxDateRangeBox-startDateLabel\": \"Fecha inicial\",\r\n \"dxDateRangeBox-endDateLabel\": \"Fecha final\",\r\n\r\n \"dxFileUploader-selectFile\": \"Seleccionar archivo\",\r\n \"dxFileUploader-dropFile\": \"o arrastre un archivo aquí\",\r\n \"dxFileUploader-bytes\": \"bytes\",\r\n \"dxFileUploader-kb\": \"KB\",\r\n \"dxFileUploader-Mb\": \"MB\",\r\n \"dxFileUploader-Gb\": \"GB\",\r\n \"dxFileUploader-upload\": \"Subir\",\r\n \"dxFileUploader-uploaded\": \"Subido\",\r\n \"dxFileUploader-readyToUpload\": \"Listo para subir\",\r\n \"dxFileUploader-uploadAbortedMessage\": \"Upload cancelled\",\r\n \"dxFileUploader-uploadFailedMessage\": \"Falla ao subir\",\r\n \"dxFileUploader-invalidFileExtension\": \"Tipo de archivo no está permitido\",\r\n \"dxFileUploader-invalidMaxFileSize\": \"Archivo es muy grande\",\r\n \"dxFileUploader-invalidMinFileSize\": \"Archivo es muy pequeño\",\r\n\r\n \"dxRangeSlider-ariaFrom\": \"Desde\",\r\n \"dxRangeSlider-ariaTill\": \"Hasta\",\r\n \"dxSwitch-switchedOnText\": \"ENCENDIDO\",\r\n \"dxSwitch-switchedOffText\": \"APAGADO\",\r\n\r\n \"dxForm-optionalMark\": \"opcional\",\r\n \"dxForm-requiredMessage\": \"{0} es obligatorio\",\r\n\r\n \"dxNumberBox-invalidValueMessage\": \"Valor debe ser un número\",\r\n \"dxNumberBox-noDataText\": \"Sin datos\",\r\n\r\n \"dxDataGrid-emptyHeaderWithColumnChooserText\": \"Use {0} to display columns\",\r\n \"dxDataGrid-emptyHeaderWithGroupPanelText\": \"Drag a column from the group panel here\",\r\n \"dxDataGrid-emptyHeaderWithColumnChooserAndGroupPanelText\": \"Use {0} or drag a column from the group panel\",\r\n \"dxDataGrid-emptyHeaderColumnChooserText\": \"column chooser\",\r\n \"dxDataGrid-columnChooserTitle\": \"Selector de Columnas\",\r\n \"dxDataGrid-columnChooserEmptyText\": \"Arrastra una columna aquí para ocultarla\",\r\n \"dxDataGrid-groupContinuesMessage\": \"Continúa en la página siguiente\",\r\n \"dxDataGrid-groupContinuedMessage\": \"Continuación de la página anterior\",\r\n \"dxDataGrid-groupHeaderText\": \"Agrupar por esta columna\",\r\n \"dxDataGrid-ungroupHeaderText\": \"Desagrupar\",\r\n \"dxDataGrid-ungroupAllText\": \"Desagrupar Todo\",\r\n \"dxDataGrid-editingEditRow\": \"Modificar\",\r\n \"dxDataGrid-editingSaveRowChanges\": \"Guardar\",\r\n \"dxDataGrid-editingCancelRowChanges\": \"Cancelar\",\r\n \"dxDataGrid-editingDeleteRow\": \"Eliminar\",\r\n \"dxDataGrid-editingUndeleteRow\": \"Recuperar\",\r\n \"dxDataGrid-editingConfirmDeleteMessage\": \"¿Está seguro que desea eliminar este registro?\",\r\n \"dxDataGrid-validationCancelChanges\": \"Cancelar cambios\",\r\n \"dxDataGrid-groupPanelEmptyText\": \"Arrastra una columna aquí para agrupar por ella\",\r\n \"dxDataGrid-noDataText\": \"Sin datos\",\r\n \"dxDataGrid-searchPanelPlaceholder\": \"Buscar...\",\r\n \"dxDataGrid-filterRowShowAllText\": \"(Todos)\",\r\n \"dxDataGrid-filterRowResetOperationText\": \"Reestablecer\",\r\n \"dxDataGrid-filterRowOperationEquals\": \"Igual\",\r\n \"dxDataGrid-filterRowOperationNotEquals\": \"No es igual\",\r\n \"dxDataGrid-filterRowOperationLess\": \"Menor que\",\r\n \"dxDataGrid-filterRowOperationLessOrEquals\": \"Menor o igual a\",\r\n \"dxDataGrid-filterRowOperationGreater\": \"Mayor que\",\r\n \"dxDataGrid-filterRowOperationGreaterOrEquals\": \"Mayor o igual a\",\r\n \"dxDataGrid-filterRowOperationStartsWith\": \"Empieza con\",\r\n \"dxDataGrid-filterRowOperationContains\": \"Contiene\",\r\n \"dxDataGrid-filterRowOperationNotContains\": \"No contiene\",\r\n \"dxDataGrid-filterRowOperationEndsWith\": \"Termina con\",\r\n \"dxDataGrid-filterRowOperationBetween\": \"Entre\",\r\n \"dxDataGrid-filterRowOperationBetweenStartText\": \"Inicio\",\r\n \"dxDataGrid-filterRowOperationBetweenEndText\": \"Fin\",\r\n \"dxDataGrid-ariaSearchBox\": \"Search box\",\r\n \"dxDataGrid-applyFilterText\": \"Filtrar\",\r\n \"dxDataGrid-trueText\": \"verdadero\",\r\n \"dxDataGrid-falseText\": \"falso\",\r\n \"dxDataGrid-sortingAscendingText\": \"Orden Ascendente\",\r\n \"dxDataGrid-sortingDescendingText\": \"Orden Descendente\",\r\n \"dxDataGrid-sortingClearText\": \"Limpiar Ordenamiento\",\r\n \"dxDataGrid-ariaNotSortedColumn\": \"Not sorted column\",\r\n \"dxDataGrid-ariaSortedAscendingColumn\": \"Column sorted in ascending order\",\r\n \"dxDataGrid-ariaSortedDescendingColumn\": \"Column sorted in descending order\",\r\n \"dxDataGrid-ariaSortIndex\": \"Sort index {0}\",\r\n \"dxDataGrid-editingSaveAllChanges\": \"Guardar cambios\",\r\n \"dxDataGrid-editingCancelAllChanges\": \"Descartar cambios\",\r\n \"dxDataGrid-editingAddRow\": \"Agregar una fila\",\r\n \"dxDataGrid-summaryMin\": \"Mín: {0}\",\r\n \"dxDataGrid-summaryMinOtherColumn\": \"Mín de {1} es {0}\",\r\n \"dxDataGrid-summaryMax\": \"Máx: {0}\",\r\n \"dxDataGrid-summaryMaxOtherColumn\": \"Máx de {1} es {0}\",\r\n \"dxDataGrid-summaryAvg\": \"Prom: {0}\",\r\n \"dxDataGrid-summaryAvgOtherColumn\": \"Prom de {1} es {0}\",\r\n \"dxDataGrid-summarySum\": \"Suma: {0}\",\r\n \"dxDataGrid-summarySumOtherColumn\": \"Suma de {1} es {0}\",\r\n \"dxDataGrid-summaryCount\": \"Cantidad: {0}\",\r\n \"dxDataGrid-columnFixingFix\": \"Anclar\",\r\n \"dxDataGrid-columnFixingUnfix\": \"Desanclar\",\r\n \"dxDataGrid-columnFixingLeftPosition\": \"A la izquierda\",\r\n \"dxDataGrid-columnFixingRightPosition\": \"A la derecha\",\r\n \"dxDataGrid-exportTo\": \"Exportar\",\r\n \"dxDataGrid-exportToExcel\": \"Exportar a archivo Excel\",\r\n \"dxDataGrid-exporting\": \"Exportar...\",\r\n \"dxDataGrid-excelFormat\": \"Archivo Excel\",\r\n \"dxDataGrid-selectedRows\": \"Filas seleccionadas\",\r\n \"dxDataGrid-exportSelectedRows\": \"Exportar filas seleccionadas a {0}\",\r\n \"dxDataGrid-exportAll\": \"Exportar todo a {0}\",\r\n \"dxDataGrid-headerFilterLabel\": \"Filter options\",\r\n \"dxDataGrid-headerFilterIndicatorLabel\": \"Show filter options for column '{0}'\",\r\n \"dxDataGrid-headerFilterEmptyValue\": \"(Vacio)\",\r\n \"dxDataGrid-headerFilterOK\": \"Aceptar\",\r\n \"dxDataGrid-headerFilterCancel\": \"Cancelar\",\r\n \"dxDataGrid-ariaAdaptiveCollapse\": \"Hide additional data\",\r\n \"dxDataGrid-ariaAdaptiveExpand\": \"Display additional data\",\r\n \"dxDataGrid-ariaColumn\": \"Columna\",\r\n \"dxDataGrid-ariaColumnHeader\": \"Column header\",\r\n \"dxDataGrid-ariaValue\": \"Valor\",\r\n \"dxDataGrid-ariaError\": \"Error\",\r\n \"dxDataGrid-ariaRevertButton\": \"Press Escape to discard the changes\",\r\n \"dxDataGrid-ariaFilterCell\": \"Celda de filtro\",\r\n \"dxDataGrid-ariaCollapse\": \"Colapsar\",\r\n \"dxDataGrid-ariaModifiedCell\": \"Modified\",\r\n \"dxDataGrid-ariaDeletedCell\": \"Deleted\",\r\n \"dxDataGrid-ariaEditableCell\": \"Editable\",\r\n \"dxDataGrid-ariaExpand\": \"Expandir\",\r\n \"dxDataGrid-ariaCollapsedRow\": \"Collapsed row\",\r\n \"dxDataGrid-ariaExpandedRow\": \"Expanded row\",\r\n \"dxDataGrid-ariaDataGrid\": \"Tabla de datos\",\r\n \"dxDataGrid-ariaSearchInGrid\": \"Buscar en la tabla de datos\",\r\n \"dxDataGrid-ariaSelectAll\": \"Seleccionar todo\",\r\n \"dxDataGrid-ariaSelectRow\": \"Seleccionar fila\",\r\n \"dxDataGrid-ariaToolbar\": \"Data grid toolbar\",\r\n \"dxDataGrid-ariaEditForm\": \"Edit form\",\r\n \"dxDataGrid-filterBuilderPopupTitle\": \"Constructor de filtro\",\r\n \"dxDataGrid-filterPanelCreateFilter\": \"Crear filtro\",\r\n \"dxDataGrid-filterPanelClearFilter\": \"Limpiar filtro\",\r\n \"dxDataGrid-filterPanelFilterEnabledHint\": \"Habilitar filtro\",\r\n \"dxDataGrid-masterDetail\": \"Cell with details\",\r\n\r\n \"dxTreeList-ariaTreeList\": \"Tree list with {0} rows and {1} columns\",\r\n \"dxTreeList-ariaSearchInGrid\": \"Search in the tree list\",\r\n \"dxTreeList-ariaToolbar\": \"Tree list toolbar\",\r\n \"dxTreeList-editingAddRowToNode\": \"Añadir\",\r\n\r\n \"dxPager-infoText\": \"Página {0} de {1} ({2} ítems)\",\r\n \"dxPager-pagesCountText\": \"de\",\r\n \"dxPager-pageSize\": \"Items per page: {0}\",\r\n \"dxPager-pageSizesAllText\": \"Todos\",\r\n \"dxPager-page\": \"Page {0}\",\r\n \"dxPager-prevPage\": \"Previous Page\",\r\n \"dxPager-nextPage\": \"Next Page\",\r\n \"dxPager-ariaLabel\": \"Page Navigation\",\r\n \"dxPager-ariaPageSize\": \"Page size\",\r\n \"dxPager-ariaPageNumber\": \"Page number\",\r\n\r\n \"dxPivotGrid-grandTotal\": \"Gran Total\",\r\n \"dxPivotGrid-total\": \"{0} Total\",\r\n \"dxPivotGrid-fieldChooserTitle\": \"Selector de Campos\",\r\n \"dxPivotGrid-showFieldChooser\": \"Mostrar Selector de Campos\",\r\n \"dxPivotGrid-expandAll\": \"Expandir Todo\",\r\n \"dxPivotGrid-collapseAll\": \"Colapsar Todo\",\r\n \"dxPivotGrid-sortColumnBySummary\": \"Ordenar \\\"{0}\\\" por esta columna\",\r\n \"dxPivotGrid-sortRowBySummary\": \"Ordenar \\\"{0}\\\" por esta fila\",\r\n \"dxPivotGrid-removeAllSorting\": \"Remover ordenamiento\",\r\n \"dxPivotGrid-dataNotAvailable\": \"N/A\",\r\n \"dxPivotGrid-rowFields\": \"Campos de fila\",\r\n \"dxPivotGrid-columnFields\": \"Campos de columna\",\r\n \"dxPivotGrid-dataFields\": \"Campos de dato\",\r\n \"dxPivotGrid-filterFields\": \"Campos de filtro\",\r\n \"dxPivotGrid-allFields\": \"Todos los campos\",\r\n \"dxPivotGrid-columnFieldArea\": \"Arrastra campos de columna aquí\",\r\n \"dxPivotGrid-dataFieldArea\": \"Arrastra campos de dato aquí\",\r\n \"dxPivotGrid-rowFieldArea\": \"Arrastra campos de fila aquí\",\r\n \"dxPivotGrid-filterFieldArea\": \"Arrastra campos de filtro aquí\",\r\n\r\n \"dxScheduler-editorLabelTitle\": \"Asunto\",\r\n \"dxScheduler-editorLabelStartDate\": \"Fecha inicial\",\r\n \"dxScheduler-editorLabelEndDate\": \"Fecha final\",\r\n \"dxScheduler-editorLabelDescription\": \"Descripción\",\r\n \"dxScheduler-editorLabelRecurrence\": \"Repetir\",\r\n\r\n \"dxScheduler-openAppointment\": \"Abrir cita\",\r\n\r\n \"dxScheduler-recurrenceNever\": \"Nunca\",\r\n \"dxScheduler-recurrenceMinutely\": \"Minutely\",\r\n \"dxScheduler-recurrenceHourly\": \"Hourly\",\r\n \"dxScheduler-recurrenceDaily\": \"Diario\",\r\n \"dxScheduler-recurrenceWeekly\": \"Semanal\",\r\n \"dxScheduler-recurrenceMonthly\": \"Mensual\",\r\n \"dxScheduler-recurrenceYearly\": \"Anual\",\r\n\r\n \"dxScheduler-recurrenceRepeatEvery\": \"Cada\",\r\n \"dxScheduler-recurrenceRepeatOn\": \"Repeat On\",\r\n \"dxScheduler-recurrenceEnd\": \"Terminar repetición\",\r\n \"dxScheduler-recurrenceAfter\": \"Después\",\r\n \"dxScheduler-recurrenceOn\": \"En\",\r\n\r\n \"dxScheduler-recurrenceRepeatMinutely\": \"minute(s)\",\r\n \"dxScheduler-recurrenceRepeatHourly\": \"hour(s)\",\r\n \"dxScheduler-recurrenceRepeatDaily\": \"día(s)\",\r\n \"dxScheduler-recurrenceRepeatWeekly\": \"semana(s)\",\r\n \"dxScheduler-recurrenceRepeatMonthly\": \"mes(es)\",\r\n \"dxScheduler-recurrenceRepeatYearly\": \"año(s)\",\r\n\r\n \"dxScheduler-switcherDay\": \"Día\",\r\n \"dxScheduler-switcherWeek\": \"Semana\",\r\n \"dxScheduler-switcherWorkWeek\": \"Semana Laboral\",\r\n \"dxScheduler-switcherMonth\": \"Mes\",\r\n\r\n \"dxScheduler-switcherAgenda\": \"Agenda\",\r\n\r\n \"dxScheduler-switcherTimelineDay\": \"Línea de tiempo Día\",\r\n \"dxScheduler-switcherTimelineWeek\": \"Línea de tiempo Semana\",\r\n \"dxScheduler-switcherTimelineWorkWeek\": \"Línea de tiempo Semana Laboral\",\r\n \"dxScheduler-switcherTimelineMonth\": \"Línea de tiempo Mes\",\r\n\r\n \"dxScheduler-recurrenceRepeatOnDate\": \"en la fecha\",\r\n \"dxScheduler-recurrenceRepeatCount\": \"ocurrencia(s)\",\r\n \"dxScheduler-allDay\": \"Todo el día\",\r\n\r\n \"dxScheduler-confirmRecurrenceEditTitle\": \"Edit Recurring Appointment\",\r\n \"dxScheduler-confirmRecurrenceDeleteTitle\": \"Delete Recurring Appointment\",\r\n\r\n \"dxScheduler-confirmRecurrenceEditMessage\": \"¿Quiere modificar solo esta cita o toda la serie?\",\r\n \"dxScheduler-confirmRecurrenceDeleteMessage\": \"¿Quiere eliminar solo esta cita o toda la serie?\",\r\n\r\n \"dxScheduler-confirmRecurrenceEditSeries\": \"Modificar serie\",\r\n \"dxScheduler-confirmRecurrenceDeleteSeries\": \"Eliminar serie\",\r\n \"dxScheduler-confirmRecurrenceEditOccurrence\": \"Modificar cita\",\r\n \"dxScheduler-confirmRecurrenceDeleteOccurrence\": \"Eliminar cita\",\r\n\r\n \"dxScheduler-noTimezoneTitle\": \"Sin zona horaria\",\r\n \"dxScheduler-moreAppointments\": \"{0} más\",\r\n\r\n \"dxCalendar-currentDay\": \"Today\",\r\n \"dxCalendar-currentMonth\": \"Current month\",\r\n \"dxCalendar-currentYear\": \"Current year\",\r\n \"dxCalendar-currentYearRange\": \"Current year range\",\r\n \"dxCalendar-todayButtonText\": \"Hoy\",\r\n \"dxCalendar-ariaWidgetName\": \"Calendario\",\r\n \"dxCalendar-previousMonthButtonLabel\": \"Previous month\",\r\n \"dxCalendar-previousYearButtonLabel\": \"Previous year\",\r\n \"dxCalendar-previousDecadeButtonLabel\": \"Previous decade\",\r\n \"dxCalendar-previousCenturyButtonLabel\": \"Previous century\",\r\n \"dxCalendar-nextMonthButtonLabel\": \"Next month\",\r\n \"dxCalendar-nextYearButtonLabel\": \"Next year\",\r\n \"dxCalendar-nextDecadeButtonLabel\": \"Next decade\",\r\n \"dxCalendar-nextCenturyButtonLabel\": \"Next century\",\r\n \"dxCalendar-captionMonthLabel\": \"Month selection\",\r\n \"dxCalendar-captionYearLabel\": \"Year selection\",\r\n \"dxCalendar-captionDecadeLabel\": \"Decade selection\",\r\n \"dxCalendar-captionCenturyLabel\": \"Century selection\",\r\n \"dxCalendar-selectedDate\": \"The selected date is {0}\",\r\n \"dxCalendar-selectedDateRange\": \"The selected date range is from {0} to {1}\",\r\n\r\n \"dxColorView-ariaRed\": \"Rojo\",\r\n \"dxColorView-ariaGreen\": \"Verde\",\r\n \"dxColorView-ariaBlue\": \"Azul\",\r\n \"dxColorView-ariaAlpha\": \"Transparencia\",\r\n \"dxColorView-ariaHex\": \"Código del color\",\r\n\r\n \"dxTagBox-selected\": \"{0} seleccionado\",\r\n \"dxTagBox-allSelected\": \"Todos seleccionados ({0})\",\r\n \"dxTagBox-moreSelected\": \"{0} más\",\r\n \"dxTagBox-tagRoleDescription\": \"Tag. Press the delete button to remove this tag\",\r\n\r\n \"vizExport-printingButtonText\": \"Imprimir\",\r\n \"vizExport-titleMenuText\": \"Exportar/Imprimir\",\r\n \"vizExport-exportButtonText\": \"Archivo {0}\",\r\n\r\n \"dxFilterBuilder-and\": \"Y\",\r\n \"dxFilterBuilder-or\": \"O\",\r\n \"dxFilterBuilder-notAnd\": \"NO Y\",\r\n \"dxFilterBuilder-notOr\": \"NO O\",\r\n \"dxFilterBuilder-addCondition\": \"Añadir condición\",\r\n \"dxFilterBuilder-addGroup\": \"Añadir Grupo\",\r\n \"dxFilterBuilder-enterValueText\": \"\",\r\n \"dxFilterBuilder-filterOperationEquals\": \"Igual\",\r\n \"dxFilterBuilder-filterOperationNotEquals\": \"Diferente\",\r\n \"dxFilterBuilder-filterOperationLess\": \"Menos que\",\r\n \"dxFilterBuilder-filterOperationLessOrEquals\": \"Menor o igual que\",\r\n \"dxFilterBuilder-filterOperationGreater\": \"Más grande que\",\r\n \"dxFilterBuilder-filterOperationGreaterOrEquals\": \"Mayor o igual que\",\r\n \"dxFilterBuilder-filterOperationStartsWith\": \"Comienza con\",\r\n \"dxFilterBuilder-filterOperationContains\": \"Contiene\",\r\n \"dxFilterBuilder-filterOperationNotContains\": \"No contiene\",\r\n \"dxFilterBuilder-filterOperationEndsWith\": \"Termina con\",\r\n \"dxFilterBuilder-filterOperationIsBlank\": \"Vacío\",\r\n \"dxFilterBuilder-filterOperationIsNotBlank\": \"No vacío\",\r\n \"dxFilterBuilder-filterOperationBetween\": \"Entre\",\r\n \"dxFilterBuilder-filterOperationAnyOf\": \"Alguno de\",\r\n \"dxFilterBuilder-filterOperationNoneOf\": \"Ningún de\",\r\n\r\n \"dxHtmlEditor-dialogColorCaption\": \"Cambiar el color de la fuente\",\r\n \"dxHtmlEditor-dialogBackgroundCaption\": \"Cambiar el color de fondo\",\r\n \"dxHtmlEditor-dialogLinkCaption\": \"Añadir enlace\",\r\n \"dxHtmlEditor-dialogLinkUrlField\": \"URL\",\r\n \"dxHtmlEditor-dialogLinkTextField\": \"Texto\",\r\n \"dxHtmlEditor-dialogLinkTargetField\": \"Abrir enlace en nueva ventana\",\r\n \"dxHtmlEditor-dialogImageCaption\": \"Añadir imagen\",\r\n \"dxHtmlEditor-dialogImageUrlField\": \"URL\",\r\n \"dxHtmlEditor-dialogImageAltField\": \"Texto alternativo\",\r\n \"dxHtmlEditor-dialogImageWidthField\": \"Anchura (px)\",\r\n \"dxHtmlEditor-dialogImageHeightField\": \"Altura (px)\",\r\n \"dxHtmlEditor-dialogInsertTableRowsField\": \"Rows\",\r\n \"dxHtmlEditor-dialogInsertTableColumnsField\": \"Columns\",\r\n \"dxHtmlEditor-dialogInsertTableCaption\": \"Insert Table\",\r\n \"dxHtmlEditor-dialogUpdateImageCaption\": \"Update Image\",\r\n \"dxHtmlEditor-dialogImageUpdateButton\": \"Update\",\r\n \"dxHtmlEditor-dialogImageAddButton\": \"Add\",\r\n \"dxHtmlEditor-dialogImageSpecifyUrl\": \"From the Web\",\r\n \"dxHtmlEditor-dialogImageSelectFile\": \"From This Device\",\r\n \"dxHtmlEditor-dialogImageKeepAspectRatio\": \"Keep Aspect Ratio\",\r\n \"dxHtmlEditor-dialogImageEncodeToBase64\": \"Encode to Base64\",\r\n \"dxHtmlEditor-heading\": \"Encabezamiento\",\r\n \"dxHtmlEditor-normalText\": \"Texto normal\",\r\n \"dxHtmlEditor-background\": \"Background Color\",\r\n \"dxHtmlEditor-bold\": \"Bold\",\r\n \"dxHtmlEditor-color\": \"Font Color\",\r\n \"dxHtmlEditor-font\": \"Font\",\r\n \"dxHtmlEditor-italic\": \"Italic\",\r\n \"dxHtmlEditor-link\": \"Add Link\",\r\n \"dxHtmlEditor-image\": \"Add Image\",\r\n \"dxHtmlEditor-size\": \"Size\",\r\n \"dxHtmlEditor-strike\": \"Strikethrough\",\r\n \"dxHtmlEditor-subscript\": \"Subscript\",\r\n \"dxHtmlEditor-superscript\": \"Superscript\",\r\n \"dxHtmlEditor-underline\": \"Underline\",\r\n \"dxHtmlEditor-blockquote\": \"Blockquote\",\r\n \"dxHtmlEditor-header\": \"Header\",\r\n \"dxHtmlEditor-increaseIndent\": \"Increase Indent\",\r\n \"dxHtmlEditor-decreaseIndent\": \"Decrease Indent\",\r\n \"dxHtmlEditor-orderedList\": \"Ordered List\",\r\n \"dxHtmlEditor-bulletList\": \"Bullet List\",\r\n \"dxHtmlEditor-alignLeft\": \"Align Left\",\r\n \"dxHtmlEditor-alignCenter\": \"Align Center\",\r\n \"dxHtmlEditor-alignRight\": \"Align Right\",\r\n \"dxHtmlEditor-alignJustify\": \"Align Justify\",\r\n \"dxHtmlEditor-codeBlock\": \"Code Block\",\r\n \"dxHtmlEditor-variable\": \"Add Variable\",\r\n \"dxHtmlEditor-undo\": \"Undo\",\r\n \"dxHtmlEditor-redo\": \"Redo\",\r\n \"dxHtmlEditor-clear\": \"Clear Formatting\",\r\n \"dxHtmlEditor-insertTable\": \"Insert Table\",\r\n \"dxHtmlEditor-insertHeaderRow\": \"Insert Header Row\",\r\n \"dxHtmlEditor-insertRowAbove\": \"Insert Row Above\",\r\n \"dxHtmlEditor-insertRowBelow\": \"Insert Row Below\",\r\n \"dxHtmlEditor-insertColumnLeft\": \"Insert Column Left\",\r\n \"dxHtmlEditor-insertColumnRight\": \"Insert Column Right\",\r\n \"dxHtmlEditor-deleteColumn\": \"Delete Column\",\r\n \"dxHtmlEditor-deleteRow\": \"Delete Row\",\r\n \"dxHtmlEditor-deleteTable\": \"Delete Table\",\r\n \"dxHtmlEditor-cellProperties\": \"Cell Properties\",\r\n \"dxHtmlEditor-tableProperties\": \"Table Properties\",\r\n \"dxHtmlEditor-insert\": \"Insert\",\r\n \"dxHtmlEditor-delete\": \"Delete\",\r\n \"dxHtmlEditor-border\": \"Border\",\r\n \"dxHtmlEditor-style\": \"Style\",\r\n \"dxHtmlEditor-width\": \"Width\",\r\n \"dxHtmlEditor-height\": \"Height\",\r\n \"dxHtmlEditor-borderColor\": \"Color\",\r\n \"dxHtmlEditor-borderWidth\": \"Border Width\",\r\n \"dxHtmlEditor-tableBackground\": \"Background\",\r\n \"dxHtmlEditor-dimensions\": \"Dimensions\",\r\n \"dxHtmlEditor-alignment\": \"Alignment\",\r\n \"dxHtmlEditor-horizontal\": \"Horizontal\",\r\n \"dxHtmlEditor-vertical\": \"Vertical\",\r\n \"dxHtmlEditor-paddingVertical\": \"Vertical Padding\",\r\n \"dxHtmlEditor-paddingHorizontal\": \"Horizontal Padding\",\r\n \"dxHtmlEditor-pixels\": \"Pixels\",\r\n \"dxHtmlEditor-list\": \"List\",\r\n \"dxHtmlEditor-ordered\": \"Ordered\",\r\n \"dxHtmlEditor-bullet\": \"Bullet\",\r\n \"dxHtmlEditor-align\": \"Align\",\r\n \"dxHtmlEditor-center\": \"Center\",\r\n \"dxHtmlEditor-left\": \"Left\",\r\n \"dxHtmlEditor-right\": \"Right\",\r\n \"dxHtmlEditor-indent\": \"Indent\",\r\n \"dxHtmlEditor-justify\": \"Justify\",\r\n \"dxHtmlEditor-borderStyleNone\": \"none\",\r\n \"dxHtmlEditor-borderStyleHidden\": \"hidden\",\r\n \"dxHtmlEditor-borderStyleDotted\": \"dotted\",\r\n \"dxHtmlEditor-borderStyleDashed\": \"dashed\",\r\n \"dxHtmlEditor-borderStyleSolid\": \"solid\",\r\n \"dxHtmlEditor-borderStyleDouble\": \"double\",\r\n \"dxHtmlEditor-borderStyleGroove\": \"groove\",\r\n \"dxHtmlEditor-borderStyleRidge\": \"ridge\",\r\n \"dxHtmlEditor-borderStyleInset\": \"inset\",\r\n \"dxHtmlEditor-borderStyleOutset\": \"outset\",\r\n\r\n \"dxFileManager-newDirectoryName\": \"Sin título\",\r\n \"dxFileManager-rootDirectoryName\": \"Archivos\",\r\n \"dxFileManager-errorNoAccess\": \"Acceso denegado. La operación no se puede completar.\",\r\n \"dxFileManager-errorDirectoryExistsFormat\": \"Carpeta {0} ya existe.\",\r\n \"dxFileManager-errorFileExistsFormat\": \"Archivo {0} ya existe.\",\r\n \"dxFileManager-errorFileNotFoundFormat\": \"Archivo {0} no encontrado.\",\r\n \"dxFileManager-errorDirectoryNotFoundFormat\": \"Directory '{0}' not found.\",\r\n \"dxFileManager-errorWrongFileExtension\": \"File extension is not allowed.\",\r\n \"dxFileManager-errorMaxFileSizeExceeded\": \"File size exceeds the maximum allowed size.\",\r\n \"dxFileManager-errorInvalidSymbols\": \"This name contains invalid characters.\",\r\n \"dxFileManager-errorDefault\": \"Error no especificado\",\r\n \"dxFileManager-errorDirectoryOpenFailed\": \"The directory cannot be opened\",\r\n\r\n \"dxFileManager-commandCreate\": \"New directory\",\r\n \"dxFileManager-commandRename\": \"Rename\",\r\n \"dxFileManager-commandMove\": \"Move to\",\r\n \"dxFileManager-commandCopy\": \"Copy to\",\r\n \"dxFileManager-commandDelete\": \"Delete\",\r\n \"dxFileManager-commandDownload\": \"Download\",\r\n \"dxFileManager-commandUpload\": \"Upload files\",\r\n \"dxFileManager-commandRefresh\": \"Refresh\",\r\n \"dxFileManager-commandThumbnails\": \"Thumbnails View\",\r\n \"dxFileManager-commandDetails\": \"Details View\",\r\n \"dxFileManager-commandClearSelection\": \"Clear selection\",\r\n \"dxFileManager-commandShowNavPane\": \"Toggle navigation pane\",\r\n\r\n \"dxFileManager-dialogDirectoryChooserMoveTitle\": \"Move to\",\r\n \"dxFileManager-dialogDirectoryChooserMoveButtonText\": \"Move\",\r\n \"dxFileManager-dialogDirectoryChooserCopyTitle\": \"Copy to\",\r\n \"dxFileManager-dialogDirectoryChooserCopyButtonText\": \"Copy\",\r\n \"dxFileManager-dialogRenameItemTitle\": \"Rename\",\r\n \"dxFileManager-dialogRenameItemButtonText\": \"Save\",\r\n \"dxFileManager-dialogCreateDirectoryTitle\": \"New directory\",\r\n \"dxFileManager-dialogCreateDirectoryButtonText\": \"Create\",\r\n \"dxFileManager-dialogDeleteItemTitle\": \"Delete\",\r\n \"dxFileManager-dialogDeleteItemButtonText\": \"Delete\",\r\n \"dxFileManager-dialogDeleteItemSingleItemConfirmation\": \"Are you sure you want to delete {0}?\",\r\n \"dxFileManager-dialogDeleteItemMultipleItemsConfirmation\": \"Are you sure you want to delete {0} items?\",\r\n \"dxFileManager-dialogButtonCancel\": \"Cancel\",\r\n\r\n \"dxFileManager-editingCreateSingleItemProcessingMessage\": \"Creating a directory inside {0}\",\r\n \"dxFileManager-editingCreateSingleItemSuccessMessage\": \"Created a directory inside {0}\",\r\n \"dxFileManager-editingCreateSingleItemErrorMessage\": \"Directory was not created\",\r\n \"dxFileManager-editingCreateCommonErrorMessage\": \"Directory was not created\",\r\n\r\n \"dxFileManager-editingRenameSingleItemProcessingMessage\": \"Renaming an item inside {0}\",\r\n \"dxFileManager-editingRenameSingleItemSuccessMessage\": \"Renamed an item inside {0}\",\r\n \"dxFileManager-editingRenameSingleItemErrorMessage\": \"Item was not renamed\",\r\n \"dxFileManager-editingRenameCommonErrorMessage\": \"Item was not renamed\",\r\n\r\n \"dxFileManager-editingDeleteSingleItemProcessingMessage\": \"Deleting an item from {0}\",\r\n \"dxFileManager-editingDeleteMultipleItemsProcessingMessage\": \"Deleting {0} items from {1}\",\r\n \"dxFileManager-editingDeleteSingleItemSuccessMessage\": \"Deleted an item from {0}\",\r\n \"dxFileManager-editingDeleteMultipleItemsSuccessMessage\": \"Deleted {0} items from {1}\",\r\n \"dxFileManager-editingDeleteSingleItemErrorMessage\": \"Item was not deleted\",\r\n \"dxFileManager-editingDeleteMultipleItemsErrorMessage\": \"{0} items were not deleted\",\r\n \"dxFileManager-editingDeleteCommonErrorMessage\": \"Some items were not deleted\",\r\n\r\n \"dxFileManager-editingMoveSingleItemProcessingMessage\": \"Moving an item to {0}\",\r\n \"dxFileManager-editingMoveMultipleItemsProcessingMessage\": \"Moving {0} items to {1}\",\r\n \"dxFileManager-editingMoveSingleItemSuccessMessage\": \"Moved an item to {0}\",\r\n \"dxFileManager-editingMoveMultipleItemsSuccessMessage\": \"Moved {0} items to {1}\",\r\n \"dxFileManager-editingMoveSingleItemErrorMessage\": \"Item was not moved\",\r\n \"dxFileManager-editingMoveMultipleItemsErrorMessage\": \"{0} items were not moved\",\r\n \"dxFileManager-editingMoveCommonErrorMessage\": \"Some items were not moved\",\r\n\r\n \"dxFileManager-editingCopySingleItemProcessingMessage\": \"Copying an item to {0}\",\r\n \"dxFileManager-editingCopyMultipleItemsProcessingMessage\": \"Copying {0} items to {1}\",\r\n \"dxFileManager-editingCopySingleItemSuccessMessage\": \"Copied an item to {0}\",\r\n \"dxFileManager-editingCopyMultipleItemsSuccessMessage\": \"Copied {0} items to {1}\",\r\n \"dxFileManager-editingCopySingleItemErrorMessage\": \"Item was not copied\",\r\n \"dxFileManager-editingCopyMultipleItemsErrorMessage\": \"{0} items were not copied\",\r\n \"dxFileManager-editingCopyCommonErrorMessage\": \"Some items were not copied\",\r\n\r\n \"dxFileManager-editingUploadSingleItemProcessingMessage\": \"Uploading an item to {0}\",\r\n \"dxFileManager-editingUploadMultipleItemsProcessingMessage\": \"Uploading {0} items to {1}\",\r\n \"dxFileManager-editingUploadSingleItemSuccessMessage\": \"Uploaded an item to {0}\",\r\n \"dxFileManager-editingUploadMultipleItemsSuccessMessage\": \"Uploaded {0} items to {1}\",\r\n \"dxFileManager-editingUploadSingleItemErrorMessage\": \"Item was not uploaded\",\r\n \"dxFileManager-editingUploadMultipleItemsErrorMessage\": \"{0} items were not uploaded\",\r\n \"dxFileManager-editingUploadCanceledMessage\": \"Canceled\",\r\n\r\n \"dxFileManager-editingDownloadSingleItemErrorMessage\": \"Item was not downloaded\",\r\n \"dxFileManager-editingDownloadMultipleItemsErrorMessage\": \"{0} items were not downloaded\",\r\n\r\n \"dxFileManager-listDetailsColumnCaptionName\": \"Name\",\r\n \"dxFileManager-listDetailsColumnCaptionDateModified\": \"Date Modified\",\r\n \"dxFileManager-listDetailsColumnCaptionFileSize\": \"File Size\",\r\n\r\n \"dxFileManager-listThumbnailsTooltipTextSize\": \"Size\",\r\n \"dxFileManager-listThumbnailsTooltipTextDateModified\": \"Date Modified\",\r\n\r\n \"dxFileManager-notificationProgressPanelTitle\": \"Progress\",\r\n \"dxFileManager-notificationProgressPanelEmptyListText\": \"No operations\",\r\n \"dxFileManager-notificationProgressPanelOperationCanceled\": \"Canceled\",\r\n\r\n \"dxDiagram-categoryGeneral\": \"General\",\r\n \"dxDiagram-categoryFlowchart\": \"Diagrama de flujo\",\r\n \"dxDiagram-categoryOrgChart\": \"Organigrama\",\r\n \"dxDiagram-categoryContainers\": \"Contenedores\",\r\n \"dxDiagram-categoryCustom\": \"Personalizado\",\r\n\r\n \"dxDiagram-commandExportToSvg\": \"Exportar a SVG\",\r\n \"dxDiagram-commandExportToPng\": \"Exportar a PNG\",\r\n \"dxDiagram-commandExportToJpg\": \"Exportar a JPG\",\r\n \"dxDiagram-commandUndo\": \"Deshacer\",\r\n \"dxDiagram-commandRedo\": \"Rehacer\",\r\n \"dxDiagram-commandFontName\": \"Nombre de fuente\",\r\n \"dxDiagram-commandFontSize\": \"Tamaño de fuente\",\r\n \"dxDiagram-commandBold\": \"Negrita\",\r\n \"dxDiagram-commandItalic\": \"Cursiva\",\r\n \"dxDiagram-commandUnderline\": \"Subrayado\",\r\n \"dxDiagram-commandTextColor\": \"Color de fuente\",\r\n \"dxDiagram-commandLineColor\": \"Color de línea\",\r\n \"dxDiagram-commandLineWidth\": \"Ancho de línea\",\r\n \"dxDiagram-commandLineStyle\": \"Estilo de línea\",\r\n \"dxDiagram-commandLineStyleSolid\": \"Sólido\",\r\n \"dxDiagram-commandLineStyleDotted\": \"De puntos\",\r\n \"dxDiagram-commandLineStyleDashed\": \"De guiones\",\r\n \"dxDiagram-commandFillColor\": \"Color de relleno\",\r\n \"dxDiagram-commandAlignLeft\": \"Alinear a la izquierda\",\r\n \"dxDiagram-commandAlignCenter\": \"Alinear al centro\",\r\n \"dxDiagram-commandAlignRight\": \"Alinear a la derecha\",\r\n \"dxDiagram-commandConnectorLineType\": \"Tipo de línea de conector\",\r\n \"dxDiagram-commandConnectorLineStraight\": \"Recto\",\r\n \"dxDiagram-commandConnectorLineOrthogonal\": \"Ortogonal\",\r\n \"dxDiagram-commandConnectorLineStart\": \"Conector de inicio de línea\",\r\n \"dxDiagram-commandConnectorLineEnd\": \"Conector de final de línea\",\r\n \"dxDiagram-commandConnectorLineNone\": \"Ninguno\",\r\n \"dxDiagram-commandConnectorLineArrow\": \"Flecha\",\r\n \"dxDiagram-commandFullscreen\": \"Pantalla completa\",\r\n \"dxDiagram-commandUnits\": \"Unidades\",\r\n \"dxDiagram-commandPageSize\": \"Tamaño de página\",\r\n \"dxDiagram-commandPageOrientation\": \"Orientación de página\",\r\n \"dxDiagram-commandPageOrientationLandscape\": \"Horizontal\",\r\n \"dxDiagram-commandPageOrientationPortrait\": \"Vertical\",\r\n \"dxDiagram-commandPageColor\": \"Color de página\",\r\n \"dxDiagram-commandShowGrid\": \"Mostrar cuadrícula\",\r\n \"dxDiagram-commandSnapToGrid\": \"Ajustar a la cuadrícula\",\r\n \"dxDiagram-commandGridSize\": \"Tamaño de cuadrícula\",\r\n \"dxDiagram-commandZoomLevel\": \"Nivel de zoom\",\r\n \"dxDiagram-commandAutoZoom\": \"Zoom automático\",\r\n \"dxDiagram-commandFitToContent\": \"Ajustar al contenido\",\r\n \"dxDiagram-commandFitToWidth\": \"Ajustar al ancho\",\r\n \"dxDiagram-commandAutoZoomByContent\": \"Zoom automático por contenido\",\r\n \"dxDiagram-commandAutoZoomByWidth\": \"Zoom automático por ancho\",\r\n \"dxDiagram-commandSimpleView\": \"Vista Simple\",\r\n \"dxDiagram-commandCut\": \"Cortar\",\r\n \"dxDiagram-commandCopy\": \"Copiar\",\r\n \"dxDiagram-commandPaste\": \"Pegar\",\r\n \"dxDiagram-commandSelectAll\": \"Seleccionar todo\",\r\n \"dxDiagram-commandDelete\": \"Eliminar\",\r\n \"dxDiagram-commandBringToFront\": \"Traer al frente\",\r\n \"dxDiagram-commandSendToBack\": \"Enviar al fondo\",\r\n \"dxDiagram-commandLock\": \"Bloquear\",\r\n \"dxDiagram-commandUnlock\": \"Desbloquear\",\r\n \"dxDiagram-commandInsertShapeImage\": \"Insertar imagen...\",\r\n \"dxDiagram-commandEditShapeImage\": \"Cambiar imagen...\",\r\n \"dxDiagram-commandDeleteShapeImage\": \"Eliminar imagen\",\r\n \"dxDiagram-commandLayoutLeftToRight\": \"De izquierda a derecha\",\r\n \"dxDiagram-commandLayoutRightToLeft\": \"De derecha a izquierda\",\r\n \"dxDiagram-commandLayoutTopToBottom\": \"De arriba a abajo\",\r\n \"dxDiagram-commandLayoutBottomToTop\": \"De abajo a arriba\",\r\n\r\n \"dxDiagram-unitIn\": \"pulg.\",\r\n \"dxDiagram-unitCm\": \"cm\",\r\n \"dxDiagram-unitPx\": \"px\",\r\n\r\n \"dxDiagram-dialogButtonOK\": \"Aceptar\",\r\n \"dxDiagram-dialogButtonCancel\": \"Cancelar\",\r\n \"dxDiagram-dialogInsertShapeImageTitle\": \"Insertar Imagen\",\r\n \"dxDiagram-dialogEditShapeImageTitle\": \"Cambiar Imagen\",\r\n \"dxDiagram-dialogEditShapeImageSelectButton\": \"Seleccionar imagen\",\r\n \"dxDiagram-dialogEditShapeImageLabelText\": \"o colocar el archivo aquí\",\r\n\r\n \"dxDiagram-uiExport\": \"Exportar\",\r\n \"dxDiagram-uiProperties\": \"Propiedades\",\r\n \"dxDiagram-uiSettings\": \"Configuración\",\r\n \"dxDiagram-uiShowToolbox\": \"Cuadro de herramientas\",\r\n \"dxDiagram-uiSearch\": \"Buscar\",\r\n \"dxDiagram-uiStyle\": \"Estilo\",\r\n \"dxDiagram-uiLayout\": \"Diseño\",\r\n \"dxDiagram-uiLayoutTree\": \"Árbol\",\r\n \"dxDiagram-uiLayoutLayered\": \"Capas\",\r\n \"dxDiagram-uiDiagram\": \"Diagrama\",\r\n \"dxDiagram-uiText\": \"Texto\",\r\n \"dxDiagram-uiObject\": \"Objeto\",\r\n \"dxDiagram-uiConnector\": \"Conector\",\r\n \"dxDiagram-uiPage\": \"Página\",\r\n\r\n \"dxDiagram-shapeText\": \"Texto\",\r\n \"dxDiagram-shapeRectangle\": \"Rectángulo\",\r\n \"dxDiagram-shapeEllipse\": \"Elipse\",\r\n \"dxDiagram-shapeCross\": \"Cruz\",\r\n \"dxDiagram-shapeTriangle\": \"Triángulo\",\r\n \"dxDiagram-shapeDiamond\": \"Rombo\",\r\n \"dxDiagram-shapeHeart\": \"Corazón\",\r\n \"dxDiagram-shapePentagon\": \"Pentágono\",\r\n \"dxDiagram-shapeHexagon\": \"Hexágono\",\r\n \"dxDiagram-shapeOctagon\": \"Octágono\",\r\n \"dxDiagram-shapeStar\": \"Estrella\",\r\n \"dxDiagram-shapeArrowLeft\": \"Flecha izquierda\",\r\n \"dxDiagram-shapeArrowUp\": \"Flecha arriba\",\r\n \"dxDiagram-shapeArrowRight\": \"Flecha derecha\",\r\n \"dxDiagram-shapeArrowDown\": \"Flecha abajo\",\r\n \"dxDiagram-shapeArrowUpDown\": \"Flecha arriba/abajo\",\r\n \"dxDiagram-shapeArrowLeftRight\": \"Flecha izquierda/derecha\",\r\n \"dxDiagram-shapeProcess\": \"Proceso\",\r\n \"dxDiagram-shapeDecision\": \"Decisión\",\r\n \"dxDiagram-shapeTerminator\": \"Terminador\",\r\n \"dxDiagram-shapePredefinedProcess\": \"Proceso predefinido\",\r\n \"dxDiagram-shapeDocument\": \"Documento\",\r\n \"dxDiagram-shapeMultipleDocuments\": \"Varios documentos\",\r\n \"dxDiagram-shapeManualInput\": \"Entrada manual\",\r\n \"dxDiagram-shapePreparation\": \"Preparación\",\r\n \"dxDiagram-shapeData\": \"Datos\",\r\n \"dxDiagram-shapeDatabase\": \"Base de datos\",\r\n \"dxDiagram-shapeHardDisk\": \"Disco duro\",\r\n \"dxDiagram-shapeInternalStorage\": \"Almacenamiento interno\",\r\n \"dxDiagram-shapePaperTape\": \"Cinta de papel\",\r\n \"dxDiagram-shapeManualOperation\": \"Operación manual\",\r\n \"dxDiagram-shapeDelay\": \"Retraso\",\r\n \"dxDiagram-shapeStoredData\": \"Datos almacenados\",\r\n \"dxDiagram-shapeDisplay\": \"Pantalla\",\r\n \"dxDiagram-shapeMerge\": \"Combinar\",\r\n \"dxDiagram-shapeConnector\": \"Conector\",\r\n \"dxDiagram-shapeOr\": \"O\",\r\n \"dxDiagram-shapeSummingJunction\": \"Unión en Y\",\r\n \"dxDiagram-shapeContainerDefaultText\": \"Contenedor\",\r\n \"dxDiagram-shapeVerticalContainer\": \"Contenedor vertical\",\r\n \"dxDiagram-shapeHorizontalContainer\": \"Contenedor horizontal\",\r\n \"dxDiagram-shapeCardDefaultText\": \"Nombre de persona\",\r\n \"dxDiagram-shapeCardWithImageOnLeft\": \"Tarjeta con imagen a la izquierda\",\r\n \"dxDiagram-shapeCardWithImageOnTop\": \"Tarjeta con imagen en la parte superior\",\r\n \"dxDiagram-shapeCardWithImageOnRight\": \"Tarjeta con imagen a la derecha\",\r\n\r\n \"dxGantt-dialogTitle\": \"Title\",\r\n \"dxGantt-dialogStartTitle\": \"Start\",\r\n \"dxGantt-dialogEndTitle\": \"End\",\r\n \"dxGantt-dialogProgressTitle\": \"Progress\",\r\n \"dxGantt-dialogResourcesTitle\": \"Resources\",\r\n \"dxGantt-dialogResourceManagerTitle\": \"Resource Manager\",\r\n \"dxGantt-dialogTaskDetailsTitle\": \"Task Details\",\r\n \"dxGantt-dialogEditResourceListHint\": \"Edit Resource List\",\r\n \"dxGantt-dialogEditNoResources\": \"No resources\",\r\n \"dxGantt-dialogButtonAdd\": \"Add\",\r\n \"dxGantt-contextMenuNewTask\": \"New Task\",\r\n \"dxGantt-contextMenuNewSubtask\": \"New Subtask\",\r\n \"dxGantt-contextMenuDeleteTask\": \"Delete Task\",\r\n \"dxGantt-contextMenuDeleteDependency\": \"Delete Dependency\",\r\n \"dxGantt-dialogTaskDeleteConfirmation\": \"Deleting a task also deletes all its dependencies and subtasks. Are you sure you want to delete this task?\",\r\n \"dxGantt-dialogDependencyDeleteConfirmation\": \"Are you sure you want to delete the dependency from the task?\",\r\n \"dxGantt-dialogResourcesDeleteConfirmation\": \"Deleting a resource also deletes it from tasks to which this resource is assigned. Are you sure you want to delete these resources? Resources: {0}\",\r\n \"dxGantt-dialogConstraintCriticalViolationMessage\": \"The task you are attempting to move is linked to a second task by a dependency relation. This change would conflict with dependency rules. How would you like to proceed?\",\r\n \"dxGantt-dialogConstraintViolationMessage\": \"The task you are attempting to move is linked to a second task by a dependency relation. How would you like to proceed?\",\r\n \"dxGantt-dialogCancelOperationMessage\": \"Cancel the operation\",\r\n \"dxGantt-dialogDeleteDependencyMessage\": \"Delete the dependency\",\r\n \"dxGantt-dialogMoveTaskAndKeepDependencyMessage\": \"Move the task and keep the dependency\",\r\n \"dxGantt-dialogConstraintCriticalViolationSeveralTasksMessage\": \"The task you are attempting to move is linked to another tasks by dependency relations. This change would conflict with dependency rules. How would you like to proceed?\",\r\n \"dxGantt-dialogConstraintViolationSeveralTasksMessage\": \"The task you are attempting to move is linked to another tasks by dependency relations. How would you like to proceed?\",\r\n \"dxGantt-dialogDeleteDependenciesMessage\": \"Delete the dependency relations\",\r\n \"dxGantt-dialogMoveTaskAndKeepDependenciesMessage\": \"Move the task and keep the dependencies\",\r\n \"dxGantt-undo\": \"Undo\",\r\n \"dxGantt-redo\": \"Redo\",\r\n \"dxGantt-expandAll\": \"Expand All\",\r\n \"dxGantt-collapseAll\": \"Collapse All\",\r\n \"dxGantt-addNewTask\": \"Add New Task\",\r\n \"dxGantt-deleteSelectedTask\": \"Delete Selected Task\",\r\n \"dxGantt-zoomIn\": \"Zoom In\",\r\n \"dxGantt-zoomOut\": \"Zoom Out\",\r\n \"dxGantt-fullScreen\": \"Full Screen\",\r\n \"dxGantt-quarter\": \"Q{0}\",\r\n \"dxGantt-sortingAscendingText\": \"Orden Ascendente\",\r\n \"dxGantt-sortingDescendingText\": \"Orden Descendente\",\r\n \"dxGantt-sortingClearText\": \"Limpiar Ordenamiento\",\r\n \"dxGantt-showResources\": \"Mostrar Recursos\",\r\n \"dxGantt-showDependencies\": \"Mostrar Dependencias\",\r\n \"dxGantt-dialogStartDateValidation\": \"La fecha de inicio debe ser anterior {0}\",\r\n \"dxGantt-dialogEndDateValidation\": \"La fecha de finalización debe ser posterior {0}\",\r\n\r\n \"dxGallery-itemName\": \"Gallery item\",\r\n\r\n \"dxMultiView-elementAriaRoleDescription\": \"MultiView\",\r\n \"dxMultiView-elementAriaLabel\": \"Use the arrow keys or swipe to navigate between views\",\r\n \"dxMultiView-itemAriaRoleDescription\": \"View\",\r\n \"dxMultiView-itemAriaLabel\": \"{0} of {1}\",\r\n\r\n \"dxSplitter-resizeHandleAriaLabel\": \"Split bar\"\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { AppInjector } from '../injector/injector.module';\r\nimport { Observable, forkJoin, of, mergeMap, firstValueFrom } from 'rxjs';\r\nimport { BaseEntitiesResponse, BaseResponse, CompanyInfo, GenericListEntity } from '@base/entities/BaseEntities';\r\nimport { EnumSystemOptions } from './sysenums.enum';\r\nimport { SysGlobals } from './sysglobals';\r\nimport { M4UCities } from '../../common/Cities';\r\nimport config from 'devextreme/core/config';\r\nimport { loadMessages, locale } from \"devextreme/localization\";\r\nimport { ResourcesService } from './resources.service';\r\nimport { ResourcesDEVX_HE } from '../../_resources/DEVX.he';\r\nimport { ResourcesDEVX_ES } from '../../_resources/DEVX.es';\r\nimport { DevExpressService } from './devexpress.service';\r\nimport { SystemEndpoint } from '../endpoints/system.endpoint';\r\nimport { SystemOptionsEndpoint } from '../endpoints/system-options.endpoint';\r\nimport { NavigatorService } from './navigator.service';\r\nimport { SessionService } from './session.service';\r\nimport { AppConfigService } from '@configuration/app.config.service';\r\nimport { EnumLanguages } from './sysenums.enum';\r\nimport { SystemOptionsService } from './system-options.service';\r\nimport {UiService} from '@core/framework/ui.service';\r\nimport { SysEventsService } from './sysevents.service';\r\nimport { DefaultRouteParams } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { LocalStorageService } from './local-storage.service';\r\n\r\n@Injectable()\r\nexport class FrameworkService {\r\n constructor(\r\n public systemEndpoint: SystemEndpoint,\r\n public systemOptionsEndpoint: SystemOptionsEndpoint,\r\n private resources: ResourcesService,\r\n private devExpress: DevExpressService,\r\n private appConfigService: AppConfigService,\r\n private sessionService: SessionService,\r\n private systemOptionsService: SystemOptionsService,\r\n private navigator: NavigatorService,\r\n private ui: UiService,\r\n private localStorageService: LocalStorageService,\r\n private sysEventsService: SysEventsService) { }\r\n\r\n //Variables\r\n private m_CompanyInfoDict: { [language: string]: CompanyInfo } = {};\r\n private m_bIsFrameworkInitialized: boolean;\r\n\r\n //Checks whether currently building this custom build\r\n public IsCustomBuild(build: string): boolean {\r\n return (this.appConfigService.M4UConfig.customBuild == build ? true : false);\r\n }\r\n\r\n //Shortcut to system options so that Framework is the only one that needs to be DI\r\n public SystemOption(OptionName: EnumSystemOptions | string): any {\r\n return this.systemOptionsService.getSystemOption(OptionName);\r\n }\r\n\r\n //Shortcut to system options so that Framework is the only one that needs to be DI\r\n public SystemOptionFlag(OptionName: EnumSystemOptions | string): boolean {\r\n return this.systemOptionsService.getSystemOptionAsBoolean(OptionName);\r\n }\r\n\r\n //Shortcut to system options so that Framework is the only one that needs to be DI\r\n public get CompanyInfo(): CompanyInfo {\r\n return this.m_CompanyInfoDict[SysGlobals.Language];\r\n }\r\n\r\n public IsFrameworkInitialized(): boolean {\r\n return this.m_bIsFrameworkInitialized;\r\n }\r\n\r\n public Do(serviceResponse: Observable, bShowSuccessMessage: boolean = true, after?: (afterResponse: BaseResponse | Blob) => void, fail?: (failResponse: BaseResponse | Blob) => void) {\r\n serviceResponse.subscribe((response: BaseResponse | Blob) => {\r\n if (response instanceof Blob) {\r\n after(response);\r\n }\r\n else {\r\n const baseResponse = response as BaseResponse;\r\n if (baseResponse.IsSuccess) {\r\n if (bShowSuccessMessage) this.ui.InfoMessage(this.resources.RC(\"msgSuccess\"));\r\n if (after != undefined) after(response);\r\n }\r\n else {\r\n if (fail != undefined) {\r\n fail(response);\r\n }\r\n else {\r\n if (baseResponse.ResponseCode == 999) {\r\n this.ui.UnexpectedMessage(baseResponse.ResponseMessage);\r\n } else {\r\n this.ui.StopMessage(baseResponse.ResponseMessage);\r\n }\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n //Initialize the framework\r\n InitializeFramework(resolve): any {\r\n //Dispatch 'frameworkInitStarted' event\r\n //Syntax was adapted to work in the IE browser\r\n var event = document.createEvent('Event');\r\n event.initEvent('frameworkInitStarted', true, true);\r\n document.dispatchEvent(event);\r\n //Init company info\r\n forkJoin\r\n (\r\n [this.systemEndpoint.GetCompanyInfo(),\r\n this.systemEndpoint.GetSystemOptions(this.GetFirstModuleName())]\r\n ).subscribe(([responseCompanyInfo, responseSystemOptions]) => {\r\n //Map company info\r\n let companyInfo;\r\n if (responseCompanyInfo.IsSuccess) {\r\n companyInfo = responseCompanyInfo.Entity;\r\n }\r\n else {\r\n this.ui.UnexpectedMessage(`Unable to load company info. Please reload the application ${responseCompanyInfo.ResponseMessage}`);\r\n \r\n //Load some defaults, so app can continue at least to show the login screen or work in debug mode, \r\n //where boot process is not stopped at login screen if there are no settings\r\n companyInfo = new CompanyInfo;\r\n companyInfo.DecimalSeparator = \".\";\r\n companyInfo.ThousandsSeparator = \",\";\r\n companyInfo.DateFormatLong = \"dd/MM/yyyy\";\r\n }\r\n this.InitCompanyInfoDictinary(companyInfo);\r\n \r\n //Map system options\r\n if (responseSystemOptions.IsSuccess) {\r\n this.systemOptionsService.setOptions(responseSystemOptions.Entities);\r\n }\r\n else {\r\n this.ui.UnexpectedMessage(`Unable to load system options. Please reload the application ${responseSystemOptions.ResponseMessage}`);\r\n }\r\n \r\n //Initialize language\r\n this.InitLanguage()\r\n \r\n //Initialize devexpress\r\n this.InitializeDevExpress();\r\n \r\n // Initalize injectable components options\r\n this.InitializeInjectableComponentsOptions();\r\n \r\n //Signal we can continue\r\n this.m_bIsFrameworkInitialized = responseCompanyInfo.IsSuccess && responseSystemOptions.IsSuccess;\r\n resolve();\r\n });\r\n\r\n }\r\n\r\n public InitializeDevExpress() {\r\n this.devExpress.InitializeDevExpress(this);\r\n }\r\n\r\n //Handle language change\r\n public InitLanguage() {\r\n //Set default\r\n //Check in local storage\r\n try {\r\n if (SysGlobals.Language == undefined) SysGlobals.Language = this.localStorageService.GetItem(\"Language\");\r\n } catch (e) { }\r\n if (SysGlobals.Language == undefined) SysGlobals.Language = this.appConfigService.M4UConfig.defaultLanguage;\r\n\r\n //Initialize DevExpress translation messages\r\n if (SysGlobals.Language == EnumLanguages.Hebrew) loadMessages(ResourcesDEVX_HE);\r\n if (SysGlobals.Language == EnumLanguages.Spanish) loadMessages(ResourcesDEVX_ES);\r\n locale(SysGlobals.Language.toLowerCase());\r\n\r\n //Initialize devexpress stuff\r\n config(\r\n {\r\n rtlEnabled: SysGlobals.Language == EnumLanguages.Hebrew ? true : false,\r\n forceIsoDateParsing: true\r\n });\r\n\r\n //Init resources\r\n this.resources.InitDictionaries();\r\n\r\n }\r\n\r\n InitCompanyInfoDictinary(companyInfo: CompanyInfo) {\r\n let companyInfoHebrew = { ...companyInfo };\r\n companyInfoHebrew.NumberGeneral = `${companyInfoHebrew.NumberGeneral};${companyInfoHebrew.NumberGeneral}-`;\r\n companyInfoHebrew.NumberPercent = `${companyInfoHebrew.NumberPercent};${companyInfoHebrew.NumberPercent}-`;\r\n companyInfoHebrew.NumberPrice = `${companyInfoHebrew.NumberPrice};${companyInfoHebrew.NumberPrice}-`;\r\n companyInfoHebrew.NumberQuantity = `${companyInfoHebrew.NumberQuantity};${companyInfoHebrew.NumberQuantity}-`;\r\n companyInfoHebrew.NumberRate = `${companyInfoHebrew.NumberRate};${companyInfoHebrew.NumberRate}-`;\r\n companyInfoHebrew.NumberSum = `${companyInfoHebrew.NumberSum};${companyInfoHebrew.NumberSum}-`;\r\n\r\n this.m_CompanyInfoDict[EnumLanguages.Hebrew] = companyInfoHebrew;\r\n this.m_CompanyInfoDict[EnumLanguages.English] = companyInfo;\r\n this.m_CompanyInfoDict[EnumLanguages.Spanish] = companyInfo;\r\n }\r\n\r\n GetCities(): Observable {\r\n var oResult = new BaseEntitiesResponse;\r\n oResult.IsSuccess = true;\r\n oResult.Entities = M4UCities.map((element) => {\r\n return new GenericListEntity(element, element);\r\n });\r\n\r\n return of(oResult);\r\n }\r\n\r\n NavigateDefault(): Promise {\r\n //SysGlobals.LastNavigationUrl = SysGlobals.LastNavigationParams = undefined;\r\n\r\n return firstValueFrom(\r\n this.appConfigService.AppConfig.OnGetDefaultRouteParams(this.sessionService.UserInfos[0])\r\n .pipe(\r\n mergeMap(defaultRouteParams => {\r\n if (!defaultRouteParams || !defaultRouteParams.Route) {\r\n defaultRouteParams = new DefaultRouteParams;\r\n defaultRouteParams.Route = '/system/login';\r\n };\r\n\r\n return this.navigator.Navigate([defaultRouteParams.Route], defaultRouteParams.Params).then((result) => {\r\n this.sysEventsService.NavigateDefault(result);\r\n return Promise.resolve(true);\r\n });\r\n })\r\n )\r\n );\r\n }\r\n\r\n private InitializeInjectableComponentsOptions() {\r\n this.appConfigService.AppConfig.GetInjectableComponentOptions().subscribe((options) => {\r\n SysGlobals.InjectableComponentsOptions = options;\r\n });\r\n }\r\n\r\n private GetFirstModuleName(): string {\r\n const moduleNames = this.appConfigService.AppConfig.ModuleName.split(',');\r\n return moduleNames[0];\r\n }\r\n}\r\n\r\n//Entry point for framework initialization\r\nexport function OnInitializeFramework(): () => Promise {\r\n //Initialize stuff that require pulling from the server\r\n return (): Promise => {\r\n return new Promise((resolve, reject) => {\r\n var service = AppInjector.get(FrameworkService);\r\n service.InitializeFramework(resolve);\r\n });\r\n };\r\n}\r\n","import { Injectable, 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 { Injectable } from '@angular/core';\r\nimport { APIGatewayService } from '../gateway/APIGateway.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LocalStorageService {\r\n\r\n private _localStoragePrefix: string;\r\n\r\n constructor(private apiGatewayService: APIGatewayService,) {\r\n this._localStoragePrefix = this.apiGatewayService.GetAPIURL();\r\n this.MigrateOldStorage();\r\n }\r\n\r\n SetItem(key: string, value: string) {\r\n const prefixedKey = this.GetPrefixedKey(key);\r\n localStorage.setItem(prefixedKey, value);\r\n }\r\n\r\n GetItem(key: string): string {\r\n const prefixedKey = this.GetPrefixedKey(key);\r\n return localStorage.getItem(prefixedKey);\r\n }\r\n\r\n RemoveItem(key: string) {\r\n const prefixedKey = this.GetPrefixedKey(key);\r\n localStorage.removeItem(prefixedKey);\r\n }\r\n\r\n Clear() {\r\n Object.keys(localStorage).forEach((key) => {\r\n if (key.startsWith(this._localStoragePrefix)) {\r\n localStorage.removeItem(key);\r\n }\r\n });\r\n }\r\n\r\n private GetPrefixedKey(key: string): string {\r\n return `${this._localStoragePrefix}${key}`;\r\n }\r\n\r\n private MigrateOldStorage() {\r\n if(this.GetItem('migratedOldStorage')) {\r\n return;\r\n }\r\n\r\n Object.keys(localStorage).forEach((key) => {\r\n if (!key.startsWith(this._localStoragePrefix)) {\r\n const newKey = this.GetPrefixedKey(key);\r\n const value = localStorage.getItem(key);\r\n\r\n if (value !== null) {\r\n localStorage.setItem(newKey, value);\r\n }\r\n }\r\n });\r\n\r\n this.SetItem('migratedOldStorage', 'true');\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, CanActivate, RouterStateSnapshot } from '@angular/router';\r\nimport { LoginParams } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Observable, of } from 'rxjs';\r\nimport { Utils } from '../helpers/Utils';\r\nimport { LoginService } from './login.service';\r\nimport { NavigatorService } from './navigator.service';\r\nimport { SessionService } from './session.service';\r\nimport { EnumLoginSecureKeyTypes } from './sysenums.enum';\r\nimport { SysGlobals } from './sysglobals';\r\n\r\n@Injectable()\r\nexport class LoginGuard implements CanActivate {\r\n constructor(\r\n private sessionService: SessionService,\r\n private navigator: NavigatorService,\r\n private loginService: LoginService\r\n ) { }\r\n\r\n canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable {\r\n if (this.sessionService.IsLoggedIn) return of(true);\r\n\r\n const [returnUrl, returnUrlParamsSessionID] = this.getParams(state.url, 'SessionID', true) ;\r\n\r\n const currentSessionID = this.sessionService.GetSessionID();\r\n const paramsSessionID = this.navigator.GetQueryParams(this.navigator.IsCurrentRouteWindow()).SessionID;\r\n const sessionID = paramsSessionID || returnUrlParamsSessionID || currentSessionID;\r\n if (!Utils.IsEmpty(sessionID)) {\r\n const loginParams = new LoginParams;\r\n loginParams.SecureKey = sessionID;\r\n loginParams.SecureKeyType = EnumLoginSecureKeyTypes.Session;\r\n return this.loginService.DoLogin(loginParams, !!currentSessionID, !currentSessionID, \r\n () => this.navigator.NavigateByUrl(returnUrl), () => this.goToLoginPage(returnUrl));\r\n }\r\n\r\n this.goToLoginPage(returnUrl);\r\n return of(false);\r\n }\r\n\r\n private goToLoginPage(returnUrl: string) {\r\n this.navigator.Navigate(['/system/login'], { Language: SysGlobals.Language, ReturnUrl: returnUrl });\r\n }\r\n\r\n private getParams(url: string, key: string, isRemove: boolean = false) {\r\n const valueMatch = url.match(new RegExp('(._)?' + key + '=([^&]+)'));\r\n const value = valueMatch ? valueMatch[2] : null;\r\n \r\n if (isRemove) {\r\n const paramRegex = `(._)?${key}=[^&]+`;\r\n url = url.replace(new RegExp(`(\\\\?${paramRegex}$)|(&${paramRegex}$)`), ''); //ends url, just remove\r\n url = url.replace(new RegExp(`\\\\?${paramRegex}&`), '?'); // starts of query params\r\n url = url.replace(new RegExp(`&${paramRegex}&`), '&'); // middle of query params\r\n }\r\n \r\n return [url, value];\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { BaseDataResponse, BaseEntityResponse, LoginParams, WebAPILoginResponse } from '@base/entities/BaseEntities';\r\nimport { EnumNotificationDeliveryOptions } from '@core/framework/sysenums.enum';\r\nimport { UiService } from '@core/framework/ui.service';\r\nimport { AppConfigService } from '@m4u-angular/configuration/app.config.service';\r\nimport { firstValueFrom, Observable, of } from 'rxjs';\r\nimport { map, mergeMap, tap } from 'rxjs/operators';\r\nimport { LoginEndpoint } from './../endpoints/login.endpoint';\r\nimport { FrameworkService } from './framework.service';\r\nimport { NavigatorService } from './navigator.service';\r\nimport { RC } from './resources.service';\r\nimport { RouteHistoryService } from './route-history.service';\r\nimport { SessionService } from './session.service';\r\nimport { EnumCheckCredentialsResult } from './sysenums.enum';\r\nimport { ClientFingerprintService } from './client-fingerprint.service';\r\nimport { SysGlobals } from './sysglobals';\r\n\r\n@Injectable()\r\nexport class LoginService {\r\n\r\n constructor(private Navigator: NavigatorService,\r\n private LoginEndpoint: LoginEndpoint,\r\n private Framework: FrameworkService,\r\n private SessionService: SessionService,\r\n private UI: UiService,\r\n private routeHistoryService: RouteHistoryService,\r\n private appConfigService: AppConfigService,\r\n private clientFingerprintService: ClientFingerprintService\r\n ) { }\r\n\r\n DoLogin(Params: LoginParams, bExistingSession: boolean, bIsSaveCredentials: boolean, fAfterInit: () => void, fLoginFailed: (responseSession: BaseEntityResponse) => void = null, mfaCodeSent: (deliveryOption: EnumNotificationDeliveryOptions) => void = null) {\r\n Params.ClientFingerprint = this.clientFingerprintService.GetClientFingerprint();\r\n return this.LoginEndpoint.Login(Params).pipe(\r\n mergeMap((response: BaseEntityResponse) => {\r\n if (!response.IsSuccess) {\r\n this.UI.StopMessage(response.ResponseMessage);\r\n if (fLoginFailed) fLoginFailed(response);\r\n return of(false);\r\n }\r\n switch (response.Entity.CheckResult) {\r\n case EnumCheckCredentialsResult.Success:\r\n return this.OnLoginSuccess(response, bExistingSession, bIsSaveCredentials, Params.Language, fAfterInit);\r\n case EnumCheckCredentialsResult.PasswordExpired:\r\n this.Navigator.Navigate(['/system/passwordchangeexpired'], { UserName: Params.UserName });\r\n return of(false);\r\n case EnumCheckCredentialsResult.Failure:\r\n this.UI.StopMessage(response.Entity.CheckResultMessage);\r\n if (fLoginFailed) fLoginFailed(response);\r\n return of(false);\r\n case EnumCheckCredentialsResult.MFAEmailSent:\r\n mfaCodeSent && mfaCodeSent(EnumNotificationDeliveryOptions.Email);\r\n return of(false);\r\n case EnumCheckCredentialsResult.MFASMSSent:\r\n mfaCodeSent && mfaCodeSent(EnumNotificationDeliveryOptions.SMS);\r\n return of(false);\r\n case EnumCheckCredentialsResult.NoMID:\r\n if (bExistingSession) this.OnLoginBySessionFailed();\r\n this.Navigator.Navigate(['/system/midstore']);\r\n return of(false);\r\n case EnumCheckCredentialsResult.SessionFrozen:\r\n this.UI.StopMessage(RC('errorSessionIsFrozen'));\r\n if (fLoginFailed) fLoginFailed(response);\r\n //this.Navigator.Navigate(['/system/login'], { Language: SysGlobals.Language });\r\n return of(false);\r\n default:\r\n if (bExistingSession) this.OnLoginBySessionFailed();\r\n this.UI.StopMessage(response.Entity.CheckResultMessage);\r\n if (fLoginFailed) fLoginFailed(response);\r\n return of(false);\r\n }\r\n })\r\n );\r\n }\r\n\r\n //Handle succesfull login\r\n private OnLoginSuccess(response: BaseEntityResponse, bExistingSession: boolean, bIsSaveCredentials: boolean, sLanguage: string, fAfterInit: () => void) {\r\n //If system options were not loaded, prevent logging in\r\n //Do this check only if login was successfull, so that if not the regular message is displayed\r\n if (!this.Framework.IsFrameworkInitialized()) {\r\n this.UI.UnexpectedMessage(RC('errorNotInitialized'));\r\n return of(false);\r\n }\r\n\r\n //Save session id and language in local storage, or clear if saving was not specified\r\n if (bIsSaveCredentials && !bExistingSession) {\r\n this.SessionService.SaveSessionCredentials(response.Entity.SessionID, response.Entity.DisplayUserName);\r\n }\r\n\r\n if (!bIsSaveCredentials && !bExistingSession) {\r\n this.SessionService.ClearSessionCredentials();\r\n }\r\n\r\n //Set session\r\n return this.SessionService.SetSession(response.Entity, () => {\r\n this.routeHistoryService.ClearHistory();\r\n this.routeHistoryService.StartSaveHistory();\r\n fAfterInit && fAfterInit();\r\n }, () => {\r\n this.Navigator.Navigate(['/system/login']);\r\n });\r\n }\r\n\r\n //Clear invalid sessionid, and let the user login on his own\r\n private OnLoginBySessionFailed() {\r\n this.SessionService.ClearSessionCredentials();\r\n }\r\n\r\n DoLogout(fAfterLogout: () => void) {\r\n this.LoginEndpoint.Logout()\r\n .pipe(\r\n tap(response => {\r\n //Even if there is an error, go to login screen anyway, so the user won't be stuck\r\n if (!response.IsSuccess) this.UI.UnexpectedMessage(response.ResponseMessage);\r\n }))\r\n .subscribe(() => {\r\n this.SessionService.SetSession(undefined, null, () => {\r\n this.routeHistoryService.ClearHistory();\r\n fAfterLogout && fAfterLogout();\r\n });\r\n });\r\n }\r\n\r\n ImpersonateLogin(credentialID: number): Observable {\r\n return this.LoginEndpoint.ImpersonateLogin(credentialID).pipe(mergeMap(async (response: BaseEntityResponse) => {\r\n if (!response.IsSuccess) {\r\n response.ResponseMessage && this.UI.StopMessage(response.ResponseMessage);\r\n return false;\r\n }\r\n\r\n const defaultRouteParams = await firstValueFrom(\r\n this.appConfigService.AppConfig.OnGetDefaultRouteParams(response.Entity.UserInfo[this.ModuleName]));\r\n if (!defaultRouteParams || !defaultRouteParams.Route) return false;\r\n\r\n const params = { ...defaultRouteParams.Params || {}, SessionID: response.Entity.SessionID };\r\n const url = this.Navigator.GetUrl(defaultRouteParams.Route, params);\r\n this.Navigator.NavigateExternal(url);\r\n return true;\r\n }));\r\n }\r\n\r\n private get ModuleName(): string {\r\n const moduleNames = this.appConfigService.AppConfig.ModuleName.split(',');\r\n return moduleNames[0];\r\n }\r\n}\r\n","\r\nimport { Injectable } from '@angular/core';\r\nimport { ActivatedRoute, Route, Router } from '@angular/router';\r\nimport { IBaseModuleComponent } from '@base/component/IBaseComponent';\r\nimport { AppConfigService } from '@configuration/app.config.service';\r\nimport { Utils } from '../helpers/Utils';\r\nimport { ScreenService } from './screen.service';\r\nimport { SessionService } from './session.service';\r\nimport { SysEventsService } from './sysevents.service';\r\nimport { SysGlobals } from './sysglobals';\r\n\r\n/*\r\nThe idea of navigation process is as follows:\r\n1. Get the segments from the function params. Then remove all prefixes (randomizers and module name)\r\n2. Get the target page and find the route in the \"clean\" routes (already prepared, without any prefixes)\r\n3. Figure out is that route is a window or not\r\n4. Add query params to the route\r\n5. Figure out the module name by route component\r\n6. Add page randomizer prefix and module name to the route\r\n7. Navigate to the page or window\r\n*/\r\n\r\nexport const M4URouteRandomizers: string[] =\r\n [\r\n 'X_',\r\n 'Y_',\r\n 'Z_',\r\n 'W_',\r\n 'T_'\r\n ];\r\n\r\n@Injectable()\r\nexport class NavigatorService {\r\n constructor(\r\n private router: Router,\r\n private activatedRoute: ActivatedRoute,\r\n private sysEvents: SysEventsService,\r\n private appConfigService: AppConfigService,\r\n private sessionService: SessionService,\r\n private screenService: ScreenService) { }\r\n\r\n public IsCurrentRouteWindow(routeUrl?: string) {\r\n const windowIndex = window.location.pathname.indexOf('window:');\r\n return windowIndex > -1 || (routeUrl && routeUrl.indexOf('window:') > -1);\r\n }\r\n\r\n //Return custom data attached to this route\r\n public GetCustomRouteData() {\r\n return this.activatedRoute.snapshot.data;\r\n }\r\n\r\n public GetCurrentRouteWithoutParams() {\r\n\r\n let route = this.activatedRoute;\r\n let url = '';\r\n\r\n // get full route like '/pages/general/notification-template'\r\n while (route?.snapshot?.url.length > 0) {\r\n url = `/${route.snapshot.url[0].path}${url}`;\r\n route = route.parent;\r\n }\r\n\r\n return url;\r\n }\r\n\r\n //Return current query params\r\n private GetQueryParamsInternal(): any {\r\n const params = this.activatedRoute.snapshot.queryParams;\r\n const newParams = {};\r\n\r\n for (const [key, value] of Object.entries(params)) {\r\n newParams[key] = this.getParamValue(value);\r\n }\r\n\r\n return newParams;\r\n }\r\n\r\n //Return query params that are relevant for the route, renamed back to their original names\r\n public GetQueryParams(bIsWindow: boolean): any {\r\n const existingParams = this.GetQueryParamsInternal();\r\n\r\n //Remove prefixes and copy to new object\r\n return this.GetQueryParamsWithoutPrefixes(existingParams, bIsWindow);\r\n }\r\n\r\n public GetQueryParamsWithoutPrefixes(params: any, bIsWindow: boolean): any {\r\n const sPrefix = this.GetQueryParamsPrefix(bIsWindow);\r\n const newParams = {};\r\n for (const key in params) {\r\n let paramKey = key;\r\n if (key.startsWith(sPrefix)) paramKey = key.substring(sPrefix.length);\r\n const value = params[key] === 'false' ? false : params[key] === 'true' ? true : params[key];\r\n Object.assign(newParams, { [paramKey]: value });\r\n }\r\n\r\n return newParams;\r\n }\r\n\r\n public ClearQueryParams() {\r\n this.activatedRoute.snapshot.queryParams = {};\r\n }\r\n\r\n //Return the prefix string for query params for the route\r\n private GetQueryParamsPrefix(bIsWindow: boolean): string {\r\n return bIsWindow ? 'W_' : 'P_';\r\n }\r\n\r\n\r\n //Return the params for the route\r\n public GetRouteParams(): any {\r\n const params = this.activatedRoute.snapshot.params;\r\n return Object.keys(params).length ? params : this.GetQueryParams(this.IsCurrentRouteWindow());\r\n }\r\n\r\n //Return current route\r\n //use window since activatedRoute is not always correct, due to DI being on the component level, \r\n //and some components are not related to route\r\n public GetCurrentRoute(): string {\r\n const sLocation: string = `${window.location.pathname}${window.location.search}`;\r\n return this.FixDeploymentLocation(sLocation);\r\n }\r\n\r\n //Main navigation function\r\n //Special value - params will be null to signal closing the window route\r\n public Navigate(params: any[], optionalParams?: any, ModuleName?: any) {\r\n\r\n this.sessionService.RefreshExpiredSessionTimeout();\r\n\r\n const urlTree = this.GetUrlTree(params, optionalParams, ModuleName);\r\n return this.router.navigateByUrl(urlTree);\r\n\r\n }\r\n\r\n public NavigateByUrl(url: string) {\r\n this.sessionService.RefreshExpiredSessionTimeout();\r\n\r\n return this.router.navigateByUrl(url);\r\n }\r\n\r\n private GetUrlTree(params: any[], optionalParams?: any, ModuleName?: any) {\r\n //Start as an array\r\n let segments: string[];\r\n if (typeof params === 'string') segments.push(params); else segments = params;\r\n\r\n if (segments && !segments.some(x => x !== '')) return;\r\n\r\n //Clean, and put all segments in onc nice string array\r\n let segmentsClean: string[] = [];\r\n let sTargetPage: string;\r\n if (segments != null) {\r\n segments.forEach(sSegment => {\r\n sSegment = sSegment && sSegment.toString();\r\n if (sSegment) {\r\n sSegment.split('/').forEach(sPart => {\r\n if (sPart != null && sPart != '') {\r\n sPart = sPart.replace('(', '').replace(')', '');\r\n\r\n //Remove randomizers from route path\r\n const sPrefix = M4URouteRandomizers.find(item => sPart.startsWith(item));\r\n if (sPrefix) sPart = sPart.substring(sPrefix.length);\r\n\r\n //Remove module prefix from route path\r\n const modulePrefix = this.appConfigService.AppConfig.ModuleName.split(',').find(x => sPart.startsWith(x));\r\n if (modulePrefix) sPart = sPart.substring(modulePrefix.length + 1);\r\n\r\n segmentsClean.push(sPart);\r\n }\r\n });\r\n }\r\n });\r\n\r\n //Set target page we are navigating to\r\n const generalIndex = segmentsClean.indexOf('general');\r\n sTargetPage = generalIndex >= 0 ? segmentsClean[2] : segmentsClean[1];\r\n } else {\r\n segmentsClean = null;\r\n sTargetPage = null;\r\n }\r\n\r\n //Find the relevant route by the 2nd segment - match it with the route first segment\r\n //Check the router outlet to determine if its a window\r\n let bIsWindow: boolean;\r\n let route;\r\n if (sTargetPage != null) {\r\n //Get route by target page\r\n const cleanRoutes = this.GetCleanRoutes(this.router.config);\r\n const targetRoutes = cleanRoutes.filter(x => x.path.split('/')[0] == sTargetPage);\r\n if (targetRoutes.length > 1) {\r\n route = optionalParams && Object.keys(optionalParams).some(x => x == 'ShowAsWindow') && optionalParams['ShowAsWindow']\r\n ? targetRoutes.find(x => x.outlet == 'window')\r\n : targetRoutes.find(x => !x.outlet);\r\n } else if (targetRoutes.length === 1) {\r\n route = targetRoutes[0];\r\n }\r\n bIsWindow = (route != undefined && route.outlet == 'window' ? true : false);\r\n } else {\r\n bIsWindow = true;\r\n }\r\n\r\n //Rename query params that we need to pass according to the route we use - window/primary\r\n //Build a new structure in order not to modify the passed in param\r\n const sPrefix = this.GetQueryParamsPrefix(bIsWindow);\r\n const newParams = {};\r\n for (const key in optionalParams) {\r\n if (key === 'ShowAsWindow') continue;\r\n Object.assign(newParams, { [sPrefix + key]: this.getParam(optionalParams[key]) });\r\n }\r\n\r\n //Add query params from existing route so that we get a combined list\r\n if (optionalParams == undefined) optionalParams = {};\r\n\r\n //Get module name if not specified, from the current route\r\n if (ModuleName == undefined) {\r\n const routeComponent = (route ? route.component : this.activatedRoute.snapshot.component) as any as IBaseModuleComponent;\r\n ModuleName = routeComponent && routeComponent.ModuleName ? `${routeComponent.ModuleName}_` : '';\r\n } else {\r\n ModuleName = ModuleName + '_';\r\n }\r\n\r\n //Remove pages, and set the prefix\r\n let routePrefix = '';\r\n if (segmentsClean != null) {\r\n const pagesIndex = segmentsClean.indexOf('pages');\r\n if (pagesIndex >= 0) {\r\n routePrefix = segmentsClean.shift();\r\n }\r\n //Add general to primary outlet\r\n const generalIndex = segmentsClean.indexOf('general');\r\n if (generalIndex >= 0) {\r\n routePrefix = `${routePrefix}/${segmentsClean.shift()}`;\r\n }\r\n //Add randomizer and module name prefixes to the page route\r\n if (pagesIndex >= 0) {\r\n segmentsClean[0] = this.GetPagesPrefix() + ModuleName + segmentsClean[0];\r\n }\r\n } else {\r\n const currentRoute = this.GetCurrentRoute();\r\n const segments = currentRoute.replace(/^\\/|\\/$/g, '').split('/');\r\n\r\n routePrefix = segments.shift();\r\n //Add general to primary outlet\r\n if (segments.indexOf('general') >= 0) {\r\n routePrefix = `${routePrefix}/${segments.shift()}`;\r\n }\r\n }\r\n const windowPrimaryOutlet = [];\r\n let routeSnapshot = this.router.routerState.snapshot.root;\r\n while (routeSnapshot.firstChild) {\r\n routeSnapshot = routeSnapshot.firstChild;\r\n windowPrimaryOutlet.push(routeSnapshot.url.map(x => x.path).join('/'));\r\n }\r\n\r\n const primaryOutlet = bIsWindow ? windowPrimaryOutlet.join('/').replace(`${routePrefix}/`, '') : segmentsClean;\r\n const windowOutlet = bIsWindow ? segmentsClean : null;\r\n return this.router.createUrlTree([routePrefix, { outlets: { primary: primaryOutlet, window: windowOutlet } }],\r\n { queryParams: newParams });\r\n }\r\n\r\n FixDeploymentLocation(sURL: string): string {\r\n const sPath : string = this.appConfigService.M4UConfig.deploymentLocation;\r\n if(!sURL || sPath == null) return sURL;\r\n const regex = new RegExp(sPath, 'i');\r\n return sURL.replace(regex, '');\r\n }\r\n\r\n\r\n //Get routes from config without randomizer prefixes and module names\r\n public GetCleanRoutes(config: Route[]): Route[] {\r\n let routes = [];\r\n for (let i = 0; i < config.length; i++) {\r\n //Copy route object to avoid modifying real route config\r\n const route = { ...config[i] };\r\n //Remove randomizer prefix from route path\r\n M4URouteRandomizers.forEach(x => {\r\n if (route.path.startsWith(x)) route.path = route.path.replace(x, '');\r\n });\r\n //Remove module name prefix from route path\r\n this.appConfigService.AppConfig.ModuleName.split(',').forEach(x => {\r\n if (route.path.startsWith(x)) route.path = route.path.replace(`${x}_`, '');\r\n });\r\n //Add to \"clean\" routes collection\r\n routes.push(route);\r\n if (route.children) {\r\n //Get \"clean\" route children\r\n const childrenRoutes = this.GetCleanRoutes(route.children);\r\n //Add \"clean\" route children to \"clean\" routes collection\r\n routes = [...routes, ...childrenRoutes];\r\n }\r\n }\r\n //Remove duplicates from \"clean\" routes collection that appeared because of randomizers prefixes\r\n routes = routes.filter((value, index, self) => self.map(x => {\r\n return { path: x.path, outlet: x.outlet };\r\n }).findIndex(x => x.path === value.path && x.outlet === value.outlet) === index);\r\n return routes;\r\n }\r\n\r\n //Switch routes to allow same page navigation\r\n private GetPagesPrefix(): string {\r\n SysGlobals.NavigationSequence = SysGlobals.NavigationSequence == undefined ? 1 : SysGlobals.NavigationSequence + 1;\r\n return M4URouteRandomizers[SysGlobals.NavigationSequence % M4URouteRandomizers.length];\r\n }\r\n\r\n //Send an event to force reload of component\r\n //For now, this should not be used, as same route navigation works fine\r\n public ReloadComponent(sComponentName: string) {\r\n this.sysEvents.OnReloadComponent.emit(sComponentName);\r\n }\r\n\r\n\r\n //Reload current page\r\n public ReloadApplication() {\r\n this.router.navigateByUrl(this.GetCurrentRoute());\r\n }\r\n\r\n //Go to previous page - close the window\r\n public NavigateBack() {\r\n return this.Navigate(null);\r\n }\r\n\r\n public GetUrl(route: string, queryParams: any) {\r\n const params = {};\r\n const sPrefix = this.GetQueryParamsPrefix(false);\r\n Object.keys(queryParams).forEach(key => {\r\n Object.assign(params, { [sPrefix + key]: this.getParam(queryParams[key]) });\r\n });\r\n\r\n const baseUrl = window.location.href.replace(this.router.url, '');\r\n const urlTree = this.GetUrlTree([route], queryParams);\r\n const url = this.router.serializeUrl(urlTree);\r\n return `${baseUrl}${url}`;\r\n }\r\n\r\n //Load external URL in a separate form\r\n public NavigateExternal(sURL: string, bNewWindow: boolean = true) {\r\n if (bNewWindow) {\r\n window.open(sURL, '_blank');\r\n } else {\r\n window.location.href = sURL;\r\n }\r\n }\r\n\r\n public NavigatePhone(sPhone: string) {\r\n this.NavigateExternal(`tel:${sPhone}`);\r\n }\r\n\r\n public NavigateEmail(sEmail: string) {\r\n this.NavigateExternal(`mailto:${sEmail}`);\r\n }\r\n\r\n public NavigateGoogle(sQuery: string) {\r\n this.NavigateExternal(`https://www.google.com/search?q=${sQuery}`);\r\n }\r\n\r\n public NavigateWhatsApp(sPhone: string) {\r\n const sClean = sPhone.replace('-', '').replace(' ', '').replace('.', '');\r\n this.NavigateExternal(`https://api.whatsapp.com/send?phone=972${sClean}`);\r\n }\r\n\r\n public NavigateWaze(sAddress: string) {\r\n if (this.screenService.IsMobile()) {\r\n this.NavigateExternal(`waze://?q=${sAddress}`);\r\n }\r\n\r\n this.NavigateExternal(`https://waze.com/ul?q=${sAddress}&navigate=yes`);\r\n }\r\n\r\n public IsWhatsAppPhone(sPhone: string): boolean {\r\n return (!Utils.IsEmpty(sPhone) && sPhone.startsWith('05'));\r\n }\r\n\r\n private getParam(param: any): any {\r\n if (Utils.IsEmpty(param) || Utils.IsEmpty(param.getFullYear)) return param;\r\n\r\n const date = param as Date;\r\n\r\n return date.toISOString();\r\n }\r\n\r\n private getParamValue(param: any): any {\r\n if (Utils.IsEmpty(param)) return param;\r\n if (Array.isArray(param) || (typeof param === 'string' && !/^[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}$/.test(param))) return param;\r\n\r\n const parts = (param as string).split('-');\r\n return new Date(parseInt(parts[0]), parseInt(parts[1]) - 1, parseInt(parts[2]));\r\n }\r\n}\r\n\r\nexport function PrepareRoutes(routes: Route[]): Route[] {\r\n const result: Route[] = [];\r\n //Copy route object to avoid modifying real routes\r\n const oRoutes: Route[] = [...routes];\r\n //Add randomizer prefixes to the routes\r\n M4URouteRandomizers.forEach((oRandomizer) => oRoutes.forEach(oRoute => result.push(GetRouteWithPrefix(oRoute, oRandomizer))));\r\n return result;\r\n}\r\n\r\nexport function GetRoutesWithPrefix(routes: Route[], prefix: string): Route[] {\r\n const result: Route[] = [];\r\n //Copy route object to avoid modifying real routes\r\n const oRoutes: Route[] = [...routes];\r\n\r\n //Add any prefix to the routes\r\n oRoutes.forEach(oRoute => result.push(GetRouteWithPrefix(oRoute, prefix)));\r\n return result;\r\n}\r\n\r\n//Add any prefix to the single route\r\nexport function GetRouteWithPrefix(oRoute: Route, prefix: string): Route {\r\n //Copy route object to avoid modifying real route\r\n const preparedRoute = { ...oRoute };\r\n //Add prefix to the route path\r\n preparedRoute.path = prefix + preparedRoute.path;\r\n return preparedRoute;\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Notification } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { 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 { Injectable } from '@angular/core';\r\nimport { Notification } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { AppConfigService } from '@m4u-angular/configuration/app.config.service';\r\nimport { ReplaySubject, Subscription } from 'rxjs';\r\nimport { PushMessageEndpoint } from '../endpoints/push-message.endpoint';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class NotificationService {\r\n\r\n private _notificationUnreadSubject = new ReplaySubject(1);\r\n public readonly NotificationUnread$ = this._notificationUnreadSubject.asObservable();\r\n\r\n private _notificationsSubject = new ReplaySubject(1);\r\n public readonly Notifications$ = this._notificationsSubject.asObservable();\r\n\r\n private _notificationReadSubscription: Subscription;\r\n private _notificationUnReadSubscription: Subscription;\r\n private _timerId: any;\r\n\r\n constructor(private pushMessageEndpoint: PushMessageEndpoint,\r\n private appConfigService: AppConfigService) {\r\n }\r\n\r\n public Start() {\r\n if (!this.appConfigService.AppConfig.IsAllowNotifications) return;\r\n\r\n this.LoadPushMessagesUnread();\r\n this._notificationReadSubscription = this.pushMessageEndpoint.NotificationRead$\r\n .subscribe((result: boolean) => result && this.LoadPushMessagesUnread());\r\n }\r\n\r\n public LoadPushMessagesUnread() {\r\n if (!this.appConfigService.AppConfig.IsAllowNotifications) return;\r\n\r\n this._notificationUnReadSubscription = this.pushMessageEndpoint.GetPushMessagesUnread().subscribe((response) => {\r\n if (!response.IsSuccess) return;\r\n \r\n const unreadPushMessages = response.Data as any;\r\n\r\n this._notificationUnreadSubject.next(unreadPushMessages.Item1);\r\n this._notificationsSubject.next(unreadPushMessages.Item2);\r\n\r\n !this._timerId && (this._timerId = setInterval(() => this.LoadPushMessagesUnread(), 60000));\r\n })\r\n }\r\n\r\n public Stop(): void {\r\n clearInterval(this._timerId);\r\n this._notificationReadSubscription && !this._notificationReadSubscription.closed && this._notificationReadSubscription.unsubscribe();\r\n this._notificationUnReadSubscription && !this._notificationUnReadSubscription.closed && this._notificationUnReadSubscription.unsubscribe();\r\n }\r\n}","import {\r\n EnumInfoUTypes,\r\n EnumLanguages,\r\n EnumLogLevel,\r\n EnumMFAMethods,\r\n EnumNotificationDeliveryOptions,\r\n EnumNotificationStatuses,\r\n EnumNotificationTemplateEditingMode,\r\n EnumPopupShowStatuses,\r\n EnumPrintingType,\r\n EnumSystemOptionDataTypes,\r\n EnumSystemOptions,\r\n EnumUserLoginStatus,\r\n EnumYesNo,\r\n HistoryEventTypesEnum\r\n} from '@core/framework/sysenums.enum';\r\n\r\nexport const Resources_EN =\r\n{\r\n Pages:\r\n {\r\n login: 'System Login',\r\n logout: 'Log off',\r\n credentials_activity_status: 'User activity status',\r\n notificationshistory: 'Notifications report',\r\n notification_dispatches: 'Notification dispatches',\r\n notification_servers: 'Notification servers',\r\n notification_templates: 'Notification templates',\r\n notifications: 'Notifications',\r\n system_options: 'System options',\r\n credential_login_history: \"Login history Report\",\r\n request_history: \"Request history\",\r\n credentials_report: 'Credentials report',\r\n credentials_creation: 'New credentials assignment',\r\n data_views: 'Database views management',\r\n menu: 'Menu',\r\n remote_request_history: \"Remote request history\",\r\n NotificationViewComponent: 'Notification',\r\n PrintBoxDialogComponent: 'Print',\r\n SignBoxDialogComponent: 'Sign Document',\r\n ImageBoxDialogComponent: 'Image',\r\n PhotoBoxDialogComponent: 'Photo',\r\n PasswordManageComponent: 'Credentials management',\r\n CredentialsActivityStatusComponent: 'User activity status',\r\n NotificationsHistoryComponent: 'Notifications report',\r\n PreviewDialogComponent: 'Preview',\r\n NotificationDispatchComponent: 'Notification dispatch',\r\n NotificationDispatchListComponent: 'Notification dispatches',\r\n NotificationServerComponent: 'Notification server',\r\n NotificationServerListComponent: 'Notification servers',\r\n NotificationTemplateListComponent: 'Notification templates',\r\n NotificationTemplateComponent: 'Notification template',\r\n HtmlBoxDialogComponent: 'HTML Editor',\r\n NotificationTestDialogComponent: 'Notification test',\r\n NotificationPreviewDialogComponent: 'Notification preview',\r\n SystemOptionsComponent: 'System options',\r\n AddSystemOptionDialogComponent: 'Add option',\r\n BarcodeBoxDialogComponent: 'Scan barcode/QR-code',\r\n CredentialLoginHistoryComponent: \"Login History Report\",\r\n RequestHistoryListComponent: \"Request history\",\r\n RequestHistoryComponent: \"Request\",\r\n RemoteRequestHistoryListComponent: \"Remote request history\",\r\n RemoteRequestHistoryComponent: \"Remote request\",\r\n WelcomeUserDialogComponent: \"Welcome message\",\r\n HistoryViewComponent: 'Document changes history',\r\n SystemCredentialsComponent: 'Credentials Report',\r\n SystemCredentialsCreationComponent: 'New credentials assignment',\r\n WelcomeMessageConfigDialogComponent: 'Welcome Notification',\r\n DataViewListComponent: 'Data Views',\r\n MenuButtonListComponent: 'Main Menu',\r\n ShareDialogComponent: 'Share',\r\n },\r\n Lists:\r\n {\r\n Languages:\r\n [\r\n {\r\n Value: EnumLanguages.Hebrew,\r\n Text: \"Hebrew\",\r\n },\r\n {\r\n Value: EnumLanguages.English,\r\n Text: \"English\"\r\n },\r\n {\r\n Value: EnumLanguages.Spanish,\r\n Text: \"Spanish\"\r\n },\r\n ],\r\n\r\n NotificationDeliveryOptions: [\r\n {\r\n Value: EnumNotificationDeliveryOptions.Email,\r\n Text: 'Email',\r\n ID: 0\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.SMS,\r\n Text: 'SMS',\r\n ID: 1\r\n }, \r\n {\r\n Value: EnumNotificationDeliveryOptions.WhatsApp,\r\n Text: 'WhatsApp',\r\n ID: 3\r\n }\r\n ],\r\n NotificationDispatchDeliveryOptions: [\r\n {\r\n Value: EnumNotificationDeliveryOptions.Email,\r\n Text: 'Email'\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.SMS,\r\n Text: 'SMS'\r\n }, \r\n {\r\n Value: EnumNotificationDeliveryOptions.WhatsApp,\r\n Text: 'WhatsApp'\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.PushMessage,\r\n Text: 'Push'\r\n },\r\n ],\r\n NotificationTemplateEditingModes: [\r\n {\r\n Value: EnumNotificationTemplateEditingMode.None,\r\n Text: 'None',\r\n ID: 0,\r\n SortOrder: 1\r\n },\r\n {\r\n Value: EnumNotificationTemplateEditingMode.Preview,\r\n Text: 'Preview only',\r\n ID: 4,\r\n SortOrder: 2\r\n },\r\n {\r\n Value: EnumNotificationTemplateEditingMode.EditPrefix,\r\n Text: 'Edit prefix',\r\n ID: 1,\r\n SortOrder: 3\r\n },\r\n {\r\n Value: EnumNotificationTemplateEditingMode.EditBody,\r\n Text: 'Edit body',\r\n ID: 3,\r\n SortOrder: 4\r\n },\r\n ],\r\n UserCreationOptions: [\r\n {\r\n Value: EnumNotificationDeliveryOptions.Email,\r\n Text: 'Email',\r\n ID: 0\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.SMS,\r\n Text: 'Phone',\r\n ID: 1\r\n }\r\n ],\r\n WelcomeDeliveryOptions: [\r\n {\r\n Value: EnumNotificationDeliveryOptions.Email,\r\n Text: 'Email',\r\n ID: 0,\r\n SortOrder: 1\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.SMS,\r\n Text: 'SMS',\r\n ID: 1,\r\n SortOrder: 2\r\n }, \r\n {\r\n Value: EnumNotificationDeliveryOptions.WhatsApp,\r\n Text: 'WhatsApp',\r\n ID: 3,\r\n SortOrder: 3\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.DontSend,\r\n Text: 'Don\\'t Send',\r\n ID: 4,\r\n SortOrder: 4\r\n }\r\n ],\r\n NotificationTypes: [\r\n {\r\n Value: EnumNotificationDeliveryOptions.Email,\r\n Text: 'Email',\r\n SortOrder: 1,\r\n index: 0,\r\n text: 'Email',\r\n Name: EnumNotificationDeliveryOptions.Email\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.SMS,\r\n Text: 'SMS',\r\n SortOrder: 2,\r\n index: 1,\r\n text: 'SMS',\r\n Name: EnumNotificationDeliveryOptions.SMS\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.PushMessage,\r\n Text: 'Push message',\r\n SortOrder: 3,\r\n index: 2,\r\n text: 'Push message',\r\n Name: EnumNotificationDeliveryOptions.PushMessage\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.WhatsApp,\r\n Text: 'WhatsApp',\r\n SortOrder: 4,\r\n index: 3,\r\n text: 'WhatsApp',\r\n Name: EnumNotificationDeliveryOptions.WhatsApp\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.Share,\r\n Text: 'Share',\r\n SortOrder: 4,\r\n index: 3,\r\n text: 'Share',\r\n Name: EnumNotificationDeliveryOptions.Share\r\n }\r\n ],\r\n NotificationStatuses:\r\n [\r\n {\r\n Value: EnumNotificationStatuses.Draft,\r\n Text: \"Draft\"\r\n },\r\n {\r\n Value: EnumNotificationStatuses.Sending,\r\n Text: \"Sending\"\r\n },\r\n {\r\n Value: EnumNotificationStatuses.Failure,\r\n Text: \"Failure\"\r\n },\r\n {\r\n Value: EnumNotificationStatuses.Sent,\r\n Text: \"Sent\"\r\n },\r\n ],\r\n NotificationPredefinedSmtpServers: [\r\n {\r\n Text: \"Office 365\",\r\n SMTPServer: \"smtp.office365.com\",\r\n SMTPPort: 587,\r\n SMTPUseSSL: true\r\n },\r\n {\r\n Text: \"Gmail\",\r\n SMTPServer: \"smtp.gmail.com\",\r\n SMTPPort: 111,\r\n SMTPUseSSL: true\r\n },\r\n {\r\n Text: \"SendGrid\",\r\n SMTPServer: \"smtp.sendgrid.com\",\r\n SMTPPort: 111,\r\n SMTPUseSSL: false\r\n }\r\n ],\r\n NotificationPredefinedSmsServers: [\r\n {\r\n Text: \"InforU\",\r\n SMSEndpoint: \"https://uapi.inforu.co.il/SendMessageXml.ashx\",\r\n SMSToken: 111,\r\n SMSEndPointIsInforU: EnumInfoUTypes.InforU\r\n },\r\n {\r\n Text: \"Unicell\",\r\n SMSEndpoint: \"http://api.soprano.co.il/\",\r\n SMSToken: 222,\r\n SMSEndPointIsInforU: EnumInfoUTypes.Unicell\r\n }\r\n ],\r\n MFAMethods:\r\n [\r\n {\r\n Value: EnumMFAMethods.None,\r\n Text: \"None\"\r\n },\r\n {\r\n Value: EnumMFAMethods.Email,\r\n Text: \"Email\"\r\n },\r\n {\r\n Value: EnumMFAMethods.SMS,\r\n Text: \"SMS\"\r\n },\r\n {\r\n Value: EnumMFAMethods.WhatsApp,\r\n Text: \"WhatsApp\"\r\n }\r\n ],\r\n ExportMenuItems: [\r\n {\r\n SortOrder: 0,\r\n Value: 1,\r\n Text: \"Excel\"\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: 2,\r\n Text: \"Print\"\r\n }\r\n ],\r\n PopupShowStatuses: [\r\n {\r\n Value: EnumPopupShowStatuses.None,\r\n Text: \"None\"\r\n },\r\n {\r\n Value: EnumPopupShowStatuses.ToShow,\r\n Text: \"To show\"\r\n },\r\n {\r\n Value: EnumPopupShowStatuses.Showed,\r\n Text: \"Showed\"\r\n }\r\n ],\r\n InfoUTypes: [\r\n {\r\n Value: EnumInfoUTypes.Unicell,\r\n Text: \"Unicell\"\r\n },\r\n {\r\n Value: EnumInfoUTypes.InforU,\r\n Text: \"InforU\"\r\n }\r\n ],\r\n SystemOptions: [\r\n {\r\n Value: EnumSystemOptions.AppNameHE,\r\n Text: 'Application Name Hebrew'\r\n }, {\r\n Value: EnumSystemOptions.AppNameEN,\r\n Text: 'Application Name English'\r\n }, {\r\n Value: EnumSystemOptions.AppURL,\r\n Text: 'Application URL'\r\n }, {\r\n Value: EnumSystemOptions.SessionTimeout,\r\n Text: 'Session timeout'\r\n }, {\r\n Value: EnumSystemOptions.SessionExpiry,\r\n Text: 'Session expiry'\r\n }, {\r\n Value: EnumSystemOptions.EnableRequestLogging,\r\n Text: 'Enable request logging'\r\n }, {\r\n Value: EnumSystemOptions.EnableRemoteLogging,\r\n Text: 'Enable remote logging'\r\n }, {\r\n Value: EnumSystemOptions.ShowExpiredTimeoutAlert,\r\n Text: 'Show expired timeout alert',\r\n DataType: EnumSystemOptionDataTypes.Boolean,\r\n SectionName: 'Framework'\r\n }, {\r\n Value: EnumSystemOptions.ShowAlmostExpiredTimeoutAlert,\r\n Text: 'Show almost expired timeout alert'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportedCredentialsManagement,\r\n Text: 'Support credentials management'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportedUserWelcome,\r\n Text: 'Supported user welcome'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportedPasswordChange,\r\n Text: 'Support password change'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportedPasswordRecovery,\r\n Text: 'Support password recovery'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportedLoginByOTP,\r\n Text: 'Support login by otp'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportedLoginByPassword,\r\n Text: 'Support login by password'\r\n }, {\r\n Value: EnumSystemOptions.IsAutoCreateCredentials,\r\n Text: 'Auto create credentials'\r\n }, {\r\n Value: EnumSystemOptions.AutoCreateCredentialsType,\r\n Text: 'Auto create credentials type'\r\n }, {\r\n Value: EnumSystemOptions.IsRequireTaxNumberForOTP,\r\n Text: 'Require tax number for OTP'\r\n }, {\r\n Value: EnumSystemOptions.PasswordChangeIntervalDays,\r\n Text: 'Password change interval, days'\r\n }, {\r\n Value: EnumSystemOptions.PasswordComplexityLen,\r\n Text: 'Password complexity length'\r\n }, {\r\n Value: EnumSystemOptions.PasswordComplexityMinChars,\r\n Text: 'Password complexity minimum char symbols'\r\n }, {\r\n Value: EnumSystemOptions.PasswordComplexityMinDigits,\r\n Text: 'Password complexity minimum digit symbols'\r\n }, {\r\n Value: EnumSystemOptions.BadLoginAttemptBeforeLock,\r\n Text: 'Bad login. Attempt before lock'\r\n }, {\r\n Value: EnumSystemOptions.BadLoginAttemptsCheckIntervalMinutes,\r\n Text: 'Bad login. Attempts check interval, minutes'\r\n }, {\r\n Value: EnumSystemOptions.BadLoginAttemptLockouIntervalMinutes,\r\n Text: 'Bad login. Attempt lockout interval, minutes'\r\n }, {\r\n Value: EnumSystemOptions.XFrameOptions,\r\n Text: 'XFrame blocking options'\r\n }, {\r\n Value: EnumSystemOptions.IsDeployedBehindLoadBalancer,\r\n Text: 'Deployed behind load balancer / proxy'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportNotificationMethodEmail,\r\n Text: 'Support Email notification method'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportNotificationMethodSMS,\r\n Text: 'Support SMS notification method'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportNotificationMethodWhatsApp,\r\n Text: 'Support WhatsApp notification method'\r\n }, {\r\n Value: EnumSystemOptions.RetentionPeriodRequests,\r\n Text: 'Requests Retention Period'\r\n }, {\r\n Value: EnumSystemOptions.RetentionPeriodRemoteRequests,\r\n Text: 'Remote Requests Retention Period'\r\n }, {\r\n Value: EnumSystemOptions.RetentionPeriodNotifications,\r\n Text: 'Notifications Retention Period'\r\n }, {\r\n Value: EnumSystemOptions.RetentionPeriodSessions,\r\n Text: 'Sessions Retention Period'\r\n }, {\r\n Value: EnumSystemOptions.SessionFingerprintFreezeTimeout,\r\n Text: 'Session Fingerprint Freeze Timeout (mins)'\r\n },\r\n ],\r\n UserLoginStatuses: [\r\n {\r\n Value: EnumUserLoginStatus.All,\r\n Text: \"All\"\r\n },\r\n {\r\n Value: EnumUserLoginStatus.Success,\r\n Text: \"Success\"\r\n },\r\n {\r\n Value: EnumUserLoginStatus.Failure,\r\n Text: \"Failure\"\r\n }\r\n ],\r\n IsSuccessStatuses: [\r\n {\r\n Value: true,\r\n Text: \"Success\"\r\n },\r\n {\r\n Value: false,\r\n Text: \"Failure\"\r\n },\r\n ],\r\n HistoryEventTypesEnum: [\r\n {\r\n Value: HistoryEventTypesEnum.FieldChange,\r\n Text: \"Field changed\"\r\n },\r\n {\r\n Value: HistoryEventTypesEnum.RowAdded,\r\n Text: \"Row added\"\r\n },\r\n {\r\n Value: HistoryEventTypesEnum.RowDeleted,\r\n Text: \"Row deleted\"\r\n },\r\n {\r\n Value: HistoryEventTypesEnum.Special,\r\n Text: \"Special\"\r\n }\r\n ],\r\n YesNo:\r\n [\r\n {\r\n Value: EnumYesNo.Yes,\r\n Text: 'Yes'\r\n },\r\n {\r\n Value: EnumYesNo.No,\r\n Text: 'No'\r\n }\r\n ],\r\n PageTypes: [\r\n {\r\n Value: EnumPrintingType.None,\r\n Text: 'None'\r\n },\r\n {\r\n Value: EnumPrintingType.Report,\r\n Text: 'Report'\r\n },\r\n {\r\n Value: EnumPrintingType.Entity,\r\n Text: 'Entity'\r\n }\r\n ],\r\n LogLevels: \r\n [\r\n {\r\n Value: EnumLogLevel.Warning,\r\n Text: 'Warning'\r\n },{\r\n Value: EnumLogLevel.Info,\r\n Text: 'Info'\r\n },{\r\n Value: EnumLogLevel.Error,\r\n Text: 'Error'\r\n },\r\n ]\r\n },\r\n Translations:\r\n {\r\n lblLanguage: \"Language\",\r\n lblUserName: \"User name\",\r\n lblPassword: \"Password\",\r\n titleLogin: \"System Login\",\r\n btnLogin: \"Login\",\r\n btnLogout: 'Logout',\r\n btnChangePassword: 'Change password',\r\n btnContactUs: \"Contact us\",\r\n btnRecoverPassword: 'Forgot password',\r\n lblSaveCredentials: 'Remember Me',\r\n titleLogout: \"Logoff\",\r\n titleLogoutLong: \"Logged off succesfully\",\r\n titleLogoutLast: \"You are being redirected to the login screen\",\r\n titleSessionExpiredTitle: \"Session Expired\",\r\n titleSessionExpired: \"You have been logged off due to inactivity or a change in user credentials on the server. Please log in again \",\r\n titleChangePasswordTitle: \"Change password\",\r\n titleChangePassword: \"Enter a new password. The password should be a strong one, and follow the rules set by your IT staff\",\r\n titleChangePasswordTitle2: \"Change expired password\",\r\n titleException: \"System error\",\r\n titleExceptionLong: \"Error details are displayed below. Please send them to the system administrator.\\nUnexpected error has occured:\",\r\n titleComingSoonTitle: \"This feature is coming soon\",\r\n titlePasswordChanged: 'The password has been changed succesfully. Please use your new password to login again',\r\n titleIdentification: 'User identification',\r\n titlePasswordEntry: 'New password entry',\r\n titleRecoverPasswordTitle: 'Forgot password recovery',\r\n titleWelcomePasswordTitle: 'First system login',\r\n titleRecoverPassword1: 'Enter your user name',\r\n titleRecoverPassword2: 'You can recover your forgotten password, as long as you have access to the email or phone that is saved in your account',\r\n titleRecoverPassword3: 'To change the password please enter the verification code sent to you',\r\n titleRecoverPassword4: 'Enter a new password. The password should be a strong one, and follow the rules set by your IT staff',\r\n titleWelcomePassword2: 'Welcome! Please enter the username and the verification code you have received, in order to proceede to setting up your new password',\r\n titleWelcomePassword3: \"Enter a new password. The password should be a strong one, and follow the rules set by your IT staff. From now on, you will use this password to enter the system\",\r\n btnReEntry: \"Re-Login\",\r\n genOK: 'OK',\r\n genYes: \"Yes\",\r\n genNo: \"No\",\r\n genCancel: \"Cancel\",\r\n genNoData: \"No data exists\",\r\n genPrint: 'Print',\r\n genSign: 'Sign',\r\n genReset: 'Reset',\r\n genTakePhoto: 'Take Photo',\r\n genSavePhotos: 'Save photos',\r\n genDownload: 'Download',\r\n msgSignHere: 'Please draw your signature inside the square',\r\n msgSignatureRequired: 'You must provide your signature to continue',\r\n msgPasswordsDontMatch: 'Password and password confirmation do not match',\r\n errorNetwork: \"Server communication error - check your network connection\",\r\n errorSessionExpired: \"Session expired due to inactivity\",\r\n errorUserInvalid: \"User details have changes. Please log in again\",\r\n errorNotInitialized: \"Unable to login since system settings were not loaded propely. Please reload the page\",\r\n errorUnexpected: \"@@@Unexpected server error has occured@@@: {0}\",\r\n errorUnauthorized: \"User is not authorized for this operation\",\r\n errorPasswordExpired: \"Password has expired. Please choose a different password\",\r\n msgFinishEditing: \"Please finish editing current line before adding the new one\",\r\n errorUserNameNotFound: \"User name not found\",\r\n errorIsNotExistsPhoneAndEmail: \"No email or phone is defined. Contact support\",\r\n errorSessionIsFrozen: \"Session is frozen due using the same credential on another device\",\r\n lblDay1: \"Sunday\",\r\n lblDay2: \"Monday\",\r\n lblDay3: \"Tuesday\",\r\n lblDay4: \"Wednesday\",\r\n lblDay5: \"Thursday\",\r\n lblDay6: \"Friday\",\r\n lblDay7: \"Saturday\",\r\n lblDay1s: \"Sun\",\r\n lblDay2s: \"Mon\",\r\n lblDay3s: \"Tue\",\r\n lblDay4s: \"Wed\",\r\n lblDay5s: \"Thu\",\r\n lblDay6s: \"Fri\",\r\n lblDay7s: \"Sat\",\r\n msgSuccess: \"Operation completed succesfully\",\r\n msgNotPerformed: \"Unable to complete operation\",\r\n lblTimes: 'times',\r\n lblUser: \"Standard user\",\r\n btnCancelDocument: 'Cancel Document',\r\n lblBy: 'By',\r\n titleCreatedBy: 'Created by',\r\n titleCreated: 'Created',\r\n titleCreatedAt: 'Created at',\r\n titleAgo: 'Ago',\r\n lblAgo: 'ago',\r\n lblSearch: 'Search',\r\n lblCloseSearch: 'Close search',\r\n lblColumnChooser: 'Show Column Chooser',\r\n lblColumnHiding: 'Switch Column Hiding',\r\n lblShowGridFilter: 'Show Advanced Filters',\r\n lblHideGridFilter: 'Hide Advanced Filters',\r\n lblExcel: 'Export to Excel',\r\n lblPdf: 'Export to PDF',\r\n lblViewList: 'View as list of cards',\r\n lblViewGrid: 'View as table',\r\n lblDisplayUserName: 'User name',\r\n lblLastUseDate: 'Last action at',\r\n lblLastUseBefore: 'Last action before',\r\n progressIndicator: 'Transferring data.. Please wait',\r\n lblUpdated: 'Updated',\r\n lblNoSorting: '- Default -',\r\n lblVersion: 'Version',\r\n lblDateIsNull: \"Date is null\",\r\n lblDateApproximate: \"{0} {1} {2}\",\r\n f702: \"less than a minute\",\r\n f703: \"5 minutes\",\r\n f704: \"10 minutes\",\r\n f705: \"15 minutes\",\r\n f706: \"half an hour\",\r\n f707: \"less than an hour\",\r\n f709: \"hour and a half\",\r\n f710: \"more than two hours\",\r\n f711: \"{0} hours\",\r\n f712: \"day\",\r\n f713: \"two days\",\r\n f714: \"{0} days\",\r\n f715: \"over a week\",\r\n f716: \"more than two weeks\",\r\n f717: \"{0} weeks\",\r\n f718: \"over a month\",\r\n f720: \"two months\",\r\n f721: \"{0} months\",\r\n f722: \"over a year\",\r\n f723: \"more than two years\",\r\n f724: \"{0} years\",\r\n f725: \"less than a day\",\r\n lblOldPassword: 'Old password',\r\n lblNewPassword1: 'New password',\r\n lblNewPassword2: 'Confirm password',\r\n lblRecoveryType: 'Password recovery method',\r\n lblRecoveryPhone: 'Phone number for password recovery',\r\n lblRecoveryEmail: 'Email address for password recovery',\r\n btnSendNotificationDispatch: 'Send',\r\n btnSendRecoveryCode: 'Send verification code',\r\n btnCheckUserName: 'Recover password',\r\n btnBackToLogin: 'Back to login page',\r\n lblRecoveryToken: 'Verification code',\r\n btnResend: 'Send again',\r\n btnSaveChanges: 'Save changes',\r\n btnGeneratePassword: 'Generate password',\r\n btnCreateCredentials: 'Create credentials',\r\n btnUnlockUser: 'Unlock user',\r\n lblDisplayUsername: 'Display user name',\r\n lblDisplayUserDescription: 'Display user description',\r\n lblCredentialsNotExist: 'User not yet created',\r\n lblPendingWelcome: 'User pending activation through welcome link',\r\n titleUserInformation: 'User Information',\r\n errorMaxSizeUploadError: 'Size of some selected files is bigger that {0} and they are automatically excluded from the selection.',\r\n msgFileSizeRestriction: 'Max file size is {0}.',\r\n btnSelectFiles: 'Select files',\r\n btnMakePhoto: 'Make photo',\r\n lblAttachFileSize: 'File size',\r\n lblFilters: 'Filters',\r\n lblAt: 'At',\r\n\r\n lblObjectName: 'Object name',\r\n lblIsOverride: 'Is Overriden',\r\n lblValidation: 'Is Valid',\r\n lblDViewsDBDuration: 'Original Duration',\r\n lblXViewsDBDuration: 'Overriden Duration',\r\n lblCheckPerformance: 'Check Performance',\r\n lblValidateViews: 'Validate structure',\r\n lblViewError: 'Error',\r\n\r\n lblLoginOTPSendMethod: 'Send one time password via',\r\n lblLoginOTPEmail: 'Email address for send one time password',\r\n lblLoginOTPPhone: 'Phone number for send one time password',\r\n lblLoginOTPOTP: 'One time password',\r\n lnkLoginByOTP: 'Login by one time password',\r\n msgNotificationSent: 'Notification is sent',\r\n btnLoginOtpSendOtp: 'Send password',\r\n lnkLoginByPassword: 'Login by password',\r\n\r\n lblApply: 'Apply',\r\n lblTaxNumber: 'Tax number',\r\n\r\n lblIsActive: 'Active',\r\n lblEmail: 'Email',\r\n lblPhone: 'Phone',\r\n lblIsPendingWelcome: 'Is Pending Welcome',\r\n lblIsOnline: 'Is Online',\r\n lblIsLockedOut: 'Is Locked Out',\r\n lblCreateCredentials: 'Create Credentials',\r\n lblCredentialFilter: 'Credential Filter',\r\n\r\n msgRouteNotFound: 'Route not found',\r\n btnReload: 'Reload',\r\n lblHideColumn: 'Hide Column',\r\n lblShowHiddenColumns: 'Show Hidden Columns',\r\n\r\n lblName: 'Name',\r\n lblDescription: 'Description',\r\n\r\n msgLoading: \"Processing, please wait\",\r\n lblSentDate: \"Sent date\",\r\n lblSentBy: \"Sent by\",\r\n lblEntryID: \"ID\",\r\n lblFromAddress: \"From Address\",\r\n lblFromDisplayAddress: \"From name\",\r\n lblAddress: \"Address\",\r\n lblSubject: \"Subject\",\r\n lblMailBody: \"Body\",\r\n lblDeliveryOption: \"Delivery option\",\r\n lblSendNotificationBy: \"Send notification by\",\r\n lblUsernameCreationOption: 'Username creation by',\r\n lblStatus: \"Status\",\r\n lblToAddress: \"To\",\r\n lblCCAddress: \"CC\",\r\n lblBccAddress: \"BCC\",\r\n lblFailureDescription: \"Failure description\",\r\n lblNotificationTemplate: \"Template name\",\r\n lblFrom: \"From \",\r\n lblUntil: \"Until \",\r\n\r\n lblAdd: \"Add\",\r\n lblClear: \"Clear\",\r\n lblCompactMode: \"Compact Mode\",\r\n\r\n lblSessionAlmostExpiredTitle: \"Session will expire soon\",\r\n lblSessionAlmostExpiredPrompt: \"Long period of inactivity was detected. Your session will expire soon\",\r\n lblSessionExpiredTitle: \"Session expired\",\r\n lblFirstDate: \"First Date\",\r\n lblLastDate: \"Last Date\",\r\n lblSessionExpiredPrompt: \"You session has expired. You will be automaticaly re-directed to login page.\",\r\n\r\n lblNotificationContent: \"Notification Content\",\r\n lblGeneral: \"General\",\r\n lblOptions: \"Options\",\r\n lblCustom: \"Custom\",\r\n\r\n lblMFACode: \"Code\",\r\n titleMFACodeOnEmailSent: \"The one-time password was sent to your email. Enter it below\",\r\n titleMFACodeOnPhoneSent: \"The one-time password was sent to your mobile. Enter it below\",\r\n\r\n lblMFAMethod: \"Multi-factor authentication\",\r\n Month_1: \"January\",\r\n Month_2: \"February\",\r\n Month_3: \"March\",\r\n Month_4: \"April\t\",\r\n Month_5: \"May\",\r\n Month_6: \"June\",\r\n Month_7: \"July\",\r\n Month_8: \"August\",\r\n Month_9: \"September\",\r\n Month_10: \"October\",\r\n Month_11: \"November\",\r\n Month_12: \"December\",\r\n\r\n lblExport: \"Export\",\r\n lblCredentialType: \"Credential Type\",\r\n lblIsRestrictByIP: \"Restrict by IP\",\r\n lblIsExcludeFromMFA: \"Exclude from MFA\",\r\n lblIPRangeStart: \"IP range start\",\r\n lblIPRangeEnd: \"IP range end\",\r\n lblIPErrorMessage: \"An IP address must have "000.000.000.000" format\",\r\n msgIPRangesIsEmpty: \"You have to add at least one IP address/range\",\r\n msgIPRangeIsEmpty: \"Enter a valid IP address/range\",\r\n msgPasswordMinLength: \"The password length must be at least {0} symbols.\",\r\n msgPasswordMinCountDigits: \"The password must contain at least {0} digits.\",\r\n msgPasswordMinCountLetters: \"The password must contain at least {0} letters.\",\r\n msgPasswordComplexityRequirement: \"The password length must be at least {0} symbols long, with minimum {1} digits and {2} letters\",\r\n errorOnlyImageAllowed: \"Only images allowed.\",\r\n btnClose: \"Close\",\r\n lblPhoto: \"Photo\",\r\n\r\n lblDragAndDrop: \"You can drag & drop files here\",\r\n errorRequiredMessage: \"Field is required\",\r\n titleDuplicate: \"Duplicate\",\r\n lblAllNotifications: \"All notifications\",\r\n\r\n lblSMTPServer: \"SMTP Server\",\r\n lblSMTPPort: \"SMTP Port\",\r\n lblSMTPUserName: \"SMTP Username\",\r\n lblSMTPPassword: \"SMTP Password\",\r\n lblSMTPUseSSL: \"SMTP Use SSL\",\r\n lblSMSEndpoint: \"SMS Endpoint\",\r\n lblSMSUserName: \"SMS Username\",\r\n lblSMSPassword: \"SMS Password\",\r\n lblSMSToken: \"SMS Token\",\r\n lblSMSEndPointIsInforU: \"SMS Provider\",\r\n\r\n titleTemplateInformation: \"Notification template information\",\r\n titleEmailInformation: \"E-mail template settings\",\r\n lblFromEmail: \"From e-mail\",\r\n lblFromEmailDisplay: \"From e-mail display\",\r\n titlePhoneInformation: \"SMS template settings\",\r\n lblNotificationServer: \"Notification server\",\r\n lblFromPhone: \"From phone\",\r\n lblSMSBody: \"SMS body\",\r\n titlePushMessagesInformation: \"Push messages template settings\",\r\n lblPushMessageBody: \"Push message body\",\r\n lblHTMLBody: \"HTML body\",\r\n btnSave: 'Save',\r\n titleDelete: 'Delete',\r\n lblUseDefault: 'Use default',\r\n lblNoUnreadMessages: 'No unread messages',\r\n lblTo: 'To',\r\n lblPushMessageContent: 'Push message content',\r\n lblSmsMessageContent: 'SMS message content',\r\n lblIsAutomatic: 'Is automatic',\r\n lblSystem: 'System',\r\n lblPopupShowStatus: 'Popup show status',\r\n lblEmailContent: 'Email content',\r\n btnShowInEditor: 'Show in editor',\r\n titleLeavePageConfirmation: 'Data will be lost, do you want to continue?',\r\n btnLogOff: 'Log Off',\r\n btnStayConnected: 'Stay Connected',\r\n btnGoToHomePage: 'Go To Home Page',\r\n lblReadDate: 'Read date',\r\n msgDeleteNotificationTemplateQuestion: 'Notification template could be used in the application. Are you sure want to delete it?',\r\n lblNotificationServerWrong: 'Notification server configuration is incorrect. Please make changes and try again',\r\n msgInvalidEmail: 'Email is invalid or incorrect format',\r\n btnTestServer: 'Test server',\r\n lblMIDIsMissing: \"MID is missing\",\r\n lblEnterMID: \"Enter new MID code.\",\r\n btnShowPreview: \"Show preview\",\r\n lblIsServer: \"Server\",\r\n lblIsClient: \"Client\",\r\n lblModuleName: \"Module\",\r\n lblLogin: \"Login\",\r\n lblFramework: \"Framework\",\r\n lblOption: \"Option\",\r\n lblValue: \"Value\",\r\n lblSectionName: \"Section\",\r\n lblAddOption: 'Add option',\r\n msgOptionAlreadyExists: 'Option already exists',\r\n msgOptionEmpty: 'Option {0} is empty',\r\n lblBadLogin: 'Bad login',\r\n msgRemoveOption: \"Are you sure you want to delete the Option '{0}'?\",\r\n titleEmailConfiguration: \"E-mail Configuration\",\r\n titleSMSConfiguration: \"SMS Configuration\",\r\n msgDeleteNotificationServerQuestion: \"Notification server could be used in the application. Are you sure want to delete it?\",\r\n msgNoData: \"No Data\",\r\n lblEmailHeader: \"Email Header\",\r\n lblConfigure: \"Configure\",\r\n lblDefaultFromAddressForInforU: \"Test\",\r\n lblDefaultFromAddressForUnicel: \"0509999999\",\r\n lblInforUFromPhoneValidationTooltip: \"Please enter a white-listed phone number of name up to 11 characters in english\",\r\n lblNotifications: \"Notifications\",\r\n lblMinimize: \"Minimize\",\r\n lblShowMore: \"Show more\",\r\n titleWhatsAppInformation: \"WhatsApp template settings\",\r\n lblWhatsAppBody: \"WhatsApp Message Body\",\r\n lblWhatsAppApiKey: \"WhatsApp Api Key\",\r\n lblWhatsAppEndpoint: \"WhatsApp Endpoint\",\r\n titleWhatsAppConfiguration: \"WhatsApp Configuration\",\r\n titleNotificationDispatchList: \"Notification dispatch list\",\r\n titleNotificationServerList: \"Notification server list\",\r\n titleNotificationTemplateList: \"Notification template list\",\r\n\r\n lblPoweredBy: \"Powered by Menahel4U\",\r\n titleChooseOption: \"Choose option\",\r\n titleWebAPIAllowedIPs: \"Allowed IPs\",\r\n lblIpAddress: \"IP Address\",\r\n lblLoginDate: \"Login Date\",\r\n lblPrint: \"Print\",\r\n lblDateFrom: 'Date From',\r\n lblDateTo: 'Date To',\r\n lblDate: \"Date\",\r\n msgCouldNotStartVideoError: 'Camera is not available',\r\n msgCameraPermissionDenied:'Camera permission is denied',\r\n lblCameraModeVideo: 'Video',\r\n lblCameraModePhoto: 'Photo',\r\n titlePreview: 'Preview',\r\n msgLogoutQuestion: 'Are you sure you want to logout?',\r\n lblGroupPanel: 'Drag column to group',\r\n lblExpandAll: 'Expand All',\r\n lblMultiEmailError: 'Value is invalid. Use symbol ; as email separator',\r\n msgPhotoMinCountError: 'The minimum count is {0}',\r\n msgPhotoMaxCountError: 'The maximum count is {0}',\r\n lblRestoreDefaultView: \"Restore default view\",\r\n lblStartDate: \"Start date\",\r\n lblDuration: \"Duration\",\r\n lblController: \"Controller\",\r\n lblAction: \"Action\",\r\n lblMethod: \"Method\",\r\n lblStatusCode: \"Status code\",\r\n lblRequestData: \"Request data\",\r\n lblQueryString: \"Query string\",\r\n lblBody: \"Body\",\r\n lblResponse: \"Response\",\r\n msgTextCopied: \"Text copied\",\r\n lblCopy: \"Copy\",\r\n btnGoToLoginHistory: \"Go to login history\",\r\n btnGoToRequestsHistory: \"Go to requests history\",\r\n btnManageCredentials: \"Manage Credentials\",\r\n btnGoToCredentialsReport: \"Go to credentials report\",\r\n btnWelcomeUser: \"Send welcome message\",\r\n lblTestFromPhone: \"From phone\",\r\n lblHistory: \"Changes log\",\r\n lblNewValue: \"New value\",\r\n lblOldValue: \"Old value\",\r\n lblFieldCaption: \"Field\",\r\n lblDocumentCaption: \" Document\",\r\n lblHistoryLineAdded: \"{0} {1} was added.\",\r\n lblHistoryLineRemoved: \"{0} {1} was removed.\",\r\n lblHistoryLineNumber: \"{0} {1}\",\r\n lblHistoryNotFound: \"No changes found.\",\r\n lblHistoryChangeAdded: \"{0} {1} was created\",\r\n lblHistoryChangeRemoved: \"{0} {1} was deleted\",\r\n msgLoadingPDF: 'Loading PDF file...',\r\n lblImpersonatedBy: 'Impersonated By',\r\n lblIsUserCustomTemplate: \"User custom template\",\r\n msgIsUserCustomTemplateEnable: \"If the option 'Editable' is enabled, you will be able to change the template manually, but the system won't be able to update it automatically\",\r\n btnEnableEditable: \"Enable editable\",\r\n btnDisableEditable: \"Disable editable\",\r\n msgScreenSizeChangedRefresh: 'Screen size is changed. Please refresh browser window.',\r\n msgOrientationChangedRefresh: 'Orientation is changed. Please refresh browser window.',\r\n lblDeliveryMethod: 'Delivery Method',\r\n lblNotificationDispatch: 'Notification Dispatch',\r\n lblRecipients: 'Recipients',\r\n lblPreview: 'Preview',\r\n msgRecipientsAreEmpty: 'You have to add at least one recipient',\r\n lblCreatedBy: 'Created by',\r\n btnCancelNotifications: 'Cancel notifications',\r\n lblCancelNotificationsPrompt: 'You are going to cancel unread Push notifications. Do you want to proceed?',\r\n lblNotificationMessage: 'Notification Message',\r\n lblIsDeleted: 'Deleted',\r\n lblShareMethodEmail: 'Email',\r\n lblShareMethodSms: 'SMS',\r\n lblShareMethodWhatsapp: 'WhatsApp',\r\n lblShareMethodPrint: 'Print',\r\n lblShare: 'Share',\r\n lblEntityType: 'Entity type',\r\n lblPageName: 'Page',\r\n btnSend: 'Send',\r\n lblChooseTemplate: 'Choose template',\r\n lblShareMethodDownload: 'Download',\r\n lblShareMethodShare: 'Share',\r\n lblUploadCrystalTemplate: 'Upload crystal tempalte',\r\n lblNotificationTemplateEditingMode: 'Body editing mode',\r\n msgShareNotificationTemplateNotFoundError: 'Notification templates are not configured for this page',\r\n btnShare: 'Share',\r\n msgNotificationTemplatePrefixNotFoundError: '$PrefixBody$ param is missing',\r\n lblPrefixBody: 'Prefix body',\r\n lblIsSharePdf: 'Share PDF',\r\n lblFileNameFormat: 'File name format',\r\n lblEntityBindingPageType: 'Bind to',\r\n titleEntityBindingInformation: 'Entity binding',\r\n msgNotificationTemplateFileMissingError: 'Crystal report template is missing',\r\n lblSharedFile: 'Shared file',\r\n msgNotificationTemplateEmptyError: 'Cannot save empty template',\r\n lblIsSupportEmail: 'Support Email',\r\n lblIsSupportSMS: 'Support SMS',\r\n lblIsSupportWhatsapp: 'Support Whatsapp',\r\n lblIsSupportPush: 'Support push',\r\n lblIsSupportSharing: 'Support sharing',\r\n lblIsShareByEntities: 'Share by entities',\r\n ttlLogs: \"Logs\",\r\n lblObjectType: \"Object type\",\r\n lblObjectID: \"Object ID\",\r\n lblLevel: \"Level\",\r\n lblNotAssigned: \"- Unassigned -\",\r\n msgNotificationSentTo: 'Notification is sent to {0}',\r\n lblHeader: 'Header',\r\n }\r\n};\r\n","import {\r\n EnumInfoUTypes,\r\n EnumLanguages,\r\n EnumLogLevel,\r\n EnumMFAMethods,\r\n EnumNotificationDeliveryOptions,\r\n EnumNotificationStatuses,\r\n EnumNotificationTemplateEditingMode,\r\n EnumPopupShowStatuses,\r\n EnumPrintingType,\r\n EnumSystemOptions,\r\n EnumUserLoginStatus,\r\n EnumYesNo,\r\n HistoryEventTypesEnum\r\n} from '@core/framework/sysenums.enum';\r\n\r\nexport const Resources_HE =\r\n{\r\n Pages:\r\n {\r\n login: 'התחברות למערכת',\r\n logout: 'התנתק',\r\n credentials_activity_status: 'מצב פעילות משתמשים',\r\n notificationshistory: 'דוח התראות שנשלחו',\r\n notification_servers: 'שרתי התראות',\r\n notification_dispatches: '$$$Notification dispatches',\r\n notification_templates: 'תבניות להתראות',\r\n notifications: 'התראות',\r\n system_options: 'הגדרות מערכת',\r\n credential_login_history: \"דוח התחברויות משתמשים\",\r\n request_history: \"דוח פניות לשרת\",\r\n credentials_report: 'דוח משתמשים',\r\n data_views: 'ניהול Views בסיס נתונים',\r\n menu: 'תפריט',\r\n credentials_creation: 'יצירת משתמשים חדשים',\r\n remote_request_history: \"דוח בקשות יוצאות\",\r\n NotificationViewComponent: 'התראה שנשלחה',\r\n PrintBoxDialogComponent: 'הדפסה',\r\n SignBoxDialogComponent: 'חתימה על מסמך',\r\n ImageBoxDialogComponent: 'תמונה',\r\n PhotoBoxDialogComponent: 'צילום',\r\n PasswordManageComponent: 'ניהול פרטי התחברות',\r\n CredentialsActivityStatusComponent: 'מצב פעילות משתמשים',\r\n NotificationsHistoryComponent: 'דוח התראות שנשלחו',\r\n PreviewDialogComponent: 'תצוגה מקדימה',\r\n NotificationDispatchComponent: '$$$Notification dispatch',\r\n NotificationDispatchListComponent: '$$$Notification dispatches',\r\n NotificationServerComponent: 'שרת התראות',\r\n NotificationServerListComponent: 'שרתי התראות',\r\n NotificationTemplateListComponent: 'תבניות להתראות',\r\n NotificationTemplateComponent: 'תבנית התראה',\r\n HtmlBoxDialogComponent: 'עורך HTML',\r\n NotificationTestDialogComponent: 'בדיקת התראות',\r\n NotificationPreviewDialogComponent: 'תצוגה מקדימה של התראות',\r\n SystemOptionsComponent: 'הגדרות מערכת',\r\n AddSystemOptionDialogComponent: 'הוסף הגדרה',\r\n BarcodeBoxDialogComponent: 'סרוק ברקוד/QR-code',\r\n CredentialLoginHistoryComponent: \"דוח התחברויות משתמשים\",\r\n RequestHistoryListComponent: \"דוח פניות לשרת\",\r\n RequestHistoryComponent: \"פניה לשרת\",\r\n WelcomeUserDialogComponent: \"הודעת ברוכים הבאים\",\r\n HistoryViewComponent: 'היסטוריית שינוים',\r\n SystemCredentialsComponent: 'דוח משתמשים',\r\n SystemCredentialsCreationComponent: 'יצירת משתמשים חדשים',\r\n WelcomeMessageConfigDialogComponent: 'הודעה על התחברות ראשונית למערכת',\r\n DataViewListComponent: 'ניהול Views בסיס נתונים',\r\n MenuButtonListComponent: 'תפריט',\r\n ShareDialogComponent: '$$$Share'\r\n },\r\n Lists:\r\n {\r\n Languages:\r\n [\r\n {\r\n Value: EnumLanguages.Hebrew,\r\n Text: \"עברית\"\r\n },\r\n {\r\n Value: EnumLanguages.English,\r\n Text: \"אנגלית\"\r\n }, \r\n {\r\n Value: EnumLanguages.Spanish,\r\n Text: \"ספרדית\"\r\n },\r\n ],\r\n\r\n NotificationDeliveryOptions: [\r\n {\r\n Value: EnumNotificationDeliveryOptions.Email,\r\n Text: \"אימייל\",\r\n ID: 0\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.SMS,\r\n Text: \"הודעת SMS\",\r\n ID: 1\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.WhatsApp,\r\n Text: 'הודעת WhatsApp',\r\n ID: 3\r\n }\r\n ],\r\n NotificationDispatchDeliveryOptions: [\r\n {\r\n Value: EnumNotificationDeliveryOptions.Email,\r\n Text: \"אימייל\"\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.SMS,\r\n Text: \"הודעת SMS\"\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.WhatsApp,\r\n Text: 'הודעת WhatsApp'\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.PushMessage,\r\n Text: 'התראה באפליקציה'\r\n },\r\n ],\r\n NotificationTemplateEditingModes: [\r\n {\r\n Value: EnumNotificationTemplateEditingMode.None,\r\n Text: '$$$None',\r\n ID: 0,\r\n SortOrder: 1\r\n },\r\n {\r\n Value: EnumNotificationTemplateEditingMode.Preview,\r\n Text: '$$$Preview only',\r\n ID: 4,\r\n SortOrder: 2\r\n },\r\n {\r\n Value: EnumNotificationTemplateEditingMode.EditPrefix,\r\n Text: '$$$Edit prefix',\r\n ID: 1,\r\n SortOrder: 3\r\n },\r\n {\r\n Value: EnumNotificationTemplateEditingMode.EditBody,\r\n Text: '$$$Edit body',\r\n ID: 3,\r\n SortOrder: 4\r\n },\r\n ],\r\n UserCreationOptions: [\r\n {\r\n Value: EnumNotificationDeliveryOptions.Email,\r\n Text: \"אימייל\",\r\n ID: 0\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.SMS,\r\n Text: 'טלפון',\r\n ID: 1\r\n }\r\n ],\r\n WelcomeDeliveryOptions: [\r\n {\r\n Value: EnumNotificationDeliveryOptions.Email,\r\n Text: 'אימייל',\r\n ID: 0,\r\n SortOrder: 1\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.SMS,\r\n Text: 'הודעת SMS',\r\n ID: 1,\r\n SortOrder: 2\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.WhatsApp,\r\n Text: 'הודעת WhatsApp',\r\n ID: 3,\r\n SortOrder: 3\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.DontSend,\r\n Text: 'לא לשלוח',\r\n ID: 2,\r\n SortOrder: 4\r\n }\r\n ],\r\n NotificationTypes: [\r\n {\r\n Value: EnumNotificationDeliveryOptions.Email,\r\n Text: \"אימייל\",\r\n SortOrder: 1,\r\n index: 0,\r\n text: \"אימייל\",\r\n Name: EnumNotificationDeliveryOptions.Email\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.SMS,\r\n Text: \"הודעת SMS\",\r\n SortOrder: 2,\r\n index: 1,\r\n text: \"הודעת SMS\",\r\n Name: EnumNotificationDeliveryOptions.SMS\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.PushMessage,\r\n Text: 'התראה באפליקציה',\r\n SortOrder: 3,\r\n index: 2,\r\n text: 'התראה באפליקציה',\r\n Name: EnumNotificationDeliveryOptions.PushMessage\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.WhatsApp,\r\n Text: 'הודעת WhatsApp',\r\n SortOrder: 4,\r\n index: 3,\r\n text: 'הודעת WhatsApp',\r\n Name: EnumNotificationDeliveryOptions.WhatsApp\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.Share,\r\n Text: '$$$Share',\r\n SortOrder: 4,\r\n index: 3,\r\n text: '$$$Share',\r\n Name: EnumNotificationDeliveryOptions.Share\r\n }\r\n ],\r\n NotificationStatuses:\r\n [\r\n {\r\n Value: EnumNotificationStatuses.Draft,\r\n Text: \"טיוטה\"\r\n },\r\n {\r\n Value: EnumNotificationStatuses.Sending,\r\n Text: \"שליחה\"\r\n },\r\n {\r\n Value: EnumNotificationStatuses.Failure,\r\n Text: \"נכשל\"\r\n },\r\n {\r\n Value: EnumNotificationStatuses.Sent,\r\n Text: \"נשלח\"\r\n },\r\n ],\r\n NotificationPredefinedSmtpServers: [\r\n {\r\n Text: \"Office 365\",\r\n SMTPServer: \"smtp.office365.com\",\r\n SMTPPort: 587,\r\n SMTPUseSSL: true\r\n },\r\n {\r\n Text: \"Gmail\",\r\n SMTPServer: \"smtp.gmail.com\",\r\n SMTPPort: 111,\r\n SMTPUseSSL: true\r\n },\r\n {\r\n Text: \"SendGrid\",\r\n SMTPServer: \"smtp.sendgrid.com\",\r\n SMTPPort: 111,\r\n SMTPUseSSL: false\r\n }\r\n ],\r\n NotificationPredefinedSmsServers: [\r\n {\r\n Text: \"InforU\",\r\n SMSEndpoint: \"https://uapi.inforu.co.il/SendMessageXml.ashx\",\r\n SMSToken: 111,\r\n SMSEndPointIsInforU: EnumInfoUTypes.InforU\r\n },\r\n {\r\n Text: \"Unicell\",\r\n SMSEndpoint: \"http://api.soprano.co.il/\",\r\n SMSToken: 222,\r\n SMSEndPointIsInforU: EnumInfoUTypes.Unicell\r\n }\r\n ],\r\n MFAMethods:\r\n [\r\n {\r\n Value: EnumMFAMethods.None,\r\n Text: \"ללא\"\r\n },\r\n {\r\n Value: EnumMFAMethods.Email,\r\n Text: \"מייל\"\r\n },\r\n {\r\n Value: EnumMFAMethods.SMS,\r\n Text: \"SMS\"\r\n },\r\n {\r\n Value: EnumMFAMethods.WhatsApp,\r\n Text: \"WhatsApp\"\r\n }\r\n ],\r\n ExportMenuItems: [\r\n {\r\n SortOrder: 0,\r\n Value: 1,\r\n Text: \"אקסל\"\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: 2,\r\n Text: \"הדפס\"\r\n }\r\n ],\r\n PopupShowStatuses: [\r\n {\r\n Value: EnumPopupShowStatuses.None,\r\n Text: \"ללא\"\r\n },\r\n {\r\n Value: EnumPopupShowStatuses.ToShow,\r\n Text: \"הצג\"\r\n },\r\n {\r\n Value: EnumPopupShowStatuses.Showed,\r\n Text: \"הוצג\"\r\n }\r\n ],\r\n InfoUTypes: [\r\n {\r\n Value: EnumInfoUTypes.Unicell,\r\n Text: \"Unicell\"\r\n },\r\n {\r\n Value: EnumInfoUTypes.InforU,\r\n Text: \"InforU\"\r\n }\r\n ],\r\n SystemOptions: [\r\n {\r\n Value: EnumSystemOptions.AppNameHE,\r\n Text: 'שם בעברית'\r\n }, {\r\n Value: EnumSystemOptions.AppNameEN,\r\n Text: 'שם באנגלית'\r\n }, {\r\n Value: EnumSystemOptions.AppURL,\r\n Text: 'קישור למערכת'\r\n }, {\r\n Value: EnumSystemOptions.SessionTimeout,\r\n Text: 'משך זמן לניתוק סשן, דקות'\r\n }, {\r\n Value: EnumSystemOptions.SessionExpiry,\r\n Text: 'משך זמן להזדהות מחדש, דקות'\r\n }, {\r\n Value: EnumSystemOptions.EnableRequestLogging,\r\n Text: 'אפשר בקשת גישה'\r\n }, {\r\n Value: EnumSystemOptions.EnableRemoteLogging,\r\n Text: 'אפשר חיבור מרחוק'\r\n }, {\r\n Value: EnumSystemOptions.ShowExpiredTimeoutAlert,\r\n Text: 'הצג תוקף התחברות למערכת'\r\n }, {\r\n Value: EnumSystemOptions.ShowAlmostExpiredTimeoutAlert,\r\n Text: 'הצג תוקף התחברות למערכת שעומד לפוג'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportedCredentialsManagement,\r\n Text: 'תמיכה בניהול אישורים'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportedUserWelcome,\r\n Text: 'תמיכה בהקמת משתמשים חדשים'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportedPasswordChange,\r\n Text: 'תמיכה בשינוי סיסמא לאחר הזדהות'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportedPasswordRecovery,\r\n Text: 'תמיכה בשחזור סיסמא ששכחתי'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportedLoginByOTP,\r\n Text: 'אפשר חיבור ב-OTP'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportedLoginByPassword,\r\n Text: 'אפשר חיבור באמצעות סיסמא'\r\n }, {\r\n Value: EnumSystemOptions.IsAutoCreateCredentials,\r\n Text: 'צור משתמש במערכת באופן אוטומטי בחיבור ראשון דרך OTP'\r\n }, {\r\n Value: EnumSystemOptions.AutoCreateCredentialsType,\r\n Text: 'סוג משתמש ליצירה אוטומטית'\r\n }, {\r\n Value: EnumSystemOptions.IsRequireTaxNumberForOTP,\r\n Text: 'בדוק מספר ח.פ בהזדהות עם OTP'\r\n }, {\r\n Value: EnumSystemOptions.PasswordChangeIntervalDays,\r\n Text: 'תדירות החלפת סיסמה (ימים)'\r\n }, {\r\n Value: EnumSystemOptions.PasswordComplexityLen,\r\n Text: 'מורכבות סיסמה - מספר תווים מינימאלי'\r\n }, {\r\n Value: EnumSystemOptions.PasswordComplexityMinChars,\r\n Text: 'מורכבות סיסמה - מספר אותיות מינימאלי'\r\n }, {\r\n Value: EnumSystemOptions.PasswordComplexityMinDigits,\r\n Text: 'מורכבות סיסמה - מספר ספרות מינימאלי'\r\n }, {\r\n Value: EnumSystemOptions.BadLoginAttemptBeforeLock,\r\n Text: 'מספר ניסיונות התחברות כושלים לפני נעילת משתמש'\r\n }, {\r\n Value: EnumSystemOptions.BadLoginAttemptsCheckIntervalMinutes,\r\n Text: 'חלון זמן לבדיקת מספר ניסיונות התחברות, דקות'\r\n }, {\r\n Value: EnumSystemOptions.BadLoginAttemptLockouIntervalMinutes,\r\n Text: 'משך נעילת משתמש לאחר ניסיון התחברות כושל, דקות'\r\n }, {\r\n Value: EnumSystemOptions.XFrameOptions,\r\n Text: 'אפשרויות חסימת XFrame'\r\n }, {\r\n Value: EnumSystemOptions.IsDeployedBehindLoadBalancer,\r\n Text: 'התקנה מאחורי Load Balancer או Proxy'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportNotificationMethodEmail,\r\n Text: 'שליחה של הודעות מערכת באמצעות האימייל'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportNotificationMethodSMS,\r\n Text: 'שליחה של הודעות מערכת באמצעות SMS'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportNotificationMethodWhatsApp,\r\n Text: 'שליחה של הודעות מערכת באמצעות WhatsApp'\r\n }, {\r\n Value: EnumSystemOptions.RetentionPeriodRequests,\r\n Text: 'מספר ימים לשמירת בקשות שהתקבלו'\r\n }, {\r\n Value: EnumSystemOptions.RetentionPeriodRemoteRequests,\r\n Text: 'מספר ימים לשמירת בקשות שנשלחו'\r\n }, {\r\n Value: EnumSystemOptions.RetentionPeriodNotifications,\r\n Text: 'מספר ימים לשמירת התרעות שנשלחו'\r\n }, {\r\n Value: EnumSystemOptions.RetentionPeriodSessions,\r\n Text: 'מספר ימים לשמירת לוג סישנים'\r\n }, {\r\n Value: EnumSystemOptions.SessionFingerprintFreezeTimeout,\r\n Text: '$$$Session Fingerprint Freeze Timeout (mins)'\r\n },\r\n ],\r\n UserLoginStatuses: [\r\n {\r\n Value: EnumUserLoginStatus.All,\r\n Text: \"הכל\"\r\n },\r\n {\r\n Value: EnumUserLoginStatus.Success,\r\n Text: \"הצליח\"\r\n },\r\n {\r\n Value: EnumUserLoginStatus.Failure,\r\n Text: \"נכשל\"\r\n }\r\n ],\r\n IsSuccessStatuses: [\r\n {\r\n Value: true,\r\n Text: \"הצליח\"\r\n },\r\n {\r\n Value: false,\r\n Text: \"נכשל\"\r\n }\r\n ],\r\n HistoryEventTypesEnum: [\r\n {\r\n Value: HistoryEventTypesEnum.FieldChange,\r\n Text: \"שינוי ערך\"\r\n },\r\n {\r\n Value: HistoryEventTypesEnum.RowAdded,\r\n Text: \"נוספה שורה\"\r\n },\r\n {\r\n Value: HistoryEventTypesEnum.RowDeleted,\r\n Text: \"שורה נמחקה\"\r\n },\r\n {\r\n Value: HistoryEventTypesEnum.Special,\r\n Text: \"Special\"\r\n }\r\n ],\r\n YesNo:\r\n [\r\n {\r\n Value: EnumYesNo.Yes,\r\n Text: 'כן'\r\n },\r\n {\r\n Value: EnumYesNo.No,\r\n Text: 'לא'\r\n }\r\n ],\r\n PageTypes: [\r\n {\r\n Value: EnumPrintingType.None,\r\n Text: '$$$None'\r\n },\r\n {\r\n Value: EnumPrintingType.Report,\r\n Text: '$$$Report'\r\n },\r\n {\r\n Value: EnumPrintingType.Entity,\r\n Text: '$$$Entity'\r\n }\r\n ],\r\n LogLevels: \r\n [\r\n {\r\n Value: EnumLogLevel.Warning,\r\n Text: 'Warning'\r\n },{\r\n Value: EnumLogLevel.Info,\r\n Text: 'Info'\r\n },{\r\n Value: EnumLogLevel.Error,\r\n Text: 'Error'\r\n },\r\n ]\r\n },\r\n Translations:\r\n {\r\n lblLanguage: \"שפה\",\r\n lblUserName: \"שם משתמש\",\r\n lblPassword: \"סיסמה\",\r\n titleLogin: \"כניסה למערכת\",\r\n btnLogin: \"כניסה למערכת\",\r\n btnLogout: 'התנתק',\r\n btnChangePassword: 'שנה סיסמה',\r\n btnContactUs: \"צור קשר\",\r\n btnRecoverPassword: 'שכחתי סיסמה',\r\n lblSaveCredentials: 'שמור פרטי הזדהות',\r\n titleLogout: \"נותקת מהמערכת\",\r\n titleLogoutLong: \"נותקת מהמערכת בהצלחה.\",\r\n titleLogoutLast: \"הינך מועבר למסך הכניסה\",\r\n titleSessionExpiredTitle: \"ניתוק עקב חוסר פעילות\",\r\n titleSessionExpired: \"נותקת מהמערכת עקב חוסר פעילות או שינוי בפרטי המשתמש בשרת. אנא בצע כניסה מחודשת למערכת\",\r\n titleChangePasswordTitle: \"שינוי סיסמה\",\r\n titleChangePassword: \"בחר סיסמה חדשה העומדת בדרישות המורכבות שהוגדרו על ידי מנהל המערכת\",\r\n titleChangePasswordTitle2: \"שינוי סיסמה שפג תוקפה\",\r\n titleException: \"שגיאת מערכת\",\r\n titleExceptionLong: \"אירעה שגיאה בלתי צפויה במערכת\\nפרטי השגיאה מופיעים מטה - אנא העבר אותם למנהל המערכת\",\r\n titleComingSoonTitle: \"בקרוב! גם זה יפותח..\",\r\n titlePasswordChanged: 'הסיסמה הוחלפה בהצלחה. אנא השתמך בסיסמה החדשה על מנת להכנס מחדש למערכת',\r\n titleIdentification: 'הזדהות',\r\n titlePasswordEntry: 'הזנת סיסמה חדשה',\r\n titleRecoverPasswordTitle: 'שחזור סיסמה שנשכחה',\r\n titleWelcomePasswordTitle: 'כניסה ראשונית למערכת',\r\n titleRecoverPassword1: 'הקלד את שם המשתמש',\r\n titleRecoverPassword2: 'באפשרותך לשחזר סיסמה שנשכחה, אם יש לך גישה לאימייל או לטלפון שמוגדר בחשבון משתמש שלך',\r\n titleRecoverPassword3: 'על מנת לבחור סיסמא חדשה, יש להקליד את הקוד אימות שנשלח אלייך באמצעי שבחרת',\r\n titleRecoverPassword4: 'בחר סיסמה חדשה העומדת בדרישות המורכבות שהוגדרו על ידי מנהל המערכת',\r\n titleWelcomePassword2: 'ברוך הבא למערכת. יש להזין את שם המשתמש והקוד הסודי שנשלח אלייך על מנת לעבור לבחירת הסיסמה',\r\n titleWelcomePassword3: \"בחר סיסמה חדשה העומדת בדרישות המורכבות שהוגדרו על ידי מנהל המערכת. סיסמה זו תשמש אותך מעכשיו על מנת להיכנס למערכת\",\r\n btnReEntry: \"כניסה מחודשת\",\r\n genOK: 'אישור',\r\n genYes: \"כן\",\r\n genNo: \"לא\",\r\n genCancel: \"ביטול\",\r\n genNoData: \"אין נתונים להצגה\",\r\n genPrint: 'הדפס',\r\n genSign: 'חתום',\r\n genReset: 'נקה',\r\n genTakePhoto: 'צלם',\r\n genSavePhotos: 'שמור תמונות',\r\n genDownload: 'הורד',\r\n msgSignHere: 'אנא צייר את חתימתך בתוך המלבן',\r\n msgSignatureRequired: 'הינך חייב לחתום כאן על מנת להמשיך',\r\n msgPasswordsDontMatch: 'הסיסמאות לא תואמות, אנא נסה שנית',\r\n errorNetwork: \"שגיאת תקשורת לשרת - בדוק את חיבור הרשת\",\r\n errorSessionExpired: \"נותקת עקב חוסר פעילות\",\r\n errorUserInvalid: \"פרטי המשתמש השתנו. אנא התחבר מחדש למערכת\",\r\n errorNotInitialized: \"לא ניתן להכנס למערכת כיוון שלא נטענו ההגדרות \\n אנא טען את הדף מחדש\",\r\n errorUnexpected: \"@@@שגיאה לא צפויה בשרת@@@: {0}\",\r\n errorUnauthorized: \"המשתמש אינו מורשה לבצע פעולה זו\",\r\n errorPasswordExpired: 'הסיסמה שהזנת פג תוקפה. יש להזין סיסמה חדשה',\r\n msgFinishEditing: \"יש לשמור את השורה הנוכחית לפני הוספת שורה חדשה\",\r\n errorUserNameNotFound: \"המשתמש לא קיים\",\r\n errorIsNotExistsPhoneAndEmail: \"לא מוגדר טלפון או מייל למשתמש זה. צור קשר עם התמיכה\",\r\n errorSessionIsFrozen: \"$$$Session is frozen due using the same credential on another device\",\r\n lblDay1: \"ראשון\",\r\n lblDay2: \"שני\",\r\n lblDay3: \"שלישי\",\r\n lblDay4: \"רביעי\",\r\n lblDay5: \"חמישי\",\r\n lblDay6: \"שישי\",\r\n lblDay7: \"שבת\",\r\n lblDay1s: \"א'\",\r\n lblDay2s: \"ב'\",\r\n lblDay3s: \"ג'\",\r\n lblDay4s: \"ד'\",\r\n lblDay5s: \"ה'\",\r\n lblDay6s: \"ו'\",\r\n lblDay7s: \"ש'\",\r\n msgSuccess: \"הפעולה הסתיימה בהצלחה\",\r\n msgNotPerformed: \"לא ניתן לסיים את הפעולה\",\r\n lblTimes: 'פעמים',\r\n lblUser: \"משתמש רגיל\",\r\n btnCancelDocument: 'בטל מסמך',\r\n lblBy: 'ע\"י',\r\n titleCreatedBy: 'נוצר על ידי',\r\n titleCreated: 'נוצר',\r\n titleCreatedAt: 'נוצר ב',\r\n titleAgo: 'לפני',\r\n lblAgo: 'לפני',\r\n lblSearch: 'חיפוש',\r\n lblCloseSearch: 'סגור חיפוש',\r\n lblColumnChooser: 'בחירת עמודות',\r\n lblColumnHiding: 'מצב גלילה',\r\n lblShowGridFilter: 'הפעל סינון מתקדם',\r\n lblHideGridFilter: 'הסתר סינון מתקדם',\r\n lblExcel: 'ייצוא לאקסל',\r\n lblPdf: 'ייצוא ל PDF',\r\n lblViewList: 'הצג בתור רשימת כרטיסיות',\r\n lblViewGrid: 'הצג בתור טבלה',\r\n lblDisplayUserName: 'שם משתמש',\r\n lblLastUseDate: 'תאריך פעולה אחרונה',\r\n lblLastUseBefore: 'פעולה אחרונה לפני',\r\n progressIndicator: 'מעביר נתונים.. אנא המתן',\r\n lblUpdated: 'עודכן',\r\n lblNoSorting: '- ברירת מחדל -',\r\n lblVersion: 'גרסה',\r\n lblDateIsNull: \"התאריך ריק\",\r\n lblDateApproximate:\"{1} {0} {2}\",\r\n f702: \"פחות מדקה\",\r\n f703: \"5 דקות\",\r\n f704: \"10 דקות\",\r\n f705: \"רבע שעה\",\r\n f706: \"חצי שעה\",\r\n f707: \"פחות משעה\",\r\n f709: \"שעה וחצי\",\r\n f710: \"שעתיים פלוס\",\r\n f711: \"{0} שעות\",\r\n f712: \"יום\",\r\n f713: \"יומיים\",\r\n f714: \"{0} ימים\",\r\n f715: \"שבוע פלוס\",\r\n f716: \"שבועיים פלוס\",\r\n f717: \"{0} שבועות\",\r\n f718: \"חודש פלוס\",\r\n f720: \"חודשיים\",\r\n f721: \"{0} חודשים\",\r\n f722: \"שנה פלוס\",\r\n f723: \"שנתיים פלוס\",\r\n f724: \"{0} שנים\",\r\n f725: \"פחות מיום\",\r\n lblOldPassword: 'סיסמה ישנה',\r\n lblNewPassword1: 'סיסמה חדשה',\r\n lblNewPassword2: 'אימות סיסמה',\r\n lblRecoveryPhone: 'טלפון לשליחת קוד אימות',\r\n lblRecoveryEmail: 'אימייל לשליחת קוד אימות',\r\n btnSendNotificationDispatch: '$$$Send',\r\n btnSendRecoveryCode: 'שלח קוד לאימות',\r\n btnCheckUserName: 'שחזר סיסמה',\r\n btnBackToLogin: '$$$Back to login page',\r\n lblRecoveryType: 'אופן שיחזור סיסמה',\r\n lblRecoveryToken: 'קוד אימות סודי',\r\n btnResend: 'שלח שנית',\r\n btnSaveChanges: 'שמור פרטי הזדהות',\r\n btnGeneratePassword: 'סיסמה חדשה',\r\n btnCreateCredentials: 'צור משתמש',\r\n btnUnlockUser: 'שחרר משתמש נעול',\r\n lblDisplayUsername: 'שם משתמש לתצוגה',\r\n lblDisplayUserDescription: 'תאור משתמש לתצוגה',\r\n lblCredentialsNotExist: 'המשתמש טרם הוקם',\r\n lblPendingWelcome: 'נשלחה בקשה והמשתמש טרם הצטרף',\r\n titleUserInformation: 'פרטי משתמש',\r\n errorMaxSizeUploadError: 'חלק מהקבצים שנבחרו עוברים את הגודל המקסימאלי של {0} מגה, ולא יועלו',\r\n msgFileSizeRestriction: 'גודל הקובץ המקסימאלי הינה {0} מגה',\r\n btnSelectFiles: 'בחר קבצים',\r\n btnMakePhoto: 'צלם תמונה',\r\n lblAttachFileSize: 'גודל',\r\n lblFilters: 'סינונים',\r\n lblAt: 'ב',\r\n\r\n lblObjectName: 'שם אובייקט',\r\n lblIsOverride: 'בוצע קיסטום',\r\n lblValidation: 'תקין',\r\n lblDViewsDBDuration: 'זמן תגובה מקורי',\r\n lblXViewsDBDuration: 'זמן תגובה לאחר קיסטום',\r\n lblCheckPerformance: 'בדוק ביצועים',\r\n lblValidateViews: 'בדוק תקינות מבנה',\r\n lblViewError: '$$$Error',\r\n\r\n lblLoginOTPSendMethod: 'שלח סיסמה חד-פעמית באמצעות',\r\n lblLoginOTPEmail: 'אימייל לשליחת סיסמה חד-פעמית',\r\n lblLoginOTPPhone: 'טלפון לשליחת SMS עם סיסמה חד-פעמית',\r\n lblLoginOTPOTP: 'סיסמה חד-פעמית',\r\n lnkLoginByOTP: 'הזדהות באמצעות סיסמה חד-פעמית',\r\n msgNotificationSent: 'הסיסמה נשלחה',\r\n btnLoginOtpSendOtp: 'שלח סיסמה',\r\n lnkLoginByPassword: 'כניסה עם שם משתמש וסיסמה',\r\n\r\n lblApply: 'החל',\r\n lblTaxNumber: 'ח.פ/תעודת זהות',\r\n\r\n lblIsActive: 'פעיל',\r\n lblEmail: 'אימייל',\r\n lblPhone: 'טלפון',\r\n lblIsPendingWelcome: 'ממתין להתחברות ראשונית',\r\n lblIsOnline: 'אונליין',\r\n lblIsLockedOut: 'נעול',\r\n lblCreateCredentials: 'צור משתמש',\r\n lblCredentialFilter: '$$$Credential Filter',\r\n\r\n msgRouteNotFound: 'נתיב שגוי',\r\n btnReload: 'טען מחדש',\r\n lblHideColumn: 'הסתר עמודה',\r\n lblShowHiddenColumns: 'הצג את כל העמודות',\r\n\r\n lblName: \"שם\",\r\n lblDescription: \"תיאור\",\r\n\r\n msgLoading: \"מעדכן נתונים.. אנא המתן\",\r\n lblSentDate: \"תאריך שליחה\",\r\n lblSentBy: \"נשלח על ידי\",\r\n lblEntryID: \"מספר\",\r\n lblFromAddress: \"מכתובת\",\r\n lblFromDisplayAddress: \"שם שולח\",\r\n lblAddress: \"כתובת\",\r\n lblSubject: \"כותרת\",\r\n lblMailBody: \"תוכן המייל\",\r\n lblDeliveryOption: \"אופן שליחה\",\r\n lblSendNotificationBy: \"שלח הודעות באמצעות\",\r\n lblUsernameCreationOption: 'מתן שם משתמש לפי',\r\n lblStatus: \"סטאטוס\",\r\n lblToAddress: \"כתובת\",\r\n lblCCAddress: \"העתק ל\",\r\n lblBccAddress: \"העתק מוסתר ל\",\r\n lblFailureDescription: \"הודעת שגיאה\",\r\n lblNotificationTemplate: \"שם תבנית\",\r\n lblFrom: \"מ\",\r\n lblUntil: \"עד \",\r\n lblSessionAlmostExpiredTitle: \"החיבור שלך יפוג בקרוב\",\r\n lblSessionAlmostExpiredPrompt: \"המערכת זיהתה חוסר פעילות ותנתק אותך בקרוב\",\r\n lblSessionExpiredTitle: \"החיבור למערכת פג\",\r\n lblSessionExpiredPrompt: \"החיבור שלך פג עקב חוסר פעילות. הינך מועבר לדף הכניסה\",\r\n lblFirstDate: \"תאריך ראשון\",\r\n lblLastDate: \"תאריך אחרון\",\r\n lblDate: \"תאריך\",\r\n lblAdd: \"הוסף\",\r\n lblClear: \"נקה\",\r\n lblCompactMode: \"תצוגה קומפקטית\",\r\n\r\n lblNotificationContent: \"תוכן ההתראה\",\r\n lblGeneral: \"כללי\",\r\n lblOptions: \"אפשרויות\",\r\n lblCustom: \"הגדרות מיוחדות\",\r\n\r\n lblMFACode: \"קוד חד-פעמי\",\r\n titleMFACodeOnEmailSent: \"סיסמה חד-פעמית נשלחה אלייך למייל. תזין אותו בשדה למטה\",\r\n titleMFACodeOnPhoneSent: \"סיסמה חד-פעמית נשלחה אלייך לנייד. תזין אותו בשדה למטה\",\r\n\r\n lblMFAMethod: \"אימות דו-שלבי\",\r\n\r\n Month_1: \"ינואר\",\r\n Month_2: \"פברואר\",\r\n Month_3: \"מרץ\",\r\n Month_4: \"אפריל\t\",\r\n Month_5: \"מאי\",\r\n Month_6: \"יוני\",\r\n Month_7: \"יולי\",\r\n Month_8: \"אוגוסט\",\r\n Month_9: \"ספטמבר\",\r\n Month_10: \"אוקטובר\",\r\n Month_11: \"נובמבר\",\r\n Month_12: \"דצמבר\",\r\n lblExport: \"ייצוא\",\r\n lblCredentialType: \"סוג משתמש\",\r\n lblIsRestrictByIP: \"הגבל לפי כתובת IP\",\r\n lblIsExcludeFromMFA: \"החרג כתובת מ מאימות דו-שלבי\",\r\n lblIPRangeStart: \"מכתובת IP\",\r\n lblIPRangeEnd: \"עד כתובת IP\",\r\n lblIPErrorMessage: \"כתובת ה IP חייבת להיות במבנה "000.000.000.000"\",\r\n msgIPRangesIsEmpty: \"יש לבחור כתובת אחת לפחות\",\r\n msgIPRangeIsEmpty: \"יש להזין כתובת IP חוקית\",\r\n msgPasswordMinLength: \"הסיסמה חייבת להיות באורך מינימאלי של {0} תווים\",\r\n msgPasswordMinCountDigits: \"הסיסמה חייבת להכיל מינימום של {0} ספרות\",\r\n msgPasswordMinCountLetters: \"הסיסמה חייבת להכיל מינימום של {0} אותיות באנגלית\",\r\n msgPasswordComplexityRequirement: \"הסיסמא חייבת להיות באורך מינימאלי של {0} תווים, ולהכיל לפחות {1} ספרות ו {2} אותיות באנגלית\",\r\n errorOnlyImageAllowed: \"ניתן לבחור רק תמונות\",\r\n btnClose: \"סגור\",\r\n lblPhoto: \"תמונה\",\r\n\r\n lblDragAndDrop: \"ניתן לגרור ולשחרר קבצים לכאן\",\r\n errorRequiredMessage: \"שדה חובה\",\r\n titleDuplicate: \"שכפל\",\r\n lblAllNotifications: \"כל ההתראות\",\r\n\r\n lblSMTPServer: \"שרת SMTP\",\r\n lblSMTPPort: \"פורט SMTP\",\r\n lblSMTPUserName: \"שם משתמש ל SMTP\",\r\n lblSMTPPassword: \"סיסמא ל SMTP\",\r\n lblSMTPUseSSL: \"השתמש בחיבור SSL\",\r\n lblSMSEndpoint: \"כתובת שרת SMS\",\r\n lblSMSUserName: \"שם משתמש ל SMS\",\r\n lblSMSPassword: \"סיסמא ל SMS\",\r\n lblSMSToken: \"טוקן ל SMS\",\r\n lblSMSEndPointIsInforU: \"ספק SMS\",\r\n\r\n titleTemplateInformation: \"מידע על תבנית התראה\",\r\n titleEmailInformation: \"הגדרות מייל\",\r\n lblFromEmail: \"שלח מכתובת אימייל\",\r\n lblFromEmailDisplay: \"שלח מ שם\",\r\n titlePhoneInformation: \"הגדרות SMS\",\r\n lblNotificationServer: \"שרת התראות\",\r\n lblFromPhone: \"שלח SMS מטלפון\",\r\n lblSMSBody: \"תוכן ההודעה\",\r\n titlePushMessagesInformation: \"הגדרות התראה באפליקציה\",\r\n lblPushMessageBody: \"תוכן ההתראה\",\r\n lblHTMLBody: \"גוף HTML\",\r\n btnSave: 'שמור',\r\n titleDelete: 'מחק',\r\n lblUseDefault: 'השתמש בברירת מחדל',\r\n lblNoUnreadMessages: 'אין התראות חדשות',\r\n lblTo: 'אל',\r\n lblPushMessageContent: 'תוכן ההתראה',\r\n lblSmsMessageContent: 'תוכן ההודעה',\r\n lblIsAutomatic: 'נשלח אוטומטית',\r\n lblSystem: 'הודעת מערכת',\r\n lblPopupShowStatus: 'סטאטוס התראה קופצת',\r\n lblEmailContent: 'תוכן אימייל',\r\n btnShowInEditor: 'הצג בעורך HTML',\r\n titleLeavePageConfirmation: 'המידע שהזנת לא יישמר. האם ברצונך להמשיך?',\r\n btnLogOff: 'התנתק',\r\n btnStayConnected: 'הישאר מחובר',\r\n btnGoToHomePage: 'עבור לעמוד הבית',\r\n lblReadDate: 'תאריך צפייה',\r\n msgDeleteNotificationTemplateQuestion: 'ייתכן ותבנית זו בשימוש על ידי המערכת. האם ברצונך למחוק אותה?',\r\n lblNotificationServerWrong: 'הגדרות שרת ההתראות אינן תקינות. בדוק אותן ונסה שנית',\r\n lblMIDIsMissing: \"חסר קוד MID\",\r\n lblEnterMID: \"הכנס קוד MID חדש.\",\r\n btnTestServer: 'בדוק שרת',\r\n btnShowPreview: \"תצוגה מקדימה\",\r\n lblIsServer: \"שרת\",\r\n lblIsClient: \"קליינט\",\r\n lblModuleName: \"מודול\",\r\n lblLogin: \"Login\",\r\n lblFramework: \"Framework\",\r\n lblOption: \"הגדרה\",\r\n lblValue: \"ערך\",\r\n lblSectionName: \"סעיף\",\r\n lblAddOption: 'הוסף הגדרה',\r\n msgOptionAlreadyExists: 'ההגדרה כבר קיימת',\r\n msgOptionEmpty: 'הגדרה {0} ריקה',\r\n lblBadLogin: 'הזדהות נכשלה',\r\n msgRemoveOption: \"האם אתה בטוח שברצונך למחוק את האפשרות '{0}'?\",\r\n titleEmailConfiguration: \"תצורת אימייל\",\r\n titleSMSConfiguration: \"תצורת SMS\",\r\n msgDeleteNotificationServerQuestion: \"ניתן להשתמש בשרת הודעות באפליקציה. האם אתה בטוח שברצונך למחוק אותו?\",\r\n msgNoData: \"אין נתונים\",\r\n lblEmailHeader: \"כותרת מייל\",\r\n lblConfigure: \"הגדר\",\r\n lblDefaultFromAddressForInforU: \"Test\",\r\n lblDefaultFromAddressForUnicel: \"0509999999\",\r\n lblInforUFromPhoneValidationTooltip: \"יש להקליד מספר טלפון שנמצא ברשימת White-list במערכת או שם שולח באנגלית בלבד, עד 11 תווים\",\r\n lblNotifications: \"התראות\",\r\n lblMinimize: \"צמצם\",\r\n lblShowMore: \"הצג עוד\",\r\n titleWhatsAppInformation: \"תבנית לשליחת WhatsApp\",\r\n lblWhatsAppBody: \"תוכן הודעה ב-WhatsApp\",\r\n lblWhatsAppApiKey: \"WhatsApp Api Key\",\r\n lblWhatsAppEndpoint: \"WhatsApp Endpoint\",\r\n titleWhatsAppConfiguration: \"הגדרות WhatsApp\",\r\n titleNotificationDispatchList: \"$$$Notification dispatch list\",\r\n titleNotificationServerList: \"שרת התראות\",\r\n titleNotificationTemplateList: \"תבנית התראות\",\r\n\r\n lblPoweredBy: \"Powered by Menahel4U\",\r\n titleChooseOption: \"בחר אפשרות\",\r\n titleWebAPIAllowedIPs: \"כתובות IP מותרות\",\r\n lblIpAddress: \"כתובת IP\",\r\n lblLoginDate: \"תאריך חיבור\",\r\n lblPrint: \"הדפסה\",\r\n lblDateFrom: 'מתאריך',\r\n lblDateTo: 'עד תאריך',\r\n msgCouldNotStartVideoError: 'מצלמה אינה זמינה',\r\n msgCameraPermissionDenied: 'אין הרשאת גישה למצלמה',\r\n lblCameraModeVideo: 'וידאו',\r\n lblCameraModePhoto: 'תמונה',\r\n titlePreview: 'תצוגה מקדימה',\r\n msgLogoutQuestion: 'האם אתה בטוח שברצונך להתנתק?',\r\n lblGroupPanel: 'קיבוץ עמודות',\r\n lblExpandAll: 'הרחב הכל',\r\n lblMultiEmailError: 'ערך לא חוקי, השתמש בסמל ; על מנת להפריד בין המיילים',\r\n msgPhotoMinCountError: 'הספירה המינימלית היא {0}',\r\n msgPhotoMaxCountError: 'הספירה המקסימלית היא {0}',\r\n lblRestoreDefaultView: \"שחזר תצוגת ברירת מחדל\",\r\n lblStartDate: \"תאריך התחלה\",\r\n lblDuration: \"משך זמן\",\r\n lblController: \"קונטרולר\",\r\n lblMethod: \"שיטה\",\r\n lblStatusCode: \"קוד סטטוס\",\r\n lblRequestData: \"נתוני בקשה\",\r\n lblQueryString: \"פרמטרים ב URL\",\r\n lblBody: \"תוכן בקשה\",\r\n lblResponse: \"תוכן תשובה\",\r\n msgTextCopied: \"טקסט הועתק\",\r\n lblCopy: \"העתק\",\r\n btnGoToLoginHistory: \"עבור לדוח התחברויות\",\r\n btnGoToRequestsHistory: \"עבור לדוח פניות לשרת\",\r\n btnGoToCredentialsReport: \"עבור לדוח משתמשים\",\r\n btnManageCredentials: \"נהל פרטי התחברות\",\r\n btnWelcomeUser: \"שליחת הודעת ברוך-הבא\",\r\n lblTestFromPhone: \"מטלפון\",\r\n lblNewValue: \"ערך חדש\",\r\n lblOldValue: \"ערך ישן\",\r\n lblFieldCaption: \"שדה\",\r\n lblDocumentCaption: \" מסך\",\r\n lblAction: \"פעולה\",\r\n lblHistoryLineAdded: \"{0} - שורה מספר {1} נוספה.\",\r\n lblHistoryLineRemoved: \"{0} - שורה מספר {1} נמחקה.\",\r\n lblHistoryLineNumber: \"{0} - שורה מספר {1}\",\r\n lblHistory: \"היסטורית שינוים\",\r\n lblHistoryNotFound: \"לא נמצאו שינויים.\",\r\n lblHistoryChangeAdded: \"{0} {1} נוצר\",\r\n lblHistoryChangeRemoved: \"{0} {1} נמחק\",\r\n msgLoadingPDF: 'טוען קובץ PDF...',\r\n lblImpersonatedBy: 'בוצעה התחזות ע\"י',\r\n lblIsUserCustomTemplate: \"תבנית שבוצעו בה התאמות מיוחדות\",\r\n msgIsUserCustomTemplateEnable: \"אם אפשרות העריכה תופעל, תוכל לערוך את התבנית, אך במקרה של עדכון גרסה עתידי, המערכת לא תוכל לעדכן תבנית זו באופן אוטומטי במידה ויהיו בה שינויים.\",\r\n btnEnableEditable: \"הפעל אפשרות לעריכה\",\r\n btnDisableEditable: \"בטל אפשרות לעריכה\",\r\n msgScreenSizeChangedRefresh: '$$$Screen size is changed. Please refresh browser window.',\r\n msgOrientationChangedRefresh: '$$$Orientation is changed. Please refresh browser window.',\r\n lblNotAssigned: \"- לא משוייך -\",\r\n msgNotificationSentTo: ' הקוד נשלח ל {0}', \r\n lblDeliveryMethod: '$$$Delivery Method',\r\n lblNotificationDispatch: '$$$Notification Dispatch',\r\n lblRecipients: '$$$Recipients',\r\n lblPreview: '$$$Preview',\r\n msgRecipientsAreEmpty: '$$$You have to add at least one recipient',\r\n lblCreatedBy: 'נוצר על ידי',\r\n btnCancelNotifications: '$$$Cancel notifications',\r\n lblCancelNotificationsPrompt: '$$$You are going to cancel unread Push notifications. Do you want to proceed?',\r\n lblNotificationMessage: '$$$Notification Message',\r\n lblIsDeleted: '$$$Deleted',\r\n lblShareMethodEmail: '$$$Email',\r\n lblShareMethodSms: '$$$SMS',\r\n lblShareMethodWhatsapp: '$$$WhatsApp',\r\n lblShareMethodPrint: '$$$Print',\r\n lblShare: '$$$Share',\r\n lblEntityType: '$$$Entity type',\r\n lblPageName: '$$$Page',\r\n btnSend: '$$$Send',\r\n lblChooseTemplate: '$$$Choose template',\r\n lblShareMethodDownload: '$$$Download',\r\n lblShareMethodShare: '$$$Share',\r\n lblUploadCrystalTemplate: '$$$Upload crystal tempalte',\r\n lblNotificationTemplateEditingMode: '$$$Body editing mode',\r\n msgShareNotificationTemplateNotFoundError: '$$$Notification templates are not configured for this page',\r\n btnShare: 'Share',\r\n msgNotificationTemplatePrefixNotFoundError: '$$$ $PrefixBody$ param is missing',\r\n lblPrefixBody: '$$$Prefix body',\r\n lblIsSharePdf: '$$$Share PDF',\r\n lblFileNameFormat: '$$$File name format',\r\n lblEntityBindingPageType: '$$$Bind to',\r\n titleEntityBindingInformation: '$$$Entity binding',\r\n msgNotificationTemplateFileMissingError: '$$$Crystal report template is missing',\r\n lblSharedFile: '$$$Shared file',\r\n msgNotificationTemplateEmptyError: '$$$Cannot save empty template',\r\n lblIsSupportEmail: '$$$Support Email',\r\n lblIsSupportSMS: '$$$Support SMS',\r\n lblIsSupportWhatsapp: '$$$Support Whatsapp',\r\n lblIsSupportPush: '$$$Support push',\r\n lblIsSupportSharing: '$$$Support sharing',\r\n lblIsShareByEntities: '$$$Share by entities',\r\n ttlLogs: \"$$$Logs\",\r\n lblObjectType: \"$$$Object type\",\r\n lblObjectID: \"$$$Object ID\",\r\n lblLevel: \"$$$Level\",\r\n lblHeader: '$$$Header',\r\n }\r\n};\r\n\r\n\r\n","import {\r\n EnumInfoUTypes,\r\n EnumLanguages,\r\n EnumLogLevel,\r\n EnumMFAMethods,\r\n EnumNotificationDeliveryOptions,\r\n EnumNotificationStatuses,\r\n EnumNotificationTemplateEditingMode,\r\n EnumPopupShowStatuses,\r\n EnumPrintingType,\r\n EnumSystemOptionDataTypes,\r\n EnumSystemOptions,\r\n EnumUserLoginStatus,\r\n EnumYesNo,\r\n HistoryEventTypesEnum\r\n} from '@core/framework/sysenums.enum';\r\n\r\nexport const Resources_ES =\r\n{\r\n Pages:\r\n {\r\n login: 'Iniciar sesión en el sistema',\r\n logout: 'Cerrar sesión',\r\n credentials_activity_status: 'Estado de actividad del usuario',\r\n notificationshistory: 'Informe de notificaciones',\r\n notification_dispatches: 'Envíos de notificaciones',\r\n notification_servers: 'Servidores de notificación',\r\n notification_templates: 'Plantillas de notificación',\r\n notifications: 'Notificaciones',\r\n system_options: 'Opciones del sistema',\r\n credential_login_history: \"Informe del historial de inicio de sesión\",\r\n request_history: \"Solicitar historial\",\r\n credentials_report: 'Informe de credenciales',\r\n credentials_creation: 'Nueva asignación de credenciales',\r\n data_views: 'Gestión de vistas de la base de datos',\r\n menu: 'Menú',\r\n remote_request_history: \"Historial de peticiones remotas\",\r\n NotificationViewComponent: 'Notificación',\r\n PrintBoxDialogComponent: 'Imprimir',\r\n SignBoxDialogComponent: 'Firmar documento',\r\n ImageBoxDialogComponent: 'Imagen',\r\n PhotoBoxDialogComponent: 'Foto',\r\n PasswordManageComponent: 'Gestión de credenciales',\r\n CredentialsActivityStatusComponent: 'Estado de actividad del usuario',\r\n NotificationsHistoryComponent: 'Informe de notificaciones',\r\n PreviewDialogComponent: 'Vista previa',\r\n NotificationDispatchComponent: 'Envío de notificaciones',\r\n NotificationDispatchListComponent: 'Envíos de notificaciones',\r\n NotificationServerComponent: 'Servidor de notificaciones',\r\n NotificationServerListComponent: 'Servidores de notificación',\r\n NotificationTemplateListComponent: 'Plantillas de notificación',\r\n NotificationTemplateComponent: 'Plantilla de notificación',\r\n HtmlBoxDialogComponent: 'Editor HTML',\r\n NotificationTestDialogComponent: 'Prueba de notificación',\r\n NotificationPreviewDialogComponent: 'Vista previa de la notificación',\r\n SystemOptionsComponent: 'Opciones del sistema',\r\n AddSystemOptionDialogComponent: 'Añadir opción',\r\n BarcodeBoxDialogComponent: 'Escanear código de barras/código QR',\r\n CredentialLoginHistoryComponent: \"Informe del historial de inicio de sesión\",\r\n RequestHistoryListComponent: \"Solicitar historial\",\r\n RequestHistoryComponent: \"Solicitar\",\r\n RemoteRequestHistoryListComponent: \"Historial de solicitudes remotas\",\r\n RemoteRequestHistoryComponent: \"Solicitud remota\",\r\n WelcomeUserDialogComponent: \"Mensaje de bienvenida\",\r\n HistoryViewComponent: 'Historial de cambios del documento',\r\n SystemCredentialsComponent: 'Informe de credenciales',\r\n SystemCredentialsCreationComponent: 'Nueva asignación de credenciales',\r\n WelcomeMessageConfigDialogComponent: 'Notificación de bienvenida',\r\n DataViewListComponent: 'Vistas de datos',\r\n MenuButtonListComponent: 'Menú principal',\r\n ShareDialogComponent: 'Compartir',\r\n },\r\n Lists:\r\n {\r\n Languages:\r\n [\r\n {\r\n Value: EnumLanguages.Hebrew,\r\n Text: \"Hebreo/עברית\",\r\n },\r\n {\r\n Value: EnumLanguages.English,\r\n Text: \"Inglés/אנגלית\"\r\n },\r\n {\r\n Value: EnumLanguages.Spanish,\r\n Text: \"Español/ספרדית\"\r\n },\r\n ],\r\n\r\n NotificationDeliveryOptions: [\r\n {\r\n Value: EnumNotificationDeliveryOptions.Email,\r\n Text: 'Correo electrónico',\r\n ID: 0\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.SMS,\r\n Text: 'SMS',\r\n ID: 1\r\n }, \r\n {\r\n Value: EnumNotificationDeliveryOptions.WhatsApp,\r\n Text: 'WhatsApp',\r\n ID: 3\r\n }\r\n ],\r\n NotificationDispatchDeliveryOptions: [\r\n {\r\n Value: EnumNotificationDeliveryOptions.Email,\r\n Text: 'Correo electrónico'\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.SMS,\r\n Text: 'SMS'\r\n }, \r\n {\r\n Value: EnumNotificationDeliveryOptions.WhatsApp,\r\n Text: 'WhatsApp'\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.PushMessage,\r\n Text: 'Push'\r\n },\r\n ],\r\n NotificationTemplateEditingModes: [\r\n {\r\n Value: EnumNotificationTemplateEditingMode.None,\r\n Text: 'Ninguna',\r\n ID: 0,\r\n SortOrder: 1\r\n },\r\n {\r\n Value: EnumNotificationTemplateEditingMode.Preview,\r\n Text: 'Solo vista previa',\r\n ID: 4,\r\n SortOrder: 2\r\n },\r\n {\r\n Value: EnumNotificationTemplateEditingMode.EditPrefix,\r\n Text: 'Editar prefijo',\r\n ID: 1,\r\n SortOrder: 3\r\n },\r\n {\r\n Value: EnumNotificationTemplateEditingMode.EditBody,\r\n Text: 'Editar cuerpo',\r\n ID: 3,\r\n SortOrder: 4\r\n },\r\n ],\r\n UserCreationOptions: [\r\n {\r\n Value: EnumNotificationDeliveryOptions.Email,\r\n Text: 'Correo electrónico',\r\n ID: 0\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.SMS,\r\n Text: 'Teléfono',\r\n ID: 1\r\n }\r\n ],\r\n WelcomeDeliveryOptions: [\r\n {\r\n Value: EnumNotificationDeliveryOptions.Email,\r\n Text: 'Correo electrónico',\r\n ID: 0,\r\n SortOrder: 1\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.SMS,\r\n Text: 'SMS',\r\n ID: 1,\r\n SortOrder: 2\r\n }, \r\n {\r\n Value: EnumNotificationDeliveryOptions.WhatsApp,\r\n Text: 'WhatsApp',\r\n ID: 3,\r\n SortOrder: 3\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.DontSend,\r\n Text: 'No enviar',\r\n ID: 4,\r\n SortOrder: 4\r\n }\r\n ],\r\n NotificationTypes: [\r\n {\r\n Value: EnumNotificationDeliveryOptions.Email,\r\n Text: 'Correo electrónico',\r\n SortOrder: 1,\r\n index: 0,\r\n text: 'Correo electrónico',\r\n Name: EnumNotificationDeliveryOptions.Email\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.SMS,\r\n Text: 'SMS',\r\n SortOrder: 2,\r\n index: 1,\r\n text: 'SMS',\r\n Name: EnumNotificationDeliveryOptions.SMS\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.PushMessage,\r\n Text: 'Mensaje push',\r\n SortOrder: 3,\r\n index: 2,\r\n text: 'Mensaje push',\r\n Name: EnumNotificationDeliveryOptions.PushMessage\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.WhatsApp,\r\n Text: 'WhatsApp',\r\n SortOrder: 4,\r\n index: 3,\r\n text: 'WhatsApp',\r\n Name: EnumNotificationDeliveryOptions.WhatsApp\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.Share,\r\n Text: 'Compartir',\r\n SortOrder: 4,\r\n index: 3,\r\n text: 'Compartir',\r\n Name: EnumNotificationDeliveryOptions.Share\r\n }\r\n ],\r\n NotificationStatuses:\r\n [\r\n {\r\n Value: EnumNotificationStatuses.Draft,\r\n Text: \"Borrador\"\r\n },\r\n {\r\n Value: EnumNotificationStatuses.Sending,\r\n Text: \"Enviando\"\r\n },\r\n {\r\n Value: EnumNotificationStatuses.Failure,\r\n Text: \"Fallo\"\r\n },\r\n {\r\n Value: EnumNotificationStatuses.Sent,\r\n Text: \"Enviado\"\r\n },\r\n ],\r\n NotificationPredefinedSmtpServers: [\r\n {\r\n Text: \"Office 365\",\r\n SMTPServer: \"smtp.office365.com\",\r\n SMTPPort: 587,\r\n SMTPUseSSL: true\r\n },\r\n {\r\n Text: \"Gmail\",\r\n SMTPServer: \"smtp.gmail.com\",\r\n SMTPPort: 111,\r\n SMTPUseSSL: true\r\n },\r\n {\r\n Text: \"SendGrid\",\r\n SMTPServer: \"smtp.sendgrid.com\",\r\n SMTPPort: 111,\r\n SMTPUseSSL: false\r\n }\r\n ],\r\n NotificationPredefinedSmsServers: [\r\n {\r\n Text: \"InforU\",\r\n SMSEndpoint: \"https://uapi.inforu.co.il/SendMessageXml.ashx\",\r\n SMSToken: 111,\r\n SMSEndPointIsInforU: EnumInfoUTypes.InforU\r\n },\r\n {\r\n Text: \"Unicell\",\r\n SMSEndpoint: \"http://api.soprano.co.il/\",\r\n SMSToken: 222,\r\n SMSEndPointIsInforU: EnumInfoUTypes.Unicell\r\n }\r\n ],\r\n MFAMethods:\r\n [\r\n {\r\n Value: EnumMFAMethods.None,\r\n Text: \"Ninguno\"\r\n },\r\n {\r\n Value: EnumMFAMethods.Email,\r\n Text: \"Correo electrónico\"\r\n },\r\n {\r\n Value: EnumMFAMethods.SMS,\r\n Text: \"SMS\"\r\n },\r\n {\r\n Value: EnumMFAMethods.WhatsApp,\r\n Text: \"WhatsApp\"\r\n }\r\n ],\r\n ExportMenuItems: [\r\n {\r\n SortOrder: 0,\r\n Value: 1,\r\n Text: \"Excel\"\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: 2,\r\n Text: \"Imprimir\"\r\n }\r\n ],\r\n PopupShowStatuses: [\r\n {\r\n Value: EnumPopupShowStatuses.None,\r\n Text: \"Ninguno\"\r\n },\r\n {\r\n Value: EnumPopupShowStatuses.ToShow,\r\n Text: \"Por mostrar\"\r\n },\r\n {\r\n Value: EnumPopupShowStatuses.Showed,\r\n Text: \"Mostrados\"\r\n }\r\n ],\r\n InfoUTypes: [\r\n {\r\n Value: EnumInfoUTypes.Unicell,\r\n Text: \"Unicell\"\r\n },\r\n {\r\n Value: EnumInfoUTypes.InforU,\r\n Text: \"InforU\"\r\n }\r\n ],\r\n SystemOptions: [\r\n {\r\n Value: EnumSystemOptions.AppNameHE,\r\n Text: 'Nombre de la aplicación Hebreo'\r\n }, {\r\n Value: EnumSystemOptions.AppNameEN,\r\n Text: 'Nombre de la aplicación Inglés'\r\n }, {\r\n Value: EnumSystemOptions.AppURL,\r\n Text: 'URL de la aplicación'\r\n }, {\r\n Value: EnumSystemOptions.SessionTimeout,\r\n Text: 'Tiempo de espera de la sesión'\r\n }, {\r\n Value: EnumSystemOptions.SessionExpiry,\r\n Text: 'Expiración de la sesión'\r\n }, {\r\n Value: EnumSystemOptions.EnableRequestLogging,\r\n Text: 'Activar el registro de solicitudes'\r\n }, {\r\n Value: EnumSystemOptions.EnableRemoteLogging,\r\n Text: 'Activar el registro remoto'\r\n }, {\r\n Value: EnumSystemOptions.ShowExpiredTimeoutAlert,\r\n Text: 'Mostrar alerta de tiempo expirado',\r\n DataType: EnumSystemOptionDataTypes.Boolean,\r\n SectionName: 'Framework'\r\n }, {\r\n Value: EnumSystemOptions.ShowAlmostExpiredTimeoutAlert,\r\n Text: 'Mostrar alerta de tiempo casi expirado'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportedCredentialsManagement,\r\n Text: 'Gestión de credenciales de asistencia'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportedUserWelcome,\r\n Text: 'Bienvenida al usuario de asistencia'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportedPasswordChange,\r\n Text: 'Cambio de contraseña de asistencia'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportedPasswordRecovery,\r\n Text: 'Recuperación de contraseña de asistencia'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportedLoginByOTP,\r\n Text: 'Acceso de asistencia mediante OTP'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportedLoginByPassword,\r\n Text: 'Acceso de asistencia mediante contraseña'\r\n }, {\r\n Value: EnumSystemOptions.IsAutoCreateCredentials,\r\n Text: 'Crear credenciales automáticamente'\r\n }, {\r\n Value: EnumSystemOptions.AutoCreateCredentialsType,\r\n Text: 'Crear automáticamente el tipo de credenciales'\r\n }, {\r\n Value: EnumSystemOptions.IsRequireTaxNumberForOTP,\r\n Text: 'Requerir número de identificación fiscal para OTP'\r\n }, {\r\n Value: EnumSystemOptions.PasswordChangeIntervalDays,\r\n Text: 'Intervalo de cambio de contraseña, días'\r\n }, {\r\n Value: EnumSystemOptions.PasswordComplexityLen,\r\n Text: 'Longitud de la complejidad de la contraseña'\r\n }, {\r\n Value: EnumSystemOptions.PasswordComplexityMinChars,\r\n Text: 'Complejidad de la contraseña Símbolos de caracteres mínimos'\r\n }, {\r\n Value: EnumSystemOptions.PasswordComplexityMinDigits,\r\n Text: 'Complejidad de la contraseña Símbolos de dígitos mínimos'\r\n }, {\r\n Value: EnumSystemOptions.BadLoginAttemptBeforeLock,\r\n Text: 'Inicio de sesión incorrecto. Intento antes del bloqueo'\r\n }, {\r\n Value: EnumSystemOptions.BadLoginAttemptsCheckIntervalMinutes,\r\n Text: 'Inicio de sesión incorrecto. Intervalo de comprobación de intentos, minutos'\r\n }, {\r\n Value: EnumSystemOptions.BadLoginAttemptLockouIntervalMinutes,\r\n Text: 'Inicio de sesión incorrecto. Intervalo de bloqueo de intentos, minutos'\r\n }, {\r\n Value: EnumSystemOptions.XFrameOptions,\r\n Text: 'Opciones de bloqueo de XFrame'\r\n }, {\r\n Value: EnumSystemOptions.IsDeployedBehindLoadBalancer,\r\n Text: 'Desplegado tras equilibrador de carga / proxy'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportNotificationMethodEmail,\r\n Text: 'Método de notificación de asistencia por correo electrónico'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportNotificationMethodSMS,\r\n Text: 'Método de notificación de asistencia por SMS'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportNotificationMethodWhatsApp,\r\n Text: 'Método de notificación de asistencia por WhatsApp'\r\n }, {\r\n Value: EnumSystemOptions.RetentionPeriodRequests,\r\n Text: 'Periodo de retención de solicitudes'\r\n }, {\r\n Value: EnumSystemOptions.RetentionPeriodRemoteRequests,\r\n Text: 'Periodo de retención de solicitudes remotas'\r\n }, {\r\n Value: EnumSystemOptions.RetentionPeriodNotifications,\r\n Text: 'Período de retención de notificaciones'\r\n }, {\r\n Value: EnumSystemOptions.RetentionPeriodSessions,\r\n Text: 'Periodo de retención de las sesiones'\r\n }, {\r\n Value: EnumSystemOptions.SessionFingerprintFreezeTimeout,\r\n Text: 'Tiempo de espera para congelar la huella digital de la sesión (minutos)'\r\n },\r\n ],\r\n UserLoginStatuses: [\r\n {\r\n Value: EnumUserLoginStatus.All,\r\n Text: \"Todos\"\r\n },\r\n {\r\n Value: EnumUserLoginStatus.Success,\r\n Text: \"Éxito\"\r\n },\r\n {\r\n Value: EnumUserLoginStatus.Failure,\r\n Text: \"Fallo\"\r\n }\r\n ],\r\n IsSuccessStatuses: [\r\n {\r\n Value: true,\r\n Text: \"Éxito\"\r\n },\r\n {\r\n Value: false,\r\n Text: \"Fallo\"\r\n },\r\n ],\r\n HistoryEventTypesEnum: [\r\n {\r\n Value: HistoryEventTypesEnum.FieldChange,\r\n Text: \"Campo cambiado\"\r\n },\r\n {\r\n Value: HistoryEventTypesEnum.RowAdded,\r\n Text: \"Fila añadida\"\r\n },\r\n {\r\n Value: HistoryEventTypesEnum.RowDeleted,\r\n Text: \"Fila eliminada\"\r\n },\r\n {\r\n Value: HistoryEventTypesEnum.Special,\r\n Text: \"Especial\"\r\n }\r\n ],\r\n YesNo:\r\n [\r\n {\r\n Value: EnumYesNo.Yes,\r\n Text: 'Sí'\r\n },\r\n {\r\n Value: EnumYesNo.No,\r\n Text: 'No'\r\n }\r\n ],\r\n PageTypes: [\r\n {\r\n Value: EnumPrintingType.None,\r\n Text: 'Ninguno'\r\n },\r\n {\r\n Value: EnumPrintingType.Report,\r\n Text: 'Informe'\r\n },\r\n {\r\n Value: EnumPrintingType.Entity,\r\n Text: 'Entidad'\r\n }\r\n ],\r\n LogLevels: \r\n [\r\n {\r\n Value: EnumLogLevel.Warning,\r\n Text: 'Aviso'\r\n },{\r\n Value: EnumLogLevel.Info,\r\n Text: 'Info'\r\n },{\r\n Value: EnumLogLevel.Error,\r\n Text: 'Error'\r\n },\r\n ]\r\n },\r\n Translations:\r\n {\r\n lblLanguage: \"Idioma\",\r\n lblUserName: \"Nombre de usuario\",\r\n lblPassword: \"Contraseña\",\r\n titleLogin: \"Inicio de sesión en el sistema\",\r\n btnLogin: \"Iniciar sesión\",\r\n btnLogout: 'Cerrar sesión',\r\n btnChangePassword: 'Cambiar contraseña',\r\n btnContactUs: \"Contacta con nosotros\",\r\n btnRecoverPassword: 'Contraseña olvidada',\r\n lblSaveCredentials: 'Recuérdame',\r\n titleLogout: \"Cerrar sesión\",\r\n titleLogoutLong: \"Sesión cerrada con éxito\",\r\n titleLogoutLast: \"Te estamos redirigiendo a la pantalla de inicio de sesión\",\r\n titleSessionExpiredTitle: \"Sesión caducada\",\r\n titleSessionExpired: \"Se ha cerrado tu sesión por inactividad o por un cambio en las credenciales de usuario en el servidor. Por favor, accede de nuevo\",\r\n titleChangePasswordTitle: \"Cambiar contraseña\",\r\n titleChangePassword: \"Introduce una nueva contraseña. La contraseña debe ser robusta y seguir las normas establecidas por tu departamento de informática\",\r\n titleChangePasswordTitle2: \"Cambiar contraseña caducada\",\r\n titleException: \"Error del sistema\",\r\n titleExceptionLong: \"Los detalles del error se muestran más abajo. Por favor, envíalos al administrador del sistema.\\nSe ha producido un error inesperado:\",\r\n titleComingSoonTitle: \"Esta característica estará disponible próximamente\",\r\n titlePasswordChanged: 'La contraseña se ha cambiado correctamente. Por favor, usa tu nueva contraseña para iniciar sesión de nuevo',\r\n titleIdentification: 'Identificación del usuario',\r\n titlePasswordEntry: 'Nueva entrada de contraseña',\r\n titleRecoverPasswordTitle: 'Recuperar contraseña olvidada',\r\n titleWelcomePasswordTitle: 'Primer inicio de sesión en el sistema',\r\n titleRecoverPassword1: 'Introduce tu nombre de usuario',\r\n titleRecoverPassword2: 'Puedes recuperar tu contraseña olvidada, siempre que tengas acceso al correo electrónico o teléfono que está guardado en tu cuenta',\r\n titleRecoverPassword3: 'Para cambiar la contraseña, por favor, introduce el código de verificación que te enviamos',\r\n titleRecoverPassword4: 'Introduce una nueva contraseña. La contraseña debe ser robusta y seguir las normas establecidas por tu departamento de informática.',\r\n titleWelcomePassword2: '¡Bienvenido/a! Por favor, introduce el nombre de usuario y el código de verificación que has recibido, para proceder a configurar tu nueva contraseña',\r\n titleWelcomePassword3: \"Introduce una nueva contraseña. La contraseña debe ser robusta y seguir las normas establecidas por tu departamento de informática. A partir de ahora, usarás esta contraseña para entrar en el sistema\",\r\n btnReEntry: \"Volver a iniciar sesión\",\r\n genOK: 'OK',\r\n genYes: \"Sí\",\r\n genNo: \"No\",\r\n genCancel: \"Cancelar\",\r\n genNoData: \"No existen datos\",\r\n genPrint: 'Imprimir',\r\n genSign: 'Firmar',\r\n genReset: 'Resetear',\r\n genTakePhoto: 'Hacer foto',\r\n genSavePhotos: 'Guardar fotos',\r\n genDownload: 'Descargar',\r\n msgSignHere: 'Por favor, traza tu firma dentro del cuadrado',\r\n msgSignatureRequired: 'Debes introducir tu firma para continuar',\r\n msgPasswordsDontMatch: 'La contraseña y la confirmación de la contraseña no coinciden',\r\n errorNetwork: \"Error de comunicación con el servidor - comprueba tu conexión de red\",\r\n errorSessionExpired: \"Sesión caducada por inactividad\",\r\n errorUserInvalid: \"Los datos de usuario han cambiado. Por favor, accede de nuevo\",\r\n errorNotInitialized: \"No se ha podido iniciar la sesión porque los ajustes del sistema no se han cargado correctamente. Por favor, vuelve a cargar la página\",\r\n errorUnexpected: \"@@@Ha ocurrido un error inesperado del servidor@@@: {0}\",\r\n errorUnauthorized: \"El usuario no está autorizado para esta operación\",\r\n errorPasswordExpired: \"La contraseña ha caducado. Por favor, elige una contraseña diferente\",\r\n msgFinishEditing: \"Por favor, termina de editar la línea actual antes de añadir la nueva\",\r\n errorUserNameNotFound: \"Nombre de usuario no encontrado\",\r\n errorIsNotExistsPhoneAndEmail: \"No se ha definido un correo electrónico ni un teléfono. Ponte en contacto con el servicio de asistencia técnica\",\r\n errorSessionIsFrozen: \"La sesión se ha congelado por usar la misma credencial en otro dispositivo\",\r\n lblDay1: \"Domingo\",\r\n lblDay2: \"Lunes\",\r\n lblDay3: \"Martes\",\r\n lblDay4: \"Miércoles\",\r\n lblDay5: \"Jueves\",\r\n lblDay6: \"Viernes\",\r\n lblDay7: \"Sábado\",\r\n lblDay1s: \"Dom\",\r\n lblDay2s: \"Lun\",\r\n lblDay3s: \"Mar\",\r\n lblDay4s: \"Mie\",\r\n lblDay5s: \"Jue\",\r\n lblDay6s: \"Vie\",\r\n lblDay7s: \"Sáb\",\r\n msgSuccess: \"Operación completada con éxito\",\r\n msgNotPerformed: \"No se puede completar la operación\",\r\n lblTimes: 'momentos',\r\n lblUser: \"Usuario estándar\",\r\n btnCancelDocument: 'Cancelar documento',\r\n lblBy: 'Por',\r\n titleCreatedBy: 'Creado por',\r\n titleCreated: 'Creado',\r\n titleCreatedAt: 'Creado en',\r\n titleAgo: 'Ago',\r\n lblAgo: 'ago',\r\n lblSearch: 'Búsqueda',\r\n lblCloseSearch: 'Cerrar búsqueda',\r\n lblColumnChooser: 'Mostrar selector de columnas',\r\n lblColumnHiding: 'Alternar ocultar columnas',\r\n lblShowGridFilter: 'Mostrar filtros avanzados',\r\n lblHideGridFilter: 'Ocultar filtros avanzados',\r\n lblExcel: 'Exportar a Excel',\r\n lblPdf: 'Exportar a PDF',\r\n lblViewList: 'Ver como lista de tarjetas',\r\n lblViewGrid: 'Ver como tabla',\r\n lblDisplayUserName: 'Nombre de usuario',\r\n lblLastUseDate: 'Última acción en',\r\n lblLastUseBefore: 'Última acción antes de',\r\n progressIndicator: 'Transfiriendo datos.. Por favor, espere',\r\n lblUpdated: 'Actualizado',\r\n lblNoSorting: '- Por defecto -',\r\n lblVersion: 'Versión',\r\n lblDateIsNull: \"La fecha es nula\",\r\n lblDateApproximate: \"{0} {1} {2}\",\r\n f702: \"menos de un minuto\",\r\n f703: \"5 minutos\",\r\n f704: \"10 minutos\",\r\n f705: \"15 minutos\",\r\n f706: \"media hora\",\r\n f707: \"menos de una hora\",\r\n f709: \"hora y media\",\r\n f710: \"más de dos horas\",\r\n f711: \"{0} horas\",\r\n f712: \"día\",\r\n f713: \"dos días\",\r\n f714: \"{0} días\",\r\n f715: \"más de una semana\",\r\n f716: \"más de dos semanas\",\r\n f717: \"{0} semanas\",\r\n f718: \"más de un mes\",\r\n f720: \"dos meses\",\r\n f721: \"{0} meses\",\r\n f722: \"más de un año\",\r\n f723: \"más de dos años\",\r\n f724: \"{0} años\",\r\n f725: \"menos de un día\",\r\n lblOldPassword: 'Contraseña antigua',\r\n lblNewPassword1: 'Nueva contraseña',\r\n lblNewPassword2: 'Confirmar contraseña',\r\n lblRecoveryType: 'Método de recuperación de contraseña',\r\n lblRecoveryPhone: 'Número de teléfono para recuperar la contraseña',\r\n lblRecoveryEmail: 'Dirección de correo electrónico para la recuperación de la contraseña',\r\n btnSendNotificationDispatch: 'Enviar',\r\n btnSendRecoveryCode: 'Enviar código de verificación',\r\n btnCheckUserName: 'Recuperar contraseña',\r\n btnBackToLogin: 'Volver a la página de inicio de sesión',\r\n lblRecoveryToken: 'Código de verificación',\r\n btnResend: 'Enviar de nuevo',\r\n btnSaveChanges: 'Guardar cambios',\r\n btnGeneratePassword: 'Generar contraseña',\r\n btnCreateCredentials: 'Crear credenciales',\r\n btnUnlockUser: 'Desbloquear usuario',\r\n lblDisplayUsername: 'Mostrar nombre de usuario',\r\n lblDisplayUserDescription: 'Mostrar descripción del usuario',\r\n lblCredentialsNotExist: 'Usuario aún no creado',\r\n lblPendingWelcome: 'Usuario pendiente de activación a través del enlace de bienvenida',\r\n titleUserInformation: 'Información para el usuario',\r\n errorMaxSizeUploadError: 'El tamaño de algunos archivos seleccionados es mayor que {0} y se excluyen de forma automática de la selección.',\r\n msgFileSizeRestriction: 'El tamaño máximo del archivo es {0}.',\r\n btnSelectFiles: 'Elegir archivos',\r\n btnMakePhoto: 'Hacer foto',\r\n lblAttachFileSize: 'Tamaño del archivo',\r\n lblFilters: 'Filtros',\r\n lblAt: 'En',\r\n\r\n lblObjectName: 'Nombre del objeto',\r\n lblIsOverride: 'Es anulado',\r\n lblValidation: 'Es válido',\r\n lblDViewsDBDuration: 'Duración original',\r\n lblXViewsDBDuration: 'Duración anulada',\r\n lblCheckPerformance: 'Comprobar el rendimiento',\r\n lblValidateViews: 'Validar la estructura',\r\n lblViewError: 'Error',\r\n\r\n lblLoginOTPSendMethod: 'Enviar contraseña de un solo uso a través de',\r\n lblLoginOTPEmail: 'Dirección de correo electrónico para enviar la contraseña de un solo uso',\r\n lblLoginOTPPhone: 'Número de teléfono para enviar la contraseña de un solo uso',\r\n lblLoginOTPOTP: 'Contraseña de un solo uso',\r\n lnkLoginByOTP: 'Iniciar sesión con contraseña de un solo uso',\r\n msgNotificationSent: 'La notificación está enviada',\r\n btnLoginOtpSendOtp: 'Enviar contraseña',\r\n lnkLoginByPassword: 'Iniciar sesión mediante contraseña',\r\n\r\n lblApply: 'Aplicar',\r\n lblTaxNumber: 'Número de identificación fiscal',\r\n\r\n lblIsActive: 'Activo',\r\n lblEmail: 'Correo electrónico',\r\n lblPhone: 'Teléfono',\r\n lblIsPendingWelcome: 'Pendiente de Bienvenida',\r\n lblIsOnline: 'Está en línea',\r\n lblIsLockedOut: 'Está bloqueado',\r\n lblCreateCredentials: 'Crear credenciales',\r\n lblCredentialFilter: 'Filtro de credenciales',\r\n\r\n msgRouteNotFound: 'Ruta no encontrada',\r\n btnReload: 'Recargar',\r\n lblHideColumn: 'Ocultar columna',\r\n lblShowHiddenColumns: 'Mostrar columnas ocultas',\r\n\r\n lblName: 'Nombre',\r\n lblDescription: 'Descripción',\r\n\r\n msgLoading: \"Procesando, por favor espere\",\r\n lblSentDate: \"Fecha de envío\",\r\n lblSentBy: \"Enviado por\",\r\n lblEntryID: \"ID\",\r\n lblFromAddress: \"De la dirección\",\r\n lblFromDisplayAddress: \"Del nombre\",\r\n lblAddress: \"Dirección\",\r\n lblSubject: \"Asunto\",\r\n lblMailBody: \"Cuerpo\",\r\n lblDeliveryOption: \"Opción de envío\",\r\n lblSendNotificationBy: \"Enviar notificación por\",\r\n lblUsernameCreationOption: 'Creación del nombre de usuario por',\r\n lblStatus: \"Estado\",\r\n lblToAddress: \"Para\",\r\n lblCCAddress: \"CC\",\r\n lblBccAddress: \"BCC\",\r\n lblFailureDescription: \"Descripción del fallo\",\r\n lblNotificationTemplate: \"Nombre de la plantilla\",\r\n lblFrom: \"De \",\r\n lblUntil: \"Hasta \",\r\n\r\n lblAdd: \"Añadir\",\r\n lblClear: \"Limpiar\",\r\n lblCompactMode: \"Modo compacto\",\r\n\r\n lblSessionAlmostExpiredTitle: \"La sesión expirará pronto\",\r\n lblSessionAlmostExpiredPrompt: \"Se ha detectado un largo periodo de inactividad. Su sesión expirará pronto\",\r\n lblSessionExpiredTitle: \"Sesión expirada\",\r\n lblFirstDate: \"Primera fecha\",\r\n lblLastDate: \"Última fecha\",\r\n lblSessionExpiredPrompt: \"Su sesión ha expirado. Se le redirigirá automáticamente a la página de inicio de sesión.\",\r\n\r\n lblNotificationContent: \"Notificación de contenido\",\r\n lblGeneral: \"General\",\r\n lblOptions: \"Opciones\",\r\n lblCustom: \"Personalizado\",\r\n\r\n lblMFACode: \"Código\",\r\n titleMFACodeOnEmailSent: \"La contraseña de un solo uso ha sido enviada a su correo electrónico. Introdúzcala más abajo\",\r\n titleMFACodeOnPhoneSent: \"La contraseña de un solo uso ha sido enviada a su móvil. Introdúzcala más abajo\",\r\n\r\n lblMFAMethod: \"Autentificación multifactor\",\r\n Month_1: \"Enero\",\r\n Month_2: \"Febrero\",\r\n Month_3: \"Marzo\",\r\n Month_4: \"Abril\",\r\n Month_5: \"Mayo\",\r\n Month_6: \"Junio\",\r\n Month_7: \"Julio\",\r\n Month_8: \"Augosto\",\r\n Month_9: \"Septiembre\",\r\n Month_10: \"Octubre\",\r\n Month_11: \"Noviembre\",\r\n Month_12: \"Diciembre\",\r\n\r\n lblExport: \"Exportar\",\r\n lblCredentialType: \"Tipo de credencial\",\r\n lblIsRestrictByIP: \"Restringir por IP\",\r\n lblIsExcludeFromMFA: \"Excluir de la MFA\",\r\n lblIPRangeStart: \"Inicio del rango IP\",\r\n lblIPRangeEnd: \"Fin del rango IP\",\r\n lblIPErrorMessage: \"Una dirección IP debe tener un formato "000.000.000.000"\",\r\n msgIPRangesIsEmpty: \"Debe añadir al menos una dirección/rango IP\",\r\n msgIPRangeIsEmpty: \"Introduzca una dirección/rango IP válido\",\r\n msgPasswordMinLength: \"La longitud de la contraseña debe ser de al menos {0} símbolos.\",\r\n msgPasswordMinCountDigits: \"La contraseña debe contener al menos {0} dígitos.\",\r\n msgPasswordMinCountLetters: \"La contraseña debe contener al menos {0} letras.\",\r\n msgPasswordComplexityRequirement: \"La longitud de la contraseña debe ser de al menos {0} símbolos, con un mínimo de {1} dígitos y {2} letras.\",\r\n errorOnlyImageAllowed: \"Solo se permiten imágenes.\",\r\n btnClose: \"Cerrar\",\r\n lblPhoto: \"Foto\",\r\n\r\n lblDragAndDrop: \"Puede arrastrar y soltar archivos aquí\",\r\n errorRequiredMessage: \"Campo obligatorio\",\r\n titleDuplicate: \"Duplicar\",\r\n lblAllNotifications: \"Todas las notificaciones\",\r\n\r\n lblSMTPServer: \"Servidor SMTP\",\r\n lblSMTPPort: \"Puerto SMTP\",\r\n lblSMTPUserName: \"Nombre de usuario SMTP\",\r\n lblSMTPPassword: \"Contraseña SMTP\",\r\n lblSMTPUseSSL: \"SMTP usa SSL\",\r\n lblSMSEndpoint: \"Punto final SMS\",\r\n lblSMSUserName: \"Nombre de usuario SMS\",\r\n lblSMSPassword: \"Contraseña SMS\",\r\n lblSMSToken: \"Token SMS\",\r\n lblSMSEndPointIsInforU: \"Proveedor de SMS\",\r\n\r\n titleTemplateInformation: \"Información sobre la plantilla de notificación\",\r\n titleEmailInformation: \"Ajustes de la plantilla de correo electrónico\",\r\n lblFromEmail: \"Del correo electrónico\",\r\n lblFromEmailDisplay: \"Desde la pantalla de correo electrónico\",\r\n titlePhoneInformation: \"Ajustes de la plantilla SMS\",\r\n lblNotificationServer: \"Servidor de notificaciones\",\r\n lblFromPhone: \"Desde el teléfono\",\r\n lblSMSBody: \"Cuerpo del SMS\",\r\n titlePushMessagesInformation: \"Configuración de la plantilla de mensajes push\",\r\n lblPushMessageBody: \"Cuerpo del mensaje push\",\r\n lblHTMLBody: \"Cuerpo HTML\",\r\n btnSave: 'Guardar',\r\n titleDelete: 'Eliminar',\r\n lblUseDefault: 'Usar por defecto',\r\n lblNoUnreadMessages: 'No hay mensajes no leídos',\r\n lblTo: 'Para',\r\n lblPushMessageContent: 'Contenido del mensaje push',\r\n lblSmsMessageContent: 'Contenido del mensaje SMS',\r\n lblIsAutomatic: 'Es automático',\r\n lblSystem: 'Sistema',\r\n lblPopupShowStatus: 'Estado de la ventana emergente',\r\n lblEmailContent: 'Contenido del correo electrónico',\r\n btnShowInEditor: 'Mostrar en el editor',\r\n titleLeavePageConfirmation: 'Se perderán los datos, ¿quiere continuar?',\r\n btnLogOff: 'Cerrar sesión',\r\n btnStayConnected: 'Permanecer conectado',\r\n btnGoToHomePage: 'Ir a la página de inicio',\r\n lblReadDate: 'Fecha de lectura',\r\n msgDeleteNotificationTemplateQuestion: 'La plantilla de notificación podría ser usada por la aplicación. ¿Está seguro de que quiere eliminarla?',\r\n lblNotificationServerWrong: 'La configuración del servidor de notificación es incorrecta. Por favor, realice los cambios e inténtelo de nuevo',\r\n msgInvalidEmail: 'El correo electrónico no es válido o tiene un formato incorrecto',\r\n btnTestServer: 'Servidor de prueba',\r\n lblMIDIsMissing: \"Falta el MID\",\r\n lblEnterMID: \"Introduzca el nuevo código MID.\",\r\n btnShowPreview: \"Mostrar vista previa\",\r\n lblIsServer: \"Servidor\",\r\n lblIsClient: \"Cliente\",\r\n lblModuleName: \"Módulo\",\r\n lblLogin: \"Inicio de sesión\",\r\n lblFramework: \"Marco\",\r\n lblOption: \"Opción\",\r\n lblValue: \"Valor\",\r\n lblSectionName: \"Valor\",\r\n lblAddOption: 'Añadir opción',\r\n msgOptionAlreadyExists: 'La opción ya existe',\r\n msgOptionEmpty: 'La opción {0} está vacía',\r\n lblBadLogin: 'Inicio de sesión incorrecto',\r\n msgRemoveOption: \"¿Está seguro de que quiere eliminar la opción '{0}'?\",\r\n titleEmailConfiguration: \"Configuración del correo electrónico\",\r\n titleSMSConfiguration: \"Configuración de SMS\",\r\n msgDeleteNotificationServerQuestion: \"El servidor de notificaciones podría usarse en la aplicación. ¿Está seguro de que quiere eliminarlo?\",\r\n msgNoData: \"Sin datos\",\r\n lblEmailHeader: \"Encabezado del correo electrónico\",\r\n lblConfigure: \"Configurar\",\r\n lblDefaultFromAddressForInforU: \"Test\",\r\n lblDefaultFromAddressForUnicel: \"0509999999\",\r\n lblInforUFromPhoneValidationTooltip: \"Por favor, introduzca un número de teléfono de la lista blanca de nombre de hasta 11 caracteres en inglés\",\r\n lblNotifications: \"Notificaciones\",\r\n lblMinimize: \"Minimizar\",\r\n lblShowMore: \"Mostrar más\",\r\n titleWhatsAppInformation: \"Ajustes de la plantilla de WhatsApp\",\r\n lblWhatsAppBody: \"Cuerpo del mensaje de WhatsApp\",\r\n lblWhatsAppApiKey: \"Clave API de WhatsApp\",\r\n lblWhatsAppEndpoint: \"Punto final de WhatsApp\",\r\n titleWhatsAppConfiguration: \"Configuración de WhatsApp\",\r\n titleNotificationDispatchList: \"Lista de envío de notificaciones\",\r\n titleNotificationServerList: \"Lista de servidores de notificación\",\r\n titleNotificationTemplateList: \"Lista de plantillas de notificación\",\r\n\r\n lblPoweredBy: \"Desarrollado por Menahel4U\",\r\n titleChooseOption: \"Elija una opción\",\r\n titleWebAPIAllowedIPs: \"IPs permitidas\",\r\n lblIpAddress: \"Dirección IP\",\r\n lblLoginDate: \"Fecha de inicio de sesión\",\r\n lblPrint: \"Imprimir\",\r\n lblDateFrom: 'Fecha desde',\r\n lblDateTo: 'Fecha hasta',\r\n lblDate: \"Fecha\",\r\n msgCouldNotStartVideoError: 'La cámara no está disponible',\r\n msgCameraPermissionDenied:'Permiso de cámara denegado',\r\n lblCameraModeVideo: 'Video',\r\n lblCameraModePhoto: 'Foto',\r\n titlePreview: 'Vista previa',\r\n msgLogoutQuestion: '¿Está seguro de que quiere cerrar la sesión?',\r\n lblGroupPanel: 'Arrastrar columna al grupo',\r\n lblExpandAll: 'Ampliar todo',\r\n lblMultiEmailError: 'El valor no es válido. Usar el símbolo ; como separador de correo electrónico',\r\n msgPhotoMinCountError: 'El recuento mínimo es {0}',\r\n msgPhotoMaxCountError: 'El recuento máximo es {0}',\r\n lblRestoreDefaultView: \"Restaurar vista por defecto\",\r\n lblStartDate: \"Fecha de inicio\",\r\n lblDuration: \"Duración\",\r\n lblController: \"Controlador\",\r\n lblAction: \"Acción\",\r\n lblMethod: \"Método\",\r\n lblStatusCode: \"Código de estado\",\r\n lblRequestData: \"Solicitar datos\",\r\n lblQueryString: \"Cadena de consulta\",\r\n lblBody: \"Cuerpo\",\r\n lblResponse: \"Respuesta\",\r\n msgTextCopied: \"Texto copiado\",\r\n lblCopy: \"Copiar\",\r\n btnGoToLoginHistory: \"Ir al historial de inicio de sesión\",\r\n btnGoToRequestsHistory: \"Ir al historial de solicitudes\",\r\n btnManageCredentials: \"Gestionar credenciales\",\r\n btnGoToCredentialsReport: \"Ir al informe de credenciales\",\r\n btnWelcomeUser: \"Enviar mensaje de bienvenida\",\r\n lblTestFromPhone: \"Desde el teléfono\",\r\n lblHistory: \"Registro de cambios\",\r\n lblNewValue: \"Nuevo valor\",\r\n lblOldValue: \"Valor antiguo\",\r\n lblFieldCaption: \"Campo\",\r\n lblDocumentCaption: \" Documento\",\r\n lblHistoryLineAdded: \"{0} {1} fue añadida.\",\r\n lblHistoryLineRemoved: \"{0} {1} fue eliminada.\",\r\n lblHistoryLineNumber: \"{0} {1}\",\r\n lblHistoryNotFound: \"No se han encontrado cambios.\",\r\n lblHistoryChangeAdded: \"{0} {1} fue creado\",\r\n lblHistoryChangeRemoved: \"{0} {1} fue eliminado\",\r\n msgLoadingPDF: 'Cargando archivo PDF...',\r\n lblImpersonatedBy: 'Personificado por',\r\n lblIsUserCustomTemplate: \"Plantilla personalizada del usuario\",\r\n msgIsUserCustomTemplateEnable: \"Si la opción 'Editable' está activada, podrá cambiar la plantilla manualmente, pero el sistema no podrá actualizarla de forma automática.\",\r\n btnEnableEditable: \"Activar editable\",\r\n btnDisableEditable: \"Desactivar editable\",\r\n msgScreenSizeChangedRefresh: 'El tamaño de la pantalla ha cambiado. Por favor, actualice la ventana del navegador.',\r\n msgOrientationChangedRefresh: 'La orientación ha cambiado. Por favor, actualice la ventana del navegador.',\r\n lblDeliveryMethod: 'Método de envío',\r\n lblNotificationDispatch: 'Envío de notificación',\r\n lblRecipients: 'Destinatarios',\r\n lblPreview: 'Vista previa',\r\n msgRecipientsAreEmpty: 'Debe añadir al menos un destinatario',\r\n lblCreatedBy: 'Creado por',\r\n btnCancelNotifications: 'Cancelar notificaciones',\r\n lblCancelNotificationsPrompt: 'Va a cancelar las notificaciones Push no leídas. ¿Quiere continuar?',\r\n lblNotificationMessage: 'Mensaje de notificación',\r\n lblIsDeleted: 'Eliminado',\r\n lblShareMethodEmail: 'Correo electrónico',\r\n lblShareMethodSms: 'SMS',\r\n lblShareMethodWhatsapp: 'WhatsApp',\r\n lblShareMethodPrint: 'Imprimir',\r\n lblShare: 'Compartir',\r\n lblEntityType: 'Tipo de entidad',\r\n lblPageName: 'Página',\r\n btnSend: 'Enviar',\r\n lblChooseTemplate: 'Elegir plantilla',\r\n lblShareMethodDownload: 'Descargar',\r\n lblShareMethodShare: 'Compartir',\r\n lblUploadCrystalTemplate: 'Subir plantilla de Crystal',\r\n lblNotificationTemplateEditingMode: 'Modo de edición del cuerpo',\r\n msgShareNotificationTemplateNotFoundError: 'Las plantillas de notificación no están configuradas para esta página',\r\n btnShare: 'Compartir',\r\n msgNotificationTemplatePrefixNotFoundError: '$PrefixBody$ falta un parámetro',\r\n lblPrefixBody: 'Cuerpo del prefijo',\r\n lblIsSharePdf: 'Compartir PDF',\r\n lblFileNameFormat: 'Formato del nombre del archivo',\r\n lblEntityBindingPageType: 'Vincular a',\r\n titleEntityBindingInformation: 'Vinculación de la entidad',\r\n msgNotificationTemplateFileMissingError: 'Falta la plantilla del informe de Crystal',\r\n lblSharedFile: 'Archivo compartido',\r\n msgNotificationTemplateEmptyError: 'No se puede guardar la plantilla vacía',\r\n lblIsSupportEmail: 'Correo electrónico de asistencia',\r\n lblIsSupportSMS: 'SMS de asistencia',\r\n lblIsSupportWhatsapp: 'WhatsApp de asistencia',\r\n lblIsSupportPush: 'Push de asistencia',\r\n lblIsSupportSharing: 'Compartir asistencia',\r\n lblIsShareByEntities: 'Compartir por entidades',\r\n ttlLogs: \"Registros\",\r\n lblObjectType: \"Tipo de objeto\",\r\n lblObjectID: \"ID del objeto\",\r\n lblLevel: \"Nivel\",\r\n lblNotAssigned: \"- Sin asignar -\",\r\n msgNotificationSentTo: 'La notificación se ha enviado a {0}',\r\n }\r\n};","import { Injectable } from '@angular/core';\r\nimport { GenericListEntity } from '@base/entities/BaseEntities';\r\nimport { StringMapElement, FieldCustomizationElement, ComponentCustomization } from '@base/classes/BaseClasses';\r\nimport { AppInjector } from '../injector/injector.module';\r\nimport { Resources_EN } from '../../_resources/EN';\r\nimport { Resources_HE } from '../../_resources/HE';\r\nimport { Resources_ES } from '../../_resources/ES';\r\nimport { SysGlobals } from './sysglobals';\r\nimport { AppConfigService } from '@configuration/app.config.service';\r\nimport { EnumLanguages } from './sysenums.enum';\r\nimport { SystemEndpoint } from '../endpoints/system.endpoint';\r\n\r\n@Injectable()\r\nexport class ResourcesService {\r\n private m_Dictionaries: any[];\r\n private m_CustomDictionaries: any[];\r\n private m_Lists: any[];\r\n SelectedLanguages: any[];\r\n constructor(private appConfigService: AppConfigService,\r\n private systemEndpoint: SystemEndpoint) { }\r\n\r\n\r\n //Prepare dictionaries - we have an hierarchy of 3:\r\n // Custom dictionary for the specific build\r\n // General dictionary for the program\r\n // Base dictionary for the built in \"framework\" part\r\n public InitDictionaries() {\r\n\r\n this.m_Dictionaries = [];\r\n this.m_CustomDictionaries = [];\r\n this.m_Lists = [];\r\n\r\n switch (SysGlobals.Language) {\r\n case EnumLanguages.Hebrew:\r\n {\r\n const { Lists, ...Resources } = Resources_HE;\r\n this.m_Lists.push(Lists);\r\n this.m_Dictionaries.push(Resources);\r\n break;\r\n }\r\n case EnumLanguages.English:\r\n {\r\n const { Lists, ...Resources } = Resources_EN;\r\n this.m_Lists.push(Lists);\r\n this.m_Dictionaries.push(Resources);\r\n break;\r\n }\r\n case EnumLanguages.Spanish:\r\n {\r\n const { Lists, ...Resources } = Resources_ES;\r\n this.m_Lists.push(Lists);\r\n this.m_Dictionaries.push(Resources);\r\n break;\r\n }\r\n }\r\n\r\n // add custom resources to the dictionary by current language and custom build\r\n const allCustomResources = this.appConfigService.CustomResources;\r\n const customResources = allCustomResources.filter(x => x.Properties && x.Properties.Language === SysGlobals.Language);\r\n if (customResources && customResources.length) this.m_CustomDictionaries = this.m_CustomDictionaries.concat(customResources);\r\n\r\n // add resources to the dictionary by current language\r\n const allResources = this.appConfigService.Resources;\r\n const resources = allResources.filter(x => x.Properties && x.Properties.Language === SysGlobals.Language);\r\n if (resources && resources.length) this.m_Dictionaries = this.m_Dictionaries.concat(resources);\r\n\r\n // remove undefined to handle cases when some translations do not exist\r\n this.m_Dictionaries = this.m_Dictionaries.filter(x => x != undefined);\r\n\r\n // add lists to the dictionary by current language\r\n const allLists = this.appConfigService.AppConfig.GetLists();\r\n const lists = allLists.filter(x => x.Properties && x.Properties.Language === SysGlobals.Language);\r\n const overrideLists = lists.filter(x => x.Properties && x.Properties.OverrideModuleName);\r\n overrideLists.forEach(x => {\r\n const listsByModuleName = lists.find(z => z.Properties.ModuleName === x.Properties.OverrideModuleName);\r\n if (listsByModuleName) {\r\n Object.getOwnPropertyNames(x)\r\n .filter(name => name !== 'Properties')\r\n .forEach(name => {\r\n const sourceList = x[name];\r\n listsByModuleName[name] = sourceList;\r\n });\r\n }\r\n });\r\n\r\n this.m_Lists = this.m_Lists.concat(lists);\r\n\r\n // load field customizations\r\n SysGlobals.FieldCustomizations = this.LoadFieldCustomizations();\r\n // load component customizations\r\n SysGlobals.ComponentCustomizations = this.LoadComponentCustomizations();\r\n\r\n this.systemEndpoint.GetEntitiesResources().subscribe(response => {\r\n if (!response.IsSuccess) return;\r\n\r\n const entitiesResources = response.Data.filter(x => x.Properties.Language === SysGlobals.Language);\r\n if (entitiesResources && entitiesResources.length) {\r\n entitiesResources.forEach(r => {\r\n const { Properties, ...entities } = r;\r\n const modifiedEntityResources: any = { ...r };\r\n Object.keys(modifiedEntityResources).forEach(key => {\r\n if (Object.keys(entities).indexOf(key) >= 0) delete modifiedEntityResources[key];\r\n });\r\n modifiedEntityResources['BL'] = entities;\r\n this.m_Dictionaries = this.m_Dictionaries.concat([modifiedEntityResources]);\r\n })\r\n }\r\n });\r\n //Get selected languages for system\r\n this.SelectedLanguages = this.GetLanguagesList();\r\n }\r\n\r\n\r\n private GetValueFromPath(obj: any, path: string) {\r\n return path.split('.').reduce((acc, val) => acc && acc[val], obj);\r\n }\r\n\r\n //Initializes resources in case they are required before actual initialization took place\r\n private EnsureInitialized() {\r\n if (this.m_Dictionaries == undefined) {\r\n SysGlobals.Language = this.appConfigService.M4UConfig.defaultLanguage;\r\n this.InitDictionaries();\r\n }\r\n }\r\n\r\n //Return resource string for relevant resource\r\n //If not found, return the name with $ $\r\n public RC(sResourceName: string, moduleName?: string, ...args: string[] | number[]): string {\r\n //Init\r\n this.EnsureInitialized();\r\n\r\n //Special syntax to allow returning undefined\r\n var bReturnUndefined: boolean;\r\n if (sResourceName.startsWith('$$')) {\r\n sResourceName = sResourceName.substring(2);\r\n bReturnUndefined = true;\r\n }\r\n\r\n //Avoid undefined value\r\n moduleName = moduleName || '';\r\n\r\n //Get resource path\r\n var sPath = sResourceName.includes('.') ? sResourceName : `Translations.${sResourceName}`;\r\n\r\n let sData = this.getResourceValue(this.m_CustomDictionaries, sPath, moduleName);\r\n\r\n if (sData == undefined) {\r\n\r\n //Get resource value from dictionaries\r\n sData = this.getResourceValue(this.m_Dictionaries, sPath, moduleName);\r\n }\r\n\r\n //Return not found with $$ to indicate a problem\r\n if (sData == undefined) return bReturnUndefined ? undefined : `$${sResourceName}$`;\r\n\r\n //Support formatting arguments\r\n for (let index = 0; index < args.length; index++) {\r\n sData = sData.replace(`{${index}}`, args[index]);\r\n }\r\n\r\n //Support for value replacement\r\n for (let dictionary of this.m_CustomDictionaries) {\r\n if (dictionary.StringMap == undefined) continue;\r\n for (let element of dictionary.StringMap) {\r\n sData = sData.replace((element as StringMapElement).Old, (element as StringMapElement).New);\r\n }\r\n }\r\n\r\n //Return\r\n return sData;\r\n }\r\n\r\n getResourceValue(oDictionaries: any[], sPath: string, sModuleName: string) {\r\n const currentModuleDictionaries = oDictionaries.filter(x => x.Properties && x.Properties.ModuleName === sModuleName);\r\n //Get value for current module\r\n let sData = this.tryGetValueFromDictionaries(currentModuleDictionaries, sPath);\r\n if (sData == undefined) {\r\n const frameworkDictionaries = oDictionaries.filter(x => !x.Properties || !x.Properties.ModuleName);\r\n //Process all dictionaries\r\n //Highest priority dictionary (custom one) is first\r\n sData = this.tryGetValueFromDictionaries(frameworkDictionaries, sPath);\r\n }\r\n return sData;\r\n }\r\n\r\n tryGetValueFromDictionaries(oDictionaries: any[], sPath: string) {\r\n let sData: any;\r\n for (let dictionary of oDictionaries) {\r\n //Get value, including support for nested values\r\n sData = this.GetValueFromPath(dictionary, sPath);\r\n if (sData) break;\r\n }\r\n return sData;\r\n }\r\n\r\n //Return list by name\r\n public LISTITEM(sListName: string, sValue: string, moduleName?: string): string {\r\n var list = this.LIST(sListName, moduleName);\r\n var item = list.find(x => x.Value == sValue);\r\n if (item == undefined) return `$${sValue}$`;\r\n return item.Text;\r\n }\r\n\r\n //Return list by name\r\n public LISTITEMX(sListName: string, sValue: string, moduleName?: string): GenericListEntity {\r\n var list = this.LIST(sListName, moduleName);\r\n var item = list.find(x => x.Value == sValue);\r\n if (item == undefined) return undefined;\r\n return item;\r\n }\r\n\r\n //Return list by name\r\n public LIST(sListName: string, moduleName?: string): GenericListEntity[] {\r\n //Init\r\n this.EnsureInitialized();\r\n\r\n //Avoid undefined value\r\n moduleName = moduleName || '';\r\n\r\n return this.getResourceValue(this.m_Lists, sListName, moduleName)?.sort(this.sortListfunc) || [];\r\n }\r\n\r\n // Sort LIST\r\n sortListfunc(item1: GenericListEntity, item2: GenericListEntity): number {\r\n // first sort by SortOrder\r\n if (item1.SortOrder !== undefined && item2.SortOrder === undefined) return -1;\r\n if (item1.SortOrder === undefined && item2.SortOrder !== undefined) return 1;\r\n if (item1.SortOrder !== undefined && item2.SortOrder !== undefined) return item1.SortOrder - item2.SortOrder;\r\n\r\n // then sort by Text\r\n if (item1.Text !== undefined && item2.Text !== undefined) return item1.Text.localeCompare(item2.Text);\r\n\r\n return 0;\r\n }\r\n\r\n //Load customizations\r\n public LoadFieldCustomizations(): FieldCustomizationElement[] {\r\n\r\n //Process all dictionaries\r\n //Highest priority dictionary (custom one) is first\r\n for (let dictionary of this.m_CustomDictionaries) {\r\n var oList = this.GetValueFromPath(dictionary, `FieldCustomizations`);\r\n if (oList != undefined) return oList;\r\n }\r\n\r\n }\r\n\r\n LoadComponentCustomizations(): ComponentCustomization[] {\r\n for (let dictionary of this.m_CustomDictionaries) {\r\n var oList = this.GetValueFromPath(dictionary, `ComponentCustomizations`);\r\n if (oList != undefined) return oList;\r\n }\r\n }\r\n\r\n //Build languages list\r\n public GetLanguagesList(): GenericListEntity[] { \r\n const listLang = this.LIST(\"Languages\"); \r\n var list = [];\r\n const languages = this.appConfigService.M4UConfig.languages;\r\n //if list not defined then return all languges\r\n if (!languages?.length) return listLang;\r\n \r\n listLang.forEach(item => {\r\n if (languages.includes(item.Value)) {\r\n list.push(item);\r\n }\r\n });\r\n\r\n return list;\r\n }\r\n public IsSelectedLanguageLoaded(lang: string): boolean {\r\n this.EnsureInitialized();\r\n return AppConfigService.GetLoadedLanguages().includes(lang);\r\n }\r\n}\r\n\r\n\r\nexport function RC(value: string, ...args: string[] | number[]) {\r\n return AppInjector.get(ResourcesService).RC(value, '', ...args);\r\n}\r\n\r\n\r\nexport function LIST(sListName: string): GenericListEntity[] {\r\n return AppInjector.get(ResourcesService).LIST(sListName);\r\n}\r\n\r\n\r\nexport function LISTITEM(sListName: string, sValue: string): string {\r\n return AppInjector.get(ResourcesService).LISTITEM(sListName, sValue);\r\n}\r\n\r\nexport function LISTITEMX(sListName: string, sValue: string): GenericListEntity {\r\n return AppInjector.get(ResourcesService).LISTITEMX(sListName, sValue);\r\n}\r\n\r\n","import { LocationChangeEvent, PlatformLocation } from '@angular/common';\r\nimport { Injectable, Type } from '@angular/core';\r\nimport { ActivatedRoute, NavigationEnd, Router } from '@angular/router';\r\nimport { findLast, findLastIndex } from 'lodash';\r\nimport { filter, map, ReplaySubject } from 'rxjs';\r\nimport { FrameworkService } from './framework.service';\r\nimport { NavigatorService } from './navigator.service';\r\nimport { SysEventsService } from './sysevents.service';\r\nimport { SysGlobals } from './sysglobals';\r\n\r\nexport class HistoryItem {\r\n Id: number;\r\n Url: string;\r\n QueryParams: any;\r\n Title: string;\r\n Component: Type;\r\n ComponentName: string;\r\n IsWindow: boolean;\r\n}\r\n\r\n@Injectable()\r\nexport class RouteHistoryService {\r\n\r\n private _history: HistoryItem[] = [];\r\n\r\n private _pageHistorySubject = new ReplaySubject(1);\r\n readonly PageHistory$ = this._pageHistorySubject.asObservable();\r\n\r\n private _historyItemsSubject = new ReplaySubject(1);\r\n readonly HistoryItems$ = this._historyItemsSubject.asObservable();\r\n\r\n get HistoryLength() { return this._history.length; }\r\n\r\n constructor(private router: Router,\r\n private activatedRoute: ActivatedRoute,\r\n private navigatorService: NavigatorService,\r\n private sysEventsService: SysEventsService,\r\n private frameworkService: FrameworkService,\r\n private location: PlatformLocation) {\r\n this.sysEventsService.OnNavigateDefault.subscribe((result) => {\r\n if (!result) return;\r\n this.ClearHistory(0);\r\n });\r\n this.location.onPopState(this.OnBrowserButtonClick);\r\n }\r\n\r\n // on after init application start saving route history\r\n public StartSaveHistory() {\r\n this.router.events\r\n .pipe(\r\n // filter events, take only NavigationEnd\r\n filter(event => event instanceof NavigationEnd),\r\n map(() => {\r\n let { route, url } = this.GetCurrentRouteWithUrl();\r\n // create history item entity\r\n return {\r\n Id: this.router.getCurrentNavigation().id,\r\n Url: url,\r\n QueryParams: this.GetQueryParamsWithoutPrefixes(route.snapshot.queryParams),\r\n Component: route.component,\r\n IsWindow: route.snapshot.outlet === 'window'\r\n } as HistoryItem;\r\n }),\r\n filter(historyItem => !historyItem.Url.includes('system/')))\r\n // send it to the page where the title will be set\r\n .subscribe(historyItem => this.SaveHistoryItem(historyItem));\r\n }\r\n\r\n SetHistoryItemTitle(componentName: string, title: string) {\r\n // get history item index by component name\r\n const historyItemIndex = findLastIndex(this._history, x => x.ComponentName === componentName);\r\n if (historyItemIndex < 0) return;\r\n\r\n // set history item title\r\n this._history[historyItemIndex].Title = title;\r\n // share history to the subscribers\r\n this.ShareHistory();\r\n }\r\n\r\n UpdateHistoryItem(historyItem: HistoryItem) {\r\n const historyItemIndex = this._history.findIndex(x => x.Id === historyItem.Id);\r\n if (historyItemIndex < 0) return;\r\n\r\n this._history[historyItemIndex] = historyItem;\r\n\r\n // share history to the subscribers\r\n this.ShareHistory();\r\n }\r\n\r\n public SaveHistoryItem(historyItem: HistoryItem) {\r\n // remove 'new' route from history for correct navigation through history\r\n const lastHistoryItem = this._history.length && this._history[this._history.length - 1];\r\n if (lastHistoryItem && lastHistoryItem.Url.endsWith('new')) {\r\n this._history.pop();\r\n }\r\n\r\n // if there is an item already just update the title, if not - add it to the history \r\n const historyItemIndex = this._history.findIndex(x => x.Id === historyItem.Id);\r\n if (historyItemIndex < 0) {\r\n this._history.push(historyItem);\r\n }\r\n // share history to the subscribers\r\n this.ShareHistory();\r\n\r\n this._pageHistorySubject.next(historyItem);\r\n }\r\n\r\n public GoBack() {\r\n // get current history item from history\r\n const currentHistoryItem = this._history.length && this._history[this._history.length - 1];\r\n if (!currentHistoryItem) {\r\n // if there is no history - navigate default\r\n return this.frameworkService.NavigateDefault();\r\n }\r\n\r\n // get previous history item\r\n const previousHistoryItem = this._history[this._history.length - 2];\r\n if (previousHistoryItem) {\r\n // if going back from window to the full page - navigate null to avoid page reload\r\n if (currentHistoryItem.IsWindow && !previousHistoryItem.IsWindow) {\r\n return this.GoBackFromWindow(previousHistoryItem, this._history.length - 2);\r\n }\r\n return this.NavigateItem(previousHistoryItem, this._history.length - 2);\r\n }\r\n // if there is no history - navigate default\r\n return this.frameworkService.NavigateDefault();\r\n }\r\n\r\n public NavigateHistoryItem(item: HistoryItem) {\r\n // get history item by id\r\n const historyItem = this._history.find(x => x.Id === item.Id);\r\n const historyItemIndex = this._history.indexOf(historyItem);\r\n // get current history item from history\r\n const currentHistoryItem = this._history[this._history.length - 1];\r\n if (currentHistoryItem.IsWindow) {\r\n // get full page url\r\n const { _, url } = this.GetCurrentRouteWithUrl(true);\r\n // if current route full page url equals navigatable item full page url\r\n if (historyItem.Url == url) {\r\n // just close the window to avoid page reload\r\n return this.NavigateItem(null, historyItemIndex);\r\n }\r\n }\r\n return this.NavigateItem(historyItem, historyItemIndex);\r\n }\r\n\r\n CloseWindow() {\r\n // get current history item from history\r\n const currentHistoryItem = this._history.length && this._history[this._history.length - 1];\r\n if (!currentHistoryItem) {\r\n // if there is no history - navigate default\r\n return this.frameworkService.NavigateDefault();\r\n }\r\n // get last history item that is not a window\r\n const lastPageHistoryItem = findLast(this._history, x => !x.IsWindow);\r\n // get last page index or previous\r\n const lastPageHistoryItemIndex = lastPageHistoryItem ? this._history.indexOf(lastPageHistoryItem) : this._history.length - 2;\r\n\r\n return this.GoBackFromWindow(lastPageHistoryItem, lastPageHistoryItemIndex);\r\n }\r\n\r\n private GoBackFromWindow(pageHistoryItem: HistoryItem, cleanStartIndex?: number) {\r\n const { _, url } = this.GetCurrentRouteWithUrl(true);\r\n // if current primary page is not the same take page history item\r\n const navigationPath = pageHistoryItem?.Url === url ? null : pageHistoryItem;\r\n return this.NavigateItem(navigationPath, cleanStartIndex);\r\n }\r\n\r\n private NavigateItem(historyItem: HistoryItem, cleanStartIndex?: number) {\r\n // navigate to the previous history item or close window without reload\r\n return (historyItem && this.navigatorService.Navigate([historyItem.Url], historyItem.QueryParams) || this.navigatorService.Navigate(null))\r\n .then((result) => {\r\n // if navigatation was successful\r\n if (result) {\r\n // clean history if needed\r\n if (cleanStartIndex != null) this.ClearHistory(cleanStartIndex);\r\n // share history to the subscribers\r\n this.ShareHistory();\r\n return Promise.resolve(true);\r\n }\r\n return Promise.resolve(false);\r\n });\r\n }\r\n\r\n private ShareHistory() {\r\n // get history without current item to show it correctly\r\n let historyWithoutCurrent = [...this._history];\r\n if (this._history.length > 0) historyWithoutCurrent.splice(this._history.length - 1);\r\n\r\n // remove first item in case our primary route is the same (for windows)\r\n let { _, url } = this.GetCurrentRouteWithUrl(true);\r\n if (historyWithoutCurrent.length > 0 && historyWithoutCurrent[0].Url === url) {\r\n historyWithoutCurrent.shift();\r\n }\r\n\r\n // send history withput current the subscribers (breadcrumb)\r\n this._historyItemsSubject.next(historyWithoutCurrent);\r\n }\r\n\r\n public HasHistory() {\r\n // check if there are history items\r\n return this._history.length > 0;\r\n }\r\n\r\n public ClearHistory(startIndex?: number) {\r\n // clear history at all or by the index (on breadcrumb item click)\r\n if (startIndex != null) {\r\n // clean history from item to the prelast item (because last item is correct and needed in history after navigation)\r\n this.ClearPagesState(startIndex, this._history.length - 1);\r\n this._history.splice(startIndex, this._history.length - startIndex - 1);\r\n } else {\r\n this.ClearPagesState();\r\n this._history.length = 0;\r\n }\r\n // send history withput current the subscribers (breadcrumb)\r\n this._historyItemsSubject.next(this._history);\r\n }\r\n\r\n private ClearPagesState(startIndex?: number, endIndex?: number) {\r\n for (let i = startIndex || 0; i < (endIndex != null ? endIndex : this._history.length); i++) {\r\n this.ClearPageState(this._history[i]);\r\n }\r\n }\r\n\r\n private ClearPageState(historyItem: HistoryItem) {\r\n const pageComponentName = historyItem && historyItem.ComponentName;\r\n // if no page component name or there is the same component in history - no need to clear it\r\n if (!pageComponentName || this._history.some(x => x.Id !== historyItem.Id && x.Component === historyItem.Component)) return;\r\n\r\n delete SysGlobals.PageStates[pageComponentName];\r\n }\r\n\r\n private OnBrowserButtonClick = (event: LocationChangeEvent) => {\r\n const navigationId = event.state.navigationId;\r\n const historyItemIndex = this._history.findIndex(x => x.Id === navigationId);\r\n if (historyItemIndex >= 0) {\r\n this.ClearHistory(historyItemIndex);\r\n }\r\n }\r\n\r\n private GetCurrentRouteWithUrl(onlyPrimaryOutlet?: boolean): any {\r\n let route = this.activatedRoute;\r\n let urlSegments = route.snapshot.url;\r\n // get the bottom route and url by all the tree\r\n // if onlyParentOutlet = true then it makes search by firstChild which can't be a window\r\n while (onlyPrimaryOutlet ? route.firstChild : route.children.length) {\r\n route = onlyPrimaryOutlet ? route.firstChild : route.children[route.children.length - 1];\r\n urlSegments = [...urlSegments, ...route.snapshot.url];\r\n }\r\n return { route: route, url: urlSegments.map(x => x.path).join('/') }\r\n }\r\n\r\n private GetQueryParamsWithoutPrefixes(params) {\r\n let newParams = {};\r\n for (let key in params) {\r\n const newKey = key.substring(key.indexOf('_') + 1);\r\n newParams[newKey] = params[key];\r\n }\r\n return newParams;\r\n }\r\n\r\n HasHistoryForWindow() {\r\n if (!this._history || this._history.length < 2) return false;\r\n\r\n const currentHistoryItem = this._history[this._history.length - 1];\r\n const previousHistoryItem = this._history[this._history.length - 2];\r\n return !(!previousHistoryItem.IsWindow && currentHistoryItem.IsWindow);\r\n }\r\n}","import { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';\r\nimport { Injectable } from \"@angular/core\";\r\nimport { AppConfigService } from '@m4u-angular/configuration/app.config.service';\r\nimport devices from 'devextreme/core/devices';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { ResourcesService } from './resources.service';\r\nimport { EnumLanguages, EnumScreenSizes } from \"./sysenums.enum\";\r\nimport { SysGlobals } from './sysglobals';\r\nimport { UiService } from './ui.service';\r\n\r\nexport type Orientation = 'landscape' | 'portrait';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ScreenService {\r\n\r\n private _currentScreenSize: EnumScreenSizes;\r\n private _currentOrientation: Orientation;\r\n private onScreenSizeChanged: BehaviorSubject = new BehaviorSubject(this.GetScreenSize());\r\n readonly ScreenSize$ = this.onScreenSizeChanged.asObservable();\r\n public options = {\r\n showRefreshMessage: {\r\n size: false,\r\n orientation: false\r\n }\r\n };\r\n private showMessageHandler: any;\r\n\r\n public get Sizes() {\r\n return {\r\n 'screen-x-small': this.breakpointObserver.isMatched(Breakpoints.XSmall),\r\n 'screen-small': this.breakpointObserver.isMatched(Breakpoints.Small),\r\n 'screen-medium': this.breakpointObserver.isMatched(Breakpoints.Medium),\r\n 'screen-large': this.breakpointObserver.isMatched(Breakpoints.Large),\r\n 'screen-x-large': this.breakpointObserver.isMatched(Breakpoints.XLarge)\r\n };\r\n }\r\n\r\n //Subscribe to size changes\r\n constructor(private breakpointObserver: BreakpointObserver,\r\n private uiService: UiService,\r\n private rc: ResourcesService) {\r\n this._currentOrientation = this.Orientation();\r\n this.breakpointObserver\r\n .observe([Breakpoints.XSmall, Breakpoints.Small, Breakpoints.Medium, Breakpoints.Large, Breakpoints.XLarge])\r\n .subscribe(() => {\r\n const newSize = this.GetScreenSize();\r\n const orientation = this.Orientation();\r\n let shown = false;\r\n if (orientation !== this._currentOrientation) {\r\n shown = this.processRefreshMessage('orientation');\r\n this._currentOrientation = orientation;\r\n }\r\n\r\n if (newSize !== this._currentScreenSize) {\r\n (!shown && this._currentScreenSize) && (shown = this.processRefreshMessage('size'));\r\n this._currentScreenSize = newSize;\r\n this.onScreenSizeChanged.next(this._currentScreenSize);\r\n }\r\n //\r\n });\r\n }\r\n\r\n //Return relevant screen size\r\n public GetScreenSize(): EnumScreenSizes {\r\n if (this.breakpointObserver.isMatched(Breakpoints.XSmall)) return EnumScreenSizes.ScreenXSmall;\r\n if (this.breakpointObserver.isMatched(Breakpoints.Small)) return EnumScreenSizes.ScreenSmall;\r\n if (this.breakpointObserver.isMatched(Breakpoints.Medium)) return EnumScreenSizes.ScreenMedium;\r\n if (this.breakpointObserver.isMatched(Breakpoints.Large)) return EnumScreenSizes.ScreenLarge;\r\n if (this.breakpointObserver.isMatched(Breakpoints.XLarge)) return EnumScreenSizes.ScreenXLarge;\r\n }\r\n\r\n public IsRTL(): boolean {\r\n return (SysGlobals.Language == EnumLanguages.Hebrew);\r\n }\r\n\r\n public IsMobile() {\r\n // var size = this.GetScreenSize();\r\n // return size == EnumScreenSizes.ScreenXSmall;\r\n const device = devices.current();\r\n return device.deviceType === 'phone';\r\n }\r\n\r\n public IsDesktop() {\r\n // var size = this.GetScreenSize();\r\n // if (this.appConfigService.AppConfig.SupportLegacyDisplaySizes) {\r\n // return !this.IsMobile();\r\n // } else {\r\n // return size == EnumScreenSizes.ScreenLarge || size == EnumScreenSizes.ScreenXLarge;\r\n // }\r\n const device = devices.current();\r\n return device.deviceType === 'desktop';\r\n }\r\n\r\n public IsTablet() {\r\n // var size = this.GetScreenSize();\r\n // return size == EnumScreenSizes.ScreenSmall || size == EnumScreenSizes.ScreenMedium;\r\n const device = devices.current();\r\n return device.deviceType === 'tablet';\r\n }\r\n\r\n public Orientation(): Orientation {\r\n const orientation = devices.orientation();\r\n return orientation;\r\n }\r\n\r\n public IsPrintMode(): boolean {\r\n return window.matchMedia('print').matches;\r\n }\r\n\r\n public LogDeviceInfo() {\r\n const device = devices.current();\r\n console.log(device);\r\n }\r\n\r\n public IsWideScreen() {\r\n const screenSize = this.GetScreenSize();\r\n return (screenSize === EnumScreenSizes.ScreenLarge || screenSize === EnumScreenSizes.ScreenXLarge);\r\n }\r\n\r\n public IsMediumScreen() {\r\n const screenSize = this.GetScreenSize();\r\n return (screenSize === EnumScreenSizes.ScreenMedium);\r\n }\r\n\r\n processRefreshMessage = (mode: 'size' | 'orientation') => {\r\n if (this.showMessageHandler) {\r\n clearTimeout(this.showMessageHandler);\r\n this.showMessageHandler = null;\r\n }\r\n\r\n let message;\r\n if (this.options?.showRefreshMessage?.size && mode === 'size') {\r\n message = this.rc.RC('msgScreenSizeChangedRefresh');\r\n } else if (this.options?.showRefreshMessage?.orientation && mode === 'orientation') {\r\n message = this.rc.RC('msgOrientationChangedRefresh');\r\n }\r\n\r\n message && (this.showMessageHandler = setTimeout(() => {\r\n this.uiService.InfoMessage(message);\r\n this.showMessageHandler = null;\r\n }, 3000));\r\n\r\n return !!message;\r\n };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { WebAPILoginResponse } from '@base/entities/BaseEntities';\r\nimport { BaseDataSourceAbstract } from '@base/datalayer/BaseDataSourceAbstract';\r\nimport { BehaviorSubject, ReplaySubject, first, mergeMap, Subject, Subscription, tap, map, of } from 'rxjs';\r\nimport { SystemOptionsService } from './system-options.service';\r\nimport { EnumSystemOptions } from './sysenums.enum';\r\nimport { AppConfigService } from '@m4u-angular/configuration/app.config.service';\r\nimport { NotificationService } from './notification.service';\r\nimport { LocalStorageService } from './local-storage.service';\r\n\r\nexport enum SessionStates {\r\n Started,\r\n Ended,\r\n AlmostExpired,\r\n Expired\r\n};\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SessionService {\r\n //Store server session\r\n private m_Session: WebAPILoginResponse;\r\n //Store user info\r\n private m_UserInfoDict: { [id: string]: any };\r\n //Store dataSources\r\n private m_DataSources: { [id: string]: BaseDataSourceAbstract };\r\n\r\n private sessionExpiredTimeoutHandler;\r\n private sessionAlmostExpiredTimeoutHandler;\r\n private initAppSubscription: Subscription;\r\n private logoutAppSubscription: Subscription;\r\n\r\n private sessionStateChangedSubject = new Subject();\r\n readonly sessionStateChanged$ = this.sessionStateChangedSubject.asObservable();\r\n\r\n constructor(private systemOptionsService: SystemOptionsService,\r\n private appConfigService: AppConfigService,\r\n private localStorageService: LocalStorageService,\r\n private notificationService: NotificationService) { }\r\n\r\n get IsLoggedIn(): boolean { return (this.m_Session != null); }\r\n get DisplayUserName(): string { return this.IsLoggedIn ? this.m_Session.DisplayUserName : ''; }\r\n get DisplayUserDescription(): string { return this.IsLoggedIn ? this.m_Session.DisplayUserDescription : ''; }\r\n get CurrentUserID(): number { return this.IsLoggedIn ? this.m_Session.CredentialID : undefined; }\r\n get SessionID(): string { return this.IsLoggedIn ? this.m_Session.SessionID : undefined; }\r\n get UserInfoDict(): { [id: string]: any } { return this.IsLoggedIn ? this.m_UserInfoDict : {}; }\r\n get UserInfos(): any[] { return this.IsLoggedIn ? Object.keys(this.m_UserInfoDict).map(x => this.m_UserInfoDict[x]) : []; }\r\n get DataSources(): { [id: string]: BaseDataSourceAbstract } { return this.IsLoggedIn ? this.m_DataSources : {}; }\r\n\r\n //Set session\r\n SetSession(oSession: WebAPILoginResponse,\r\n afterInitFn?: () => void,\r\n afterLogoutFn?: () => void,\r\n bPreserveSession: boolean = false) {\r\n this.m_Session = oSession;\r\n this.m_UserInfoDict = oSession ? oSession.UserInfo : undefined;\r\n\r\n this.RefreshExpiredSessionTimeout(!!oSession);\r\n\r\n if (!!oSession) {\r\n this.initAppSubscription && !this.initAppSubscription.closed && this.initAppSubscription.unsubscribe();\r\n\r\n const initApplication$ = this.appConfigService.AppConfig.OnInitApplicationAsync(this.m_Session.UserInfo)\r\n .pipe(\r\n first(),\r\n mergeMap((result) => {\r\n if (result)\r\n return this.appConfigService.AppConfig.OnGetGlobalDataSources();\r\n else\r\n throw 'Cannot start session.';\r\n }),\r\n tap(ds => this.SetDataSources(ds)),\r\n tap(() => this.notificationService.Start()),\r\n tap(() => { afterInitFn && afterInitFn(); }),\r\n map(() => true)\r\n );\r\n this.initAppSubscription = initApplication$\r\n .subscribe({\r\n next: x => {\r\n this.sessionStateChangedSubject.next(SessionStates.Started);\r\n }, error: e => {\r\n this.sessionStateChangedSubject.next(SessionStates.Ended);\r\n }\r\n });\r\n\r\n return initApplication$;\r\n }\r\n\r\n if (!oSession) {\r\n this.logoutAppSubscription && !this.logoutAppSubscription.closed && this.logoutAppSubscription.unsubscribe();\r\n\r\n const onLogoutapplication$ = this.appConfigService.AppConfig.OnLogoutApplicationAsync()\r\n .pipe(\r\n tap(() => {\r\n if(!bPreserveSession) {\r\n this.ClearSessionCredentials();\r\n }\r\n this.SetDataSources(undefined);\r\n }),\r\n tap(() => this.notificationService.Stop()),\r\n tap(() => { afterLogoutFn && afterLogoutFn(); }),\r\n map(() => false)\r\n );\r\n this.logoutAppSubscription = onLogoutapplication$\r\n .subscribe(x => {\r\n this.sessionStateChangedSubject.next(SessionStates.Ended);\r\n });\r\n return onLogoutapplication$;\r\n }\r\n }\r\n\r\n // Shortcut for end session action\r\n EndSession(afterFn?: () => void, preserveSession: boolean = false) {\r\n this.SetSession(undefined, null, afterFn, preserveSession);\r\n }\r\n\r\n //Set datasources\r\n SetDataSources(dataSources: { [id: string]: BaseDataSourceAbstract }) {\r\n this.m_DataSources = dataSources;\r\n }\r\n\r\n SaveSessionCredentials(sessionID: string, userName: string) {\r\n this.localStorageService.SetItem(\"SessionID\", sessionID);\r\n this.localStorageService.SetItem(\"UserName\", userName);\r\n }\r\n\r\n ClearSessionCredentials() {\r\n this.localStorageService.RemoveItem(\"SessionID\");\r\n this.localStorageService.RemoveItem(\"UserName\");\r\n }\r\n \r\n GetSessionID() {\r\n return this.localStorageService.GetItem(\"SessionID\");\r\n }\r\n\r\n GetUserName() {\r\n return this.localStorageService.GetItem(\"UserName\");\r\n }\r\n\r\n RefreshExpiredSessionTimeout(startNew: boolean = true) {\r\n const sessionTimeout = +this.systemOptionsService.getSystemOption(EnumSystemOptions.SessionTimeout);\r\n if (!sessionTimeout || sessionTimeout < 0) return;\r\n\r\n const sessionAlmostTimeout = (sessionTimeout > 3) ? (sessionTimeout - 2) : 0;\r\n\r\n if (this.sessionExpiredTimeoutHandler) {\r\n clearTimeout(this.sessionExpiredTimeoutHandler);\r\n this.sessionExpiredTimeoutHandler = null;\r\n }\r\n\r\n if (this.sessionAlmostExpiredTimeoutHandler) {\r\n clearTimeout(this.sessionAlmostExpiredTimeoutHandler);\r\n this.sessionAlmostExpiredTimeoutHandler = null;\r\n }\r\n\r\n if (startNew && !!this.m_Session) {\r\n if (sessionAlmostTimeout) {\r\n this.sessionAlmostExpiredTimeoutHandler = setTimeout(() => {\r\n this.sessionStateChangedSubject.next(SessionStates.AlmostExpired);\r\n }, sessionAlmostTimeout * 1000 * 60);\r\n }\r\n\r\n this.sessionExpiredTimeoutHandler = setTimeout(() => {\r\n this.AutoEndSession();\r\n }, sessionTimeout * 1000 * 60);\r\n }\r\n }\r\n\r\n private AutoEndSession() {\r\n this.RefreshExpiredSessionTimeout(false);\r\n this.sessionStateChangedSubject.next(SessionStates.Expired);\r\n }\r\n}\r\n","import { ComponentFactoryResolver, Injectable, ViewContainerRef } from '@angular/core';\r\nimport { AppConfigService } from '@m4u-angular/configuration/app.config.service';\r\nimport { SysGlobals } from '@m4u-angular/core/framework/sysglobals';\r\nimport { ShareDialogComponent } from '@ui/dialogs/share-dialog/share-dialog.component';\r\nimport { Observable } from 'rxjs';\r\nimport { BaseEntity, BaseEntityResponse, BaseResponse, FileView, SharingInformation, RenderedTemplate, NotificationTemplateListView } from '@base/entities/BaseEntities';\r\nimport { EnumNotificationDeliveryOptions } from './sysenums.enum';\r\nimport { BaseService } from '@base/service/BaseService';\r\nimport { ShareEndpoint } from '../endpoints/share.endpoint';\r\nimport { firstValueFrom } from 'rxjs';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ShareService extends BaseService {\r\n public ViewContainerRef: ViewContainerRef;\r\n\r\n private _notificationTemplates: NotificationTemplateListView[] = [];\r\n\r\n constructor(private componentFactoryResolver: ComponentFactoryResolver, private shareEndpoint: ShareEndpoint) {\r\n super();\r\n }\r\n\r\n async OpenShareDialog(componentName: string,\r\n entityType: string,\r\n getRenderedTemplate: (notificationTemplateID: number, deliveryOption: EnumNotificationDeliveryOptions) => Observable>,\r\n share: (sharingInformation: SharingInformation) => Observable>) {\r\n\r\n\r\n this._notificationTemplates = (await firstValueFrom(this.shareEndpoint.GetNotificationsTemplates())).Entities;\r\n\r\n if (!this.GetNotificationTemplatesByPageAndEntity(componentName, entityType).length) {\r\n this.UI.StopMessage(this.RC(\"msgShareNotificationTemplateNotFoundError\"));\r\n return;\r\n }\r\n\r\n const shareDialog = this.CreateInstance();\r\n shareDialog.GetRenderedTemplate = getRenderedTemplate;\r\n shareDialog.Share = share;\r\n\r\n shareDialog.PageName = componentName;\r\n shareDialog.ShareEntityType = entityType;\r\n\r\n shareDialog.ShowDialogShort((e) => { });\r\n }\r\n\r\n GetNotificationTemplatesByPageAndEntity(pageName: string, entityType:string) {\r\n return this._notificationTemplates?.filter(x => x.PageName == pageName && (x.EntityType == entityType || !x.EntityType || !entityType));\r\n }\r\n\r\n GetDefaultOnGetRenderedTemplate() {\r\n return (notificationTemplateID: number, deliveryOption: EnumNotificationDeliveryOptions) => this.shareEndpoint.GetRenderedTemplate(notificationTemplateID, deliveryOption);\r\n }\r\n\r\n private CreateInstance(): ShareDialogComponent {\r\n const componentFactory = this.componentFactoryResolver.resolveComponentFactory(ShareDialogComponent);\r\n const componentRef = this.ViewContainerRef.createComponent(componentFactory);\r\n return componentRef.instance;\r\n }\r\n}","import { ComponentPortal, Portal, TemplatePortal } from '@angular/cdk/portal';\r\nimport { ComponentFactoryResolver, Injectable, TemplateRef, Type, ViewContainerRef } from '@angular/core';\r\nimport { SideBarComponent, SidebarPosition } from '@m4u-angular/ui/layouts/layout/side-bar/side-bar.component';\r\nimport { Subject } from 'rxjs';\r\nimport { AppInjector } from '../injector/injector.module';\r\nimport { EnumSidebarStates, EnumWindowSizes } from './sysenums.enum';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SidebarService {\r\n _sidebars: Record = {};\r\n public ViewContainerRef: ViewContainerRef;\r\n\r\n private _sidebarSubject = new Subject<{ SidebarName: string, State: EnumSidebarStates }>();\r\n readonly SidebarState = this._sidebarSubject.asObservable();\r\n\r\n constructor(private componentFactoryResolver: ComponentFactoryResolver) {\r\n }\r\n\r\n Show(sidebarName: string, title: string, content: Type | TemplateRef, width?: EnumWindowSizes, \r\n componentOptions?: any, position? : SidebarPosition, className?: string) {\r\n let sidebarInstance = this._sidebars[sidebarName];\r\n if (!sidebarInstance || sidebarName === 'Filters') {\r\n sidebarInstance = this.CreateSidebarInstance();\r\n sidebarInstance.Name = sidebarName;\r\n sidebarInstance.Title = title;\r\n sidebarInstance.ContentPortal = this.ResolveContent(content);\r\n sidebarInstance.Width = width;\r\n sidebarInstance.SidebarComponentOptions = componentOptions;\r\n sidebarInstance.Position = position;\r\n sidebarInstance.Class = className;\r\n this._sidebars[sidebarName] = sidebarInstance;\r\n }\r\n \r\n sidebarInstance.SidebarState = EnumSidebarStates.Opened;\r\n }\r\n\r\n Hide(sidebarName: string): boolean {\r\n const sidebarInstance = this._sidebars[sidebarName];\r\n if (!sidebarInstance) return;\r\n\r\n if (sidebarInstance.SidebarPinned) return false;\r\n \r\n sidebarInstance.SidebarState = EnumSidebarStates.Closed;\r\n return true;\r\n }\r\n\r\n Close(sidebarName: string) {\r\n const sidebarInstance = this._sidebars[sidebarName];\r\n if (!sidebarInstance) return;\r\n\r\n sidebarInstance.SidebarState = EnumSidebarStates.Closed;\r\n }\r\n\r\n GetState(sidebarName: string) {\r\n const sidebarInstance = this._sidebars[sidebarName];\r\n return sidebarInstance && sidebarInstance.SidebarState;\r\n }\r\n\r\n OnStateChanged(sidebarName: string, state: EnumSidebarStates) {\r\n const sidebarInstance = this._sidebars[sidebarName];\r\n if (!sidebarInstance) return;\r\n\r\n if (sidebarInstance.SidebarState !== state) sidebarInstance.SidebarState = state;\r\n this._sidebarSubject.next({ SidebarName: sidebarName, State: state });\r\n }\r\n\r\n ClearSidebars() {\r\n Object.keys(this._sidebars).forEach(sidebarName => {\r\n this.Close(sidebarName);\r\n });\r\n this._sidebars = {};\r\n }\r\n\r\n DestroySidebar(sidebarName: string) {\r\n if (sidebarName && this._sidebars[sidebarName]) {\r\n this.Close(sidebarName);\r\n delete this._sidebars[sidebarName];\r\n }\r\n }\r\n\r\n private CreateSidebarInstance(): SideBarComponent {\r\n const componentFactory = this.componentFactoryResolver.resolveComponentFactory(SideBarComponent);\r\n const componentRef = this.ViewContainerRef.createComponent(componentFactory);\r\n return componentRef.instance;\r\n }\r\n\r\n private ResolveContent(content: Type | TemplateRef): Portal {\r\n return content instanceof TemplateRef\r\n ? new TemplatePortal(content, this.ViewContainerRef)\r\n : new ComponentPortal(content, this.ViewContainerRef, AppInjector, this.componentFactoryResolver);\r\n }\r\n}","import { Injectable } from \"@angular/core\";\r\n\r\nexport enum EnumCheckCredentialsResult {\r\n Success = \"Success\",\r\n Failure = \"Failure\",\r\n Lockout = \"Lockout\",\r\n PasswordExpired = \"PasswordExpired\",\r\n SessionExpired = \"SessionExpired\",\r\n NoLicense = \"NoLicense\",\r\n TechnicalFailure = \"TechnicalFailure\",\r\n MFASMSSent = \"MFASMSSent\",\r\n MFAEmailSent = \"MFAEmailSent\",\r\n NoMID = \"NoMID\",\r\n SessionFrozen=\"SessionFrozen\"\r\n}\r\nexport enum EnumPageDisplayModes {\r\n FullScreen = \"FullScreen\",\r\n Window = \"Window\",\r\n Dialog = \"Dialog\",\r\n BottomSheet = \"BottomSheet\"\r\n}\r\n\r\nexport enum EnumPageEntitySources {\r\n Internal = \"Internal\",\r\n External = \"External\",\r\n CRUD = \"CRUD\"\r\n}\r\n\r\nexport enum EnumScreenSizes {\r\n ScreenXSmall = \"ScreenXSmall\",\r\n ScreenSmall = \"ScreenSmall\",\r\n ScreenMedium = \"ScreenMedium\",\r\n ScreenLarge = \"ScreenLarge\",\r\n ScreenXLarge = \"ScreenXLarge\"\r\n}\r\n\r\nexport enum EnumWindowSizes {\r\n WindowXSmall = \"WindowXSmall\",\r\n WindowSmall = \"WindowSmall\",\r\n WindowMedium = \"WindowMedium\",\r\n WindowLarge = \"WindowLarge\",\r\n WindowXLarge = \"WindowXLarge\",\r\n WindowAutoSize = \"WindowAutoSize\"\r\n}\r\n\r\nexport enum EnumCRUDActions {\r\n Create = \"Create\",\r\n Update = \"Update\",\r\n CreateOrUpdate = \"CreateOrUpdate\",\r\n Delete = \"Delete\"\r\n}\r\n\r\nexport enum EnumRequestProgressTracking {\r\n Send = \"Send\",\r\n Receive = \"Receive\",\r\n Both = \"Both\"\r\n}\r\n\r\n\r\nexport enum EnumToggle {\r\n In = 'In',\r\n Out = 'Out'\r\n}\r\n\r\nexport enum EnumCardMode {\r\n Simple = 'Simple',\r\n Expand = 'Expand',\r\n SimpleExpand = 'SimpleExpand',\r\n Edit = 'Edit'\r\n}\r\n\r\nexport enum EnumGridModes {\r\n Editable = 'Editable',\r\n Report = 'Report',\r\n Lines = 'Lines'\r\n}\r\n\r\nexport enum EnumGridScrollingModes {\r\n Virtual = \"virtual\",\r\n Standart = \"standart\",\r\n Infinite = \"infinite\"\r\n}\r\n\r\nexport enum EnumInputBoxTypes {\r\n Text = \"Text\",\r\n Email = \"Email\",\r\n TextArea = \"TextArea\",\r\n Number = \"Number\",\r\n Date = \"Date\"\r\n}\r\n\r\nexport enum EnumMessageBoxTypes {\r\n OK = \"OK\",\r\n YesNo = \"YesNo\",\r\n Custom = \"Custom\"\r\n}\r\n\r\nexport enum EnumFileBoxReturnDataTypes {\r\n FileList = \"FileList\",\r\n FileDataAsString = \"FileStringData\",\r\n FileDataAsLinesArray = \"FileDataAsLinesArray\",\r\n FileDataAsJSONArray = \"FileDataAsJSONArray\"\r\n}\r\n\r\nexport enum EnumNotificationDeliveryOptions {\r\n Email = \"Email\",\r\n SMS = \"SMS\",\r\n PushMessage = \"PushMessage\",\r\n Share = \"Share\",\r\n Print = \"Print\",\r\n ExportToPDF = \"ExportToPDF\",\r\n WhatsApp = \"WhatsApp\",\r\n DontSend = \"DontSend\"\r\n}\r\n\r\nexport enum EnumNotificationTemplateEditingMode {\r\n None = \"None\",\r\n EditPrefix = \"EditPrefix\",\r\n EditBody = \"EditBody\",\r\n Preview = \"Preview\"\r\n}\r\n\r\nexport enum EnumLoginExtensionLinkType {\r\n Link,\r\n Route,\r\n Mailto,\r\n ButtonLink\r\n}\r\n\r\nexport enum EnumApplicationMode {\r\n Standard = \"Standard\",\r\n IFrame = \"IFrame\",\r\n SinglePage = \"SinglePage\"\r\n}\r\n\r\nexport enum EnumLanguages {\r\n Hebrew = \"HE\",\r\n English = \"EN\",\r\n Spanish = \"ES\"\r\n}\r\n\r\nexport enum EnumNotificationStatuses {\r\n Draft = \"Draft\",\r\n Sending = \"Sending\",\r\n Failure = \"Failure\",\r\n Sent = \"Sent\"\r\n}\r\n\r\nexport enum EnumPopupShowStatuses {\r\n None = \"None\",\r\n ToShow = \"ToShow\",\r\n Showed = \"Showed\"\r\n}\r\n\r\nexport enum EnumFilterPanelActions {\r\n Apply = \"Apply\",\r\n Clear = \"Clear\",\r\n Ready = \"Ready\"\r\n}\r\n\r\nexport enum EnumSidebarActions {\r\n Open = \"Open\",\r\n Close = \"Close\",\r\n Toggle = \"Toggle\"\r\n}\r\n\r\nexport enum EnumSidebarStates {\r\n Opened = \"Opened\",\r\n Closed = \"Closed\"\r\n}\r\n\r\nexport enum EnumMenuPositions {\r\n Open = \"Open\",\r\n Close = \"Close\"\r\n}\r\n\r\nexport enum EnumMFAMethods {\r\n None = \"None\",\r\n SMS = \"SMS\",\r\n Email = \"Email\",\r\n WhatsApp = \"WhatsApp\"\r\n}\r\n\r\nexport enum EnumLoginSecureKeyTypes {\r\n Password = \"Password\",\r\n Otp = \"Otp\",\r\n MFACode = \"MFACode\",\r\n Session = \"Session\",\r\n OAuth = \"OAuth\"\r\n}\r\n\r\nexport enum EnumInfoUTypes {\r\n Unicell = \"Unicell\",\r\n InforU = \"InforU\"\r\n}\r\n\r\nexport enum EnumSystemOptionDataTypes {\r\n String = \"String\",\r\n Number = \"Number\",\r\n Boolean = \"Boolean\"\r\n}\r\n\r\nexport enum EnumSystemOptions {\r\n AppNameHE = 'AppNameHE',\r\n AppNameEN = 'AppNameEN',\r\n AppURL = 'AppURL',\r\n\r\n SessionTimeout = 'SessionTimeout',\r\n SessionExpiry = 'SessionExpiry',\r\n EnableRequestLogging = 'EnableRequestLogging',\r\n EnableRemoteLogging = 'EnableRemoteLogging',\r\n ShowExpiredTimeoutAlert = 'ShowExpiredTimeoutAlert',\r\n ShowAlmostExpiredTimeoutAlert = 'ShowAlmostExpiredTimeoutAlert',\r\n\r\n IsSupportedCredentialsManagement = 'IsSupportedCredentialsManagement',\r\n IsSupportedUserWelcome = 'IsSupportedUserWelcome',\r\n IsSupportedPasswordChange = 'IsSupportedPasswordChange',\r\n IsSupportedPasswordRecovery = 'IsSupportedPasswordRecovery',\r\n IsSupportedLoginByOTP = 'IsSupportedLoginByOTP',\r\n IsSupportedLoginByPassword = 'IsSupportedLoginByPassword',\r\n IsSupportedLoginByOAuth = 'IsSupportedLoginByOAuth', //Runtime option\r\n IsAutoCreateCredentials = 'IsAutoCreateCredentials',\r\n AutoCreateCredentialsType = 'AutoCreateCredentialsType',\r\n IsRequireTaxNumberForOTP = 'IsRequireTaxNumberForOTP',\r\n\r\n PasswordChangeIntervalDays = 'PasswordChangeIntervalDays',\r\n PasswordComplexityLen = 'PasswordComplexityLen',\r\n PasswordComplexityMinChars = 'PasswordComplexityMinChars',\r\n PasswordComplexityMinDigits = 'PasswordComplexityMinDigits',\r\n\r\n BadLoginAttemptBeforeLock = 'BadLoginAttemptBeforeLock',\r\n BadLoginAttemptsCheckIntervalMinutes = 'BadLoginAttemptsCheckIntervalMinutes',\r\n BadLoginAttemptLockouIntervalMinutes = 'BadLoginAttemptLockouIntervalMinutes',\r\n\r\n XFrameOptions = 'XFrameOptions',\r\n IsDeployedBehindLoadBalancer = 'IsDeployedBehindLoadBalancer',\r\n\r\n IsSupportNotificationMethodEmail = 'IsSupportNotificationMethodEmail',\r\n IsSupportNotificationMethodSMS = 'IsSupportNotificationMethodSMS',\r\n IsSupportNotificationMethodWhatsApp = 'IsSupportNotificationMethodWhatsApp',\r\n\r\n RetentionPeriodRequests = 'RetentionPeriodRequests',\r\n RetentionPeriodRemoteRequests = 'RetentionPeriodRemoteRequests',\r\n RetentionPeriodNotifications = 'RetentionPeriodNotifications',\r\n RetentionPeriodSessions ='RetentionPeriodSessions',\r\n\r\n SessionFingerprintFreezeTimeout = 'SessionFingerprintFreezeTimeout'\r\n}\r\n\r\nexport enum HistoryEventTypesEnum {\r\n FieldChange = \"FieldChange\",\r\n RowAdded = \"RowAdded\",\r\n RowDeleted = \"RowDeleted\",\r\n Special = \"Special\"\r\n}\r\n\r\nexport enum EnumPrintingType {\r\n None = \"None\",\r\n Entity = \"Entity\",\r\n Report = \"Report\"\r\n}\r\n\r\nexport enum EnumUserLoginStatus {\r\n All = \"All\",\r\n Success = \"Success\",\r\n Failure = \"Failure\"\r\n}\r\n\r\nexport enum EnumYesNo\r\n{ \r\n\tNo = \"No\",\r\n\tYes = \"Yes\"\r\n}\r\n\r\nexport enum EnumLocalizationTypes {\r\n Israel = 1,\r\n Europe = 2,\r\n NorthAmerica = 3,\r\n SouthAmerica = 4,\r\n FarEast = 6,\r\n Indian = 7\r\n}\r\n\r\nexport enum EnumCustomFilterTypes {\r\n RelatedToAtLeastOne = 'RelatedToAtLeastOne'\r\n}\r\n\r\nexport enum EnumLogLevel {\r\n Info = 'Info',\r\n Warning = 'Warning',\r\n Error = 'Error',\r\n Unknown = 'Unknown'\r\n}\r\n\r\n@Injectable()\r\nexport class SysEnumsService {\r\n constructor() { }\r\n\r\n public EnumWindowSizes = EnumWindowSizes;\r\n public EnumCardMode = EnumCardMode;\r\n public EnumToggle = EnumToggle;\r\n public EnumInputBoxTypes = EnumInputBoxTypes;\r\n public EnumMessageBoxTypes = EnumMessageBoxTypes;\r\n public EnumFileBoxReturnDataTypes = EnumFileBoxReturnDataTypes;\r\n public EnumNotificationDeliveryOptions = EnumNotificationDeliveryOptions;\r\n public EnumLoginExtensionLinkType = EnumLoginExtensionLinkType;\r\n public EnumApplicationMode = EnumApplicationMode;\r\n public EnumNotificationStatuses = EnumNotificationStatuses;\r\n public EnumPageDisplayModes = EnumPageDisplayModes;\r\n public EnumLanguages = EnumLanguages;\r\n public EnumFilterPanelActions = EnumFilterPanelActions;\r\n public EnumMenuPositions = EnumMenuPositions;\r\n public EnumMFAMethods = EnumMFAMethods;\r\n public EnumSidebarActions = EnumSidebarActions;\r\n public EnumSystemOptionDataTypes = EnumSystemOptionDataTypes;\r\n public HistoryEventTypesEnum = HistoryEventTypesEnum;\r\n public EnumPrintingType = EnumPrintingType;\r\n public EnumInfoUTypes = EnumInfoUTypes;\r\n public EnumUserLoginStatus = EnumUserLoginStatus;\r\n public EnumLocalizationTypes = EnumLocalizationTypes;\r\n public EnumCustomFilterTypes = EnumCustomFilterTypes;\r\n}\r\n","import { EventEmitter, Injectable } from '@angular/core';\r\nimport { EntityLoadedEventArgs, EntitySavedEventArgs, MessageBoxOptions, ToolbarSettings } from '@base/classes/BaseClasses';\r\nimport { BehaviorSubject, ReplaySubject, Subject } from 'rxjs';\r\nimport { EnumFilterPanelActions, EnumMenuPositions } from './sysenums.enum';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class SysEventsService {\r\n // EventEmitter inherits from RxJS Subject. ALWAYS use subscribe/unsubscribe when working with them\r\n public OnSetDefaults: EventEmitter = new EventEmitter();\r\n public OnEntityLoaded: EventEmitter = new EventEmitter();\r\n public OnNavigate: EventEmitter = new EventEmitter();\r\n public OnReloadComponent: EventEmitter = new EventEmitter();\r\n\r\n private _onEntitySavedSubject = new Subject();\r\n public OnEntitySaved = this._onEntitySavedSubject.asObservable();\r\n\r\n NotifyEntitySaved(e: EntitySavedEventArgs) {\r\n this._onEntitySavedSubject.next(e);\r\n }\r\n\r\n private _toolbarReloadSubject = new ReplaySubject(3);\r\n readonly Toolbar = this._toolbarReloadSubject.asObservable();\r\n\r\n ReloadToolbar(toolbarSettings: ToolbarSettings) {\r\n this._toolbarReloadSubject.next(toolbarSettings);\r\n }\r\n\r\n private _selectedRouteChangedSubject = new BehaviorSubject('');\r\n readonly SelectedRoute = this._selectedRouteChangedSubject.asObservable();\r\n\r\n ChangeSelectedRoute(route: string) {\r\n this._selectedRouteChangedSubject.next(route);\r\n }\r\n\r\n private _reloadMenuItemsSubject = new ReplaySubject(1); //BehaviorSubject(false);\r\n readonly MenuItems = this._reloadMenuItemsSubject.asObservable();\r\n\r\n ReloadMenuItems() {\r\n this._reloadMenuItemsSubject.next(true);\r\n }\r\n\r\n private _menuPositonSubject = new ReplaySubject(1);\r\n readonly MenuPositon = this._menuPositonSubject.asObservable();\r\n\r\n // null or undefined to toggle menu\r\n SetMenuPositon(position?: EnumMenuPositions) {\r\n this._menuPositonSubject.next(position);\r\n }\r\n\r\n private _filterPanelSubject = new Subject();\r\n readonly FilterPanel = this._filterPanelSubject.asObservable();\r\n\r\n FilterPanelAction(action: EnumFilterPanelActions) {\r\n this._filterPanelSubject.next(action);\r\n }\r\n\r\n private _pageSidePanelStateSubject = new ReplaySubject<{ pageComponentName: string, state: boolean }>(1);\r\n readonly PageSidePanelState = this._pageSidePanelStateSubject.asObservable();\r\n\r\n SetPageSidePanelState(pageComponentName: string, state: boolean) {\r\n this._pageSidePanelStateSubject.next({ pageComponentName: pageComponentName, state: state });\r\n }\r\n\r\n private _pagePreviewStateSubject = new Subject<{ pageComponentName: string, state: boolean, data: string | Blob, fileName: string }>();\r\n readonly PagePreviewState = this._pagePreviewStateSubject.asObservable();\r\n\r\n SetPagePreviewState(pageComponentName: string, state: boolean, data?: string | Blob, fileName?: string) {\r\n this._pagePreviewStateSubject.next({ pageComponentName: pageComponentName, state: state, data, fileName });\r\n }\r\n\r\n private _openMessageBoxSubject = new Subject();\r\n readonly OpenMessageBoxSubject = this._openMessageBoxSubject.asObservable();\r\n\r\n public OpenMessageBox(options: MessageBoxOptions) {\r\n this._openMessageBoxSubject.next(options);\r\n }\r\n\r\n private _closeMessageBoxSubject = new Subject();\r\n readonly CloseMessageBoxSubject = this._closeMessageBoxSubject.asObservable();\r\n\r\n public CloseMessageBox(value: boolean) {\r\n this._closeMessageBoxSubject.next(value);\r\n }\r\n\r\n private _breadcrumbSubject = new Subject();\r\n readonly Breadcrumb = this._breadcrumbSubject.asObservable();\r\n\r\n public SetBreadCrumbVisible(isVisible: boolean) {\r\n this._breadcrumbSubject.next(isVisible);\r\n }\r\n\r\n private _defaultNavigationSubject = new Subject();\r\n readonly OnNavigateDefault = this._defaultNavigationSubject.asObservable();\r\n\r\n public NavigateDefault(result: boolean) {\r\n this._defaultNavigationSubject.next(result);\r\n }\r\n\r\n private _loadPanelSubject = new Subject();\r\n readonly LoadPanel = this._loadPanelSubject.asObservable();\r\n\r\n public SetLoadPanelState(result: boolean) {\r\n this._loadPanelSubject.next(result);\r\n }\r\n\r\n private _loadingSubject = new Subject();\r\n readonly Loading$ = this._loadingSubject.asObservable();\r\n\r\n public ShowLoading() {\r\n this._loadingSubject.next(true);\r\n }\r\n\r\n public HideLoading() {\r\n this._loadingSubject.next(false);\r\n }\r\n\r\n private _dialogShownSubject = new Subject();\r\n readonly DialogShown$ = this._dialogShownSubject.asObservable();\r\n\r\n public DialogShown(componentName: string) {\r\n this._dialogShownSubject.next(componentName);\r\n }\r\n}\r\n","import { ClientException, BaseState, BaseEntity } from '@base/entities/BaseEntities';\r\nimport { ComponentCustomization, FieldCustomizationElement, InjectableComponentOptions } from '@base/classes/BaseClasses';\r\nimport { Route } from '@angular/router';\r\nimport { BaseInjectableComponent } from '@m4u-angular/base/component/BaseInjectableComponent';\r\nimport { HttpContextToken } from '@angular/common/http';\r\n\r\nclass SysGlobalsClass {\r\n MainMenuVisible: boolean;\r\n MenuPath: string;\r\n PageStates: { [page: string]: BaseState } = {};\r\n IsResetState: boolean;\r\n LastException: ClientException;\r\n Language: string;\r\n CurrentEntity: BaseEntity;\r\n CurrentState: BaseState;\r\n FieldCustomizations: FieldCustomizationElement[];\r\n ComponentCustomizations: ComponentCustomization[];\r\n PageRoutes: Route[];\r\n NavigationSequence: number;\r\n ProgressPercent: number;\r\n IsProgressTracking: boolean;\r\n IgnoreSessionRefreshRequestToken: HttpContextToken = new HttpContextToken(() => false);\r\n\r\n InjectableComponentsOptions: InjectableComponentOptions>[] = [];\r\n}\r\n\r\nexport const SysGlobals = new SysGlobalsClass();\r\n","\r\nimport { Injectable } from '@angular/core';\r\nimport { KeyValueEntity } from '@base/entities/BaseEntities';\r\nimport { EnumSystemOptions } from './sysenums.enum';\r\n\r\n@Injectable()\r\nexport class SystemOptionsService {\r\n private systemOptions: KeyValueEntity[];\r\n constructor() { }\r\n\r\n setOptions(options: KeyValueEntity[]) {\r\n this.systemOptions = [...options];\r\n }\r\n\r\n mergeOptions(options: KeyValueEntity[]) {\r\n this.systemOptions = [...this.systemOptions, ...options];\r\n }\r\n\r\n getSystemOption(optionName: EnumSystemOptions | string) {\r\n if (this.systemOptions == undefined) return undefined;\r\n var option = this.systemOptions.find(x => x.Key == optionName);\r\n if (option == undefined) throw (`SystemOption ${optionName} is not defined`);\r\n return option.Value;\r\n }\r\n\r\n getSystemOptionAsBoolean(optionName: EnumSystemOptions | string) {\r\n return this.getSystemOption(optionName) == '1';\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport notify from 'devextreme/ui/notify';\r\nimport { MessageBoxOptions } from '@base/classes/BaseClasses';\r\nimport { SysEventsService } from '@core/framework/sysevents.service';\r\n\r\n@Injectable()\r\nexport class UiService {\r\n\r\n constructor(private sysEventsService: SysEventsService) {\r\n }\r\n\r\n public OpenMessageBox(options: MessageBoxOptions) {\r\n this.sysEventsService.OpenMessageBox(options);\r\n }\r\n\r\n public CloseMessageBox(result: boolean) {\r\n this.sysEventsService.CloseMessageBox(result);\r\n }\r\n\r\n // Information message for the user\r\n public WarningMessage(sMessage: string, sSelector?: string, iMilliSecs?: number, isShowMultipleToasts?: boolean) {\r\n this.ShowMessage(sMessage, 'warning', iMilliSecs || 30000, sSelector, false, isShowMultipleToasts);\r\n }\r\n\r\n // Information message for the user\r\n public InfoMessage(sMessage: string, sSelector?: string, iMilliSecs?: number, isShowMultipleToasts?: boolean) {\r\n this.ShowMessage(sMessage, 'success', iMilliSecs || 5000, sSelector, false, isShowMultipleToasts);\r\n }\r\n\r\n // Error message for the user\r\n public StopMessage(sMessage: string, sSelector?: string, iMilliSecs?: number, isShowMultipleToasts?: boolean) {\r\n this.ShowMessage(sMessage, 'error', iMilliSecs || 15000, sSelector, false, isShowMultipleToasts);\r\n }\r\n\r\n public Notify(sMessage: string) {\r\n this.ShowMessage(sMessage, 'info', 15000, undefined, true);\r\n }\r\n\r\n // Differentiate between user messages and message that system has no expected\r\n // For instance, getting an error when populating a combo is not expected. \r\n // An error message when saving an entity can happen, thus StopMessage should be used\r\n public UnexpectedMessage(sMessage: string) {\r\n this.ShowMessage(sMessage, 'info', 15000);\r\n console.error(sMessage);\r\n }\r\n\r\n // Show the message\r\n private ShowMessage(sMessage: string, sType: string, iMilliSecs: number, sSelector?: string,\r\n isNotification?: boolean, isShowMultipleToasts?: boolean) {\r\n const toasts = document.querySelectorAll('.dx-toast-content');\r\n const options = this.GetNotifyOptions(sMessage, sSelector, toasts, sType, isNotification, isShowMultipleToasts);\r\n const displayTime = iMilliSecs - toasts.length * 1000;\r\n notify(options, sType, displayTime <= 5000 ? 5000 : displayTime);\r\n }\r\n\r\n private GetNotifyOptions(sMessage: string, sSelector: string, toasts: NodeListOf, toastType: string,\r\n isNotification?: boolean, isShowMultipleToasts?: boolean) {\r\n const customToastCssClass = `m4u-custom-toast-${toastType}`;\r\n const toastIconClass = `m4u-icon-toast-${toastType}`; \r\n const position = isNotification ? 'right bottom' : 'bottom center';\r\n const offset = isNotification \r\n ? `-20px -${this.GetNotificationTop(toasts)}` \r\n : isShowMultipleToasts ? `0 -${this.GetNotificationTop(toasts)}` : '0 -20px';\r\n return {\r\n closeOnClick: true,\r\n closeOnSwipe: true,\r\n width: 200,\r\n position: {\r\n at: position,\r\n my: position,\r\n of: sSelector || null,\r\n offset: offset\r\n },\r\n contentTemplate: `
\r\n
\r\n ${sMessage}\r\n
`,\r\n show: {\r\n duration: 0\r\n },\r\n animation: {\r\n show:\r\n {\r\n type: 'fade',\r\n duration: 500,\r\n from: 0,\r\n to: 1\r\n },\r\n hide:\r\n {\r\n type: 'fade',\r\n duration: 1000,\r\n from: 1,\r\n to: 0\r\n }\r\n }\r\n };\r\n }\r\n\r\n private GetNotificationTop(toasts: NodeListOf): number {\r\n let top = 0;\r\n const lastOffset = toasts.length ? toasts[toasts.length - 1]?.getBoundingClientRect().top : null;\r\n\r\n if (lastOffset) {\r\n top = lastOffset;\r\n }\r\n if (top <= 0) {\r\n top = 20;\r\n }\r\n else {\r\n top = window.innerHeight - top;\r\n top += 5;\r\n }\r\n\r\n return top;\r\n }\r\n}\r\n","import { HttpClient, HttpContext } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { BaseEntity } from '@base/entities/BaseEntities';\r\nimport { EnumRequestProgressTracking } from '../framework/sysenums.enum';\r\nimport { Utils } from '../helpers/Utils';\r\nimport { AppConfigService } from '../../configuration/app.config.service';\r\n\r\n@Injectable()\r\nexport class APIGatewayService {\r\n constructor(private http: HttpClient,\r\n private appConfigService: AppConfigService) {\r\n }\r\n\r\n //Controller based actions\r\n //********************************\r\n public ExecuteGetAction(sController: string, sAction: string, QueryParams?: any, TrackProgress?: EnumRequestProgressTracking, ResponseType?: string, Headers?: { [header: string] : string | string[] }, Context?: HttpContext): Observable {\r\n return this.ExecuteGetRequest(sController + '/' + sAction, QueryParams, TrackProgress, ResponseType, Headers, Context);\r\n }\r\n\r\n public ExecutePostAction(sController: string, sAction: string, Entity: BaseEntity | BaseEntity[], QueryParams?: any, TrackProgress?: EnumRequestProgressTracking, Headers?: { [header: string] : string | string[] }, Context?: HttpContext): Observable {\r\n return this.ExecutePostRequest(sController + '/' + sAction, Entity, QueryParams, TrackProgress, Headers, Context);\r\n }\r\n\r\n public ExecuteDeleteAction(sController: string, sAction: string, QueryParams?: any, TrackProgress?: EnumRequestProgressTracking, Headers?: { [header: string] : string | string[] }, Context?: HttpContext): Observable {\r\n return this.ExecuteDeleteRequest(sController + '/' + sAction, QueryParams, TrackProgress, Headers, Context);\r\n }\r\n\r\n //*******************************\r\n //HTTP-Level requests\r\n //*******************************\r\n private ExecutePostRequest(url: string, data: any, QueryParams: any, TrackProgress?: EnumRequestProgressTracking, Headers?: { [header: string] : string | string[] }, Context?: HttpContext): Observable {\r\n return this.http.post(this.GetAPIURL() + url, Utils.CloneObject(data), this.GetParams(QueryParams, TrackProgress, undefined, Headers, Context)); //Notice the cloning, to avoid changing the actual fields when parsing the body\r\n }\r\n\r\n private ExecuteGetRequest(url: string, QueryParams?: any, TrackProgress?: EnumRequestProgressTracking, ResponseType?: string, Headers?: { [header: string] : string | string[] }, Context?: HttpContext): Observable {\r\n return this.http.get(this.GetAPIURL() + url, this.GetParams(QueryParams, TrackProgress, ResponseType, Headers, Context));\r\n }\r\n\r\n private ExecuteDeleteRequest(url: string, QueryParams?: any, TrackProgress?: EnumRequestProgressTracking, Headers?: { [header: string] : string | string[] }, Context?: HttpContext): Observable {\r\n return this.http.delete(this.GetAPIURL() + url, this.GetParams(QueryParams, TrackProgress, undefined, Headers, Context));\r\n }\r\n\r\n //Return request parameters\r\n private GetParams(QueryParams: any, TrackProgress?: EnumRequestProgressTracking, ResponseType?: string, Headers?: { [header: string] : string | string[] }, Context?: HttpContext) {\r\n const ret =\r\n {\r\n params: this.PrepareQueryParams(QueryParams),\r\n headers: this.GetHeaders(TrackProgress, Headers),\r\n reportProgress: (TrackProgress != undefined),\r\n context: Context\r\n };\r\n\r\n if (ResponseType) {\r\n (ret as any).responseType = ResponseType;\r\n }\r\n\r\n return ret;\r\n }\r\n\r\n private GetHeaders(TrackProgress?: EnumRequestProgressTracking, Headers?: { [header: string] : string | string[] }): { [header: string] : string | string[] } {\r\n let headers = Headers;\r\n if (TrackProgress) headers = { ...{ 'm4u-trackprogress': TrackProgress }, ...headers };\r\n return headers;\r\n }\r\n\r\n\r\n private PrepareQueryParams(QueryParams: any): any {\r\n\r\n //Step 1 - pre-process \r\n let params = this.PrepareQueryParamsInternal(QueryParams);\r\n\r\n\r\n //Step 2 - flatten/spread\r\n if (params != undefined) {\r\n Object.keys(params).forEach(key => {\r\n const value = params[key];\r\n if (value instanceof Object && !(value instanceof Array)) {\r\n Object.keys(value).forEach(childKey => {\r\n const valueChild = value[childKey];\r\n params[childKey] = valueChild;\r\n });\r\n delete params[key];\r\n }\r\n });\r\n }\r\n\r\n //Step 3 - format dates\r\n params = this.PrepareQueryParamsInternal(params);\r\n return params;\r\n }\r\n\r\n //Prepare query parameters - format dates and remove nulls\r\n private PrepareQueryParamsInternal(QueryParams: any): any {\r\n if (QueryParams === undefined) return undefined;\r\n Object.keys(QueryParams).forEach(key => {\r\n const value = QueryParams[key];\r\n if (value === undefined || value === null || value == '') delete QueryParams[key];\r\n if (value instanceof Date) QueryParams[key] = this.ConvertToServerDate(value);\r\n });\r\n return QueryParams;\r\n }\r\n\r\n //*******************************\r\n\r\n\r\n //Formats value for sending to the server, without time zone\r\n private ConvertToServerDate(value: Date): string {\r\n const D = new Date(Date.UTC(value.getFullYear(), value.getMonth(), value.getDate(), value.getHours(), value.getMinutes(), value.getSeconds()));\r\n let S = D.toISOString();\r\n if (S.endsWith('Z')) S = S.substring(0, S.length - 1);\r\n return S;\r\n }\r\n\r\n\r\n //Return the base URL for the API\r\n public GetAPIURL(): string {\r\n if (this.appConfigService.M4UConfig.standaloneApplicationApiUrl) return this.appConfigService.M4UConfig.standaloneApplicationApiUrl;\r\n \r\n const deploymentPort = this.appConfigService.M4UConfig.deploymentPort; \r\n const formattedDeploymentPort = deploymentPort && `:${deploymentPort}` || '';\r\n const deploymentLocation = this.appConfigService.M4UConfig.deploymentLocation;\r\n const formattedDeploymentLocation = deploymentLocation && `${deploymentLocation}` || '/';\r\n\r\n //Combine\r\n return `${location.protocol}//${location.hostname}${formattedDeploymentPort}${formattedDeploymentLocation}api/`;\r\n \r\n }\r\n}\r\n\r\n","declare global\r\n{\r\n interface Date\r\n {\r\n ToDate(): Date;\r\n IsToday(): boolean;\r\n Time(): Date;\r\n }\r\n \r\n\r\n\r\n}\r\n\r\nDate.prototype.ToDate = function (): Date\r\n{\r\n return new Date(this.getFullYear(), this.getMonth(), this.getDate());\r\n}\r\n\r\nDate.prototype.IsToday = function (): boolean\r\n{\r\n return this.ToDate().valueOf() == new Date().ToDate().valueOf();\r\n}\r\n\r\n\r\nDate.prototype.Time = function (): Date\r\n{\r\n return new Date(1900, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds());\r\n}\r\n\r\n\r\n\r\n\r\n\r\nexport { }","import { DataGroupInfoHeader } from '@base/classes/BaseClasses';\r\nimport { formatDate } from \"devextreme/localization\";\r\nimport { FrameworkService } from \"../framework/framework.service\";\r\nimport { RC } from \"../framework/resources.service\";\r\nimport { EnumLanguages } from '../framework/sysenums.enum';\r\nimport { SysGlobals } from \"../framework/sysglobals\";\r\nimport { AppInjector } from \"../injector/injector.module\";\r\nimport \"./DateExtensions\";\r\n\r\nexport class DateHelpers {\r\n\r\n\r\n //Return only date part of the value\r\n public static ToDateOnly(value: Date): Date {\r\n var date = new Date(value);\r\n date.setHours(0, 0, 0, 0);\r\n return date;\r\n }\r\n\r\n //Return only time part of the value\r\n public static ToTimeOnly(value: Date): Date {\r\n return new Date(1900, 0, 1, value.getHours(), value.getMinutes(), value.getSeconds());\r\n }\r\n\r\n public static DiffInSeconds(d1: Date, d2: Date): number {\r\n return (d2.valueOf() - d1.valueOf()) / (1000 * 1);\r\n }\r\n\r\n public static DiffInMinutes(d1: Date, d2: Date): number {\r\n return (d2.valueOf() - d1.valueOf()) / (1000 * 60);\r\n }\r\n\r\n public static DiffInHours(d1: Date, d2: Date): number {\r\n var x1 = new Date(0, 0, 0, d1.getHours(), d1.getMinutes());\r\n var x2 = new Date(0, 0, 0, d2.getHours(), d2.getMinutes());\r\n return (x2.valueOf() - x1.valueOf()) / (1000 * 3600);\r\n }\r\n\r\n public static DiffInDays(d1: Date, d2: Date): number {\r\n return (d2.ToDate().valueOf() - d1.ToDate().valueOf()) / (1000 * 3600 * 24);\r\n }\r\n\r\n public static DiffInWeeks(d1: Date, d2: Date): number {\r\n return (d2.ToDate().valueOf() - d1.ToDate().valueOf()) / 604800000;\r\n }\r\n\r\n public static DiffInMonthes(d1: Date, d2: Date): number {\r\n let months = 0;\r\n months = (d2.getFullYear() - d1.getFullYear()) * 12;\r\n months -= d1.getMonth();\r\n months += d2.getMonth();\r\n return months <= 0 ? 0 : months;\r\n }\r\n\r\n public static IsSameDate(d1: Date, d2: Date) {\r\n return (d1.getFullYear() == d2.getFullYear() && d1.getMonth() == d2.getMonth() && d1.getDate() == d2.getDate());\r\n }\r\n\r\n public static BOM(d1: Date) {\r\n return new Date(d1.getFullYear(), d1.getMonth(), 1);\r\n }\r\n\r\n public static BOY(d1: Date) {\r\n return new Date(d1.getFullYear(), 0, 1);\r\n }\r\n\r\n public static EOY(d1: Date) {\r\n return new Date(d1.getFullYear(), 11, 1);\r\n }\r\n\r\n public static EOM(d1: Date) {\r\n return new Date(d1.getFullYear(), d1.getMonth() + 1, 0);\r\n }\r\n\r\n public static GetDayName(iDay: number): string {\r\n switch (iDay) {\r\n case 1: return RC(\"lblDay1\");\r\n case 2: return RC(\"lblDay2\");\r\n case 3: return RC(\"lblDay3\");\r\n case 4: return RC(\"lblDay4\");\r\n case 5: return RC(\"lblDay5\");\r\n case 6: return RC(\"lblDay6\");\r\n case 7: return RC(\"lblDay7\");\r\n }\r\n }\r\n\r\n public static GetDayNameShort(iDay: number): string {\r\n switch (iDay) {\r\n case 1: return RC(\"lblDay1s\");\r\n case 2: return RC(\"lblDay2s\");\r\n case 3: return RC(\"lblDay3s\");\r\n case 4: return RC(\"lblDay4s\");\r\n case 5: return RC(\"lblDay5s\");\r\n case 6: return RC(\"lblDay6s\");\r\n case 7: return RC(\"lblDay7s\");\r\n }\r\n }\r\n\r\n public static GetDateApproximate(date: Date, bShowDate: boolean = true): string {\r\n var framework = AppInjector.get(FrameworkService);\r\n if (date == null) return RC(\"lblDateIsNull\");\r\n var sApproximate: string = this.GetDateApproximateInternal(date);\r\n var sFormattedDate: string = this.IsSameDate(date, new Date()) && this.IsHasTime(date)\r\n ? formatDate(date, framework.CompanyInfo.TimeFormatShort)\r\n : formatDate(date, framework.CompanyInfo.DateFormatShort);\r\n var sFinalDate: string = bShowDate ? `(${sFormattedDate})` : '';\r\n return RC(\"lblDateApproximate\", sApproximate, RC('lblAgo'), sFinalDate)\r\n //if (SysGlobals.Language == EnumLanguages.English) return `${sApproximate} ${RC('lblAgo')} ${sFinalDate}`;\r\n //if (SysGlobals.Language == EnumLanguages.Spanish) return `${sApproximate} ${RC('lblAgo')} ${sFinalDate}`;\r\n //if (SysGlobals.Language == EnumLanguages.Hebrew) return `${RC('lblAgo')} ${sApproximate} ${sFinalDate}`;\r\n }\r\n\r\n\r\n public static IsHasTime(date: Date) {\r\n return date.getHours() != 0 || date.getMinutes() != 0 || date.getSeconds() != 0;\r\n }\r\n\r\n private static GetDateApproximateInternal(date: Date): string {\r\n const now = new Date();\r\n const diff = now.getTime() - date.getTime();\r\n const nMinutes = diff / 1000 / 60;\r\n const nHours = nMinutes / 60;\r\n const nDays = nHours / 24;\r\n const nWeeks = nDays / 7;\r\n const nMonths = nDays / 30;\r\n const nYears = nMonths / 12;\r\n\r\n\r\n // Less then 1 day\r\n if (this.IsHasTime(date)) {\r\n if (nMinutes <= 1) return RC(\"f702\");\r\n if (nMinutes <= 5) return RC(\"f703\");\r\n if (nMinutes <= 10) return RC(\"f704\");\r\n if (nMinutes <= 15) return RC(\"f705\");\r\n if (nMinutes <= 30) return RC(\"f706\");\r\n if (nMinutes <= 60) return RC(\"f707\");\r\n if (nMinutes <= 90) return RC(\"f709\");\r\n if (nMinutes <= 135) return RC(\"f710\");\r\n if (nDays <= 1) return RC(\"f711\", Math.floor(nHours));\r\n }\r\n else {\r\n if (nDays <= 1) return RC(\"f725\");\r\n }\r\n\r\n // Less then 1 week\r\n if (nDays <= 2) return RC(\"f712\");\r\n if (nDays <= 3) return RC(\"f713\");\r\n if (nWeeks <= 1) return RC(\"f714\", Math.floor(nDays));\r\n\r\n // Less then 1 month\r\n if (nWeeks <= 2) return RC(\"f715\")\r\n if (nWeeks <= 3) return RC(\"f716\")\r\n if (nMonths <= 1) return RC(\"f717\", Math.floor(nWeeks))\r\n\r\n // Less then 1 year\r\n if (nMonths <= 2) return RC(\"f718\")\r\n if (nMonths <= 3) return RC(\"f720\")\r\n if (nYears <= 1) return RC(\"f721\", Math.floor(nMonths))\r\n\r\n // Years\r\n if (nYears <= 2) return RC(\"f722\")\r\n if (nYears <= 3) return RC(\"f723\")\r\n\r\n return RC(\"f724\", Math.floor(nYears));\r\n }\r\n\r\n public static GetGroupsByDate(): DataGroupInfoHeader[] {\r\n let groups =\r\n [\r\n new DataGroupInfoHeader(RC('lblToday'), '-1'),\r\n new DataGroupInfoHeader(RC('lblYesterday'), '-2'),\r\n new DataGroupInfoHeader(RC('lblLastWeek'), '-7'),\r\n new DataGroupInfoHeader(RC('lblLastMonth'), '-30'),\r\n new DataGroupInfoHeader(RC('lblBefore'), '-999')\r\n ]\r\n\r\n return groups;\r\n }\r\n\r\n\r\n public static AddDay(date: Date, count: number) {\r\n const newDate = new Date(date.valueOf());\r\n newDate.setDate(date.getDate() + count);\r\n return newDate;\r\n }\r\n\r\n public static AddWeek(date: Date, count: number) {\r\n const newDate = new Date(date.valueOf());\r\n newDate.setDate(date.getDate() + count * 7);\r\n return newDate;\r\n }\r\n\r\n public static AddMonth(date: Date, count: number) {\r\n const newDate = new Date(date.valueOf());\r\n newDate.setMonth(date.getMonth() + count);\r\n return newDate;\r\n }\r\n}","import { 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}","import { BaseEntity, GenericListEntity, UploadFile, AttachedFile, CompanyInfo } from '@base/entities/BaseEntities';\r\nimport { QueryList } from '@angular/core';\r\nimport cloneDeep from 'lodash/cloneDeep';\r\nimport camelcaseKeys from 'camelcase-keys';\r\nimport { Observable, Subject, take } from 'rxjs';\r\n\r\n/** Utility functions for interaction with objects */\r\n// @dynamic\r\nexport class Utils {\r\n\r\n /** Returns a new typed array */\r\n public static MapList(type: (new () => TEntity), Entities: TEntity[]): TEntity[] {\r\n //Empty response, do nothing\r\n if (Entities.length == 0) return undefined;\r\n\r\n //Map each element and add to array\r\n const newArray: Array = new Array();\r\n Entities.forEach(Entity => {\r\n newArray.push(this.MapObject(type, Entity));\r\n });\r\n\r\n return newArray;\r\n }\r\n\r\n public static MapAsNumeric(item: GenericListEntity): any {\r\n return (\r\n {\r\n Value: +item.Value,\r\n Text: item.Text,\r\n Description: item.Description\r\n });\r\n }\r\n\r\n /** Copy all properties from source object to a new typed object */\r\n /**\r\n * \r\n * @param type The type of the result entity\r\n * @param Entity The value of the source \r\n */\r\n public static MapObject(type: (new () => TEntity), Entity: TEntity): TEntity {\r\n //Empty response, do nothing\r\n if (Entity == undefined) return undefined;\r\n\r\n //Create new instance, copy \r\n const newObject: TEntity = this.GetNewInstance(type);\r\n const resultObject = this.CloneObject(Entity as any) as TEntity;\r\n resultObject.TypeName = newObject.TypeName;\r\n return resultObject;\r\n }\r\n\r\n public static GetNewInstance(type: (new () => TEntity)): TEntity {\r\n return new type();\r\n }\r\n\r\n public static CloneObject(obj: object): any {\r\n return cloneDeep(obj);\r\n }\r\n\r\n public static IsPrimitiveType(obj: object) {\r\n return (obj !== Object(obj));\r\n }\r\n\r\n public static CopyProperties(type: (new () => TEntity), source: TEntity, destination: TEntity) {\r\n //Empty response, do nothing\r\n if (source == undefined || destination == undefined) return undefined;\r\n for (const k in source) destination[k] = source[k];\r\n }\r\n\r\n public static IsEmpty(obj: any): boolean {\r\n if (typeof (obj) === 'number' && obj === 0) return false;\r\n return obj === undefined || obj == null || obj == '';\r\n }\r\n\r\n public static NZ(obj: any, replace: any = ''): string {\r\n return (this.IsEmpty(obj) ? replace : obj);\r\n }\r\n\r\n public static ValEx(s: string): number {\r\n if (this.IsEmpty(s)) return 0;\r\n if (typeof s === 'number') return s;\r\n const num = s.replace(',', '').replace(' ', '');\r\n return +num;\r\n }\r\n\r\n //Computer checksum hash (not for cryptography)\r\n public static ComputeChecksum(value: string): string {\r\n let h1 = 0xdeadbeef ^ 0, h2 = 0x41c6ce57 ^ 0;\r\n for (let i = 0, ch; i < value.length; i++) {\r\n ch = value.charCodeAt(i);\r\n h1 = Math.imul(h1 ^ ch, 2654435761);\r\n h2 = Math.imul(h2 ^ ch, 1597334677);\r\n }\r\n h1 = Math.imul(h1 ^ h1 >>> 16, 2246822507) ^ Math.imul(h2 ^ h2 >>> 13, 3266489909);\r\n h2 = Math.imul(h2 ^ h2 >>> 16, 2246822507) ^ Math.imul(h1 ^ h1 >>> 13, 3266489909);\r\n return (h2 >>> 0).toString(16).padStart(8, '0') + (h1 >>> 0).toString(16).padStart(8, '0');\r\n }\r\n\r\n //Convert value to bool, considering undefined\r\n public static ToBoolean(value: boolean): boolean {\r\n if (value == undefined) return false;\r\n return value;\r\n }\r\n\r\n //Convert 64base encoded data into blob\r\n public static ConvertToBlob(oBase64Data: any, sContentType: string, bIsUseUint16: boolean = false): Blob {\r\n if (oBase64Data === undefined || oBase64Data === null) return undefined;\r\n const byteCharacters = atob(oBase64Data);\r\n const byteArrays = [];\r\n\r\n for (let offset = 0; offset < byteCharacters.length; offset += 512) {\r\n const slice = byteCharacters.slice(offset, offset + 512);\r\n const byteNumbers = new Array(slice.length);\r\n for (let i = 0; i < slice.length; i++) {\r\n byteNumbers[i] = slice.charCodeAt(i);\r\n }\r\n\r\n const byteArray = !bIsUseUint16 ? new Uint8Array(byteNumbers) : new Uint16Array(byteNumbers);\r\n byteArrays.push(byteArray);\r\n }\r\n\r\n return new Blob(byteArrays, { type: sContentType });\r\n }\r\n\r\n public static ConvertToBase64(bytesArray: number[]) {\r\n let binary = '';\r\n const bytes = new Uint8Array(bytesArray);\r\n const len = bytes.byteLength;\r\n for (let i = 0; i < len; i++) {\r\n binary += String.fromCharCode(bytes[i]);\r\n }\r\n return window.btoa(binary);\r\n }\r\n\r\n public static ConvertToBytesArray(base64Data: string) {\r\n if (base64Data === undefined || base64Data === null) return undefined;\r\n const data = base64Data.split(';');\r\n base64Data = data.length > 1 ? data[1].substring(data[1].indexOf(',') + 1) : base64Data;\r\n\r\n const binary_string = window.atob(base64Data);\r\n const len = binary_string.length;\r\n const bytes = new Uint8Array(len);\r\n for (let i = 0; i < len; i++) {\r\n bytes[i] = binary_string.charCodeAt(i);\r\n }\r\n return Array.from(new Uint8Array(bytes.buffer));\r\n }\r\n\r\n public static ConvertStringToBase64(str: string) {\r\n const bytes = new TextEncoder().encode(str);\r\n const binString = Array.from(bytes, (byte: number) =>\r\n String.fromCodePoint(byte),\r\n ).join('');\r\n\r\n return window.btoa(binString);\r\n }\r\n\r\n public static GetImageSource(bytesArray: number[], mimeType: string): string {\r\n return `data:${mimeType};base64,${this.ConvertToBase64(bytesArray)}`;\r\n }\r\n\r\n public static GetImageSourceFromBase64(base64String: string, mimeType: string): string {\r\n return `data:${mimeType};base64,${base64String}`;\r\n }\r\n\r\n public static ExtractDataFromDataURL(DataURL: string): string {\r\n return DataURL.split(',')[1];\r\n }\r\n\r\n public static CombineChild(oItem1: T, oItem2: T): T {\r\n return oItem1 != undefined ? oItem1 : oItem2;\r\n }\r\n\r\n public static CombineChildren(list1: QueryList, list2: QueryList): T[] {\r\n let arr: T[] = [];\r\n if (list1 != undefined) arr = arr.concat(list1.toArray());\r\n if (list2 != undefined) arr = arr.concat(list2.toArray());\r\n return arr;\r\n }\r\n\r\n public static ConvertCSVToJSONArray(strData, sDelimited: string) {\r\n let data = [], i = 0, k = 0, header = [];\r\n\r\n\r\n // Create a regular expression to parse the CSV values.\r\n const objPattern = new RegExp(\r\n (\r\n // Delimiters.\r\n '(\\\\' + sDelimited + '|\\\\r?\\\\n|\\\\r|^)' +\r\n\r\n // Quoted fields.\r\n '(?:\"([^\"]*(?:\"\"[^\"]*)*)\"|' +\r\n\r\n // Standard fields.\r\n '([^\"\\\\' + sDelimited + '\\\\r\\\\n]*))'\r\n ),\r\n 'gi'\r\n );\r\n\r\n // Create an array to hold our data. Give the array\r\n // a default empty first row.\r\n let arrData = [[]];\r\n\r\n // Create an array to hold our individual pattern\r\n // matching groups.\r\n let arrMatches = null;\r\n\r\n\r\n // Keep looping over the regular expression matches\r\n // until we can no longer find a match.\r\n while (arrMatches = objPattern.exec(strData)) {\r\n\r\n // Get the delimiter that was found.\r\n const strMatchedDelimiter = arrMatches[1];\r\n\r\n // Check to see if the given delimiter has a length\r\n // (is not the start of string) and if it matches\r\n // field delimiter. If id does not, then we know\r\n // that this delimiter is a row delimiter.\r\n if (strMatchedDelimiter.length && (strMatchedDelimiter != sDelimited)) {\r\n // Since we have reached a new row of data,\r\n // add an empty row to our data array.\r\n arrData.push([]);\r\n }\r\n\r\n // Now that we have our delimiter out of the way,\r\n // let's check to see which kind of value we\r\n // captured (quoted or unquoted).\r\n if (arrMatches[2]) {\r\n // We found a quoted value. When we capture\r\n // this value, unescape any double quotes.\r\n var strMatchedValue = arrMatches[2].replace(new RegExp('\"\"', 'g'), '\"');\r\n\r\n } else {\r\n // We found a non-quoted value.\r\n var strMatchedValue = arrMatches[3];\r\n }\r\n\r\n // Now that we have our value string, let's add\r\n // it to the data array.\r\n arrData[arrData.length - 1].push(strMatchedValue);\r\n }\r\n\r\n\r\n //Filter out empty lines\r\n arrData = arrData.filter(x => !this.IsEmpty(x));\r\n\r\n //Rename headers\r\n for (i = 0; i < arrData.length; i++) {\r\n if (i == 0) {\r\n header = arrData[i];\r\n } else {\r\n const obj = {};\r\n for (k = 0; k < header.length; k++) {\r\n if (k < arrData[i].length) {\r\n obj[header[k]] = arrData[i][k];\r\n }\r\n }\r\n data.push(obj);\r\n }\r\n }\r\n return data;\r\n\r\n }\r\n\r\n public static ContainsHebrewLetters(str: any): boolean {\r\n const regex = new RegExp('[א-ת]+');\r\n return (regex.test(str));\r\n }\r\n\r\n public static ContainsEnglishOnly(str: any): boolean {\r\n const regex = new RegExp('[^a-zA-Z\\\\s]');\r\n return (!regex.test(str));\r\n }\r\n\r\n public static LoadFilesBody(files: File[], done: (uploads: UploadFile[]) => void) {\r\n const result: UploadFile[] = [];\r\n\r\n if (files && files.length) {\r\n const length = files.length;\r\n let count = 0;\r\n\r\n for (const file of files) {\r\n const fileReader = new FileReader();\r\n\r\n fileReader.onloadend = (e) => {\r\n count++;\r\n\r\n const buffer = fileReader.result as ArrayBuffer;\r\n const array = Array.from(new Uint8Array(buffer));\r\n\r\n result.push({\r\n Name: file.name,\r\n Type: file.type,\r\n Data: array,\r\n Buffer: buffer,\r\n File: file\r\n } as UploadFile);\r\n\r\n if (length === count) {\r\n done(result);\r\n }\r\n\r\n };\r\n fileReader.readAsArrayBuffer(file);\r\n }\r\n } else {\r\n done(result);\r\n }\r\n }\r\n\r\n public static DoFileDownload(file: AttachedFile | string, fileBlob: string, contentType: string, bIsUseUint16: boolean = false) {\r\n const blob = Utils.ConvertToBlob(fileBlob, contentType, bIsUseUint16);\r\n const objectUrl = URL.createObjectURL(blob);\r\n const fileName = typeof file === 'string' ? file : (file.Name + (file.Extension ? '.' + file.Extension : ''));\r\n this.DownloadFile(objectUrl, fileName);\r\n }\r\n\r\n public static DownloadFile(fileUrl: string, fileName: string) {\r\n const a = document.createElement('a');\r\n a.href = fileUrl;\r\n a.download = fileName;\r\n a.click();\r\n URL.revokeObjectURL(fileUrl);\r\n }\r\n\r\n // Compare not undefined/null objects\r\n public static IsEquals(obj1: {}, obj2: {}, ignoreEmptyProps: boolean = false) {\r\n if (obj1 === null || obj2 === null || !this.IsObject(obj1) || !this.IsObject(obj2)) return false;\r\n return this.StringifyObject(obj1, ignoreEmptyProps) === this.StringifyObject(obj2, ignoreEmptyProps);\r\n }\r\n\r\n public static ConvertBlobToImage(image: Blob, result: (image) => void) {\r\n const reader = new FileReader();\r\n reader.addEventListener('load', () => {\r\n result(reader.result);\r\n }, false);\r\n\r\n if (image && image.size !== 0) {\r\n reader.readAsDataURL(image);\r\n } else {\r\n result(null);\r\n }\r\n }\r\n\r\n public static ConvertBlobToBytesArray(file: Blob, result: (bytes) => void) {\r\n const reader = new FileReader();\r\n reader.addEventListener('load', () => {\r\n const arrayBuffer = (reader.result as ArrayBuffer);\r\n result(Array.from(new Uint8Array(arrayBuffer)));\r\n }, false);\r\n\r\n if (file && file.size !== 0) {\r\n reader.readAsArrayBuffer(file);\r\n } else {\r\n result(null);\r\n }\r\n }\r\n\r\n public static ConvertToBytesArrayObservable(file: Blob): Observable {\r\n const convertedBytesSubject = new Subject();\r\n const reader = new FileReader();\r\n reader.addEventListener('load', () => {\r\n const arrayBuffer = (reader.result as ArrayBuffer);\r\n convertedBytesSubject.next(Array.from(new Uint8Array(arrayBuffer)));\r\n }, false);\r\n\r\n if (file && file.size !== 0) {\r\n reader.readAsArrayBuffer(file);\r\n } else {\r\n convertedBytesSubject.next(undefined);\r\n }\r\n\r\n return convertedBytesSubject.asObservable().pipe(take(1));\r\n }\r\n\r\n public static UniqueBy(array: any[], mapFunc: Function = x => x) {\r\n return new Set(array.map(x => mapFunc(x)));\r\n }\r\n\r\n public static LoadJsonFile(path: string): T {\r\n const xmlhttp = new XMLHttpRequest();\r\n xmlhttp.open('GET', path, false);\r\n if (xmlhttp.overrideMimeType) {\r\n xmlhttp.overrideMimeType('application/json');\r\n }\r\n xmlhttp.send();\r\n const json = xmlhttp.status == 200 && !xmlhttp.responseText.startsWith('<') ? xmlhttp.responseText : null;\r\n return json ? JSON.parse(json) : null;\r\n }\r\n\r\n // current implementation doesn't allow to have routes with numbers inside\r\n //public static getClearURLFromRoute(event) {\r\n // const route = event.urlAfterRedirects.split('?')[0]\r\n // .replace(/[0-9]/g, '')\r\n // .replace(/\\/$/, '')\r\n // .replace('(', '')\r\n // .replace(')', '');\r\n // return route.substring(0, route.indexOf('_') - 1) + route.substring(route.lastIndexOf('_') + 1);\r\n //}\r\n\r\n public static ToCamelCase | readonly any[]>(input: T): T {\r\n return camelcaseKeys(input, { deep: true }) as T;\r\n }\r\n\r\n public static ParseJSONString(jsonString: string): any {\r\n return JSON.parse(jsonString, this.dateParser);\r\n }\r\n\r\n private static _reISO = /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*))(?:Z|(\\+|-)([\\d|:]*))?$/;\r\n private static _reMsAjax = /^\\/Date\\((d|-|.*)\\)[\\/|\\\\]$/;\r\n private static dateParser = (key, value) => {\r\n if (typeof value === 'string') {\r\n let a = Utils._reISO.exec(value);\r\n if (a)\r\n return new Date(value);\r\n a = Utils._reMsAjax.exec(value);\r\n if (a) {\r\n const b = a[1].split(/[-+,.]/);\r\n return new Date(b[0] ? +b[0] : 0 - +b[1]);\r\n }\r\n }\r\n return value;\r\n };\r\n\r\n public static StringifyObject(obj: any, ignoreEmptyProps: boolean = false) {\r\n const copyObj = { ...obj };\r\n\r\n //remove empty props\r\n if (ignoreEmptyProps) {\r\n for (const propName in copyObj) {\r\n if (copyObj[propName] === null || copyObj[propName] === undefined || copyObj[propName] === '') {\r\n delete copyObj[propName];\r\n }\r\n }\r\n }\r\n return JSON.stringify(copyObj);\r\n }\r\n\r\n public static DeepProxy(obj: any, subject: Subject = null) {\r\n const self = this;\r\n const mapStore = {};\r\n return new Proxy(obj, {\r\n get(target, property) {\r\n const value = target[property];\r\n // if this property has been proxied, just return\r\n if (mapStore[property] === true) return value;\r\n // if it's an non-proxied object, we return its proxy\r\n if (value && Utils.IsObject(value) && !(value instanceof Date) || Utils.IsArray(value)) {\r\n const proxyValue = mapStore[property] || self.DeepProxy(value, subject);\r\n mapStore[property] = proxyValue;\r\n return proxyValue;\r\n }\r\n // else we just take a mark\r\n mapStore[property] = true;\r\n return value;\r\n },\r\n set(target, property, value) {\r\n const newVal = (Utils.IsObject(value) && value && !(value instanceof Date) || Utils.IsArray(value))\r\n ? self.DeepProxy(value, subject)\r\n : value;\r\n target[property] = newVal;\r\n mapStore[property] = true;\r\n subject && subject.next();\r\n return true;\r\n },\r\n deleteProperty(target, property) {\r\n delete target[property];\r\n delete mapStore[property];\r\n subject && subject.next();\r\n return true;\r\n }\r\n });\r\n }\r\n\r\n public static IsArray(arr: any) {\r\n return Array.isArray(arr);\r\n }\r\n\r\n public static IsObject(obj: any) {\r\n return typeof obj === 'object';\r\n }\r\n\r\n public static IsEmail(email: string, isSupportMultiple: boolean = false) {\r\n if (!email || email.length === 0) {\r\n return false;\r\n }\r\n\r\n const validRegex = /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\r\n let emails = [];\r\n\r\n if (isSupportMultiple) {\r\n emails = email.split(';');\r\n } else {\r\n emails.push(email);\r\n }\r\n\r\n for (let i = 0; i < emails.length; i++) {\r\n if (!emails[i].match(validRegex)) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n public static GetIconStyle(extension: string) {\r\n if (extension) {\r\n switch (extension) {\r\n case '.pdf':\r\n return 'mdi mdi-file-pdf-box';\r\n case '.doc':\r\n case '.docx':\r\n return 'mdi mdi-file-word-box';\r\n case '.xls':\r\n case '.xlsx':\r\n return 'mdi mdi-file-excel-box';\r\n case '.rft':\r\n case '.txt':\r\n return 'mdi mdi-text-box';\r\n case '.zip':\r\n case '.rar':\r\n case '.gzip':\r\n return 'mdi mdi-zip-box';\r\n case '.htm':\r\n case '.html':\r\n return 'mdi mdi-language-html5';\r\n case '.jpg':\r\n case '.jpeg':\r\n return 'mdi mdi-file-jpg-box';\r\n case '.gif':\r\n return 'mdi mdi-file-gif-box';\r\n case '.bmp':\r\n case '.tiff':\r\n case '.png':\r\n return 'mdi mdi-file-png-box';\r\n case '.xml':\r\n return 'mdi mdi-file-xml-box';\r\n default:\r\n return 'mdi mdi-file';\r\n }\r\n }\r\n\r\n return 'mdi mdi-file';\r\n }\r\n\r\n public static Round(num: number) {\r\n return +(Math.round((num + 'e+2') as any) + 'e-2');\r\n }\r\n\r\n public static SearchTree(element: any, value: any, key = 'key') {\r\n if (!element) {\r\n return null;\r\n }\r\n if (element[key] == value) {\r\n return element;\r\n }\r\n if (element.items != null) {\r\n let result = null;\r\n for (let i = 0; result == null && i < element.items.length; i++) {\r\n result = Utils.SearchTree(element.items[i], value, key);\r\n }\r\n return result;\r\n }\r\n return null;\r\n }\r\n\r\n public static FilterTree = (childNodes: any[], property: string, value: any) => {\r\n const deepCloneArr = Utils.CloneObject(childNodes);\r\n return deepCloneArr.filter((object) => {\r\n\r\n const props = property.split(',');\r\n for (let i = 0; i < props.length; i++) {\r\n const prop = props[i];\r\n if (object[prop] && object[prop].toString().toLowerCase().includes(value?.toLowerCase())) {\r\n return true;\r\n }\r\n }\r\n\r\n if (object.items) {\r\n object.items = Utils.FilterTree(object.items, property, value);\r\n return object.items.length;\r\n }\r\n\r\n return false;\r\n });\r\n };\r\n\r\n public static IsIconExists(path: string): boolean {\r\n const xhr = new XMLHttpRequest();\r\n xhr.open('HEAD', path, false);\r\n xhr.send();\r\n\r\n const contentType = xhr.getResponseHeader('Content-Type');\r\n return xhr.readyState === 4 && xhr.status === 200 && (contentType.startsWith('image/png') || contentType.startsWith('image/svg'));\r\n }\r\n\r\n public static GroupBy(list: T[], keyGetter: (x: T) => K) {\r\n const map = new Map();\r\n list.forEach((item) => {\r\n const key = keyGetter(item);\r\n const collection = map.get(key);\r\n if (!collection) {\r\n map.set(key, [item]);\r\n } else {\r\n collection.push(item);\r\n }\r\n });\r\n return map;\r\n }\r\n\r\n public static ConvertBase64ToString(str: string) {\r\n if (!str) return str;\r\n return window.atob(str);\r\n }\r\n}\r\n","import { NgModule, Injector } from '@angular/core';\r\nimport { InjectorComponent } from './injector.component';\r\n\r\n@NgModule({\r\n declarations: [InjectorComponent],\r\n exports: [InjectorComponent]\r\n})\r\nexport class InjectorModule {\r\n constructor(_injector: Injector) {\r\n AppInjector = _injector;\r\n }\r\n}\r\n\r\nexport let AppInjector: Injector;\r\n","import { Component } from \"@angular/core\";\r\n\r\n\r\n@Component({\r\n selector: 'm4u-injector',\r\n template: ''\r\n})\r\nexport class InjectorComponent {\r\n}","export enum EnumDemoMobilePhoneColor\r\n{\r\n White = \"White\",\r\n Black = \"Black\",\r\n AlpineGreen = \"AlpineGreen\",\r\n MidnightGray = \"MidnightGray\"\r\n}","export const environment = {\r\n production: true,\r\n version: '1.0.0'\r\n};\r\n","import { trigger, state, style, transition, animate } from '@angular/animations';\r\n\r\nexport const ColorInOutAnimation = trigger('colorInOut', [\r\n state('In', style( {\r\n 'background-color': '#8bb389'\r\n })),\r\n state('Out', style({\r\n 'background-color': 'transparent'\r\n })),\r\n transition('In => Out', animate('1000ms ease-in-out'))\r\n]);","import { EnumToggle } from '@core/framework/sysenums.enum';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { BaseState, SystemOptionEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ColorInOutAnimation } from '@m4u-angular/ui/animations/colorinout.animation';\r\n\r\nclass State extends BaseState {\r\n Sections: any[] = [];\r\n InOut: EnumToggle = EnumToggle.Out;\r\n\r\n CurrentOption: SystemOptionEntity;\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-system-options-list',\r\n templateUrl: './system-options-list.component.html',\r\n styleUrls: ['./system-options-list.component.scss'],\r\n animations: [ColorInOutAnimation]\r\n})\r\nexport class SystemOptionsListComponent extends BaseComponent {\r\n\r\n @Input() set DataSource(value: SystemOptionEntity[]) {\r\n this.State.Sections = [];\r\n\r\n if (!value) { return; }\r\n\r\n this.CreateSections(value);\r\n }\r\n @Input() ModulesDataSource: any[];\r\n @Input() IsGeneral = false;\r\n\r\n @Output() DeleteOption: EventEmitter = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'SystemOptionsListComponent', State);\r\n }\r\n\r\n GetElementID(option: SystemOptionEntity) {\r\n let id = option.OptionName;\r\n\r\n if (option.ModuleName) { id = `${id}_${option.ModuleName}`; }\r\n\r\n return id;\r\n }\r\n\r\n GetColorInOut(option: SystemOptionEntity) {\r\n if (!this.State.CurrentOption) { return EnumToggle.Out; }\r\n\r\n if (this.State.CurrentOption.OptionName === option.OptionName && this.State.CurrentOption.ModuleName === option.ModuleName) {\r\n return this.State.InOut;\r\n }\r\n\r\n return EnumToggle.Out;\r\n }\r\n\r\n ShowOption(option: SystemOptionEntity) {\r\n this.State.CurrentOption = option;\r\n\r\n setTimeout(() => {\r\n const element = document.getElementById(this.GetElementID(option));\r\n\r\n if (element) {\r\n element.scrollIntoView({ behavior: 'smooth', block: 'center' });\r\n const inputs = element.getElementsByTagName('input');\r\n\r\n if (inputs.length > 0 && inputs[0].attributes['type'] !== 'hidden') {\r\n inputs[0].focus();\r\n }\r\n\r\n this.State.InOut = EnumToggle.In;\r\n\r\n setTimeout(() => { this.State.InOut = EnumToggle.Out; });\r\n }\r\n });\r\n\r\n }\r\n\r\n OnDeleteOption(option: SystemOptionEntity) {\r\n this.DeleteOption.emit(option);\r\n }\r\n\r\n private CreateSections(options: SystemOptionEntity[]) {\r\n let section;\r\n\r\n for (let i = 0; i < options.length; i++) {\r\n section = this.State.Sections.find(x => x.name === options[i].SectionInfo);\r\n\r\n if (section == null) {\r\n section = {\r\n name: options[i].SectionInfo,\r\n index: options[i].SectionIndex,\r\n label: this.IsGeneral ? this.RC('lbl' + options[i].SectionInfo) : options[i].SectionInfo,\r\n options: []\r\n };\r\n\r\n this.State.Sections.push(section);\r\n }\r\n\r\n section.options.push(options[i]);\r\n }\r\n\r\n for (let i = 0; i < this.State.Sections.length; i++) {\r\n this.State.Sections[i].options = this.State.Sections[i].options.sort((a, b) => {\r\n if (a.OptionName > b.OptionName) { return 1; }\r\n if (a.OptionName < b.OptionName) { return -1; }\r\n return 0;\r\n });\r\n }\r\n\r\n this.State.Sections = this.State.Sections.sort((a, b) => a.index - b.index);\r\n }\r\n\r\n}\r\n","export default \"\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n\";","import { SystemOptionEntity } from '@base/entities/BaseEntities';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { Component, Input } from '@angular/core';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\nclass State extends BaseState {\r\n SectionName: string;\r\n OptionName: string;\r\n Value: string;\r\n IsServer = true;\r\n IsClient = true;\r\n ModuleName: string = null;\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-add-system-option-dialog',\r\n templateUrl: './add-system-option-dialog.component.html',\r\n styleUrls: ['./add-system-option-dialog.component.scss']\r\n})\r\nexport class AddSystemOptionDialogComponent extends BasePageComponent {\r\n\r\n @Input() ModulesDataSource: any[];\r\n @Input() IsGeneral = false;\r\n @Input() CustomSections: string[];\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'AddSystemOptionDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog);\r\n }\r\n\r\n IsValidModuleName = () => {\r\n if (this.ModulesDataSource.find(x => x.Value === this.State.ModuleName)) { return true; }\r\n\r\n return false;\r\n }\r\n\r\n OnAddOption() {\r\n const option = new SystemOptionEntity();\r\n option.OptionName = this.State.OptionName;\r\n option.ModuleName = this.State.ModuleName;\r\n option.Value = this.State.Value;\r\n option.IsServer = this.State.IsServer;\r\n option.IsClient = this.State.IsClient;\r\n option.SectionInfo = this.State.SectionName;\r\n\r\n this.CloseDialogWithSuccess(option);\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { BaseState, SystemOptionEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { Component, Input, Output, EventEmitter } from '@angular/core';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-system-option',\r\n templateUrl: './system-option.component.html',\r\n styleUrls: ['./system-option.component.scss']\r\n})\r\nexport class SystemOptionComponent extends BaseComponent {\r\n\r\n @Input() Option: SystemOptionEntity;\r\n @Input() ModulesDataSource: any[];\r\n @Input() IsGeneral = false;\r\n\r\n @Output() DeleteOption: EventEmitter = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'SystemOptionComponent', BaseState);\r\n }\r\n\r\n OnDelete() {\r\n this.DeleteOption.emit();\r\n }\r\n}\r\n","export default \"
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\";","import { 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 {{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 { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { BaseEntity, BaseState, SystemOptionEntity } from '@base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { Component, ViewChild } from '@angular/core';\r\nimport { AppConfigService } from '@m4u-angular/configuration/app.config.service';\r\nimport { EnumMessageBoxTypes, EnumSystemOptionDataTypes, EnumSystemOptions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { AddSystemOptionDialogComponent } from './Components/add-system-option-dialog/add-system-option-dialog.component';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { SystemOptionsListComponent } from './Components/system-options-list/system-options-list.component';\r\nimport { MessageBoxDialogComponent } from '@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\n\r\nclass State extends BaseState {\r\n GeneralOptions: SystemOptionEntity[];\r\n CustomOptions: SystemOptionEntity[];\r\n\r\n ModulesDataSource: any[];\r\n CurrentTabIndex: number = 0;\r\n Tabs: any[] = [];\r\n CustomSections: string[] = [];\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-system-options',\r\n templateUrl: './system-options.component.html',\r\n styleUrls: ['./system-options.component.scss']\r\n})\r\nexport class SystemOptionsComponent extends BasePageComponent {\r\n private GeneralOptionSettings = {\r\n [EnumSystemOptions.AppNameHE]: { DataType: EnumSystemOptionDataTypes.String, SectionName: 'General', SectionIndex: 0, DefaultIsClient: true },\r\n [EnumSystemOptions.AppNameEN]: { DataType: EnumSystemOptionDataTypes.String, SectionName: 'General', SectionIndex: 0, DefaultIsClient: true },\r\n [EnumSystemOptions.AppURL]: { DataType: EnumSystemOptionDataTypes.String, SectionName: 'General', SectionIndex: 0, DefaultIsClient: true },\r\n\r\n [EnumSystemOptions.SessionTimeout]: { DataType: EnumSystemOptionDataTypes.Number, SectionName: 'Framework', SectionIndex: 1, DefaultIsClient: true },\r\n [EnumSystemOptions.SessionExpiry]: { DataType: EnumSystemOptionDataTypes.Number, SectionName: 'Framework', SectionIndex: 1, DefaultIsClient: true },\r\n [EnumSystemOptions.EnableRequestLogging]: { DataType: EnumSystemOptionDataTypes.Boolean, SectionName: 'Framework', SectionIndex: 1, DefaultIsClient: false },\r\n [EnumSystemOptions.EnableRemoteLogging]: { DataType: EnumSystemOptionDataTypes.Boolean, SectionName: 'Framework', SectionIndex: 1, DefaultIsClient: false },\r\n [EnumSystemOptions.ShowExpiredTimeoutAlert]: { DataType: EnumSystemOptionDataTypes.Boolean, SectionName: 'Framework', SectionIndex: 1, DefaultIsClient: true },\r\n [EnumSystemOptions.ShowAlmostExpiredTimeoutAlert]: { DataType: EnumSystemOptionDataTypes.Boolean, SectionName: 'Framework', SectionIndex: 1, DefaultIsClient: true },\r\n\r\n [EnumSystemOptions.IsSupportedCredentialsManagement]: { DataType: EnumSystemOptionDataTypes.Boolean, SectionName: 'Login', SectionIndex: 2, DefaultIsClient: false },\r\n [EnumSystemOptions.IsSupportedUserWelcome]: { DataType: EnumSystemOptionDataTypes.Boolean, SectionName: 'Login', SectionIndex: 2, DefaultIsClient: true },\r\n [EnumSystemOptions.IsSupportedPasswordChange]: { DataType: EnumSystemOptionDataTypes.Boolean, SectionName: 'Login', SectionIndex: 2, DefaultIsClient: true },\r\n [EnumSystemOptions.IsSupportedPasswordRecovery]: { DataType: EnumSystemOptionDataTypes.Boolean, SectionName: 'Login', SectionIndex: 2, DefaultIsClient: true },\r\n [EnumSystemOptions.IsSupportedLoginByOTP]: { DataType: EnumSystemOptionDataTypes.Boolean, SectionName: 'Login', SectionIndex: 2, DefaultIsClient: true },\r\n [EnumSystemOptions.IsSupportedLoginByPassword]: { DataType: EnumSystemOptionDataTypes.Boolean, SectionName: 'Login', SectionIndex: 2, DefaultIsClient: true },\r\n [EnumSystemOptions.IsAutoCreateCredentials]: { DataType: EnumSystemOptionDataTypes.Boolean, SectionName: 'Login', SectionIndex: 2, DefaultIsClient: false },\r\n [EnumSystemOptions.AutoCreateCredentialsType]: { DataType: EnumSystemOptionDataTypes.Boolean, SectionName: 'Login', SectionIndex: 2, DefaultIsClient: true },\r\n [EnumSystemOptions.IsRequireTaxNumberForOTP]: { DataType: EnumSystemOptionDataTypes.Boolean, SectionName: 'Login', SectionIndex: 2, DefaultIsClient: true },\r\n\r\n [EnumSystemOptions.PasswordChangeIntervalDays]: { DataType: EnumSystemOptionDataTypes.Number, SectionName: 'Password', SectionIndex: 3, DefaultIsClient: true },\r\n [EnumSystemOptions.PasswordComplexityLen]: { DataType: EnumSystemOptionDataTypes.Number, SectionName: 'Password', SectionIndex: 3, DefaultIsClient: true },\r\n [EnumSystemOptions.PasswordComplexityMinChars]: { DataType: EnumSystemOptionDataTypes.Number, SectionName: 'Password', SectionIndex: 3, DefaultIsClient: true },\r\n [EnumSystemOptions.PasswordComplexityMinDigits]: { DataType: EnumSystemOptionDataTypes.Number, SectionName: 'Password', SectionIndex: 3, DefaultIsClient: true },\r\n\r\n [EnumSystemOptions.BadLoginAttemptBeforeLock]: { DataType: EnumSystemOptionDataTypes.Number, SectionName: 'BadLogin', SectionIndex: 4, DefaultIsClient: false },\r\n [EnumSystemOptions.BadLoginAttemptsCheckIntervalMinutes]: { DataType: EnumSystemOptionDataTypes.Number, SectionName: 'BadLogin', SectionIndex: 4, DefaultIsClient: false },\r\n [EnumSystemOptions.BadLoginAttemptLockouIntervalMinutes]: { DataType: EnumSystemOptionDataTypes.Number, SectionName: 'BadLogin', SectionIndex: 4, DefaultIsClient: false },\r\n\r\n [EnumSystemOptions.XFrameOptions]: { DataType: EnumSystemOptionDataTypes.String, SectionName: 'Framework', SectionIndex: 1, DefaultIsClient: false },\r\n [EnumSystemOptions.IsDeployedBehindLoadBalancer]: { DataType: EnumSystemOptionDataTypes.Boolean, SectionName: 'Framework', SectionIndex: 1, DefaultIsClient: false },\r\n [EnumSystemOptions.IsSupportNotificationMethodEmail]: { DataType: EnumSystemOptionDataTypes.Boolean, SectionName: 'Framework', SectionIndex: 1, DefaultIsClient: true },\r\n [EnumSystemOptions.IsSupportNotificationMethodSMS]: { DataType: EnumSystemOptionDataTypes.Boolean, SectionName: 'Framework', SectionIndex: 1, DefaultIsClient: true },\r\n [EnumSystemOptions.IsSupportNotificationMethodWhatsApp]: { DataType: EnumSystemOptionDataTypes.Boolean, SectionName: 'Framework', SectionIndex: 1, DefaultIsClient: true },\r\n\r\n [EnumSystemOptions.RetentionPeriodRequests]: { DataType: EnumSystemOptionDataTypes.Number, SectionName: 'Framework', SectionIndex: 1, DefaultIsClient: false },\r\n [EnumSystemOptions.RetentionPeriodRemoteRequests]: { DataType: EnumSystemOptionDataTypes.Number, SectionName: 'Framework', SectionIndex: 1, DefaultIsClient: false },\r\n [EnumSystemOptions.RetentionPeriodNotifications]: { DataType: EnumSystemOptionDataTypes.Number, SectionName: 'Framework', SectionIndex: 1, DefaultIsClient: false },\r\n [EnumSystemOptions.RetentionPeriodSessions]: { DataType: EnumSystemOptionDataTypes.Number, SectionName: 'Framework', SectionIndex: 1, DefaultIsClient: false },\r\n };\r\n\r\n @ViewChild(AddSystemOptionDialogComponent) addGeneralOptionDialog: AddSystemOptionDialogComponent;\r\n @ViewChild(SystemOptionsListComponent) systemOptionsList: SystemOptionsListComponent;\r\n @ViewChild(MessageBoxDialogComponent) messageDialog: MessageBoxDialogComponent;\r\n\r\n constructor(A: ServiceBagService, private appConfigService: AppConfigService) {\r\n super(A, 'SystemOptionsComponent', BaseEntity, State);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.InitTabs();\r\n this.InitModulesDataSource();\r\n this.InitSystemOptions();\r\n }\r\n\r\n OnClickAdd() {\r\n this.addGeneralOptionDialog.ShowDialogShort((option: SystemOptionEntity) => {\r\n\r\n if (this.State.CurrentTabIndex === 0) {\r\n this.AddGeneralOption(option);\r\n } else {\r\n this.AddCustomOption(option);\r\n }\r\n\r\n this.systemOptionsList.ShowOption(option);\r\n });\r\n }\r\n\r\n OnSaveOptions() {\r\n for (let i = 0; i < this.State.GeneralOptions.length; i++) {\r\n if (this.State.GeneralOptions[i].DataType === EnumSystemOptionDataTypes.Boolean) {\r\n this.State.GeneralOptions[i].Value = this.State.GeneralOptions[i].ValueBoolean ? '1' : '0';\r\n } else if (this.State.GeneralOptions[i].DataType === EnumSystemOptionDataTypes.Number) {\r\n this.State.GeneralOptions[i].Value = this.State.GeneralOptions[i].ValueNumber.toString();\r\n }\r\n\r\n if (Utils.IsEmpty(this.State.GeneralOptions[i].Value)) {\r\n this.State.CurrentTabIndex = 0;\r\n setTimeout(() => {\r\n this.systemOptionsList.ShowOption(this.State.GeneralOptions[i]);\r\n this.UI.StopMessage(this.RC('msgOptionEmpty').replace('{0}', this.State.GeneralOptions[i].OptionName));\r\n });\r\n\r\n return;\r\n }\r\n }\r\n\r\n for (let i = 0; i < this.State.CustomOptions.length; i++) {\r\n if (Utils.IsEmpty(this.State.CustomOptions[i].Value)) {\r\n setTimeout(() => {\r\n this.State.CurrentTabIndex = 1;\r\n this.systemOptionsList.ShowOption(this.State.CustomOptions[i]);\r\n this.UI.StopMessage(this.RC('msgOptionEmpty').replace('{0}', this.State.GeneralOptions[i].OptionName));\r\n });\r\n\r\n return;\r\n }\r\n }\r\n\r\n this.Do(this.A.Framework.systemOptionsEndpoint.SaveOptions(this.State.GeneralOptions.concat(this.State.CustomOptions)), true, (response) => {\r\n window.location.reload();\r\n });\r\n }\r\n\r\n OnDeleteOption(option: SystemOptionEntity) {\r\n this.messageDialog.Type = EnumMessageBoxTypes.YesNo;\r\n\r\n this.messageDialog.ShowDialogShort(() => {\r\n option.IsDeleted = true;\r\n });\r\n\r\n this.messageDialog.Title = this.RC('titleDelete');\r\n this.messageDialog.Prompt = this.RC('msgRemoveOption').replace('{0}', option.OptionName);\r\n }\r\n\r\n private InitSystemOptions() {\r\n this.Do(this.A.Framework.systemOptionsEndpoint.GetOptions(), false, (response) => {\r\n this.State.GeneralOptions = [];\r\n this.State.CustomOptions = [];\r\n\r\n let settings;\r\n\r\n response.Entities.forEach((x) => {\r\n x.ModuleName = x.ModuleName ? x.ModuleName : null;\r\n\r\n settings = this.GeneralOptionSettings[x.OptionName];\r\n\r\n if (!settings) {\r\n this.State.CustomOptions.push(x);\r\n\r\n if (this.State.CustomSections.indexOf(x.SectionInfo) < 0) {\r\n this.State.CustomSections.push(x.SectionInfo);\r\n }\r\n } else {\r\n x.SectionInfo = settings.SectionName;\r\n x.SectionIndex = settings.SectionIndex;\r\n x.DataType = settings.DataType;\r\n x.DefaultIsClient = settings.DefaultIsClient;\r\n\r\n if (settings.DataType === EnumSystemOptionDataTypes.Number) {\r\n x.ValueNumber = parseInt(x.Value, 10);\r\n } else if (settings.DataType === EnumSystemOptionDataTypes.Boolean) {\r\n x.ValueBoolean = x.Value === '1' ? true : false;\r\n }\r\n\r\n this.State.GeneralOptions.push(x);\r\n }\r\n\r\n });\r\n });\r\n }\r\n\r\n private InitModulesDataSource() {\r\n const modules = this.appConfigService.AppConfig.ModuleName.split(',');\r\n\r\n // Add first empty item\r\n this.State.ModulesDataSource = [];\r\n this.State.ModulesDataSource.push({\r\n Text: 'All',\r\n Value: undefined\r\n });\r\n\r\n for (let i = 0; i < modules.length; i++) {\r\n this.State.ModulesDataSource.push({\r\n Text: modules[i],\r\n Value: modules[i]\r\n });\r\n }\r\n }\r\n\r\n private InitTabs() {\r\n this.State.Tabs = [\r\n {\r\n index: 0,\r\n text: this.RC('lblGeneral')\r\n }, {\r\n index: 1,\r\n text: this.RC('lblCustom')\r\n }\r\n ];\r\n }\r\n\r\n private AddGeneralOption(option: SystemOptionEntity) {\r\n if (this.State.GeneralOptions.find(x => x.OptionName === option.OptionName && x.ModuleName === option.ModuleName)) {\r\n this.UI.UnexpectedMessage(this.RC('msgOptionAlreadyExists'));\r\n } else {\r\n const settings = this.GeneralOptionSettings[option.OptionName];\r\n\r\n option.IsClient = settings.DefaultIsClient;\r\n option.DataType = settings.DataType;\r\n option.SectionInfo = settings.SectionName;\r\n option.SectionIndex = settings.SectionIndex;\r\n\r\n if (option.DataType === EnumSystemOptionDataTypes.Boolean) {\r\n option.ValueBoolean = false;\r\n } else if (option.DataType === EnumSystemOptionDataTypes.Number) {\r\n option.ValueNumber = 0;\r\n }\r\n\r\n const options = Utils.CloneObject(this.State.GeneralOptions);\r\n options.push(option);\r\n\r\n this.State.GeneralOptions = options;\r\n }\r\n }\r\n\r\n private AddCustomOption(option: SystemOptionEntity) {\r\n if (this.State.CustomOptions.find(x => x.OptionName === option.OptionName && x.ModuleName === option.ModuleName)) {\r\n this.UI.UnexpectedMessage(this.RC('msgOptionAlreadyExists'));\r\n } else {\r\n\r\n option.IsClient = true;\r\n option.IsServer = true;\r\n\r\n const options = Utils.CloneObject(this.State.CustomOptions);\r\n options.push(option);\r\n\r\n this.State.CustomOptions = options;\r\n\r\n if (this.State.CustomSections.indexOf(option.SectionInfo) < 0) {\r\n this.State.CustomSections.push(option.SectionInfo);\r\n }\r\n }\r\n }\r\n}\r\n\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\";","import { DxTextBoxComponent, DxTooltipComponent } from 'devextreme-angular';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { BaseComponent } from '@base/component/BaseComponent';\r\nimport { Component, Input, ViewChild } from '@angular/core';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumSystemOptions } from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\nclass State extends BaseState{\r\n IsShowPasswordTooltip: boolean;\r\n PasswordComplexityLen: number;\r\n PasswordComplexityMinChars: number;\r\n PasswordComplexityMinDigits: number;\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-password-tooltip',\r\n templateUrl: './password-tooltip.component.html',\r\n styleUrls: ['./password-tooltip.component.scss']\r\n})\r\nexport class PasswordTooltipComponent extends BaseComponent {\r\n\r\n @Input() TextBox: DxTextBoxComponent;\r\n @ViewChild(DxTooltipComponent) tooltip: DxTooltipComponent;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'PasswordTooltipComponent', State);\r\n }\r\n\r\n override OnInitState() {\r\n this.State.PasswordComplexityLen = +this.SystemOption(EnumSystemOptions.PasswordComplexityLen);\r\n this.State.PasswordComplexityMinChars = +this.SystemOption(EnumSystemOptions.PasswordComplexityMinChars);\r\n this.State.PasswordComplexityMinDigits = +this.SystemOption(EnumSystemOptions.PasswordComplexityMinDigits);\r\n }\r\n\r\n override OnInitComponent(){\r\n if(!this.TextBox) return;\r\n\r\n if (!this.TextBox.buttons) { this.TextBox.buttons = []; }\r\n this.TextBox.buttons.push({\r\n location: 'after',\r\n name: 'showTooltip',\r\n options: {\r\n elementAttr: { class: 'btn-size-small password-view-btn', style: 'margin:0;' },\r\n icon: 'mdi mdi-information-outline', \r\n type: 'normal', \r\n onClick: this.OnShowPasswordTooltip\r\n }\r\n });\r\n }\r\n\r\n OnShowPasswordTooltip = () => {\r\n this.State.IsShowPasswordTooltip = !this.State.IsShowPasswordTooltip;\r\n }\r\n}\r\n","export default \"\\r\\n
{{ ('msgPasswordComplexityRequirement' | RC).replace('{0}', State.PasswordComplexityLen)\\r\\n .replace('{1}', State.PasswordComplexityMinDigits)\\r\\n .replace('{2}', State.PasswordComplexityMinChars)}}
\\r\\n
\\r\\n\";","import { Component } from \"@angular/core\";\r\nimport { BaseEntity, BaseState } from \"../entities/BaseEntities\";\r\nimport { BasePageComponent } from \"./BasePageComponent\";\r\nimport { ServiceBagService } from \"./ServiceBag\";\r\n\r\n@Component({ selector: 'app-null', template:'
NULL COMPONENT
NULL COMPONENT' })\r\nexport class NullComponent extends BasePageComponent\r\n{\r\n constructor(A: ServiceBagService) \r\n {\r\n super(A, 'NullComponent', BaseEntity, BaseState);\r\n }\r\n}\r\n","import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy, ViewChild, ElementRef } from '@angular/core';\r\nimport { BaseComponent } from '@base/component/BaseComponent';\r\nimport { BaseEntity } from '@base/entities/BaseEntities';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { SlideInOutAnimation } from '../../../animations/slideinout.animation';\r\nimport { EnumCardMode, EnumToggle } from '@core/framework/sysenums.enum';\r\nimport { ContextMenuElement } from '@base/classes/BaseClasses';\r\nimport { BottomSheetContextMenuParams, BottomSheetService } from '@m4u-angular/core/framework/bottom-sheet.service';\r\n\r\nclass CardState {\r\n IsOpened: boolean;\r\n Toggle: EnumToggle = EnumToggle.Out;\r\n}\r\n\r\n\r\n\r\n/**\r\n * If you want use several modes please specify Input field 'modes'\r\n * \r\n * content \r\n * expand content \r\n * edit content \r\n * \r\n */\r\n@Component({\r\n providers: [ServiceBagServices],\r\n selector: 'm4u-card',\r\n templateUrl: './card.component.html',\r\n styleUrls: ['./card.component.scss']\r\n})\r\nexport class M4UCardComponent extends BaseComponent {\r\n\r\n @Input() Menu: ContextMenuElement[];\r\n @Input() Class: string;\r\n @Input() Title: string;\r\n @Input() ShowAsUsualOnMobile: boolean;\r\n \r\n\r\n @Output() OnClick: EventEmitter = new EventEmitter();\r\n\r\n @ViewChild('expandedCard') expandedCard: ElementRef;\r\n get ExpandedCardHeight() {\r\n return this.expandedCard?.nativeElement?.children[0]?.getBoundingClientRect()?.height; \r\n }\r\n\r\n constructor(A: ServiceBagService,\r\n private bottomSheetService: BottomSheetService) {\r\n super(A, 'M4UCardComponent', CardState);\r\n }\r\n\r\n OnCardClick() {\r\n this.OnClick.emit();\r\n }\r\n\r\n // Show one icon if only one visible element\r\n get SingleVisibleElement(): ContextMenuElement {\r\n const visibleMenus = this.Menu.filter(f => f.visible == true || f.visible == undefined);\r\n if (visibleMenus.length === 1) return visibleMenus[0];\r\n return undefined;\r\n }\r\n\r\n ToggleCardState() {\r\n this.State.IsOpened = !this.State.IsOpened;\r\n }\r\n\r\n GetFooterButtonText(): string {\r\n return this.State.IsOpened ? this.RC('lblMinimize') : this.RC('lblShowMore');\r\n }\r\n\r\n HasContent(content: any) {\r\n return content && content.childElementCount > 0;\r\n }\r\n\r\n OnShowContextMenu(event, cm) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (this.A.Screen.IsMobile() && !this.ShowAsUsualOnMobile) {\r\n const title = this.Title || this.RC('titleChooseOption');\r\n const menuParams = new BottomSheetContextMenuParams();\r\n menuParams.Title = title;\r\n menuParams.Items = this.Menu;\r\n this.bottomSheetService.ShowContextMenu(menuParams);\r\n return;\r\n }\r\n\r\n cm.show(event);\r\n return false;\r\n }\r\n}\r\n","export default \"\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n {{Title}}\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n 1 && !SingleVisibleElement\\\">\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\";","import { Component, HostListener, Output, EventEmitter, Input } from '@angular/core';\r\n\r\n@Component({\r\n\r\n selector: 'm4u-link',\r\n templateUrl: './link.component.html',\r\n styleUrls: ['./link.component.scss'],\r\n})\r\nexport class M4ULinkComponent {\r\n @Input() href: string;\r\n @Input() Type: 'success' | 'danger' | 'normal' | 'default' = 'default';\r\n @Input() Disabled: boolean;\r\n @Input() Icon: string;\r\n @Input() Class: string;\r\n @Output() onClick = new EventEmitter();\r\n\r\n @HostListener(\"click\", [\"$event\"])\r\n public OnClickHandler(event: any) {\r\n event.stopPropagation();\r\n if (this.Disabled) { return };\r\n this.onClick.emit();\r\n }\r\n\r\n GetClass() {\r\n return (this.Class || '') + (this.Type ? (' m4u-link-' + this.Type) : '');\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\";","import { trigger, state, style, transition, animate } from '@angular/animations';\r\n\r\nexport const SlideInOutAnimation = trigger('slideInOut', [\r\n state('In', style({\r\n overflow: 'hidden',\r\n height: '*',\r\n })),\r\n state('Out', style({\r\n opacity: '0',\r\n overflow: 'hidden',\r\n height: '0px',\r\n })),\r\n transition('In => Out', animate('300ms ease-in-out')),\r\n transition('Out => In', animate('300ms ease-in-out'))\r\n])\r\n\r\n","import { Component, Input } from \"@angular/core\";\r\nimport { BaseComponent } from \"@base/component/BaseComponent\";\r\nimport { BaseState } from \"@base/entities/BaseEntities\";\r\nimport { ServiceBagService } from \"@base/component/ServiceBag\";\r\nimport { SlideInOutAnimation } from \"../../../animations/slideinout.animation\";\r\nimport { Utils } from \"@core/helpers/Utils\";\r\nimport { DataGroupInfoHeader } from \"@base/classes/BaseClasses\";\r\n\r\n@Component({\r\n selector: 'm4u-collapsiblegroup',\r\n templateUrl: './collapsiblegroup.component.html',\r\n styleUrls: ['./collapsiblegroup.component.scss'],\r\n animations: [SlideInOutAnimation]\r\n})\r\nexport class CollapsibleGroupComponent extends BaseComponent\r\n{\r\n @Input() Group: DataGroupInfoHeader;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, \"CollapsibleGroupComponent\", BaseState);\r\n }\r\n\r\n get GroupName(): string {\r\n return Utils.IsEmpty(this.Group.Name) ? this.RC('lblNotAssigned') : this.Group.Name;\r\n }\r\n}\r\n","export default \"
\\r\\n
\\r\\n {{ GroupName }} ({{ Group.TotalRows }})\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\";","import { Component, Input } from '@angular/core';\r\nimport { NavigatorService } from '@m4u-angular/core/framework/navigator.service';\r\nimport { EnumGridModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { DxDataGridComponent } from 'devextreme-angular';\r\n\r\n@Component({\r\n selector: 'm4u-gridbuttonadd',\r\n templateUrl: './gridbuttonadd.component.html',\r\n styleUrls: ['./gridbuttonadd.component.scss']\r\n})\r\nexport class GridButtonAddComponent {\r\n @Input() Text: string;\r\n @Input() Type: string;\r\n\r\n @Input() WindowPath: string;\r\n @Input() WindowParams: any;\r\n \r\n constructor(private navigator: NavigatorService) { }\r\n\r\n @Input() public grid: DxDataGridComponent;\r\n get gridAny(): any { return this.grid; }\r\n\r\n get IsGridEditable() {\r\n return this.gridAny && this.gridAny.G && this.gridAny.G.Mode === EnumGridModes.Editable;\r\n }\r\n\r\n get IsDisabled() {\r\n return this.IsGridEditable && !this.gridAny.G.IsNewRowCreatable();\r\n }\r\n\r\n OnClick() {\r\n this.IsGridEditable\r\n ? this.gridAny.G.CreateNewRow()\r\n : this.navigator.Navigate([this.WindowPath], this.WindowParams);\r\n }\r\n}","export default \"\\r\\n\\r\\n\";","import { Component, Input } from '@angular/core';\r\nimport { DxDataGridComponent } from 'devextreme-angular';\r\n\r\n@Component({\r\n selector: 'm4u-gridbuttonremove',\r\n templateUrl: './gridbuttonremove.component.html',\r\n styleUrls: ['./gridbuttonremove.component.scss']\r\n})\r\nexport class GridButtonRemoveComponent \r\n{\r\n constructor() { }\r\n\r\n @Input() public grid: DxDataGridComponent;\r\n get gridAny(): any { return this.grid; }\r\n @Input() public item: any;\r\n\r\n}\r\n","export default \"
\\r\\n \\r\\n
\";","import { Component, 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 \\r\\n \\r\\n \\r\\n \\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, ViewChild, ElementRef } from '@angular/core';\r\nimport { BaseEntity, Media } from '@base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { EnumPageDisplayModes, EnumPageEntitySources } from '@core/framework/sysenums.enum';\r\nimport { DxTileViewComponent, DxValidationGroupComponent } from 'devextreme-angular';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { Utils } from '@core/helpers/Utils';\r\nimport { TemplateRef } from '@angular/core';\r\n\r\nclass State {\r\n VideoWidth: number;\r\n VideoHeight: number;\r\n PreviewWidth: number;\r\n PreviewHeight: number;\r\n VideoAspectRatio: number;\r\n\r\n IsPreview: boolean;\r\n PreviewMediaItem: Media;\r\n\r\n VideoStream: MediaStream;\r\n\r\n IsVideoMode: boolean = false;\r\n Recording: Recording = new Recording;\r\n IsOpened = false;\r\n IsCameraStarted = false;\r\n CanUseCamera: boolean = true;\r\n}\r\n\r\nclass Recording {\r\n IsVideoRecording: boolean = false;\r\n MediaRecorder: MediaRecorder = null;\r\n RecordTimeSeconds: number = 0;\r\n RecordTimeString: string;\r\n RecordInterval: any;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-photoboxdialog',\r\n templateUrl: './photoboxdialog.component.html',\r\n styleUrls: ['./photoboxdialog.component.scss']\r\n})\r\nexport class PhotoBoxDialogComponent extends BasePageComponent\r\n{\r\n private _mediaItems: Media[] = [];\r\n private _imageMimeType: string = \"image/jpeg\";\r\n\r\n @Input() set MediaItems(value) {\r\n this._mediaItems = value;\r\n this._mediaItems?.forEach(item => {\r\n this.SetPreview(item);\r\n })\r\n }\r\n\r\n get MediaItems(): Media[] {\r\n return this._mediaItems;\r\n }\r\n\r\n @Input() Title: string;\r\n @Input() IsAutoSavePhotoAfterTake = false;\r\n @Input() IsAllowVideo: boolean = false;\r\n @Input() MinCount: number;\r\n @Input() MaxCount: number;\r\n\r\n @Input() MaxWidthPx: number;\r\n @Input() MaxHeightPx: number;\r\n @Input() ImageQuality: number = 1; // from 0 to 1\r\n\r\n @ViewChild(\"video\") public video: ElementRef;\r\n @ViewChild(\"canvas\") public canvas: ElementRef;\r\n @ViewChild(\"preview\") public preview: ElementRef;\r\n @ViewChild(\"validationGroup\") validationGroup: DxValidationGroupComponent;\r\n @ViewChild(DxTileViewComponent) public thumbs: DxTileViewComponent;\r\n @Input() ExtraFields: TemplateRef;\r\n\r\n constructor(A: ServiceBagService, private sanitizer: DomSanitizer) {\r\n super(A, 'PhotoBoxDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n\r\n //If custom title was set, return it\r\n override OnInitTitle(): string {\r\n if (this.Title == undefined) return undefined;\r\n return this.GetDefaultTitle() + ' - ' + this.Title;\r\n }\r\n\r\n override OnInitComponentFinished() {\r\n setTimeout(() => {\r\n this.StartVideo();\r\n this.State.IsOpened = true;\r\n }, 500);\r\n }\r\n\r\n override OnDestroyComponent() {\r\n this.State.IsOpened = false;\r\n this.State.IsCameraStarted = false;\r\n this.StopVideo();\r\n }\r\n\r\n //Stop video and cleanup\r\n StopVideo() {\r\n if (this.State.VideoStream != undefined) {\r\n this.State.PreviewMediaItem = undefined;\r\n this.State.IsPreview = false;\r\n this.video.nativeElement.pause();\r\n this.video.nativeElement.srcObject = undefined;\r\n this.State.VideoStream.getVideoTracks().forEach(x => x.stop());\r\n this.State.VideoStream = undefined;\r\n this.State.IsCameraStarted = false;\r\n\r\n }\r\n }\r\n\r\n //Plug in video\r\n StartVideo() {\r\n // Check permissions\r\n navigator.permissions.query({ name: \"camera\" as PermissionName })\r\n .then(permissionStatus => {\r\n if (permissionStatus.state == \"denied\") {\r\n this.State.CanUseCamera = false;\r\n this.UI.StopMessage(this.RC('msgCameraPermissionDenied'));\r\n return;\r\n }\r\n //Set size\r\n this.State.PreviewWidth = this.GetClientWidth();\r\n this.State.PreviewHeight = (this.GetClientHeight() - 178);\r\n\r\n //Init\r\n if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {\r\n navigator.mediaDevices.getUserMedia(\r\n {\r\n video:\r\n {\r\n facingMode: 'environment',\r\n width: { ideal: 4096, max: this.MaxWidthPx },\r\n height: { ideal: 2160, max: this.MaxHeightPx },\r\n },\r\n audio: false\r\n\r\n }).then(stream => {\r\n this.State.IsCameraStarted = true;\r\n this.State.VideoStream = stream;\r\n this.State.VideoAspectRatio = stream.getVideoTracks()[0].getSettings().aspectRatio;\r\n this.State.VideoWidth = stream.getVideoTracks()[0].getSettings().width;\r\n this.State.VideoHeight = stream.getVideoTracks()[0].getSettings().height;\r\n this.video.nativeElement.srcObject = stream;\r\n this.video.nativeElement.play();\r\n }, error => {\r\n console.error(error);\r\n this.State.CanUseCamera = false;\r\n this.UI.StopMessage(this.RC('msgCouldNotStartVideoError')); \r\n }\r\n );\r\n }\r\n }).catch(error => {\r\n console.error(error);\r\n this.State.CanUseCamera = false;\r\n this.UI.StopMessage(this.RC('msgCouldNotStartVideoError'));\r\n });\r\n }\r\n\r\n\r\n //Build new structure, and add to array\r\n //Give identifiers starting with -1 and going down\r\n OnTakePhoto() {\r\n let photo = this.TakePhoto();\r\n this.MediaItems.push(photo);\r\n if (this.IsAutoSavePhotoAfterTake) { this.OnSavePhotos(); }\r\n }\r\n\r\n OnStartVideoRecording() {\r\n let photo = this.TakePhoto();\r\n\r\n this.State.Recording.RecordInterval = setInterval(() => {\r\n this.State.Recording.RecordTimeSeconds++;\r\n this.State.Recording.RecordTimeString = new Date(this.State.Recording.RecordTimeSeconds * 1000).toISOString().slice(14, 19);\r\n }, 1000);\r\n\r\n this.StartRecording().then((recordedChunks) => {\r\n let recordedBlob = this.GetVideoBlob(recordedChunks);\r\n photo.VideoDataUrl = this.GetSafeUrlFromBlob(recordedBlob);\r\n Utils.ConvertBlobToBytesArray(recordedBlob, (array) => {\r\n photo.VideoBytes = array;\r\n });\r\n this.MediaItems.push(photo);\r\n }).catch((error) => {\r\n console.error(error);\r\n this.UI.StopMessage(`${error?.error} ${error?.message}`);\r\n });\r\n }\r\n\r\n OnStopVideoRecording() {\r\n if (this.State.Recording.MediaRecorder?.state === \"recording\") {\r\n this.State.Recording.MediaRecorder.stop();\r\n this.State.Recording.IsVideoRecording = false;\r\n }\r\n\r\n if (this.State.Recording.RecordInterval) {\r\n clearInterval(this.State.Recording.RecordInterval);\r\n this.State.Recording.RecordInterval = null;\r\n this.State.Recording.RecordTimeString = null;\r\n this.State.Recording.RecordTimeSeconds = 0;\r\n }\r\n }\r\n\r\n OnResizeWindow() {\r\n if (!this.IsDialogVisible) return;\r\n this.StartVideo();\r\n }\r\n\r\n OnOrientationChanged() {\r\n if (!this.IsDialogVisible) return;\r\n this.StartVideo();\r\n }\r\n\r\n\r\n //Show photo in the preview box\r\n OnShowMediaItem(item: Media) {\r\n this.State.PreviewMediaItem = item;\r\n this.State.IsPreview = true;\r\n this.DetectChanges();\r\n this.preview.nativeElement.src = item.ImageBase64;\r\n }\r\n\r\n //Switch back to video\r\n OnClosePreview() {\r\n this.State.PreviewMediaItem = undefined;\r\n this.State.IsPreview = false;\r\n this.StartVideo();\r\n }\r\n\r\n\r\n //Delete from photo list\r\n OnRemovePhoto() {\r\n this.MediaItems = this.MediaItems.filter(x => x.EntryID != this.State.PreviewMediaItem.EntryID);\r\n this.thumbs.instance.repaint()\r\n this.OnClosePreview();\r\n }\r\n\r\n //Finish - emit the PhotoChanged event to update parent state, and close\r\n OnSavePhotos() {\r\n this.ValidateValidationGroup(this.validationGroup).then(isValid => {\r\n if (!isValid) return;\r\n\r\n if (this.MinCount && this.MediaItems.length < this.MinCount) {\r\n this.UI.StopMessage(this.RC('msgPhotoMinCountError', this.MinCount));\r\n return;\r\n }\r\n\r\n if (this.MaxCount && this.MediaItems.length > this.MaxCount) {\r\n this.UI.StopMessage(this.RC('msgPhotoMaxCountError', this.MaxCount));\r\n return;\r\n }\r\n\r\n this.StopVideo();\r\n this.CloseDialogWithSuccess(this.MediaItems);\r\n this.ClosePage();\r\n });\r\n }\r\n\r\n OnSetVideoMode() {\r\n this.State.IsVideoMode = true;\r\n }\r\n\r\n OnSetPhotoMode() {\r\n this.State.IsVideoMode = false;\r\n }\r\n\r\n OnFileSelected(e) {\r\n const files = e?.target?.files;\r\n if (!files || files?.length == 0) return;\r\n\r\n const file = files[0];\r\n const isImage = file.type.startsWith(\"image\");\r\n const fileReader = new FileReader();\r\n\r\n if (isImage) {\r\n fileReader.addEventListener(\"load\", (event) => {\r\n\r\n const imageObj = new Image();\r\n const canvas = document.createElement(\"canvas\");\r\n const context = canvas.getContext(\"2d\");\r\n\r\n imageObj.src = event.target.result.toString();\r\n imageObj.onload = () => {\r\n\r\n const ratio = imageObj.width / imageObj.height;\r\n let width = imageObj.width;\r\n let height = imageObj.height;\r\n\r\n if (this.MaxWidthPx && width > this.MaxWidthPx) {\r\n width = this.MaxWidthPx;\r\n height = Math.round(width / ratio);\r\n }\r\n\r\n if (this.MaxHeightPx && height > this.MaxHeightPx) {\r\n height = this.MaxHeightPx;\r\n width = Math.round(height * ratio);\r\n }\r\n\r\n canvas.width = width;\r\n canvas.height = height;\r\n\r\n context.drawImage(imageObj, 0, 0, width, height);\r\n const base64 = context.canvas.toDataURL(this._imageMimeType, this.ImageQuality);\r\n const photo = this.AddPhoto(base64);\r\n this.MediaItems.push(photo);\r\n };\r\n });\r\n\r\n fileReader.readAsDataURL(files[0]);\r\n }\r\n else {\r\n fileReader.addEventListener('load', async () => {\r\n const arrayBuffer = (fileReader.result as ArrayBuffer);\r\n const result = Array.from(new Uint8Array(arrayBuffer));\r\n const blob = new Blob([new Uint8Array(result)], { type: file.type });\r\n\r\n const media = new Media;\r\n media.EntryID = this.GetNewMediaItemEntryID();\r\n const imagePreviewBlob = await this.GetVideoCover(blob);\r\n\r\n Utils.ConvertBlobToBytesArray(imagePreviewBlob, (array) => {\r\n media.ImageBytes = array;\r\n this.SetPreview(media);\r\n });\r\n\r\n media.VideoBytes = result;\r\n this.SetPreview(media);\r\n this.MediaItems.push(media);\r\n }, false);\r\n\r\n fileReader.readAsArrayBuffer(file);\r\n }\r\n\r\n const imageGallery = document.getElementById('image-gallery') as any;\r\n imageGallery && (imageGallery.value = '');\r\n }\r\n\r\n private GetNewMediaItemEntryID() {\r\n return this.MediaItems.reduce((min, p) => p.EntryID < min ? p.EntryID : min, 0) - 1;\r\n }\r\n\r\n private TakePhoto(): Media {\r\n this.canvas.nativeElement.getContext(\"2d\").drawImage(this.video.nativeElement, 0, 0, this.State.VideoWidth, this.State.VideoHeight);\r\n return this.AddPhoto(this.canvas.nativeElement.toDataURL(this._imageMimeType, this.ImageQuality));\r\n }\r\n\r\n private AddPhoto(base64) {\r\n const photo = new Media;\r\n photo.ImageBase64 = base64;\r\n photo.EntryID = this.GetNewMediaItemEntryID();\r\n photo.ImageBytes = Utils.ConvertToBytesArray(photo.ImageBase64);\r\n return photo;\r\n }\r\n\r\n private StartRecording() {\r\n this.State.Recording.MediaRecorder = new MediaRecorder(this.State.VideoStream);\r\n let data = [];\r\n\r\n this.State.Recording.MediaRecorder.ondataavailable = (event) => data.push(event.data);\r\n this.State.Recording.MediaRecorder.start();\r\n this.State.Recording.IsVideoRecording = true;\r\n\r\n let stopped = new Promise((resolve, reject) => {\r\n this.State.Recording.MediaRecorder.onstop = resolve;\r\n this.State.Recording.MediaRecorder.onerror = (event) => reject(event);\r\n });\r\n\r\n return stopped.then(() => data);\r\n }\r\n\r\n private SetPreview(item: Media) {\r\n if (item.VideoBytes?.length > 0 && !item.VideoDataUrl) item.VideoDataUrl = this.GetSafeUrlFromBlob(this.GetVideoBlob([new Uint8Array(item.VideoBytes)]));\r\n if (item.ImageBytes?.length > 0 && !item.ImageBase64) item.ImageBase64 = Utils.GetImageSource(item.ImageBytes, this._imageMimeType);\r\n }\r\n\r\n private GetVideoBlob(data): Blob {\r\n return new Blob(data, { type: \"video/webm\" });\r\n }\r\n\r\n private GetSafeUrlFromBlob(data: Blob) {\r\n return this.sanitizer.bypassSecurityTrustUrl(URL.createObjectURL(data));\r\n }\r\n\r\n private GetVideoCover(data: Blob, seekTo = 0.0) {\r\n return new Promise((resolve, reject) => {\r\n try {\r\n // load the file to a video player\r\n const videoPlayer = document.createElement('video');\r\n videoPlayer.setAttribute('src', URL.createObjectURL(data));\r\n videoPlayer.load();\r\n videoPlayer.addEventListener('error', (ex) => {\r\n reject(ex);\r\n });\r\n // load metadata of the video to get video duration and dimensions\r\n videoPlayer.addEventListener('loadedmetadata', () => {\r\n // seek to user defined timestamp (in seconds) if possible\r\n if (videoPlayer.duration < seekTo) {\r\n reject(\"video is too short.\");\r\n return;\r\n }\r\n // delay seeking or else 'seeked' event won't fire on Safari\r\n setTimeout(() => {\r\n videoPlayer.currentTime = seekTo;\r\n }, 200);\r\n // extract video thumbnail once seeking is complete\r\n videoPlayer.addEventListener('seeked', () => {\r\n // define a canvas to have the same dimension as the video\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = videoPlayer.videoWidth;\r\n canvas.height = videoPlayer.videoHeight;\r\n // draw the video frame to canvas\r\n const ctx = canvas.getContext(\"2d\");\r\n ctx.drawImage(videoPlayer, 0, 0, canvas.width, canvas.height);\r\n // return the canvas image as a blob\r\n ctx.canvas.toBlob(\r\n blob => {\r\n resolve(blob);\r\n },\r\n \"image/jpeg\",\r\n this.ImageQuality /* quality */\r\n );\r\n });\r\n });\r\n }\r\n catch (ex) {\r\n console.error(ex);\r\n }\r\n });\r\n }\r\n\r\n private GetClientWidth() {\r\n return this.GetClientBodyElementRect()?.width || 0;\r\n }\r\n\r\n private GetClientHeight() {\r\n return this.GetClientBodyElementRect()?.height || 0;\r\n }\r\n\r\n private GetClientBodyElementRect() {\r\n const elements = document.querySelectorAll('.page-body');\r\n if (!elements || !elements.length) return null;\r\n return elements[elements.length - 1]?.getBoundingClientRect();\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n {{State.VideoWidth}}x{{State.VideoHeight}}\\r\\n
\\r\\n
{{ State.Recording.RecordTimeString }}
\\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n
{{ 'lblCameraModePhoto' | RC:THIS }}
\\r\\n
{{ 'lblCameraModeVideo' | RC:THIS }}
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\";","import { Component, Input } from '@angular/core';\r\nimport { GenericListEntity, BaseEntity } from '@base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { EnumPageDisplayModes, EnumPageEntitySources } from '@core/framework/sysenums.enum';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\n\r\nclass State {\r\n Value: any;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-selectboxdialog',\r\n templateUrl: './selectboxdialog.component.html',\r\n styleUrls: ['./selectboxdialog.component.scss']\r\n})\r\nexport class SelectBoxDialogComponent extends BasePageComponent {\r\n @Input() Values: GenericListEntity[];\r\n @Input() FieldLabel: string;\r\n @Input() Title: string = this.GetTitle();\r\n @Input() Prompt: string;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'SelectBoxDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n\r\n override OnInitTitle() {\r\n return this.Title;\r\n }\r\n\r\n override GetTitle() {\r\n const moduleName = this.GetFirstModuleName();\r\n return this.A.ResourcesService.RC('AppTitles.Messages', moduleName);\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\";","import { Component, Input, ViewChild } from '@angular/core';\r\nimport { 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
\";","import { Component, Input, ViewChild } from '@angular/core';\r\nimport { BaseEntity } from '@base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { EnumPageDisplayModes, EnumPageEntitySources } from '@core/framework/sysenums.enum';\r\nimport { SignBoxComponent } from '@ui/dialogs/signbox-dialog/signbox/signbox.component';\r\n\r\nclass State {\r\n OkText: string;\r\n ClientWidth: number;\r\n ClientHeight: number;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-signboxdialog',\r\n templateUrl: './signboxdialog.component.html',\r\n styleUrls: ['./signboxdialog.component.scss']\r\n})\r\nexport class SignBoxDialogComponent extends BasePageComponent {\r\n @ViewChild(SignBoxComponent) signBox: SignBoxComponent;\r\n @Input() Title: string;\r\n @Input() OkButtonText: string;\r\n @Input() MaxSignatureHeight = 0;\r\n @Input() SignatureReadOnly: boolean;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'SignBoxDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n\r\n // Main property to store the data. Since additional operation needs to take place, use this method instead of state directly\r\n public set SignatureData(value: string) {\r\n this.signBox.SignatureData = value;\r\n }\r\n\r\n public get SignatureData(): string {\r\n return this.signBox.SignatureData;\r\n }\r\n\r\n protected override OnInitTitle(): string {\r\n return this.Title;\r\n }\r\n\r\n protected override OnInitComponentFinished() {\r\n if (this.OkButtonText !== undefined) {\r\n this.State.OkText = this.OkButtonText;\r\n } else {\r\n this.State.OkText = this.RC('genSign');\r\n }\r\n this.SetClientSizes();\r\n }\r\n\r\n OnResetPad() {\r\n this.signBox.ClearSignature();\r\n }\r\n\r\n // Save\r\n OnSaveSignature() {\r\n if (!this.SignatureReadOnly) {\r\n // Make sure signature exists\r\n if (this.signBox.IsEmpty()) {\r\n this.UI.StopMessage(this.RC('msgSignatureRequired'), '#pad');\r\n return;\r\n }\r\n\r\n // Save and close\r\n this.signBox.Save();\r\n this.CloseDialogWithSuccess(this.SignatureData);\r\n } else {\r\n this.CloseDialogWithCancel();\r\n }\r\n }\r\n\r\n private GetCanvasWidth(): number {\r\n return document.querySelector('.signbox-container')?.getBoundingClientRect()?.width - 3 || 0;\r\n }\r\n\r\n private SetClientSizes() {\r\n setTimeout(() => {\r\n this.State.ClientWidth = this.GetCanvasWidth();\r\n this.State.ClientHeight = window.innerHeight / 2;\r\n }, 400);\r\n // wait for animation, TODO: figure out how to subscribe to complete animation template\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
{{'msgSignHere' | RC }}
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\";","import { Component, ElementRef, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { BaseEntity, BaseState } from '@base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { EnumPageDisplayModes, EnumPageEntitySources, EnumWindowSizes } from '@core/framework/sysenums.enum';\r\nimport { Html5Qrcode, Html5QrcodeScanner } from \"html5-qrcode\";\r\nimport { Html5QrcodeCameraScanConfig } from \"html5-qrcode/esm/html5-qrcode\";\r\nimport { Html5QrcodeResult, Html5QrcodeSupportedFormats } from \"html5-qrcode/esm/core\";\r\nimport { DxPopupComponent } from 'devextreme-angular';\r\nimport { TemplateRef } from '@angular/core';\r\nimport { LocalStorageService } from '@core/framework/local-storage.service';\r\n\r\nclass State extends BaseState {\r\n DeviceIDs: string[] = [];\r\n CurrentDeviceIndex = null;\r\n IsInititialized: boolean = false;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-barcodeboxdialog',\r\n templateUrl: './barcodeboxdialog.component.html',\r\n styleUrls: ['./barcodeboxdialog.component.scss']\r\n})\r\nexport class BarcodeBoxDialogComponent extends BasePageComponent{\r\n @ViewChild('reader') ReaderElement: ElementRef | undefined;\r\n\r\n @Input() UseFrontCamera: boolean = false;\r\n\r\n private _lastUsedCameraStorageName: string = 'BarcodeBoxLastUsedCameraID';\r\n\r\n @Input() Config: any = {\r\n fps: 10,\r\n qrbox: this.QrBoxFunction,\r\n useBarCodeDetectorIfSupported: false,\r\n rememberLastUsedCamera: true,\r\n aspectRatio: 4 / 3,\r\n showTorchButtonIfSupported: true,\r\n formatsToSupport: [\r\n Html5QrcodeSupportedFormats.QR_CODE,\r\n Html5QrcodeSupportedFormats.CODABAR,\r\n Html5QrcodeSupportedFormats.CODE_39,\r\n Html5QrcodeSupportedFormats.CODE_93,\r\n Html5QrcodeSupportedFormats.CODE_128,\r\n Html5QrcodeSupportedFormats.ITF,\r\n Html5QrcodeSupportedFormats.EAN_13,\r\n Html5QrcodeSupportedFormats.EAN_8,\r\n Html5QrcodeSupportedFormats.PDF_417,\r\n Html5QrcodeSupportedFormats.RSS_14,\r\n Html5QrcodeSupportedFormats.RSS_EXPANDED,\r\n Html5QrcodeSupportedFormats.UPC_A,\r\n Html5QrcodeSupportedFormats.UPC_E,\r\n Html5QrcodeSupportedFormats.UPC_EAN_EXTENSION,\r\n ],\r\n showZoomSliderIfSupported: true,\r\n defaultZoomValueIfSupported: 2\r\n };\r\n\r\n @Input() ExtraFields: TemplateRef;\r\n @Output() OnTextDecoded: EventEmitter = new EventEmitter();\r\n @Output() OnResultDecoded: EventEmitter = new EventEmitter();\r\n html5QrCode!: Html5Qrcode;\r\n\r\n constructor(A: ServiceBagService,\r\n private localStorageService: LocalStorageService) {\r\n super(A, 'BarcodeBoxDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.State.IsInititialized = true;\r\n }\r\n\r\n protected override OnInitComponentFinished() {\r\n\r\n Html5Qrcode.getCameras().then(devices => {\r\n if (devices && devices.length) {\r\n this.State.DeviceIDs = devices.map(x => x.id);\r\n this.StartHtmlQrCode();\r\n }\r\n }).catch(err => {\r\n console.log(err);\r\n });\r\n\r\n //let html5QrcodeScanner = new Html5QrcodeScanner(\"reader\", undefined, false);\r\n //html5QrcodeScanner.render(this.onScanSuccess, this.onScanFailure);\r\n }\r\n\r\n protected override OnDestroyComponent() {\r\n this.State.IsInititialized = false;\r\n }\r\n\r\n public override OnClose() {\r\n if (this.StopHtml5QrCode(false)) return false;\r\n this.CloseDialogWithCancel();\r\n return false;\r\n }\r\n\r\n private StartHtmlQrCode() {\r\n if (this.html5QrCode?.isScanning) {\r\n this.html5QrCode.stop().then((ignore) => {\r\n this.html5QrCode.start(\r\n { deviceId: this.GetSavedDeviceID() },\r\n this.Config,\r\n this.QrCodeSuccessCallback,\r\n (error) => { })\r\n .catch((err) => {\r\n console.log(err);\r\n });\r\n }).catch((err) => {\r\n console.error(err);\r\n });\r\n return;\r\n }\r\n\r\n this.html5QrCode = new Html5Qrcode(this.ReaderElement?.nativeElement?.id);\r\n this.html5QrCode.start(\r\n { deviceId: this.GetSavedDeviceID() },\r\n this.Config,\r\n this.QrCodeSuccessCallback,\r\n (error) => { })\r\n .catch((err) => {\r\n console.log(err);\r\n });\r\n }\r\n\r\n private StopHtml5QrCode(isSuccess) {\r\n if (this.html5QrCode) {\r\n this.html5QrCode.stop().then((ignore) => {\r\n isSuccess ? this.CloseDialogWithSuccess() : this.CloseDialogWithCancel();\r\n }).catch((err) => {\r\n console.error(err);\r\n this.CloseDialogWithCancel();\r\n });\r\n return true;\r\n }\r\n }\r\n\r\n OnBarcodeClick (e) {\r\n this.State.CurrentDeviceIndex++;\r\n this.State.CurrentDeviceIndex = this.State.CurrentDeviceIndex % this.State.DeviceIDs.length;\r\n this.SaveDeviceID();\r\n this.StartHtmlQrCode();\r\n }\r\n\r\n QrCodeSuccessCallback = (decodedText: any, decodedResult: Html5QrcodeResult) => {\r\n this.OnTextDecoded.emit(decodedText);\r\n this.OnResultDecoded.emit(decodedResult);\r\n }\r\n\r\n CloseDialog(isSuccess: boolean) {\r\n if (this.StopHtml5QrCode(isSuccess)) return;\r\n this.CloseDialogWithCancel();\r\n }\r\n\r\n private GetSavedDeviceID() {\r\n const deviceID = this.localStorageService.GetItem(this._lastUsedCameraStorageName);\r\n const index = this.State.DeviceIDs.indexOf(deviceID);\r\n if (index < 0) {\r\n this.State.CurrentDeviceIndex = this.State.DeviceIDs.length - 1;\r\n return this.State.DeviceIDs[this.State.CurrentDeviceIndex];\r\n }\r\n\r\n this.State.CurrentDeviceIndex = index;\r\n return deviceID;\r\n }\r\n\r\n private SaveDeviceID() {\r\n this.localStorageService.SetItem(this._lastUsedCameraStorageName, this.State.DeviceIDs[this.State.CurrentDeviceIndex]);\r\n }\r\n\r\n private QrBoxFunction(viewfinderWidth, viewfinderHeight) {\r\n const minval = (val, min) => {\r\n if (val < min) {\r\n return min;\r\n }\r\n return val;\r\n }\r\n\r\n // Square QR Box, with size = 80% of the min edge.\r\n const minWidthThreshold = 250;\r\n const minHeightThreshold = 150;\r\n const edgeSizePercentage = 0.9;\r\n\r\n const minEdgeSize = (viewfinderWidth > viewfinderHeight) ?\r\n viewfinderHeight : viewfinderWidth;\r\n const qrboxWidth = Math.floor(minEdgeSize * edgeSizePercentage);\r\n const qrboxHeight = minval(Math.floor(qrboxWidth / 2), minHeightThreshold);\r\n if (qrboxWidth < minWidthThreshold) {\r\n let width = minval(qrboxWidth, minWidthThreshold);\r\n let height = minval(Math.floor(width / 2), minHeightThreshold);\r\n\r\n return {\r\n width: width,\r\n height: height\r\n };\r\n }\r\n return { width: qrboxWidth, height: qrboxHeight };\r\n }\r\n}","export default \"\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\";","import { Directive, Input, TemplateRef, ViewContainerRef } from '@angular/core';\r\nimport { FrameworkService } from \"@core/framework/framework.service\"\r\n\r\n@Directive({ selector: '[customBuild]' })\r\nexport class M4UCustomBuildDirective\r\n{\r\n private hasView = false;\r\n\r\n constructor(\r\n private templateRef: TemplateRef,\r\n private viewContainer: ViewContainerRef,\r\n private framework: FrameworkService) { }\r\n\r\n @Input() set customBuild(value: string)\r\n {\r\n var bTrue = this.framework.IsCustomBuild(value);\r\n if (this.Reverse) bTrue = !bTrue;\r\n if (bTrue && !this.hasView)\r\n {\r\n this.viewContainer.createEmbeddedView(this.templateRef);\r\n this.hasView = true;\r\n } else if (bTrue && this.hasView)\r\n {\r\n this.viewContainer.clear();\r\n this.hasView = false;\r\n }\r\n }\r\n\r\n @Input() Reverse: boolean;\r\n}","import { Component, ElementRef, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'm4u-status-column',\r\n templateUrl: './status-column.component.html',\r\n styleUrls: ['./status-column.component.scss']\r\n})\r\nexport class StatusColumnComponent {\r\n\r\n @Input() Icon: string;\r\n @Input() IconUrl: string;\r\n @Input() Text: string;\r\n @Input() Color: string;\r\n @Input() Position: 'start' | 'center' | 'end' = 'start';\r\n\r\n constructor(private elRef: ElementRef) { }\r\n\r\n GetClass() {\r\n return `status-column-position-${this.Position}`;\r\n }\r\n\r\n getHtmlContent() {\r\n return this.elRef.nativeElement;\r\n }\r\n}\r\n","export default \"
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
{{Text}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n\";","import { Injectable } from '@angular/core';\r\nimport { ContextMenu } from 'primeng/contextmenu';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ContextMenuService {\r\n\r\n private _contextMenus: ContextMenu[] = [];\r\n\r\n public addContextMenu(cm: ContextMenu) {\r\n cm.onShow.subscribe(() => {\r\n this._contextMenus.forEach(x => x.hide());\r\n this._contextMenus.push(cm);\r\n });\r\n cm.onHide.subscribe(() => this._contextMenus = this._contextMenus.filter(x => x !== cm));\r\n }\r\n}","import { ComponentFactoryResolver, Directive, HostListener, Input, OnDestroy, Output, EventEmitter, ViewContainerRef, AfterViewInit } from '@angular/core';\r\nimport { IBaseComponent } from '@base/component/IBaseComponent';\r\nimport { FrameworkService } from '@core/framework/framework.service';\r\nimport { ScreenService } from '@core/framework/screen.service';\r\nimport { AppInjector } from '@core/injector/injector.module';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { NavigatorService } from '@m4u-angular/core/framework/navigator.service';\r\nimport { DxDateBoxComponent, DxListComponent, DxNumberBoxComponent, DxSelectBoxComponent, DxTagBoxComponent, DxTextBoxComponent } from 'devextreme-angular';\r\nimport { DxiColumnComponent, DxoLookupComponent } from 'devextreme-angular/ui/nested';\r\nimport { DeviceDetectorService } from 'ngx-device-detector';\r\nimport { Subscription } from 'rxjs';\r\nimport { StatusColumnComponent } from '../components/status-column/status-column.component';\r\nimport { FieldDetailComponentX } from '../layouts/fieldlayouts/field-detailx/fielddetailx.component';\r\nimport { FieldFormComponent } from '../layouts/fieldlayouts/field-form/fieldform.component';\r\nimport Validator from 'devextreme/ui/validator';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { formatNumber } from 'devextreme/localization';\r\nimport { ContextMenu } from 'primeng/contextmenu';\r\nimport { ContextMenuService } from '@m4u-angular/core/framework/context-menu.service';\r\n\r\n\r\n@Directive({ selector: 'dx-select-box[configEntitySource]' })\r\nexport class M4UConfigEntitySourceDirectiveSelectBox {\r\n constructor(c: DxSelectBoxComponent) {\r\n c.displayExpr = 'Name';\r\n c.valueExpr = 'EntryID';\r\n }\r\n}\r\n\r\n@Directive({ selector: 'dx-tag-box[configEntitySource]' })\r\nexport class M4UConfigEntitySourceDirectiveTagBox {\r\n constructor(c: DxTagBoxComponent) {\r\n c.displayExpr = 'Name';\r\n c.valueExpr = 'EntryID';\r\n }\r\n}\r\n\r\n@Directive({ selector: 'dxo-lookup[configEntitySource]' })\r\nexport class M4UConfigEntitySourceLookupColumn {\r\n constructor(c: DxoLookupComponent) {\r\n c.displayExpr = 'Name';\r\n c.valueExpr = 'EntryID';\r\n }\r\n}\r\n\r\n@Directive({ selector: '[configMonthYear]' })\r\nexport class M4UConfigMonthYearDirective implements OnDestroy {\r\n private subscribtion: Subscription;\r\n constructor(c: DxDateBoxComponent) {\r\n c.type = 'date';\r\n c.displayFormat = 'MM/yyyy';\r\n c.pickerType = 'calendar';\r\n\r\n c.calendarOptions =\r\n {\r\n maxZoomLevel: 'year',\r\n minZoomLevel: 'century'\r\n };\r\n\r\n //Disable input textbox since it causes problems\r\n this.subscribtion = c.onContentReady.subscribe((e) => {\r\n e.component.option('inputAttr', { disabled: true });\r\n });\r\n }\r\n\r\n //Clean up\r\n ngOnDestroy() {\r\n this.subscribtion.unsubscribe();\r\n }\r\n}\r\n\r\n@Directive({ selector: '[configYear]' })\r\nexport class M4UConfigYearDirective implements OnDestroy {\r\n private subscribtion: Subscription;\r\n constructor(c: DxDateBoxComponent) {\r\n c.type = 'date';\r\n c.displayFormat = 'yyyy';\r\n c.pickerType = 'calendar';\r\n\r\n c.calendarOptions =\r\n {\r\n maxZoomLevel: 'decade',\r\n minZoomLevel: 'century'\r\n };\r\n\r\n //Disable input textbox since it causes problems\r\n this.subscribtion = c.onContentReady.subscribe((e) => {\r\n e.component.option('inputAttr', { disabled: true });\r\n });\r\n }\r\n\r\n //Clean up\r\n ngOnDestroy() {\r\n this.subscribtion.unsubscribe();\r\n }\r\n}\r\n\r\n@Directive({ selector: '[configTime]' })\r\nexport class M4UConfigTimeDirective {\r\n constructor(c: DxDateBoxComponent, framework: FrameworkService) {\r\n\r\n const Detector = AppInjector.get(DeviceDetectorService);\r\n\r\n c.type = 'time';\r\n c.displayFormat = framework.CompanyInfo.TimeFormatShort;\r\n c.pickerType = (!Detector.isMobile() ? 'list' : 'native');\r\n c.min = null;\r\n c.max = null;\r\n }\r\n}\r\n\r\n@Directive({ selector: '[formatSum]' })\r\nexport class M4UFormatSumDirective {\r\n constructor(c: DxNumberBoxComponent, framework: FrameworkService) {\r\n c.format = framework.CompanyInfo.NumberSum;\r\n c.inputAttr = { inputmode: 'decimal' };\r\n }\r\n}\r\n\r\n@Directive({ selector: '[formatPrice]' })\r\nexport class M4UFormatPriceDirective {\r\n constructor(c: DxNumberBoxComponent, framework: FrameworkService) {\r\n c.format = framework.CompanyInfo.NumberPrice;\r\n c.inputAttr = { inputmode: 'decimal' };\r\n }\r\n}\r\n\r\n@Directive({ selector: '[formatRoundedPrice]' })\r\nexport class M4UFormatRoundedPriceDirective {\r\n constructor(c: DxNumberBoxComponent, framework: FrameworkService) {\r\n let numberPrice = framework.CompanyInfo.NumberPrice;\r\n const separatorIdx = numberPrice.lastIndexOf(framework.CompanyInfo.DecimalSeparator);\r\n if (separatorIdx !== -1) {\r\n numberPrice = numberPrice.substring(0, separatorIdx);\r\n }\r\n c.format = numberPrice;\r\n c.inputAttr = { inputmode: 'decimal' };\r\n }\r\n}\r\n\r\n@Directive({ selector: '[formatPriceWithCurrency]' })\r\nexport class FormatPriceWithCurrencyDirective {\r\n\r\n @Input() dataField: string;\r\n @Input() isShowZero = false;\r\n @Input('formatPriceWithCurrency') set currencyField(value: string) {\r\n this.c.calculateCellValue = (data) => {\r\n const number = data[this.dataField];\r\n const currency = data[value];\r\n\r\n if (number === null || number === undefined) {\r\n return null; \r\n }\r\n if (!this.isShowZero && number === 0) {\r\n return null; \r\n }\r\n\r\n let result = formatNumber(number, this.framework.CompanyInfo.NumberSum);\r\n\r\n if (currency) {\r\n result = `${result} ${currency}`; \r\n }\r\n\r\n return result;\r\n };\r\n }\r\n\r\n constructor(private c: DxiColumnComponent, private framework: FrameworkService) { }\r\n}\r\n\r\n@Directive({ selector: '[formatQuantity]' })\r\nexport class M4UFormatQuantityDirective {\r\n constructor(c: DxNumberBoxComponent, framework: FrameworkService) {\r\n c.format = framework.CompanyInfo.NumberQuantity;\r\n c.inputAttr = { inputmode: 'decimal' };\r\n }\r\n}\r\n\r\n@Directive({ selector: '[formatPercent]' })\r\nexport class M4UFormatPercentDirective {\r\n constructor(c: DxNumberBoxComponent, framework: FrameworkService) {\r\n c.format = framework.CompanyInfo.NumberPercent + '\\'%\\'';\r\n c.inputAttr = { inputmode: 'decimal' };\r\n }\r\n}\r\n\r\n@Directive({ selector: '[formatRate]' })\r\nexport class M4UFormatRateDirective {\r\n constructor(c: DxNumberBoxComponent, framework: FrameworkService) {\r\n c.format = framework.CompanyInfo.NumberRate;\r\n c.inputAttr = { inputmode: 'decimal' };\r\n }\r\n}\r\n\r\n@Directive({ selector: '[formatGeneral]' })\r\nexport class M4UFormatGeneralDirective {\r\n constructor(c: DxNumberBoxComponent, framework: FrameworkService) {\r\n c.format = framework.CompanyInfo.NumberGeneral;\r\n c.inputAttr = { inputmode: 'decimal' };\r\n }\r\n}\r\n\r\n@Directive({ selector: 'dx-text-box[multiEmail]' })\r\nexport class M4UMultiEmailDirective implements AfterViewInit {\r\n constructor(private c: DxTextBoxComponent, private A: ServiceBagService) {\r\n }\r\n\r\n ngAfterViewInit() {\r\n const oElementInstance = this.c.instance;\r\n let validatorInstance = Validator.getInstance(oElementInstance.element()) as Validator;\r\n if (!validatorInstance) validatorInstance = new Validator(oElementInstance.element(), {});\r\n const rules = validatorInstance.option('validationRules'); \r\n\r\n rules.push({\r\n type: 'custom',\r\n ignoreEmptyValue: true,\r\n message: this.A.ResourcesService.RC('lblMultiEmailError'),\r\n validationCallback: (e) => {\r\n if (e.value == null) return true;\r\n return Utils.IsEmail(e.value, true);\r\n }\r\n });\r\n\r\n validatorInstance.option('validationRules', rules);\r\n }\r\n}\r\n\r\n@Directive({ selector: '[formatCurrency]' })\r\nexport class M4UFormatCurrencyDirective {\r\n constructor(private c: DxNumberBoxComponent, private framework: FrameworkService) {\r\n }\r\n\r\n //Append currency value to the current format\r\n _Currency: string;\r\n @Input('formatCurrency') set Currency(value: string) {\r\n this._Currency = value;\r\n if (value == undefined) return;\r\n let format;\r\n if (this.c.format.toString().startsWith(this.framework.CompanyInfo.NumberGeneral)) format = this.framework.CompanyInfo.NumberGeneral;\r\n if (this.c.format.toString().startsWith(this.framework.CompanyInfo.NumberPrice)) format = this.framework.CompanyInfo.NumberPrice;\r\n if (this.c.format.toString().startsWith(this.framework.CompanyInfo.NumberSum)) format = this.framework.CompanyInfo.NumberSum;\r\n\r\n if (!format) return;\r\n this.c.format = format.split(';').reduce((acc: string, a: string) => acc += `${a} ${this._Currency};`, '').slice(0, -1);\r\n }\r\n get Currency(): string {\r\n return this._Currency;\r\n }\r\n}\r\n\r\n@Directive({ selector: '[stop-click-propagation]' })\r\nexport class M4UStopClickPropagation {\r\n @HostListener('click', ['$event'])\r\n public onClick(event: any): void {\r\n event.stopPropagation();\r\n }\r\n}\r\n\r\n@Directive({ selector: '[field-empty]' })\r\nexport class M4UFieldEmptyDirective {\r\n @Input() Component: IBaseComponent;\r\n @Input() IsHideLabel: boolean;\r\n\r\n constructor(f: FieldFormComponent, private screen: ScreenService) {\r\n f.Component = this.Component;\r\n f.Name = 'Empty';\r\n f.IsHideLabel = this.IsHideLabel;\r\n f.IsHide = this.screen.IsMobile();\r\n }\r\n}\r\n\r\n@Directive({ selector: '[fieldx-empty]' })\r\nexport class M4UFieldXEmptyDirective extends M4UFieldEmptyDirective {\r\n constructor(f: FieldDetailComponentX, screen: ScreenService) {\r\n super(f, screen);\r\n f.Value = 'Empty';\r\n }\r\n}\r\n\r\n@Directive({ selector: 'dxi-column[configBooleanColumn]' })\r\nexport class M4UConfigBooleanColumnDirective {\r\n @Input() TrueColor: string;\r\n @Input() FalseColor: string;\r\n @Input() Text: string;\r\n @Input() UseColumnCaption = false;\r\n @Input() ReverseValue = false;\r\n\r\n private _defaultActiveColor = '#0fbe7b';\r\n\r\n constructor(column: DxiColumnComponent,\r\n private viewContainerRef: ViewContainerRef,\r\n private componentFactoryResolver: ComponentFactoryResolver,\r\n private A: ServiceBagService) {\r\n column.cellTemplate = this.cellTemplate;\r\n }\r\n\r\n cellTemplate = (container, options) => {\r\n const value = this.ReverseValue ? !options.value : !!options.value;\r\n const componentFactory = this.componentFactoryResolver.resolveComponentFactory(StatusColumnComponent);\r\n const component = this.viewContainerRef.createComponent(componentFactory);\r\n component.instance.Text = this.Text || (this.UseColumnCaption\r\n ? options.column.caption\r\n : this.A.ResourcesService.RC(value ? 'genYes' : 'genNo'));\r\n component.instance.Color = value\r\n ? this.TrueColor || this._defaultActiveColor\r\n : this.FalseColor || undefined;\r\n const content = component.instance.getHtmlContent();\r\n container.appendChild(content);\r\n }\r\n}\r\n\r\n@Directive({ selector: '[list-with-pagination]' })\r\nexport class M4UListWithPagination {\r\n @Input() Page: BasePageComponent;\r\n\r\n constructor(private list: DxListComponent) { }\r\n\r\n ngOnInit() {\r\n const listTop = this.list['element'].nativeElement.getBoundingClientRect().top;\r\n\r\n // Calculate grid height fit to the page\r\n const height = window.innerHeight - listTop;\r\n\r\n // Get page footer height\r\n const pageFooters = document.querySelectorAll('.page-container m4u-footer');\r\n const pageFooter = pageFooters[pageFooters.length - 1];\r\n const pageFooterHeight = pageFooter && pageFooter['offsetParent'] && (pageFooter['offsetParent'].offsetHeight - pageFooter['offsetTop']) || 0;\r\n\r\n // Get layout padding\r\n const pageContainers = document.getElementsByClassName('page-content-container');\r\n const currentLayoutPadding = +document.defaultView\r\n .getComputedStyle(pageContainers[pageContainers.length - 1], '')\r\n .getPropertyValue('padding-bottom').match(/\\d/g).join('');\r\n\r\n // If less than header and one row add window height\r\n this.list.height = (height < 160 ? height + window.innerHeight : height) - currentLayoutPadding - pageFooterHeight; // Layout padding, page footer\r\n\r\n }\r\n\r\n}\r\n\r\n@Directive({ selector: '[field-link]' })\r\nexport class M4UFieldLinkDirective {\r\n @Input() NavPath: string;\r\n @Input() NavParams: any;\r\n @Input() NavEntryID: number;\r\n\r\n private _disabled: boolean;\r\n @Input() set Disabled(value: boolean) {\r\n this._disabled = value;\r\n if (this._disabled) this.component.elementAttr = { class: 'm4u-link disabled' };\r\n }\r\n\r\n constructor(private component: DxTextBoxComponent,\r\n private navigatorService: NavigatorService) {\r\n this.component.elementAttr = { class: 'm4u-link' };\r\n this.component.focusStateEnabled = false;\r\n }\r\n\r\n @HostListener('click', ['$event'])\r\n public onClick(event: any): void {\r\n event.stopPropagation();\r\n if (this._disabled) return;\r\n\r\n if (!this.NavPath.endsWith('/')) this.NavPath = `${this.NavPath}/`;\r\n const navEntryID = this.NavEntryID || this.component.value;\r\n const fullPath = `${this.NavPath}${navEntryID}`;\r\n\r\n this.navigatorService.Navigate([fullPath], this.NavParams);\r\n }\r\n}\r\n\r\n@Directive({ selector: 'dxi-column[link-column]' })\r\nexport class M4ULinkColumnDirective {\r\n @Input() Disabled: (cell: any) => boolean;\r\n @Output() OnClick = new EventEmitter();\r\n\r\n constructor(column: DxiColumnComponent) {\r\n column.cssClass = `${column.cssClass || ''} link-column`;\r\n column.cellTemplate = this.cellTemplate;\r\n }\r\n\r\n cellTemplate = (container, cell) => {\r\n const disabled = this.Disabled && this.Disabled(cell);\r\n container.innerHTML = cell.displayValue || '';\r\n if (disabled) {\r\n container.classList.add('disabled');\r\n return;\r\n }\r\n \r\n container.onclick = (event) => {\r\n event.stopPropagation();\r\n this.OnClick.emit(cell);\r\n };\r\n };\r\n}\r\n\r\n@Directive({ selector: 'p-contextMenu[contextMenu]' })\r\nexport class M4UContextMenuDirective {\r\n constructor(cm: ContextMenu, private contextMenuService: ContextMenuService) {\r\n this.contextMenuService.addContextMenu(cm);\r\n }\r\n}\r\n\r\n","import { Directive, HostListener, Input } from '@angular/core';\r\nimport { DxSelectBoxComponent, DxTagBoxComponent } from 'devextreme-angular';\r\nimport { Utils } from '@core/helpers/Utils';\r\n\r\n@Directive({ selector: '[configSearch]' })\r\nexport class M4UConfigSearchDirective {\r\n\r\n //Set default options\r\n constructor(private c: DxSelectBoxComponent) {\r\n //Enables typing in\r\n c.searchEnabled = true;\r\n\r\n //Set mode. This is what supported on the server\r\n c.searchMode = \"contains\";\r\n\r\n this.SetItemTemplate();\r\n }\r\n\r\n searchText: string = ''\r\n\r\n //Set some properties related to server search mode\r\n _DataMode: string;\r\n get DataMode(): string { return this._DataMode; }\r\n @Input() set DataMode(value: string) {\r\n this._DataMode = value;\r\n\r\n //If local, no need for minimum\r\n this.c.minSearchLength = (this._DataMode == 'server' ? 2 : 0);\r\n\r\n //Opening causes a full load. If in client mode, we don't care\r\n this.c.openOnFieldClick = (this._DataMode == 'server' ? false : true);\r\n }\r\n\r\n _ShowExtra: boolean;\r\n get ShowExtra(): boolean { return this._ShowExtra; }\r\n @Input() set ShowExtra(value: boolean) {\r\n this._ShowExtra = value;\r\n this.SetDisplayExpression();\r\n this.SetItemTemplate();\r\n }\r\n\r\n //Set template that highlights the typed in item, shows the value, and enables search by value\r\n _ShowValue: boolean;\r\n get ShowValue(): boolean { return this._ShowValue; }\r\n @Input() set ShowValue(value: boolean) {\r\n this._ShowValue = value;\r\n this.SetDisplayExpression();\r\n this.SetItemTemplate()\r\n }\r\n\r\n _ItemCssClass: string;\r\n get ItemCssClass(): string { return this._ItemCssClass; }\r\n @Input() set ItemCssClass(value: string) {\r\n this._ItemCssClass = value;\r\n this.SetDisplayExpression();\r\n this.SetItemTemplate()\r\n }\r\n\r\n //Set the template\r\n SetItemTemplate() {\r\n this.c.itemTemplate = this.PrepareItemTemplate.bind(this);\r\n }\r\n\r\n //Have to expose this one as well to allow overriding it, since the code itself overrides this field on the base control\r\n _DisplayExpr: string;\r\n get DisplayExpr(): string { return this._DisplayExpr; }\r\n @Input() set DisplayExpr(value: string) {\r\n this._DisplayExpr = value;\r\n this.SetDisplayExpression();\r\n }\r\n\r\n @HostListener('onInput') onInput() {\r\n this.searchText = String(this.c.instance.option('text'))\r\n }\r\n\r\n @HostListener('onSelectionChanged') onSelectionChanged() {\r\n this.searchText = ''\r\n }\r\n\r\n //Set correct display and search strings\r\n SetDisplayExpression() {\r\n\r\n //Set display expression to the one set manually, or build an automatic one depending on the Value/Text fields\r\n if (this.DisplayExpr != undefined) {\r\n this.c.displayExpr = this.DisplayExpr;\r\n } else {\r\n if (this._ShowValue || (this._ShowExtra && this.ExtraField)) {\r\n this.c.displayExpr = (item) => (item != null\r\n ? `${Utils.NZ(item[this._ShowExtra ? this.ExtraField : this.ValueField])} - ${Utils.NZ(item[this.TextField])}`\r\n : null);\r\n }\r\n else {\r\n this.c.displayExpr = this.TextField;\r\n }\r\n }\r\n\r\n const arr = [];\r\n arr.push(this.TextField);\r\n if (this.ShowValue) arr.push(this.ValueField);\r\n if (this.ShowExtra) arr.push(this.ExtraField);\r\n this.c.searchExpr = arr;\r\n }\r\n\r\n //Set that field that is being used as a text, to allow customer datasources\r\n _TextField: string = \"Text\";\r\n get TextField(): string { return this._TextField; }\r\n @Input() set TextField(value: string) {\r\n if (this._TextField != value) {\r\n this._TextField = value;\r\n this.SetDisplayExpression();\r\n }\r\n }\r\n\r\n //Set that field that is being used as a value, to allow customer datasources\r\n _ValueField: string = \"Value\";\r\n get ValueField(): string { return this._ValueField; }\r\n @Input() set ValueField(value: string) {\r\n if (this._ValueField != value) {\r\n this._ValueField = value;\r\n value && (this.c.valueExpr = value);\r\n this.SetDisplayExpression();\r\n }\r\n }\r\n\r\n //Set that field that is being used as a extra \r\n _ExtraField: string = \"Extra\";\r\n get ExtraField(): string { return this._ExtraField; }\r\n @Input() set ExtraField(extra: string) {\r\n if (this._ExtraField != extra) {\r\n this._ExtraField = extra;\r\n this.SetDisplayExpression();\r\n }\r\n }\r\n\r\n private GetValueFromPath(obj: any, path: string): string {\r\n const value = path.split('.').reduce((acc, val) => acc && acc[val], obj);\r\n return typeof value === 'number' ? value.toString() : value;\r\n }\r\n\r\n //Prepare the template\r\n private PrepareItemTemplate(itemData, itemIndex, itemElement): string {\r\n var sEnteredString: string = this.searchText;\r\n\r\n //Get extra\r\n var sExtraPart: string = '';\r\n if (this.ShowExtra) sExtraPart = this.GetHighlightedString(sEnteredString, this.GetValueFromPath(itemData, this.ExtraField), \"extra\");\r\n\r\n //Return either both parts, or just one\r\n if (this._ShowValue) {\r\n var sValuePart: string = this.GetHighlightedString(sEnteredString, `${this.GetValueFromPath(itemData, this.ValueField)}`, \"value\");\r\n var sTextPart: string = this.GetHighlightedString(sEnteredString, this.GetValueFromPath(itemData, this.TextField), \"text\");\r\n return `${sValuePart}${sTextPart}` + (this.ShowExtra ? sExtraPart : '');\r\n }\r\n else {\r\n var sTextPart: string = this.GetHighlightedString(sEnteredString, this.GetValueFromPath(itemData, this.TextField), \"textnovalue\");\r\n return sTextPart + (this.ShowExtra ? sExtraPart : '');;\r\n }\r\n }\r\n\r\n //Return a highlighten string for a line\r\n private GetHighlightedString(sEnteredString: string, sItemString: string, sClass: string): string {\r\n var sValue: string;\r\n if (!Utils.IsEmpty(sEnteredString) && !Utils.IsEmpty(sItemString)) {\r\n var iPos = sItemString.toLowerCase().indexOf(sEnteredString.toLowerCase());\r\n if (iPos >= 0) {\r\n //Put the text we found inside a span\r\n var iLen = sEnteredString.length;\r\n sValue = `${sItemString.slice(0, iPos)}${sItemString.slice(iPos, iPos + iLen)}${sItemString.slice(iPos + iLen)}`;\r\n }\r\n else {\r\n //Not found\r\n sValue = Utils.NZ(sItemString);\r\n }\r\n }\r\n else {\r\n //Same as not found\r\n sValue = Utils.NZ(sItemString);\r\n }\r\n\r\n //Return div for this line\r\n return `
${sValue}
`;\r\n }\r\n}\r\n","import { EnumCustomFilterTypes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Column } from 'devextreme/ui/data_grid';\r\nimport { DxiColumnComponent } from 'devextreme-angular/ui/nested';\r\nimport { Directive, Input } from '@angular/core';\r\n\r\n\r\n@Directive({ selector: 'dxi-column[configServerSideCustomFilter]' })\r\nexport class M4UConfigServerSideCustomFilterDirective {\r\n @Input() CustomFilterType: EnumCustomFilterTypes;\r\n\r\n constructor(column: DxiColumnComponent) {\r\n column.calculateFilterExpression = this.getCalculateFilterExpression();\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/ban-types\r\n getCalculateFilterExpression(): Function {\r\n switch (this.CustomFilterType) {\r\n case EnumCustomFilterTypes.RelatedToAtLeastOne:\r\n return this.RelatedToAtLeastOneFilterExpressionBuilder;\r\n default: return this.RelatedToAtLeastOneFilterExpressionBuilder;\r\n }\r\n }\r\n\r\n RelatedToAtLeastOneFilterExpressionBuilder(this: Column, filterValue: any, selectedFilterOperation: string, target) {\r\n return [this.dataField, EnumCustomFilterTypes.RelatedToAtLeastOne, filterValue];\r\n }\r\n}\r\n","//This is based on the standard routerLink directive\r\n\r\nimport { Attribute, Directive, ElementRef, HostListener, Input, Renderer2 } from '@angular/core';\r\nimport { NavigatorService } from '@core/framework/navigator.service';\r\n\r\n\r\n\r\n@Directive({ selector: ':not(a):not(area)[Link]' })\r\nexport class M4URouterLinkEx\r\n{\r\n\r\n private commands: any[] = [];\r\n constructor(\r\n private Navigator: NavigatorService,\r\n @Attribute('tabindex') tabIndex: string,\r\n renderer: Renderer2,\r\n el: ElementRef)\r\n {\r\n if (tabIndex == null) renderer.setAttribute(el.nativeElement, 'tabindex', '0');\r\n }\r\n\r\n @Input()\r\n set Link(commands: any[] | string)\r\n {\r\n this.commands = Array.isArray(commands) ? commands : [commands];\r\n }\r\n\r\n @Input()\r\n public LinkQueryParams: any;\r\n\r\n\r\n @HostListener('click')\r\n onClick(): boolean\r\n {\r\n this.Navigator.Navigate(this.commands, this.LinkQueryParams);\r\n return true;\r\n }\r\n\r\n}\r\n\r\n\r\n@Directive({ selector: 'a[Link],area[Link]' })\r\nexport class M4URouterLinkExWithHref\r\n{\r\n\r\n private commands: any[] = [];\r\n constructor(private Navigator: NavigatorService)\r\n {\r\n }\r\n\r\n @Input()\r\n set Link(commands: any[] | string)\r\n {\r\n this.commands = Array.isArray(commands) ? commands : [commands];\r\n }\r\n\r\n\r\n @Input()\r\n public LinkQueryParams: any;\r\n\r\n @HostListener('click', ['$event.button', '$event.ctrlKey', '$event.metaKey', '$event.shiftKey'])\r\n onClick(button: number, ctrlKey: boolean, metaKey: boolean, shiftKey: boolean): boolean\r\n {\r\n if (button !== 0 || ctrlKey || metaKey || shiftKey) return true;\r\n this.Navigator.Navigate(this.commands, this.LinkQueryParams);\r\n return true;\r\n }\r\n\r\n}\r\n","import { Directive, Input, AfterViewInit } from '@angular/core';\r\nimport { ResourcesService } from '@m4u-angular/core/framework/resources.service';\r\nimport { DxTextBoxComponent, DxSelectBoxComponent, DxNumberBoxComponent, DxCheckBoxComponent,\r\n DxRadioGroupComponent, DxDateBoxComponent, DxTextAreaComponent, DxTagBoxComponent } from 'devextreme-angular';\r\nimport { DxiColumnComponent } from 'devextreme-angular/ui/nested';\r\nimport { ValidationRule } from 'devextreme/common';\r\nimport Validator from 'devextreme/ui/validator';\r\n\r\nexport class M4UStandardDirective implements AfterViewInit {\r\n constructor(private c: any,\r\n private rule: 'async' | 'compare' | 'custom' | 'email' | 'numeric' | 'pattern' | 'range' | 'required' | 'stringLength',\r\n private IsColumn: boolean,\r\n private resourcesService: ResourcesService) { }\r\n\r\n private m_bInitComplete: boolean;\r\n\r\n _Enabled = true;\r\n @Input() set Enabled(value: boolean) {\r\n\r\n // Prevent double execution\r\n if (this.Enabled === value) {\r\n return;\r\n }\r\n\r\n this._Enabled = value;\r\n\r\n\r\n // Run only if changing after initialization\r\n if (this.m_bInitComplete) {\r\n this.Init();\r\n }\r\n }\r\n\r\n @Input() RequiredMessage: string;\r\n @Input() DoNotShowRequiredMsg: boolean;\r\n\r\n ngAfterViewInit() {\r\n this.Init();\r\n this.m_bInitComplete = true;\r\n }\r\n\r\n private Init() {\r\n if (this.IsColumn) {\r\n this.InitColumnRules();\r\n } else {\r\n this.InitNormalRules();\r\n }\r\n }\r\n\r\n InitNormalRules() {\r\n const oElementInstance = this.c.instance;\r\n let validatorInstance = Validator.getInstance(oElementInstance.element()) as Validator;\r\n if (!validatorInstance) {\r\n validatorInstance = new Validator(oElementInstance.element(), {});\r\n }\r\n\r\n // var overlay = validatorInstance.element().find(\".dx-invalid-message.dx-overlay\");\r\n // overlay.dxValidationMessage(\"instance\" ).option( \"position\", {\r\n // my: 'bottom right',\r\n // at: \"top right\",\r\n // });\r\n\r\n const rules = validatorInstance.option('validationRules').filter(x => x.type !== this.rule);\r\n\r\n // Add the rule, or filter it out\r\n if (this._Enabled) {\r\n rules.push({\r\n type: this.rule,\r\n message: this.DoNotShowRequiredMsg ? '' : (this.RequiredMessage || (this.resourcesService.RC('errorRequiredMessage')))\r\n });\r\n }\r\n\r\n // Set\r\n validatorInstance.option('validationRules', rules);\r\n }\r\n\r\n InitColumnRules() {\r\n let rules = this.c._getOption('validationRules') as ValidationRule[];\r\n if (rules === undefined) {\r\n rules = [];\r\n }\r\n\r\n // Add the rule, or filter it out\r\n if (this._Enabled) {\r\n rules.push({ type: this.rule });\r\n } else {\r\n rules = rules.filter(x => x.type !== this.rule);\r\n }\r\n\r\n // Set\r\n this.c._setOption('validationRules', rules);\r\n }\r\n}\r\n\r\n\r\n@Directive({ selector: 'dx-text-box[configRequired]' })\r\nexport class M4URequiredDirectiveTextBox extends M4UStandardDirective implements AfterViewInit {\r\n constructor(c: DxTextBoxComponent, resourcesService: ResourcesService) {\r\n super(c, 'required', false, resourcesService);\r\n }\r\n\r\n override ngAfterViewInit() {\r\n super.ngAfterViewInit();\r\n }\r\n}\r\n\r\n@Directive({ selector: 'dx-number-box[configRequired]' })\r\nexport class M4URequiredDirectiveNumberBox extends M4UStandardDirective implements AfterViewInit {\r\n constructor(c: DxNumberBoxComponent, resourcesService: ResourcesService) {\r\n super(c, 'required', false, resourcesService);\r\n }\r\n\r\n override ngAfterViewInit() {\r\n super.ngAfterViewInit();\r\n }\r\n}\r\n\r\n@Directive({ selector: 'dx-select-box[configRequired]' })\r\nexport class M4URequiredDirectiveSelectBox extends M4UStandardDirective implements AfterViewInit {\r\n constructor(c: DxSelectBoxComponent, resourcesService: ResourcesService) {\r\n super(c, 'required', false, resourcesService);\r\n }\r\n\r\n override ngAfterViewInit() {\r\n super.ngAfterViewInit();\r\n }\r\n}\r\n\r\n@Directive({ selector: 'dx-check-box[configRequired]' })\r\nexport class M4URequiredDirectiveCheckBox extends M4UStandardDirective implements AfterViewInit {\r\n constructor(c: DxCheckBoxComponent, resourcesService: ResourcesService) {\r\n super(c, 'required', false, resourcesService);\r\n }\r\n\r\n override ngAfterViewInit() {\r\n super.ngAfterViewInit();\r\n }\r\n}\r\n\r\n\r\n@Directive({ selector: 'dx-radio-group[configRequired]' })\r\nexport class M4URequiredDirectiveRadioGroup extends M4UStandardDirective implements AfterViewInit {\r\n constructor(c: DxRadioGroupComponent, resourcesService: ResourcesService) {\r\n super(c, 'required', false, resourcesService);\r\n }\r\n\r\n override ngAfterViewInit() {\r\n super.ngAfterViewInit();\r\n }\r\n}\r\n\r\n\r\n@Directive({ selector: 'dx-date-box[configRequired]' })\r\nexport class M4URequiredDirectiveDateBox extends M4UStandardDirective implements AfterViewInit {\r\n constructor(c: DxDateBoxComponent, resourcesService: ResourcesService) {\r\n super(c, 'required', false, resourcesService);\r\n }\r\n\r\n override ngAfterViewInit() {\r\n super.ngAfterViewInit();\r\n }\r\n}\r\n\r\n@Directive({ selector: 'dxi-column[configRequired]' })\r\nexport class M4URequiredDirectiveColumn extends M4UStandardDirective implements AfterViewInit {\r\n constructor(c: DxiColumnComponent, resourcesService: ResourcesService) {\r\n super(c, 'required', true, resourcesService);\r\n }\r\n\r\n override ngAfterViewInit() {\r\n super.ngAfterViewInit();\r\n }\r\n}\r\n\r\n@Directive({ selector: 'dx-text-area[configRequired]' })\r\nexport class M4URequiredDirectiveTextArea extends M4UStandardDirective implements AfterViewInit {\r\n constructor(c: DxTextAreaComponent, resourcesService: ResourcesService) {\r\n super(c, 'required', false, resourcesService);\r\n }\r\n\r\n override ngAfterViewInit() {\r\n super.ngAfterViewInit();\r\n }\r\n}\r\n\r\n@Directive({ selector: 'dx-tag-box[configRequired]' })\r\nexport class M4URequiredDirectiveTagBox extends M4UStandardDirective implements AfterViewInit {\r\n constructor(c: DxTagBoxComponent, resourcesService: ResourcesService) {\r\n super(c, 'required', false, resourcesService);\r\n }\r\n\r\n override ngAfterViewInit() {\r\n super.ngAfterViewInit();\r\n }\r\n}\r\n","import { Directive, EventEmitter, Input, OnDestroy, OnInit, Output, ElementRef, Renderer2 } from '@angular/core';\r\nimport { debounceTime } from 'rxjs/operators';\r\nimport { Subject, Subscription } from 'rxjs';\r\n\r\n\r\n/**\r\n * \r\n */\r\n\r\n@Directive({\r\n selector: '[throttleevent]'\r\n})\r\nexport class ThrottleEventDirective implements OnInit, OnDestroy {\r\n @Input() EventName: string; // Event name, like 'keydown'\r\n @Input() DebounceTime: number = 500;\r\n @Input() IgnoreNavigationKeys: boolean = false;\r\n @Output() ThrottledEvent = new EventEmitter(); //The resulting event that should be handled\r\n\r\n ignoreKeyCodes = [37, 38, 39, 40, 33, 34, 36, 35];\r\n\r\n private eventsQueue = new Subject();\r\n private subscription: Subscription;\r\n private eventUnsubscribeFunction: any;\r\n\r\n constructor(\r\n private elementRef: ElementRef,\r\n private renderer: Renderer2) { }\r\n\r\n //Handle the event\r\n OnEvent(event) {\r\n //Add event to the queue\r\n this.eventsQueue.next(event);\r\n }\r\n\r\n //Initialize listener and the new queue\r\n ngOnInit() {\r\n //Listen to the requested event\r\n this.eventUnsubscribeFunction = this.renderer.listen(this.elementRef.nativeElement, this.EventName, (event) => {\r\n if (!event) return;\r\n if (this.IgnoreNavigationKeys && event.keyCode) {\r\n if (this.ignoreKeyCodes.indexOf(event.keyCode) === -1) {\r\n this.OnEvent(event);\r\n }\r\n } else {\r\n this.OnEvent(event);\r\n }\r\n });\r\n\r\n //Listen to the events queue and throttle them\r\n this.subscription = this.eventsQueue.pipe(debounceTime(this.DebounceTime)).subscribe(e => this.ThrottledEvent.emit(e));\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subscription.unsubscribe();\r\n this.eventUnsubscribeFunction();\r\n }\r\n}\r\n","import { Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { ClientException } from '@base/entities/BaseEntities';\r\nimport { SysGlobals } from '../framework/sysglobals';\r\nimport { AppConfigService } from '../../configuration/app.config.service';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { EnumApplicationMode } from '../framework/sysenums.enum';\r\nimport { RC } from '../framework/resources.service';\r\nimport { Subscription } from 'rxjs';\r\nimport { FrameworkService } from '../framework/framework.service';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-exception',\r\n templateUrl: './exception.component.html',\r\n styleUrls: ['./exception.component.scss']\r\n})\r\nexport class ExceptionComponent implements OnInit, OnDestroy {\r\n private subscription: Subscription;\r\n\r\n constructor(\r\n private appConfigService: AppConfigService,\r\n private activatedRoute: ActivatedRoute,\r\n private frameworkService: FrameworkService) {\r\n }\r\n\r\n ngOnInit() {\r\n this.subscription = this.activatedRoute.data.subscribe(data => {\r\n if (data && data.MessageCode) {\r\n const exception = new ClientException;\r\n exception.Message = RC(data.MessageCode);\r\n SysGlobals.LastException = exception;\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscription && this.subscription.unsubscribe();\r\n }\r\n\r\n GetButtonText() {\r\n return this.appConfigService.AppConfig.Mode === EnumApplicationMode.Standard\r\n ? RC('btnReEntry')\r\n : RC('btnReload');\r\n }\r\n\r\n OnReload() {\r\n if (this.appConfigService.AppConfig.Mode === EnumApplicationMode.Standard) {\r\n this.frameworkService.NavigateDefault();\r\n return;\r\n }\r\n //For SiglePage and IFrame modes reload application\r\n //Application path was taken from 'unsupported-browsers' script that sets path on the application start\r\n window.location.href = window['applicationPath'];\r\n }\r\n\r\n E(): ClientException {\r\n return SysGlobals.LastException;\r\n }\r\n}\r\n","export default \"\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
{{'titleException' | RC}}
\\r\\n \\r\\n \\r\\n
\\r\\n

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

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

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

Buttons

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

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

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

Mode - changes initial styles.

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

Disabled - specifies if the button is clickable.

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

Type - changes background color for solid buttons.

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

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

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

IsRound - specifies if the button is rounded.

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

Size - changes height and width.

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

Editors

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Select with configEntitySource directive.

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

Simple outlined select with clear button.

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

Select with grouping by field.

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

Select with search.

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

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

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

dx-tag-box - field with multiple selection.

\\r\\n

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

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

dx-tag-box with selection controls and search.

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

dx-tag-box with grouped options.

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

Simple dx-tag-box with configEntitySource.

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

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

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

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

\\r\\n

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

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

formatSum - configures input to format a number as sum.

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

formatPrice - configures input to format a number as price.

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

formatQuantity - configures input to format a number as quantity.

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

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

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

formatRate - configures input to format a number as rate.

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

formatGeneral - configures input to format a number as general.

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

dx-date-box - field for selecting date.

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

Simple dx-date-box.

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

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

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

configYear - directive that enables selection of year only.

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

configTime - directive that enables selection of time.

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

Layouts

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

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

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

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

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

Some text

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

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

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

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

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

Sections

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

m4u-section - represents wrapper for form with fields.

\\r\\n

Your result markup {{GetSectionMarkup()}}.

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

Cards

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

Card without Menu and Title.

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

Card with Menu and without Title.

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

Card with Title and Menu.

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

Card with horizontal m4u-fielddetail and Icon.

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

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

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

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

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

Card with vertical m4u-fielddetail.

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

Card with expand-card.

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

Tabs

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

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

\\r\\n

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

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

Tab 1 content

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

Tab 2 content

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

Tab 3 content

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

Tab 4 content

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

Grids

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

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

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

Simple dx-data-grid.

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

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

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

Grid with icon button and hint that displays on hover.

\\r\\n

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

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

Grid with column filtering and column chooser.

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

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

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

Grid with custom buttons in toolbar.

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

Grid with multiple selection.

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

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

\\r\\n

Total sum: {{State.TotalSum}}

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

Bottom Sheets

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

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

\\r\\n

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

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

Template content

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

Pages

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

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

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

Examples with header and toolbar.

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

Header

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

Footer

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

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

\\r\\n

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

\\r\\n

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

\\r\\n

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

Header

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

Footer

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

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

\\r\\n

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

\\r\\n

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

\\r\\n

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

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

Sidebars

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

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

\\r\\n

It can show only Component or Template.

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

Template content

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

Dialogs

\\r\\n

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

\\r\\n

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

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

Example of Custom Dialog.

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

Example of Barcode Box Dialog.

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

Example of File Box Dialog.

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

Example of Html Box Dialog.

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

Example of Image Box Dialog.

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

Example of Input Box Dialog.

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

Example of Message Box Dialog.

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

Example of Photo Box Dialog.

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

Example of Preview Dialog.

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

Example of Select Box Dialog.

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

Example of Sign Box Dialog.

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

Pipes

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

RC - pipe for translating resources by provided key.

\\r\\n

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

\\r\\n

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

\\r\\n

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

\\r\\n

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

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

Location of core resources: ClientApp/src/_resources.

\\r\\n

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

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

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

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

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

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

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

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

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

\\r\\n

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

\\r\\n

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

\\r\\n

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

\\r\\n

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

\\r\\n

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

\\r\\n

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

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

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

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

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

\\r\\n

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

\\r\\n

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

\\r\\n

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

\\r\\n

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

\\r\\n

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

\\r\\n

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

\\r\\n

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

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

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

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

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

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

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

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

Components

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

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

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

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

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

Demo

\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\";","import {Component, Input} from '@angular/core';\r\nimport {ServiceBagService} from \"@base/component/ServiceBag\";\r\nimport {ScreenService} from \"@core/framework/screen.service\";\r\nimport {BaseEntity, BaseState} from \"@base/entities/BaseEntities\";\r\nimport {BaseGridComponent} from \"../../../../../base/component/BaseGridComponent\";\r\nimport {DemoMobilePhoneBrand, DemoMobilePhoneModel} from \"@ui/demo/models/demo-mobile-phone\";\r\nimport { ContextMenuElement } from '@m4u-angular/base/classes/BaseClasses';\r\n\r\n@Component({\r\n selector: 'app-demo-grid',\r\n templateUrl: './demo-grid.component.html'\r\n})\r\nexport class DemoGridComponent extends BaseGridComponent {\r\n\r\n @Input() Brands: DemoMobilePhoneBrand[] = [];\r\n @Input() Models: DemoMobilePhoneModel[] = [];\r\n @Input() Colors: any[] = [];\r\n \r\n constructor(A: ServiceBagService) {\r\n super(A, 'DemoGridComponent', BaseEntity, BaseState);\r\n }\r\n\r\n override GetGridRowContextMenu(options?: any): ContextMenuElement[] {\r\n return [{\r\n text: this.RC('someContextMenuTitle'),\r\n onClick: () => console.log(options)\r\n }]\r\n }\r\n\r\n OnColumnClick(e) {\r\n console.log(e);\r\n }\r\n\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\";","import { Component } from '@angular/core';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { HistoryItem, RouteHistoryService } from '@m4u-angular/core/framework/route-history.service';\r\nimport { Subscription } from 'rxjs';\r\n\r\nclass State extends BaseState {\r\n History: HistoryItem[];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-breadcrumb',\r\n templateUrl: './breadcrumb.component.html',\r\n styleUrls: ['./breadcrumb.component.scss']\r\n})\r\nexport class BreadcrumbComponent extends BaseComponent {\r\n\r\n private _subscriptions: Subscription[] = [];\r\n\r\n constructor(A: ServiceBagService,\r\n private routeHistoryService: RouteHistoryService) {\r\n super(A, 'BreadcrumbComponent', State);\r\n }\r\n\r\n protected override OnInitComponent(): void {\r\n this._subscriptions.push(this.routeHistoryService.HistoryItems$.subscribe(history => {\r\n this.State.History = [ ...history];\r\n }));\r\n this.A.SysEvents.SetBreadCrumbVisible(true);\r\n }\r\n\r\n OnItemClick(item: HistoryItem) {\r\n this.routeHistoryService.NavigateHistoryItem(item);\r\n }\r\n\r\n OnBack() {\r\n this.routeHistoryService.GoBack();\r\n }\r\n\r\n protected override OnDestroyComponent(): void {\r\n this._subscriptions.forEach(x => x.unsubscribe());\r\n }\r\n\r\n}\r\n","export default \"
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
{{ item.Title }}
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\";","import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumLanguages } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { SysGlobals } from '@m4u-angular/core/framework/sysglobals';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { PdfJsViewerComponent } from 'ng2-pdfjs-viewer';\r\nimport { LanguageService } from '../../../core/framework/language.service';\r\n\r\nclass State extends BaseState {\r\n PDFData: Blob;\r\n ShowLoadPanel: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-pdf-viewer',\r\n templateUrl: './pdf-viewer.component.html',\r\n styleUrls: ['./pdf-viewer.component.scss']\r\n})\r\nexport class PdfViewerComponent extends BaseComponent {\r\n\r\n @Input() FileName: string;\r\n @Input() set PDFData(value: string | Blob) { \r\n if(typeof value === 'string') value = Utils.ConvertToBlob(value, 'application/pdf'); \r\n this.State.PDFData = value;\r\n if (this.State.PDFData) {\r\n this.State.ShowLoadPanel = false;\r\n this.SetStyles();\r\n }\r\n }\r\n @Output() OnDocumentLoaded = new EventEmitter();\r\n\r\n @ViewChild(PdfJsViewerComponent) instance: PdfJsViewerComponent;\r\n\r\n constructor(A: ServiceBagService, private languageService: LanguageService) {\r\n super(A, 'PdfViewerComponent', State);\r\n }\r\n\r\n protected override OnInitComponent(): void {\r\n setTimeout(() => !this.State.PDFData && (this.State.ShowLoadPanel = false), 3000);\r\n }\r\n\r\n protected OnInitComponentFinished(): void {\r\n this.SetStyles();\r\n }\r\n\r\n protected override OnInitState() {\r\n this.State.ShowLoadPanel = !this.State.PDFData;\r\n }\r\n\r\n GetLocale(): string {\r\n return this.languageService.GetLanguage();\r\n }\r\n\r\n DocumentLoaded(event: any) {\r\n this.OnDocumentLoaded.emit(event);\r\n }\r\n\r\n private SetStyles() {\r\n setTimeout(() => {\r\n const iframeDocument = this.instance?.iframe?.nativeElement?.contentDocument;\r\n if (!iframeDocument) return;\r\n\r\n const style = iframeDocument.createElement('style');\r\n\r\n const toolbarStyles = `\r\n #toolbarContainer {\r\n background: #294D92;\r\n }\r\n `;\r\n const backgroundStyles = `\r\n #viewerContainer {\r\n background-color: white;\r\n }\r\n `;\r\n\r\n style.appendChild(iframeDocument.createTextNode(toolbarStyles));\r\n if (this.A.Screen.IsMobile()) style.appendChild(iframeDocument.createTextNode(backgroundStyles));\r\n\r\n iframeDocument.head && iframeDocument.head.appendChild(style);\r\n }, 500);\r\n }\r\n}\r\n","export default \"\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
{{ '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, TemplateRef } from '@angular/core';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { HtmlUtils } from '@core/helpers/HtmlUtils';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-total-balance',\r\n templateUrl: './total-balance-card.component.html',\r\n styleUrls: ['./total-balance-card.component.scss']\r\n})\r\nexport class TotalBalanceCardComponent extends BaseComponent {\r\n\r\n @Input() Currency: string;\r\n @Input() Title: string;\r\n @Input() Amount: number;\r\n @Input() Icon: string;\r\n @Input() Color: string;\r\n @Input() IsHideCharge: boolean = false;\r\n @Input() AmountTemplate: TemplateRef;\r\n @Input() AdditionalTemplate: TemplateRef;\r\n @Input() ViewStyle: 'normal' | 'line-to-side' = 'normal';\r\n @Input() Tooltip: string;\r\n @Input() EnableClick = false;\r\n private TooltipUIID: string;\r\n\r\n private _onClickObserved: boolean;\r\n @Output() OnClick: EventEmitter = new EventEmitter;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'TotalBalanceCardComponent', BaseState);\r\n this.TooltipUIID = 'tbc-tooltip' + (Math.round(Math.random() * 1000000)).toString();\r\n }\r\n\r\n protected override OnInitComponent(): void {\r\n this._onClickObserved = this.OnClick.observed;\r\n }\r\n\r\n HasClickEvent(event) {\r\n return this._onClickObserved;\r\n }\r\n\r\n OnCardClick(event) {\r\n this.EnableClick && this.OnClick.emit(event);\r\n }\r\n\r\n GetBoxShadowStyle() {\r\n if (!this.Color) return '';\r\n \r\n const rgb = HtmlUtils.HexToRgbColorString(this.Color);\r\n if (!rgb) return '';\r\n\r\n return `0 4px 14px rgba(${rgb}, 0.4)`;\r\n }\r\n\r\n GetIconBackgroundColor() {\r\n if (!this.Color) return '';\r\n\r\n const rgb = HtmlUtils.HexToRgbColorString(this.Color);\r\n if (!rgb) return '';\r\n\r\n return `rgba(${rgb}, 0.12)`;\r\n }\r\n}\r\n","export default \"
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
{{Title}}
\\r\\n
\\r\\n {{ Amount | formatPriceWithCurrency: Currency: true }}\\r\\n {{ Amount | formatPriceWithCurrency: Currency: true : true }}\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
{{ Tooltip }}
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\";","import { Component, HostBinding, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'm4u-icon',\r\n templateUrl: './icon.component.html',\r\n styleUrls: ['./icon.component.scss']\r\n})\r\nexport class IconComponent {\r\n @Input() Name: string;\r\n @Input() Size: number = 24;\r\n @Input() Tip: string;\r\n\r\n @HostBinding('style.width') get width() {\r\n return `${this.Size}px`;\r\n }\r\n @HostBinding('style.height') get height() {\r\n return `${this.Size}px`;\r\n }\r\n @HostBinding('style.line-height') get lineHeight() {\r\n return `${this.Size}px`;\r\n }\r\n @HostBinding('style.font-size') get fontSize() {\r\n return `${this.Size}px`;\r\n }\r\n @HostBinding('style.background-size') get backgroundSize() {\r\n return `${this.Size}px ${this.Size}px`;\r\n }\r\n\r\n get isLink() {\r\n return /\\//.test(this.Name);\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n\\r\\n\";","import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState, CreateCredentialsParams, CredentialsCheckerMetadata, CredentialExternalInfo, DataEditorView, SystemCredentialInfo }\r\n from '@m4u-angular/base/entities/BaseEntities';\r\nimport { CredentialActivityEndpoint } from '@m4u-angular/core/endpoints/credential-activity.endpoint';\r\n\r\nclass State extends BaseState {\r\n\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-data-view-grid',\r\n templateUrl: './data-view-grid.component.html',\r\n})\r\nexport class DataViewGridComponent extends BaseGridComponent {\r\n @Input() Views: DataEditorView[];\r\n @ViewChild('grid') grid: any;\r\n @Output() OnSelectionChanged = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService, private credentialActivityEndpoint: CredentialActivityEndpoint) {\r\n super(A, 'DataViewGridComponent', SystemCredentialInfo, State);\r\n\r\n }\r\n\r\n OnGridSelectionChanged(event: any) {\r\n this.OnSelectionChanged.emit(this.grid.instance?.getSelectedRowsData());\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { Directive, Input } from '@angular/core';\r\nimport { IBaseComponent } from '../component/IBaseComponent';\r\nimport { DxPivotGridComponent } from 'devextreme-angular/ui/pivot-grid';\r\n\r\n@Directive({ selector: '[configPivotGrid]' })\r\nexport class M4UConfigPivotGridDirective {\r\n constructor(private pivotGrid: DxPivotGridComponent) {\r\n }\r\n\r\n @Input() set Component(value: IBaseComponent) { \r\n this.Init(value);\r\n }\r\n\r\n protected Init(component: IBaseComponent) {\r\n if (component == undefined || this.pivotGrid == undefined) return;\r\n \r\n const stateStoring = this.pivotGrid.stateStoring;\r\n this.pivotGrid.stateStoring = {\r\n storageKey:\r\n stateStoring?.storageKey || `${component.ComponentStateName}.PivotGrid.State`\r\n };\r\n }\r\n}","import { Component, ElementRef, EventEmitter, Input, Output, QueryList, ViewChild, ViewChildren } from \"@angular/core\";\r\nimport { BaseComponent } from \"@m4u-angular/base/component/BaseComponent\";\r\nimport { ServiceBagService, ServiceBagServices } from \"@m4u-angular/base/component/ServiceBag\";\r\nimport { BaseState } from \"@m4u-angular/base/entities/BaseEntities\";\r\n\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-switch-button',\r\n templateUrl: './switch-button.component.html',\r\n styleUrls: ['./switch-button.component.scss']\r\n})\r\nexport class SwitchButton extends BaseComponent {\r\n constructor(A: ServiceBagService) {\r\n super(A, \"SwitchButton\", BaseState);\r\n }\r\n\r\n @ViewChild('slider') slider: ElementRef;\r\n @ViewChildren('input') inputs: QueryList;\r\n\r\n @Input() Value: string | number;\r\n @Output() ValueChange = new EventEmitter();\r\n @Input() ValueExpr: string = 'Value';\r\n @Input() DisplayExpr: string = 'Text';\r\n\r\n _items = [];\r\n @Input()\r\n set Items(v) {\r\n // if (v.length !== 2) {\r\n // throw new Error('Items has to contain exactly 2 elements');\r\n // }\r\n this._items = v;\r\n };\r\n get Items() {\r\n return this._items;\r\n }\r\n\r\n Id(value: string) {\r\n return 'm4u-switch-button-' + value;\r\n }\r\n\r\n override OnInitComponentFinished() {\r\n setTimeout(() => {\r\n const input = this.inputs.find(item => item.nativeElement.checked);\r\n this.MoveSlider(input.nativeElement);\r\n }, 200);\r\n }\r\n\r\n OnChange({ target }) {\r\n this.ValueChange.emit(target.value);\r\n this.MoveSlider(target);\r\n }\r\n\r\n MoveSlider(target: HTMLInputElement) {\r\n if (!target) return;\r\n\r\n const label = target.labels[0];\r\n if (!label) return;\r\n this.slider.nativeElement.style.width = label.clientWidth + 'px';\r\n\r\n let shift = this.A.Screen.IsRTL() ? label.clientWidth + label.offsetLeft - label.offsetParent.clientWidth : label.offsetLeft;\r\n this.slider.nativeElement.style.transform = `translateX(${shift}px)`;\r\n }\r\n}","export default \"
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\";","import { Component, OnInit, ViewChild } from '@angular/core';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { NotificationGridComponent } from '../notificationgrid.component';\r\nimport { ShareEndpoint } from '@core/endpoints/share.endpoint';\r\nimport { AttachedFile, Notification } from \"@m4u-angular/base/entities/BaseEntities\";\r\nimport { FileEndpoint } from '@core/endpoints/file.endpoint';\r\nimport { PrintBoxDialogComponent } from '@ui/dialogs/printbox-dialog/printboxdialog.component';\r\nimport { Utils } from '@core/helpers/Utils';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-sharing-history-grid',\r\n templateUrl: './sharing-history-grid.component.html'\r\n})\r\nexport class SharingHistoryGridComponent extends NotificationGridComponent {\r\n\r\n @ViewChild(PrintBoxDialogComponent) printBoxDialog: PrintBoxDialogComponent;\r\n\r\n constructor(A: ServiceBagService, private shareEndpoint: ShareEndpoint,\r\n private fileEndpoint: FileEndpoint) {\r\n super(A, 'SharingHistoryGridComponent');\r\n }\r\n\r\n OnGoToSharedFile = (e) => {\r\n const notification: Notification = e.row.data;\r\n\r\n if (!notification.SharedFileUID) return;\r\n\r\n this.Do(this.fileEndpoint.GetView(notification.SharedFileUID, true), false, response => {\r\n if (!response.IsSuccess) return;\r\n this.printBoxDialog.PDFData = Utils.ConvertToBase64(response.Entity.FileData);\r\n this.printBoxDialog.ShowDialogShort(() => { });\r\n });\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\";","import { Component, EventEmitter, Output } from '@angular/core';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState, Log } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumLogLevel } from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\nclass State extends BaseState {\r\n SelectedIDs: number[];\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-log-grid',\r\n templateUrl: './log-grid.component.html',\r\n styleUrls: ['./log-grid.component.scss']\r\n})\r\nexport class LogGridComponent extends BaseGridComponent {\r\n\r\n @Output() selectItem: EventEmitter = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'LogGridComponent', Log, State);\r\n }\r\n\r\n public onRowClicked(e) {\r\n this.selectItem.emit(e.data);\r\n if (e.data) {\r\n this.State.SelectedIDs = [e.data.EntryID];\r\n }\r\n }\r\n\r\n public getStatusColor(log: Log) {\r\n switch(log.Level) {\r\n case EnumLogLevel.Error:\r\n return 'cinnabar';\r\n case EnumLogLevel.Warning:\r\n return 'mango';\r\n case EnumLogLevel.Info:\r\n return 'portage';\r\n }\r\n }\r\n\r\n}\r\n","export default \"\\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n\";","import { SystemOptionsListComponent } from '../ui/components/general/system-options/Components/system-options-list/system-options-list.component';\r\nimport { AddSystemOptionDialogComponent } from '../ui/components/general/system-options/Components/add-system-option-dialog/add-system-option-dialog.component';\r\nimport { SystemOptionComponent } from '../ui/components/general/system-options/Components/system-option/system-option.component';\r\nimport { SystemOptionsComponent } from '@ui/components/general/system-options/system-options.component';\r\nimport { PasswordTooltipComponent } from './../ui/components/password/password-tooltip/password-tooltip.component';\r\nimport { AgmCoreModule } from '@agm/core';\r\nimport { APP_BASE_HREF, CommonModule } from '@angular/common';\r\nimport { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';\r\nimport { APP_INITIALIZER, CUSTOM_ELEMENTS_SCHEMA, ErrorHandler, LOCALE_ID, NgModule, InjectionToken } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { BrowserModule, HammerGestureConfig, HammerModule, HAMMER_GESTURE_CONFIG, TransferState } from '@angular/platform-browser';\r\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\r\nimport { SignaturePadModule } from 'angular2-signaturepad';\r\nimport { PdfJsViewerModule } from 'ng2-pdfjs-viewer';\r\nimport { DeviceDetectorService } from 'ngx-device-detector';\r\nimport { NullComponent } from '@base/component/NullComponent';\r\nimport { ServiceBagService } from '@base/component/ServiceBag';\r\nimport { M4UCardComponent } from '@ui/layouts/componentlayouts/card/card.component';\r\nimport { M4ULinkComponent } from '@ui/layouts/componentlayouts/link/link.component';\r\nimport { CollapsibleGroupComponent } from '@ui/layouts/componentlayouts/collapsible-group/collapsiblegroup.component';\r\nimport { GridButtonAddComponent } from '@ui/layouts/componentlayouts/grid-button-add/gridbuttonadd.component';\r\nimport { GridButtonRemoveComponent } from '@ui/layouts/componentlayouts/grid-button-remove/gridbuttonremove.component';\r\nimport { PageButtonsComponent } from '@ui/layouts/componentlayouts/page-buttons/pagebuttons.component';\r\nimport { FileBoxDialogComponent } from '@ui/dialogs/filebox-dialog/fileboxdialog.component';\r\nimport { InputBoxDialogComponent } from '@ui/dialogs/inputbox-dialog/inputboxdialog.component';\r\nimport { MessageBoxDialogComponent } from '@ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\nimport { PhotoBoxDialogComponent } from '@ui/dialogs/photobox-dialog/photoboxdialog.component';\r\nimport { PrintBoxDialogComponent } from '@ui/dialogs/printbox-dialog/printboxdialog.component';\r\nimport { SelectBoxDialogComponent } from '@ui/dialogs/selectbox-dialog/selectboxdialog.component';\r\nimport { SignBoxDialogComponent } from '@ui/dialogs/signbox-dialog/signboxdialog.component';\r\nimport { SignBoxComponent } from '@ui/dialogs/signbox-dialog/signbox/signbox.component';\r\nimport { ImageBoxDialogComponent } from '@ui/dialogs/imagebox-dialog/imageboxdialog.component';\r\nimport { BarcodeBoxDialogComponent } from '@ui/dialogs/barcodebox-dialog/barcodeboxdialog.component';\r\nimport { M4UCustomBuildDirective } from '@ui/directives/CustomBuild';\r\nimport { FormatPriceWithCurrencyDirective, M4UConfigBooleanColumnDirective, M4UConfigEntitySourceDirectiveSelectBox, M4UConfigEntitySourceDirectiveTagBox, M4UConfigEntitySourceLookupColumn, M4UConfigMonthYearDirective, M4UConfigTimeDirective, M4UConfigYearDirective, M4UContextMenuDirective, M4UFieldEmptyDirective, M4UFieldLinkDirective, M4UFieldXEmptyDirective, M4UFormatCurrencyDirective, M4UFormatGeneralDirective, M4UFormatPercentDirective, M4UFormatPriceDirective, M4UFormatQuantityDirective, M4UFormatRateDirective, M4UFormatRoundedPriceDirective, M4UFormatSumDirective, M4ULinkColumnDirective, M4UListWithPagination, M4UMultiEmailDirective } from '@ui/directives/Directives';\r\nimport { M4UConfigSearchDirective } from '@ui/directives/FormatSearch.directive';\r\nimport { M4UConfigServerSideCustomFilterDirective } from '@ui/directives/CustomServerSideFilter.directive';\r\nimport { M4URouterLinkEx, M4URouterLinkExWithHref } from '@ui/directives/Link.directive';\r\nimport { M4UViewContainerDirective } from '@ui/directives/ViewContainer.directive';\r\nimport * as pipes from '@ui/directives/Pipes';\r\nimport { FormatDateApproximatePipe, FormatDateAtTimePipe, FormatDateCompactPipe, FormatDatePipe, FormatDateShortPipe, FormatFullDateCompactPipe, FormatNumberGeneralPipe, FormatNumberPercentPipe, FormatNumberPricePipe, FormatNumberQuantityPipe, FormatNumberRatePipe, FormatNumberShortPipe, FormatNumberSumPipe, FormatTimePipe, HighlightPipe, LookupListPipe, LookupPipe, RCPipe, RCXPipe, SafePipe, YesEmptyPipe, YesNoPipe, YesNoPipeYN, StringBrPipe, FileSizePipe, RCMPipe, RCMXPipe, AbsPipe, FormatDayNamePipe, FormatDayNameShortPipe, FormatPriceWithCurrencyPipe } from '@ui/directives/Pipes';\r\nimport { M4URequiredDirectiveCheckBox, M4URequiredDirectiveColumn, M4URequiredDirectiveNumberBox, M4URequiredDirectiveSelectBox, M4URequiredDirectiveTextBox, M4URequiredDirectiveRadioGroup, M4URequiredDirectiveDateBox, M4URequiredDirectiveTextArea, M4URequiredDirectiveTagBox } from '@ui/directives/Required.directive';\r\nimport { ThrottleEventDirective } from '@ui/directives/ThrottleEvent.directive';\r\nimport { ExceptionComponent } from '@core/exceptions/exception.component';\r\nimport { FieldDetailComponent } from '@ui/layouts/fieldlayouts/field-detail/fielddetail.component';\r\nimport { FieldDetailComponentX } from '@ui/layouts/fieldlayouts/field-detailx/fielddetailx.component';\r\nimport { FieldFormComponent } from '@ui/layouts/fieldlayouts/field-form/fieldform.component';\r\nimport { FieldFormComponentX } from '@ui/layouts/fieldlayouts/field-formx/fieldformx.component';\r\nimport { SectionComponent } from '@ui/layouts/fieldlayouts/section/section.component';\r\nimport { DevExpressService } from '@core/framework/devexpress.service';\r\nimport { FrameworkService, OnInitializeFramework } from '@core/framework/framework.service';\r\nimport { HistoryEndpoint } from '@core/endpoints/history.endpoint';\r\nimport { GenericListEndpoint } from '@core/endpoints/genericlist.endpoint';\r\nimport { NativeNotificationsService } from '@core/framework/nativenotifications.service';\r\nimport { NavigatorService } from '@core/framework/navigator.service';\r\nimport { ResourcesService } from '@core/framework/resources.service';\r\nimport { ScreenService } from '@core/framework/screen.service';\r\nimport { SysEnumsService } from '@core/framework/sysenums.enum';\r\nimport { SysEventsService } from '@core/framework/sysevents.service';\r\nimport { SystemEndpoint } from '@core/endpoints/system.endpoint';\r\nimport { SystemOptionsEndpoint } from '@core/endpoints/system-options.endpoint';\r\nimport { APIGatewayInterceptor } from '@core/gateway/APIGateway.intercept';\r\nimport { APIGatewayService } from '@core/gateway/APIGateway.service';\r\nimport { M4UConfigGridDirective, GridWrapperDirective } from '../base/grid/Grid.directive';\r\nimport { InjectorModule } from '@core/injector/injector.module';\r\nimport { AppComponent } from '@ui/layouts/layout/app.component';\r\nimport { EmptyLayoutComponent } from '@ui/layouts/layout/empty-layout/emptylayout.component';\r\nimport { MainLayoutComponent } from '@ui/layouts/layout/main-layout/mainlayout.component';\r\nimport { NavMenuComponent } from '@ui/layouts/layout/nav-menu/navmenu.component';\r\nimport { MenuButtonListComponent } from '@ui/components/general/menu-button-list/menu-button-list.component';\r\nimport { PageLayoutComponent } from '@ui/layouts/layout/page-layout/pagelayout.component';\r\nimport { ProgressPanelComponent } from '@ui/layouts/layout/progress-panel/progresspanel.component';\r\nimport { ToolbarComponent } from '@ui/layouts/layout/toolbar/toolbar.component';\r\nimport { ComingSoonComponent } from '@ui/components/login/coming-soon/comingsoon.component';\r\nimport { LoginComponent } from '@ui/components/login/login/login.component';\r\nimport { LoginOAuthComponent } from '@ui/components/login/login-oauth/login-oauth.component';\r\nimport { LogoutComponent } from '@ui/components/login/logout/logout.component';\r\nimport { SessionExpireComponent } from '@ui/components/login/session-expire/sessionexpire.component';\r\nimport { CredentialsActivityStatusComponent } from '@ui/components/general/credential-activity-status/credentials-activity-status.component';\r\nimport { NotificationsHistoryComponent } from '@ui/notifications/notifications-history/notificationshistory.component';\r\nimport { NotificationViewComponent } from '@m4u-angular/ui/notifications/notifications-history/notification-view/notificationview.component';\r\nimport { NotificationGridComponent } from '@m4u-angular/ui/notifications/notifications-history/notification-grid/notificationgrid.component';\r\nimport { M4UStopClickPropagation } from '@ui/directives/Directives';\r\nimport { HistoryViewComponent } from '@m4u-angular/ui/components/general/history-view/historyview.component';\r\nimport { ArrayOrderByPipe } from '@ui/directives/Pipes';\r\nimport { M4UDevExpressModule } from './devexpress.module';\r\nimport { PasswordChangeComponent } from '@ui/components/password/password-change/passwordchange.component';\r\nimport { PasswordChangeExpiredComponent } from '@ui/components/password/password-change-expired/passwordchangeexpired.component';\r\nimport { PasswordRecoveryComponent } from '@ui/components/password/password-recovery/passwordrecovery.component';\r\nimport { PasswordWelcomeComponent } from '@ui/components/password/password-welcome/passwordwelcome.component';\r\nimport { LoginEndpoint } from '@core/endpoints/login.endpoint';\r\nimport { PasswordManageComponent } from '@ui/components/password/password-manage/passwordmanage.component';\r\nimport { RecaptchaModule } from 'ng-recaptcha';\r\nimport { CaptchaComponent } from '@ui/layouts/componentlayouts/captcha/captcha.component';\r\nimport { AttachedFilesComponent } from '@ui/layouts/componentlayouts/attached-files/attached-files.component';\r\nimport { FileCardComponent } from '@ui/layouts/componentlayouts/attached-files/file-card/file-card.component';\r\nimport { M4USearchComponent } from '@ui/layouts/componentlayouts/search/search.component';\r\nimport { LoadingBarHttpClientModule } from '@ngx-loading-bar/http-client';\r\nimport { M4ULoadingAnimationComponent } from '@ui/layouts/componentlayouts/loading-animation/loading-animation.component';\r\nimport { InjectedComponentsComponent } from '@ui/layouts/componentlayouts/injected-components/injected-components.component';\r\nimport { InjectedComponentsBaseService } from '@core/framework/injected-components-base.service';\r\nimport { AppRoutingModule } from './app-routing.module';\r\nimport { SessionService } from '@core/framework/session.service';\r\nimport { LoginGuard } from '@core/framework/login.guard';\r\nimport { ConfirmCancelGuard } from '@core/framework/confirm-cancel.guard';\r\nimport { ServiceWorkerModule } from '@angular/service-worker';\r\nimport { environment } from '../environment/environment';\r\nimport { ExceptionHandler } from '@core/exceptions/exception.handler';\r\nimport { ENVIRONMENT } from '../environment/environment.model';\r\nimport { AppConfig, APP_CONFIG } from '@configuration/app.config.model';\r\nimport { AppConfigService } from '@configuration/app.config.service';\r\nimport { LoginService } from '@core/framework/login.service';\r\nimport { LoginByOtpComponent } from '@ui/components/login/login-by-otp/login-by-otp.component';\r\nimport { CommonSettingComponent } from '@ui/components/general/commonsettings/commonsetting.component';\r\nimport { CustomizationService } from '@core/framework/customization-service';\r\nimport { NotificationEndpoint } from '@core/endpoints/notification.endpoint';\r\nimport { ShareEndpoint } from '@core/endpoints/share.endpoint';\r\nimport { FileEndpoint } from '@core/endpoints/file.endpoint';\r\nimport { RecaptchaV3Module, RECAPTCHA_V3_SITE_KEY } from 'ng-recaptcha';\r\n\r\nimport { FooterComponent } from '@ui/layouts/layout/footer/footer.component';\r\n\r\nimport { NestedOptionHost } from 'devextreme-angular';\r\n\r\nimport { TabsComponent } from '@ui/components/tabs/tabs.component';\r\nimport { LoginBaseComponent } from '@ui/components/login/base/login-base.component';\r\n\r\nimport { StatusColumnComponent } from '@ui/components/status-column/status-column.component';\r\nimport { ButtonComponent } from '@ui/components/button/button.component';\r\nimport { CredentialActivityStatusGridComponent } from '@ui/components/general/credential-activity-status/grid/credentials-activity-status-grid.component';\r\nimport { TagComponent } from '@ui/components/tag/tag.component';\r\nimport { SessionExpiredComponent } from '@m4u-angular/ui/components/session-expired/session-expired.component';\r\n\r\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\r\nimport { ScrollingModule } from '@angular/cdk/scrolling';\r\n\r\nimport { SystemOptionsService } from '@m4u-angular/core/framework/system-options.service';\r\n\r\nimport { SidebarModule } from 'primeng/sidebar';\r\nimport { CarouselModule } from 'primeng/carousel';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { InputNumberModule } from 'primeng/inputnumber';\r\nimport { GridBottomContainerComponent } from '@ui/layouts/componentlayouts/grid-bottom-container/grid-bottom-container.component';\r\nimport { ContextMenuModule } from 'primeng/contextmenu';\r\nimport { ToolbarModule } from 'primeng/toolbar';\r\nimport { PreviewDialogComponent } from '@ui/dialogs/preview-dialog/previewdialog.component';\r\n//import { IonicModule, IonicRouteStrategy } from '@ionic/angular';\r\n//import { RouteReuseStrategy } from '@angular/router';\r\nimport { SplitterModule } from 'primeng/splitter';\r\nimport { StepsModule } from 'primeng/steps';\r\nimport { M4UConfigTextBoxTooltipDirective, M4UConfigTooltipDirective } from '@ui/directives/Tooltip.directive';\r\nimport { TooltipComponent } from '@ui/components/tooltip/tooltip.component';\r\nimport { M4UConfigViewPasswordDirective } from '@ui/directives/ViewPassword.directive';\r\nimport { PushMessageListComponent } from '@ui/notifications/push-message-list/push-message-list.component';\r\nimport { PushMessageBadgeComponent } from '@ui/notifications/push-message-badge/push-message-badge.component';\r\nimport { NotificationService } from '@core/framework/notification.service';\r\nimport { NotificationServerListComponent } from '@ui/notifications/notification-server/list/notification-server-list.component';\r\nimport { NotificationServerEndpoint } from '@core/endpoints/notification-server.endpoint';\r\nimport { NotificationServerGridComponent } from '@ui/notifications/notification-server/list/notification-server-grid/notification-server-grid.component';\r\nimport { NotificationTemplateListComponent } from '@ui/notifications/notification-template/notification-template-list/notification-template-list.component';\r\nimport { NotificationTemplateGridComponent } from '@ui/notifications/notification-template/notification-template-grid/notification-template-grid.component';\r\nimport { NotificationTemplateComponent } from '@ui/notifications/notification-template/notification-template.component';\r\nimport { NotificationTemplateEndpoint } from '@core/endpoints/notification-template.endpoint';\r\nimport { NotificationDispatchEndpoint } from '@core/endpoints/notification-dispatch.endpoint';\r\nimport { NotificationConfigurationBaseService } from '@core/framework/notification-configuration-base.service';\r\nimport { NotificationDispatchComponent } from '@ui/notifications/notification-dispatch/notification-dispatch.component';\r\nimport { NotificationDispatchListComponent } from '@ui/notifications/notification-dispatch/notification-dispatch-list/notification-dispatch-list.component';\r\nimport { NotificationDispatchGridComponent } from '@ui/notifications/notification-dispatch/notification-dispatch-grid/notification-dispatch-grid.component';\r\nimport { NotificationDispatchRecipientsComponent } from '@ui/notifications/notification-dispatch/notification-dispatch-recipients/notification-dispatch-recipients.component';\r\nimport { NotificationDispatchNotificationsComponent } from '@ui/notifications/notification-dispatch/notification-dispatch-notifications/notification-dispatch-notifications.component';\r\nimport { SelectButtonModule } from 'primeng/selectbutton';\r\nimport { PushMessageComponent } from '@ui/notifications/push-message/push-message.component';\r\nimport { PushMessageToastsComponent } from '@ui/notifications/push-message-toasts/push-message-toasts.component';\r\nimport { EmailHistoryItemComponent } from '@ui/notifications/notifications-history/email-history-item/email-history-item.component';\r\nimport { PushMessageHistoryItemComponent } from '@ui/notifications/notifications-history/push-message-history-item/push-message-history-item.component';\r\nimport { SmsHistoryItemComponent } from '@ui/notifications/notifications-history/sms-history-item/sms-history-item.component';\r\nimport { HtmlBoxDialogComponent } from '@ui/dialogs/htmlbox-dialog/htmlbox-dialog.component';\r\nimport { EmailHistoryGridComponent } from '@ui/notifications/notifications-history/notification-grid/email-history-grid/email-history-grid.component';\r\nimport { SmsHistoryGridComponent } from '@ui/notifications/notifications-history/notification-grid/sms-history-grid/sms-history-grid.component';\r\nimport { PushMessageHistoryGridComponent } from '@ui/notifications/notifications-history/notification-grid/push-message-history-grid/push-message-history-grid.component';\r\nimport { PushMessageEndpoint } from '@core/endpoints/push-message.endpoint';\r\nimport { UiService } from '@core/framework/ui.service';\r\nimport { LOADING_BAR_CONFIG } from '@ngx-loading-bar/core';\r\nimport { ToastModule } from 'primeng/toast';\r\nimport { MessageService } from 'primeng/api';\r\nimport { NotificationTestDialogComponent } from '@ui/notifications/notification-test-dialog/notification-test-dialog.component';\r\nimport { NotificationPreviewDialogComponent } from '@ui/notifications/notification-preview-dialog/notification-preview-dialog.component';\r\nimport { NavBarComponent } from '@ui/layouts/layout/nav-bar/nav-bar.component';\r\nimport { MidStoreComponent } from '@m4u-angular/core/mid/mid-store.component';\r\nimport { AgmMarkerSpiderModule } from 'agm-spiderfier';\r\nimport { NotificationServerComponent } from '@ui/notifications/notification-server/notification-server.component';\r\nimport { DialogService, DynamicDialogModule } from 'primeng/dynamicdialog';\r\nimport { BottomSheetService } from '@core/framework/bottom-sheet.service';\r\nimport { BottomSheetListComponent } from '@ui/components/bottom-sheet-list/bottom-sheet-list.component';\r\nimport { PushMessageListPopupComponent } from '@ui/notifications/push-message-list-popup/push-message-list-popup.component';\r\nimport { SideBarComponent } from '@ui/layouts/layout/side-bar/side-bar.component';\r\nimport { PageFilterComponent } from '@ui/layouts/layout/page-filter/page-filter.component';\r\nimport { SidebarService } from '@core/framework/sidebar.service';\r\nimport { PortalModule } from '@angular/cdk/portal';\r\nimport { PageToolbarButtonsComponent } from '@ui/layouts/componentlayouts/page-toolbar-buttons/page-toolbar-buttons.component';\r\nimport { GridToolbarComponent } from '@m4u-angular/ui/layouts/componentlayouts/grid-toolbar/grid-toolbar.component';\r\nimport { LanguageService } from '@core/framework/language.service';\r\nimport { LocalStorageService } from '@core/framework/local-storage.service';\r\nimport { SpinLoaderComponent } from '@ui/components/spin-loader/spin-loader.component';\r\nimport { BottomSheetContextMenuComponent } from '@ui/components/bottom-sheet-context-menu/bottom-sheet-context-menu.component';\r\nimport { DemoLayoutComponent } from '@ui/demo/layouts/demo-layout/demo-layout.component';\r\nimport { DemoButtonsComponent } from '@ui/demo/components/buttons/demo-buttons.component';\r\nimport { DemoNavbarComponent } from '@ui/demo/layouts/demo-navbar/demo-navbar.component';\r\nimport { DemoEditorsComponent } from '@ui/demo/components/editors/demo-editors.component';\r\nimport { DemoLayoutsComponent } from '@ui/demo/components/layouts/demo-layouts.component';\r\nimport { DemoSectionsComponent } from '@ui/demo/components/sections/demo-sections.component';\r\nimport { DemoCardsComponent } from '@ui/demo/components/cards/demo-cards.component';\r\nimport { DemoTabsComponent } from '@ui/demo/components/tabs/demo-tabs.component';\r\nimport { DemoGridsComponent } from '@ui/demo/components/grids/demo-grids.component';\r\nimport { DemoBottomSheetsComponent } from '@ui/demo/components/bottom-sheets/demo-bottom-sheets.component';\r\nimport { BaseGridComponent } from '@base/component/BaseGridComponent';\r\nimport { DemoGridComponent } from '@ui/demo/components/grids/grid/demo-grid.component';\r\nimport { DemoPagesComponent } from '@ui/demo/components/pages/demo-pages.component';\r\nimport {\r\n DemoPageToolbarButtonsComponent\r\n} from '@ui/demo/components/pages/examples/toolbar-buttons/demo-page-toolbar-buttons.component';\r\nimport {\r\n DemoPageHeaderButtonsComponent\r\n} from '@ui/demo/components/pages/examples/header-buttons/demo-page-header-buttons.component';\r\nimport { DemoSidebarsComponent } from '@ui/demo/components/sidebars/demo-sidebars.component';\r\nimport { DemoDialogsComponent } from '@ui/demo/components/dialogs/demo-dialogs.component';\r\nimport { DemoSimpleDialogComponent } from '@ui/demo/components/dialogs/simple-dialog/demo-simple-dialog.component';\r\nimport { DemoPipesComponent } from '@ui/demo/components/pipes/demo-pipes.component';\r\nimport { DemoComponentsComponent } from '@ui/demo/components/components/demo-components.component';\r\nimport { BreadcrumbComponent } from '@ui/components/breadcrumb/breadcrumb.component';\r\nimport { RouteHistoryService } from '@core/framework/route-history.service';\r\nimport { CredentialActivityEndpoint } from '@core/endpoints/credential-activity.endpoint';\r\nimport { CredentialLoginHistoryComponent } from '@ui/components/general/credential-login-history/credential-login-history.component';\r\nimport {\r\n CredentialLoginHistoryGridComponent\r\n} from '@ui/components/general/credential-login-history/grid/credential-login-history-grid.component';\r\nimport { ProgressSpinnerModule } from 'primeng/progressspinner';\r\nimport { PdfViewerComponent } from '@ui/components/pdf-viewer/pdf-viewer.component';\r\nimport { SliderModule } from 'primeng/slider';\r\nimport { RequestHistoryListComponent } from '@ui/components/general/request-history/request-history-list/request-history-list.component';\r\nimport { WebAPICredentialEndpoint } from '@core/endpoints/webapi-credential.endpoint';\r\nimport { RequestHistoryGridComponent } from '@ui/components/general/request-history/request-history-grid/request-history-grid.component';\r\nimport { WebAPIRequestEndpoint } from '@core/endpoints/webapi-request.endpoint';\r\nimport { RequestHistoryComponent } from '@ui/components/general/request-history/request-history.component';\r\nimport { WelcomeUserDialogComponent } from '@ui/components/password/password-manage/welcome-user-dialog/welcome-user-dialog.component';\r\nimport { HistoryViewGridComponent } from '@m4u-angular/ui/components/general/history-view/grid/historyview-grid.component';\r\nimport { TimelineModule } from 'primeng/timeline';\r\nimport { EntityService } from '@core/framework/entity.service';\r\nimport { TotalBalanceCardComponent } from '@ui/components/total-balance-card/total-balance-card.component';\r\nimport * as UIComponents from '@ui/components';\r\nimport { EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BottomSheetDialogComponent } from '@ui/dialogs/bottom-sheet-dialog/bottom-sheet-dialog.component';\r\nimport { SystemCredentialsComponent } from '@ui/components/general/system-credentials/system-credentials.component';\r\nimport { SystemCredentialsGridComponent }\r\n from '@ui/components/general/system-credentials/system-credentials-grid/system-credentials-grid.component';\r\nimport { SystemCredentialsCreationComponent }\r\n from '@ui/components/general/system-credentials-creation/system-credentials-creation.component';\r\nimport { SystemCredentialsCreationGridComponent }\r\n from '@ui/components/general/system-credentials-creation/system-credentials-creation-grid/system-credentials-creation-grid.component';\r\nimport { WelcomeMessageConfigDialogComponent } from '@ui/dialogs/welcome-message-config-dialog/welcome-message-config-dialog.component';\r\nimport { DataViewListComponent } from '@ui/components/general/data-views/data-view-list.component';\r\nimport { DataViewGridComponent } from '@ui/components/general/data-views/data-views-grid/data-view-grid.component';\r\nimport { DataEditorEndpoint } from '@core/endpoints/data-editor.endpoint';\r\nimport { SystemCredentialsEndpoint } from '@core/endpoints/system-credentials.endpoint';\r\nimport { ContextMenuService } from '@core/framework/context-menu.service';\r\nimport { GalleriaModule } from 'primeng/galleria';\r\nimport { M4UConfigPivotGridDirective} from '../base/pivotgrid/PivotGrid.directive';\r\nimport { SwitchButton } from '@ui/components/switch-button/switch-button.component';\r\nimport { ClientFingerprintService } from '@core/framework/client-fingerprint.service';\r\nimport { ShareDialogComponent } from '@ui/dialogs/share-dialog/share-dialog.component';\r\nimport { SharingHistoryGridComponent } from '@ui/notifications/notifications-history/notification-grid/sharing-history-grid/sharing-history-grid.component';\r\nimport { ShareService } from '@core/framework/share.service';\r\nimport { LogsComponent } from '@ui/components/logs/logs.component';\r\nimport { LogGridComponent } from '@ui/components/logs/log-grid/log-grid.component';\r\nimport { LogEndpoint } from '@m4u-angular/core/endpoints/log.endpoint';\r\n\r\n//Components to be used by application\r\nexport const ReusableComponents: any =\r\n [\r\n //Field layouts\r\n SectionComponent,\r\n FieldFormComponent,\r\n FieldFormComponentX,\r\n FieldDetailComponent,\r\n FieldDetailComponentX,\r\n\r\n //UI Enahncements\r\n M4UCardComponent,\r\n M4ULinkComponent,\r\n M4USearchComponent,\r\n PageButtonsComponent,\r\n CollapsibleGroupComponent,\r\n GridBottomContainerComponent,\r\n GridButtonAddComponent,\r\n GridButtonRemoveComponent,\r\n CaptchaComponent,\r\n AttachedFilesComponent,\r\n FileCardComponent,\r\n M4ULoadingAnimationComponent,\r\n TabsComponent,\r\n ButtonComponent,\r\n TagComponent,\r\n SessionExpiredComponent,\r\n TooltipComponent,\r\n ...Object.values(UIComponents),\r\n\r\n //Dialogs\r\n SelectBoxDialogComponent,\r\n InputBoxDialogComponent,\r\n MessageBoxDialogComponent,\r\n PrintBoxDialogComponent,\r\n SignBoxDialogComponent,\r\n SignBoxComponent,\r\n ImageBoxDialogComponent,\r\n PhotoBoxDialogComponent,\r\n FileBoxDialogComponent,\r\n PreviewDialogComponent,\r\n BarcodeBoxDialogComponent,\r\n WelcomeUserDialogComponent,\r\n BottomSheetDialogComponent,\r\n WelcomeMessageConfigDialogComponent,\r\n ShareDialogComponent,\r\n\r\n //Main components\r\n AppComponent,\r\n NullComponent,\r\n PageLayoutComponent,\r\n\r\n //Misc directives\r\n M4UCustomBuildDirective,\r\n ThrottleEventDirective,\r\n M4URequiredDirectiveTextBox,\r\n M4URequiredDirectiveNumberBox,\r\n M4URequiredDirectiveSelectBox,\r\n M4URequiredDirectiveCheckBox,\r\n M4URequiredDirectiveRadioGroup,\r\n M4URequiredDirectiveDateBox,\r\n M4URequiredDirectiveColumn,\r\n M4URequiredDirectiveTextArea,\r\n M4URequiredDirectiveTagBox,\r\n M4URouterLinkEx,\r\n M4URouterLinkExWithHref,\r\n M4UStopClickPropagation,\r\n M4UFieldEmptyDirective,\r\n M4UFieldXEmptyDirective,\r\n GridWrapperDirective,\r\n M4UViewContainerDirective,\r\n M4UContextMenuDirective,\r\n\r\n //Format directives\r\n M4UConfigMonthYearDirective,\r\n M4UConfigYearDirective,\r\n M4UConfigTimeDirective,\r\n M4UFormatSumDirective,\r\n M4UFormatPriceDirective,\r\n M4UFormatRoundedPriceDirective,\r\n M4UFormatQuantityDirective,\r\n M4UFormatPercentDirective,\r\n M4UFormatRateDirective,\r\n M4UFormatGeneralDirective,\r\n M4UFormatCurrencyDirective,\r\n M4UMultiEmailDirective,\r\n FormatPriceWithCurrencyDirective,\r\n\r\n //Config directives\r\n M4UConfigSearchDirective,\r\n M4UConfigGridDirective,\r\n M4UConfigEntitySourceDirectiveSelectBox,\r\n M4UConfigEntitySourceDirectiveTagBox,\r\n M4UConfigEntitySourceLookupColumn,\r\n M4UConfigBooleanColumnDirective,\r\n M4UConfigTooltipDirective,\r\n M4UConfigTextBoxTooltipDirective,\r\n M4UConfigViewPasswordDirective,\r\n M4UListWithPagination,\r\n M4UFieldLinkDirective,\r\n M4ULinkColumnDirective,\r\n M4UConfigServerSideCustomFilterDirective,\r\n M4UConfigPivotGridDirective,\r\n\r\n //Pipes\r\n ...Object.values(pipes),\r\n ArrayOrderByPipe,\r\n SafePipe,\r\n StringBrPipe,\r\n FileSizePipe,\r\n AbsPipe,\r\n FormatPriceWithCurrencyPipe,\r\n CommonSettingComponent,\r\n\r\n StatusColumnComponent,\r\n SystemOptionComponent,\r\n AddSystemOptionDialogComponent,\r\n SystemOptionsListComponent,\r\n BottomSheetListComponent,\r\n BottomSheetContextMenuComponent,\r\n PageToolbarButtonsComponent,\r\n SpinLoaderComponent,\r\n BreadcrumbComponent,\r\n PdfViewerComponent,\r\n TotalBalanceCardComponent,\r\n SwitchButton\r\n ];\r\n//System components - no need to re-export\r\nexport const SystemComponents: any =\r\n [\r\n LoginBaseComponent,\r\n LoginComponent,\r\n LoginOAuthComponent,\r\n LogoutComponent,\r\n SessionExpireComponent,\r\n PasswordChangeComponent,\r\n PasswordChangeExpiredComponent,\r\n PasswordRecoveryComponent,\r\n PasswordWelcomeComponent,\r\n ExceptionComponent,\r\n ComingSoonComponent,\r\n MainLayoutComponent,\r\n EmptyLayoutComponent,\r\n ToolbarComponent,\r\n ProgressPanelComponent,\r\n NavMenuComponent,\r\n NavBarComponent,\r\n MenuButtonListComponent,\r\n CredentialsActivityStatusComponent,\r\n CredentialActivityStatusGridComponent,\r\n NotificationsHistoryComponent,\r\n NotificationViewComponent,\r\n NotificationGridComponent,\r\n EmailHistoryGridComponent,\r\n SmsHistoryGridComponent,\r\n SharingHistoryGridComponent,\r\n PushMessageHistoryGridComponent,\r\n PushMessageListComponent,\r\n PushMessageListPopupComponent,\r\n PushMessageBadgeComponent,\r\n PushMessageComponent,\r\n PushMessageToastsComponent,\r\n EmailHistoryItemComponent,\r\n HtmlBoxDialogComponent,\r\n NotificationPreviewDialogComponent,\r\n NotificationTestDialogComponent,\r\n PushMessageHistoryItemComponent,\r\n SmsHistoryItemComponent,\r\n PasswordManageComponent,\r\n LoginByOtpComponent,\r\n InjectedComponentsComponent,\r\n FooterComponent,\r\n NotificationServerComponent,\r\n NotificationServerListComponent,\r\n NotificationServerGridComponent,\r\n NotificationTemplateListComponent,\r\n NotificationTemplateGridComponent,\r\n NotificationTemplateComponent,\r\n NotificationDispatchComponent,\r\n NotificationDispatchListComponent,\r\n NotificationDispatchGridComponent,\r\n NotificationDispatchRecipientsComponent,\r\n NotificationDispatchNotificationsComponent,\r\n PasswordTooltipComponent,\r\n SystemOptionsComponent,\r\n MidStoreComponent,\r\n SideBarComponent,\r\n PageFilterComponent,\r\n GridToolbarComponent,\r\n CredentialLoginHistoryComponent,\r\n CredentialLoginHistoryGridComponent,\r\n RequestHistoryListComponent,\r\n RequestHistoryGridComponent,\r\n RequestHistoryComponent,\r\n HistoryViewComponent,\r\n HistoryViewGridComponent,\r\n SystemCredentialsComponent,\r\n SystemCredentialsGridComponent,\r\n SystemCredentialsCreationComponent,\r\n SystemCredentialsCreationGridComponent,\r\n DataViewListComponent,\r\n DataViewGridComponent,\r\n LogsComponent,\r\n LogGridComponent\r\n ];\r\n\r\nconst SystemEndpoints: any =\r\n [\r\n LoginEndpoint,\r\n GenericListEndpoint,\r\n SystemEndpoint,\r\n NotificationEndpoint,\r\n NotificationServerEndpoint,\r\n NotificationTemplateEndpoint,\r\n NotificationDispatchEndpoint,\r\n PushMessageEndpoint,\r\n CredentialActivityEndpoint,\r\n WebAPICredentialEndpoint,\r\n WebAPIRequestEndpoint,\r\n HistoryEndpoint,\r\n DataEditorEndpoint,\r\n SystemCredentialsEndpoint,\r\n SystemOptionsEndpoint,\r\n ShareEndpoint,\r\n FileEndpoint,\r\n LogEndpoint\r\n ];\r\n\r\n//System services - need to provide only\r\nconst SystemServices: any =\r\n [\r\n LoginGuard,\r\n ConfirmCancelGuard,\r\n LoginService,\r\n SessionService,\r\n APIGatewayService,\r\n DevExpressService,\r\n FrameworkService,\r\n SysEnumsService,\r\n ResourcesService,\r\n ServiceBagService,\r\n NativeNotificationsService,\r\n NavigatorService,\r\n SysEventsService,\r\n ScreenService,\r\n InjectedComponentsBaseService,\r\n AppConfigService,\r\n CustomizationService,\r\n NestedOptionHost,\r\n DeviceDetectorService,\r\n SystemOptionsService,\r\n NotificationService,\r\n NotificationConfigurationBaseService,\r\n UiService,\r\n MessageService,\r\n DialogService,\r\n BottomSheetService,\r\n SidebarService,\r\n LanguageService,\r\n LocalStorageService,\r\n RouteHistoryService,\r\n EntityService,\r\n TransferState,\r\n ContextMenuService,\r\n ClientFingerprintService,\r\n ShareService,\r\n { provide: HTTP_INTERCEPTORS, useClass: APIGatewayInterceptor, multi: true },\r\n { provide: APP_INITIALIZER, useFactory: OnInitializeFramework, multi: true }\r\n ];\r\n\r\n//Angular modules - need to re-export\r\nconst BuiltInModules: any =\r\n [\r\n BrowserModule,\r\n CommonModule,\r\n FormsModule,\r\n InjectorModule,\r\n HttpClientModule,\r\n BrowserAnimationsModule,\r\n M4UDevExpressModule,\r\n PdfJsViewerModule,\r\n SignaturePadModule,\r\n RecaptchaModule,\r\n LoadingBarHttpClientModule,\r\n InfiniteScrollModule,\r\n ScrollingModule,\r\n SidebarModule,\r\n CarouselModule,\r\n ButtonModule,\r\n InputNumberModule,\r\n ContextMenuModule,\r\n ToolbarModule,\r\n SplitterModule,\r\n StepsModule,\r\n SelectButtonModule,\r\n ToastModule,\r\n DynamicDialogModule,\r\n ProgressSpinnerModule,\r\n TimelineModule,\r\n SliderModule,\r\n GalleriaModule\r\n ];\r\n\r\nconst DemoComponents: any =\r\n [\r\n DemoLayoutComponent,\r\n DemoNavbarComponent,\r\n DemoButtonsComponent,\r\n DemoEditorsComponent,\r\n DemoLayoutsComponent,\r\n DemoComponentsComponent,\r\n DemoSectionsComponent,\r\n DemoCardsComponent,\r\n DemoTabsComponent,\r\n DemoGridsComponent,\r\n DemoGridComponent,\r\n DemoBottomSheetsComponent,\r\n DemoPagesComponent,\r\n DemoPageToolbarButtonsComponent,\r\n DemoPageHeaderButtonsComponent,\r\n DemoSidebarsComponent,\r\n DemoDialogsComponent,\r\n DemoSimpleDialogComponent,\r\n DemoPipesComponent\r\n ];\r\n\r\nconst appConfig: AppConfig = AppConfigService.loadConfig();\r\nconst m4uConfig = AppConfigService.loadM4UConfig();\r\n\r\nexport function IsRegisterServiceWorker(): boolean {\r\n if (!environment.production) return false;\r\n if (location.protocol != 'https:') return false;\r\n if (!m4uConfig.isRegisterServiceWorker) return false;\r\n return true;\r\n}\r\n\r\n@NgModule({\r\n imports: [\r\n //IonicModule.forRoot(),\r\n BuiltInModules,\r\n AppRoutingModule,\r\n SidebarModule,\r\n PortalModule,\r\n AgmCoreModule.forRoot({ apiKey: m4uConfig.googleMapsApiKey, language: 'iw', region: 'IL' }),\r\n ServiceWorkerModule.register('ngsw-worker.js', { enabled: IsRegisterServiceWorker() }),\r\n AgmMarkerSpiderModule,\r\n RecaptchaV3Module\r\n ],\r\n declarations: [SystemComponents, ReusableComponents, m4uConfig.isDemoEnabled ? DemoComponents : [], ...appConfig.Components],\r\n entryComponents: appConfig.EntryComponents,\r\n exports: [BuiltInModules, AgmCoreModule, ReusableComponents],\r\n providers: [\r\n SystemEndpoints,\r\n SystemServices,\r\n { provide: ErrorHandler, useClass: ExceptionHandler },\r\n { provide: ENVIRONMENT, useValue: environment },\r\n { provide: LOCALE_ID, useValue: m4uConfig.defaultLocale ?? 'he-IL' },\r\n //{ provide: RouteReuseStrategy, useClass: IonicRouteStrategy },\r\n { provide: EMPTY_STRING_TOKEN, useValue: '' },\r\n { provide: APP_BASE_HREF, useValue: m4uConfig.deploymentLocation },\r\n { provide: APP_CONFIG, useValue: appConfig },\r\n { provide: LOADING_BAR_CONFIG, useValue: { latencyThreshold: 100 } },\r\n ...appConfig.Endpoints,\r\n ...appConfig.Services,\r\n { provide: RECAPTCHA_V3_SITE_KEY, useValue: m4uConfig.reCAPTCHAv3Key }\r\n ],\r\n bootstrap: [AppComponent],\r\n schemas: [CUSTOM_ELEMENTS_SCHEMA]\r\n})\r\nexport class M4UAngularModule {\r\n}\r\n","import { enableProdMode } from '@angular/core';\r\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\r\nimport { environment } from './environment/environment';\r\nimport { M4UAngularModule } from './_modules/m4uangular.module';\r\nimport themes from 'devextreme/ui/themes';\r\nif (environment.production) {\r\n enableProdMode();\r\n}\r\n\r\n//Dispatch 'applicationStarted' event\r\n//Syntax was adapted to work in the IE browser\r\nvar event = document.createEvent('Event');\r\nevent.initEvent('applicationStarted', true, true);\r\ndocument.dispatchEvent(event);\r\n\r\nthemes.initialized(() => {\r\n platformBrowserDynamic().bootstrapModule(M4UAngularModule)\r\n .then(() => {\r\n //Dispatch 'applicationLoaded' event\r\n //Syntax was adapted to work in the IE browser\r\n var event = document.createEvent('Event');\r\n event.initEvent('applicationLoaded', true, true);\r\n document.dispatchEvent(event);\r\n })\r\n .catch(err => console.error(err));\r\n});","export default \"
\\r\\n
\\r\\n \\r\\n \\r\\n
{{contextMenu.text || contextMenu.label}}
\\r\\n
\\r\\n
\";","import { Component } from '@angular/core';\r\nimport { ContextMenuElement } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { IBottomSheetComponent } from '@m4u-angular/core/framework/bottom-sheet.service';\r\nimport { BottomSheetDialogComponent } from '@m4u-angular/ui/dialogs/bottom-sheet-dialog/bottom-sheet-dialog.component';\r\n\r\n@Component({\r\n selector: 'app-bottom-sheet-context-menu',\r\n templateUrl: './bottom-sheet-context-menu.component.html',\r\n styleUrls: ['./bottom-sheet-context-menu.component.scss']\r\n})\r\nexport class BottomSheetContextMenuComponent implements IBottomSheetComponent {\r\n MenuItems: ContextMenuElement[];\r\n Context: BottomSheetDialogComponent;\r\n get MenuItemsFiltered() {\r\n return this.MenuItems?.filter(x => !(x as any).separator);\r\n }\r\n\r\n constructor() {}\r\n\r\n OnItemClick(contextMenu) {\r\n contextMenu.onClick && contextMenu.onClick() \r\n || contextMenu.command && contextMenu.command();\r\n this.Context.ClosePage();\r\n }\r\n}\r\n","export default \"
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n {{ GetItemText(data) }}\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\";","import { Component, Input, ViewChild } from '@angular/core';\r\nimport { BottomSheetListParams, IBottomSheetComponent } from '@m4u-angular/core/framework/bottom-sheet.service';\r\nimport { BottomSheetDialogComponent } from '@m4u-angular/ui/dialogs/bottom-sheet-dialog/bottom-sheet-dialog.component';\r\nimport { DxListComponent } from 'devextreme-angular';\r\n\r\n@Component({\r\n selector: 'app-bottom-sheet-list',\r\n templateUrl: './bottom-sheet-list.component.html',\r\n styleUrls: ['./bottom-sheet-list.component.scss']\r\n})\r\nexport class BottomSheetListComponent implements IBottomSheetComponent {\r\n @Input() ListParams: BottomSheetListParams;\r\n @ViewChild('list') list: DxListComponent;\r\n\r\n Context: BottomSheetDialogComponent;\r\n get IsGrouped(): boolean {\r\n const data = Array.isArray(this.ListParams.DataSource) ? this.ListParams.DataSource : (this.ListParams.DataSource as any).items();\r\n return data.some(x => x.key && x.items);\r\n }\r\n\r\n FilteredDataSource: any[];\r\n\r\n constructor() {\r\n }\r\n\r\n OnItemClick(e) {\r\n if (this.ListParams.IsMultiSelection) return;\r\n\r\n const selectedValue = e.itemData[this.ListParams.ValueExpr];\r\n this.CompleteSelection(e?.event, selectedValue);\r\n }\r\n\r\n ApplySelection(e) {\r\n const selectedValue = this.list.selectedItemKeys;\r\n this.CompleteSelection(e?.event, selectedValue);\r\n }\r\n\r\n private CompleteSelection(event, selectedValue) {\r\n if (this.Context)\r\n this.Context.OnClose() && this.Context.CloseDialogWithSuccess({ event: event, value: selectedValue });\r\n else\r\n this.ListParams.OnCompleted({ event: event, value: selectedValue });\r\n }\r\n\r\n GetBankIcon = (iconName: string) => {\r\n return `assets/projects/kraken/${iconName}`;\r\n };\r\n\r\n GetItemText = (data) => {\r\n return data.key\r\n || (typeof (this.ListParams.DisplayExpr) === 'function' ? this.ListParams.DisplayExpr(data) : data[this.ListParams.DisplayExpr]);\r\n };\r\n\r\n OnSearch(e) {\r\n const dataSource = this.ListParams.DataSource as any;\r\n if (!Array.isArray(dataSource)) {\r\n const filter = this.ListParams.SearchExpr\r\n .map(expr => [expr, 'contains', e])\r\n .reduce((acc, curr) => acc.length === 0 ? [curr] : [...acc, 'or', curr], []);\r\n dataSource.filter(filter);\r\n dataSource.load();\r\n return;\r\n }\r\n const originalDataSource = this.ListParams.DataSource as any[];\r\n this.FilteredDataSource = e.length\r\n ? originalDataSource.filter(x => this.ListParams.SearchExpr.some(expr => {\r\n return x[expr] ? x[expr].toLowerCase().includes(e.toLowerCase()) : false\r\n }))\r\n : undefined;\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\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 { 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\";","import { CdkPortalOutletAttachedRef, Portal } from '@angular/cdk/portal';\r\nimport { Component, ComponentFactoryResolver, ComponentRef, EmbeddedViewRef, Input, TemplateRef, Type, ViewChild, ViewContainerRef } from '@angular/core';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumPageDisplayModes, EnumPageEntitySources, EnumWindowSizes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { PageLayoutComponent } from '@m4u-angular/ui/layouts/layout/page-layout/pagelayout.component';\r\nimport { DeviceDetectorService } from 'ngx-device-detector';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-bottom-sheet-dialog',\r\n templateUrl: './bottom-sheet-dialog.component.html',\r\n styleUrls: ['./bottom-sheet-dialog.component.scss']\r\n})\r\nexport class BottomSheetDialogComponent extends BasePageComponent {\r\n\r\n @ViewChild('bottomSheetContent', { read: ViewContainerRef }) containerRef: ViewContainerRef;\r\n\r\n @Input() ContentPortal: Portal;\r\n @Input() ContentParams: any;\r\n @Input() Title: string;\r\n @Input() Height: EnumWindowSizes;\r\n @Input() Class: string;\r\n\r\n @ViewChild('page') pageLayout: PageLayoutComponent;\r\n\r\n constructor(A: ServiceBagService,\r\n private deviceDetector: DeviceDetectorService) {\r\n super(A, 'BottomSheetDialogComponent', BaseEntity, BaseState, EnumPageDisplayModes.BottomSheet, EnumPageEntitySources.External);\r\n }\r\n\r\n protected override OnInitTitle(): string {\r\n return this.Title;\r\n }\r\n\r\n Repaint() {\r\n setTimeout(() => this.pageLayout?.popup?.instance?.repaint(), 200);\r\n }\r\n\r\n ContentAttached(ref: CdkPortalOutletAttachedRef) {\r\n (ref as any).context = {\r\n $implicit: this\r\n };\r\n if (this.ContentParams && ref instanceof ComponentRef) {\r\n Object.entries(this.ContentParams).forEach(([key, value]) => {\r\n ref.instance[key] = value;\r\n });\r\n }\r\n\r\n if (this.deviceDetector.device === 'iPhone') this.Repaint();\r\n }\r\n\r\n}\r\n","export default \"\\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\";","import { Component, Input } from '@angular/core';\r\nimport { BaseEntity, BaseState } from '@base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { EnumPageDisplayModes, EnumPageEntitySources, EnumWindowSizes } from '@core/framework/sysenums.enum';\r\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\r\n\r\nclass State extends BaseState {\r\n ImageSource: string | SafeUrl;\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-imageboxdialog',\r\n templateUrl: './imageboxdialog.component.html',\r\n styleUrls: ['./imageboxdialog.component.scss']\r\n})\r\nexport class ImageBoxDialogComponent extends BasePageComponent\r\n{\r\n @Input() set ImageSource(value: string | Blob) {\r\n this.State.ImageSource = typeof value === 'string' ? value : this.sanitizer.bypassSecurityTrustUrl(window.URL.createObjectURL(value));\r\n }\r\n @Input() Title: string;\r\n @Input() ShowLargeWindow: boolean = false;\r\n \r\n WindowHeight: EnumWindowSizes = EnumWindowSizes.WindowLarge;\r\n WindowWidth: EnumWindowSizes = EnumWindowSizes.WindowMedium;\r\n\r\n constructor(A: ServiceBagService, private sanitizer: DomSanitizer)\r\n {\r\n super(A, 'ImageBoxDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n\r\n // If custom title was set, return it\r\n override OnInitTitle(): string\r\n {\r\n if (this.Title == undefined) return this.GetDefaultTitle();\r\n return this.GetDefaultTitle() + ' - ' + this.Title;\r\n }\r\n\r\n override OnInitComponent() {\r\n if (this.ShowLargeWindow) {\r\n this.WindowHeight = this.WindowWidth = EnumWindowSizes.WindowXLarge;\r\n }\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\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 } 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\";","import { Component, Input, ViewChild, EventEmitter, Output } from '@angular/core';\r\nimport { BaseEntity } from '@base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { EnumLanguages, EnumPageDisplayModes, EnumPageEntitySources } from '@core/framework/sysenums.enum';\r\nimport { SysGlobals } from '@core/framework/sysglobals';\r\nimport { Utils } from '@core/helpers/Utils';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { PdfViewerComponent } from '@m4u-angular/ui/components/pdf-viewer/pdf-viewer.component';\r\n\r\nclass State {\r\n PDFData: any\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-printboxdialog',\r\n templateUrl: './printboxdialog.component.html',\r\n styleUrls: ['./printboxdialog.component.scss']\r\n})\r\nexport class PrintBoxDialogComponent extends BasePageComponent\r\n{\r\n @ViewChild('pdfViewer') pdfViewer: PdfViewerComponent;\r\n\r\n //Main property to store the data. Since additional operation needs to take place, use this method instead of state directly\r\n @Input() set PDFData(value: string | Blob) {\r\n if (typeof value === 'string') value = Utils.ConvertToBlob(value, 'application/pdf');\r\n this.State.PDFData = value;\r\n }\r\n\r\n @Input() FileName: string;\r\n @Input() Title: string;\r\n @Output() OnCustomPrint: EventEmitter = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'PrintBoxDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n\r\n //If custom title was set, return it\r\n override OnInitTitle(): string {\r\n if (this.Title == undefined) return undefined;\r\n return this.GetDefaultTitle() + ' - ' + this.Title;\r\n }\r\n\r\n protected OnGetToolbarSettings() {\r\n return {\r\n IsAllowPrint: true,\r\n OnPrintButtonClick: (e) => this.DoPrint()\r\n } as ToolbarSettings;\r\n }\r\n\r\n DoPrint() {\r\n if (this.OnCustomPrint.observers.length > 0) {\r\n //Emit custom event\r\n this.OnCustomPrint.emit();\r\n return;\r\n }\r\n //Send to print\r\n this.pdfViewer.instance.iframe.nativeElement.contentWindow.print();\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
{{'lblShareMethodEmail' | RC:THIS}}
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
{{'lblShareMethodSms' | RC:THIS}}
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
{{'lblShareMethodWhatsapp' | RC:THIS}}
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
{{'lblShareMethodPrint' | RC:THIS}}
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
{{'lblShareMethodDownload' | RC:THIS}}
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
{{'lblShareMethodShare' | RC:THIS}}
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\";","import { Component, Input, ViewChild } from '@angular/core';\r\nimport { AttachedFile, BaseEntity, BaseEntityResponse, BaseResponse, FileView, SharingInformation, NotificationTemplateListView, RenderedTemplate } from '@base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { EnumNotificationDeliveryOptions, EnumNotificationTemplateEditingMode, EnumPageDisplayModes, EnumPageEntitySources, EnumPrintingType } from '@core/framework/sysenums.enum';\r\nimport { BaseEndpointCRUD } from '@base/endpoint/BaseEndpointCRUD';\r\nimport { PrintBoxDialogComponent } from '../printbox-dialog/printboxdialog.component';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { Observable } from 'rxjs';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { NotificationPreviewDialogComponent } from '../../notifications/notification-preview-dialog/notification-preview-dialog.component';\r\n\r\nclass State {\r\n IsSupportSharing: boolean;\r\n IsSupportEmail: boolean;\r\n IsSupportSMS: boolean;\r\n IsSupportWhatsapp: boolean;\r\n PageTemplates: NotificationTemplateListView[] = [];\r\n SelectedTemplates: NotificationTemplateListView[] = [];\r\n SelectedTemplate: NotificationTemplateListView;\r\n SelectedTemplateID: number;\r\n DeliveryOption: EnumNotificationDeliveryOptions;\r\n SharingInformation = new SharingInformation;\r\n PreviewBody: any;\r\n IsShareByEntities: boolean;\r\n IsReportAndEntity: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-share-dialog',\r\n templateUrl: './share-dialog.component.html',\r\n styleUrls: ['./share-dialog.component.scss']\r\n})\r\nexport class ShareDialogComponent extends BasePageComponent {\r\n\r\n @Input() ShareEntityType: string;\r\n @Input() PageName: string;\r\n @Input() GetRenderedTemplate: (notificationTemplateID: number, deliveryOption: EnumNotificationDeliveryOptions) => Observable>;\r\n @Input() Share: (sharingInformation: SharingInformation) => Observable>;\r\n\r\n @ViewChild(PrintBoxDialogComponent) printBoxDialog: PrintBoxDialogComponent;\r\n @ViewChild('previewDialog') previewDialog: NotificationPreviewDialogComponent;\r\n\r\n constructor(A: ServiceBagService, private sanitizer: DomSanitizer) {\r\n super(A, 'ShareDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n\r\n protected override OnInitComponentFinished() {\r\n this.State.PageTemplates = this.A.ShareService.GetNotificationTemplatesByPageAndEntity(this.PageName, this.ShareEntityType);\r\n this.State.IsReportAndEntity = this.State.PageTemplates.some(x => x.EntityBindingPageType == EnumPrintingType.Report)\r\n && this.State.PageTemplates.some(x => x.EntityBindingPageType == EnumPrintingType.Entity);\r\n\r\n this.State.IsSupportEmail = this.State.PageTemplates.some(x => x.IsSupportEmail);\r\n this.State.IsSupportSharing = this.State.PageTemplates.some(x => x.IsSupportSharing);\r\n this.State.IsSupportSMS = this.State.PageTemplates.some(x => x.IsSupportSMS);\r\n this.State.IsSupportWhatsapp = this.State.PageTemplates.some(x => x.IsSupportWhatsapp);\r\n }\r\n\r\n IsEmail = () => this.State.DeliveryOption == EnumNotificationDeliveryOptions.Email;\r\n IsSms = () => this.State.DeliveryOption == EnumNotificationDeliveryOptions.SMS;\r\n IsWhatsApp = () => this.State.DeliveryOption == EnumNotificationDeliveryOptions.WhatsApp;\r\n IsPrint = () => this.State.DeliveryOption == EnumNotificationDeliveryOptions.Print;\r\n IsExport = () => this.State.DeliveryOption == EnumNotificationDeliveryOptions.ExportToPDF;\r\n IsShareMobile = () => !this.State.DeliveryOption && this.State.SelectedTemplates?.length > 0;\r\n\r\n IsEditBodyMode = () => this.State.SelectedTemplate.EditingMode == EnumNotificationTemplateEditingMode.EditBody;\r\n IsEditPrefixMode = () => this.State.SelectedTemplate.EditingMode == EnumNotificationTemplateEditingMode.EditPrefix;\r\n IsPreviewMode = () => this.State.SelectedTemplate.EditingMode == EnumNotificationTemplateEditingMode.Preview;\r\n IsHideBodyMode = () => this.State.SelectedTemplate.EditingMode == EnumNotificationTemplateEditingMode.None;\r\n\r\n OnShareMethodChosen(deliveryOptions: EnumNotificationDeliveryOptions) {\r\n this.State.DeliveryOption = deliveryOptions;\r\n this.State.SelectedTemplate = null;\r\n this.State.SelectedTemplateID = null;\r\n this.State.SharingInformation = new SharingInformation;\r\n\r\n this.FilterTemplates();\r\n\r\n if (this.State.SelectedTemplates.length == 1) {\r\n this.State.SelectedTemplate = this.State.SelectedTemplates[0];\r\n this.State.SelectedTemplateID = this.State.SelectedTemplates[0].EntryID;\r\n this.SetRenderedTemplate();\r\n }\r\n }\r\n\r\n OnNotificationTemplateSelected(e) {\r\n this.State.SelectedTemplate = this.State.SelectedTemplates.find(x => x.EntryID == e.value);\r\n if (!this.State.SelectedTemplate) return;\r\n\r\n this.SetRenderedTemplate();\r\n }\r\n\r\n ShareOnMobile() {\r\n this.ShareBase((fileView) => {\r\n const file = new File([Uint8Array.from(fileView.FileData)], fileView.FullName, { type: fileView.ContentType });\r\n\r\n navigator.share({\r\n title: this.RC('lblShareToApplication'),\r\n files: [file],\r\n } as ShareData);\r\n\r\n this.CloseDialogWithSuccess();\r\n }, false);\r\n }\r\n\r\n OnShowPreview() {\r\n this.previewDialog.HTMLBody = this.State.SharingInformation.Body;\r\n this.previewDialog.ShowDialogShort(() => { });\r\n }\r\n\r\n OnShowForEntitiesChanged(e) {\r\n if (!e?.event || !this.State.IsReportAndEntity) return;\r\n this.FilterTemplates();\r\n\r\n if (this.State.SelectedTemplates.length == 1) {\r\n this.State.SelectedTemplate = this.State.SelectedTemplates[0];\r\n this.State.SelectedTemplateID = this.State.SelectedTemplates[0].EntryID;\r\n this.SetRenderedTemplate();\r\n }\r\n else {\r\n this.State.SelectedTemplateID = null;\r\n this.State.SelectedTemplate = null;\r\n }\r\n }\r\n\r\n Print() {\r\n this.ShareBase((fileView) => {\r\n this.printBoxDialog.PDFData = Utils.ConvertToBase64(fileView.FileData);\r\n this.printBoxDialog.ShowDialogShort(() => { });\r\n }, false);\r\n }\r\n\r\n Download() {\r\n this.ShareBase((fileView) => {\r\n const file = new AttachedFile;\r\n file.Extension = fileView.Extension;\r\n file.Name = fileView.Name;\r\n Utils.DoFileDownload(file, Utils.ConvertToBase64(fileView.FileData), fileView.ContentType);\r\n this.CloseDialogWithSuccess();\r\n }, true);\r\n }\r\n\r\n GetSubmitButtonName() {\r\n switch (this.State.DeliveryOption) {\r\n case EnumNotificationDeliveryOptions.ExportToPDF:\r\n return this.RC('genDownload');\r\n case EnumNotificationDeliveryOptions.Print:\r\n return this.RC('genPrint');\r\n case EnumNotificationDeliveryOptions.SMS:\r\n case EnumNotificationDeliveryOptions.WhatsApp:\r\n case EnumNotificationDeliveryOptions.Email:\r\n return this.RC('btnSend');\r\n }\r\n\r\n return this.RC('btnShare');\r\n }\r\n\r\n OnSend() {\r\n if (!this.Share) return;\r\n this.State.SharingInformation.DeliveryOption = this.State.DeliveryOption;\r\n this.State.SharingInformation.NotificationTempalteID = this.State.SelectedTemplateID;\r\n this.Do(this.Share(this.State.SharingInformation), true, response => {\r\n this.CloseDialogWithSuccess();\r\n });\r\n }\r\n\r\n OnSubmit() {\r\n switch (this.State.DeliveryOption) {\r\n case EnumNotificationDeliveryOptions.ExportToPDF:\r\n this.Download();\r\n return;\r\n case EnumNotificationDeliveryOptions.Print:\r\n this.Print();\r\n return;\r\n case EnumNotificationDeliveryOptions.SMS:\r\n case EnumNotificationDeliveryOptions.WhatsApp:\r\n case EnumNotificationDeliveryOptions.Email:\r\n this.OnSend();\r\n return;\r\n default:\r\n this.ShareOnMobile();\r\n }\r\n }\r\n\r\n private FilterTemplates() {\r\n switch (this.State.DeliveryOption) {\r\n case EnumNotificationDeliveryOptions.Email:\r\n this.State.SelectedTemplates = this.State.PageTemplates.filter(x => x.IsSupportEmail);\r\n break;\r\n case EnumNotificationDeliveryOptions.WhatsApp:\r\n this.State.SelectedTemplates = this.State.PageTemplates.filter(x => x.IsSupportWhatsapp);\r\n break;\r\n case EnumNotificationDeliveryOptions.SMS:\r\n this.State.SelectedTemplates = this.State.PageTemplates.filter(x => x.IsSupportSMS);\r\n break;\r\n case EnumNotificationDeliveryOptions.Print:\r\n case EnumNotificationDeliveryOptions.ExportToPDF:\r\n default:\r\n this.State.SelectedTemplates = this.State.PageTemplates.filter(x => x.IsSupportSharing);\r\n break;\r\n }\r\n\r\n if (this.State.IsReportAndEntity) {\r\n this.State.SelectedTemplates = this.State.SelectedTemplates.filter(x => x.EntityBindingPageType == EnumPrintingType.Report && !this.State.IsShareByEntities ||\r\n x.EntityBindingPageType == EnumPrintingType.Entity && this.State.IsShareByEntities)\r\n }\r\n }\r\n\r\n private ShareBase(callback: (file: FileView) => void, isShowSuccess: boolean) {\r\n if (!this.Share) return;\r\n\r\n const sharingInformation = new SharingInformation;\r\n sharingInformation.DeliveryOption = EnumNotificationDeliveryOptions.Share;\r\n sharingInformation.NotificationTempalteID = this.State.SelectedTemplate.EntryID;\r\n\r\n this.Do(this.Share(sharingInformation), isShowSuccess, response => {\r\n if (!response.IsSuccess) return;\r\n callback(response.Entity);\r\n });\r\n }\r\n\r\n private SetRenderedTemplate() {\r\n if (!this.GetRenderedTemplate ||\r\n this.State.DeliveryOption == EnumNotificationDeliveryOptions.Print ||\r\n this.State.DeliveryOption == EnumNotificationDeliveryOptions.Share ||\r\n this.State.DeliveryOption == EnumNotificationDeliveryOptions.ExportToPDF)\r\n return;\r\n\r\n this.Do(this.GetRenderedTemplate(this.State.SelectedTemplate.EntryID, this.State.DeliveryOption), false, response => {\r\n if (!response.IsSuccess) return;\r\n this.State.SharingInformation.Subject = response.Entity?.Subject;\r\n this.State.SharingInformation.Body = response.Entity?.Body;\r\n this.State.SharingInformation.CcAddress = response.Entity?.CcAddress;\r\n this.State.SharingInformation.BccAddress = response.Entity?.BccAddress;\r\n\r\n if (this.IsEmail() && this.IsPreviewMode()) {\r\n this.State.PreviewBody = this.sanitizer.bypassSecurityTrustHtml(this.State.SharingInformation.Body) as any;\r\n }\r\n });\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { DomSanitizer, SafeHtml, SafeResourceUrl, SafeScript, SafeStyle, SafeUrl } from '@angular/platform-browser';\r\nimport { IBaseModuleComponent } from '@base/component/IBaseComponent';\r\nimport { formatDate, formatNumber } from 'devextreme/localization';\r\nimport { from, Observable, of } from 'rxjs';\r\nimport { BaseDataSourceAbstract } from '@base/datalayer/BaseDataSourceAbstract';\r\nimport { FrameworkService } from '@core/framework/framework.service';\r\nimport { ResourcesService } from '@core/framework/resources.service';\r\nimport { DateHelpers } from '@core/helpers/DateHelpers';\r\nimport { Utils } from '@core/helpers/Utils';\r\nimport { truncate } from 'lodash';\r\n\r\n\r\n\r\n@Pipe({ name: 'RC', pure: true })\r\nexport class RCPipe implements PipeTransform {\r\n constructor(private resources: ResourcesService) { }\r\n transform(value: string, component: IBaseModuleComponent, ...args: string[] | number[]): string {\r\n return this.resources.RC(value, component && component.ModuleName, ...args);\r\n }\r\n}\r\n\r\n@Pipe({ name: 'RCM', pure: true })\r\nexport class RCMPipe implements PipeTransform {\r\n constructor(private resources: ResourcesService) { }\r\n transform(value: string, moduleName: string): string {\r\n return this.resources.RC(value, moduleName);\r\n }\r\n}\r\n\r\n@Pipe({ name: 'RCX', pure: false })\r\nexport class RCXPipe implements PipeTransform {\r\n constructor(private resources: ResourcesService) { }\r\n transform(value: string, component: IBaseModuleComponent): string {\r\n return this.resources.RC(value, component && component.ModuleName);\r\n }\r\n}\r\n\r\n@Pipe({ name: 'RCMX', pure: false })\r\nexport class RCMXPipe implements PipeTransform {\r\n constructor(private resources: ResourcesService) { }\r\n transform(value: string, moduleName): string {\r\n return this.resources.RC(value, moduleName);\r\n }\r\n}\r\n\r\n@Pipe({ name: 'YesNo' })\r\nexport class YesNoPipe implements PipeTransform {\r\n constructor(private resources: ResourcesService) { }\r\n transform(value: boolean): string {\r\n return this.resources.RC((value ? \"genYes\" : 'genNo'));\r\n }\r\n}\r\n\r\n\r\n@Pipe({ name: 'YesNoYN' })\r\nexport class YesNoPipeYN implements PipeTransform {\r\n constructor(private resources: ResourcesService) { }\r\n transform(value: string): string {\r\n return this.resources.RC((value == 'Y' ? \"genYes\" : 'genNo'));\r\n }\r\n}\r\n\r\n@Pipe({ name: 'YesEmpty' })\r\nexport class YesEmptyPipe implements PipeTransform {\r\n constructor(private resources: ResourcesService) { }\r\n transform(value: boolean): string {\r\n return value ? this.resources.RC('genYes') : '';\r\n }\r\n}\r\n\r\n\r\n\r\n@Pipe({ name: 'LookupList' })\r\nexport class LookupListPipe implements PipeTransform {\r\n transform(value: any, Entities: any[], propName: string = \"Text\", sDefault: string = undefined, sNullValue: string = undefined): string {\r\n\r\n //If default value was not set, set it to the original value\r\n if (sDefault == undefined && value != undefined) sDefault = `${value}`\r\n\r\n if (!Entities || !Entities.length) return sNullValue;\r\n //Lookup\r\n var result = Entities.find(entity => entity.Value == value);\r\n\r\n //If not found\r\n if (result == undefined) return sDefault;\r\n\r\n //Get result from the selected property\r\n var sReturn = result[propName];\r\n\r\n //Handle null\r\n if (sReturn == \"\" || sReturn == undefined) sReturn = sNullValue;\r\n\r\n //Finish\r\n return sReturn;\r\n }\r\n}\r\n\r\n@Pipe({ name: 'Lookup' })\r\nexport class LookupPipe implements PipeTransform {\r\n transform(value: number, dataSource: BaseDataSourceAbstract | [], propName: string | ((r) => string) = \"Text\", sDefault: string = undefined, sNullValue: string = undefined, keyName: string = \"EntryID\"): Observable {\r\n\r\n const getStringFromResult = (result: any) => {\r\n if (result == undefined) return sDefault;\r\n\r\n let sReturn: string;\r\n if (typeof propName === 'string')\r\n sReturn = result[propName];\r\n else if (typeof propName === 'function')\r\n sReturn = propName(result);\r\n\r\n if (sReturn == \"\" || sReturn == undefined) sReturn = sNullValue;\r\n\r\n return sReturn;\r\n }\r\n\r\n //If default value was not set, set it to the original value\r\n if (sDefault == undefined && value != undefined) sDefault = `${value}`;\r\n\r\n if (Utils.IsEmpty(value)) return of(sDefault);\r\n\r\n if (dataSource == undefined) return of('');\r\n\r\n if ((dataSource as any).Store) {\r\n const ds = dataSource as BaseDataSourceAbstract;\r\n //Get value\r\n var promise = ds.Store.byKey(value)\r\n .then(result => {\r\n return getStringFromResult(result);\r\n })\r\n .catch(() => {\r\n console.warn(`Lookup value ${value} not found`);\r\n return sDefault;\r\n });\r\n\r\n return from(promise);\r\n } else {\r\n let result = (dataSource as []).find(x => x[keyName] == value);\r\n return of(getStringFromResult(result));\r\n }\r\n }\r\n}\r\n\r\n\r\n@Pipe({ name: 'formatNumberShort' })\r\nexport class FormatNumberShortPipe implements PipeTransform {\r\n constructor() { }\r\n transform(value: number): string {\r\n return formatNumber(value, \"#,##0.#\");\r\n }\r\n}\r\n\r\n\r\n@Pipe({ name: 'formatNumberGeneral' })\r\nexport class FormatNumberGeneralPipe implements PipeTransform {\r\n constructor(private framework: FrameworkService) { }\r\n transform(value: number): string {\r\n return formatNumber(value, this.framework.CompanyInfo.NumberGeneral);\r\n }\r\n}\r\n\r\n\r\n@Pipe({ name: 'formatNumberSum' })\r\nexport class FormatNumberSumPipe implements PipeTransform {\r\n constructor(private framework: FrameworkService) { }\r\n transform(value: number): string {\r\n return formatNumber(value, this.framework.CompanyInfo.NumberSum);\r\n }\r\n}\r\n\r\n\r\n@Pipe({ name: 'formatNumberPrice' })\r\nexport class FormatNumberPricePipe implements PipeTransform {\r\n constructor(private framework: FrameworkService) { }\r\n transform(value: number): string {\r\n return formatNumber(value, this.framework.CompanyInfo.NumberPrice);\r\n }\r\n}\r\n\r\n\r\n@Pipe({ name: 'formatNumberQuantity' })\r\nexport class FormatNumberQuantityPipe implements PipeTransform {\r\n constructor(private framework: FrameworkService) { }\r\n transform(value: number): string {\r\n return formatNumber(value, this.framework.CompanyInfo.NumberQuantity);\r\n }\r\n}\r\n\r\n\r\n@Pipe({ name: 'formatNumberPercent' })\r\nexport class FormatNumberPercentPipe implements PipeTransform {\r\n constructor(private framework: FrameworkService) { }\r\n transform(value: number): string {\r\n return formatNumber(value, this.framework.CompanyInfo.NumberPercent);\r\n }\r\n}\r\n\r\n\r\n@Pipe({ name: 'formatNumberRate' })\r\nexport class FormatNumberRatePipe implements PipeTransform {\r\n constructor(private framework: FrameworkService) { }\r\n transform(value: number): string {\r\n return formatNumber(value, this.framework.CompanyInfo.NumberRate);\r\n }\r\n}\r\n\r\n\r\n\r\n@Pipe({ name: 'formatDate' })\r\nexport class FormatDatePipe implements PipeTransform {\r\n constructor(private framework: FrameworkService) { }\r\n transform(value: Date): string {\r\n if (value == undefined) return undefined;\r\n\r\n const date = value instanceof Date ? value : new Date(value)\r\n\r\n return formatDate(date, this.framework.CompanyInfo.DateFormatLong);\r\n }\r\n}\r\n\r\n@Pipe({ name: 'formatDateShort' })\r\nexport class FormatDateShortPipe implements PipeTransform {\r\n constructor(private framework: FrameworkService) { }\r\n transform(value: Date | string, fallback: string = undefined): string {\r\n if (value == undefined) return fallback;\r\n\r\n const date = value instanceof Date ? value : new Date(value)\r\n\r\n return formatDate(date, this.framework.CompanyInfo.DateFormatShort);\r\n }\r\n}\r\n\r\n\r\n@Pipe({ name: 'formatDateCompact' })\r\nexport class FormatDateCompactPipe implements PipeTransform {\r\n constructor(private framework: FrameworkService) { }\r\n transform(value: Date): string {\r\n if (value == undefined) return undefined;\r\n return formatDate(value, this.framework.CompanyInfo.DateFormatCompact);\r\n }\r\n}\r\n\r\n\r\n@Pipe({ name: 'formatDateApproximate' })\r\nexport class FormatDateApproximatePipe implements PipeTransform {\r\n constructor() { }\r\n transform(value: Date): string {\r\n if (value == undefined) return undefined;\r\n return DateHelpers.GetDateApproximate(value);\r\n }\r\n}\r\n\r\n\r\n@Pipe({ name: 'formatDateAtTime' })\r\nexport class FormatDateAtTimePipe implements PipeTransform {\r\n constructor(private framework: FrameworkService,\r\n private resources: ResourcesService) { }\r\n transform(value: Date): string {\r\n if (value == undefined) return undefined;\r\n\r\n const correctValue = value instanceof Date ? value : new Date(value);\r\n\r\n const date = formatDate(correctValue, this.framework.CompanyInfo.DateFormatLong);\r\n const time = formatDate(correctValue, this.framework.CompanyInfo.TimeFormatShort);\r\n\r\n return `${date} ${this.resources.RC('lblAt')} ${time}`;\r\n }\r\n}\r\n\r\n\r\n@Pipe({ name: 'formatDateFull' })\r\nexport class FormatFullDateCompactPipe implements PipeTransform {\r\n constructor(private framework: FrameworkService) { }\r\n transform(value: Date): string {\r\n if (value == undefined) return undefined;\r\n return formatDate(value, this.framework.CompanyInfo.DateFormatFull);\r\n }\r\n}\r\n\r\n\r\n@Pipe({ name: 'formatTime' })\r\nexport class FormatTimePipe implements PipeTransform {\r\n constructor(private framework: FrameworkService) { }\r\n transform(value: Date): string {\r\n if (value == undefined) return undefined;\r\n return formatDate(value, this.framework.CompanyInfo.TimeFormatShort);\r\n }\r\n}\r\n\r\n@Pipe({ name: 'formatDayName' })\r\nexport class FormatDayNamePipe implements PipeTransform {\r\n constructor() { }\r\n transform(value: Date): string {\r\n if (value == undefined) return undefined;\r\n return DateHelpers.GetDayName(value.getDay() + 1);\r\n }\r\n}\r\n\r\n@Pipe({ name: 'formatDayNameShort' })\r\nexport class FormatDayNameShortPipe implements PipeTransform {\r\n constructor() { }\r\n transform(value: Date): string {\r\n if (value == undefined) return undefined;\r\n return DateHelpers.GetDayNameShort(value.getDay() + 1);\r\n }\r\n}\r\n\r\n@Pipe({ name: 'formatPriceWithCurrency' })\r\nexport class FormatPriceWithCurrencyPipe implements PipeTransform \r\n{\r\n constructor(private framework: FrameworkService) { }\r\n\r\n transform(value: number, currency: string = null, isShowZero: boolean = false, isHideCharge: boolean = false, cutCharge: boolean = false): string {\r\n let result = '';\r\n\r\n if(value == null) value = 0;\r\n if(value == 0 && !isShowZero) return result;\r\n\r\n result = formatNumber(value, !isHideCharge ? this.framework.CompanyInfo.NumberSum : this.framework.CompanyInfo.NumberGeneral);\r\n if (cutCharge) { \r\n const decimalIdx = result.indexOf(this.framework.CompanyInfo.DecimalSeparator);\r\n if (decimalIdx !== -1) result = result.substring(0, decimalIdx);\r\n }\r\n\r\n if(currency != null) {\r\n result += ' ' + currency;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n}\r\n\r\n@Pipe({ name: 'highlight' })\r\nexport class HighlightPipe implements PipeTransform {\r\n constructor(public sanitizer: DomSanitizer) { }\r\n\r\n transform(text: any, search: string): string {\r\n if (search == undefined || text == undefined) return text;\r\n var pattern = search\r\n .replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, \"\\\\$&\")\r\n .split(' ')\r\n .filter((t) => t.length > 0)\r\n .join('|');\r\n\r\n var regex = new RegExp(pattern, 'gi');\r\n\r\n return search\r\n ? `${text}`.replace(regex, (match) => `${match}`)\r\n : text;\r\n }\r\n}\r\n\r\n\r\n@Pipe({ name: \"orderBy\" })\r\nexport class ArrayOrderByPipe implements PipeTransform {\r\n transform(array: any, field: string): any[] {\r\n if (!Array.isArray(array)) return;\r\n\r\n array.sort((a: any, b: any) => {\r\n // null value always on top\r\n if (a[field] == null) return -1;\r\n if (b[field] == null) return 1;\r\n\r\n if (a[field] < b[field]) {\r\n return -1;\r\n } else if (a[field] > b[field]) {\r\n return 1;\r\n } else {\r\n return 0;\r\n }\r\n });\r\n\r\n return array;\r\n }\r\n}\r\n\r\n\r\n@Pipe({ name: 'safe' })\r\nexport class SafePipe implements PipeTransform {\r\n constructor(protected sanitizer: DomSanitizer) { }\r\n\r\n public transform(value: string, type: string): SafeHtml | SafeStyle | SafeScript | SafeUrl | SafeResourceUrl {\r\n switch (type) {\r\n case 'html':\r\n return this.sanitizer.bypassSecurityTrustHtml(value);\r\n case 'style':\r\n return this.sanitizer.bypassSecurityTrustStyle(value);\r\n case 'script':\r\n return this.sanitizer.bypassSecurityTrustScript(value);\r\n case 'url':\r\n return this.sanitizer.bypassSecurityTrustUrl(value);\r\n case 'resourceUrl':\r\n return this.sanitizer.bypassSecurityTrustResourceUrl(value);\r\n default:\r\n return this.sanitizer.bypassSecurityTrustUrl(value);\r\n }\r\n }\r\n}\r\n\r\n@Pipe({ name: 'stringBr' })\r\nexport class StringBrPipe implements PipeTransform {\r\n constructor() { }\r\n transform(value: string): string {\r\n if (!value) return value;\r\n return value.replace(/[\\r\\n]+/g, '
');\r\n }\r\n}\r\n\r\n@Pipe({ name: 'fileSize' })\r\nexport class FileSizePipe implements PipeTransform {\r\n constructor(private framework: FrameworkService) { }\r\n transform(value: number): string {\r\n const MByte = 1024 * 1024;\r\n if (value === undefined || value === null) return '';\r\n if (value < 1024) return (value + 'b');\r\n if (value < MByte) return Math.round(value / 1024) + 'KB';\r\n return formatNumber(+(value / MByte), this.framework.CompanyInfo.NumberGeneral) + 'MB';\r\n }\r\n}\r\n\r\n@Pipe({ name: 'abs' })\r\n\r\nexport class AbsPipe implements PipeTransform {\r\n transform(value: number): number {\r\n return Math.abs(value);\r\n }\r\n}\r\n\r\n@Pipe({ name: 'truncate' })\r\nexport class TruncatePipe implements PipeTransform {\r\n constructor() {}\r\n transform(value: string): string {\r\n if (!value) return value;\r\n return truncate(value)\r\n }\r\n}","import { Directive, 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}","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
{{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, OnDestroy, 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, OnDestroy {\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 ngOnDestroy(): void {\r\n this.DetachEvents();\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 private DetachEvents() {\r\n const control = this.GetEditorControl();\r\n if (control == undefined) return;\r\n\r\n control.instance.off('valueChanged');\r\n control.instance.off('focusIn');\r\n control.instance.off('focusOut');\r\n }\r\n\r\n}\r\n","export default \"
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\";","import { Component } from '@angular/core';\r\nimport { FieldFormComponent } from '../field-form/fieldform.component';\r\n\r\n@Component({\r\n selector: 'm4u-fieldx',\r\n templateUrl: './fieldformx.component.html',\r\n styleUrls: ['./fieldformx.component.scss']\r\n})\r\nexport class FieldFormComponentX extends FieldFormComponent {\r\n\r\n}","export default \"
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
{{Label}}
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\";","import { AfterViewInit, Component, ContentChildren, Input, OnDestroy, OnInit, QueryList, ChangeDetectionStrategy, \r\n ChangeDetectorRef, ViewChild, ElementRef, Output, EventEmitter } from '@angular/core';\r\nimport { DxButtonComponent, DxSwitchComponent, DxCheckBoxComponent, DxDateBoxComponent, DxNumberBoxComponent, DxSelectBoxComponent, \r\n DxSliderComponent, DxTextAreaComponent, DxTextBoxComponent, DxDataGridComponent } from 'devextreme-angular';\r\nimport { Subscription } from 'rxjs';\r\nimport { SysEventsService } from '@core/framework/sysevents.service';\r\nimport { FieldDetailComponent } from '../field-detail/fielddetail.component';\r\nimport { FieldDetailComponentX } from '../field-detailx/fielddetailx.component';\r\nimport { FieldFormComponent } from '../field-form/fieldform.component';\r\nimport { FieldFormComponentX } from '../field-formx/fieldformx.component';\r\nimport { GridExtender } from '@base/grid/Grid.extender';\r\nimport { GridWrapperDirective } from '@base/grid/Grid.directive';\r\nimport { ScreenService } from '@core/framework/screen.service';\r\n\r\n@Component({\r\n selector: 'm4u-section',\r\n templateUrl: './section.component.html',\r\n styleUrls: ['./section.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: { '[class.section-with-shadow]': 'UseShadow' }\r\n})\r\nexport class SectionComponent implements AfterViewInit, OnInit, OnDestroy {\r\n @Input() Icon: string;\r\n @Input() Label: string;\r\n @Input() HideLabelOnMobile: boolean;\r\n @Input() Name: string;\r\n @Input() IsCollapsable: boolean;\r\n @Input() set IsCollapsed (value: boolean) {\r\n this.IsContentHidden = value;\r\n }\r\n @Input() Type: 'default' | 'outlined' = 'default';\r\n @Input() Style: 'light' | 'dark' = 'light';\r\n @Input() UseShadow: boolean;\r\n @Input() IsHideIcon: boolean;\r\n @Input() IsHeaderLink: boolean;\r\n @Output() OnHeaderClick = new EventEmitter();\r\n @Output() OnSectionToggle = new EventEmitter();\r\n @Output() OnClick = new EventEmitter();\r\n\r\n IsContentHidden: boolean;\r\n\r\n private _visible: boolean;\r\n get visible(): boolean { \r\n return this._visible;\r\n }\r\n set visible(value: boolean) { \r\n this._visible = value; this.cdr.detectChanges();\r\n }\r\n\r\n @ContentChildren(DxSelectBoxComponent, { descendants: true }) private ctlSelectBoxes: QueryList;\r\n @ContentChildren(DxTextBoxComponent, { descendants: true }) private ctlTextBoxes: QueryList;\r\n @ContentChildren(DxTextAreaComponent, { descendants: true }) private ctlTextAreas: QueryList;\r\n @ContentChildren(DxNumberBoxComponent, { descendants: true }) private ctlNumberBoxes: QueryList;\r\n @ContentChildren(DxDateBoxComponent, { descendants: true }) private ctlDateBoxes: QueryList;\r\n @ContentChildren(DxCheckBoxComponent, { descendants: true }) private ctlCheckBoxes: QueryList;\r\n @ContentChildren(DxSliderComponent, { descendants: true }) private ctlSliders: QueryList;\r\n @ContentChildren(DxButtonComponent, { descendants: true }) private ctlButtons: QueryList;\r\n @ContentChildren(DxSwitchComponent, { descendants: true }) private ctlSwitches: QueryList;\r\n\r\n @ContentChildren(DxDataGridComponent, { descendants: true }) private grids: QueryList;\r\n //explicit grids that defined inside custom component\r\n @ContentChildren(GridWrapperDirective, { descendants: true }) private editableGrids: QueryList;\r\n\r\n\r\n //Fields\r\n @ContentChildren(FieldFormComponent, { descendants: true }) private fields1: QueryList;\r\n @ContentChildren(FieldFormComponentX, { descendants: true }) private fields2: QueryList;\r\n @ContentChildren(FieldDetailComponent, { descendants: true }) private fields3: QueryList;\r\n @ContentChildren(FieldDetailComponentX, { descendants: true }) private fields4: QueryList;\r\n\r\n @ViewChild('section') Section: ElementRef;\r\n\r\n private subscriptionOnSetDefaults: Subscription;\r\n constructor(public screen: ScreenService, private sysEvents: SysEventsService, private cdr: ChangeDetectorRef) {\r\n }\r\n\r\n ngOnInit() {\r\n this.visible = true;\r\n this.subscriptionOnSetDefaults = this.sysEvents.OnSetDefaults.subscribe(x => {\r\n this.SetDefaultValues();\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subscriptionOnSetDefaults && this.subscriptionOnSetDefaults.unsubscribe();\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.SetCustomizations();\r\n }\r\n \r\n //Lock all controls on form\r\n public LockControls(bLock: boolean) {\r\n this.Controls().forEach(controls => controls.forEach(x => x.readOnly = bLock));\r\n if (bLock) this.Grids().forEach(x => {\r\n (x.grid.instance as any).option(\r\n {\r\n 'editing.allowAdding': false,\r\n 'editing.allowDeleting': false,\r\n 'editing.allowUpdating': false\r\n });\r\n });\r\n }\r\n\r\n //Accept changes - sync the grid with the bound entity\r\n public AcceptGridChanges(): Promise[] {\r\n return this.Grids().map(x => x?.ValidateGrid());\r\n }\r\n\r\n\r\n //Apply customizations\r\n protected SetCustomizations() {\r\n this.Fields().forEach(fields => fields.forEach(x => x.SetFieldCustomizations()));\r\n }\r\n\r\n //Set default values for the fields\r\n public SetDefaultValues() {\r\n this.Fields().forEach(fields => fields.forEach(x => x.SetFieldDefaultValue()));\r\n }\r\n\r\n public ResetValidation() {\r\n\r\n this.Controls().forEach(controls => controls.forEach(x => {\r\n x.instance.option(\r\n {\r\n isValid: true,\r\n validationError: undefined,\r\n validationErrors: undefined,\r\n validationStatus: 'valid'\r\n });\r\n }));\r\n }\r\n\r\n protected Grids(): GridExtender[] {\r\n const arr: GridExtender[] = [];\r\n this.grids.forEach(grid => arr.push((grid as any).G));\r\n this.editableGrids.forEach(grid => arr.push((grid as any).G));\r\n return arr;\r\n }\r\n\r\n //Return all control types\r\n protected Controls(): QueryList[] {\r\n const arr =\r\n [\r\n this.ctlSelectBoxes,\r\n this.ctlTextBoxes,\r\n this.ctlTextAreas,\r\n this.ctlNumberBoxes,\r\n this.ctlDateBoxes,\r\n this.ctlCheckBoxes,\r\n this.ctlSliders,\r\n this.ctlButtons,\r\n this.ctlSwitches\r\n ];\r\n return arr;\r\n }\r\n\r\n //Return all fields\r\n protected Fields(): QueryList[] {\r\n const arr =\r\n [\r\n this.fields1,\r\n this.fields2,\r\n this.fields3,\r\n this.fields4\r\n ];\r\n return arr;\r\n }\r\n\r\n ToggleSection() {\r\n if (!this.IsCollapsable) {\r\n return;\r\n }\r\n\r\n this.IsContentHidden = !this.IsContentHidden;\r\n this.OnSectionToggle.emit(!this.IsContentHidden);\r\n if (!this.IsContentHidden) {\r\n setTimeout(() => this.ctlTextAreas.forEach(ta => ta.instance.repaint()));\r\n }\r\n }\r\n\r\n GetSectionClass() {\r\n return `section-${this.Type} section-${this.Style}`;\r\n }\r\n\r\n HeaderClick(event) {\r\n this.IsHeaderLink ? this.OnHeaderClick.emit(event) : this.ToggleSection();\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
{{ GetPreviewTitle() || ( 'titlePreview' | RC ) }}
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n
\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n
\\r\\n\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n
\\r\\n
\\r\\n {{Title}}\\r\\n \\r\\n
\\r\\n
\\r\\n {{Subtitle}}\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n\";","import { Component, ElementRef, HostListener, Input, OnDestroy, OnInit, TemplateRef, ViewChild } from '@angular/core';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { BaseEntity, BaseState } from '@base/entities/BaseEntities';\r\nimport { AppConfigService } from '@configuration/app.config.service';\r\nimport { ScreenService } from '@core/framework/screen.service';\r\nimport { EnumApplicationMode, EnumPageDisplayModes, EnumScreenSizes, EnumWindowSizes, SysEnumsService } from '@core/framework/sysenums.enum';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { FrameworkService } from '@m4u-angular/core/framework/framework.service';\r\nimport { SysEventsService } from '@m4u-angular/core/framework/sysevents.service';\r\nimport { DxContextMenuComponent, DxPopupComponent, DxScrollViewComponent } from 'devextreme-angular';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'm4u-page',\r\n templateUrl: './pagelayout.component.html',\r\n styleUrls: ['./pagelayout.component.scss', '../page-filter/page-filter.component.scss']\r\n})\r\nexport class PageLayoutComponent implements OnInit, OnDestroy {\r\n\r\n @HostListener('document:keydown.escape', ['$event'])\r\n EscPress = (event: KeyboardEvent) => this.EscPressed(event);\r\n\r\n private _isPageButtonsVisible: boolean;\r\n private _pageToolbarSettings: ToolbarSettings;\r\n private _subscriptions: Subscription[] = [];\r\n\r\n IsPageSidePanelVisible: boolean;\r\n ShowPreview: boolean;\r\n PreviewPDFData: string | Blob;\r\n PreviewFileName: string;\r\n\r\n @ViewChild('pageHeader') pageHeader: ElementRef;\r\n @ViewChild('popup') popup: DxPopupComponent;\r\n @ViewChild('scroll') scroll: DxScrollViewComponent;\r\n @ViewChild('mnuViewModes') protected viewModesMenu: DxContextMenuComponent;\r\n\r\n constructor(public screen: ScreenService,\r\n private appConfigService: AppConfigService,\r\n public SysEnums: SysEnumsService,\r\n private sysEvents: SysEventsService,\r\n public screenService: ScreenService,\r\n private frameworkService: FrameworkService) {\r\n }\r\n\r\n @Input() public WindowHeight: EnumWindowSizes;\r\n @Input() public WindowWidth: EnumWindowSizes;\r\n @Input() public IsNoToolbar: boolean;\r\n @Input() public IsNoBodyScroll: boolean;\r\n @Input() public Class: string;\r\n @Input() public ShowScrollbar: string;\r\n @Input() ButtonsPosition: 'toolbar' | 'header' | 'header-title';\r\n @Input() Page: BasePageComponent;\r\n @Input() public ShowDialogAsWindow: boolean;\r\n @Input() public IsFooterHidden: boolean;\r\n @Input() public IsHeaderInBody: boolean;\r\n @Input() public IsHeaderCollapsed: boolean;\r\n\r\n @Input() SidePanelTemplate: TemplateRef;\r\n @Input() ToolbarButtonsBefore: TemplateRef;\r\n @Input() ToolbarButtonsCenter: TemplateRef;\r\n @Input() ToolbarButtonsAfter: TemplateRef;\r\n @Input() QuickFilters: TemplateRef;\r\n @Input() HeaderButtonsBefore: TemplateRef;\r\n @Input() HeaderButtonsAfter: TemplateRef;\r\n @Input() TitleButtons: TemplateRef;\r\n // \r\n @Input() PageBody: TemplateRef;\r\n @Input() SidePanelPosition: 'left' | 'right';\r\n @Input() HideSidePanelToggle: boolean;\r\n @Input() HidePageBreadcrumb: boolean = false;\r\n @Input() HideToolbarBreadcrumbs: boolean = false;\r\n @Input() DisableFilterApply: boolean = false;\r\n\r\n get ShowBreadBrumb() {\r\n return this.appConfigService.AppConfig.ShowBreadcrumb() && !this.HidePageBreadcrumb;\r\n }\r\n\r\n get Title() {\r\n return this._pageToolbarSettings?.Title;\r\n }\r\n\r\n get Subtitle() {\r\n return this._pageToolbarSettings?.Subtitle;\r\n }\r\n\r\n IsShowViewModesButton() {\r\n return this._pageToolbarSettings?.ViewModes && this._pageToolbarSettings?.ViewModes.length;\r\n }\r\n\r\n get ViewModes() {\r\n return this._pageToolbarSettings?.ViewModes;\r\n }\r\n\r\n get ShowBackButton() {\r\n return this._pageToolbarSettings?.ShowBackButton;\r\n }\r\n\r\n ngOnInit() {\r\n this._subscriptions.push(this.sysEvents.Toolbar.subscribe((toolbarSettings: ToolbarSettings) => {\r\n if (!toolbarSettings || this.Page.ComponentName !== toolbarSettings.PageComponentName) return;\r\n\r\n this._pageToolbarSettings = toolbarSettings;\r\n\r\n if (!this.ButtonsPosition) {\r\n this.ButtonsPosition = this.Page.DisplayMode == EnumPageDisplayModes.Window\r\n || this.Page.DisplayMode == EnumPageDisplayModes.Dialog\r\n || this.Page instanceof BasePageCRUDComponent\r\n ? 'toolbar'\r\n : this.screen.IsDesktop() ? 'header' : 'header-title';\r\n }\r\n\r\n const contextMenuItems = toolbarSettings.OnGetContextMenuItems();\r\n this._isPageButtonsVisible = toolbarSettings.IsAllowFilter || toolbarSettings.IsAllowPrint || toolbarSettings.IsAllowExport\r\n || (contextMenuItems && contextMenuItems.length > 0);\r\n }));\r\n\r\n this._subscriptions.push(this.sysEvents.PageSidePanelState.subscribe(({ pageComponentName, state }) => {\r\n if (pageComponentName != this.Page.ComponentName) return;\r\n\r\n this.IsPageSidePanelVisible = state;\r\n }));\r\n\r\n this._subscriptions.push(this.sysEvents.PagePreviewState.subscribe(({ pageComponentName, state, data, fileName }) => {\r\n if (pageComponentName != this.Page.ComponentName) return;\r\n\r\n this.ShowPreview = state;\r\n this.PreviewPDFData = data;\r\n this.PreviewFileName = fileName;\r\n }));\r\n }\r\n\r\n GetPreviewTitle() {\r\n return this._pageToolbarSettings.OnGetPreviewTitle();\r\n }\r\n\r\n ngOnDestroy() {\r\n this._subscriptions && this._subscriptions.forEach(x => x.unsubscribe());\r\n }\r\n\r\n IsHeaderEmpty() {\r\n return this.IsQuickFiltersEmpty && !this.HasContent(this.pageHeader) && !(this.IsMobileTitleVisible());\r\n }\r\n\r\n IsMobileTitleVisible() {\r\n return this.IsStandardApplicationMode() && this.screen.IsMobile() && this.Page.DisplayMode === EnumPageDisplayModes.FullScreen;\r\n }\r\n\r\n get IsQuickFiltersEmpty() {\r\n return !this.QuickFilters && !this.HeaderButtonsBefore && !this.HeaderButtonsAfter && \r\n (this.ButtonsPosition === 'toolbar' || this.ButtonsPosition === 'header-title' || !this._isPageButtonsVisible);\r\n }\r\n\r\n GetPageLoadingClass() {\r\n return this.Page.IsLoading ? 'page-is-loading' : '';\r\n }\r\n\r\n GetCustomClass() {\r\n return (this.Class || '') + ` ${this.Page.ComponentName}` + ` ${this.GetPageLoadingClass()}`;\r\n }\r\n\r\n GetDialogClass() {\r\n // eslint-disable-next-line max-len\r\n return `m4u-popup ${this.GetPopupWidthClass()} ${this.GetCustomClass()} ${this.Page.ShowDialogAsBottomSheet ? 'm4u-bottom-sheet' : 'm4u-dialog'}`;\r\n }\r\n\r\n GetDialogWidth() {\r\n return this.Page.ShowDialogAsBottomSheet ? '100%' : this.GetPopupSize(this.WindowWidth);\r\n }\r\n\r\n GetDialogHeight() {\r\n const height = this.Page.ShowDialogAsBottomSheet ? this.GetBottomSheetHeight(this.WindowHeight) : this.ShowDialogAsWindow\r\n ? '100%' : this.GetPopupSize(this.WindowHeight);\r\n\r\n const currentHeight = this.popup?.instance?.option('height');\r\n if (currentHeight === height) return currentHeight;\r\n\r\n this.popup?.instance?.option('height', height);\r\n return height;\r\n }\r\n\r\n GetDialogPosition() {\r\n return this.Page.ShowDialogAsBottomSheet ? 'bottom' : this.ShowDialogAsWindow ? this.GetPopupPosition() : 'center';\r\n }\r\n\r\n GetPopupSize(size: EnumWindowSizes) {\r\n if (this.IsShowAsFullScreen()) return '100%';\r\n\r\n switch (size) {\r\n case EnumWindowSizes.WindowXSmall: return '30%';\r\n case EnumWindowSizes.WindowSmall: return '40%';\r\n case EnumWindowSizes.WindowMedium: return '50%';\r\n case EnumWindowSizes.WindowLarge: return '75%';\r\n case EnumWindowSizes.WindowXLarge: return '90%';\r\n case EnumWindowSizes.WindowAutoSize: return this.WindowHeight == size ? 'auto' : '100%';\r\n }\r\n }\r\n\r\n GetBottomSheetHeight(size: EnumWindowSizes) {\r\n if (this.IsShowAsFullScreen()) return '95dvh';\r\n\r\n switch (size) {\r\n case EnumWindowSizes.WindowXSmall: return '50dvh';\r\n case EnumWindowSizes.WindowSmall: return '60dvh';\r\n case EnumWindowSizes.WindowMedium: return '70dvh';\r\n case EnumWindowSizes.WindowLarge: return '80dvh';\r\n case EnumWindowSizes.WindowXLarge: return '95dvh';\r\n case EnumWindowSizes.WindowAutoSize: return 'auto';\r\n }\r\n }\r\n\r\n GetWindowWidth(size: EnumWindowSizes) {\r\n if (this.IsShowAsFullScreen()) return '100%';\r\n\r\n const previewSize = this.ShowPreview ? this.GetPreviewSize(size) : '0px';\r\n switch (size) {\r\n case EnumWindowSizes.WindowXSmall: return `calc(${previewSize} + 30vw)`;\r\n case EnumWindowSizes.WindowSmall: return `calc(${previewSize} + 40vw)`;\r\n case EnumWindowSizes.WindowMedium: return `calc(${previewSize} + 50vw)`;\r\n case EnumWindowSizes.WindowLarge: return `calc(${previewSize} + 75vw)`;\r\n case EnumWindowSizes.WindowXLarge: return `calc(${previewSize} + 90vw)`;\r\n case EnumWindowSizes.WindowAutoSize: return '100%';\r\n }\r\n }\r\n\r\n GetPreviewSize(size: EnumWindowSizes) {\r\n switch (size) {\r\n case EnumWindowSizes.WindowXSmall: return '45vw';\r\n case EnumWindowSizes.WindowSmall: return '45vw';\r\n case EnumWindowSizes.WindowMedium: return '45vw';\r\n case EnumWindowSizes.WindowLarge: return '20vw';\r\n case EnumWindowSizes.WindowXLarge: return '10vw';\r\n case EnumWindowSizes.WindowAutoSize: return 0;\r\n }\r\n }\r\n\r\n GetPopupWidthClass() {\r\n switch (this.WindowWidth) {\r\n case EnumWindowSizes.WindowXSmall:\r\n case EnumWindowSizes.WindowSmall:\r\n return 'm4u-popup-small';\r\n case EnumWindowSizes.WindowMedium:\r\n return 'm4u-popup-medium';\r\n case EnumWindowSizes.WindowLarge:\r\n case EnumWindowSizes.WindowXLarge:\r\n return 'm4u-popup-large';\r\n case EnumWindowSizes.WindowAutoSize:\r\n return 'm4u-popup-auto';\r\n }\r\n }\r\n\r\n GetPopupPosition() {\r\n return this.screen.IsRTL() ? 'left top' : 'right top';\r\n }\r\n\r\n GetBottomSheetPosition() {\r\n return this.screen.IsRTL() ? 'right top' : 'left top';\r\n }\r\n\r\n GetPopupShowAnimation() {\r\n const direction = this.screen.IsRTL() ? 'left' : 'right';\r\n return { type: 'slideIn', direction: direction, duration: 150 };\r\n }\r\n\r\n GetPopupHideAnimation() {\r\n const direction = this.screen.IsRTL() ? 'left' : 'right';\r\n return { type: 'slideOut', direction: direction, duration: 150 };\r\n }\r\n\r\n GetBottomSheetShowAnimation() {\r\n return { type: 'slideIn', direction: 'bottom', duration: 150 };\r\n }\r\n\r\n GetBottomSheetHideAnimation() {\r\n return { type: 'slideOut', direction: 'bottom', duration: 150 };\r\n }\r\n\r\n //Returns whether current page should be shown as full screen\r\n //This is a major hub function that determines visibility of window and dialog (not so relevant to DisplayMode=FullScreen)\r\n //Basically:\r\n //DisplayMode=FullScreen - always rendered on full screen\r\n //DisplayMode=Window - rendered on full screen if screen is XSmall\r\n //DisplayMode=Dialog - rendered on full screen if screen is XSmall and the page itself is not of small dimensions.\r\n public IsShowAsFullScreen(): boolean {\r\n\r\n //Screen and current page sizes\r\n const bMobile: boolean = this.screen.IsMobile();\r\n const bSmallPage: boolean = (this.WindowHeight == EnumWindowSizes.WindowXSmall\r\n || this.WindowHeight == EnumWindowSizes.WindowSmall\r\n || this.WindowHeight == EnumWindowSizes.WindowAutoSize) && (this.WindowWidth == EnumWindowSizes.WindowXSmall);\r\n\r\n //No need for special classes if showing full screen, unless this is a mobile device\r\n if (this.Page.DisplayMode == EnumPageDisplayModes.FullScreen) return true;\r\n\r\n //For window - show full screen or in window according to screen size. Use window dimensions\r\n if (this.Page.DisplayMode == EnumPageDisplayModes.Window) return bMobile ? true : false;\r\n\r\n //For dialog - show always in partial view, unless this is a mobile device and the page is large\r\n if (this.Page.DisplayMode == EnumPageDisplayModes.Dialog) return false;//bMobile ? (bSmallPage ? false : true) : false;\r\n }\r\n\r\n public IsBodyWithScroll() {\r\n return !this.IsNoBodyScroll && (this.screen.IsDesktop() || this.screen.IsTablet() || this.Page.DisplayMode === EnumPageDisplayModes.Dialog);\r\n }\r\n\r\n OnPopupHiding(e) {\r\n e.cancel = true;\r\n this.Page.NavigateBack();\r\n }\r\n\r\n //Specify whether to render the toolbar\r\n public IsRenderToolbar(): boolean {\r\n return !this.IsNoToolbar && this.appConfigService.AppConfig.Mode !== EnumApplicationMode.IFrame;\r\n }\r\n\r\n IsStandardApplicationMode() {\r\n return this.appConfigService.AppConfig.Mode === EnumApplicationMode.Standard;\r\n }\r\n\r\n public IsShowNavbar() {\r\n return (this.Page.DisplayMode !== 'Dialog' && !(this.Page instanceof BasePageCRUDComponent) && this.screen.IsMobile())\r\n || ((this.Page as any).IsAllowNavbar && (this.Page as any).IsAllowNavbar());\r\n }\r\n\r\n OnSidePanelToggle() {\r\n this.IsPageSidePanelVisible = !this.IsPageSidePanelVisible;\r\n this.sysEvents.SetPageSidePanelState(this.Page.ComponentName, this.IsPageSidePanelVisible);\r\n }\r\n\r\n HasContent(content: any) {\r\n return content\r\n && (content.childElementCount !== undefined ? content.childElementCount > 0 : content.nativeElement.childElementCount > 0);\r\n }\r\n\r\n OnNavigateHomeOrSwitchMode() {\r\n if (this.IsShowViewModesButton()) {\r\n //Switch mode\r\n this.OnShowViewModes();\r\n } else {\r\n //Go to home route\r\n if (!this.IsStandardApplicationMode() || !this._pageToolbarSettings?.Page \r\n || this._pageToolbarSettings?.Page.DisplayMode != EnumPageDisplayModes.FullScreen) return;\r\n this.frameworkService.NavigateDefault();\r\n }\r\n }\r\n\r\n OnViewModesMenuClick(e) {\r\n this._pageToolbarSettings.Title = e.itemData.text;\r\n e.itemData.callback();\r\n }\r\n\r\n OnShowViewModes = () => {\r\n this.viewModesMenu.instance.show();\r\n };\r\n\r\n OnBack() {\r\n this._pageToolbarSettings.BackButtonClick();\r\n }\r\n\r\n EscPressed = (event: KeyboardEvent) => {\r\n const popupElement = this.GetPopupElement(event?.target as any);\r\n if (!popupElement?.classList?.contains(this.Page?.ComponentName)) return;\r\n\r\n if (this.Page?.DisplayMode === EnumPageDisplayModes.Window || this.Page?.DisplayMode === EnumPageDisplayModes.Dialog) {\r\n this.Page.ClosePage();\r\n }\r\n };\r\n\r\n private GetPopupElement(el: Element) {\r\n if (!el) return null;\r\n if (el.classList.contains('m4u-popup')) return el;\r\n\r\n return this.GetPopupElement(el.parentElement);\r\n }\r\n\r\n OnDialogShown() {\r\n this.sysEvents.DialogShown(this.Page.ComponentName);\r\n }\r\n\r\n // experimental\r\n // GetPopupSize(size: EnumWindowSizes) {\r\n // if (this.IsShowAsFullScreen()) return '100%';\r\n\r\n // const screenSize = this.screen.GetScreenSize();\r\n // //\r\n // console.log(screenSize);\r\n // //\r\n // if (screenSize === EnumScreenSizes.ScreenXSmall) return '90%';\r\n\r\n // switch (size) {\r\n // case EnumWindowSizes.WindowXSmall:\r\n // return (screenSize === EnumScreenSizes.ScreenSmall)\r\n // ? '60%'\r\n // : (screenSize === EnumScreenSizes.ScreenMedium) ? '50%' : '40%';\r\n // case EnumWindowSizes.WindowSmall:\r\n // return (screenSize === EnumScreenSizes.ScreenSmall)\r\n // ? '55%'\r\n // : (screenSize === EnumScreenSizes.ScreenMedium) ? '50%' : '5%';\r\n // case EnumWindowSizes.WindowMedium:\r\n // return (screenSize === EnumScreenSizes.ScreenSmall)\r\n // ? '70%'\r\n // : (screenSize === EnumScreenSizes.ScreenMedium) ? '60%' : '50%';\r\n // case EnumWindowSizes.WindowLarge: return '75%';\r\n // case EnumWindowSizes.WindowXLarge: return '90%';\r\n // case EnumWindowSizes.WindowAutoSize:\r\n\r\n // switch (screenSize) {\r\n // case EnumScreenSizes.ScreenSmall:\r\n // return '70%';\r\n // case EnumScreenSizes.ScreenMedium:\r\n // return '60%';\r\n // case EnumScreenSizes.ScreenLarge:\r\n // return '50%';\r\n // case EnumScreenSizes.ScreenXLarge:\r\n // return '40%';\r\n // }\r\n\r\n // //return this.WindowHeight == size ? 'auto' : '100%';\r\n // }\r\n // }\r\n}\r\n","export default \"\\r\\n
\\r\\n
\\r\\n
\\r\\n
{{ Title }}
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n
\";","import { CdkPortalOutletAttachedRef, Portal } from '@angular/cdk/portal';\r\nimport { Component, ComponentRef } from '@angular/core';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { SidebarService } from '@m4u-angular/core/framework/sidebar.service';\r\nimport { EnumSidebarStates, EnumWindowSizes } from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\nclass State extends BaseState {\r\n SidebarOpened: boolean;\r\n}\r\n\r\nexport type SidebarPosition = 'left' | 'right';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-side-bar',\r\n templateUrl: './side-bar.component.html',\r\n styleUrls: ['./side-bar.component.scss']\r\n})\r\nexport class SideBarComponent extends BaseComponent {\r\n\r\n Name: string;\r\n Title: string;\r\n ContentPortal: Portal;\r\n SidebarState: EnumSidebarStates;\r\n SidebarComponentOptions?: any;\r\n SidebarPinned: boolean;\r\n Width: EnumWindowSizes;\r\n Position: SidebarPosition;\r\n Class: string;\r\n\r\n get IsOpened() {\r\n return this.SidebarState === EnumSidebarStates.Opened;\r\n }\r\n\r\n get ShowPinButton() {\r\n return this.Name === 'Filters';\r\n }\r\n\r\n constructor(A: ServiceBagService, private sidebarService: SidebarService) {\r\n super(A, 'SideBarComponent', State);\r\n }\r\n\r\n ContentAttached(ref: CdkPortalOutletAttachedRef) {\r\n if (this.SidebarComponentOptions && ref instanceof ComponentRef) {\r\n Object.entries(this.SidebarComponentOptions).forEach(([key, value]) => {\r\n ref.instance[key] = value;\r\n });\r\n }\r\n }\r\n\r\n GetWidthClass() {\r\n const width = this.Width || EnumWindowSizes.WindowSmall;\r\n switch (width) {\r\n case EnumWindowSizes.WindowXSmall: return 'p-sidebar-xs';\r\n case EnumWindowSizes.WindowSmall: return 'p-sidebar-s';\r\n case EnumWindowSizes.WindowMedium: return 'p-sidebar-m';\r\n case EnumWindowSizes.WindowLarge: return 'p-sidebar-l';\r\n case EnumWindowSizes.WindowXLarge: return 'p-sidebar-xl';\r\n case EnumWindowSizes.WindowAutoSize: return 'auto';\r\n }\r\n }\r\n\r\n GetPositionClass() {\r\n return this.Position || (this.A.Screen.IsRTL() ? 'left' : 'right');\r\n }\r\n\r\n PinSidebar() {\r\n this.SidebarPinned = !this.SidebarPinned;\r\n }\r\n\r\n CloseSidebar() {\r\n this.sidebarService.Close(this.Name);\r\n }\r\n\r\n OnSidebarViewChanged(state: 'show' | 'hide') {\r\n const sidebarState = state === 'show' ? EnumSidebarStates.Opened : EnumSidebarStates.Closed;\r\n this.sidebarService.OnStateChanged(this.Name, sidebarState);\r\n }\r\n}\r\n","var map = {\n\t\"./kraken/_app.config\": 22297\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.9ce865a0943fc3d34ff0.js"}