{"version":3,"file":"admin/bundle/app.f68457ec35167836da01.js","mappings":"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S,CACP,QACA,UACA,QACA,QACA,OACA,QACA,QACA,SACA,aACA,UACA,YACA,aAEF,SAAY,CACV,OACA,OACA,OACA,OACA,OACA,OACA,QAEF,WAAc,CACZ,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,OACA,OACA,QAEF,gBAAmB,CACjB,QACA,UACA,QACA,QACA,OACA,QACA,QACA,SACA,aACA,UACA,YACA,aAEF,aAAgB,CACd,EACA,GAEF,SAAY,2BACZ,SAAY,qBACZ,OAAU,kBACV,WAAc,UACd,WAAc,UACd,MAAS,cACT,UAAa,SACb,UAAa,QAEf,eAAkB,CAChB,aAAgB,IAChB,YAAe,IACf,UAAa,IACb,SAAY,CACV,CACE,MAAS,EACT,OAAU,EACV,QAAW,EACX,QAAW,EACX,OAAU,EACV,OAAU,IACV,OAAU,GACV,OAAU,GACV,OAAU,IAEZ,CACE,MAAS,EACT,OAAU,EACV,QAAW,EACX,QAAW,EACX,OAAU,EACV,OAAU,IACV,OAAU,KACV,OAAU,GACV,OAAU,QAIhB,GAAM,QACN,SAAY,QACZ,UAAa,SAAS0xC,EAAG6pG,GAAkB,OAAS,GAAL7pG,EAAoB4pG,EAAgCA,CAAsB,GAE3H,4BC3HApyJ,QAAQC,OAAO,WAAY,GAAI,CAAC,WAAY,SAASiM,GACrD,IAAIkmJ,EAAsC,MAAtCA,EAA0F,QAC9FlmJ,EAAS4K,MAAM,UAAW,CACxB,iBAAoB,CAClB,MAAS,CACP,QACA,SAEF,IAAO,CACL,UACA,QACA,SACA,YACA,SACA,UACA,UAEF,SAAY,CACV,kBACA,qBAEF,KAAQ,CACN,QACA,SAEF,eAAkB,EAClB,MAAS,CACP,QACA,UACA,QACA,QACA,OACA,QACA,QACA,SACA,aACA,UACA,YACA,aAEF,SAAY,CACV,OACA,OACA,OACA,OACA,OACA,OACA,QAEF,WAAc,CACZ,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,OACA,OACA,QAEF,gBAAmB,CACjB,QACA,UACA,QACA,QACA,OACA,QACA,QACA,SACA,aACA,UACA,YACA,aAEF,aAAgB,CACd,EACA,GAEF,SAAY,2BACZ,SAAY,qBACZ,OAAU,kBACV,WAAc,UACd,WAAc,UACd,MAAS,cACT,UAAa,SACb,UAAa,QAEf,eAAkB,CAChB,aAAgB,IAChB,YAAe,IACf,UAAa,IACb,SAAY,CACV,CACE,MAAS,EACT,OAAU,EACV,QAAW,EACX,QAAW,EACX,OAAU,EACV,OAAU,IACV,OAAU,GACV,OAAU,GACV,OAAU,IAEZ,CACE,MAAS,EACT,OAAU,EACV,QAAW,EACX,QAAW,EACX,OAAU,EACV,OAAU,IACV,OAAU,KACV,OAAU,GACV,OAAU,QAIhB,GAAM,KACN,SAAY,KACZ,UAAa,SAAS0xC,EAAG6pG,GAAkB,OAAS,GAAL7pG,EAAoB4pG,EAAgCA,CAAsB,GAE3H,4BC3HApyJ,QAAQC,OAAO,WAAY,GAAI,CAAC,WAAY,SAASiM,GACrD,IAAIkmJ,EAAsC,MAAtCA,EAA0F,QAC9FlmJ,EAAS4K,MAAM,UAAW,CACxB,iBAAoB,CAClB,MAAS,CACP,KACA,MAEF,IAAO,CACL,UACA,aACA,YACA,aACA,WACA,WACA,aAEF,SAAY,CACV,OACA,QAEF,KAAQ,CACN,OACA,QAEF,eAAkB,EAClB,MAAS,CACP,aACA,WACA,WACA,WACA,WACA,UACA,WACA,WACA,UACA,SACA,UACA,YAEF,SAAY,CACV,MACA,MACA,MACA,MACA,MACA,MACA,OAEF,WAAc,CACZ,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QAEF,gBAAmB,CACjB,YACA,UACA,UACA,UACA,UACA,SACA,UACA,UACA,SACA,QACA,SACA,WAEF,aAAgB,CACd,EACA,GAEF,SAAY,0BACZ,SAAY,oBACZ,OAAU,mBACV,WAAc,UACd,WAAc,WACd,MAAS,gBACT,UAAa,UACb,UAAa,SAEf,eAAkB,CAChB,aAAgB,IAChB,YAAe,IACf,UAAa,IACb,SAAY,CACV,CACE,MAAS,EACT,OAAU,EACV,QAAW,EACX,QAAW,EACX,OAAU,EACV,OAAU,IACV,OAAU,GACV,OAAU,GACV,OAAU,IAEZ,CACE,MAAS,EACT,OAAU,EACV,QAAW,EACX,QAAW,EACX,OAAU,EACV,OAAU,IACV,OAAU,KACV,OAAU,GACV,OAAU,QAIhB,GAAM,QACN,SAAY,QACZ,UAAa,SAAS0xC,EAAG6pG,GAAkB,OAAS,GAAL7pG,EAAoB4pG,EAAgCA,CAAsB,GAE3H,6BC3HApyJ,QAAQC,OAAO,WAAY,GAAI,CAAC,WAAY,SAASiM,GACrD,IAAIkmJ,EAAsC,MAAtCA,EAA0F,QAmB9FlmJ,EAAS4K,MAAM,UAAW,CACxB,iBAAoB,CAClB,MAAS,CACP,OACA,QAEF,IAAO,CACL,UACA,OACA,SACA,WACA,QACA,SACA,UAEF,SAAY,CACV,kBACA,qBAEF,KAAQ,CACN,OACA,QAEF,eAAkB,EAClB,MAAS,CACP,UACA,WACA,QACA,QACA,OACA,OACA,QACA,SACA,WACA,UACA,WACA,YAEF,SAAY,CACV,MACA,MACA,MACA,MACA,MACA,MACA,OAEF,WAAc,CACZ,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OAEF,gBAAmB,CACjB,UACA,WACA,QACA,QACA,OACA,OACA,QACA,SACA,WACA,UACA,WACA,YAEF,aAAgB,CACd,EACA,GAEF,SAAY,iBACZ,SAAY,YACZ,OAAU,oBACV,WAAc,WACd,WAAc,WACd,MAAS,iBACT,UAAa,WACb,UAAa,SAEf,eAAkB,CAChB,aAAgB,IAChB,YAAe,IACf,UAAa,IACb,SAAY,CACV,CACE,MAAS,EACT,OAAU,EACV,QAAW,EACX,QAAW,EACX,OAAU,EACV,OAAU,IACV,OAAU,GACV,OAAU,GACV,OAAU,IAEZ,CACE,MAAS,EACT,OAAU,EACV,QAAW,EACX,QAAW,EACX,OAAU,EACV,OAAU,KACV,OAAU,GACV,OAAU,IACV,OAAU,MAIhB,GAAM,QACN,SAAY,QACZ,UAAa,SAAS0xC,EAAG6pG,GAAkB,IAAItqJ,EAAQ,EAAJygD,EAAY8pG,EAnIjE,SAAe9pG,EAAG6pG,GAChB,IAAIpzD,EAAIozD,OAEJ71I,IAAcyiF,IAChBA,EAAIlgF,KAAKhR,IAVb,SAAqBy6C,GAEnB,IAAIzgD,GADJygD,GAAQ,IACEjnD,QAAQ,KAClB,OAAc,GAANwG,EAAW,EAAIygD,EAAExiD,OAAS+B,EAAI,CACxC,CAMiBwqJ,CAAY/pG,GAAI,IAG/B,IAAIgqG,EAAOzzI,KAAK0zI,IAAI,GAAIxzD,GAExB,MAAO,CAACA,EAAGA,EAAG5gF,GADJmqC,EAAIgqG,EAAQ,GAAKA,EAE7B,CAyHsEE,CAAMlqG,EAAG6pG,GAAiB,OAAS,GAALtqJ,GAAkB,GAARuqJ,EAAGrzD,EAAoBmzD,EAAgCA,CAAsB,GAE3L,gBC9IA,WAyCI,SAASO,EAAUxuJ,EAAMghB,GACrB,IAAI47D,EAAOzvE,KACXA,KAAK0L,KAAO,QACZ1L,KAAK0T,MAAQ7gB,EACbmN,KAAKshJ,WAAY,EACjBthJ,KAAKuhJ,UAAW,EAEZ1tI,IACA47D,EAAK6xE,WAAY,EACjBztI,EAAQvc,MAAK,SAAUzE,GACnB48E,EAAK/7D,MAAQ7gB,EACb48E,EAAK6xE,WAAY,CACrB,IAAG,SAAUzuJ,GACT48E,EAAK/7D,MAAQ7gB,EACb48E,EAAK6xE,WAAY,EACjB7xE,EAAK8xE,UAAW,CACpB,IAER,CAgBA,SAASC,EAAMvxI,EAAUzd,EAAUivJ,GAG/B,SAASC,EAAQppJ,EAAOqpJ,EAAUC,EAAQxK,EAAayK,GACnD,GAAuC,KAAlCpuJ,MAgLmC,KAD5BkE,EA/KYgqJ,GAgLb7jI,KAAK,aAAappB,OAAe,wBAA0BiD,EAAQmmB,KAAK,aAAappB,OAAS,EAAI,iCAAmC,IA/K5I,MAAMjB,MA8KlB,IAAoBkE,EAhPHmqJ,EAqEL53D,GArEK43D,EAqEW1K,EApEjB,CACHr8I,IAAK,SAAUiwB,GACX,IAAI+2H,EAAYrzJ,QAAQqsB,KAAK+mI,EAAUE,cAAgB,GACvDD,EAAUzwJ,KAAK05B,GACf82H,EAAUh8H,cAAci8H,EAC5B,EACA7/I,OAAQ,SAAUkL,GACd,IAAI20I,EAAYrzJ,QAAQqsB,KAAK+mI,EAAUE,aACvCD,EAAU/9H,OAAO5W,EAAO,GACxB00I,EAAUh8H,cAAci8H,EAC5B,EACAE,cAAe,SAAUj3H,GACrB,IAAWk3H,EACX,IAAK,IAAI90I,EAAQ,EAAGA,EAAQ00I,EAAUE,YAAYttJ,OAAQ0Y,IACtD,GAAI1e,QAAQyzJ,OAAOL,EAAUE,YAAY50I,GAAQ4d,GAAM,CACnDk3H,EAAc90I,EACd,KACJ,MAGgBlC,IAAhBg3I,GACAliJ,KAAKkC,OAAOggJ,EACpB,IA+CIE,EAAcR,EAAOS,eAAe,SACpCC,EAnBZ,SAAqBC,GAGjB,IAAIC,EAAsBC,EAF1B,QAAev3I,IAAXq3I,EAKJ,OAFAC,EAAuBD,EAAOtyJ,QAAQ,KAAO,EAC7CwyJ,EAAwBF,EAAOtyJ,QAAQ,KAChCsyJ,EAAOj9F,OAAOk9F,EAAsBC,EAAwBD,EACvE,CAY4BE,CAAYd,EAAOhwE,QAWvCt5E,EAAMqqJ,MAAMx9F,KAEZ7sD,EAAMqqJ,MAAMC,QAAU,SAAU/vJ,GAC5B,IAAIgwJ,EAAaC,EA5FNr4H,EAoGX,QANqBvf,IAAjB5S,EAAMs5E,QAA0C,KAAlB0wE,IAC9BQ,EAAW,CAAC,GACHR,GAAiBzvJ,EAC1BgwJ,EAAcvqJ,EAAMs5E,OAAOkxE,IACtBD,EAAchwJ,GAElBgwJ,EACD,OAAO,EAkBX,OAvHWp4H,EAwGOo4H,IAvGZn0J,QAAQimJ,WAAWlqH,EAAInzB,OAwGzBurJ,EAAYvrJ,MAAK,SAAUrE,GACvBi3F,EAAMnvF,IAAI9H,EACd,IACAqF,EAAMqqJ,MAAMx9F,KAAK7zD,KAAK,IAAI+vJ,EAAUxuJ,EAAMgwJ,IAC1CvqJ,EAAMO,UAKV,SAAgBhG,GACZyF,EAAMqqJ,MAAMx9F,KAAK7zD,KAAKuB,GACtBq3F,EAAMnvF,IAAIlI,EACd,CANIk7I,CAAO8U,IAQJ,CACX,EAEAvqJ,EAAMqqJ,MAAMI,WAAa,SAAU31I,GAC/B,IAAI41I,EAAc1qJ,EAAMqqJ,MAAMx9F,KAAKnhC,OAAO5W,EAAO,GAAG,GAChD41I,EAAYzB,SACZjpJ,EAAMO,SAIVmqJ,aAAuB3B,EAAYn3D,EAAM+3D,cAAce,EAAYtvI,OAASw2E,EAAMhoF,OAAOkL,EAC7F,EAKAgqI,EAAYE,QAAU,WAClB,GAAI8K,GAAehL,EAAY4K,YAAa,CACxC,IAAW78F,EAAO,GAClB,IAAK,IAAI/3C,EAAQ,EAAGA,EAAQgqI,EAAY4K,YAAYttJ,OAAQ0Y,IAExD+3C,EAAK7zD,KAAK,IAAI+vJ,EAAUjK,EAAY4K,YAAY50I,KAEpD9U,EAAMqqJ,MAAMx9F,KAAOA,CACvB,MACI7sD,EAAMqqJ,MAAMx9F,KAAOz2D,QAAQqsB,KAAKq8H,EAAY4K,cAAgB,EAGpE,EAEA,IAAIiB,EAAe,KAcnB,IAAIC,EAAUx0J,QAAQiJ,QAAQ,eAC1BwrJ,EAAUxB,EAASxjI,OACvBglI,EAAUA,EAAQ79F,OAAO69F,EAAQlzJ,QAAQ,cAAekzJ,EAAQlzJ,QAAQ,gBAAmB,IAC3F0xJ,EAAS7jI,KAAK,aAAa5hB,SAC3B,IAAIknJ,EAAO10J,QAAQiJ,QAAQwrJ,GAE3BC,EAAKv9H,KAAK,YAAa,sCACvBu9H,EAAKv9H,KAAK,WAAY,iCACtBu9H,EAAKv9H,KAAK,WAAY,MACtBu9H,EAAKv9H,KAAK,QAAS,gBACnBq9H,EAAQ55E,OAAO85E,GACf,IAAIC,EAAOpzI,EAASizI,EAATjzI,CAAkB3X,GAC7BqpJ,EAAS5jI,QAAQslI,GAIjB1B,EAASviI,GAAG,SAAS,SAAU1pB,GACG,UAA1BA,EAAMiD,OAAO2qJ,UACb3B,EAAS7jI,KAAK,SAAS,GAAGkgC,OAClC,IAEA2jG,EAAS7jI,KAAK,SAASsB,GAAG,SAAS,WAC/B6jI,EAAe,IACnB,IAEA3qJ,EAAMqqJ,MAAMY,cAAgB,SAAU7tJ,GAIlC,IAAI8tJ,EAHJ,KAA8B,UAA1B9tJ,EAAMiD,OAAO2qJ,UAAkD,cAA1B5tJ,EAAMiD,OAAO2qJ,UAAmE,IAAtC3B,EAAS7jI,KAAK,aAAappB,QAAuC,KAAvBgB,EAAMiD,OAAO6M,OAc3I,GAAsB,IAAlB9P,EAAMq7E,SACN,GAA8B,UAA1Br7E,EAAMiD,OAAO2qJ,UAA+C,KAAvB5tJ,EAAMiD,OAAO6M,MAClDi+I,IACA/tJ,EAAMkB,sBACH,GAA8B,cAA1BlB,EAAMiD,OAAO2qJ,SAA0B,CAK9C,IAAII,EAAgB/B,EAAS7jI,KAAK,aAC9B4lI,EAAchvJ,OAAS,GAAK6gB,SAAS7f,EAAMiD,OAAO6a,aAAa,UAAY,IAAMkwI,EAAchvJ,QAC/FitJ,EAAS7jI,KAAK,aAAamlI,EAAa,KAAKjlG,OACrD,OAEyB,KAAlBtoD,EAAMq7E,SAAoC,KAAlBr7E,EAAMq7E,UACpB,OAAjBkyE,EAAwBQ,IAAgB9B,EAAS7jI,KAAK,aAAamlI,EAAavtJ,EAAMq7E,UAAU/yB,SAxBpG,SAASylG,IACL,IAAIr2I,EAAQmI,SAAStR,SAAS0/I,cAAcnwI,aAAa,YAAcgwI,EAAY7B,EAAS7jI,KAAK,cAAcppB,QAC/G8uJ,EAAY7B,EAAS7jI,KAAK,cAChB1Q,EAAQ,GAAG4wC,QACrBilG,EA5CR,SAAuB71I,GACnB,OAAO,SAAUs/D,GAGb,OAFc,KAAdA,EAAmBt/D,IAAUA,IAC7BA,EAAQA,EAAQ,EAAI9U,EAAMqqJ,MAAMx9F,KAAKzwD,OAAS,EAAI0Y,EAAQ9U,EAAMqqJ,MAAMx9F,KAAKzwD,OAAS,EAAI,EAAI0Y,CAEhG,CACJ,CAsCuBw2I,CAAcx2I,EAAQ,GACP,UAA1B1X,EAAMiD,OAAO2qJ,UACbE,EAAUP,EAAavtJ,EAAMq7E,UAAU/yB,OAC/C,CAmBJ,EAEA2jG,EAASviI,GAAG,UAAW9mB,EAAMqqJ,MAAMY,eAEnC9B,EAAQE,GAAUt1H,SAAS,iBAC/B,CAEA,OA7JAq1H,EAAQmC,QAAU,CAAC,QAAS,WAAY,SAAU,cAAe,gBA6J1D,CACH5+H,SAAU,IACV3sB,MAAO,CAKHs5E,OAAQ,MAEZhJ,YAAY,EACZv8E,QAAS,UACTgM,KAAMqpJ,EACN/iJ,WAAY,kBACZmlJ,aAAc,QACd3iJ,SAAU,4BAIlB,CAMA,SAAS4iJ,EAAgBnlJ,EAAQsmB,EAAUu8H,GAEvCzhJ,KAAKgkJ,SAAW,SAAUC,GAClBA,EACAxC,EAAQv8H,GAAUg/H,YAAY,kBAAkB73H,SAAS,iBAEzDo1H,EAAQv8H,GAAUg/H,YAAY,iBAAiB73H,SAAS,iBAEhE,EACArsB,KAAKmkJ,WAAa,SAAUtxJ,EAAMua,GAC9BpN,KAAK+iJ,WAAW31I,EACpB,CACJ,CA7QAo0I,EAAMqC,QAAU,CAAC,WAAY,WAAY,WACzCE,EAAgBF,QAAU,CAAC,SAAU,WAAY,WACjDn1J,QAAQC,OAAO,kBAAmB,IAC7BlC,UAAU,QAAS+0J,GACnB7iJ,WAAW,kBAAmBolJ,EA0QtC,CA/QD,GAkRIr1J,QAAQC,OAAO,mBACVlC,UAAU,YAEf,WACI,MAAO,CACHw4B,SAAU,IACV2jD,YAAY,EACZvwE,KAAM,SAAUC,EAAOqpJ,EAAUC,EAAQwC,EAAQvC,GAC7CA,EAAavpJ,GAAO,SAAU+rJ,GAC1B1C,EAASr4E,OAAO+6E,EACpB,IACA1C,EAASviI,GAAG,WAAW,SAAU1pB,GACP,IAAlBA,EAAMq7E,UACNz4E,EAAM66B,WAAW,eACjBz9B,EAAMkB,iBAEd,GACJ,EAER,IAIAlI,QAAQC,OAAO,mBACVlC,UAAU,cAMf,WACI,MAAO,CACHw4B,SAAU,IACV54B,QAAS,UACTgM,KAAM,SAAUC,EAAOqpJ,EAAUC,EAAQ0C,GAwBrC,SAASC,EAAUjsJ,EAAO62H,GACtB,IAAIozB,GAAgC,IAAvBpzB,EAAKl/H,QAAQ,KAAck/H,EAAK11H,MAAM,KAAK,GAAK01H,EAAK11H,MAAM,KAAK,GAC7E,OAAKnB,EAAM+pJ,eAAeE,GAGnBjqJ,EAFIisJ,EAAUjsJ,EAAM0vC,QAASmnF,EAGxC,CAEA,SAAS4zB,IAEL,GAA0B,iBAAfzqJ,EAAMksJ,OAAqBlsJ,EAAMksJ,KAAKlD,UAAjD,CAEA,IAAImD,EAAUC,GAAW,EACrB9C,EAAOS,eAAe,eAAuC,KAAtBT,EAAOuC,aAC9CM,EApCR,SAAqBnsJ,EAAO62H,GACxB,IAAIx2H,EAIJ,GAHIw2H,EAAK/zH,OAAO,OAAS,IACrB+zH,EAAOA,EAAK7pE,OAAO,EAAG6pE,EAAK/zH,OAAO,cAEzB8P,IAATikH,EACA,GAAIA,EAAK11H,MAAM,KAAK/E,OAAS,EAAG,CAC5B,IAAIiwJ,EAASx1B,EAAK11H,MAAM,KACxBd,EAASL,EACT,IAAK,IAAI8U,EAAQ,EAAGA,EAAQu3I,EAAOjwJ,OAAQ0Y,IACvCzU,EAASA,EAAOgsJ,EAAOv3I,GAE/B,MACIzU,EAASL,EAAM62H,GAGvB,OAAOx2H,CACX,CAmBmBisJ,CAAYL,EAAUjsJ,EAAOspJ,EAAOuC,YAAavC,EAAOuC,YACnEO,EAAWD,EAASnsJ,EAAMksJ,OAE1BE,GACAJ,EAAUH,WAAW7rJ,EAAMksJ,KAAMlsJ,EAAMusJ,OAPjC,CAQd,CAEAlD,EAASviI,GAAG,SAAS,WACjB2jI,GACJ,IAEAzqJ,EAAM7C,IAAI,eAAe,WACrBstJ,GACJ,GAEJ,EAER,IAGJ,WAMI,SAAStB,EAAQ9pJ,GAMb,IAAImtJ,EAAU,CAEdA,SAAmB,SAAUz0J,GAGzB,OAFAy0J,EAAQZ,YAAYvsJ,EAAStH,GAC7BsH,EAAQkuB,KAAK,QAASluB,EAAQkuB,KAAK,SAAW,IAAMx1B,GAC7Cy0J,CACX,EAEAA,YAAsB,SAAUz0J,GAC5B,IAAI00J,EAAUptJ,EAAQkuB,KAAK,SAASpsB,MAAM,KACtCurJ,EAAaD,EAAQ90J,QAAQI,GAKjC,OAJoB,IAAhB20J,GACAD,EAAQ/gI,OAAOghI,EAAY,GAE/BrtJ,EAAQkuB,KAAK,QAASk/H,EAAQhvH,KAAK,MAC5B+uH,CACX,GAEA,OAAOA,CACX,CA9BAp2J,QAAQC,OAAO,mBACVq2C,QAAQ,WAAW,WAChB,OAAOy8G,CACX,GA4BP,CAhCD,GAkCA,WAiBI,SAASwD,EAAmB3sJ,EAAOqpJ,EAAUC,EAAQ0C,GACjD3C,EAASviI,GAAG,YAAY,SAAU1pB,GACR,KAAlBA,EAAMq7E,UACqB,KAAvBr7E,EAAMiD,OAAO6M,OAAgB8+I,EAAU1B,QAAQltJ,EAAMiD,OAAO6M,SAC5D9P,EAAMiD,OAAO6M,MAAQ,IAEzB9P,EAAMkB,iBAEd,IAEA+qJ,EAASviI,GAAG,SAAS,WACjBklI,EAAUN,UAAS,EACvB,IACArC,EAASviI,GAAG,QAAQ,WAChBklI,EAAUN,UAAS,EACvB,GACJ,CAhCAiB,EAAmBpB,QAAU,CAAC,QAAS,WAAY,SAAU,aAC7Dn1J,QAAQC,OAAO,mBACVlC,UAAU,eAMf,WACI,MAAO,CACHw4B,SAAU,IACV54B,QAAS,SACTgM,KAAM4sJ,EAEd,GAmBH,CAlCD,GAqCIv2J,QAAQC,OAAO,mBACVlC,UAAU,kBAMf,WACI,MAAO,CACHw4B,SAAU,IACV54B,QAAS,CAAC,UAAW,UACrBgM,KAAM,SAAUC,EAAOqpJ,EAAUC,EAAQjjJ,GACrC,IAAIy4I,EAAcz4I,EAAW,GACzB2lJ,EAAY3lJ,EAAW,GAC3By4I,EAAYE,QAAU,SAAU5hJ,GACvB0hJ,EAAY4K,aAEbsC,EAAU1B,QAAQxL,EAAY4K,cAC9BL,EAAS32H,IAAI,GAErB,EAEA22H,EAASviI,GAAG,SAAS,WACjBklI,EAAUN,UAAS,EACvB,IACArC,EAASviI,GAAG,QAAQ,WAChBklI,EAAUN,UAAS,EACvB,GACJ,EAER,gECxcJ,IAQIkB,EARAC,EAAmB,CACnBnyI,QAAS,KACTC,kBAAmB,cACnBC,cAAe,WACfC,aAAc,SACdC,eAAgB,oBAChBC,aAAc,QAGd+xI,EAAc,uCAIdC,EAAmB,WACnB,IAAIC,EAAW,CAAC,EACZC,GAAO,EACP9uJ,EAAI,EAC6C,qBAAjD46E,OAAOC,UAAUxsB,SAASs5B,KAAKonE,UAAU,MACzCD,EAAOC,UAAU,GACjB/uJ,KAaJ,IAXA,IAAI+kI,EAAQ,SAAU/wG,GAClB,IAAK,IAAI0kG,KAAQ1kG,EACTA,EAAI43H,eAAelzB,KACfo2B,GAAsD,oBAA9Cl0E,OAAOC,UAAUxsB,SAASs5B,KAAK3zD,EAAI0kG,IAC3Cm2B,EAASn2B,GAAQk2B,EAAiBC,EAASn2B,GAAO1kG,EAAI0kG,IAEtDm2B,EAASn2B,GAAQ1kG,EAAI0kG,GAIrC,EACO14H,EAAI+uJ,UAAU9wJ,OAAQ+B,IACzB+kI,EAAMgqB,UAAU/uJ,IAEpB,OAAO6uJ,CACX,EAyYA,QApYiB,CAGbvyI,KAAM,SAAU0yI,GACZP,EAAeG,GAAiB,EAAMF,EAAkBM,EAC5D,EAGAnyI,IAAK,SAAUoyI,EAAWC,GAGtB,IAAIC,EAAiB,SAAUjkJ,GAC3B,OAAOsa,QAAQxoB,MAAM,yBAA0B,+DAAgE,KAAOkO,EAC1H,EAIIkkJ,EAAe,SAAUlkJ,GACzB,OAAOsa,QAAQnY,IAAI,wBAAyB,+DAAgE,KAAOnC,EACvH,EAIA,KAAI6jJ,WAAaA,UAAU9wJ,QAAU,GAwE9B,OAAI8wJ,WAAaA,UAAU9wJ,OAAS,GACvCkxJ,EAAe,kCACR,IAEPA,EAAe,0KAA4KR,IACpL,GA1EP,IAAIU,EAAY7hJ,SAAS8hJ,iBAAiBL,GAG1C,GAAII,GAAaA,EAAUpxJ,OAAS,EAChC,IAAK,IAAI+B,EAAI,EAAGA,EAAIqvJ,EAAUpxJ,OAAQ+B,IAAK,CAGxBqvJ,EAAUrvJ,GAChBivI,iBAAiB,SAAS,WAC/B,IAAI1yH,EAAUkyI,EAAalyI,QACvBgzI,EAAehmJ,KAAK2jC,QAAQsiH,gBAC5BC,EAAiBlmJ,KAAK2jC,QAAQwiH,kBAC9BjzI,EAAgBgyI,EAAahyI,gBAC5BA,GAAkBA,GAAiBA,EAAcxe,OAAS,KAC3Dwe,EAAgBiyI,EAAiBjyI,eAErC,IAAIC,EAAe+xI,EAAa/xI,eAC3BA,GAAiBA,GAAgBA,EAAaze,OAAS,KACxDye,EAAegyI,EAAiBhyI,cAEpC,IAAIF,EAAoBiyI,EAAajyI,oBAChCA,GAAsBA,GAAqBA,EAAkBve,OAAS,KACvEue,EAAoBkyI,EAAiBlyI,mBAEzC,IAAII,EAAe6xI,EAAa7xI,aAMhC,QALKA,GAAiBA,GAAgBA,EAAa3e,OAAS,KACxD2e,EAAe8xI,EAAiB9xI,cAI/BL,EAOY/O,SAAS8hJ,iBAAiBC,GAC5BtxJ,QAAU,GACrBkxJ,EAAe,iOAAmOR,IAC3O,IAKYnhJ,SAAS8hJ,iBAAiBG,GAC5BxxJ,QAAU,GAC3BmxJ,EAAa,iPAAmPT,GAK/PO,GAAsC,mBAAhBA,IACvBA,OAAcz6I,QAIlBk7I,EAA0BpzI,EAASE,EAAeC,EAAcF,EAAmBI,EAAc2yI,EAAcE,EAAgBP,KA1B3HC,EAAe,iGAAmGR,IAC3G,EA2Bf,GAGJ,MAIAQ,EAAe,mCAAqCF,EAAY,6DAcxE,IAAIU,EAA4B,SAAUpzI,EAASqzI,EAAettD,EAAc9lF,EAAmBI,EAAc2yI,EAAcE,EAAgBP,GAG3I,GAAItsJ,UAAUitJ,UAAUpvJ,cAAcjH,QAAQ,WAAa,GAEnDP,OAAOK,SAASkhG,SAAShhG,QAAQ,UAAY,EAE7C,OADA41J,EAAa,wDACN,EAQf,IAHgB5hJ,SAAS6/D,eAAe,mBAGxB,CACZ,IAAIyiF,EAAU,IAAIC,eAClBD,EAAQ9gJ,KAAK,MAAOuN,GAAS,GAC7BuzI,EAAQE,iBAAiB,eAAgB,mCACzCF,EAAQ3+H,OACR2+H,EAAQG,mBAAqB,WACzB,GAAwB,IAApB1mJ,KAAK2mJ,WACL,GAAoB,MAAhB3mJ,KAAKtM,OAAgB,CACrB,IAAIb,EAAOmN,KAAK4mJ,aAChBC,EAAqBh0J,EAAMwzJ,EAAettD,EAAc9lF,EAAmBI,EAAc2yI,EAAcE,EAAgBP,EAC3H,MACIC,EAAe,yBAG3B,CACJ,CACJ,EAKIiB,EAAuB,SAAUh0J,EAAMwzJ,EAAettD,EAAc9lF,EAAmBI,EAAc2yI,EAAcE,EAAgBP,GAGnI,IAAImB,EAAWj7I,KAAK2M,MAAM3lB,GAGtBk0J,EAAQ,GACZ,IAAK,IAAIv8H,KAAOs8H,EACZ,GAAIA,EAASzE,eAAe73H,GAAM,CAC9B,IAAIw8H,EAASF,EAASt8H,GAEtBu8H,GADW,mBAAqBC,EAAS,iBAAmBA,EAAS,mCAAqCA,EAAS,QAEvH,CAIJ,IAGIC,EAAW,sDAAwD5zI,EAAxD,+HACmHJ,EAAoB,0BAA4BI,EADnK,8vCAKX0zI,EACA,qDAAuD1zI,EAAe,MAAQgzI,EANnE,iFAQ8DhzI,EAAe,MAAQ0lF,EARrF,mBAYXmuD,EAAkBjjJ,SAASqpC,cAAc,OAC7C45G,EAAgB3lJ,GAAK,kBACrB2lJ,EAAgBC,UAAYF,EAG5B,IAAIG,EAAUnjJ,SAASC,KAGvBkjJ,EAAQjzC,YAAY+yC,GAGpB,IAAIG,EAAYpjJ,SAAS6/D,eAAeojF,EAAgB3lJ,IAGxD8lJ,EAAU1qF,MAAM2qF,QAAU,QAG1B,IAAIC,EAAWhyI,SAAS8xI,EAAUG,cAC9BC,EAAYlyI,SAAS7lB,OAAOi6E,aAG5B+9E,EAAgBnyI,SAAS7lB,OAAOipE,aAAe10D,SAAS0jJ,gBAAgBzjG,WACxE0jG,EAAcF,GAAkBD,EAAYF,GAAY,EACxDE,EAAY,IAAMF,IAClBK,EAAcF,GAElBL,EAAU1qF,MAAMxY,IAAMyjG,EAAc,KAIpCP,EAAUQ,UAAU9sJ,IAAI,WAGxB,IAAI+sJ,EAAiB7jJ,SAAS6/D,eAAe,qBACzCikF,EAAYhsI,YAAW,WACvB+rI,EAAeD,UAAU9sJ,IAAI,QAC7Bw3E,aAAaw1E,EACjB,GAAG,KACCC,EAAWjsI,YAAW,WACtB+rI,EAAeG,WAAWxa,YAAYqa,GACtCv1E,aAAay1E,EACjB,GAAG,KAIoB/jJ,SAAS6/D,eAAeojF,EAAgB3lJ,IAAI2mJ,uBAAuB,qBAAqB,GAC9FxiB,iBAAiB,SAAS,WACvC2hB,EAAUQ,UAAU9sJ,IAAI,YACxBiF,KAAKioJ,WAAWxa,YAAYztI,KAChC,IAAG,GAIH,IAAImoJ,EAAkB,SAAUC,GAC5Bf,EAAUQ,UAAU3rJ,OAAO,WAC3B6f,YAAW,WACPqrI,EAAQ3Z,YAAY4Z,EACxB,GAAGe,EACP,EAIsBnkJ,SAAS6/D,eAAeojF,EAAgB3lJ,IAAI2mJ,uBAAuB,UAAU,GACnFxiB,iBAAiB,SAAS,WACtCyiB,EAAgB,IACpB,IAAG,GAIkBlkJ,SAAS6/D,eAAe,oBAC9B4hE,iBAAiB,SAAS,SAAUvvI,GAG/C,IAAIkyJ,EAAWlyJ,EAAE46E,QACbu3E,EAAQnyJ,EAAEgT,KAAK27C,WAAW5tD,cAG1BqxJ,GAAmB,EAMvB,GALiB,KAAbF,GAA6B,UAAVC,GAAkC,IAAbD,GAA4B,cAAVC,IAC1DC,GAAmB,GAIN,KAAbF,GAA6B,UAAVC,EAEnB,OADAtoJ,KAAKwF,MAAQxF,KAAKwF,MAAM7R,QAAQ,IAAK,KAC9B,EAIX,IAAI60J,EAAYxoJ,KAAKwF,MAAMs/C,WAAW5tD,cAGlCuxJ,EAAiBxkJ,SAAS6/D,eAAeojF,EAAgB3lJ,IAAI2mJ,uBAAuB,iBAAiB,GACrGQ,EAAmBzkJ,SAAS6/D,eAAeojF,EAAgB3lJ,IAAI2mJ,uBAAuB,2BAA2B,GAMrH,GAHAQ,EAAiBvB,UAAY,IAGxBoB,GAAoBC,EAAU9zJ,OAAS,EAAG,CAG3C,IAAIi0J,EAAY,GAChB,IAAK,IAAIn+H,KAAOs8H,EACZ,GAAIA,EAASzE,eAAe73H,GAAM,CAC9B,IAAIw8H,EAASF,EAASt8H,GAEtB,GAAIw8H,EAAOliG,WAAW70D,QAAQu4J,IAAc,EACxCC,EAAe9rF,MAAM2qF,QAAU,OAE/BqB,GADe,mBAAqB3B,EAAS,iBAAmBA,EAAS,oCAAsCA,EAAS,QAGhI,CAIJ,IAAI4B,EAAc3kJ,SAASqpC,cAAc,OAKzC,GAJAs7G,EAAYrnJ,GAAK,mBACjBqnJ,EAAYzB,UAAYwB,EAGpBA,EAAUj0J,OAAS,EAAG,CACtB+zJ,EAAe9rF,MAAM2qF,QAAU,OAC/B,IAAIuB,EAAgB3D,EAAa9xI,iBAC5By1I,GAAkBA,GAAiBA,EAAcn0J,OAAS,KAC3Dm0J,EAAgB1D,EAAiB/xI,gBAErC,IAAI01I,EAAc,kCAAoCD,EAAgB,OACtED,EAAYzB,UAAY2B,CAC5B,CAIAJ,EAAiBv0C,YAAYy0C,GAG7BG,EAAsB,SAE1B,MAGIN,EAAe9rF,MAAM2qF,QAAU,OAGvC,IAAG,GAKH,IAAIyB,EAAwB,SAAUC,GAElC,IAIIC,EAJAC,EAAWjlJ,SAAS8hJ,iBAAiBC,GACrCmD,EAAallJ,SAAS8hJ,iBAAiBG,GAIrB,UAAlB8C,EACAC,EAAchlJ,SAAS6/D,eAAeojF,EAAgB3lJ,IAAI2mJ,uBAAuB,cACxD,WAAlBc,IACPC,EAAchlJ,SAAS6/D,eAAeojF,EAAgB3lJ,IAAI2mJ,uBAAuB,gBAKrF,IAAK,IAAIzxJ,EAAI,EAAGA,EAAIwyJ,EAAYv0J,OAAQ+B,IAAK,CACrBwyJ,EAAYxyJ,GAClBivI,iBAAiB,SAAS,SAAUvvI,GAC9CA,EAAES,iBAIF,IAHA,IAAIwyJ,EAAgBppJ,KAAK2jC,QAAQ23C,MAGxB7kF,EAAI,EAAGA,EAAIyyJ,EAASx0J,OAAQ+B,IAAK,CAEtC,IAAI4yJ,EAAaH,EAASzyJ,GAAG6yJ,QAAQxkG,WAAW5tD,cAE7B,UAAfmyJ,GAAyC,aAAfA,EAC1BH,EAASzyJ,GAAG+O,MAAQ4jJ,EAIpBF,EAASzyJ,GAAG0wJ,UAAYiC,CAGhC,CAIA,IAAS3yJ,EAAI,EAAGA,EAAI0yJ,EAAWz0J,OAAQ+B,IACnC0yJ,EAAW1yJ,GAAGpG,UAAY+4J,EAK1BzD,GACAA,IAIJwC,EAAgB,IACpB,IAAG,EACP,CAGJ,EAIAY,EAAsB,QAE1B,CAEJ,mCC5aJ3vJ,GAAE,WACEA,EAAE1J,QAAQwJ,KAAK,eAAe,WACtBE,EAAE4G,MAAMuC,QAAU,IAClBnJ,EAAE,QAAQizB,SAAS,cAEnBjzB,EAAE,QAAQ8qJ,YAAY,aAE9B,GACJ,IAEAx1J,QAAQC,OAAO,WAAY,IAE1BlC,UAAU,SAAU,CAAC,WAAY,SAAgB+F,GAC9C,MAAO,CACHyyB,SAAU,IACV54B,QAAS,UACTgM,KAAM,SAAUuG,EAAQjH,EAAS6tB,EAAQC,GACrC,OAAOjzB,GAAS,WACZ,IAAIgT,EAOJ,OANAA,EAAQggB,EAAc,MAEtB5mB,EAAO9H,OAAO0uB,EAAgB,SAAG,SAAUxsB,GACvCI,EAAEzB,GAAS+tB,OAAO,SACtB,IAEOtsB,EAAEzB,GAAS+tB,OAAO,CACrBC,cAAe,0BACfC,WAAY,yBAEbxG,GAAG,aAAa,SAAU1pB,GAMzB,GALgC,aAA5B0D,EAAEzB,GAASkuB,KAAK,SAA0BL,EAAgB,SAC1D5mB,EAAO/F,QAAO,WACV,OAAO4sB,EAAQK,cAAcpwB,EAAMiD,OAAO+f,QAC9C,IAE4B,UAA5Btf,EAAEzB,GAASkuB,KAAK,SAAuBL,EAAgB,QACvD,OAAO5mB,EAAO/F,QAAO,WACjB,OAAO4sB,EAAQK,cAActgB,EACjC,GAER,GACJ,GACJ,EAER,4xBCpDA,IAAIsF,EAAM,CACT,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,aAAc,MACd,UAAW,MACX,aAAc,MACd,UAAW,MACX,aAAc,MACd,UAAW,MACX,aAAc,MACd,UAAW,KACX,aAAc,KACd,UAAW,MACX,aAAc,MACd,UAAW,MACX,aAAc,MACd,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,aAAc,MACd,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,KACR,UAAW,KACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,aAAc,MACd,UAAW,MACX,aAAc,MACd,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,UAAW,MACX,aAAc,MACd,UAAW,MACX,aAAc,MACd,UAAW,MACX,aAAc,MACd,UAAW,MACX,aAAc,MACd,UAAW,MACX,aAAc,MACd,UAAW,KACX,aAAc,KACd,UAAW,MACX,aAAc,MACd,UAAW,MACX,aAAc,MACd,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,aAAc,MACd,UAAW,MACX,aAAc,MACd,UAAW,MACX,aAAc,MACd,UAAW,MACX,OAAQ,KACR,UAAW,KACX,OAAQ,KACR,UAAW,KACX,OAAQ,IACR,UAAW,IACX,OAAQ,MACR,UAAW,MACX,QAAS,MACT,WAAY,MACZ,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,aAAc,MACd,UAAW,MACX,aAAc,MACd,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,aAAc,MACd,gBAAiB,MACjB,aAAc,MACd,gBAAiB,MACjB,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,UAAW,MACX,aAAc,MACd,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,aAAc,MACd,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,WAAY,KACZ,cAAe,KACf,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,aAAc,MACd,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,KACR,UAAW,KACX,OAAQ,MACR,UAAW,MACX,aAAc,MACd,UAAW,MACX,OAAQ,MACR,UAAW,MACX,WAAY,MACZ,cAAe,MACf,UAAW,MACX,aAAc,MACd,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,aAAc,MACd,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,KACR,UAAW,KACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,KACR,UAAW,KACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,YAAa,KACb,eAAgB,KAChB,UAAW,MACX,OAAQ,KACR,UAAW,KACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,QAAS,MACT,WAAY,MACZ,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,UAAW,MACX,aAAc,MACd,QAAS,MACT,WAAY,MACZ,OAAQ,MACR,UAAW,MACX,QAAS,MACT,WAAY,MACZ,QAAS,MACT,aAAc,MACd,gBAAiB,MACjB,WAAY,MACZ,UAAW,MACX,aAAc,MACd,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,YAAa,MACb,eAAgB,MAChB,UAAW,MACX,OAAQ,MACR,UAAW,MACX,aAAc,MACd,gBAAiB,MACjB,OAAQ,MACR,UAAW,MACX,UAAW,MACX,aAAc,MACd,UAAW,KACX,aAAc,KACd,UAAW,MACX,aAAc,MACd,UAAW,MACX,aAAc,OAIf,SAASy+I,EAAeC,GACvB,IAAIjoJ,EAAKkoJ,EAAsBD,GAC/B,OAAOE,EAAoBnoJ,EAC5B,CACA,SAASkoJ,EAAsBD,GAC9B,IAAIE,EAAoBz/G,EAAEn/B,EAAK0+I,GAAM,CACpC,IAAIrzJ,EAAI,IAAI8T,MAAM,uBAAyBu/I,EAAM,KAEjD,MADArzJ,EAAEgT,KAAO,mBACHhT,CACP,CACA,OAAO2U,EAAI0+I,EACZ,CACAD,EAAep2B,KAAO,WACrB,OAAO9hD,OAAO8hD,KAAKroH,EACpB,EACAy+I,EAAe5jJ,QAAU8jJ,EACzB96J,EAAOF,QAAU86J,EACjBA,EAAehoJ,GAAK,su48CCtShBooJ,EAA2B,CAAC,EAGhC,SAASD,EAAoBE,GAE5B,IAAIC,EAAeF,EAAyBC,GAC5C,QAAqB1+I,IAAjB2+I,EACH,OAAOA,EAAap7J,QAGrB,IAAIE,EAASg7J,EAAyBC,GAAY,CACjDroJ,GAAIqoJ,EACJE,QAAQ,EACRr7J,QAAS,CAAC,GAUX,OANAs7J,EAAoBH,GAAUxrE,KAAKzvF,EAAOF,QAASE,EAAQA,EAAOF,QAASi7J,GAG3E/6J,EAAOm7J,QAAS,EAGTn7J,EAAOF,OACf,CAGAi7J,EAAoBlhI,EAAIuhI,EC5BxBL,EAAoBM,KAAO,WAC1B,MAAM,IAAI//I,MAAM,iCACjB,ECFAy/I,EAAoBO,KAAO,CAAC,E/YAxB99J,EAAW,GACfu9J,EAAoBQ,EAAI,CAACnoJ,EAAQooJ,EAAUC,EAAIvhF,KAC9C,IAAGshF,EAAH,CAMA,IAAIE,EAAeC,IACnB,IAAS7zJ,EAAI,EAAGA,EAAItK,EAASuI,OAAQ+B,IAAK,CAGzC,IAFA,IAAK0zJ,EAAUC,EAAIvhF,GAAY18E,EAASsK,GACpC8zJ,GAAY,EACPt+G,EAAI,EAAGA,EAAIk+G,EAASz1J,OAAQu3C,MACpB,EAAX48B,GAAsBwhF,GAAgBxhF,IAAawI,OAAO8hD,KAAKu2B,EAAoBQ,GAAGlhE,OAAOx+D,GAASk/H,EAAoBQ,EAAE1/H,GAAK2/H,EAASl+G,MAC9Ik+G,EAASnmI,OAAOioB,IAAK,IAErBs+G,GAAY,EACT1hF,EAAWwhF,IAAcA,EAAexhF,IAG7C,GAAG0hF,EAAW,CACbp+J,EAAS63B,OAAOvtB,IAAK,GACrB,IAAI4tB,EAAI+lI,SACEl/I,IAANmZ,IAAiBtiB,EAASsiB,EAC/B,CACD,CACA,OAAOtiB,CAnBP,CAJC8mE,EAAWA,GAAY,EACvB,IAAI,IAAIpyE,EAAItK,EAASuI,OAAQ+B,EAAI,GAAKtK,EAASsK,EAAI,GAAG,GAAKoyE,EAAUpyE,IAAKtK,EAASsK,GAAKtK,EAASsK,EAAI,GACrGtK,EAASsK,GAAK,CAAC0zJ,EAAUC,EAAIvhF,EAqBjB,EgZzBd6gF,EAAoBrmF,EAAI,CAAC50E,EAAS+7J,KACjC,IAAI,IAAIhgI,KAAOggI,EACXd,EAAoBz/G,EAAEugH,EAAYhgI,KAASk/H,EAAoBz/G,EAAEx7C,EAAS+7B,IAC5E6mD,OAAOo5E,eAAeh8J,EAAS+7B,EAAK,CAAEkgI,YAAY,EAAMn6J,IAAKi6J,EAAWhgI,IAE1E,ECNDk/H,EAAoBiB,EAAI,WACvB,GAA0B,iBAAfC,WAAyB,OAAOA,WAC3C,IACC,OAAO5qJ,MAAQ,IAAI6qJ,SAAS,cAAb,EAChB,CAAE,MAAO10J,GACR,GAAsB,iBAAXzG,OAAqB,OAAOA,MACxC,CACA,CAPuB,GCAxBg6J,EAAoBz/G,EAAI,CAACxf,EAAK0kG,IAAU99C,OAAOC,UAAU+wE,eAAejkE,KAAK3zD,EAAK0kG,GCClFu6B,EAAoBrlI,EAAK51B,IACH,oBAAXq8J,QAA0BA,OAAOC,aAC1C15E,OAAOo5E,eAAeh8J,EAASq8J,OAAOC,YAAa,CAAEvlJ,MAAO,WAE7D6rE,OAAOo5E,eAAeh8J,EAAS,aAAc,CAAE+W,OAAO,GAAO,ECL9DkkJ,EAAoBsB,IAAOr8J,IAC1BA,EAAOs8J,MAAQ,GACVt8J,EAAO2wJ,WAAU3wJ,EAAO2wJ,SAAW,IACjC3wJ,SCER,IAAIu8J,EAAkB,CACrB,IAAK,GAaNxB,EAAoBQ,EAAEj+G,EAAKk/G,GAA0C,IAA7BD,EAAgBC,GAGxD,IAAIC,EAAuB,CAACC,EAA4Bx4J,KACvD,IAGI+2J,EAAUuB,GAHThB,EAAUmB,EAAaC,GAAW14J,EAGhB4D,EAAI,EAC3B,GAAG0zJ,EAASn4H,MAAMzwB,GAAgC,IAAxB2pJ,EAAgB3pJ,KAAa,CACtD,IAAIqoJ,KAAY0B,EACZ5B,EAAoBz/G,EAAEqhH,EAAa1B,KACrCF,EAAoBlhI,EAAEohI,GAAY0B,EAAY1B,IAGhD,GAAG2B,EAAS,IAAIxpJ,EAASwpJ,EAAQ7B,EAClC,CAEA,IADG2B,GAA4BA,EAA2Bx4J,GACrD4D,EAAI0zJ,EAASz1J,OAAQ+B,IACzB00J,EAAUhB,EAAS1zJ,GAChBizJ,EAAoBz/G,EAAEihH,EAAiBC,IAAYD,EAAgBC,IACrED,EAAgBC,GAAS,KAE1BD,EAAgBC,GAAW,EAE5B,OAAOzB,EAAoBQ,EAAEnoJ,EAAO,EAGjCypJ,EAAqB/7E,KAAmC,6BAAIA,KAAmC,8BAAK,GACxG+7E,EAAmBpkJ,QAAQgkJ,EAAqBlyJ,KAAK,KAAM,IAC3DsyJ,EAAmBl6J,KAAO85J,EAAqBlyJ,KAAK,KAAMsyJ,EAAmBl6J,KAAK4H,KAAKsyJ,QC7CvF9B,EAAoBQ,OAAEh/I,EAAW,CAAC,MAAM,IAAOw+I,EAAoB,SACnEA,EAAoBQ,OAAEh/I,EAAW,CAAC,MAAM,IAAOw+I,EAAoB,SACnEA,EAAoBQ,OAAEh/I,EAAW,CAAC,MAAM,IAAOw+I,EAAoB,SACnEA,EAAoBQ,OAAEh/I,EAAW,CAAC,MAAM,IAAOw+I,EAAoB,SACnEA,EAAoBQ,OAAEh/I,EAAW,CAAC,MAAM,IAAOw+I,EAAoB,SACnEA,EAAoBQ,OAAEh/I,EAAW,CAAC,MAAM,IAAOw+I,EAAoB,QACnE,IAAI+B,EAAsB/B,EAAoBQ,OAAEh/I,EAAW,CAAC,MAAM,IAAOw+I,EAAoB,QAC7F+B,EAAsB/B,EAAoBQ,EAAEuB","sources":["webpack://stela-frontend-2/webpack/runtime/chunk loaded","webpack://stela-frontend-2/./src/app.downgraded.ts","webpack://stela-frontend-2/./src/app.ts","webpack://stela-frontend-2/./src/app/accesses/_index.ts","webpack://stela-frontend-2/./src/app/accesses/accesses-list.ts","webpack://stela-frontend-2/./src/app/accesses/accesses.ts","webpack://stela-frontend-2/./src/app/annexes/_index.ts","webpack://stela-frontend-2/./src/app/annexes/annexes-edit.ts","webpack://stela-frontend-2/./src/app/annexes/annexes-list.ts","webpack://stela-frontend-2/./src/app/annexes/annexes.ts","webpack://stela-frontend-2/./src/app/app.module.ts","webpack://stela-frontend-2/./src/app/audits/_index.ts","webpack://stela-frontend-2/./src/app/audits/audits-list.ts","webpack://stela-frontend-2/./src/app/audits/audits.ts","webpack://stela-frontend-2/./src/app/auth/_index.ts","webpack://stela-frontend-2/./src/app/auth/auth-process-init.ts","webpack://stela-frontend-2/./src/app/auth/auth-register-auth-code.ts","webpack://stela-frontend-2/./src/app/auth/auth-register-webauthn.ts","webpack://stela-frontend-2/./src/app/auth/auth-register-yubicootp.ts","webpack://stela-frontend-2/./src/app/auth/auth.ts","webpack://stela-frontend-2/./src/app/authentication_processes/_index.ts","webpack://stela-frontend-2/./src/app/authentication_processes/authentication_processes-edit.ts","webpack://stela-frontend-2/./src/app/authentication_processes/authentication_processes-list.ts","webpack://stela-frontend-2/./src/app/authentication_processes/authentication_processes.ts","webpack://stela-frontend-2/./src/app/authentication_services/_index.ts","webpack://stela-frontend-2/./src/app/authentication_services/authentication_services-edit.ts","webpack://stela-frontend-2/./src/app/authentication_services/authentication_services-list.ts","webpack://stela-frontend-2/./src/app/authentication_services/authentication_services.ts","webpack://stela-frontend-2/./src/app/budget_groups/_index.ts","webpack://stela-frontend-2/./src/app/budget_groups/budget_groups-edit.ts","webpack://stela-frontend-2/./src/app/budget_groups/budget_groups-list.ts","webpack://stela-frontend-2/./src/app/budget_groups/budget_groups.ts","webpack://stela-frontend-2/./src/app/cms_categories/_index.ts","webpack://stela-frontend-2/./src/app/cms_categories/cms_articles-edit.ts","webpack://stela-frontend-2/./src/app/cms_categories/cms_articles-list.ts","webpack://stela-frontend-2/./src/app/cms_categories/cms_articles.ts","webpack://stela-frontend-2/./src/app/cms_categories/cms_categories-edit.ts","webpack://stela-frontend-2/./src/app/cms_categories/cms_categories-list.ts","webpack://stela-frontend-2/./src/app/cms_categories/cms_categories.ts","webpack://stela-frontend-2/./src/app/common/_index.ts","webpack://stela-frontend-2/./src/app/common/breadcrumb/breadcrumb.ts","webpack://stela-frontend-2/./src/app/common/calendar/calendar.ts","webpack://stela-frontend-2/./src/app/common/group_import/group_import.ts","webpack://stela-frontend-2/./src/app/common/ibox-tools/ibox_tools.ts","webpack://stela-frontend-2/./src/app/common/modal/modal.ts","webpack://stela-frontend-2/./src/app/common/navigation/navigation.ts","webpack://stela-frontend-2/./src/app/common/notifications_templates_mails/notificationsMail.ts","webpack://stela-frontend-2/./src/app/common/otherPages/forbidden.ts","webpack://stela-frontend-2/./src/app/common/people_import/people_import.ts","webpack://stela-frontend-2/./src/app/common/push_notifications/pushNotification.ts","webpack://stela-frontend-2/./src/app/common/topnavbar/topnavbar.ts","webpack://stela-frontend-2/./src/app/companies/_index.ts","webpack://stela-frontend-2/./src/app/companies/companies-edit.ts","webpack://stela-frontend-2/./src/app/companies/companies-list.ts","webpack://stela-frontend-2/./src/app/companies/companies.ts","webpack://stela-frontend-2/./src/app/contact_types/_index.ts","webpack://stela-frontend-2/./src/app/contact_types/contact_types-edit.ts","webpack://stela-frontend-2/./src/app/contact_types/contact_types-list.ts","webpack://stela-frontend-2/./src/app/contact_types/contact_types.ts","webpack://stela-frontend-2/./src/app/core/core.module.ts","webpack://stela-frontend-2/./src/app/core/services/auth.service.ts","webpack://stela-frontend-2/./src/app/core/services/log.service.ts","webpack://stela-frontend-2/./src/app/correspondence/_index.ts","webpack://stela-frontend-2/./src/app/correspondence/correspondence-edit.ts","webpack://stela-frontend-2/./src/app/correspondence/correspondence-list.ts","webpack://stela-frontend-2/./src/app/correspondence/correspondence.ts","webpack://stela-frontend-2/./src/app/correspondences_types/_index.ts","webpack://stela-frontend-2/./src/app/correspondences_types/correspondences_types-edit.ts","webpack://stela-frontend-2/./src/app/correspondences_types/correspondences_types-list.ts","webpack://stela-frontend-2/./src/app/correspondences_types/correspondences_types.ts","webpack://stela-frontend-2/./src/app/countries/_index.ts","webpack://stela-frontend-2/./src/app/countries/countries-edit.ts","webpack://stela-frontend-2/./src/app/countries/countries-list.ts","webpack://stela-frontend-2/./src/app/countries/countries.ts","webpack://stela-frontend-2/./src/app/countries/countries_regions-edit.ts","webpack://stela-frontend-2/./src/app/dashboard/_index.ts","webpack://stela-frontend-2/./src/app/dashboard/dashboard-list.ts","webpack://stela-frontend-2/./src/app/dashboard/dashboard-show.ts","webpack://stela-frontend-2/./src/app/dashboard/dashboard.ts","webpack://stela-frontend-2/./src/app/dashboard_space/_index.ts","webpack://stela-frontend-2/./src/app/dashboard_space/dashboard_space-show.ts","webpack://stela-frontend-2/./src/app/dashboard_space/dashboard_space.ts","webpack://stela-frontend-2/./src/app/datasets/_index.ts","webpack://stela-frontend-2/./src/app/datasets/datasets-edit.ts","webpack://stela-frontend-2/./src/app/datasets/datasets-export.ts","webpack://stela-frontend-2/./src/app/datasets/datasets-list.ts","webpack://stela-frontend-2/./src/app/datasets/datasets-service.ts","webpack://stela-frontend-2/./src/app/datasets/datasets.ts","webpack://stela-frontend-2/./src/app/documents_reports/_index.ts","webpack://stela-frontend-2/./src/app/documents_reports/documents_reports-edit.ts","webpack://stela-frontend-2/./src/app/documents_reports/documents_reports-list.ts","webpack://stela-frontend-2/./src/app/documents_reports/documents_reports.ts","webpack://stela-frontend-2/./src/app/documents_types/_index.ts","webpack://stela-frontend-2/./src/app/documents_types/documents_types-edit.ts","webpack://stela-frontend-2/./src/app/documents_types/documents_types-list.ts","webpack://stela-frontend-2/./src/app/documents_types/documents_types.ts","webpack://stela-frontend-2/./src/app/event_hosts/_index.ts","webpack://stela-frontend-2/./src/app/event_hosts/event_hosts-edit.ts","webpack://stela-frontend-2/./src/app/event_hosts/event_hosts-list.ts","webpack://stela-frontend-2/./src/app/event_hosts/event_hosts.ts","webpack://stela-frontend-2/./src/app/events/_index.ts","webpack://stela-frontend-2/./src/app/events/accreditations/accreditations-list.ts","webpack://stela-frontend-2/./src/app/events/annexes/events_annexes.ts","webpack://stela-frontend-2/./src/app/events/budget/budget-list.ts","webpack://stela-frontend-2/./src/app/events/cms_categories/cms_article_event-edit.ts","webpack://stela-frontend-2/./src/app/events/cms_categories/cms_article_event-list.ts","webpack://stela-frontend-2/./src/app/events/cms_categories/cms_categories_event-edit.ts","webpack://stela-frontend-2/./src/app/events/cms_categories/cms_categories_event-list.ts","webpack://stela-frontend-2/./src/app/events/common/historicMails.ts","webpack://stela-frontend-2/./src/app/events/diary/diary.ts","webpack://stela-frontend-2/./src/app/events/documents/documents-edit.ts","webpack://stela-frontend-2/./src/app/events/documents/documents-list.ts","webpack://stela-frontend-2/./src/app/events/events-edit.ts","webpack://stela-frontend-2/./src/app/events/events-list.ts","webpack://stela-frontend-2/./src/app/events/events.ts","webpack://stela-frontend-2/./src/app/events/groups/groups-list.ts","webpack://stela-frontend-2/./src/app/events/guests/actions-menu.ts","webpack://stela-frontend-2/./src/app/events/guests/guestVehiclesModal.ts","webpack://stela-frontend-2/./src/app/events/guests/guests-list.ts","webpack://stela-frontend-2/./src/app/events/guests/guestsNotesModal.ts","webpack://stela-frontend-2/./src/app/events/guests/guestsSpaceZonesModal.ts","webpack://stela-frontend-2/./src/app/events/guests/import/guests-import.ts","webpack://stela-frontend-2/./src/app/events/guests/searchGroupModal.ts","webpack://stela-frontend-2/./src/app/events/historic_mails/historic_mails-list.ts","webpack://stela-frontend-2/./src/app/events/indicators_types/indicators_types-list.ts","webpack://stela-frontend-2/./src/app/events/locations/locationsEvents-list.ts","webpack://stela-frontend-2/./src/app/events/mail_accounts/mail_accounts-list.ts","webpack://stela-frontend-2/./src/app/events/materials/materials-list.ts","webpack://stela-frontend-2/./src/app/events/parkings/parkings-list.ts","webpack://stela-frontend-2/./src/app/events/programs_acts/programs_acts-list.ts","webpack://stela-frontend-2/./src/app/events/push_notifications/push_notifications_event-edit.ts","webpack://stela-frontend-2/./src/app/events/push_notifications/push_notifications_event-list.ts","webpack://stela-frontend-2/./src/app/events/resume/resume-list.ts","webpack://stela-frontend-2/./src/app/events/spaces/spaces-edit.ts","webpack://stela-frontend-2/./src/app/events/spaces/spaces-list.ts","webpack://stela-frontend-2/./src/app/events/staff/staff-list.ts","webpack://stela-frontend-2/./src/app/events/tasks/tasks-list.ts","webpack://stela-frontend-2/./src/app/events/work_team/work_team-list.ts","webpack://stela-frontend-2/./src/app/events_types/_index.ts","webpack://stela-frontend-2/./src/app/events_types/events_types-edit.ts","webpack://stela-frontend-2/./src/app/events_types/events_types-list.ts","webpack://stela-frontend-2/./src/app/events_types/events_types.ts","webpack://stela-frontend-2/./src/app/events_users_profiles/_index.ts","webpack://stela-frontend-2/./src/app/events_users_profiles/events_users_profiles-edit.ts","webpack://stela-frontend-2/./src/app/events_users_profiles/events_users_profiles-list.ts","webpack://stela-frontend-2/./src/app/events_users_profiles/events_users_profiles.ts","webpack://stela-frontend-2/./src/app/features/people/components/groups/group-detail.component.ts","webpack://stela-frontend-2/./src/app/features/people/people.module.ts","webpack://stela-frontend-2/./src/app/files_types/_index.ts","webpack://stela-frontend-2/./src/app/files_types/files_types-edit.ts","webpack://stela-frontend-2/./src/app/files_types/files_types-list.ts","webpack://stela-frontend-2/./src/app/files_types/files_types.ts","webpack://stela-frontend-2/./src/app/files_types_whitelist/_index.ts","webpack://stela-frontend-2/./src/app/files_types_whitelist/files_types_whitelist-edit.ts","webpack://stela-frontend-2/./src/app/files_types_whitelist/files_types_whitelist-list.ts","webpack://stela-frontend-2/./src/app/files_types_whitelist/files_types_whitelist.ts","webpack://stela-frontend-2/./src/app/folders/_index.ts","webpack://stela-frontend-2/./src/app/folders/files-edit.ts","webpack://stela-frontend-2/./src/app/folders/folders-edit.ts","webpack://stela-frontend-2/./src/app/folders/folders-list.ts","webpack://stela-frontend-2/./src/app/folders/folders-service.ts","webpack://stela-frontend-2/./src/app/folders/folders.ts","webpack://stela-frontend-2/./src/app/gifts/_index.ts","webpack://stela-frontend-2/./src/app/gifts/gifts-edit.ts","webpack://stela-frontend-2/./src/app/gifts/gifts-list.ts","webpack://stela-frontend-2/./src/app/gifts/gifts.ts","webpack://stela-frontend-2/./src/app/gifts/persons_gifts/persons_gifts-edit.ts","webpack://stela-frontend-2/./src/app/gifts/persons_gifts/persons_gifts-list.ts","webpack://stela-frontend-2/./src/app/gifts/persons_gifts/persons_gifts.ts","webpack://stela-frontend-2/./src/app/groups/EndPositionAndAddNewPosition.ts","webpack://stela-frontend-2/./src/app/groups/_index.ts","webpack://stela-frontend-2/./src/app/groups/attended_events-modal.ts","webpack://stela-frontend-2/./src/app/groups/extend_positions-modal.ts","webpack://stela-frontend-2/./src/app/groups/groups-edit.ts","webpack://stela-frontend-2/./src/app/groups/groups-list.ts","webpack://stela-frontend-2/./src/app/groups/groups.ts","webpack://stela-frontend-2/./src/app/groups/import/fullGroup-import.ts","webpack://stela-frontend-2/./src/app/identifiers/_index.ts","webpack://stela-frontend-2/./src/app/identifiers/identifiers-edit.ts","webpack://stela-frontend-2/./src/app/identifiers/identifiers-list.ts","webpack://stela-frontend-2/./src/app/identifiers/identifiers.ts","webpack://stela-frontend-2/./src/app/import_documents/_index.ts","webpack://stela-frontend-2/./src/app/import_documents/import_documents-list.ts","webpack://stela-frontend-2/./src/app/import_documents/import_documents.ts","webpack://stela-frontend-2/./src/app/indicators_types/_index.ts","webpack://stela-frontend-2/./src/app/indicators_types/indicators_types-edit.ts","webpack://stela-frontend-2/./src/app/indicators_types/indicators_types-list.ts","webpack://stela-frontend-2/./src/app/indicators_types/indicators_types.ts","webpack://stela-frontend-2/./src/app/informations/_index.ts","webpack://stela-frontend-2/./src/app/informations/informations-edit.ts","webpack://stela-frontend-2/./src/app/informations/informations-list.ts","webpack://stela-frontend-2/./src/app/informations/informations.ts","webpack://stela-frontend-2/./src/app/inscriptions_forms/_index.ts","webpack://stela-frontend-2/./src/app/inscriptions_forms/inscriptions_forms-edit.ts","webpack://stela-frontend-2/./src/app/inscriptions_forms/inscriptions_forms-list.ts","webpack://stela-frontend-2/./src/app/inscriptions_forms/inscriptions_forms-show_inscriptions.ts","webpack://stela-frontend-2/./src/app/inscriptions_forms/inscriptions_forms.ts","webpack://stela-frontend-2/./src/app/institutions/_index.ts","webpack://stela-frontend-2/./src/app/institutions/institutions-edit.ts","webpack://stela-frontend-2/./src/app/institutions/institutions-list.ts","webpack://stela-frontend-2/./src/app/institutions/institutions.ts","webpack://stela-frontend-2/./src/app/languages/_index.ts","webpack://stela-frontend-2/./src/app/languages/languages-list.ts","webpack://stela-frontend-2/./src/app/languages/languages.ts","webpack://stela-frontend-2/./src/app/locations_reservations/_index.ts","webpack://stela-frontend-2/./src/app/locations_reservations/locations/locations-edit.ts","webpack://stela-frontend-2/./src/app/locations_reservations/locations/locations-list.ts","webpack://stela-frontend-2/./src/app/locations_reservations/locations/locations.ts","webpack://stela-frontend-2/./src/app/locations_reservations/locations_reservations-edit.ts","webpack://stela-frontend-2/./src/app/locations_reservations/locations_reservations-list.ts","webpack://stela-frontend-2/./src/app/locations_reservations/locations_reservations-timeline.ts","webpack://stela-frontend-2/./src/app/locations_reservations/locations_reservations.ts","webpack://stela-frontend-2/./src/app/login/login.ts","webpack://stela-frontend-2/./src/app/mail_accounts/_index.ts","webpack://stela-frontend-2/./src/app/mail_accounts/mail_accounts-edit.ts","webpack://stela-frontend-2/./src/app/mail_accounts/mail_accounts-list.ts","webpack://stela-frontend-2/./src/app/mail_accounts/mail_accounts.ts","webpack://stela-frontend-2/./src/app/mailings/_index.ts","webpack://stela-frontend-2/./src/app/mailings/mailingFilesStelaModal.ts","webpack://stela-frontend-2/./src/app/mailings/mailingTemplatesModal.ts","webpack://stela-frontend-2/./src/app/mailings/mailings-edit.ts","webpack://stela-frontend-2/./src/app/mailings/mailings-list.ts","webpack://stela-frontend-2/./src/app/mailings/mailings.ts","webpack://stela-frontend-2/./src/app/mailings_types/_index.ts","webpack://stela-frontend-2/./src/app/mailings_types/mailingsTypes-edit.ts","webpack://stela-frontend-2/./src/app/mailings_types/mailingsTypes-list.ts","webpack://stela-frontend-2/./src/app/mailings_types/mailingsTypes.ts","webpack://stela-frontend-2/./src/app/materials/_index.ts","webpack://stela-frontend-2/./src/app/materials/materials-edit.ts","webpack://stela-frontend-2/./src/app/materials/materials-list.ts","webpack://stela-frontend-2/./src/app/materials/materials.ts","webpack://stela-frontend-2/./src/app/materials/materials_types/materials_types-edit.ts","webpack://stela-frontend-2/./src/app/materials/materials_types/materials_types-list.ts","webpack://stela-frontend-2/./src/app/materials/materials_types/materials_types.ts","webpack://stela-frontend-2/./src/app/menus/_index.ts","webpack://stela-frontend-2/./src/app/menus/menus-edit.ts","webpack://stela-frontend-2/./src/app/menus/menus-list.ts","webpack://stela-frontend-2/./src/app/menus/menus.ts","webpack://stela-frontend-2/./src/app/menus/menus_items-edit.ts","webpack://stela-frontend-2/./src/app/notifications/_index.ts","webpack://stela-frontend-2/./src/app/notifications/notifications-edit.ts","webpack://stela-frontend-2/./src/app/notifications/notifications-list.ts","webpack://stela-frontend-2/./src/app/notifications/notifications.ts","webpack://stela-frontend-2/./src/app/notifications/notificationsModalMail.ts","webpack://stela-frontend-2/./src/app/notifications/notificationsOptionsModal.ts","webpack://stela-frontend-2/./src/app/notifications/searchPersonsModal.ts","webpack://stela-frontend-2/./src/app/notifications_by_person/_index.ts","webpack://stela-frontend-2/./src/app/notifications_by_person/notifications_by_person-edit.ts","webpack://stela-frontend-2/./src/app/notifications_by_person/notifications_by_person-list.ts","webpack://stela-frontend-2/./src/app/notifications_by_person/notifications_by_person.ts","webpack://stela-frontend-2/./src/app/passbooks/_index.ts","webpack://stela-frontend-2/./src/app/passbooks/passbooks-edit.ts","webpack://stela-frontend-2/./src/app/passbooks/passbooks-list.ts","webpack://stela-frontend-2/./src/app/passbooks/passbooks.ts","webpack://stela-frontend-2/./src/app/persons/_index.ts","webpack://stela-frontend-2/./src/app/persons/attended_events-edit.ts","webpack://stela-frontend-2/./src/app/persons/import/person-import.ts","webpack://stela-frontend-2/./src/app/persons/persons-edit.ts","webpack://stela-frontend-2/./src/app/persons/persons-list.ts","webpack://stela-frontend-2/./src/app/persons/persons.ts","webpack://stela-frontend-2/./src/app/persons/persons_duplicates-list.ts","webpack://stela-frontend-2/./src/app/persons/persons_duplicates-merge.ts","webpack://stela-frontend-2/./src/app/persons_information_groups/_index.ts","webpack://stela-frontend-2/./src/app/persons_information_groups/persons_information_groups-edit.ts","webpack://stela-frontend-2/./src/app/persons_information_groups/persons_information_groups-list.ts","webpack://stela-frontend-2/./src/app/persons_information_groups/persons_information_groups.ts","webpack://stela-frontend-2/./src/app/persons_treatments/_index.ts","webpack://stela-frontend-2/./src/app/persons_treatments/persons_treatments-edit.ts","webpack://stela-frontend-2/./src/app/persons_treatments/persons_treatments-list.ts","webpack://stela-frontend-2/./src/app/persons_treatments/persons_treatments.ts","webpack://stela-frontend-2/./src/app/political_affiliations/_index.ts","webpack://stela-frontend-2/./src/app/political_affiliations/political_affiliations-edit.ts","webpack://stela-frontend-2/./src/app/political_affiliations/political_affiliations-list.ts","webpack://stela-frontend-2/./src/app/political_affiliations/political_affiliations.ts","webpack://stela-frontend-2/./src/app/providers/_index.ts","webpack://stela-frontend-2/./src/app/providers/providers-edit.ts","webpack://stela-frontend-2/./src/app/providers/providers-list.ts","webpack://stela-frontend-2/./src/app/providers/providers.ts","webpack://stela-frontend-2/./src/app/push_notifications/_index.ts","webpack://stela-frontend-2/./src/app/push_notifications/push_notifications-edit.ts","webpack://stela-frontend-2/./src/app/push_notifications/push_notifications-list.ts","webpack://stela-frontend-2/./src/app/push_notifications/push_notifications.ts","webpack://stela-frontend-2/./src/app/push_notifications_types/_index.ts","webpack://stela-frontend-2/./src/app/push_notifications_types/push_notifications_types-edit.ts","webpack://stela-frontend-2/./src/app/push_notifications_types/push_notifications_types-list.ts","webpack://stela-frontend-2/./src/app/push_notifications_types/push_notifications_types.ts","webpack://stela-frontend-2/./src/app/razor_views/_index.ts","webpack://stela-frontend-2/./src/app/razor_views/razor_views-edit.ts","webpack://stela-frontend-2/./src/app/razor_views/razor_views-list.ts","webpack://stela-frontend-2/./src/app/razor_views/razor_views.ts","webpack://stela-frontend-2/./src/app/reports/_index.ts","webpack://stela-frontend-2/./src/app/reports/gifts_reports/_index.ts","webpack://stela-frontend-2/./src/app/reports/gifts_reports/gifts_reports-list.ts","webpack://stela-frontend-2/./src/app/reports/gifts_reports/gifts_reports.ts","webpack://stela-frontend-2/./src/app/reports/persons_reports/_index.ts","webpack://stela-frontend-2/./src/app/reports/persons_reports/persons_reports-list.ts","webpack://stela-frontend-2/./src/app/reports/persons_reports/persons_reports.ts","webpack://stela-frontend-2/./src/app/reports/reports-preview.ts","webpack://stela-frontend-2/./src/app/reports/reports.ts","webpack://stela-frontend-2/./src/app/reports/resume_reports/_index.ts","webpack://stela-frontend-2/./src/app/reports/resume_reports/resume_reports-list.ts","webpack://stela-frontend-2/./src/app/reports/resume_reports/resume_reports.ts","webpack://stela-frontend-2/./src/app/reports/tasks_reports/_index.ts","webpack://stela-frontend-2/./src/app/reports/tasks_reports/tasks_reports-list.ts","webpack://stela-frontend-2/./src/app/reports/tasks_reports/tasks_reports.ts","webpack://stela-frontend-2/./src/app/restaurants/_index.ts","webpack://stela-frontend-2/./src/app/restaurants/restaurants-edit.ts","webpack://stela-frontend-2/./src/app/restaurants/restaurants-list.ts","webpack://stela-frontend-2/./src/app/restaurants/restaurants.ts","webpack://stela-frontend-2/./src/app/rgpd/_index.ts","webpack://stela-frontend-2/./src/app/rgpd/rgpd-edit.ts","webpack://stela-frontend-2/./src/app/rgpd/rgpd-list.ts","webpack://stela-frontend-2/./src/app/rgpd/rgpd.ts","webpack://stela-frontend-2/./src/app/shared/shared.module.ts","webpack://stela-frontend-2/./src/app/spaces/_index.ts","webpack://stela-frontend-2/./src/app/spaces/spaces-edit.ts","webpack://stela-frontend-2/./src/app/spaces/spaces-list.ts","webpack://stela-frontend-2/./src/app/spaces/spaces.ts","webpack://stela-frontend-2/./src/app/staff/_index.ts","webpack://stela-frontend-2/./src/app/staff/staff-edit.ts","webpack://stela-frontend-2/./src/app/staff/staff-list.ts","webpack://stela-frontend-2/./src/app/staff/staff.ts","webpack://stela-frontend-2/./src/app/staff/staff_positions/staff_positions-edit.ts","webpack://stela-frontend-2/./src/app/staff/staff_positions/staff_positions-list.ts","webpack://stela-frontend-2/./src/app/staff/staff_positions/staff_positions.ts","webpack://stela-frontend-2/./src/app/tags/_index.ts","webpack://stela-frontend-2/./src/app/tags/tags-edit.ts","webpack://stela-frontend-2/./src/app/tags/tags-list.ts","webpack://stela-frontend-2/./src/app/tags/tags.ts","webpack://stela-frontend-2/./src/app/tasks/_index.ts","webpack://stela-frontend-2/./src/app/tasks/tasks-list.ts","webpack://stela-frontend-2/./src/app/tasks/tasks-service.ts","webpack://stela-frontend-2/./src/app/tasks/tasks.ts","webpack://stela-frontend-2/./src/app/tasks_status/_index.ts","webpack://stela-frontend-2/./src/app/tasks_status/tasks_status-edit.ts","webpack://stela-frontend-2/./src/app/tasks_status/tasks_status-list.ts","webpack://stela-frontend-2/./src/app/tasks_status/tasks_status.ts","webpack://stela-frontend-2/./src/app/tasks_types/_index.ts","webpack://stela-frontend-2/./src/app/tasks_types/tasks_types-edit.ts","webpack://stela-frontend-2/./src/app/tasks_types/tasks_types-list.ts","webpack://stela-frontend-2/./src/app/tasks_types/tasks_types.ts","webpack://stela-frontend-2/./src/app/templates/_index.ts","webpack://stela-frontend-2/./src/app/templates/templates-edit.ts","webpack://stela-frontend-2/./src/app/templates/templates-list.ts","webpack://stela-frontend-2/./src/app/templates/templates.ts","webpack://stela-frontend-2/./src/app/update/_index.ts","webpack://stela-frontend-2/./src/app/update/update-list.ts","webpack://stela-frontend-2/./src/app/update/update.ts","webpack://stela-frontend-2/./src/app/users/_index.ts","webpack://stela-frontend-2/./src/app/users/groups/users_groups-edit.ts","webpack://stela-frontend-2/./src/app/users/groups/users_groups-list.ts","webpack://stela-frontend-2/./src/app/users/groups/users_groups.ts","webpack://stela-frontend-2/./src/app/users/roles/roles-edit.ts","webpack://stela-frontend-2/./src/app/users/roles/roles-list.ts","webpack://stela-frontend-2/./src/app/users/roles/roles.ts","webpack://stela-frontend-2/./src/app/users/users-edit.ts","webpack://stela-frontend-2/./src/app/users/users-list.ts","webpack://stela-frontend-2/./src/app/users/users.ts","webpack://stela-frontend-2/./src/app/warehouses/_index.ts","webpack://stela-frontend-2/./src/app/warehouses/warehouses-edit.ts","webpack://stela-frontend-2/./src/app/warehouses/warehouses-list.ts","webpack://stela-frontend-2/./src/app/warehouses/warehouses.ts","webpack://stela-frontend-2/./src/common/directives/_index.ts","webpack://stela-frontend-2/./src/common/directives/grid-directives.ts","webpack://stela-frontend-2/./src/common/directives/navigation-directives.ts","webpack://stela-frontend-2/./src/common/directives/translatable-directive.ts","webpack://stela-frontend-2/./src/common/directives/utils-directives.ts","webpack://stela-frontend-2/./src/common/directives/valid_number-directives.ts","webpack://stela-frontend-2/./src/common/filters/_index.ts","webpack://stela-frontend-2/./src/common/filters/date-filters.ts","webpack://stela-frontend-2/./src/common/filters/limit-ui-select-filter.ts","webpack://stela-frontend-2/./src/common/services/_index.ts","webpack://stela-frontend-2/./src/common/services/bee-service.ts","webpack://stela-frontend-2/./src/common/services/event-service.ts","webpack://stela-frontend-2/./src/common/services/eventos-grid-service.ts","webpack://stela-frontend-2/./src/common/services/generate-document-service.ts","webpack://stela-frontend-2/./src/common/services/grid-service.ts","webpack://stela-frontend-2/./src/common/services/http-interceptor-service.ts","webpack://stela-frontend-2/./src/common/services/languages-services.ts","webpack://stela-frontend-2/./src/common/services/login-service.ts","webpack://stela-frontend-2/./src/common/services/modal-service.ts","webpack://stela-frontend-2/./src/common/services/notification-service.ts","webpack://stela-frontend-2/./src/common/services/spaces-service.ts","webpack://stela-frontend-2/./src/common/services/tree-service.ts","webpack://stela-frontend-2/./src/common/services/update-service.ts","webpack://stela-frontend-2/./src/instrument.ts","webpack://stela-frontend-2/./src/main.ts","webpack://stela-frontend-2/./src/styles/_index.ts","webpack://stela-frontend-2/./src/i18n/angular-locale_ca-es.js","webpack://stela-frontend-2/./src/i18n/angular-locale_es-es.js","webpack://stela-frontend-2/./src/i18n/angular-locale_es.js","webpack://stela-frontend-2/./src/i18n/angular-locale_eu-es.js","webpack://stela-frontend-2/./src/i18n/angular-locale_gl-es.js","webpack://stela-frontend-2/./src/scripts/angularjs-chips.js","webpack://stela-frontend-2/./src/scripts/iconpicker-1.5.0.js","webpack://stela-frontend-2/./src/scripts/inspinia.js","webpack://stela-frontend-2/./node_modules/moment/locale/ sync ^\\.\\/.*$","webpack://stela-frontend-2/webpack/bootstrap","webpack://stela-frontend-2/webpack/runtime/amd define","webpack://stela-frontend-2/webpack/runtime/amd options","webpack://stela-frontend-2/webpack/runtime/define property getters","webpack://stela-frontend-2/webpack/runtime/global","webpack://stela-frontend-2/webpack/runtime/hasOwnProperty shorthand","webpack://stela-frontend-2/webpack/runtime/make namespace object","webpack://stela-frontend-2/webpack/runtime/node module decorator","webpack://stela-frontend-2/webpack/runtime/jsonp chunk loading","webpack://stela-frontend-2/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","import { app } from \"./app\";\nimport { GroupDetailComponent } from \"./app/features/people/components/groups/group-detail.component\";\nimport { downgradeComponent } from \"@angular/upgrade/static\";\n\napp\n .directive(\n 'groupDetail', \n downgradeComponent({component: GroupDetailComponent}) as angular.IDirectiveFactory\n );","// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\n\nlet language = \"ES\";\nlet translations = {};\n\nimport $ from \"jquery\";\n\nimport toastr from \"toastr\";\n\nimport groupImportTemplate from './app/common/group_import/group_import.html';\nimport peopleImportTemplate from './app/common/people_import/people_import.html';\nimport eventsAnnexesTemplate from './app/events/annexes/events_annexes.html';\nimport documentsEditTemplate from './app/events/documents/documents-edit.html';\nimport historicMailsFiltersTemplate from './app/events/historic_mails/historic_mails_filters.html';\nimport spacesEditTemplate from './app/events/spaces/spaces-edit.html';\nimport foldersListTemplate from './app/folders/folders-list.html';\nimport groupsEditTemplate from './app/groups/groups-edit.html';\nimport locationsReservationsEditTemplate from './app/locations_reservations/locations_reservations-edit.html';\nimport materialsEditTemplate from './app/materials/materials-edit.html';\nimport addressTemplate from './app/persons/partials/address.html';\nimport contactTemplate from './app/persons/partials/contact.html';\nimport groupTemplate from './app/persons/partials/group.html';\nimport mailTemplate from './app/persons/partials/mail.html';\nimport politicalAffiliationTemplate from './app/persons/partials/political-affiliation.html';\nimport personsEditTemplate from './app/persons/persons-edit.html';\nimport restaurantsEditTemplate from './app/restaurants/restaurants-edit.html';\nimport staffEditTemplate from './app/staff/staff-edit.html';\nimport calendarTemplate from './app/common/calendar/calendar.html';\nimport groupListPrintedTemplate from './app/groups/group-list-printed.html';\nimport loadingTemplate from './app/common/loading/loading.html';\nimport navigationTemplate from './app/common/navigation/navigation.html';\nimport footerTemplate from './app/common/footer/footer.html';\nimport topnavbarTemplate from './app/common/topnavbar/topnavbar.html';\nimport spacesEditTemplate from './app/events/spaces/spaces-edit.html';\n\nexport const app = angular.module(\"app\", [\n\n 'ui.router', // Routing\n 'ui.bootstrap', // Bootstrap\n 'ui.tree', // Nestable list\n 'ui.grid',\n 'ui.grid.selection',\n 'ui.grid.exporter',\n 'ui.grid.pagination',\n 'ui.grid.treeView',\n 'ui.grid.autoResize',\n 'ui.grid.edit',\n 'ui.grid.cellNav',\n 'ui.grid.expandable',\n 'ui.calendar',\n 'ui.validate',\n 'ui.date',\n 'ui.sortable',\n 'ui.slider',\n 'ui.ace',\n 'gantt', 'gantt.table', 'gantt.tree', 'gantt.tooltips', 'gantt.progress', 'gantt.drawtask', 'gantt.movable',\n 'ui-iconpicker',\n 'ngAnimate',\n 'inspinia',\n 'restangular',\n 'log.ex.uo',\n 'angular.filter',\n 'topnavbar',\n 'ibox_tools',\n 'events',\n 'dashboard',\n 'dashboard_space',\n 'navigation',\n 'calendar',\n 'users',\n 'roles',\n 'login',\n 'auth',\n 'update',\n 'companies',\n 'documents_reports',\n 'documents_types',\n 'countries',\n 'menus',\n 'languages',\n 'groups',\n 'persons',\n 'political_affiliations',\n 'staff',\n 'staff_positions',\n 'gifts',\n 'persons_gifts',\n 'materials',\n 'files_types',\n 'files_types_whitelist',\n 'materials_types',\n 'events_users_profiles',\n 'indicators_types',\n 'persons_information_groups',\n 'informations',\n 'tasks_reports',\n 'restaurants',\n 'locations_reservations',\n 'locations',\n 'mail_accounts',\n 'persons_reports',\n 'gifts_reports',\n 'resume_reports',\n 'budget_groups',\n 'inscriptions_forms',\n 'identifiers',\n 'contact_types',\n 'persons_treatments',\n 'import_documents',\n 'razor_views',\n 'notifications',\n 'mailings',\n 'breadcrumb',\n 'modal',\n 'ui.select',\n 'ngSanitize',\n 'forbidden',\n 'warehouses',\n 'providers',\n 'pascalprecht.translate',\n 'colorpicker.module',\n 'flow',\n 'eventHosts',\n 'authenticationServices',\n 'cmsCategories',\n 'cmsArticles',\n 'mailings_types',\n 'passbooks',\n 'tags',\n 'users_groups',\n 'institutions',\n 'group_import',\n 'authentication_processes',\n \n 'angularjs.chips',\n // 'documents',\n 'spaces',\n 'ui.tinymce',\n 'ngFileUpload',\n 'angular-clipboard',\n 'uiSwitch',\n 'matchMedia',\n 'events_types',\n 'reports',\n 'notifications_by_person',\n 'rgpd',\n 'templates',\n 'datasets',\n 'folders',\n 'tasks_status',\n 'tasks_types',\n 'correspondence',\n 'correspondences_types',\n 'tasks',\n 'annexes',\n 'accesses',\n 'audits',\n 'push_notifications_types',\n 'push_notifications',\n 'people_import',\n]).config(['$stateProvider', '$httpProvider', '$urlRouterProvider', '$translateProvider', '$animateProvider', '$compileProvider', '$uibModalProvider', 'RestangularProvider', '$logProvider', 'logExProvider', '$locationProvider', function ($stateProvider, $httpProvider, $urlRouterProvider, $translateProvider, $animateProvider, $compileProvider, $uibModalProvider, RestangularProvider, $logProvider, logExProvider, $locationProvider) {\n\n$locationProvider.hashPrefix('');\n//$locationProvider.html5Mode(true);\n\n//configuramos ruta base\nRestangularProvider.setBaseUrl((window as any).CONFIG.api_url);\n//mejora prestaciones en producción.\n$compileProvider.debugInfoEnabled(false);\n\nlet debug = window.location.hostname.indexOf(\"localhost\") > -1 || window.location.hostname.indexOf(\"test.diaple\") > -1 \n || window.location.hostname.indexOf(\"pre.stela.pro\") > -1;\nlogExProvider.enableLogging(true, debug);\nlogExProvider.useTemplates(true);\nlogExProvider.overrideLogPrefix(function (className) {\n let $injector = angular.injector([ 'ng' ]);\n let $filter = $injector.get( '$filter' );\n let separator = \" >> \";\n let format = \"dd/MM/yyyy hh:mm:ss\";\n let now = $filter('date')(new Date(), format);\n return \"\" + now + (!angular.isString(className) ? \"\" : \"::\" + className) + separator;\n});\n/*logExProvider.overrideLogMethodColors({\n log: 'color: white;', \n info: 'color: blue; background-color: white;',\n debug: 'color: green; background-color: white;',\n });*/\nif(!debug) {\n logExProvider.restrictLogMethods(['error', 'warn']);\n}\n\n//configuramos que no se cierre el dialogo con click\n$uibModalProvider.options.backdrop = 'static';\n\n\n$httpProvider.defaults.headers.common[\"language_code\"] = language;\n// $translateProvider.translations(language, translations);\n$translateProvider.preferredLanguage(language);\n$translateProvider.fallbackLanguage(\"ES\");\n$translateProvider.useUrlLoader((window as any).CONFIG.api_url + '/lang');\n$translateProvider.useSanitizeValueStrategy('escape');\n\n//interceptor para controlar errores en peticiones\n$httpProvider.interceptors.push('httpInterceptorService');\n\n//desactivamos animacion de menu de ui-grid para que funcione en firefox correctamente la ocultacion\n$animateProvider.classNameFilter(/^((?!(ui-grid-menu)).)*$/);\n\n$urlRouterProvider.otherwise(\"/dashboard/list\");\n$urlRouterProvider.when('', '/dashboard/list');\n toastr.options = {\n \"closeButton\": true,\n \"debug\": false,\n \"progressBar\": true,\n \"preventDuplicates\": false,\n \"positionClass\": \"toast-top-right\",\n \"onclick\": null,\n \"showDuration\": 400,\n \"hideDuration\": 1000,\n \"timeOut\": 2000,\n \"extendedTimeOut\": 1000,\n \"showEasing\": \"swing\",\n \"hideEasing\": \"linear\",\n \"showMethod\": \"fadeIn\",\n \"hideMethod\": \"fadeOut\"\n };\n\n}])\n.run(['uiGridSelectionService', '$rootScope', '$http', '$state', 'i18nService', '$translate', 'UpdateService', '$window', '$injector', 'LoginService', 'Restangular', '$q', '$timeout', '$log', '$document', '$templateCache', function (uiGridSelectionService, $rootScope, $http, $state, i18nService, $translate, UpdateService, $window, $injector, LoginService, Restangular, $q, $timeout, $log, $document, $templateCache) {\n Restangular.addResponseInterceptor(function (data, operation, what, url, response, deferred) {\n if (operation === \"getList\" && !angular.isUndefined(response.data.rows)) {\n let responseData = response.data.rows;\n responseData.totalRows = response.data.totalRows;\n return responseData;\n } else\n return response.data;\n });\n\n $templateCache.put('address.html', addressTemplate);\n $templateCache.put('calendar.html', calendarTemplate);\n $templateCache.put('contact.html', contactTemplate);\n $templateCache.put('documents-edit.html', documentsEditTemplate);\n $templateCache.put('events_annexes.html', eventsAnnexesTemplate);\n $templateCache.put('folders-list.html', foldersListTemplate);\n $templateCache.put('footer.html', footerTemplate);\n $templateCache.put('group-list-printed.html', groupListPrintedTemplate);\n $templateCache.put('group.html', groupTemplate);\n $templateCache.put('group_import.html', groupImportTemplate);\n $templateCache.put('groups-edit.html', groupsEditTemplate);\n $templateCache.put('historic_mails_filters.html', historicMailsFiltersTemplate);\n $templateCache.put('loading.html', loadingTemplate);\n $templateCache.put('locations_reservations-edit.html', locationsReservationsEditTemplate);\n $templateCache.put('mail.html', mailTemplate);\n $templateCache.put('materials-edit.html', materialsEditTemplate);\n $templateCache.put('navigation.html', navigationTemplate);\n $templateCache.put('people_import.html', peopleImportTemplate);\n $templateCache.put('persons-edit.html', personsEditTemplate);\n $templateCache.put('political-affiliation.html', politicalAffiliationTemplate);\n $templateCache.put('restaurants-edit.html', restaurantsEditTemplate);\n $templateCache.put('spaces-edit.html', spacesEditTemplate);\n $templateCache.put('staff-edit.html', staffEditTemplate);\n $templateCache.put('topnavbar.html', topnavbarTemplate);\n\n let inflightAuthRequest = null;\n\n function refreshAccesstoken() {\n let deferred = $q.defer();\n\n if(!inflightAuthRequest) {\n delete $http.defaults.headers.common[\"Authorization\"];\n inflightAuthRequest = $http.post((window as any).CONFIG.api_url + \"/Auth/Refresh\",\n { AccessToken: localStorage.getItem(\"accessToken\") })\n }\n\n inflightAuthRequest.then(function (response) {\n inflightAuthRequest = null;\n let LoginService = $injector.get('LoginService');\n\n LoginService.saveTokenInfo(response.data);\n $http.defaults.headers.common[\"Authorization\"] = \"Bearer \" + response.data.token.accessToken;\n \n deferred.resolve(response.data.token.accessToken);\n });\n\n return deferred.promise; \n }\n\n Restangular.addErrorInterceptor(function (response, deferred, responseHandler) {\n $log.error(response);\n if (//response.status === 400 ||\n response.status === -1 || response.status === 440) {\n\n location.replace(\"#/auth/init\");\n return true; // error not handled\n }\n // IDX10503\n if (response.status === 401 && typeof (response.data) == \"string\" && response.data.includes(\"IDX\")) {\n\n //enviamos a login, salvo que ya este en login\n if (location.pathname !== \"/\" && location.hash !== \"#/auth/init\") {\n location.replace(\"#/auth/init\");\n }\n\n /*refreshAccesstoken().then(function(token) {\n response.config.headers.Authorization = \"Bearer \" + token;\n // Repeat the request and then call the handlers the usual way.\n $http(response.config).then(responseHandler, deferred.reject);\n // Be aware that no request interceptors are called this way.\n });*/\n\n return true; // error handled\n }\n if (response.status === 403 || response.status === 401) {\n location.replace(\"#/forbidden/list\");\n return false; // error handled\n }\n\n return true; // error not handled\n });\n \n //que solo se marque todos si estan todas las filas incluidas las no visibles marcadas\n uiGridSelectionService.toggleRowSelection = function (grid, row, evt, multiSelect, noUnselect) {\n let selected = row.isSelected;\n\n if (row.enableSelection === false && !selected) {\n return;\n }\n\n let selectedRows;\n if (!multiSelect && !selected) {\n uiGridSelectionService.clearSelectedRows(grid, evt);\n } else if (!multiSelect && selected) {\n selectedRows = uiGridSelectionService.getSelectedRows(grid);\n if (selectedRows.length > 1) {\n selected = false; // Enable reselect of the row\n uiGridSelectionService.clearSelectedRows(grid, evt);\n }\n }\n\n if (selected && noUnselect) {\n // don't deselect the row\n } else {\n row.setSelected(!selected);\n if (row.isSelected === true) {\n grid.selection.lastSelectedRow = row;\n }\n\n selectedRows = uiGridSelectionService.getSelectedRows(grid);\n grid.selection.selectAll = grid.options.totalItems === selectedRows.length;\n\n grid.api.selection.raise.rowSelectionChanged(row, evt);\n }\n };\n\n $rootScope.language = language;\n\n //comprobamos si la licencia de demo a expirado\n $rootScope.licenseExpired = false;\n /*let limitDate = new Date(2017, 2, 20);\n if((new Date()).getTime()>limitDate.getTime()){\n $rootScope.licenseExpired = true;\n }*/\n\n $rootScope.loginProcess = false;\n\n //cargamos tema por defecto\n let theme = localStorage.getItem(\"theme\");\n $rootScope.theme = \"skin-3\";\n if (theme != null) $rootScope.theme = theme;\n\n $rootScope.$on('$stateChangeStart',\n function (event, toState, toParams, fromState, fromParams) {\n $window.scrollTo(0, 0);\n if (!LoginService.isLoggedIn() && toState.url !== \"/login\" && toState.url.substring(0, 6) !== \"/auth/\") {\n // Si no está logueado e intenta ir a cualquier estado\n event.preventDefault();\n $state.go(\"authinit\");\n } else if (toState.url === \"/login\") {\n //borramos cabecera si existe\n try {\n delete $http.defaults.headers.common.Authorization;\n } catch (e) {\n\n }\n\n // Va a login directamente\n //if (!LoginService.isLoggedIn()) {\n $rootScope.islogged = false;\n LoginService.unset(\"accessToken\");\n LoginService.unset(\"rolesPermissions\");\n LoginService.unset(\"userName\");\n LoginService.unset(\"userId\");\n //} else {\n // $state.go(\"dashboard.list\");\n //}\n } else if(toState.url.substring(0, 9) !== \"/process/\" && toState.url.substring(0, 6) !== \"/auth/\") {\n //Cualquier estado y logueado\n if (angular.isDefined(toState.requiredPermission)) {\n if (toState.requiredPermission.length > 0) {\n let forbidden = true;\n for (let i = 0, len = toState.requiredPermission.length; i < len; i++) {\n if (LoginService.permissionExist(toState.requiredPermission[i])) {\n forbidden = false;\n break;\n }\n }\n if (forbidden) {\n event.preventDefault();\n location.replace(\"#/forbidden/list\");\n }\n }\n }\n $rootScope.islogged = true;\n } else {\n //borramos cabecera si existe\n try {\n delete $http.defaults.headers.common.Authorization;\n } catch (e) {\n\n }\n\n // Va a login directamente\n //if (!LoginService.isLoggedIn()) {\n $rootScope.islogged = false;\n LoginService.unset(\"accessToken\");\n LoginService.unset(\"rolesPermissions\");\n LoginService.unset(\"userName\");\n LoginService.unset(\"userId\");\n }\n });\n\n //escuchamos camibos de peticiones para mostrar o no el cargador\n $rootScope.$watch(\n function () {\n return $http.pendingRequests.length;\n }, function () {\n if ($http.pendingRequests.length > 0\n && $http.pendingRequests[0].url.indexOf('EventsGuests/GetEventGuest') < 0\n && $http.pendingRequests[0].url.indexOf('EventsTaks/GetEventTasks') < 0\n && $http.pendingRequests[0].url.indexOf('EventsStaff/GetEventStaff') < 0\n && $http.pendingRequests[0].url.indexOf('EventsMaterials/GetEventMaterial') < 0\n && $http.pendingRequests[0].url.indexOf('Events/getActualEventCounts') < 0\n && $http.pendingRequests[0].url.indexOf('Events/getActualEventInfo') < 0\n && $http.pendingRequests[0].url.indexOf('Events/CustomActualTotemInfo') < 0\n && $http.pendingRequests[0].url.indexOf('update/check') < 0\n && $http.pendingRequests[0].url.indexOf('/keepalive') < 0\n && $http.pendingRequests[0].url.indexOf('inscriptions/GetPendingInscriptions') < 0) {\n $rootScope.showLoading = $http.pendingRequests.length > 0;\n } else {\n $rootScope.showLoading = false;\n }\n }\n );\n\n //configurar idioma de grid\n i18nService.setCurrentLang(language.toLowerCase());\n\n //configuramos comprobador de nuevas versiones\n\n //UpdateService.autoCheck(30);\n UpdateService.onUpdateAvailable = function (version) {\n $rootScope.version = version;\n };\n UpdateService.getInstalledVersion().then(function (response) {\n $rootScope.actualVersion = response.data;\n }, function (error) {\n $log.error(error);\n });\n\n $log.debug('starting run');\n\n // Timeout timer value\n let TimeOutTimerValue = 60 * 60 * 1000;\n\n // Start a timeout\n $rootScope.TimeOut_Thread = $timeout(function(){ $rootScope.LogoutByTimer() } , TimeOutTimerValue);\n let bodyElement = angular.element($document);\n\n/* angular.forEach(['keydown', 'keyup', 'click', 'mousemove', 'DOMMouseScroll', 'mousewheel', 'mousedown', 'touchstart', 'touchmove', 'scroll', 'focus'],\n function(EventName) {\n bodyElement.bind(EventName, function (e) { $rootScope.TimeOut_Resetter(e) });\n });*/\n\n $rootScope.LogoutByTimer = function (){\n ///////////////////////////////////////////////////\n /// redirect to another page(eg. Login.html) here\n ///////////////////////////////////////////////////\n if(LoginService.isLoggedIn()) {\n $log.warn('Logout');\n $rootScope.inactivityLogout = true;\n LoginService.closeSession();\n $state.go(\"authinit\");\n }\n }\n\n $rootScope.TimeOut_Resetter = function (e){\n /// Stop the pending timeout\n $timeout.cancel($rootScope.TimeOut_Thread);\n\n /// Reset the timeout\n $rootScope.TimeOut_Thread = $timeout(function(){ $rootScope.LogoutByTimer() } , TimeOutTimerValue);\n }\n}])\n\n.filter('startFrom', [function () {\n return function (input, start) {\n if (typeof input == \"undefined\") return [];\n start = +start; //parse to int\n return input.slice(start);\n }\n }])\n\n\n.directive('clickOutside', ['$document', function ($document) {\n return {\n link: function postLink(scope, element, attrs) {\n let onClick = function (event) {\n let isChild = $(element).has(event.target).length > 0;\n let isSelf = element[0] == event.target;\n let isInside = isChild || isSelf;\n if (!isInside) {\n scope.$apply(attrs.clickAnywhereButHere)\n }\n }\n scope.$watch(attrs.isActive, function (newValue, oldValue) {\n if (newValue !== oldValue && newValue == true) {\n $document.bind('click', onClick);\n }\n else if (newValue !== oldValue && newValue == false) {\n $document.unbind('click', onClick);\n }\n });\n }\n };\n}]);\n\n\n$(function ($) {\n if (language == \"\") {\n if (angular.isDefined(navigator.languages) && navigator.languages.length > 0) {\n let parts = navigator.languages[0].toUpperCase().split(\"-\");\n language = parts[0];\n }\n }\n if (language == \"\" || language == null) language = \"ES\";\n\n $.datepicker.regional['es'] = {\n closeText: 'Cerrar',\n prevText: '',\n currentText: 'Hoy',\n monthNames: ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'],\n monthNamesShort: ['Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic'],\n dayNames: ['Domingo', 'Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado'],\n dayNamesShort: ['Dom', 'Lun', 'Mar', 'Mié', 'Juv', 'Vie', 'Sáb'],\n dayNamesMin: ['Do', 'Lu', 'Ma', 'Mi', 'Ju', 'Vi', 'Sá'],\n weekHeader: 'Sm',\n dateFormat: 'dd/mm/yy',\n firstDay: 1,\n isRTL: false,\n showMonthAfterYear: false,\n yearSuffix: ''\n };\n\n if (language == \"ES\") $.datepicker.setDefaults($.datepicker.regional['es']);\n\n //lanzamos aplicacion manual\n/* angular.element(function () {\n //cargamos tranducciones\n $.get(\n (window as any).CONFIG.api_url + '/lang',\n {\n lang: language\n },\n function (data) {\n translations = data;\n// angular.bootstrap(document.body, ['app']);\n }\n ).fail(function (err) {\n $log.debug(err);\n if (err.status == 440 || err.status == 401) {\n $log.debug(\"Token expired or incorrect, redirect to login.\");\n localStorage.removeItem(\"token\");\n $.get((window as any).CONFIG.api_url + \"Auth/Logout\", function () {\n location.replace(\"/\");\n });\n }\n });\n \n });*/\n\n\n angular.module('ui.grid').config(['$provide', function ($provide) {\n $provide.decorator('i18nService', ['$delegate', function ($delegate) {\n $delegate.add('ca', {\n aggregate: {\n label: 'Article'\n },\n groupPanel: {\n description: 'Arrossegueu una capçalera de columna aquí i deixeu-lo anar per agrupar per aquesta columna.'\n },\n search: {\n placeholder: 'Cercar...',\n showingItems: 'Articles llistats:',\n selectedItems: 'Articles seleccionats:',\n totalItems: 'Articles totals:',\n size: 'Mida de Pàgina:',\n first: 'primera Pàgina',\n next: 'Pàgina Següent',\n previous: 'Pàgina Anterior',\n last: 'Darrera Pàgina'\n },\n menu: {\n text: 'Triar columnes:'\n },\n sort: {\n ascending: 'Ordre Ascendent',\n descending: 'Ordre Descendent',\n remove: 'Sense Ordenar'\n },\n column: {\n hide: 'Amaga la columna'\n },\n aggregation: {\n count: 'filas totales: ',\n sum: 'total: ',\n avg: 'media: ',\n min: 'min: ',\n max: 'max: '\n },\n pinning: {\n pinLeft: 'Fijar a la Izquierda',\n pinRight: 'Fijar a la Derecha',\n unpin: 'Quitar Fijación'\n },\n gridMenu: {\n columns: 'Columnas:',\n importerTitle: 'Importa fitxer',\n exporterAllAsCsv: 'Exporta tot com csv',\n exporterVisibleAsCsv: 'Exportar vista com csv ',\n exporterSelectedAsCsv: 'Exportar selecció com csv',\n exporterAllAsPdf: 'Exporta tot com PDF',\n exporterVisibleAsPdf: 'Exportar vista como pdf',\n exporterSelectedAsPdf: 'Exportar selecció com pdf',\n clearAllFilters: 'Netejar tots els filtres'\n },\n importer: {\n noHeaders: 'No va ser possible derilet els noms de les columnes, té encapçalats l\\'arxiu?',\n noObjects: 'No va ser possible obtenir registres, conté dades l\\'arxiu, a part de les capçaleres?',\n invalidCsv: 'No va ser possible processar l\\'arxiu, ¿és un CSV vàlid ?',\n invalidJson: 'No va ser possible processar l\\'arxiu, ¿és un JSON vàlid ?',\n jsonNotArray: 'L\\'arxiu json importat ha de contenir una matriu, avortant.'\n },\n pagination: {\n sizes: 'registres per pàgina',\n totalItems: 'registres',\n of: 'de'\n },\n grouping: {\n group: 'Agrupar',\n ungroup: 'Desagrupa',\n aggregate_count: 'Agr: Cont',\n aggregate_sum: 'Agr: Sum',\n aggregate_max: 'Agr: Máx',\n aggregate_min: 'Agr: Min',\n aggregate_avg: 'Agr: Prom',\n aggregate_remove: 'Agr: Quitar'\n }\n });\n return $delegate;\n }]);\n }]);\n\n});\n","import './accesses';\nimport './accesses-list'; ","angular.module(\"accesses\")\n\n .controller('AccessesListCtrl', ['$rootScope', '$scope', 'Restangular', 'gridService', 'modalService', 'uiGridConstants', '$filter', 'LoginService', '$state', function ($rootScope, $scope, Restangular, gridService, modalService, uiGridConstants, $filter, LoginService, $state) {\n\n $rootScope.title = $filter('translate')('accesses.title');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('accesses.list') }\n ];\n\n $scope.search = {\n ip_address: \"\",\n uri: \"\",\n date_from: null,\n date_to: null\n };\n \n $scope.gridOptionsAccesses = {\n pdfTitle: $filter('translate')('accesses.pdf_title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n paginationPageSizes: [50, 100, 150],\n paginationPageSize: 50,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n { name: 'created_at', displayName: $filter('translate')('access.date'), enableFiltering: true, cellFilter: 'toLocalDate | date:\\'dd/MM/yyyy HH:mm\\'', enableHiding: false, enableColumnMenu: false },\n { name: 'ip_address', displayName: $filter('translate')('access.ip_address'), enableFiltering: true, enableHiding: false, enableColumnMenu: false },\n { name: 'user_agent', displayName: $filter('translate')('access.user_agent'), enableFiltering: true, enableHiding: false, enableColumnMenu: false },\n { name: 'uri', displayName: $filter('translate')('access.uri'), enableFiltering: true, enableHiding: false, enableColumnMenu: false },\n { name: 'method', displayName: $filter('translate')('access.method'), enableFiltering: true, enableHiding: false, enableColumnMenu: false },\n { name: 'status', displayName: $filter('translate')('access.status'), enableFiltering: true, enableHiding: false, enableColumnMenu: false },\n { name: 'reason', displayName: $filter('translate')('access.reason'), enableFiltering: true, enableHiding: false, enableColumnMenu: false },\n ],\n getData: function (options) {\n options.ip_address = $scope.search.ip_address;\n options.uri = $scope.search.uri;\n options.date_from = $scope.search.date_from;\n options.date_to = $scope.search.date_to;\n\n return Restangular.all('Accesses').getList(options);\n }\n \n };\n\n $scope.searchAccesses = function () {\n if (angular.isDefined($scope.gridOptionsAccesses.loadData)) {\n $scope.gridOptionsAccesses.loadData(false);\n }\n }\n\n\n }])\n\n;","\nimport BreadcrumbView from \"../common/breadcrumb/breadcrumb.html\";\nimport AccessesListView from \"./accesses-list.html\";\n\nangular.module(\"accesses\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('accesses', {\n url: \"/accesses\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n })\n .state('accesses.list', {\n url: \"/list\",\n controller: \"AccessesListCtrl\",\n template: AccessesListView,\n data: { pageTitle: 'Accesos' }\n })\n ;\n }])\n;","import './annexes';\nimport './annexes-list';\nimport './annexes-edit'; ","angular.module(\"annexes\")\n\n .controller(\"AnnexesEditCtrl\", ['$rootScope', '$scope', '$http', '$stateParams', 'Restangular', '$state', 'modalService', '$filter', function ($rootScope, $scope, $http, $stateParams, Restangular, $state, modalService, $filter) {\n\n $scope.annexes = {};\n if (angular.isUndefined($stateParams.id) || $stateParams.id == \"\") {\n\n $rootScope.breadcrumb = [\n { title: $filter('translate')('annexes.subtitleList'), url: \"annexes.list\" },\n { title: $filter('translate')('general.add') }\n ];\n }\n else {\n Restangular.one('AnnexesTypes', $stateParams.id).get().then(function (results) {\n $scope.annexes = results;\n let pp = $scope.annexes.FK_events_programs_annexes_types_tl_events_programs_annexes_types.filter(name => name['language_id'] == 1);\n\n $rootScope.breadcrumb = [\n { title: $filter('translate')('annexes.subtitleList'), url: \"annexes.list\" },\n { title: $scope.annexes.FK_events_programs_annexes_types_tl_events_programs_annexes_types.filter( name => name['language_id'] == 1).name + \" - \" + $filter('translate')('general.edit') }\n ];\n\n\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n\n $scope.cancel = function () {\n $state.go(\"annexes.list\", { \"reset\": false });\n };\n\n\n $scope.save = function () {\n if (angular.isUndefined($stateParams.id) || $stateParams.id === \"\")\n Restangular.all('AnnexesTypes').post($scope.annexes).then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('documents_types.create_success'));\n $scope.annexes.id = result.id;\n $state.go(\"annexes.list\");\n } else {\n $scope.errorMessage = result.message;\n }\n });\n else {\n $scope.annexes.put().then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('documents_types.edit_success'));\n $state.go(\"annexes.list\");\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n };\n\n $scope.delete = function (id, name) {\n $scope.id = id;\n $scope.name = name;\n modalService.confirm({\n title: $filter('translate')('general.delete'),\n message: $filter('translate')('general.delete_message') + \" \" + $scope.name + \"?\",\n onAccept: function () {\n Restangular.one('AnnexesTypes', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('documents_types.delete_success'));\n $state.go(\"annexes.list\", { \"reset\": false });\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n });\n\n };\n\n }])\n\n ;","angular.module(\"annexes\")\n\n .controller('AnnexesListCtrl', ['$rootScope', '$scope', 'Restangular', 'gridService', 'modalService', 'uiGridConstants', '$filter', 'LoginService', '$state', function ($rootScope, $scope, Restangular, gridService, modalService, uiGridConstants, $filter, LoginService, $state) {\n\n $rootScope.title = $filter('translate')('annexes.title');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('annexes.subtitleList') }\n ];\n\n $scope.gridOptionsAnnexes = {\n pdfTitle: $filter('translate')('annexes.pdf_title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n paginationPageSizes: [20, 50, 100],\n paginationPageSize: 100,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'FK_events_programs_annexes_types_tl_events_programs_annexes_types[0].name', displayName: $filter('translate')('annexes.name'), enableFiltering: true, enableHiding: false, enableColumnMenu: false },\n { name: 'annex_order', displayName: $filter('translate')('annexes.order'), enableFiltering: true, enableHiding: false, enableColumnMenu: false },\n { name: 'is_default', displayName: $filter('translate')('annexes.is_default'), enableFiltering: true, cellTemplate: ' 0\" class=\"fa fa-circle\" style=\"color:green\">' },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('general.edit'), action: 'ui-sref=\"annexes.edit({id:row.entity.id})\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('general.delete'), action: 'ng-click=\"grid.appScope.deleteDialog(row.entity.id,row.entity.FK_events_programs_annexes_types_tl_events_programs_annexes_types[0].name);\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n\n ],\n getData: function (options) {\n\n return Restangular.all('AnnexesTypes').getList(options);\n }\n\n };\n\n $scope.goToEdit = function (rowEntity) {\n $state.go(\"annexes.edit\", { id: rowEntity.id });\n }\n\n $scope.deleteDialog = function (id, name) {\n $scope.id = id;\n $scope.name = name;\n modalService.confirm({\n title: $filter('translate')('general.button_delete'),\n message: $filter('translate')('general.delete_message') + \" \" + $scope.name + \"?\",\n onAccept: function () {\n Restangular.one('AnnexesTypes', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('general.delete_success'));\n $scope.gridOptionsAnnexes.gridApi.core.raise.itemDeleted($scope);\n\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n });\n\n };\n\n\n }])\n\n ;","\nimport BreadcrumbView from \"../common/breadcrumb/breadcrumb.html\";\nimport AnnexesListView from \"./annexes-list.html\";\nimport AnnexesEditView from \"./annexes-edit.html\";\n\nangular.module(\"annexes\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('annexes', {\n url: \"/annexes\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n })\n .state('annexes.list', {\n url: \"/list\",\n controller: \"AnnexesListCtrl\",\n template: AnnexesListView,\n data: { pageTitle: 'Anexos' }\n })\n .state('annexes.edit', {\n url: \"/edit/:id\",\n controller: \"AnnexesEditCtrl\",\n template: AnnexesEditView,\n data: { pageTitle: 'Anexos' }\n })\n ;\n }])\n ;","import \"zone.js\";\nimport {NgModule, DoBootstrap, Inject} from '@angular/core';\nimport { BrowserModule} from '@angular/platform-browser';\nimport { UpgradeModule} from '@angular/upgrade/static';\nimport {platformBrowserDynamic} from '@angular/platform-browser-dynamic';\nimport { PeopleModule } from './features/people/people.module';\nimport { SharedModule } from './shared/shared.module';\nimport { CoreModule } from './core/core.module';\nimport { LogService } from './core/services/log.service';\n@NgModule({\n imports: [\n BrowserModule,\n UpgradeModule,\n PeopleModule,\n SharedModule,\n CoreModule\n ]\n})\nexport class AppModule implements DoBootstrap {\n constructor(@Inject(UpgradeModule) private upgrade: UpgradeModule,\n @Inject(LogService) private log: LogService) { }\n\n // Override Angular bootstrap so it doesn't do anything\n ngDoBootstrap() {\n this.log.debug(\"Bootstrapping in Hybrid mode with Angular & AngularJS\");\n this.upgrade.bootstrap(document.body, ['app'], { strictDi: true });\n }\n}\n\nplatformBrowserDynamic().bootstrapModule(AppModule);","import './audits';\nimport './audits-list'; ","import AuditsModalView from \"./audits_modal.html\";\n\n\nangular.module(\"audits\")\n\n .controller('AuditsListCtrl', ['$rootScope', '$scope', 'Restangular', 'gridService', '$uibModal', 'uiGridConstants', '$filter', 'LoginService', '$state', function ($rootScope, $scope, Restangular, gridService, $uibModal, uiGridConstants, $filter, LoginService, $state) {\n\n $rootScope.title = $filter('translate')('audits.title');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('audits.list') }\n ];\n\n $scope.search = {\n username: \"\",\n action: \"\",\n table: \"\",\n date_from: null,\n date_to: null\n };\n\n\n $scope.gridOptionsAudits = {\n pdfTitle: $filter('translate')('audits.pdf_title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n paginationPageSizes: [50, 100, 150],\n paginationPageSize: 50,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n { name: 'created_at', displayName: $filter('translate')('audits.date'), enableFiltering: true, cellFilter: 'toLocalDate | date:\\'dd/MM/yyyy HH:mm\\'', enableHiding: false, enableColumnMenu: false },\n { name: 'username', displayName: $filter('translate')('audits.username'), enableFiltering: true, enableHiding: false, enableColumnMenu: false },\n { name: 'action', displayName: $filter('translate')('audits.action'), enableFiltering: true, enableHiding: false, enableColumnMenu: false },\n { name: 'table_name', displayName: $filter('translate')('audits.table_name'), enableFiltering: true, enableHiding: false, enableColumnMenu: false },\n { name: 'duration', displayName: $filter('translate')('audits.duration'), enableFiltering: true, enableHiding: false, enableColumnMenu: false },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('audits.change'), action: 'ng-click=\"grid.appScope.openDialog(row.entity.changes);\"', cssIconClass: \"fa fa-eye\" },\n { title: $filter('translate')('audits.column_values'), action: 'ng-click=\"grid.appScope.openDialog(row.entity.column_values);\"', cssIconClass: \"fa fa-eye\" }\n ], { cssClass: \"pull-right\" })\n },\n\n ],\n getData: function (options) {\n options.username = $scope.search.username;\n options.action = $scope.search.action;\n options.table = $scope.search.table;\n options.date_from = $scope.search.date_from;\n options.date_to = $scope.search.date_to;\n\n return Restangular.all('Audits').getList(options);\n }\n \n };\n\n $scope.searchAudits = function () {\n if (angular.isDefined($scope.gridOptionsAudits.loadData)) {\n $scope.gridOptionsAudits.loadData(false);\n }\n }\n\n $scope.openDialog = function (value) {\n\n let $modalInstance = $uibModal.open({\n animation: true,\n template: AuditsModalView,\n size: \"lg\", \n controller: \"AuditsModalCtrl\",\n resolve: {\n value: function () {return value}\n }\n });\n\n\n };\n }])\n\n .controller(\"AuditsModalCtrl\", ['$scope', '$uibModalInstance', 'Restangular', 'modalService', '$filter', '$http', '$stateParams', '$q', 'value', function ($scope, $uibModalInstance, Restangular, modalService, $filter, $http, $stateParams, $q, value) {\n\n $scope.value = value;\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n\n }])\n\n\n;","\nimport BreadcrumbView from \"../common/breadcrumb/breadcrumb.html\";\nimport AuditsListView from \"./audits-list.html\";\n\nangular.module(\"audits\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('audits', {\n url: \"/audits\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n })\n .state('audits.list', {\n url: \"/list\",\n controller: \"AuditsListCtrl\",\n template: AuditsListView,\n data: { pageTitle: 'Auditoria' }\n })\n ;\n }])\n;","import './auth';\nimport './auth-process-init';\nimport './auth-register-auth-code';\nimport './auth-register-webauthn';\nimport './auth-register-yubicootp'; ","angular.module(\"auth\")\n .controller('AuthProcessInitCtrl', ['$translate', '$scope', 'LoginService', '$rootScope', '$uibModal', '$http', '$state', 'modalService', 'Restangular', '$stateParams', '$location', '$httpParamSerializer', '$timeout', '$log', '$sce', function ($translate, $scope, LoginService, $rootScope, $uibModal, $http, $state, modalService, Restangular, $stateParams, $location, $httpParamSerializer, $timeout, $log, $sce) {\n $scope.showProcessSelector = false;\n $scope.processes = [];\n $scope.services = [];\n \n $scope.loginData = {\n username: '',\n password: '',\n authenticator_code: '',\n yubico_otp: ''\n };\n \n $scope.companyLogoUrl = '';\n $scope.companyName = '';\n $scope.showCompanyData = false;\n \n $scope.showNewLogin = false;\n \n $scope.passwordIcon = 'fa-eye';\n $scope.passwordType = 'password';\n\n $scope.togglePasswordVisibility = function () {\n if ($scope.passwordType === 'password') {\n $scope.passwordType = 'text';\n $scope.passwordIcon = 'fa-eye-slash';\n } else {\n $scope.passwordType = 'password';\n $scope.passwordIcon = 'fa-eye';\n }\n };\n \n $rootScope.loginProcess = true;\n \n Restangular.all('AuthenticationProcesses/Enabled').getList().then(function (data) {\n $log.debug(data);\n if(data.length === 0) {\n $state.go(\"login\");\n } else {\n Restangular.all('Auth/Services').getList().then(function (services) {\n // Add to scope only services with openid configuration URL\n $scope.services = services.filter(s => s.openid_configuration != null && s.webapp_enabled === true);\n $scope.services.forEach(s => s.imageUrl = \"/api/Files/\" + s.imageUid + \"/download\");\n\n if ($scope.services.length == 1 && $scope.processes.length == 1) {\n if ($rootScope.step && !$rootScope.step.UserPassword && !$rootScope.step.Authenticator && !$rootScope.step.YubicoOTP\n && !$rootScope.step.Webauthn && $rootScope.step.OAuth) {\n LoginService.loginExternal($scope.services[0]);\n }\n }\n });\n\n if(data.length > 1) {\n $scope.showProcessSelector = true;\n LoginService.nextStep();\n\n } else if (data.length === 1) {\n $scope.selectProcess(data[0]);\n }\n $http.get((window as any).CONFIG.api_url + 'Companies/Count').then(function (response) {\n if (response.data !== 0) {\n $scope.showCompanyData = true;\n $scope.companyLogoUrl = \"/api/Companies/\" + response.data + \"/logo\";\n $http.get((window as any).CONFIG.api_url + \"Companies/\" + response.data + \"/name\").then(function (response2) {\n $scope.companyName = response2.data;\n });\n\n }\n });\n $scope.showNewLogin = true;\n $scope.processes = data; \n }\n });\n\n $scope.onKeyPressPassword = function (keyEvent) {\n if (keyEvent.which === 13) $scope.checkUserPassword();\n }\n \n $scope.onKeyPressAuthenticator = function (keyEvent) {\n // If code is 6 digits long, submit\n if ($scope.loginData.authenticator_code.length === 6) $scope.verifyCode();\n }\n \n $scope.onKeyPressYubicoOTP = function (keyEvent) {\n // If code is 44 digits long, submit\n if ($scope.loginData.yubico_otp.length === 44) $scope.verifyYubicoOTP();\n }\n\n $scope.checkUserPassword = function () {\n LoginService.validateUser($scope.loginData);\n };\n \n $scope.checkWebauthn = function () {\n LoginService.checkWebauthn();\n };\n \n $scope.loginExternal = function (service) {\n LoginService.loginExternal(service);\n };\n \n $scope.verifyCode = function () {\n LoginService.validateAuthenticator($scope.loginData);\n }\n \n $scope.verifyYubicoOTP = function () {\n LoginService.validateYubicoOTP($scope.loginData);\n }\n\n $scope.selectProcess = function (process) {\n $scope.showProcessSelector = false;\n LoginService.nextStep(process.id);\n if($scope.services.length == 1) {\n if(!$rootScope.step.UserPassword && !$rootScope.step.Authenticator && !$rootScope.step.YubicoOTP\n && !$rootScope.step.Webauthn && $rootScope.step.OAuth) {\n LoginService.loginExternal($scope.services[0]);\n }\n }\n }\n }]);\n\n\n","angular.module(\"auth\")\n .controller('AuthRegisterAuthCodeCtrl', ['$translate', '$scope', 'LoginService', '$rootScope', '$uibModal', '$http', '$state', 'modalService', 'Restangular', '$stateParams', '$location', '$httpParamSerializer', '$timeout', '$log', function ($translate, $scope, LoginService, $rootScope, $uibModal, $http, $state, modalService, Restangular, $stateParams, $location, $httpParamSerializer, $timeout, $log) {\n $scope.userToken = $stateParams.token;\n $scope.showQr = false;\n $scope.qrCode = '';\n $scope.code = '';\n $rootScope.loginProcess = false;\n Restangular.one('/Auth/AuthenticatorQRCode/' + $scope.userToken).get().then(function (result) {\n $scope.showQr = result.success;\n if(result.success) {\n $scope.qrCode = result.image;\n }\n });\n \n $scope.verifyCode = function () {\n if ($scope.code.length === 6) {\n Restangular.all('/Auth/Authenticator/Verify/' + $scope.code + '/' + $scope.userToken).post()\n .then(function (result) {\n if (result.success) {\n $state.go('authinit');\n }\n });\n }\n }\n }]);\n","angular.module(\"auth\")\n .controller('AuthRegisterWebauthnCtrl', ['$translate', '$scope', 'LoginService', '$rootScope', '$uibModal', '$http', '$state', 'modalService', 'Restangular', '$stateParams', '$location', '$httpParamSerializer', '$timeout', '$log', function ($translate, $scope, LoginService, $rootScope, $uibModal, $http, $state, modalService, Restangular, $stateParams, $location, $httpParamSerializer, $timeout, $log) {\n $scope.userToken = $stateParams.token;\n $rootScope.loginProcess = false;\n\n let coerceToBase64Url = function (thing) {\n // Array or ArrayBuffer to Uint8Array\n if (Array.isArray(thing)) {\n thing = Uint8Array.from(thing);\n }\n\n if (thing instanceof ArrayBuffer) {\n thing = new Uint8Array(thing);\n }\n\n // Uint8Array to base64\n if (thing instanceof Uint8Array) {\n var str = \"\";\n var len = thing.byteLength;\n\n for (var i = 0; i < len; i++) {\n str += String.fromCharCode(thing[i]);\n }\n thing = window.btoa(str);\n }\n\n if (typeof thing !== \"string\") {\n throw new Error(\"could not coerce to string\");\n }\n\n // base64 to base64url\n // NOTE: \"=\" at the end of challenge is optional, strip it off here\n thing = thing.replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=*$/g, \"\");\n\n return thing;\n };\n\n let coerceToArrayBuffer = function (thing) {\n if (typeof thing === \"string\") {\n // base64url to base64\n thing = thing.replace(/-/g, \"+\").replace(/_/g, \"/\");\n\n // base64 to Uint8Array\n var str = window.atob(thing);\n var bytes = new Uint8Array(str.length);\n for (var i = 0; i < str.length; i++) {\n bytes[i] = str.charCodeAt(i);\n }\n thing = bytes;\n }\n\n // Array to Uint8Array\n if (Array.isArray(thing)) {\n thing = new Uint8Array(thing);\n }\n\n // Uint8Array to ArrayBuffer\n if (thing instanceof Uint8Array) {\n thing = thing.buffer;\n }\n\n // error if none of the above worked\n if (!(thing instanceof ArrayBuffer)) {\n throw new TypeError(\"could not coerce to ArrayBuffer\");\n }\n\n return thing;\n };\n\n let registerNewCredential = function (newCredential) {\n // Move data into Arrays incase it is super long\n let attestationObject = new Uint8Array(newCredential.response.attestationObject);\n let clientDataJSON = new Uint8Array(newCredential.response.clientDataJSON);\n let rawId = new Uint8Array(newCredential.rawId);\n\n const data = {\n id: newCredential.id,\n rawId: coerceToBase64Url(rawId),\n type: newCredential.type,\n extensions: newCredential.getClientExtensionResults(),\n response: {\n attestationObject: coerceToBase64Url(attestationObject),\n clientDataJSON: coerceToBase64Url(clientDataJSON)\n }\n };\n\n Restangular.all('Auth').customPOST(JSON.stringify(data), 'WebAuthn/MakeCredential/' + $scope.userToken, null, {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json'\n }).then(function (response) {\n $log.debug(\"Credential Object\", response);\n\n // show error\n if (response.status !== \"ok\") {\n $log.error(\"Error creating credential\");\n $log.error(response.errorMessage);\n } else {\n $state.go('authinit');\n \n }\n });\n }\n\n $scope.addCredentials = function () {\n Restangular.all(\"Auth\").customPOST(null, \"WebAuthn/MakeCredentialOptions/\" + $scope.userToken, null).then(function (makeCredentialOptions) {\n $log.debug(makeCredentialOptions);\n if(makeCredentialOptions.status === \"ok\") {\n // Turn the challenge back into the accepted format of padded base64\n makeCredentialOptions.challenge = coerceToArrayBuffer(makeCredentialOptions.challenge);\n // Turn ID into a UInt8Array Buffer for some reason\n makeCredentialOptions.user.id = coerceToArrayBuffer(makeCredentialOptions.user.id);\n\n makeCredentialOptions.excludeCredentials = makeCredentialOptions.excludeCredentials.map((c) => {\n c.id = coerceToArrayBuffer(c.id);\n return c;\n });\n\n if (makeCredentialOptions.authenticatorSelection.authenticatorAttachment === null) makeCredentialOptions.authenticatorSelection.authenticatorAttachment = undefined;\n\n $log.debug(\"Creating PublicKeyCredential...\");\n\n let newCredential;\n try {\n navigator.credentials.create({\n publicKey: makeCredentialOptions\n }).then(function (newCredential) {\n $log.debug(\"PublicKeyCredential Created\", newCredential);\n registerNewCredential(newCredential);\n });\n } catch (e) {\n let msg = \"Could not create credentials in browser. Probably because the username is already registered with your authenticator. Please change username or authenticator.\"\n $log.error(msg, e);\n// showErrorAlert(msg, e);\n }\n }\n });\n };\n }]);\n","angular.module(\"auth\")\n .controller('AuthRegisterYubicoOTPCtrl', ['$translate', '$scope', 'LoginService', '$rootScope', '$uibModal', '$http', '$state', 'modalService', 'Restangular', '$stateParams', '$location', '$httpParamSerializer', '$timeout', '$log', function ($translate, $scope, LoginService, $rootScope, $uibModal, $http, $state, modalService, Restangular, $stateParams, $location, $httpParamSerializer, $timeout, $log) {\n $scope.userToken = $stateParams.token;\n $scope.code = '';\n $rootScope.loginProcess = false;\n $scope.registerYubicoOTP = function () {\n if ($scope.code.length >= 12) {\n $http.post((window as any).CONFIG.api_url + '/Auth/YubicoOTP/Register/' + $scope.code.substring(0, 12) + '/' + $scope.userToken)\n .then(function (result) {\n if (result.data.success) {\n $state.go('authinit');\n }\n });\n }\n }\n }]);","\nimport AuthProcessInitView from \"./auth-process-init.html\";\nimport AuthRegisterAuthCodeView from \"./auth-register-auth-code.html\";\nimport AuthRegisterWebauthnView from \"./auth-register-webauthn.html\";\nimport AuthRegisterYubicoOTPView from \"./auth-register-yubicootp.html\";\n\nangular.module(\"auth\", [])\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('authinit', {\n url: \"/auth/init\",\n views: {\n 'loginContent': {\n controller: \"AuthProcessInitCtrl\",\n template: AuthProcessInitView,\n }\n }\n })\n .state('authregisterauthcode', {\n url: \"/auth/register/authcode/:token\",\n controller: \"AuthRegisterAuthCodeCtrl\",\n template: AuthRegisterAuthCodeView,\n })\n .state('authregisterwebauthn', {\n url: \"/auth/register/webauthn/:token\",\n controller: \"AuthRegisterWebauthnCtrl\",\n template: AuthRegisterWebauthnView,\n })\n .state('authregisteryubicootp', {\n url: \"/auth/register/yubicootp/:token\",\n controller: \"AuthRegisterYubicoOTPCtrl\",\n template: AuthRegisterYubicoOTPView,\n })\n }]);","import './authentication_processes';\nimport './authentication_processes-list';\nimport './authentication_processes-edit'; ","import AuthenticationProcessesNewStepModalView from \"./AuthenticationProcessesNewStepModal.html\";\n\nangular.module('authentication_processes')\n\n .controller(\"authenticationProcessesEditCtrl\", ['LoginService', '$rootScope', '$scope', '$http', '$interval', '$q', 'i18nService', 'Restangular', 'gridService', 'modalService', '$uibModal', '$filter', '$translate', '$state', '$stateParams', '$log',\n function (LoginService, $rootScope, $scope, $http, $interval, $q, i18nService, Restangular, gridService, modalService, $uibModal, $filter, $translate, $state, $stateParams, $log) {\n\n $rootScope.title = $filter('translate')('authentication_processes.title');\n $log.debug($filter('translate')('authentication_processes.title'));\n\n $scope.allowWrite = true;\n\n if (angular.isUndefined($stateParams.id) || $stateParams.id == \"\") {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('authentication_processes.title'), url: \"authentication_processes.list\" },\n { title: $filter('translate')('general.add') },\n ];\n } else {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('authentication_processes.title'), url: \"authentication_processes.list\" },\n { title: $filter('translate')('general.edit') },\n ];\n }\n\n Restangular.one('AuthenticationProcesses', $stateParams.id).get().then(function (result) {\n $scope.authentication_process = result.id ? result : { Steps: [] };\n $scope.configureSteps();\n });\n\n $scope.saveAuthenticationProcess = function () {\n if (angular.isDefined($scope.authentication_process.id)) {\n $scope.authentication_process.put().then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('authentication_processes.save_success'));\n $state.go(\"authentication_processes.list\");\n } else {\n $scope.errorMessage = result.message;\n }\n });\n } else {\n Restangular.all('AuthenticationProcesses').post($scope.authentication_process).then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('authentication_processes.save_success'));\n $state.go(\"authentication_processes.list\");\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n }\n\n $scope.checkDelete = function () {\n modalService.confirm({\n title: $filter('translate')('general.button_delete'),\n message: $filter('translate')('authentication_processes.delete_message'),\n onAccept: function () {\n $scope.authentication_process.remove().then(function () {\n toastr.success($filter('translate')('authentication_processes.deleted_success'));\n $state.go(\"authentication_processes.list\");\n });\n }\n });\n };\n\n $scope.configureSteps = function () {\n let i = 0;\n $scope.authentication_process.Steps.forEach(function (f) {\n f.inGrid = true;\n })\n $log.debug(\"listado de pasos\")\n $log.debug($scope.authentication_process.Steps);\n $scope.gridOptionsSteps.data = $scope.authentication_process.Steps;\n\n $log.debug('pasos configurados mon amie');\n }\n\n // $scope.allowWrite = LoginService.permissionExist(\"AUTHENTICATION_SERVICES_WRITE\");\n $scope.gridOptionsSteps = {\n pdfTitle: \"Steps\",\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n enableSorting: true,\n paginationPageSizes: [20, 40, 60],\n paginationPageSize: 20,\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n { name: 'Order', displayName: $filter('translate')('passbooks.field_order'), enableFiltering: true, enableHiding: false },\n { name: 'UserPassword', displayName: $filter('translate')('authentication_processes_steps.user_password'), enableFiltering: true, enableHiding: false, cellTemplate: '
' },\n { name: 'OAuth', enableFiltering: true, enableHiding: false, cellTemplate: '
' },\n { name: 'Authenticator', enableFiltering: true, enableHiding: false, cellTemplate: '
' },\n { name: 'YubicoOTP', enableFiltering: true, enableHiding: false, cellTemplate: '
' },\n { name: 'WebAuthn', enableFiltering: true, enableHiding: false, cellTemplate: '
'},\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('general.button_edit'), action: 'ng-click=\"grid.appScope.addStep(row.entity)\"; ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('general.button_delete'), action: 'ng-click=\"grid.appScope.removeStep(row.entity)\"; ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n };\n\n $scope.addStep = function (step) {\n step ? $scope.step = step : $scope.step = {};\n let $modalInstance = $uibModal.open({\n animation: true,\n template: AuthenticationProcessesNewStepModalView,\n controller: \"AuthenticationProcessesNewStepModalCtrl\",\n resolve: {},\n scope: $scope,\n size: 'lg'\n });\n };\n\n $scope.removeStep = function (step) {\n modalService.confirm({\n title: $filter('translate')('events_types.button_delete'),\n message: $filter('translate')('authentication_processes.step_delete_message'),\n onAccept: function () {\n let index = $scope.authentication_process.Steps.indexOf(step)\n $scope.authentication_process.Steps(index, 1);\n }\n });\n };\n\n $scope.deleteDialog = function (id, name) {\n $scope.id = id;\n $scope.name = name;\n modalService.confirm({\n title: $filter('translate')('events_types.button_delete'),\n message: $filter('translate')('authentication_processes.delete_message'),\n onAccept: function () {\n Restangular.one('AuthenticationProcesses', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('authentication_processes.deleted_success'));\n $scope.gridOptionsSteps.gridApi.core.raise.itemDeleted($scope);\n\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n });\n }\n }])\n .controller(\"AuthenticationProcessesNewStepModalCtrl\", ['$scope', '$uibModalInstance', 'modalService', '$filter', '$log',\n function ($scope, $uibModalInstance, modalService, $filter, $log) {\n\n $scope.newStepTitle = $scope.step.id ? ($filter('translate')('authentication_processes.step_edit')) : ($filter('translate')('authentication_processes.step_add'));\n let defaultPosition;\n // Sugerimos una posición por defecto\n let orderList = $scope.authentication_process.Steps.map(f => f.Order);\n\n $log.debug(orderList);\n\n if (orderList.length > 0) {\n defaultPosition = Math.max(...orderList) + 1;\n }\n if (!defaultPosition) {\n defaultPosition = 1;\n };\n\n $scope.step.Order = $scope.step.Order ? $scope.step.Order : defaultPosition;\n\n $scope.onCancel = function () {\n $scope.newField = {};\n $uibModalInstance.dismiss('cancel');\n };\n\n $scope.onAccept = function () {\n if (!$scope.step.inGrid) {\n $scope.authentication_process.Steps.push($scope.step);\n };\n $scope.configureSteps();\n $scope.step = {};\n $uibModalInstance.close();\n };\n\n }]);","\nangular.module('authentication_processes')\n\n .controller(\"authenticationProcessesListCtrl\", ['LoginService', '$rootScope', '$scope', '$http', '$interval', '$q', 'i18nService', 'Restangular', 'gridService', 'modalService', '$uibModal', '$filter', '$translate', '$state', '$log',\n function (LoginService, $rootScope, $scope, $http, $interval, $q, i18nService, Restangular, gridService, modalService, $uibModal, $filter, $translate, $state, $log) {\n\n $scope.allowWrite = true;\n\n $rootScope.title = $filter('translate')('authentication_processes.title');\n $log.debug($filter('translate')('authentication_processes.title'));\n $rootScope.breadcrumb = [\n { title: $filter('translate')('authentication_processes.title') }\n ];\n\n // $scope.allowWrite = LoginService.permissionExist(\"AUTHENTICATION_SERVICES_WRITE\");\n\n $scope.gridOptions= {\n pdfTitle: \"Servicios\",\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n enableSorting: true,\n paginationPageSizes: [20, 40, 60],\n paginationPageSize: 20,\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n { name: 'Name', displayName: $filter('translate')('general.name'), enableFiltering: true, enableHiding: false },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('general.button_edit'), action: 'ui-sref=\"authentication_processes.edit({id:row.entity.id})\"; ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('general.button_delete'), action: 'ng-click=\"grid.appScope.deleteDialog(row.entity.id,row.entity.name);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n\n getData: function (options) {\n return Restangular.all('AuthenticationProcesses').getList(options).then(function (results) {\n $log.debug('Hola, tengo resultados ');\n $log.debug(results);\n return results;\n })\n }\n };\n\n $scope.goToEdit = function (rowEntity) {\n $state.go(\"authentication_processes.edit\", { id: rowEntity.id });\n };\n\n $scope.deleteDialog = function (id, name) {\n $scope.id = id;\n $scope.name = name;\n modalService.confirm({\n title: $filter('translate')('events_types.button_delete'),\n message: $filter('translate')('authentication_processes.delete_message'),\n onAccept: function () {\n Restangular.one('AuthenticationProcesses', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('authentication_processes.deleted_success'));\n $scope.gridOptionsAuthenticationServices.gridApi.core.raise.itemDeleted($scope);\n\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n });\n\n\n }\n }])","\nimport BreadcrumbView from \"../common/breadcrumb/breadcrumb.html\";\nimport AuthenticationProcessesListView from \"./authentication_processes-list.html\";\nimport AuthenticationProcessesEditView from \"./authentication_processes-edit.html\";\n\nangular.module('authentication_processes', ['ui.bootstrap.contextMenu'])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('authentication_processes', {\n url: \"/authentication_processes\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n })\n\n .state('authentication_processes.list', {\n url: \"/list\",\n controller: \"authenticationProcessesListCtrl\",\n template: AuthenticationProcessesListView,\n // requiredPermission: [\"AUTHENTICATION_SERVICES_READ\"]\n })\n\n .state('authentication_processes.edit', {\n url: \"/edit/:id\",\n controller: \"authenticationProcessesEditCtrl\",\n template: AuthenticationProcessesEditView,\n data: { pageTitle: \"Servicio\" },\n // requiredPermission: [\"AUTHENTICATION_SERVICES_WRITE\"]\n })\n\n }])\n ;","import './authentication_services';\nimport './authentication_services-list';\nimport './authentication_services-edit'; ","angular.module('authenticationServices')\n .controller(\"authenticationServicesEditCtrl\", ['LoginService', '$scope', '$rootScope', '$state', '$stateParams', 'Restangular', 'gridService', '$filter', '$translate', 'modalService', '$uibModal', 'Upload',\n function (LoginService, $scope, $rootScope, $state, $stateParams, Restangular, gridService, $filter, $translate, modalService, $uibModal, Upload) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"AUTHENTICATION_SERVICES_WRITE\");\n $rootScope.title = $filter('translate')('authentication-services.title');\n\n $scope.authentication_service = {};\n $scope.showImg = \"\";\n\n if (angular.isUndefined($stateParams.id) || $stateParams.id == \"\") {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('authentication-services.title'), url: \"authentication-services.list\" },\n { title: $filter('translate')('authentication-services.title_add') },\n ];\n } else {\n\n $rootScope.breadcrumb = [\n { title: $filter('translate')('authentication-services.title'), url: \"authentication-services.list\" },\n { title: $filter('translate')('authentication-services.title_edit') },\n ];\n Restangular.one('AuthenticationServices', $stateParams.id).get().then(function (result) {\n $scope.authentication_service = result;\n });\n Restangular.all('Files').getList({ entity_type: 'authentication_services', entity_type_id: $stateParams.id }).then(function (result) {\n\n result ? $scope.logo = result[0] : \"\";\n \n if ($scope.logo != null) {\n Restangular.one(`Files/${$scope.logo.uid}/download/b64`).get().then(function (result) {\n $scope.showImg = `data:image/jpeg;base64,${result}`;\n })\n }\n\n });\n\n }\n $scope.selectImage = function () {\n $(\"#frmImage\").trigger(\"click\");\n $(\"#frmImage\").change(function () {\n const fileInput = document.querySelector('#frmImage') as HTMLInputElement;\n const file = fileInput?.files?.[0];\n if (file) {\n const fileReader = new FileReader();\n fileReader.onload = function (event) {\n const src = (event.target as FileReader).result;\n $scope.showImg = src;\n if (!$scope.$$phase) $scope.$apply();\n };\n fileReader.readAsDataURL(file);\n $scope.file = file; \n } else {\n //preview.src = \"\";\n }\n });\n };\n\n $scope.getImage = function () {\n if ($scope.showImg && $scope.showImg != \"\" ) {\n return $scope.showImg;\n } else {\n return \"assets/img/no-image.png\";\n }\n };\n\n $scope.removeImage = function ($event) {\n $event.stopPropagation();\n $scope.showImg = null;\n $scope.file = null;\n if (typeof ($event) !== \"undefined\") {\n $event.preventDefault();\n $event.stopPropagation();\n }\n };\n let uploadFile = function (id) {\n $scope.file.upload = Upload.upload({\n url: (window as any).CONFIG.api_url + \"Files/uploadFile\",\n data: { file: $scope.file, id: 0, entity_type: \"authentication_services\", entity_type_id: id, is_public: \"true\"},\n });\n $scope.file.upload.then(function (response) {\n }, function (response) {\n if (response.status > 0) {\n let errorMsg = response.status + ': ' + response.data;\n toastr.error(\"Ha ocurrido un error: \" + errorMsg);\n }\n });\n }\n\n let manageFile = function (id) {\n if ($scope.file) { uploadFile(id) };\n if ($scope.logo && ($scope.file || !$scope.showImg)) {$scope.logo.remove() }\n \n }\n $scope.saveAuthenticationService = function () {\n if (angular.isDefined($scope.authentication_service.id)) {\n $scope.authentication_service.put().then(function (result) {\n if (angular.isDefined(result.id)) {\n manageFile(result.id);\n toastr.success($filter('translate')('authentication-services.edit_success'));\n $state.go(\"authentication_services.list\");\n } else {\n $scope.errorMessage = result.message;\n }\n });\n } else {\n Restangular.all('AuthenticationServices').post($scope.authentication_service).then(function (result) {\n if (angular.isDefined(result.id)) {\n manageFile(result.id);\n toastr.success($filter('translate')('authentication-services.save_success'));\n $state.go(\"authentication_services.list\");\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n }\n\n $scope.checkDelete = function () {\n modalService.confirm({\n title: $filter('translate')('authentication-services.button_delete'),\n message: $filter('translate')('authentication-services.delete_message') + \" \" + $scope.authentication_service.name + \"?\",\n onAccept: function () {\n if ($scope.logo) { $scope.logo.remove() };\n $scope.authentication_service.remove().then(function () {\n toastr.success($filter('translate')('authentication-services.deleted_success'));\n $state.go(\"authentication_services.list\");\n });\n }\n });\n };\n\n }]);","angular.module('authenticationServices')\n\n .controller(\"authenticationServicesListCtrl\", ['LoginService', '$rootScope', '$scope', '$http', '$interval', '$q', 'i18nService', 'Restangular', 'gridService', 'modalService', '$uibModal', '$filter', '$translate', '$state', '$log',\n function (LoginService, $rootScope, $scope, $http, $interval, $q, i18nService, Restangular, gridService, modalService, $uibModal, $filter, $translate, $state, $log) {\n $rootScope.title = $filter('translate')('authentication-services.title');\n\n $log.debug($filter('translate')('authentication-services.title'));\n\n $rootScope.breadcrumb = [\n { title: $filter('translate')('authentication-services.title') }\n ];\n\n $scope.allowWrite = LoginService.permissionExist(\"AUTHENTICATION_SERVICES_WRITE\");\n\n $scope.gridOptionsAuthenticationServices= {\n pdfTitle: \"Servicios\",\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n enableSorting: true,\n paginationPageSizes: [20, 40, 60],\n paginationPageSize: 20,\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n { name: 'name', displayName: $filter('translate')('general.name'), enableFiltering: true, enableHiding: false },\n { name: 'description', displayName: $filter('translate')('general.description'), enableFiltering: true, enableHiding: false },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('general.button_edit'), action: 'ui-sref=\"authentication_services.edit({id:row.entity.id})\"; ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('general.button_delete'), action: 'ng-click=\"grid.appScope.deleteDialog(row.entity.id,row.entity.name);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n return Restangular.all('AuthenticationServices').getList(options)\n }\n };\n\n\n $scope.goToEdit = function (rowEntity) {\n $state.go(\"authentication_services.edit\", { id: rowEntity.id });\n };\n\n\n $scope.deleteDialog = function (id, name) {\n $scope.id = id;\n $scope.name = name;\n modalService.confirm({\n title: $filter('translate')('events_types.button_delete'),\n message: $filter('translate')('events_types.delete_message') + \" \" + $scope.name + \"?\",\n onAccept: function () {\n Restangular.one('AuthenticationServices', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('authentication_services.deleted_success'));\n $scope.gridOptionsAuthenticationServices.gridApi.core.raise.itemDeleted($scope);\n\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n });\n\n\n }\n }])","import breadcrumbTemplate from '../common/breadcrumb/breadcrumb.html';\nimport authServicesListTemplate from './authentication_services-list.html';\nimport authServicesEditTemplate from './authentication_services-edit.html';\n\n\nangular.module('authenticationServices', ['ui.bootstrap.contextMenu'])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('authentication_services', {\n url: \"/authenticationServices\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: breadcrumbTemplate,\n })\n\n .state('authentication_services.list', {\n url: \"/list\",\n controller: \"authenticationServicesListCtrl\",\n template: authServicesListTemplate,\n requiredPermission: [\"AUTHENTICATION_SERVICES_READ\"]\n })\n \n .state('authentication_services.edit', {\n url: \"/edit/:id\",\n controller: \"authenticationServicesEditCtrl\",\n template: authServicesEditTemplate,\n data: { pageTitle: \"Servicio\" },\n requiredPermission: [\"AUTHENTICATION_SERVICES_WRITE\"]\n })\n\n }])\n;","import './budget_groups';\nimport './budget_groups-list';\nimport './budget_groups-edit'; ","angular.module(\"budget_groups\")\n\n .controller(\"BudgetGroupsEditCtrl\", ['LoginService', '$scope', '$rootScope', '$controller', '$state', '$stateParams', 'Restangular', '$uibModal', 'modalService', '$compile', 'gridService', '$filter', '$translate', function (LoginService, $scope, $rootScope, $controller, $state, $stateParams, Restangular, $uibModal, modalService, $compile, gridService, $filter, $translate) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"BUDGET_GROUPS_WRITE\");\n $rootScope.title = $filter('translate')('budget_groups.title');\n\n $scope.budget_group_id = $stateParams.id;\n\n if (angular.isUndefined($stateParams.id) || $stateParams.id == \"\") {\n \n $rootScope.breadcrumb = [\n { title: $filter('translate')('budget_groups.title'), url: \"budget_groups.list\" },\n { title: $filter('translate')('budget_groups.add') },\n ];\n $scope.budget_group = { };\n } else {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('budget_groups.title'), url: \"budget_groups.list\" },\n { title: $filter('translate')('budget_groups.edit') },\n ];\n\n Restangular.one('BudgetGroups', $stateParams.id).get().then(function (results) { \n $scope.budget_group = results;\n });\n } \n \n \n $scope.save = function (frmBudgetGroups) { \n \n if (!angular.isUndefined($scope.budget_group.id)) {\n $scope.budget_group.put().then(function (result) {\n if (typeof (result.id) != \"undefined\") {\n toastr.success($filter('translate')('budget_groups.modified_success'));\n $state.go(\"budget_groups.list\");\n } else {\n $scope.errorMessage = result.message;\n }\n });\n } else {\n Restangular.all('BudgetGroups').post($scope.budget_group).then(function (result) {\n if (typeof (result.id) != \"undefined\") {\n toastr.success($filter('translate')('budget_groups.created_success'));\n $state.go(\"budget_groups.list\");\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n }\n\n $scope.checkDelete = function () {\n modalService.confirm({\n title: $filter('translate')('budget_groups.delete'),\n message: $filter('translate')('budget_groups.delete_message') +\" \"+ $scope.budget_group.name + \"?\",\n onAccept: function () {\n $scope.budget_group.remove().then(function () {\n toastr.success($filter('translate')('budget_groups.remove_success'));\n $state.go(\"budget_groups.list\");\n });\n }\n });\n };\n \n\n\n}])\n\n;\n\n","angular.module(\"budget_groups\")\n\n .controller(\"BudgetGroupsListCtrl\", ['LoginService', '$rootScope', '$scope', '$http', '$interval', '$q', 'i18nService', 'Restangular', 'uiGridTreeViewConstants', 'gridService', 'treeService', 'modalService', '$uibModal', '$filter', '$translate', '$state', '$log',\n function (LoginService, $rootScope, $scope, $http, $interval, $q, i18nService, Restangular, uiGridTreeViewConstants, gridService, treeService, modalService, $uibModal, $filter, $translate, $state, $log) {\n \n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"BUDGET_GROUPS_WRITE\");\n\n $rootScope.title = $filter('translate')('budget_groups.title');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('budget_groups.title') }\n ];\n\n $scope.gridOptions = {\n pdfTitle: $filter('translate')('budget_groups.title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n enableSorting: true,\n showTreeExpandNoChildren: true,\n paginationPageSizes: [15, 30, 45],\n paginationPageSize: 15,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, exporterSuppressExport: true },\n { name: 'name', displayName: $filter('translate')('budget_groups.name'), enableFiltering: true, enableHiding: false },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('budget_groups.edit'), action: 'ui-sref=\"budget_groups.edit({budget_group_id:row.entity.budget_group_id,id:row.entity.id})\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('budget_groups.delete'), action: 'ng-click=\"grid.appScope.deleteDialog(row.entity.id,row.entity.name);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) { \n return Restangular.all('BudgetGroups').getList(options);\n }\n };\n\n $scope.goToEdit = function (rowEntity) {\n $state.go(\"budget_groups.edit\", { budget_group_id: rowEntity.budget_group_id, id: rowEntity.id });\n }\n\n\n $scope.deleteDialog = function (id, name) {\n $scope.id = id;\n $scope.name = name;\n modalService.confirm({\n title: $filter('translate')('budget_groups.delete'),\n message: $filter('translate')('budget_groups.delete_message') + \" \" + $scope.name + \"?\",\n onAccept: function () {\n Restangular.one('BudgetGroups', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('budget_groups.remove_success'));\n $scope.gridOptions.data =\n $scope.gridOptions.data.filter(function (el) { return el.id != $scope.id; });\n }, function (response) {\n $log.error(\"Error with status code\", response.status); \n });\n }\n });\n\n };\n \n }])\n\n;","\nimport BreadcrumbView from \"../common/breadcrumb/breadcrumb.html\";\nimport BudgetGroupsListView from \"./budget_groups-list.html\";\nimport BudgetGroupsEditView from \"./budget_groups-edit.html\";\n\nangular.module(\"budget_groups\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('budget_groups', {\n url: \"/budget_groups\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n })\n\n .state('budget_groups.list', {\n url: \"/list\",\n controller: \"BudgetGroupsListCtrl\",\n template: BudgetGroupsListView,\n requiredPermission: [\"BUDGET_GROUPS_READ\"]\n }) \n .state('budget_groups.edit', {\n url: \"/edit/:id\",\n controller: \"BudgetGroupsEditCtrl\",\n template: BudgetGroupsEditView,\n requiredPermission: [\"BUDGET_GROUPS_READ\"]\n })\n }])\n;","import './cms_categories';\nimport './cms_categories-edit';\nimport './cms_categories-list'; \n\nimport \"./cms_articles\";\nimport \"./cms_articles-list\";\nimport \"./cms_articles-edit\";\n","import IconPicker from '../../scripts/iconpicker-1.5.0.js';\n\nangular.module(\"cmsArticles\")\n\n .controller(\"CmsArticlesEditCtrl\", ['LoginService', '$scope', '$rootScope', '$controller', '$state', '$stateParams', 'Restangular', '$uibModal', 'modalService', '$compile', 'gridService', '$filter', '$translate', '$q', '$log',\n function (LoginService, $scope, $rootScope, $controller, $state, $stateParams, Restangular, $uibModal, modalService, $compile, gridService, $filter, $translate, $q, $log) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"CMS_CATEGORIES_WRITE\");\n $rootScope.title = $filter('translate')('cms_articles.title');\n\n $scope.cms_article = { cms_category_id : $state.params.parent_id};\n\n $log.debug($stateParams)\n\n let stateGo = \"\";\n let stateGoParams = {};\n\n // Controlamos la página por la que hemos venido para volver a ella al cancelar o eliminar\n $scope.standalone = $stateParams.standalone;\n if ($scope.standalone == true) {\n\n $scope.uiSerf = \"cms_articles.list\"; \n stateGo = \"cms_articles.list\";\n stateGoParams = {};\n\n } else {\n $scope.uiSerf = \"cms_categories.edit({id:cms_article.cms_category_id})\";\n stateGo = (\"cms_categories.edit\");\n stateGoParams = { id: $scope.cms_article.cms_category_id };\n } \n \n $log.debug(` id = ${$scope.cms_article_id}, parent_id = ${$scope.cms_article.cms_category_id}`);\n //languageCode = \"es\"\n\n //Gestor de texto \n $scope.tinymceOptions = {\n resize: true,\n //forced_root_block: 'div',\n min_height: 60,\n height: 60,\n schema: \"html5\",\n formats: {\n bold: { inline: 'b' },\n underline: { inline: 'u' },\n italic: { inline: 'i' },\n alignleft: { selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div', attributes: { align: \"left\" } },\n aligncenter: { selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div', attributes: { align: \"center\" } },\n alignright: { selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div', attributes: { align: \"right\" } },\n alignjustify: { selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div', attributes: { align: \"justify\" } },\n },\n invalid_elements: 'strong,em',\n fontsize_formats: \"8px 10px 12px 14px 15px 16px 18px 20px 22px 24px 25px 28px 30px 36px \",\n font_formats: 'Arial=Arial;Cambria=Cambria;Courier New=Courier New;Segoe Script=Segoe Script;Tahoma=Tahoma;Verdana=Verdana',\n body_class: 'custom_tinymce_content',\n language: $translate.use().toLowerCase(), //Hay que customizarlo dependiendo del idioma...\n paste_as_text: true,\n plugins: 'paste textcolor code',\n toolbar: \"undo redo | fontsizeselect bold underline italic | forecolor fontselect | alignleft aligncenter alignright alignjustify | code\",\n menubar: false\n };\n\n //\n IconPicker.Init({\n // Required: You have to set the path of IconPicker JSON file to \"jsonUrl\" option. e.g. '/content/plugins/IconPicker/dist/iconpicker-1.5.0.json'\n jsonUrl: '/assets/iconpicker-1.5.0.json',\n // Optional: Change the buttons or search placeholder text according to the language.\n searchPlaceholder: 'Search Icon',\n showAllButton: 'Show All',\n cancelButton: 'Cancel',\n noResultsFound: 'No results found.', // v1.5.0 and the next versions\n borderRadius: '20px', // v1.5.0 and the next versions\n });\n\n IconPicker.Run('#GetIconPicker', function () {\n // ng-bind no funciona para asignar el icono porque no detecta el cambio que hacemos con el IconPicker, así que hay que hacerlo a pelo.\n let icon = document.querySelector(\"#IconPreview\").getAttribute(\"class\");\n icon = icon.substring(icon.indexOf('-') + 1);\n $scope.cms_article.icon = icon;\n });\n\n if ($stateParams.standalone == false) {\n if (angular.isUndefined($stateParams.id) || $stateParams.id == \"\") {\n\n $rootScope.breadcrumb = [\n { title: $filter('translate')('cms_categories.title'), url: `cms_categories.list` },\n { title: $filter('translate')('cms_categories.title_edit'), url: `cms_categories.edit({ id: ${$scope.cms_article.cms_category_id}})` },\n { title: $filter('translate')('cms_articles.title_add') },\n\n ];\n } else {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('cms_categories.title'), url: `cms_categories.list` },\n { title: $filter('translate')('cms_categories.edit'), url: `cms_categories.edit({id : ${$scope.cms_article.cms_category_id}})` },\n { title: $filter('translate')('cms_articles.edit') },\n ];\n\n Restangular.one('CmsArticles', $stateParams.id).get().then(function (result) {\n\n $scope.cms_article = result;\n });\n }\n\n } else {\n\n if (angular.isUndefined($stateParams.id) || $stateParams.id == \"\") {\n\n $rootScope.breadcrumb = [\n { title: $filter('translate')('cms_articles.title'), url: `cms_articles.list` },\n { title: $filter('translate')('cms_articles.title_add') },\n\n ];\n } else {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('cms_articles.title'), url: `cms_articles.list` },\n { title: $filter('translate')('cms_articles.edit') },\n ];\n\n Restangular.one('CmsArticles', $stateParams.id).get().then(function (result) {\n\n $scope.cms_article = result;\n });\n }\n }\n $scope.save = function () {\n\n if (!angular.isUndefined($scope.cms_article.id)) {\n $scope.cms_article.put().then(function (result) {\n if (typeof (result.id) != \"undefined\") {\n toastr.success($filter('translate')('cms_articles.modified_success'));\n $state.go(stateGo, stateGoParams);\n } else {\n $scope.errorMessage = result.message;\n }\n });\n } else {\n Restangular.all('CmsArticles').post($scope.cms_article).then(function (result) {\n if (typeof (result.id) != \"undefined\") {\n toastr.success($filter('translate')('cms_articles.created_success'));\n $state.go(stateGo, stateGoParams);\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n }\n\n $scope.checkDelete = function () {\n modalService.confirm({\n title: $filter('translate')('cms_articles.delete'),\n message: $filter('translate')('cms_articles.delete_message') + \" \" + $scope.cms_article.title + \"?\",\n onAccept: function () {\n $scope.cms_article.remove().then(function () {\n toastr.success($filter('translate')('cms_articles.remove_success'));\n $state.go(stateGo, stateGoParams);\n });\n }\n });\n };\n\n }])\n\n ;\n\n","\n\nangular.module(\"cmsArticles\")\n\n .controller(\"CmsArticlesListCtrl\", ['LoginService', '$scope', '$rootScope', '$controller', '$state', '$stateParams', 'Restangular', '$uibModal', 'modalService', '$compile', 'gridService', '$filter', '$translate', '$q', '$log',\n function (LoginService, $scope, $rootScope, $controller, $state, $stateParams, Restangular, $uibModal, modalService, $compile, gridService, $filter, $translate, $q, $log) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"CMS_CATEGORIES_WRITE\");\n $rootScope.title = $filter('translate')('cms_articles.title');\n\n $rootScope.breadcrumb = [\n { title: $filter('translate')('cms_articles.title') }\n ];\n\n $scope.filter = {};\n let filter = false;\n\n $scope.gridArticles = {\n pdfTitle: $filter('translate')('cms_categories.articles'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n enableSorting: true,\n paginationPageSizes: [10, 20, 30],\n paginationPageSize: 10,\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n }, \n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n {\n name: 'icon', displayName: $filter('translate')('cms.icon'), cellTemplate: '
' +\n '' +\n '
', width: 80, enableFiltering: false, enableHiding: false\n },\n {\n name: 'title', displayName: $filter('translate')('cms_article.title'), enableFiltering: true, enableHiding: false, width: 150\n },\n {\n name: 'FK_cms_articles_cms_categories.name', displayName: $filter('translate')('cms_article.category'), enableFiltering: true, enableHiding: false,\n },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('general.edit'), action: 'ui-sref=\"cms_articles.edit({id:row.entity.id, parent_id:row.entity.cms_category_id, standalone: true})\"; ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('general.delete'), action: 'ng-click=\"grid.appScope.deleteArticleDialog(row.entity.id,row.entity.title);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n }\n ],\n getData: function (options) {\n\n var deferred = $q.defer();\n options.full = true;\n\n if (filter) {\n options.title = $scope.filter.title;\n options.category = $scope.filter.category;\n }\n\n Restangular.all('CmsArticles').getList(options).then(function (results) {\n deferred.resolve(results);\n });\n return deferred.promise;\n }\n };\n\n\n $scope.search = function () {\n if (angular.isDefined($scope.gridArticles.loadData)) {\n filter = true;\n $scope.gridArticles.loadData(false);\n }\n }\n\n $scope.deleteArticleDialog = function (id, title) {\n $scope.id = id;\n $scope.name = title;\n modalService.confirm({\n title: $filter('translate')('cms_articles.delete'),\n message: $filter('translate')('cms_articles.delete_message') + \" \" + title + \"?\",\n onAccept: function () {\n Restangular.one('CmsArticles', id).remove().then(function () {\n toastr.success($filter('translate')('cms_articles.remove_success'));\n $scope.gridArticles.loadData(false);\n }, function (response) {\n $log.error(\"Error with status code\", response.status);\n });\n }\n });\n\n };\n\n }])\n\n ;\n\n","import breadcrumbTemplate from 'app/common/breadcrumb/breadcrumb.html';\nimport cmsArticlesListTemplate from './cms_articles-list.html';\nimport cmsArticlesEditTemplate from './cms_articles-edit.html';\n\n\nangular.module(\"cmsArticles\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('cms_articles', {\n url: \"/cms_articles\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: breadcrumbTemplate,\n })\n .state('cms_articles.list', {\n url: \"/list\",\n controller: \"CmsArticlesListCtrl\",\n template: cmsArticlesListTemplate,\n requiredPermission: [\"CMS_CATEGORIES_READ\"]\n })\n .state('cms_articles.edit', {\n url: \"/edit/:id\",\n controller: \"CmsArticlesEditCtrl\",\n template: cmsArticlesEditTemplate,\n params: {\n 'id': \"\",\n 'parent_id': \"\",\n 'standalone': false,\n },\n requiredPermission: [\"CMS_CATEGORIES_READ\"]\n })\n }])\n ;","import IconPicker from '../../scripts/iconpicker-1.5.0.js';\n\nangular.module(\"cmsCategories\")\n\n .controller(\"CmsCategoriesEditCtrl\", ['LoginService', '$scope', '$rootScope', '$controller', '$state', '$stateParams', 'Restangular', '$uibModal', 'modalService', '$compile', 'gridService', '$filter', '$translate', '$q', '$log',\n function (LoginService, $scope, $rootScope, $controller, $state, $stateParams, Restangular, $uibModal, modalService, $compile, gridService, $filter, $translate, $q, $log) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"CMS_CATEGORIES_WRITE\");\n $rootScope.title = $filter('translate')('cms_categories.title');\n $scope.cms_categories = {};\n\n IconPicker.Init({\n // Required: You have to set the path of IconPicker JSON file to \"jsonUrl\" option. e.g. '/content/plugins/IconPicker/dist/iconpicker-1.5.0.json'\n jsonUrl: '/assets/iconpicker-1.5.0.json',\n // Optional: Change the buttons or search placeholder text according to the language.\n searchPlaceholder: 'Search Icon',\n showAllButton: 'Show All',\n cancelButton: 'Cancel',\n noResultsFound: 'No results found.', // v1.5.0 and the next versions\n borderRadius: '20px', // v1.5.0 and the next versions\n });\n\n IconPicker.Run('#GetIconPicker', function () {\n // ng-bind no funciona para asignar el icono porque no detecta el cambio que hacemos con el IconPicker, así que hay que hacerlo a pelo.\n let icon = document.querySelector(\"#IconPreview\").getAttribute(\"class\");\n icon = icon.substring(icon.indexOf('-')+1);\n $scope.cms_categories.icon = icon;\n \n });\n\n\n $scope.gridArticles = {\n pdfTitle: $filter('translate')('cms_categories.articles'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n enableSorting: true,\n paginationPageSizes: [10, 20, 30],\n paginationPageSize: 10,\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n {\n name: 'icon', displayName: $filter('translate')('cms.icon'), cellTemplate: '
' +\n '' +\n '
', width: 80, enableFiltering: false, enableHiding: false\n },\n {\n name: 'title', displayName: $filter('translate')('cms_article.title'), enableFiltering: true, enableHiding: false,\n },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('general.edit'), action: 'ui-sref=\"cms_articles.edit({id:row.entity.id, parent_id:row.entity.cms_category_id})\"; ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('general.delete'), action: 'ng-click=\"grid.appScope.deleteArticleDialog(row.entity.id,row.entity.name);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n }\n ],\n getData: function (options) {\n\n var deferred = $q.defer();\n options.category_id = $scope.cms_categories.id;\n\n Restangular.all('CmsArticles').getList(options).then(function (results) {\n deferred.resolve(results);\n });\n return deferred.promise;\n }\n };\n\n Restangular.all('CmsCategories').getList().then(function (cms_categories) {\n $scope.selectCmsCategories = cms_categories;\n if (!angular.isUndefined($stateParams.id) && $stateParams.id != \"\") {\n $scope.selectCmsCategories = $scope.selectCmsCategories.filter(function (x) {\n return (x.id != $stateParams.id && x.parent_cms_category_id != $stateParams.id);\n })\n }\n\n $log.debug($scope.selectCmsCategories);\n });\n\n if (angular.isUndefined($stateParams.id) || $stateParams.id == \"\") {\n\n $rootScope.breadcrumb = [\n { title: $filter('translate')('cms_categories.title'), url: \"cms_categories.list\" },\n { title: $filter('translate')('cms_categories.add') },\n ];\n } else {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('cms_categories.title'), url: \"cms_categories.list\" },\n { title: $filter('translate')('cms_categories.edit') },\n ];\n\n Restangular.one('CmsCategories', $stateParams.id).get().then(function (results) {\n $scope.cms_categories = results;\n $scope.cms_categories_id = $scope.cms_categories.id;\n });\n }\n\n\n $scope.save = function (frmBudgetGroups) {\n\n if (!angular.isUndefined($scope.cms_categories.id)) {\n $scope.cms_categories.put().then(function (result) {\n if (typeof (result.id) != \"undefined\") {\n toastr.success($filter('translate')('cms_categories.modified_success'));\n } else {\n $scope.errorMessage = result.message;\n }\n });\n } else {\n Restangular.all('CmsCategories').post($scope.cms_categories).then(function (result) {\n if (typeof (result.id) != \"undefined\") {\n toastr.success($filter('translate')('cms_categories.created_success'));\n $scope.cms_categories.id = result.id;\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n }\n\n $scope.checkDelete = function () {\n //Comprobamos si tiene hijos\n let hijos = false;\n $scope.selectCmsCategories.forEach(category => {\n if (category.parent_cms_category_id == $scope.cms_categories.id) { hijos = true };\n\n });\n\n if (hijos) {\n modalService.message({\n title: $filter('translate')('cms_categories.delete_message_children_title'),\n message: $filter('translate')('cms_categories.delete_message_children_error'),\n onAccept: function () { }\n });\n } else {\n modalService.confirm({\n title: $filter('translate')('cms_categories.delete'),\n message: $filter('translate')('cms_categories.delete_message') + \" \" + $scope.cms_categories.name + \"?\",\n onAccept: function () {\n $scope.cms_categories.remove().then(function () {\n toastr.success($filter('translate')('cms_categories.remove_success'));\n $state.go(\"cms_categories.list\");\n });\n }\n });\n }\n };\n\n\n $scope.deleteArticleDialog = function (id, title) {\n $scope.id = id;\n $scope.name = title;\n modalService.confirm({\n title: $filter('translate')('cms_articles.delete'),\n message: $filter('translate')('cms_articles.delete_message') + \" \" + title + \"?\",\n onAccept: function () {\n Restangular.one('CmsArticles', id).remove().then(function () {\n toastr.success($filter('translate')('cms_articles.remove_success'));\n $scope.gridArticles.data =\n $scope.gridArticles.data.filter(function (el) { return el.id != $scope.id; });\n }, function (response) {\n $log.error(\"Error with status code\", response.status);\n });\n }\n });\n\n };\n\n }])\n\n ;\n\n","angular.module(\"cmsCategories\")\n\n .controller(\"CmsCategoriesListCtrl\", ['LoginService', '$rootScope', '$scope', '$http', '$interval', '$q', 'i18nService', 'Restangular', 'uiGridTreeViewConstants', 'gridService', 'treeService', 'modalService', '$uibModal', '$filter', '$translate', '$state', '$log',\n function (LoginService, $rootScope, $scope, $http, $interval, $q, i18nService, Restangular, uiGridTreeViewConstants, gridService, treeService, modalService, $uibModal, $filter, $translate, $state, $log) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"CMS_CATEGORIES_WRITE\");\n\n $rootScope.title = $filter('translate')('cms_categories.title');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('cms_categories.title') }\n ];\n\n $scope.gridOptions = {\n pdfTitle: $filter('translate')('cms_categories.title'), \n exporterMenuCsv: true,\n enableGridMenu: true,\n enableSorting: true,\n expandAllRows: true,\n gridMenuShowHideColumns: false,\n paginationPageSizes: [15, 30, 45],\n paginationPageSize: 15,\n // rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, exporterSuppressExport: true },\n {name: 'icon', displayName: $filter('translate')('cms.icon'), cellTemplate: '
' +\n '' +\n '
', width: 80, enableFiltering: false, enableHiding: false },\n\n { name: 'name', displayName: $filter('translate')('general.name'), enableFiltering: true, enableHiding: false },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('general.edit'), action: 'ui-sref=\"cms_categories.edit({cms_categories_id:row.entity.cms_categories_id,id:row.entity.id})\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('general.delete'), action: 'ng-click=\"grid.appScope.deleteDialog(row.entity.id,row.entity.title);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n\n return Restangular.all('CmsCategories').getList(options).then(function (result) {\n $scope.allCmsCategories = result;\n\n $log.debug($scope.allCmsCategories);\n \n var treeCmsCategories = [];\n var data = treeService.cmsCategoriesTree(result, null, treeCmsCategories);\n data.totalRows = result.totalRows;\n return data\n });\n }\n };\n\n $scope.goToEdit = function (rowEntity) {\n $state.go(\"cms_categories.edit\", { cms_categories_id: rowEntity.cms_categories_id, id: rowEntity.id });\n }\n\n $scope.deleteDialog = function (id, name) {\n $scope.id = id;\n $scope.name = name;\n\n let hijos = false;\n $scope.allCmsCategories.forEach(category => {\n if (category.parent_cms_category_id == id) { hijos = true };\n });\n\n if (hijos) {\n modalService.message({\n title: $filter('translate')('cms_categories.delete_message_children_title'),\n message: $filter('translate')('cms_categories.delete_message_children_error'),\n onAccept: function () { }\n });\n } else {\n modalService.confirm({\n title: $filter('translate')('cms_categories.delete'),\n message: $filter('translate')('cms_categories.delete_message') + \" \" + $scope.name + \"?\",\n onAccept: function () {\n Restangular.one('CmsCategories', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('cms_categories.remove_success'));\n $scope.gridOptions.data = $scope.allCmsCategories =\n $scope.gridOptions.data.filter(function (el) { return el.id != $scope.id; }); \n }, function (response) {\n $log.error(\"Error with status code\", response.status);\n });\n }\n });\n }\n };\n\n }])\n\n ;","import breadcrumbTemplate from '../common/breadcrumb/breadcrumb.html';\nimport cmsCategoriesListTemplate from './cms_categories-list.html';\nimport cmsCategoriesEditTemplate from './cms_categories-edit.html';\n\n\nangular.module(\"cmsCategories\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('cms_categories', {\n url: \"/cms_categories\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: breadcrumbTemplate,\n })\n\n .state('cms_categories.list', {\n url: \"/list\",\n controller: \"CmsCategoriesListCtrl\",\n template: cmsCategoriesListTemplate,\n requiredPermission: [\"CMS_CATEGORIES_READ\"]\n })\n .state('cms_categories.edit', {\n url: \"/edit/:id\",\n controller: \"CmsCategoriesEditCtrl\",\n template: cmsCategoriesEditTemplate,\n requiredPermission: [\"CMS_CATEGORIES_READ\"]\n })\n }])\n ;","import './navigation/navigation';\nimport './calendar/calendar';\nimport './topnavbar/topnavbar';\nimport './push_notifications/pushNotification';\nimport './people_import/people_import';\nimport './breadcrumb/breadcrumb';\nimport './modal/modal';\nimport \"./notifications_templates_mails/notificationsMail\";\nimport './ibox-tools/ibox_tools';\nimport './group_import/group_import'; \nimport \"./otherPages/forbidden\";\n","angular.module(\"breadcrumb\", [])\n\n .controller(\"BreadcrumbCtrl\", function () {\n \n })\n\n\n;","import NewEventModalView from './newEventModal.html';\nimport TaskModalView from './taskModal.html';\nimport NewReservationModalView from './newReservationModal.html';\nimport TemplateModalView from '../../events/templateModal.html';\n\nimport moment from \"moment\";\nimport allLocales from \"fullcalendar/dist/locale-all\";\n\nangular.module(\"calendar\", [])\n\n.controller(\"CalendarCtrl\", ['$state', '$timeout', '$stateParams', 'generateDocumentService', 'Restangular', '$scope', 'LoginService', '$rootScope', '$controller', 'uiCalendarConfig', '$http', '$filter', '$compile', 'i18nService', 'modalService', '$uibModal', '$log',\n function ($state, $timeout, $stateParams, generateDocumentService, Restangular, $scope, LoginService, $rootScope, $controller, uiCalendarConfig, $http, $filter, $compile, i18nService, modalService, $uibModal, $log) {\n \n $scope.optionsUsers = {\n user_id: parseInt(localStorage.getItem(\"userId\")),\n start: null,\n end: null,\n location_id: null,\n event_id: null\n };\n\n var currentState = $state.current.name; \n $scope.allowChangeUsersDashboard = LoginService.permissionExist(\"USER_COMBO_CALENDAR\") && currentState != \"locations.edit\";\n $scope.allorPrintSchedule = LoginService.permissionExist(\"EVENTS_PROGRAM_ACT_USER_PRINT\");\n\n Restangular.one('Companies', $rootScope.company_id).get().then(function (results) {\n $scope.base_url_api = results.base_url;\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n\n if ($scope.allowChangeUsersDashboard) {\n Restangular.all('Users').getList().then(function (results) {\n $scope.selectUsers = results;\n });\n }\n\n /*\n * Datepicker pequeño\n */\n $scope.dt = new Date();\n\n $scope.calendar = null;\n\n $scope.today = function () {\n $scope.dt = new Date();\n };\n\n $scope.inlineOptions = { \n showWeeks: false, \n startingDay: 1,\n maxMode: 'year',\n locale: 'es'\n }; \n\n $scope.toggleMin = function () {\n $scope.inlineOptions.minDate = $scope.inlineOptions.minDate ? null : new Date();\n $scope.dateOptions.minDate = $scope.inlineOptions.minDate;\n };\n \n $scope.selectDate = function (dt) {\n $scope.dt = dt;\n var calendar = uiCalendarConfig.calendars['myCalendar'];\n calendar.fullCalendar('gotoDate', dt);\n calendar.fullCalendar('select', dt);\n\n };\n\n $scope.selectUser = function () {\n var calendar = uiCalendarConfig.calendars['myCalendar'];\n calendar.fullCalendar('refetchEvents');\n };\n\n /*\n * Calendario\n */\n $scope.events = [];\n $scope.checkUserTasks = false;\n $scope.checkOtherTasks = false;\n $scope.checkEventTasks = false;\n $scope.checkEvents = false;\n $scope.checkUserEvents = false;\n $scope.checkOtherEvents = false;\n $scope.checkEventProgramActs = false;\n $scope.checkBirthdays = false;\n $scope.checkActs = false;\n $scope.checkLocationPending = false;\n $scope.checkLocationConfirmed = false;\n $scope.checkLocationCancelled = false;\n $scope.checkLocationRejected = false;\n $scope.checkLocationId = null;\n $scope.checkLocationsChecked = [];\n\n $scope.loadedSections = 0;\n $scope.loadedSectionsTotal = 0;\n\n $scope.locations = [];\n\n //Guardamos los checks en localstorage\n $scope.calendarOptions = function (options, event_id, location_id, nameCalendar) {\n $scope.optionsUsers.location_id = location_id;\n $scope.nameCalendar = nameCalendar;\n $scope.calendarGroups = options;\n $scope.optionsUsers.event_id = event_id;\n $scope.loadedSectionsTotal = options.length;\n\n if ($scope.calendarGroups.indexOf('USER-TASKS') >= 0) {\n if (localStorage.getItem(\"checkUserTasks\") != null) {\n $scope.checkUserTasks = JSON.parse(localStorage.getItem(\"checkUserTasks\"));\n } else {\n $scope.checkUserTasks = true;\n localStorage.setItem(\"checkUserTasks\", \"true\");\n }\n }\n\n if ($scope.calendarGroups.indexOf('OTHER-TASKS') >= 0) {\n if (localStorage.getItem(\"checkOtherTasks\") != null) {\n $scope.checkOtherTasks = JSON.parse(localStorage.getItem(\"checkOtherTasks\"));\n } else {\n $scope.checkOtherTasks = true;\n localStorage.setItem(\"checkOtherTasks\", \"true\");\n }\n }\n\n if ($scope.calendarGroups.indexOf('EVENT-TASKS') >= 0) {\n if (localStorage.getItem(\"checkEventTasks\") != null) {\n $scope.checkEventTasks = JSON.parse(localStorage.getItem(\"checkEventTasks\"));\n } else {\n $scope.checkEventTasks = true;\n localStorage.setItem(\"checkEventTasks\", \"true\");\n }\n }\n\n if ($scope.calendarGroups.indexOf('EVENTS') >= 0) {\n if (localStorage.getItem(\"checkEvents\") != null) {\n $scope.checkEvents = JSON.parse(localStorage.getItem(\"checkEvents\"));\n } else {\n $scope.checkEvents = true;\n localStorage.setItem(\"checkEvents\", \"true\");\n }\n }\n\n if ($scope.calendarGroups.indexOf('USER-EVENTS') >= 0) {\n if (localStorage.getItem(\"checkUserEvents\") != null) {\n $scope.checkUserEvents = JSON.parse(localStorage.getItem(\"checkUserEvents\"));\n } else {\n $scope.checkUserEvents = true;\n localStorage.setItem(\"checkUserEvents\", \"true\");\n }\n }\n\n if ($scope.calendarGroups.indexOf('OTHER-EVENTS') >= 0) {\n if (localStorage.getItem(\"checkOtherEvents\") != null) {\n $scope.checkOtherEvents = JSON.parse(localStorage.getItem(\"checkOtherEvents\"));\n } else {\n $scope.checkOtherEvents = true;\n localStorage.setItem(\"checkOtherEvents\", \"true\");\n }\n }\n\n if ($scope.calendarGroups.indexOf('EVENT-PROGRAM-ACTS') >= 0) {\n if (localStorage.getItem(\"checkEventProgramActs\") != null) {\n $scope.checkEventProgramActs = JSON.parse(localStorage.getItem(\"checkEventProgramActs\"));\n } else {\n $scope.checkEventProgramActs = true;\n localStorage.setItem(\"checkEventProgramActs\", \"true\");\n }\n }\n\n if ($scope.calendarGroups.indexOf('BIRTHDAYS') >= 0) {\n if (localStorage.getItem(\"checkBirthdays\") != null) {\n $scope.checkBirthdays = JSON.parse(localStorage.getItem(\"checkBirthdays\"));\n } else {\n $scope.checkBirthdays = false;\n localStorage.setItem(\"checkBirthdays\", \"false\");\n }\n }\n\n if ($scope.calendarGroups.indexOf('EVENT-PROGRAM-ACTS-USERS') >= 0) {\n if (localStorage.getItem(\"checkActs\") != null) {\n $scope.checkActs = JSON.parse(localStorage.getItem(\"checkActs\"));\n } else {\n $scope.checkActs = false;\n localStorage.setItem(\"checkActs\", \"false\");\n }\n }\n\n if ($scope.calendarGroups.indexOf('LOCATION_PENDING') >= 0) {\n if (localStorage.getItem(\"checkLocationPending\") != null) {\n $scope.checkLocationPending = JSON.parse(localStorage.getItem(\"checkLocationPending\"));\n } else {\n $scope.checkLocationPending = true;\n localStorage.setItem(\"checkLocationPending\", \"true\");\n }\n }\n\n if ($scope.calendarGroups.indexOf('LOCATION_CONFIRMED') >= 0) {\n if (localStorage.getItem(\"checkLocationConfirmed\") != null) {\n $scope.checkLocationConfirmed = JSON.parse(localStorage.getItem(\"checkLocationConfirmed\"));\n } else {\n $scope.checkLocationConfirmed = true;\n localStorage.setItem(\"checkLocationConfirmed\", \"true\");\n }\n }\n\n if ($scope.calendarGroups.indexOf('LOCATION_REJECTED') >= 0) {\n if (localStorage.getItem(\"checkLocationRejected\") != null) {\n $scope.checkLocationRejected = JSON.parse(localStorage.getItem(\"checkLocationRejected\"));\n } else {\n $scope.checkLocationRejected = true;\n localStorage.setItem(\"checkLocationRejected\", \"true\");\n }\n }\n\n if ($scope.calendarGroups.indexOf('LOCATION_CANCELLED') >= 0) {\n if (localStorage.getItem(\"checkLocationCancelled\") != null) {\n $scope.checkLocationCancelled = JSON.parse(localStorage.getItem(\"checkLocationCancelled\"));\n } else {\n $scope.checkLocationCancelled = true;\n localStorage.setItem(\"checkLocationCancelled\", \"true\");\n }\n }\n\n if ($scope.calendarGroups.indexOf('LOCATIONS') >= 0) {\n Restangular.all('Locations').getList(options).then(function (result) {\n $scope.locations = result;\n var cont = 1;\n angular.forEach($scope.locations, function (row) {\n let checked = true;\n if (localStorage.getItem(\"checkLocationsChecked\" + row.id) != null) checked = JSON.parse(localStorage.getItem(\"checkLocationsChecked\" + row.id));\n $scope.checkLocationsChecked[row.id] = { checked: checked };\n /*if (cont == $scope.locations.length) {\n $scope.locationsCheked(null, $scope.checkLocationsChecked);\n }\n cont++;*/\n });\n $scope.loadedSectionsTotal = $scope.locations.length;\n //$scope.refetchEvents();\n });\n \n }\n };\n\n $scope.printPage = function () {\n window.print();\n };\n\n\n $scope.getCalendarEvents = function (view) {\n $scope.events = [];\n $scope.loadedSections = 0;\n\n //obtenemos referencia al calendario\n var calendar = view.calendar;\n let start = view.start;\n let end = view.end;\n\n let options: any = {\n start: start.format('YYYY-MM-DD'),\n end: end.format('YYYY-MM-DD'),\n userId: $scope.optionsUsers.user_id\n };\n //guardamos el start y end por si cambian el combo\n $scope.optionsUsers.start = start;\n $scope.optionsUsers.end = end;\n\n \n if ($scope.calendarGroups.indexOf('USER-TASKS') >= 0) { \n\n if ($scope.checkUserTasks) {\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + '/CalendarsEvents/UserTasks',\n params: options\n }).then(function (results, status, headers, config) {\n angular.forEach(results.data.rows, function (calendarRange) {\n // $log.debug(calendarRange);\n\n $scope.events.push({\n task_id: calendarRange.task_id,\n event_id: calendarRange.event_id,\n title: calendarRange.title,\n start: moment.utc(calendarRange.date_from).toDate(),\n end: moment.utc(calendarRange.date_to).toDate(),\n allDay: calendarRange.all_day ? true : false,\n backgroundColor: \"#f7a54a\",\n textColor: \"white\",\n borderColor: \"#f7a54a\",\n eventName: (calendarRange.type == \"UserTasks\" ? calendarRange.event_name : \"\"),\n eventType: \"userTasks\",\n entityType: (calendarRange.type == \"UserTasksNew\" ? calendarRange.entity_type : \"\"),\n entityTypeId: (calendarRange.type == \"UserTasksNew\" ? calendarRange.entity_type_id : \"\")\n });\n\n }); \n calendar.refetchEvents();\n });\n } else {\n calendar.refetchEvents();\n }\n }\n\n if ($scope.calendarGroups.indexOf('OTHER-TASKS') >= 0) {\n\n if ($scope.checkOtherTasks) {\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + '/CalendarsEvents/OtherTasks',\n params: options\n }).then(function (results, status, headers, config) {\n angular.forEach(results.data.rows, function (calendarRange) {\n\n $scope.events.push({\n task_id: calendarRange.task_id,\n event_id: calendarRange.event_id,\n title: calendarRange.title,\n //start: new Date(moment.utc(calendarRange.date_from)),\n //end: new Date(moment.utc(calendarRange.date_to)),\n start: new Date(calendarRange.date_from),\n end: calendarRange.all_day ? moment(new Date(calendarRange.date_to).setDate(new Date(calendarRange.date_to).getDate() + 1)) : new Date(calendarRange.date_to),\n allDay: calendarRange.all_day ? true : false,\n backgroundColor: \"#cc99FF\",\n textColor: \"white\",\n borderColor: \"#cc99FF\",\n eventType: \"otherTasks\",\n eventName: calendarRange.event_name\n });\n });\n calendar.refetchEvents();\n });\n } else {\n calendar.refetchEvents();\n }\n }\n\n if ($scope.calendarGroups.indexOf('EVENT-TASKS') >= 0) {\n if ($scope.checkEventTasks) {\n options.event_id = $scope.optionsUsers.event_id;\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + '/CalendarsEvents/EventTasks',\n params: options\n }).then(function (results, status, headers, config) {\n angular.forEach(results.data.rows, function (calendarRange) {\n $scope.events.push({\n task_id: calendarRange.task_id,\n event_id: calendarRange.event_id,\n title: calendarRange.title,\n //start: new Date(moment.utc(calendarRange.date_from)),\n //end: new Date(moment.utc(calendarRange.date_to)),\n start: new Date(calendarRange.date_from),\n end: calendarRange.all_day ? moment(new Date(calendarRange.date_to).setDate(new Date(calendarRange.date_to).getDate() + 1)) : new Date(calendarRange.date_to),\n allDay: calendarRange.all_day ? true : false,\n backgroundColor: \"#f7a54a\",\n textColor: \"white\",\n borderColor: \"#f7a54a\",\n eventType: \"eventTasks\",\n eventName: calendarRange.event_name\n });\n }); \n calendar.refetchEvents();\n });\n } else {\n calendar.refetchEvents();\n }\n }\n\n if ($scope.calendarGroups.indexOf('USER-EVENTS') >= 0) {\n if ($scope.checkUserEvents) { \n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + '/CalendarsEvents/UserEvents',\n params: options\n }).then(function (results, status, headers, config) {\n angular.forEach(results.data.rows, function (calendarRange) {\n $scope.events.push({\n task_id: null,\n event_id: calendarRange.event_id,\n title: calendarRange.title,\n start: moment.utc(calendarRange.date_from).toDate(),\n end: moment.utc(calendarRange.date_to).toDate(),\n allDay: calendarRange.all_day ? true : false,\n backgroundColor: \"#ff3399\",\n textColor: \"white\",\n borderColor: \"#ff3399\",\n eventName: (typeof (calendarRange.title) !== \"undefined\" ? calendarRange.title : \"\"),\n eventType: \"userEvents\",\n events_guests: calendarRange.events_guests\n });\n });\n calendar.refetchEvents();\n });\n } else {\n calendar.refetchEvents();\n }\n }\n\n if ($scope.calendarGroups.indexOf('EVENTS') >= 0) {\n\n if ($scope.checkEvents) {\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + '/CalendarsEvents/Events',\n params: options\n }).then(function (results, status, headers, config) {\n angular.forEach(results.data.rows, function (calendarRange) {\n $scope.events.push({\n task_id: null,\n event_id: calendarRange.event_id,\n title: calendarRange.title,\n //start: new Date(moment.utc(calendarRange.date_from)),\n //end: new Date(moment.utc(calendarRange.date_to)),\n start: new Date(calendarRange.date_from),\n end: calendarRange.all_day ? moment(new Date(calendarRange.date_to).setDate(new Date(calendarRange.date_to).getDate() + 1)) : new Date(calendarRange.date_to),\n allDay: calendarRange.all_day ? true : false,\n backgroundColor: \"#460505\",\n textColor: \"white\",\n borderColor: \"#460505\",\n eventName: (typeof (calendarRange.title) !== \"undefined\" ? calendarRange.title : \"\"),\n eventType: \"events\"\n }); \n });\n calendar.refetchEvents();\n });\n } else {\n calendar.refetchEvents();\n }\n }\n\n if ($scope.calendarGroups.indexOf('OTHER-EVENTS') >= 0) {\n if ($scope.checkOtherEvents) {\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + '/CalendarsEvents/OtherEvents',\n params: options\n }).then(function (results, status, headers, config) {\n angular.forEach(results.data.rows, function (calendarRange) {\n $scope.events.push({\n task_id: null,\n event_id: calendarRange.event_id,\n title: calendarRange.title,\n start: new Date(calendarRange.date_from),\n end: calendarRange.all_day ? moment(new Date(calendarRange.date_to).setDate(new Date(calendarRange.date_to).getDate() + 1)) : new Date(calendarRange.date_to) ,\n allDay: calendarRange.all_day ? true : false,\n backgroundColor: \"#23c6c8\",\n textColor: \"white\",\n borderColor: \"#23c6c8\",\n eventType: \"otherEvents\",\n eventName: (typeof (calendarRange.title) !== \"undefined\" ? calendarRange.title : \"\"),\n events_notes: calendarRange.events_notes,\n events_guests: calendarRange.events_guests\n });\n \n });\n calendar.refetchEvents();\n });\n } else {\n calendar.refetchEvents();\n }\n }\n\n if ($scope.calendarGroups.indexOf('EVENT-PROGRAM-ACTS') >= 0) {\n if ($scope.checkEventProgramActs) {\n\n options.event_id = $scope.optionsUsers.event_id;\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + '/CalendarsEvents/EventProgramActs',\n params: options\n }).then(function (results, status, headers, config) { \n\n angular.forEach(results.data.rows, function (calendarRange) {\n\n var strTitle = $(\"
\" + calendarRange.title + \"
\").text();\n\n $scope.events.push({\n task_id: calendarRange.task_id,\n event_id: calendarRange.event_id,\n program_act_id: calendarRange.program_act_id,\n title: strTitle,\n //start: new Date(moment.utc(calendarRange.date_from)),\n //end: new Date(moment.utc(calendarRange.date_to)),\n start: new Date(calendarRange.date_from),\n end: calendarRange.all_day ? moment(new Date(calendarRange.date_to).setDate(new Date(calendarRange.date_to).getDate() + 1)) : new Date(calendarRange.date_to),\n allDay: calendarRange.all_day ? true : false,\n backgroundColor: \"#23c6c8\",\n textColor: \"white\",\n borderColor: \"#23c6c8\",\n eventType: \"eventProgramAct\",\n eventName: calendarRange.event_name\n\n });\n\n });\n\n calendar.refetchEvents();\n\n });\n } else {\n\n calendar.refetchEvents();\n\n }\n }\n\n if ($scope.calendarGroups.indexOf('BIRTHDAYS') >= 0) {\n if ($scope.checkBirthdays) {\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + '/CalendarsEvents/Birthdays',\n params: options\n }).then(function (results, status, headers, config) { \n angular.forEach(results.data.rows, function (calendarRange) {\n var date = moment.utc(new Date(calendarRange.date_from)).toDate();\n if ((start._d.getMonth() <= end._d.getMonth()) || (start._d.getMonth() > end._d.getMonth() && date.getMonth() >= start._d.getMonth())) {\n date.setFullYear(start._d.getFullYear());\n } else\n date.setFullYear(end._d.getFullYear());\n\n var strTitle = $(\"
\" + calendarRange.title + \"
\").text();\n $scope.events.push({\n title: strTitle,\n start: date,\n allDay: calendarRange.all_day ? true : false,\n backgroundColor: \"#0D2B7E\",\n textColor: \"white\",\n borderColor: \"#0D2B7E\",\n eventType: \"birthday\",\n person_id: calendarRange.person_id,\n person_type: calendarRange.person_type,\n icon: \"fa fa-birthday-cake\",\n });\n\n });\n calendar.refetchEvents();\n });\n } else {\n calendar.refetchEvents();\n }\n }\n\n if ($scope.calendarGroups.indexOf('EVENT-PROGRAM-ACTS-USERS') >= 0) {\n if ($scope.checkActs) {\n //options.user_id = localStorage.getItem(\"userId\");\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + '/CalendarsEvents/EventProgramActsUser',\n params: options\n }).then(function (results, status, headers, config) {\n angular.forEach(results.data.rows, function (calendarRange) {\n\n var date = moment.utc(new Date(calendarRange.date_from)).toDate();\n if ((start._d.getMonth() <= end._d.getMonth()) || (start._d.getMonth() > end._d.getMonth() && date.getMonth() >= start._d.getMonth())) {\n date.setFullYear(start._d.getFullYear());\n } else\n date.setFullYear(end._d.getFullYear());\n var strTitle = $(\"
\" + calendarRange.title + \"
\").text();\n $scope.events.push({\n start: moment.utc(calendarRange.date_from).toDate(),\n end: moment.utc(calendarRange.date_to).toDate(),\n title: strTitle,\n allDay: calendarRange.all_day ? true : false,\n backgroundColor: \"#0D2B7E\",\n textColor: \"white\",\n borderColor: \"#0D2B7E\",\n eventType: \"acts\",\n person_id: calendarRange.person_id,\n person_type: calendarRange.person_type,\n eventName: calendarRange.event_name,\n icon: \"fa fa-clipboard-list\",\n });\n\n })\n calendar.refetchEvents();\n });\n } else {\n calendar.refetchEvents();\n }\n }\n\n if ($scope.calendarGroups.indexOf('LOCATION_PENDING') >= 0) {\n if ($scope.checkLocationPending) {\n var op = angular.copy(options);\n op.status = \"pending\";\n op.location_id = $scope.optionsUsers.location_id;\n op.dateFrom1 = op.start;\n op.dateTo2 = op.end;\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + '/LocationsReservations',\n params: op\n }).then(function (results, status, headers, config) {\n angular.forEach(results.data.rows, function (calendarRange) {\n var date = moment.utc(new Date(calendarRange.date_from)).toDate();\n if ((start._d.getMonth() <= end._d.getMonth()) || (start._d.getMonth() > end._d.getMonth() && date.getMonth() >= start._d.getMonth())) {\n date.setFullYear(start._d.getFullYear());\n } else\n date.setFullYear(end._d.getFullYear());\n var strTitle = $(\"
\" + calendarRange.notes + \"
\").text();\n $scope.events.push({\n id: calendarRange.id,\n end: moment.utc(calendarRange.date_to).toDate(),\n title: strTitle,\n start: date,\n allDay: calendarRange.all_day ? true : false,\n backgroundColor: \"#f8ac59\",\n textColor: \"white\",\n borderColor: \"#f8ac59\",\n eventType: \"locations\",\n person_id: calendarRange.person_id,\n person_type: calendarRange.person_type,\n icon: \"fa fa-clipboard-list\",\n });\n });\n calendar.refetchEvents();\n });\n calendar.refetchEvents();\n }\n }\n\n if ($scope.calendarGroups.indexOf('LOCATION_CONFIRMED') >= 0) {\n if ($scope.checkLocationConfirmed) {\n options.status = \"confirmed\";\n options.location_id = $scope.optionsUsers.location_id;\n options.dateFrom1 = options.start;\n options.dateTo2 = options.end;\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + '/LocationsReservations',\n params: options\n }).then(function (results, status, headers, config) {\n angular.forEach(results.data.rows, function (calendarRange) {\n var date = moment.utc(new Date(calendarRange.date_from)).toDate();\n if ((start._d.getMonth() <= end._d.getMonth()) || (start._d.getMonth() > end._d.getMonth() && date.getMonth() >= start._d.getMonth())) {\n date.setFullYear(start._d.getFullYear());\n } else\n date.setFullYear(end._d.getFullYear());\n var strTitle = $(\"
\" + calendarRange.notes + \"
\").text();\n $scope.events.push({\n id: calendarRange.id,\n end: moment.utc(calendarRange.date_to).toDate(),\n title: strTitle,\n start: date,\n allDay: calendarRange.all_day ? true : false,\n backgroundColor: \"#1ab394\",\n textColor: \"white\",\n borderColor: \"#1ab394\",\n eventType: \"locations\",\n person_id: calendarRange.person_id,\n person_type: calendarRange.person_type,\n icon: \"fa fa-clipboard-list\",\n });\n })\n calendar.refetchEvents();\n });\n } else {\n calendar.refetchEvents();\n }\n }\n\n if ($scope.calendarGroups.indexOf('LOCATION_REJECTED') >= 0) {\n if ($scope.checkLocationRejected) {\n var op2 = angular.copy(options);\n op2.status = \"rejected\";\n op2.location_id = $scope.optionsUsers.location_id;\n op2.dateFrom1 = op.start;\n op2.dateTo2 = op.end;\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + '/LocationsReservations',\n params: op2\n }).then(function (results, status, headers, config) {\n angular.forEach(results.data.rows, function (calendarRange) {\n let date = moment.utc(new Date(calendarRange.date_from)).toDate();\n if ((start._d.getMonth() <= end._d.getMonth()) || (start._d.getMonth() > end._d.getMonth() && date.getMonth() >= start._d.getMonth())) {\n date.setFullYear(start._d.getFullYear());\n } else\n date.setFullYear(end._d.getFullYear());\n let strTitle = $(\"
\" + calendarRange.notes + \"
\").text();\n $scope.events.push({\n id: calendarRange.id,\n end: moment.utc(calendarRange.date_to).toDate(),\n title: strTitle,\n start: date,\n allDay: calendarRange.all_day ? true : false,\n backgroundColor: \"#ed5565\",\n textColor: \"white\",\n borderColor: \"#ed5565\",\n eventType: \"locations\",\n person_id: calendarRange.person_id,\n person_type: calendarRange.person_type,\n icon: \"fa fa-clipboard-list\",\n });\n });\n calendar.refetchEvents();\n });\n } else {\n calendar.refetchEvents();\n }\n }\n\n if ($scope.calendarGroups.indexOf('LOCATION_CANCELLED') >= 0) {\n if ($scope.checkLocationRejected) {\n var op3 = angular.copy(options);\n op3.status = \"cancelled\";\n op3.location_id = $scope.optionsUsers.location_id;\n op3.dateFrom1 = op.start;\n op3.dateTo2 = op.end;\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + '/LocationsReservations',\n params: op3\n }).then(function (results, status, headers, config) {\n angular.forEach(results.data.rows, function (calendarRange) {\n var date = moment.utc(new Date(calendarRange.date_from)).toDate();\n if ((start._d.getMonth() <= end._d.getMonth()) || (start._d.getMonth() > end._d.getMonth() && date.getMonth() >= start._d.getMonth())) {\n date.setFullYear(start._d.getFullYear());\n } else\n date.setFullYear(end._d.getFullYear());\n var strTitle = $(\"
\" + calendarRange.notes + \"
\").text();\n $scope.events.push({\n id: calendarRange.id,\n start: moment.utc(calendarRange.date_from).toDate(),\n end: moment.utc(calendarRange.date_to).toDate(),\n title: strTitle,\n allDay: calendarRange.all_day ? true : false,\n backgroundColor: \"#ed5565\",\n textColor: \"white\",\n borderColor: \"#ed5565\",\n eventType: \"locations\",\n person_id: calendarRange.person_id,\n person_type: calendarRange.person_type,\n icon: \"fa fa-clipboard-list\",\n });\n })\n calendar.refetchEvents();\n });\n } else {\n calendar.refetchEvents();\n }\n }\n\n if ($scope.calendarGroups.indexOf('LOCATIONS') >= 0) {\n\n Restangular.all('Locations').getList(options).then(function (result) {\n $scope.locations = result;\n angular.forEach($scope.checkLocationsChecked, function (row,index) { \n if (row.checked) {\n if (index != null) {\n var op2 = angular.copy(options);\n op2.location_group_id = index;\n op2.dateFrom1 = op2.start;\n op2.dateTo2 = op2.end;\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + '/LocationsReservations',\n params: op2\n }).then(function (results, status, headers, config) {\n angular.forEach(results.data.rows, function (calendarRange) {\n var date = moment.utc(calendarRange.date_from).toDate();\n /*if ((start._d.getMonth() <= end._d.getMonth()) || (start._d.getMonth() > end._d.getMonth() && date.getMonth() >= start._d.getMonth())) {\n date.setFullYear(start._d.getFullYear());\n } else {\n date.setFullYear(end._d.getFullYear());\n }*/\n var strTitle = $(\"
\" + calendarRange.name + \"
\").text();\n\n $scope.events.push({\n id: calendarRange.id,\n end: moment.utc(calendarRange.date_to).toDate(),\n title: strTitle,\n start: date,\n allDay: calendarRange.all_day ? true : false,\n backgroundColor: calendarRange.FK_locations_reservations_locations.color,\n textColor: \"white\",\n borderColor: calendarRange.FK_locations_reservations_locations.color,\n eventType: \"locations\",\n reserved_by: calendarRange.reserved_by,\n requested_by: calendarRange.FK_locations_reservations_requested_by != null ? calendarRange.FK_locations_reservations_requested_by.name : null,\n total_guests: calendarRange.total_guests,\n icon: \"fa fa-clipboard-list\",\n });\n });\n calendar.refetchEvents();\n });\n } else {\n calendar.refetchEvents();\n }\n } else {\n calendar.refetchEvents();\n }\n });\n });\n }\n\n };\n\n //guardamos estado de check y refrescamos eventos\n $scope.saveCheckAndRefesh = function(checkName, checkValue){\n localStorage.setItem(checkName, checkValue);\n setTimeout(function(){\n $scope[checkName] = checkValue;\n var view = $(\"#calendar\").fullCalendar(\"getView\");\n $scope.getCalendarEvents(view);\n });\n }\n\n $scope.refetchEvents = function () {\n $(\"#calendar\").fullCalendar('refetchEvents');\n };\n\n $scope.newElement = function (date) {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: NewEventModalView,\n size: \"sm\",\n controller: \"NewEventModalCtrl\",\n resolve: {\n date: function () {\n return date;\n }\n }\n });\n //Response del modal\n $modalInstance.result.then(function () {\n $scope.refetchEvents(); \n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n if (!$scope.$$phase) $scope.$apply();\n });\n\n };\n \n let language = \"ES\";\n\n $scope.uiConfig = {\n calendar: { \n height: 700,\n editable: false,\n firstDay: 1,\n locales: allLocales,\n locale: language.toLowerCase(),\n selectable: true,\n scrollTime: \"08:00:00\",\n defaultView: (currentState === \"locations.edit\" ? \"agendaWeek\" : \"month\"),\n header: {\n left: 'month,agendaWeek,agendaDay,listWeek',\n center: 'title',\n right: 'today prev,next'\n },\n events: function (start, end, timezone, callback) {\n $(\"#calendar\").fullCalendar('removeEvents');\n callback($scope.events);\n },\n eventDurationEditable: false, \n select: function (startDate, endDate) {\n if (currentState === \"locations.edit\") $scope.newLocationReservation(null, startDate.format('YYYY-MM-DD HH:mm'), endDate.format('YYYY-MM-DD HH:mm'));\n },\n eventLimit: true, // for all non-agenda views\n views: {\n month: {\n eventLimit: 3 // adjust to 6 only for agendaWeek/agendaDay\n }\n },\n dayClick: function (date, jsEvent, view, resourceObj) {\n if (currentState !== \"locations.edit\") $scope.newElement(new Date(new Date(date).setHours(0, 0, 0, 0)));\n },\n eventRender: function (calEvent, element) {\n\n var content = \"\";\n if (angular.isDefined(calEvent.event_id) && calEvent.event_id != null && calEvent.event_id != \"null\") {\n content += '' + $filter('translate')('calendars.event') + ': ' + calEvent.eventName;\n }\n if (angular.isDefined(calEvent.entityType) && calEvent.entityType != \"\") {\n let entityTranslate = \"\";\n if (calEvent.entityType == \"general\") {\n entityTranslate = $filter('translate')('entity_types.general');\n } else if (calEvent.entityType == \"correspondence\") {\n entityTranslate = $filter('translate')('correspondence.title');\n }\n content += '' + $filter('translate')('calendars.entityType') + ': ' + entityTranslate;\n }\n if (calEvent.eventType === \"birthday\") {\n content += '
' + $filter('translate')('events.programs_acts.date') + ': ';\n if (calEvent.start != null) content += calEvent.start.format(\"DD/MM/YYYY\") + \" \";\n if (!calEvent.allDay) content += calEvent.start.format(\"HH:mm\");\n content += '
';\n content += '
' + $filter('translate')('calendars.see_profile') + '
';\n if (calEvent.icon) {\n element.find(\".fc-title\").prepend(\" \");\n }\n } else {\n content += '
' + $filter('translate')('calendars.from') + ': ';\n if (calEvent.start !== null) content += calEvent.start.format(\"DD/MM/YYYY\") + \" \";\n if (!calEvent.allDay) content += calEvent.start.format(\"HH:mm\");\n content += '
';\n content += '' + $filter('translate')('calendars.to') + \": \";\n if (calEvent.end !== null) {\n //formateamos bien la información en el caso de que sea allDay\n if (calEvent.allDay) {\n var dateFormatedLessOne = moment(new Date(calEvent.end).setDate(new Date(calEvent.end).getDate() - 1));\n content += dateFormatedLessOne.format(\"DD/MM/YYYY\") + \" \";\n } else {\n content += calEvent.end.format(\"DD/MM/YYYY\") + \" \";\n }\n \n } else {\n content += calEvent.start.format(\"DD/MM/YYYY\") + \" \";\n }\n if (typeof (calEvent.events_guests) == \"undefined\" || calEvent.events_guests == null) calEvent.events_guests = 0;\n if (calEvent.end !== null && !calEvent.allDay) content += calEvent.end.format(\"HH:mm\");\n content += '
';\n if (calEvent.eventType === \"UserTasks\" || calEvent.eventType == \"EventTasks\" || calEvent.eventType == \"OtherTasks\") {\n $log.debug(calEvent);\n content += '
' + $filter('translate')('calendars.seeTask') + '';\n if (calEvent.event_id) content += ' ' + $filter('translate')('calendars.seeEvent') + ''; \n content += '
';\n }\n if (calEvent.eventType === \"UserTasksNew\") {\n content += '
' + $filter('translate')('calendars.seeTask') + '';\n }\n\n if (calEvent.eventType === \"Events\" || calEvent.eventType == \"otherEvents\" || calEvent.eventType == \"userEvents\") {\n let notes = \"\";\n if (calEvent.events_notes != null) notes = calEvent.events_notes.replace(\"\\n\", \"
\");\n content += '
' + (calEvent.events_notes != null ? notes + '
' : \"\") + $filter('translate')('calendars.num_guests') + ': ' + calEvent.events_guests + '

' + $filter('translate')('calendars.seeEvent') + '
';\n }\n //si lo descomento, falla porque no inyecta event\n if (calEvent.eventType === \"eventProgramAct\") content += '
' + $filter('translate')('calendars.seeProgramAct') + '
';\n if (calEvent.eventType === \"locations\") {\n content += '
' + $filter('translate')('locations_reservations.reserved_by') + ': ' + (calEvent.reserved_by != null ? calEvent.reserved_by: '');\n content += '
' + $filter('translate')('locations_reservations.requested_by') + ': ' + (calEvent.requested_by != null?calEvent.requested_by: '');\n content += '
' + $filter('translate')('calendars.num_guests') + ': ' + calEvent.total_guests + '
';\n content += '
' + $filter('translate')('calendars.seeFullLocationReservation') + '
' + $filter('translate')('calendars.seeLocationReservation') + '
';\n }\n } \n element.find('.fc-event-dot').css({ 'border': '1px solid ' + calEvent.borderColor }); //borde enlos puntos de la lista para que al imprimir se vea bien.\n var contentCompiled = $compile(content)($scope);\n\n //@ts-ignore\n $(element).popover({\n html: true,\n title: calEvent.title.replace('>', '').replace('>', ''),\n content: contentCompiled,\n placement: 'top',\n container: '#calendar',\n trigger: \"click\"\n });\n \n\n }, \n viewRender: function (view, element) {\n //Actualizamos las opciones de inicio y fin para que sólo pinte el intervalo lo que estamos visualizando\n $scope.optionsUsers.start = view.start;\n $scope.optionsUsers.end = view.end;\n setTimeout(function(){\n $scope.getCalendarEvents(view);\n }, 300);\n }\n }\n };\n\n $scope.addTask = function (id, entity_type, entity_type_id) {\n\n let $modalInstance = $uibModal.open({\n animation: true,\n template: TaskModalView,\n controller: \"TaskModalCtrl\",\n size: 'lg',\n resolve: {\n task_id: function () {\n return id;\n },\n entity_type: function () {\n return entity_type;\n },\n entity_type_id: function () {\n return entity_type_id;\n },\n type: function () {\n return \"task\";\n }\n }\n\n });\n\n //Retorno de los datos desde el modal.\n $modalInstance.result.then(function (resultModal) { \n if (typeof $scope.refetchEvents == 'function') $scope.refetchEvents();\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n // $scope.identity = {};\n });\n\n };\n\n\n $scope.printDialog = function (code, type_document, type_result, id) {\n if (!angular.isDefined(type_document)) type_document = \"pdf\";\n if (!angular.isDefined(type_result)) type_result = \"list\";\n if (!angular.isDefined(id)) id = \"\";\n var event_id = null;\n\n var codes = \"\";\n if ($scope.checkUserTasks) codes += (codes !== \"\" ? \",\" + \"USER-TASKS\" : \"USER-TASKS\");\n if ($scope.checkOtherTasks) codes += (codes !== \"\" ? \",\" + \"OTHER-TASKS\" : \"OTHER-TASKS\");\n if ($scope.checkEventTasks) codes += (codes !== \"\" ? \",\" + \"EVENT-TASKS\" : \"EVENT-TASKS\");\n if ($scope.checkEvents) codes += (codes !== \"\" ? \",\" + \"EVENTS\" : \"EVENTS\");\n if ($scope.checkUserEvents) codes += (codes !== \"\" ? \",\" + \"USER-EVENTS\" : \"USER-EVENTS\");\n if ($scope.checkOtherEvents) codes += (codes !== \"\" ? \",\" + \"OTHER-EVENTS\" : \"OTHER-EVENTS\");\n if ($scope.checkEventProgramActs) codes += (codes !== \"\" ? \",\" + \"EVENT-PROGRAM-ACTS\" : \"EVENT-PROGRAM-ACTS\");\n if ($scope.checkBirthdays) codes += (codes !== \"\" ? \",\" + \"BIRTHDAYS\" : \"BIRTHDAYS\");\n if ($scope.checkActs) codes += (codes !== \"\" ? \",\" + \"EVENT-PROGRAM-ACTS-USERS\" : \"EVENT-PROGRAM-ACTS-USERS\");\n\n if ($state.current.name !== 'dashboard.list') {\n event_id = $stateParams.id;\n }\n $log.debug(codes);\n var params = {\n entity_type: ($state.current.name !== 'dashboard.list' ? \"events\" : \"schedule\"),\n entity_type_id: ($state.current.name !== 'dashboard.list' ? $stateParams.id : null),\n documents: { codes: [\"CALENDAR\"] }\n };\n generateDocumentService.documentNew({\n params: params,\n onAccept: function (data) {\n angular.forEach(data, function (item) {\n $http({\n method: 'post',\n url: (window as any).CONFIG.api_url + 'documentgenerator/Generate',\n params: { document_id: item.document_id, event_id: null, user_id: $scope.optionsUsers.user_id, start_date: $scope.optionsUsers.start.format('YYYY-MM-DD'), end_date: $scope.optionsUsers.end.format('YYYY-MM-DD'), codes: codes, outputType: 'pdf' }\n }).then(function (result, status, headers, config) {\n var url = (window as any).CONFIG.api_url + 'documentgenerator/download/' + result.data;\n window.open(url, '_blank');\n });\n })\n }\n });\n };\n\n $scope.newLocationReservation = function (id, startDate, endDate) {\n $('.popover').hide();\n let $modalInstance = $uibModal.open({\n animation: true,\n template: NewReservationModalView,\n controller: \"NewReservationModalCtrl\",\n size: 'lg',\n resolve: {\n id: function () {\n return id;\n },\n startDate: function () {\n return startDate;\n }, endDate: function () {\n return endDate;\n },\n location_id: function () {\n return $stateParams.id;\n }\n }\n });\n\n $modalInstance.result.then(function () {\n $scope.refetchEvents();\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n if (!$scope.$$phase) $scope.$apply();\n });\n };\n\n $(function () {\n $(\"#calendar\").fullCalendar('render');\n $('body').on('click', function (e) {\n \n if ($(e.target).parents(\".uib-daypicker\").length > 0 && ($(e.target).hasClass(\"uib-left\") || $(e.target).parents(\".uib-left\").length > 0)) {\n $scope.selectDate(moment($scope.dt).add(-1, 'month').toDate());\n } else if ($(e.target).parents(\".uib-daypicker\").length > 0 && ($(e.target).hasClass(\"uib-right\") || $(e.target).parents(\".uib-right\").length > 0)) {\n $scope.selectDate(moment($scope.dt).add(1, 'month').toDate());\n } else if ($(e.target).parents(\".uib-monthpicker\").length > 0 && ($(e.target).hasClass(\"uib-left\") || $(e.target).parents(\".uib-left\").length > 0)) {\n $scope.selectDate(moment($scope.dt).add(-1, 'year').toDate());\n } else if ($(e.target).parents(\".uib-monthpicker\").length > 0 && ($(e.target).hasClass(\"uib-right\") || $(e.target).parents(\".uib-right\").length > 0)) {\n $scope.selectDate(moment($scope.dt).add(1, 'year').toDate());\n } else if ($(e.target).parents(\".uib-yearpicker\").length > 0 && ($(e.target).hasClass(\"uib-left\") || $(e.target).parents(\".uib-left\").length > 0)) {\n $scope.selectDate(moment($scope.dt).add(-20, 'year').toDate());\n } else if ($(e.target).parents(\".uib-yearpicker\").length > 0 && ($(e.target).hasClass(\"uib-right\") || $(e.target).parents(\".uib-right\").length > 0)) {\n $scope.selectDate(moment($scope.dt).add(20, 'year').toDate());\n } else if (($(e.target).parents(\".fc-event\").length == 0 && $(e.target).parents(\".popover\").length == 0) && $(e.target).parents(\".fc-listWeek-view\").length == 0) {\n $('.popover').hide();\n }\n });\n\n });\n\n $scope.downloadICA = function () {\n let formatToken = \"user_id:\" + localStorage.getItem(\"userId\") + \"|checkUserEvents:\" + localStorage.getItem(\"checkUserEvents\")\n + \"|checkOtherEvents:\" + localStorage.getItem(\"checkOtherEvents\")\n + \"|checkUserTasks:\" + localStorage.getItem(\"checkUserTasks\")\n + \"|checkOtherTasks:\" + localStorage.getItem(\"checkOtherTasks\")\n + \"|checkActs:\" + localStorage.getItem(\"checkActs\")\n + \"|checkBirthdays:\" + localStorage.getItem(\"checkBirthdays\");\n var token = btoa(formatToken);\n\n var url = $scope.base_url_api + \"CalendarsEvents/GenerateIca?token=\" + token;\n var translateText = $filter('translate')('calendar.text_to_copy_ica');\n //\"Copia el siguiente enlace y utilizado para añadir un calendario desde internet en tu outlook:\\n\"\n prompt(translateText, url);\n\n //window.open(CONFIG.api_url + 'CalendarsEvents/GenerateIca?token=' + token, '_blank', '');\n };\n\n}])\n\n .controller(\"NewEventModalCtrl\", ['$rootScope', '$state', 'LoginService', '$scope', '$uibModalInstance', 'Restangular', 'modalService', '$filter', '$http', '$stateParams', '$q', '$uibModal', 'date', function ($rootScope, $state, LoginService,$scope, $uibModalInstance, Restangular, modalService, $filter, $http, $stateParams, $q, $uibModal, date) {\n\n $scope.date = date;\n\n Restangular.all('EventsTypes').getList().then(function (eventsTypes) {\n $scope.selectEventsTypes = eventsTypes;\n });\n\n $scope.newEvent = function (type) {\n\n if (type === 'task') {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: TaskModalView,\n controller: \"CalendarTaskModalCtrl\",\n size: 'lg',\n resolve: {\n date: function () {\n return $scope.date;\n }\n }\n });\n\n $modalInstance.result.then(function () {\n $uibModalInstance.close();\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n if (!$scope.$$phase) $scope.$apply();\n });\n }\n\n if (type === 'event') {\n Restangular.all('Events').getList({ is_template: true }).then(function (templates) {\n templates.unshift({\n id: undefined,\n name: $filter('translate')('events.no_template')\n })\n $scope.templates = templates;\n\n let $modalInstance = $uibModal.open({\n animation: true,\n template: TemplateModalView,\n size: \"lg\",\n controller: \"TemplateModalCtrl\",\n resolve: {\n templates: function () { return $scope.templates; }\n }\n });\n //Response del modal\n $modalInstance.result.then(function (id) {\n $uibModalInstance.close();\n $rootScope.newEvent = {\n date: $scope.date\n };\n $state.go(\"events.edit\", { id: id, is_template: false });\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n });\n });\n\n }\n\n };\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n}])\n\n.controller(\"CalendarTaskModalCtrl\", ['LoginService', '$scope', '$uibModalInstance', 'Restangular', 'modalService', '$filter', '$http', '$stateParams', '$q', 'date', 'uiSliderConfig', function (LoginService, $scope, $uibModalInstance, Restangular, modalService, $filter, $http, $stateParams, $q, date, uiSliderConfig) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"EVENTS_TASKS_WRITE\");\n\n $scope.eventTask = {};\n $scope.selectedUsersIdS = []; \n $scope.borderRight = { \"border-right\": \"none\" };\n\n $scope.eventTask.date_from = new Date(date);\n $scope.eventTask.date_to = new Date(date);\n\n $scope.is_template = $stateParams.is_template == 'true';\n \n $scope.eventTask.all_day = true;\n if (!$scope.is_template) {\n $scope.eventTask.work_progress = 0;\n }\n $scope.eventTask.event_task_id = 0;\n\n Restangular.all('Users').getList().then(function (results) {\n $scope.selectUsers = results;\n });\n\n Restangular.all('Events').getList().then(function (results) {\n $scope.selectEvents = results;\n });\n\n\n $scope.eventChanged = function (event_id) {\n let params = {\n event_id: event_id,\n is_group: true\n };\n Restangular.all('EventsTasks').getList(params).then(function (results) {\n $scope.selectEventTaskGroups = results;\n var withoutGroup = {\n id: 0,\n title: $filter('translate')('events.tasks.without_group'),\n is_group: true\n };\n $scope.selectEventTaskGroups.unshift(withoutGroup);\n });\n };\n \n $scope.selectEventTaskGroups = [];\n var withoutGroup = {\n id: 0,\n title: $filter('translate')('events.tasks.without_group'),\n is_group: true\n }; \n $scope.selectEventTaskGroups.unshift(withoutGroup); \n \n \n\n Restangular.all('TasksTypes').getList({ entity_type: \"events\" }).then(function (results) {\n $scope.selectTaskTypes = results;\n });\n\n \n Restangular.all('TasksStatus').getList({entity_type: \"events\"}).then(function (results) {\n $scope.selectTaskStatus = results;\n if (angular.isUndefined($scope.eventTask.id)) {\n $scope.eventTask.FK_events_tasks_tasks_status = $scope.selectTaskStatus[0];\n }\n });\n\n $scope.saveEventTask = function () {\n if ($scope.eventTask.event_task_id == 0) $scope.eventTask.event_task_id = null;\n $scope.eventTask.FK_events_tasks_users_events_tasks = [];\n\n $scope.eventTask.task_type_id = $scope.eventTask.FK_events_tasks_tasks_types.id;\n $scope.eventTask.task_status_id = $scope.eventTask.FK_events_tasks_tasks_status.id;\n angular.forEach($scope.eventTask.selected_users, function (user) {\n $scope.eventTask.FK_events_tasks_users_events_tasks.push({\n event_task_id: $scope.eventTask.id,\n user_id: user.id\n });\n });\n\n Restangular.all('eventsTasks').post($scope.eventTask).then(function (result) {\n if (typeof (result.id) !== \"undefined\") {\n $uibModalInstance.close();\n toastr.success($filter('translate')('events.tasks.add_success'));\n } else {\n $scope.errorMessage = result.message;\n }\n });\n\n };\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n }; \n \n}])\n\n.controller(\"CalendarEventModalCtrl\", ['LoginService', '$scope', '$uibModalInstance', 'Restangular', 'modalService', '$filter', '$http', '$stateParams', '$q', 'date', 'uiSliderConfig', '$rootScope', function (LoginService, $scope, $uibModalInstance, Restangular, modalService, $filter, $http, $stateParams, $q, date, uiSliderConfig, $rootScope) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"EVENTS_WRITE\");\n\n Restangular.all('EventsTypes').getList().then(function (eventsTypes) {\n $scope.selectEventsTypes = eventsTypes;\n });\n\n $scope.event = {}; \n $scope.is_template = $stateParams.is_template == 'true';\n $scope.event.date_from = date;\n $scope.event.date_to = date;\n\n\n $scope.event.all_day = true;\n\n Restangular.all('Users').getList().then(function (users) {\n $scope.selectUsers = users;\n });\n \n $scope.saveEvent = function () {\n $scope.event.is_template = $scope.is_template;\n if ($rootScope.isDefinedAndNotNullAndNotEmpty($scope.event.FK_events_users)) $scope.event.responsible_id = $scope.event.FK_events_users.id;\n if ($scope.event.date_to != null && $scope.event.date_to < $scope.event.date_from) $scope.event.date_to = $scope.event.date_from;\n \n Restangular.all('Events').post($scope.event).then(function (result) {\n if (typeof (result.id) != \"undefined\") {\n $uibModalInstance.close();\n toastr.success($filter('translate')('events.tasks.add_success'));\n } else {\n $scope.errorMessage = result.message;\n }\n });\n };\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n\n}])\n\n.controller(\"NewReservationModalCtrl\", ['LoginService', '$scope', '$uibModalInstance', 'Restangular', 'modalService', '$filter', '$http', '$stateParams', 'startDate', 'endDate', 'id', 'location_id', function (LoginService, $scope, $uibModalInstance, Restangular, modalService, $filter, $http, $stateParams, startDate, endDate, id, location_id) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"EVENTS_WRITE\");\n $scope.selectStatus = [{\n code: 'pending', name: $filter('translate')('locations_reservations.status_pending')\n }, {\n code: 'confirmed', name: $filter('translate')('locations_reservations.status_confirmed')\n }, {\n code: 'cancelled', name: $filter('translate')('locations_reservations.status_cancelled')\n }, {\n code: 'rejected', name: $filter('translate')('locations_reservations.status_rejected')\n }];\n\n if (typeof (id) !== 'undefined' && id != null) {\n Restangular.one('LocationsReservations', id).get().then(function (results) {\n $scope.location_reservation = results;\n $scope.location_reservation.date_from = new Date($scope.location_reservation.date_from);\n $scope.location_reservation.date_to = new Date($scope.location_reservation.date_to);\n angular.forEach($scope.selectStatus, function (status) {\n if ($scope.location_reservation.status == status.code) $scope.location_reservation.status = status;\n });\n }); \n\n } else {\n $scope.location_reservation = {};\n $scope.location_reservation.date_from = new Date(startDate);\n $scope.location_reservation.date_to = new Date(endDate);\n $scope.location_reservation.location_id = location_id;\n $scope.location_reservation.status = $scope.selectStatus[0];\n }\n \n \n $scope.save = function (frmLocationReservation) {\n $scope.location_reservation.status = $scope.location_reservation.status.code;\n if (!angular.isUndefined($scope.location_reservation.id)) {\n $scope.location_reservation.put().then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('locations_reservations.edit_success'));\n $uibModalInstance.close();\n } else {\n $scope.errorMessage = result.message;\n }\n });\n } else {\n Restangular.all('LocationsReservations').post($scope.location_reservation).then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('locations_reservations.create_success'));\n $uibModalInstance.close();\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n };\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n $scope.deleteDialog = function (id, location_name) {\n $scope.id = id;\n $scope.location_name = location_name;\n modalService.confirm({\n title: $filter('translate')('locations_reservations.button_delete'),\n message: $filter('translate')('locations_reservations.delete_message') + \" \" + $scope.location_name + \"?\",\n onAccept: function () {\n Restangular.one('LocationsReservations', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('locations_reservations.delete_success'));\n $uibModalInstance.close();\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n });\n };\n\n}])\n;\n\n","\nangular.module(\"group_import\", [])\n\n .controller(\"GroupImportCtrl\", ['$state', '$timeout', '$stateParams', 'Restangular', '$scope', '$rootScope', '$http', '$filter', 'modalService', '$uibModal', 'gridService', '$log',\n function ($state, $timeout, $stateParams, Restangular, $scope, $rootScope, $http, $filter, modalService, $uibModal, gridService, $log) {\n $scope.genders = [{ id: 'M', name: $filter(\"translate\")('persons.gender_male') }, { id: 'F', name: $filter(\"translate\")('persons.gender_female') }, { id: 'N', name: $filter(\"translate\")('persons.gender_neutral') }];\n $scope.totalPositions = 0;\n $scope.treatments = [];\n $scope.selectedRows = [];\n\n $scope.actions = function (rowEntity) {\n\n if (!rowEntity.PersonName || !rowEntity.PersonSurname) {\n return [\n { id: 'ignore', name: 'Sin cambios' },\n ];\n } else if (!rowEntity.isDuplicate) {\n return [\n { id: 'add_person_and_position', name: 'Crear persona y asignar cargo' },\n { id: 'ignore', name: 'Sin cambios' },\n ];\n } else if (!rowEntity.PersonPositionId) {\n return [\n { id: 'add_person_and_position', name: 'Crear persona y asignar cargo' },\n { id: 'add_position', name: 'Asignar cargo' },\n { id: 'ignore', name: 'Sin cambios' },\n ];\n } else {\n return [\n { id: 'add_person_and_position', name: 'Crear persona y asignar cargo' },\n { id: 'add_position', name: 'Asignar cargo' },\n { id: 'ignore', name: 'Sin cambios' },\n { id: 'end_position', name: 'Finalizar cargo' }\n ];\n };\n }\n\n $scope.rowFormatter = function( row ) {\n return row.entity.Duplicate != null;\n };\n \n $scope.gridGroupImport = {\n // enableGridMenu: true,\n paginationPageSizes: [50, 100, 150],\n paginationPageSize: 50,\n enableScrollbars: false,\n enableRowSelection: true,\n enableSelectAll: true,\n onRegisterApi: function (gridApi) {\n callbackFunctionGridResize(0);\n this.gridApi = gridApi;\n this.gridApi.selection.on.rowSelectionChanged($scope, callbackFunctionRowSelected);\n this.gridApi.selection.on.rowSelectionChangedBatch($scope, callbackFunctionRowSelected);\n this.gridApi.pagination.on.paginationChanged($scope, function () {\n let expandedRows = gridApi.expandable.getExpandedRows().length;\n // let visiblexpandedRows = gridApi.expandable.getExpandedRows().filterer(r=>r.entity.)\n callbackFunctionGridResize(expandedRows);\n });\n this.gridApi.expandable.on.rowExpandedStateChanged($scope, function () { \n let expandedRows = gridApi.expandable.getExpandedRows().length;\n callbackFunctionGridResize(expandedRows);\n });\n },\n\n columnDefs: [\n {\n name: 'isDuplicate', displayName: \" \", cellTemplate: '
', width: 30,\n },\n { name: 'GroupName', displayName: $filter('translate')('general.name')},\n { name: 'PositionName', displayName: $filter('translate')('persons.position') },\n { name: 'PersonName', displayName: $filter('translate')('general.name') },\n { name: 'PersonSurname', displayName: $filter('translate')('persons.surname')},\n { name: 'PersonLastname', displayName: $filter('translate')('persons.lastname')},\n { name: 'Action', displayName: $filter('translate')('events.guests.actions'), width: 100, editableCellTemplate: 'ui-grid/dropdownEditor',\n editDropdownValueLabel: 'name', cellFilter: 'mapAction', editDropdownOptionsFunction: function(rowEntity, colDef) {\n return $scope.actions(rowEntity);\n }, },\n {\n name: ' ',\n exporterSuppressExport: true,\n enableSorting: false,\n enableHiding: false,\n enableFiltering: false,\n enableColumnMenu: false,\n }\n ],\n expandableRowTemplate: 'app/common/group_import/expandable_row_group_import.html',\n rowTemplate: '
' +\n '
' +\n '
'\n \n };\n\n $scope.importOptions = function (groupRows) {\n\n $scope.totalPositions = groupRows.length;\n\n let index = 0;\n angular.forEach(groupRows, function (row) {\n row.subGridOptions = {\n columnDefs: [\n { name: 'Gender', displayName: $filter('translate')('persons.gender') },\n ],\n data: [row]\n }\n });\n $scope.gridGroupImport.data = groupRows.map((p) => p = { ...p, gridId: index++, isDuplicate: (p.Duplicate != null) });\n\n }\n\n // Callback functions para el gird\n let callbackFunctionRowSelected = function (row) {\n let addAll = row.length > 1;\n $log.debug(row)\n if (!addAll) { // Si solo hemos seleccionado uno \n var index = $scope.selectedRows.map(function (e) { return e.gridId; }).indexOf(row.entity.gridId);\n if (index < 0) {\n if (row.isSelected)\n $scope.selectedRows.push(row.entity);\n } else {\n $scope.selectedRows.splice(index, 1);\n }\n } else { //Si hemos seleccionado todos\n $log.debug('los he selectionado a todos')\n $scope.selectedRows.length = [];\n if (row[0].isSelected) {\n $scope.selectedRows = $scope.gridGroupImport.data.filter(e => e.gridId < $scope.gridGroupImport.paginationPageSize)\n }\n }\n }\n\n // Función a mano para gestionar el resize del grid\n let callbackFunctionGridResize = function (expandedRows) {\n expandedRows ? expandedRows = expandedRows : expandedRows = 0;\n let visibleRows = $scope.gridGroupImport.data.length - $scope.gridGroupImport.paginationPageSize * ($scope.gridGroupImport.paginationCurrentPage - 1);\n if (visibleRows > $scope.gridGroupImport.paginationPageSize) visibleRows = $scope.gridGroupImport.paginationPageSize;\n $scope.gridSize = visibleRows * 31 + expandedRows * 153 + 100;\n };\n\n // Acciones masivas \n $scope.massiveIgnore = function () { $scope.selectedRows.forEach(r => r.Action = 'ignore') }\n $scope.massiveImport = function () {\n $scope.selectedRows.forEach(function (r) {\n if (r.PersonName && r.PersonSurname) {\n r.Action = 'add_person_and_position';\n }\n })\n };\n $scope.massiveEndPosition = function () {\n $scope.selectedRows.forEach(function (r) {\n if (r.isDuplicate && r.PersonPositionId) {\n r.Action = 'end_position';\n }\n })\n };\n $scope.massiveAddPosition = function () {\n $scope.selectedRows.forEach(function (r) {\n if (r.isDuplicate) {\n r.Action = 'add_position';\n }\n })\n };\n\n $scope.import = function() {\n let groupPositions = [];\n angular.forEach($scope.gridGroupImport.data, function (row) {\n let position: any = {};\n angular.copy(row, position);\n position.subGridOptions = null;\n groupPositions.push(position);\n });\n\n let request = {\n groupPositions: groupPositions,\n person_type: \"Authority\"\n };\n\n Restangular.all('Groups').customPOST(request, \"Import\").then(function (result) {\n $state.go('groups.list');\n });\n };\n}])\n.filter('mapGender', function() {\n let genderHash = {\n 'M': 'Hombre',\n 'F': 'Mujer',\n 'N': 'Neutro'\n };\n\n return function(input) {\n if (!input){\n return '';\n } else {\n return genderHash[input];\n }\n };\n})\n.filter('mapAction', function() {\n let actionHash = {\n 'add_person_and_position' : 'Crear persona y asignar cargo',\n 'add_position': 'Asignar cargo',\n 'end_position': 'Finalizar cargo',\n 'ignore': 'Sin cambios',\n };\n\n return function(input) {\n if (!input){\n return '';\n } else {\n return actionHash[input];\n }\n };\n});\n","import IboxToolsView from \"./ibox_tools.html\";\n\n\nangular.module(\"ibox_tools\", [])\n\n/**\n * iboxTools - Directive for iBox tools elements in right corner of ibox\n */\n.directive('iboxTools', ['$timeout',function iboxTools($timeout) {\n return {\n restrict: 'A',\n scope: true,\n template: IboxToolsView,\n controller: ['$scope', '$element', function ($scope, $element) {\n // Function for collapse ibox\n $scope.showhide = function () {\n var ibox = $element.closest('div.ibox');\n var icon = $element.find('i:first');\n var content = ibox.find('div.ibox-content');\n content.slideToggle(200);\n // Toggle icon from up to down\n icon.toggleClass('fa-chevron-up').toggleClass('fa-chevron-down');\n ibox.toggleClass('').toggleClass('border-bottom');\n $timeout(function () {\n ibox.resize();\n ibox.find('[id^=map-]').resize();\n }, 50);\n }\n }]\n };\n}])\n\n /**\n * iboxTools - Directive for iBox tools elements in right corner of ibox\n */\n.directive('iboxToolsClosed',['$timeout', function iboxTools($timeout) {\n return {\n restrict: 'A',\n scope: true,\n template: IboxToolsView,\n controller: ['$scope', '$element', function ($scope, $element) {\n // Function for collapse ibox\n $scope.showhide = function () {\n var ibox = $element.closest('div.ibox');\n var icon = $element.find('i:first');\n var content = ibox.find('div.ibox-content');\n content.slideToggle(200);\n // Toggle icon from up to down\n icon.toggleClass('fa-chevron-up').toggleClass('fa-chevron-down');\n ibox.toggleClass('').toggleClass('border-bottom');\n $timeout(function () {\n ibox.resize();\n ibox.find('[id^=map-]').resize();\n }, 50);\n }\n }]\n };\n}])\n\n\n/**\n * icheck - Directive for custom checkbox icheck\n */\n.directive('icheck', ['$timeout', function icheck($timeout) {\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function($scope, element, $attrs, ngModel) {\n return $timeout(function () {\n var value;\n value = $attrs['value'];\n\n $scope.$watch($attrs['ngModel'], function (newValue) {\n $(element).iCheck('update');\n })\n\n return $(element).iCheck({\n checkboxClass: 'icheckbox_square-yellow',\n radioClass: 'iradio_square-yellow'\n\n }).on('ifChanged', function (event) {\n if ($(element).attr('type') === 'checkbox' && $attrs['ngModel']) {\n $scope.$apply(function () {\n return ngModel.$setViewValue((event.target as HTMLInputElement).checked);\n });\n }\n if ($(element).attr('type') === 'radio' && $attrs['ngModel']) {\n return $scope.$apply(function () {\n return ngModel.$setViewValue(value);\n });\n }\n });\n });\n }\n }\n}]);","import FoldersEditView from '../../folders/folders-edit.html';\nimport FoldersFilesEditView from '../../folders/files-edit.html';\nimport ReportsPreviewView from '../../reports/reports-preview.html';\n\n/**\n * Created by jorge.pena on 22-07-2015.\n */\nangular.module('modal', ['ngSanitize'])\n\n .controller('ModalInstanceCtrl', ['$scope', '$uibModalInstance', 'options', function ($scope, $uibModalInstance, options) {\n\n\n $scope.options = options;\n\n $scope.onAccept = function () {\n $uibModalInstance.dismiss('cancel');\n $scope.options.onAccept($scope.options);\n };\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n if (typeof $scope.options.onCancel != \"undefined\") $scope.options.onCancel($scope.options);\n };\n\n }])\n\n .controller('ModalSendMailCtrl', ['$scope', '$uibModalInstance', '$http', 'options', 'Restangular', '$filter', 'LoginService', 'Upload', '$log',\n function ($scope, $uibModalInstance, $http, options, Restangular, $filter, LoginService, Upload, $log) {\n $scope.mail = {\n addresses: options.to,\n content: options.content,\n subject: options.subject,\n module: options.module,\n code: options.code,\n cc: [],\n cco: [],\n cc_tmp: options.cc,\n cco_tmp: options.cco,\n message: options.message,\n files: [],\n attachments: []\n }\n\n $scope.message = $scope.mail.message;\n $scope.replyMailsAccounts = [];\n var user_mail = \"\";\n\n Restangular.all('MailAccounts').getList().then(function (mailsAccounts) {\n $scope.mailsAccounts = mailsAccounts;\n });\n\n //Cuenta del usuario\n Restangular.one('Users/Mail', LoginService.get(\"userId\")).get().then(function (mail) {\n user_mail = mail;\n });\n\n\n let languageCode = \"es\"; //$translate.use().toLowerCase();\n $scope.tinymceOptions = {\n resize: true,\n forced_root_block: false,\n height: 100,\n body_class: 'custom_tinymce_content',\n valid_classes: 'razor_expression',\n language: languageCode,\n paste_as_text: true,\n plugins: 'paste autoresize textcolor image lists advlist table noneditable code',\n toolbar: \"undo redo | alignleft aligncenter alignright alignjustify | bold italic forecolor backcolor fontsizeselect | bullist numlist outdent indent | table | image | mybutton | code\",\n menubar: false,\n statusbar: false,\n content_css: [\n '~/Content/events.css',\n ]\n };\n\n $scope.options = options;\n\n $scope.changeReplies = function () {\n $scope.replyMailsAccounts = [];\n $scope.replyMailsAccounts.push(_.find($scope.mailsAccounts, function (account) { return $scope.mail.mail_account_id == account.id; }).email);\n $scope.mail.reply_to = $scope.replyMailsAccounts[0];\n $scope.replyMailsAccounts.push(user_mail);\n }\n\n $scope.newAttachment = function (file) {\n if (file != null) { $scope.mail.files.unshift(file); }\n }\n\n $scope.deleteAttachment = function (item) {\n var index = $scope.mail.files.indexOf(item);\n $scope.mail.files.splice(index, 1);\n }\n\n\n $scope.onAccept = function () {\n if (angular.isUndefined($scope.mail.addresses)) $scope.mail.addresses = \"\";\n if (angular.isUndefined($scope.mail.cc_tmp)) $scope.mail.cc_tmp = \"\";\n if (angular.isUndefined($scope.mail.cco_tmp)) $scope.mail.cco_tmp = \"\";\n\n if ($scope.mail.addresses == \"\" && $scope.mail.cc_tmp == \"\" && $scope.mail.cco_tmp == \"\") {\n $scope.message = $filter('translate')('mail.missing_mail_to_cco_cc');\n } else {\n if (angular.isDefined($scope.mail.addresses))\n $scope.mail.to = $scope.mail.addresses.split(\",\");\n if (angular.isDefined($scope.mail.cc_tmp))\n $scope.mail.cc = $scope.mail.cc_tmp.split(\",\");\n if (angular.isDefined($scope.mail.cco_tmp))\n $scope.mail.cco = $scope.mail.cco_tmp.split(\",\");\n\n if ($scope.mail.files.length > 0) {\n Upload.base64DataUrl($scope.mail.files).then(function (urls) {\n for (var i = 0; i < urls.length; i++) {\n $scope.mail.attachments.push({\n name: $scope.mail.files[i].name,\n content: urls[i]\n })\n }\n $log.debug($scope.mail.attachments)\n send();\n });\n } else {\n send();\n }\n\n }\n\n };\n\n var send = function () {\n $http({\n method: 'post',\n url: (window as any).CONFIG.api_url + 'Mail/SendMail',\n data: $scope.mail\n }).success(function (results, status, headers, config) {\n $uibModalInstance.dismiss('cancel');\n $scope.options.onAccept($scope.options);\n }).error(function (results, status, headers, config) {\n });\n }\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n }])\n\n .controller(\"ModalAddImageCtrl\", ['Restangular', '$scope', '$uibModal', '$uibModalInstance', 'options', '$log',\n function (Restangular, $scope, $uibModal, $uibModalInstance, options, $log) {\n\n $log.debug(options);\n\n $scope.options = options;\n $scope.image = \"\";\n\n $scope.currentGeneralFolderId = null; //carpeta actual general\n $scope.generalFolders = []; //carpetas generales\n $scope.generalFiles = []; //imagenes de la carpeta actual general\n $scope.currentEventFolderId = null; //carpeta actual evento\n $scope.eventFolders = []; //carpetas del evento\n $scope.eventFiles = []; //imagenes de la carpeta actual de evento\n\n //cargamos las imagenes de la biblioteca de archivos privados generales\n $scope.loadGeneralData = function (folderId, level, is_public) {\n options = { folder_id: folderId, entity_type: 'general', entity_type_id: null, is_public: is_public };\n $scope.currentGeneralFolderId = folderId;\n Restangular.all(\"Folders\").getList(options).then(function (results) {\n let newFolders = results.filter(m=>m.is_folder && $scope.generalFolders.find(f=>f.id==m.id)==null);\n newFolders.forEach(f=>{\n f.level = level;\n });\n $scope.generalFolders = [...$scope.generalFolders, ...newFolders];\n $scope.generalFiles = results.filter(m=>(!m.is_folder || (m.mimetype!=null && m.mimetype?.indexOf(\"image\") > -1)));\n });\n };\n\n //cargamos las imagenes de la biblioteca de la carpeta actual\n $scope.loadGeneralData($scope.currentGeneralFolderId, 1, false);\n\n //cargamos las imagenes de la biblioteca de archivos privados generales\n $scope.loadEventData = function (folderId, level, is_public) {\n options = { folder_id: folderId, entity_type: 'events', entity_type_id: $scope.options.event_id, is_public: is_public };\n $scope.currentEventFolderId = folderId;\n Restangular.all(\"Folders\").getList(options).then(function (results) {\n let newFolders = results.filter(m=>m.is_folder && $scope.generalFolders.find(f=>f.id==m.id)==null);\n newFolders.forEach(f=>{\n f.level = level;\n });\n $scope.eventFolders = [...$scope.eventFolders, ...newFolders];\n $scope.eventFiles = results.filter(m=>(!m.is_folder || (m.mimetype!=null && m.mimetype?.indexOf(\"image\") > -1)));\n });\n };\n \n //cargamos las imagenes de la biblioteca de la carpeta actual\n if($scope.options.event_id!=null) $scope.loadEventData($scope.currentEventFolderId, 1, false);\n\n //cerrar dialogo\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n if (typeof $scope.options.onCancel != \"undefined\") $scope.options.onCancel($scope.options);\n };\n\n //seleccion de imagen\n $scope.selectImage = function(image){\n $uibModalInstance.dismiss('cancel');\n $scope.options.onAccept(image);\n };\n\n //añadir\n $scope.editAdd = function (type, currentFolderId, id, entity_type, entity_type_id, is_public) {\n let $modalInstance = null;\n if (type == 'folder') {\n $modalInstance = $uibModal.open({\n animation: true,\n template: FoldersEditView,\n size: \"md\",\n controller: \"FoldersEditModalCtrl\",\n scope: $scope,\n resolve: {\n folderId: function () {\n return id;\n },\n parentFolderId: function () {\n return currentFolderId;\n },\n entity_type: function () {\n return entity_type\n },\n entity_type_id: function () {\n return entity_type_id\n },\n is_public: function () {\n return is_public\n }\n }\n });\n } else {\n $modalInstance = $uibModal.open({\n animation: true,\n template: FoldersFilesEditView,\n size: \"md\",\n controller: \"FilesEditModalCtrl\",\n scope: $scope,\n resolve: {\n fileId: function () {\n return id;\n },\n parentFolderId: function () {\n return currentFolderId;\n },\n entity_type: function () {\n return entity_type\n },\n entity_type_id: function () {\n return entity_type_id\n },\n is_public: function () {\n return is_public\n }\n }\n });\n }\n\n //Response del modal\n $modalInstance.result.then(function (data) {\n if(entity_type == 'general'){\n $scope.loadGeneralData($scope.currentGeneralFolderId, 1, false);\n }else if(entity_type == 'events'){\n $scope.loadEventData($scope.currentEventFolderId, 1, false);\n }\n }, function () {\n if (!$scope.$$phase) $scope.$apply();\n }); \n };\n\n\n }])\n\n .controller('ModalDocumentsTypesCtrl', ['$scope', '$uibModalInstance', 'options', '$http', '$uibModal', 'Restangular', '$log', function ($scope, $uibModalInstance, options, $http, $uibModal, Restangular, $log) {\n\n $log.debug(options);\n\n //Estas dos propiedades son para el caso de propuesta de invitados, sino no sale.\n $scope.orderPrintModal = { _sortBy: 'prefered' };\n $scope.showOrder = false;\n\n $scope.selected = [];\n $scope.configurateJasper = false;\n $scope.options = options;\n $log.debug($scope.options);\n if (typeof (options.params.entity_type_id) !== undefined) $scope.configurateJasper = true; // Si le enviamos el evento o la correspondencia, se permitira configurar el jasper.\n\n var optionsValues = {\n codes: options.params.documents.codes,\n for_event_guest: options.params.documents.for_event_guest,\n for_event_staff: options.params.documents.for_event_staff,\n for_event_workteam: options.params.documents.for_event_workteam,\n for_correspondence: options.params.documents.for_correspondence\n };\n\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + 'Documents/GetDocumentsByDocumentsType',\n params: optionsValues\n }).then(function (results, status, headers, config) {\n $scope.documents = results.data.rows;\n $scope.documentsTypes = $scope.documents.map(function (item) { return { id: item.document_type_id, code: item.FK_documents_documents_types.code, name: item.FK_documents_documents_types.name, type:item.type, uid:item.uid } }).filter(function (x, i, a) {\n return a.findIndex(m => m.code === x.code) == i;\n });\n if ($scope.documentsTypes.length > 0) {\n //solo existe un tipo de documentos lo seleccionamos directamente..\n if (typeof ($scope.selected[$scope.documentsTypes[0].id]) === \"undefined\") {\n $scope.selected[$scope.documentsTypes[0].id] = { checked: true };\n }\n }\n\n //$scope.api_url = (window as any).CONFIG.api_url;\n //$scope.type_document = options.params.type_document;\n //$scope.type_result = options.params.type_result;\n $scope.showOrder = ($scope.documentsTypes.filter(function (config) { return config.code == \"PROPOSAL_GUEST_LIST\"; }).length > 0 ? true : false);\n });\n\n $scope.setValue = function (document_type_id, document_type_code, document_id, name, url_document_method,type, uid) {\n $log.debug(document_type_id, document_type_code, document_id, name, url_document_method);\n if (typeof ($scope.selected[document_type_id]) === \"undefined\") {\n $scope.selected[document_type_id] = { checked: true };\n }\n $scope.selected[document_type_id].document_id = document_id;\n $scope.selected[document_type_id].document_name = name;\n $scope.selected[document_type_id].document_type_id = document_type_id;\n $scope.selected[document_type_id].document_type_code = document_type_code;\n $scope.selected[document_type_id].document_url_method = url_document_method;\n $scope.selected[document_type_id].type = type;\n $scope.selected[document_type_id].uid = uid;\n if (document_type_code == \"PROPOSAL_GUEST_LIST\") $scope.selected[document_type_id].url_params = $scope.orderPrintModal._sortBy;\n if (typeof (options.params.event_guests_id) !== \"undefined\" && options.params.event_guests_id.length > 0) $scope.selected[document_type_id].url_params = options.params.event_guests_id;\n if (typeof (options.params.persons_ids) !== \"undefined\" && options.params.persons_ids.length > 0) $scope.selected[document_type_id].url_params = options.params.persons_ids;\n };\n\n $scope.changeCheck = function (item) {\n angular.forEach($scope.selected, function (element, key, obj) {\n if (key != item) {\n $scope.selected[key] = { checked: false };\n }\n })\n };\n\n\n $scope.onAccept = function () {\n var selectedNew = $scope.selected.filter(function (el) { return el.checked }).map(function (e) { return e; });\n $uibModalInstance.close(selectedNew);\n };\n $scope.onError = function (errorMessage) {\n $uibModalInstance.close(errorMessage);\n };\n\n $scope.onConfigure = function ($event, document) {\n $event.preventDefault();\n $event.stopPropagation();\n $log.debug(document);\n\n let $modalInstance = $uibModal.open({\n animation: true,\n template: ReportsPreviewView,\n controller: 'ReportsPreviewCtrl',\n size: 'lg',\n resolve: {\n document: function () {\n return document;\n },/*\n event: function () {\n return {\n id: options.params.event_id\n };\n }*/\n entity_type: function () { return options.params.entity_type; },\n entity_type_id: function () { return options.params.entity_type_id; }\n }\n\n });\n $modalInstance.result.then(function (data) {\n let modified = [];\n //añadimos info de parametros\n angular.forEach(data, function (parameter) {\n if(typeof parameter.values !== \"undefined\") {\n parameter.entity_type = options.params.entity_type;\n parameter.entity_type_id = options.params.entity_type_id;\n parameter.document_id = document.id;\n if (parameter.name == 'JasperParameter' && parameter.values != null) {\n let values = [];\n var val = {\n language_id: 1,\n value: parameter.values\n };\n values.push(val);\n parameter.values = values;\n }\n modified.push(parameter);\n }\n });\n //guardar parametros para el evento en cuestion\n Restangular.all('DocumentsConfig').post(modified).then(function (data) {\n $log.debug(data);\n });\n });\n };\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n\n }])\n\n;\n","import \"metismenu\";\n\n\nangular.module(\"navigation\", [])\n\n.controller(\"NavigationCtrl\", ['$scope', '$rootScope', '$controller', '$state', '$stateParams', 'Restangular', '$uibModal', 'modalService', '$compile', 'gridService', 'uiGridTreeViewConstants', 'treeService', '$timeout', 'LoginService', '$window', 'screenSize', '$log',\n function ($scope, $rootScope, $controller, $state, $stateParams, Restangular, $uibModal, modalService, $compile, gridService, uiGridTreeViewConstants, treeService, $timeout, LoginService, $window, screenSize, $log) {\n\n $scope.username = LoginService.get(\"userName\");\n $scope.icon = LoginService.get(\"userIcon\") == \"null\" ? \"assets/img/no-user.jpeg\" : LoginService.get(\"userIcon\");\n $scope.finishHtmlLoad = false;\n $rootScope.company_id = LoginService.get(\"companyId\");\n \n $scope.showHideMenu = false;\n\n $scope.loadMenu = function () {\n Restangular.all(`Menus/${$scope.company.menu_code}/tree`).getList().then(function (results) {\n $scope.menus = results;\n $timeout(function () {\n $scope.finishHtmlLoad = true;\n ($('#side-menu') as any).metisMenu();\n });\n }, function (response) {\n $log.error(\"Error with status code\", response.status);\n if (response.status !== 401) {\n LoginService.closeSession(); //Cerramos si ha devuelto un 440 para que no se quede en bucle entre el login y el dashboard\n $state.go(\"authinit\");\n }\n });\n };\n\n //Imagen de la empresa\n Restangular.one('Companies', $rootScope.company_id*1).get().then(function (results) {\n $scope.company = results;\n $scope.loadMenu();\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n\n //no funciona bien\n $scope.isItemActive = function (item) {\n var ret = false;\n if (item.ui_sref != \"\" && item.ui_sref != null) {\n var parts = item.ui_sref.split(\".\");\n ret = $state.includes(parts[0]);\n $log.debug(item.ui_sref, ret);\n }\n return ret;\n };\n \n $scope.hideMenu = function (menuItemId) {\n $log.debug(menuItemId);\n }\n\n\n\n\n $rootScope.$on(\"language-change\", function (event, args) {\n $scope.loadMenu();\n });\n\n /* RESIZE del menu navbar lateral, para que salga pequeño.*/\n var w = angular.element($window);\n $scope.getWindowDimensions = function () {\n return { 'h': w.height(), 'w': w.width() };\n };\n $scope.$watch($scope.getWindowDimensions, function (newValue, oldValue) {\n $scope.windowHeight = newValue.h;\n $scope.windowWidth = newValue.w;\n if (newValue.w > 769 && newValue.w < 1201) {\n $('body').addClass('mini-navbar')\n }\n\n }, true);\n\n //Permite identificar el tamaño de pantalla para poder ajustar las clases de no-paddings etc para que independientemente del tamaño, se visualice correctamente.\n //Utiliza angular-match-media.js (Incluido el fichero directamente, no está en el nugget)\n $scope.$watch(function () {\n $rootScope.sizeLg = screenSize.is('lg');\n $rootScope.sizeMd = screenSize.is('md');\n $rootScope.sizeSm = screenSize.is('sm');\n $rootScope.sizeXs = screenSize.is('xs');\n });\n\n w.bind('resize', function () {\n if (!$scope.$$phase) $scope.$apply();\n });\n\n\n $rootScope.isDefinedAndNotNull = function (val) {\n return angular.isDefined(val) && val !== null\n };\n\n $rootScope.isDefinedAndNotNullAndNotEmpty = function (val) {\n return angular.isDefined(val) && val !== null && val != \"\"\n };\n\n}])\n;\n\n\n\n\n\n\n","import MailingFilesStelaModalView from '../../mailings/mailingFilesStelaModal.html';\nimport SearchPersonsModalView from '../../notifications/searchPersonsModal.html';\n\n\nangular.module('notifications')\n\n .controller('NotificationsMailCtrl', ['$scope', '$uibModalInstance', '$uibModal', '$http', 'options', 'Restangular', '$filter', 'LoginService', 'Upload', 'modalService', 'generateDocumentService', 'BeeService', '$log',\n function ($scope, $uibModalInstance, $uibModal, $http, options, Restangular, $filter, LoginService, Upload, modalService, generateDocumentService, BeeService, $log) {\n\n $scope.mail = options.params;\n $scope.mail.files = [];\n $scope.mail.filesToShow = [];\n $scope.mail.attachments = [];\n $scope.mailings = [];\n $scope.params = [];\n $scope.mail.notificationAttachments = []; // esto es para guardar lo nuevo, voy a ver como llega.\n $scope.showRecipientList = false;\n $scope.showICS = false;\n $scope.blocked_all = false;\n $scope.disabled_account = false;\n $scope.mail.scheduled_date = null;\n $scope.loadBee = true;\n BeeService.start({});\n\n $scope.mail.preheader = \"[EVENT_NAME] [EVENT_DATE]\";\n\n $scope.mail.ics = 0;\n\n if ($scope.mail.entity_type == \"events\") {\n $scope.showICS = true;\n }\n\n $scope.showToPart = true;\n\n if ($scope.mail.event_guests_ids != null || $scope.mail.persons_ids != null || $scope.mail.users_ids != null || $scope.mail.event_staffs_ids != null || $scope.mail.event_users_ids != null) {\n $scope.showToPart = false;\n $scope.totalEmails = ($scope.mail.event_guests_ids != null ? $scope.mail.event_guests_ids.length : 0) +\n ($scope.mail.persons_ids != null ? $scope.mail.persons_ids.length : 0) +\n ($scope.mail.users_ids != null ? $scope.mail.users_ids.length : 0) +\n ($scope.mail.event_staffs_ids != null ? $scope.mail.event_staffs_ids.length : 0) +\n ($scope.mail.event_users_ids != null ? $scope.mail.event_users_ids.length : 0);\n }\n\n $scope.message = $scope.mail.message;\n $scope.replyMailsAccounts = [];\n var user_mail = \"\";\n\n $scope.loadCombos = function () {\n //Cuentas de correo\n Restangular.all('MailAccounts').getList().then(function (accounts) {\n $scope.mailsAccounts = accounts;\n\n if ($scope.mail.entity_type == \"events\") {\n $scope.disabled_account = true;\n } else {\n // Si hay una cuenta definida como cuenta por defecto, la marcamos.\n let defaultAccount = accounts.filter(m => m.use_by_default)[0];\n if (defaultAccount != null && $scope.mail.mail_account_id == null) $scope.mail.mail_account_id = defaultAccount.id;\n }\n $scope.changeReplies(true);\n }); \n \n //Cuenta del usuario\n Restangular.one('Users/Mail', LoginService.get(\"userId\")).get().then(function (mail) {\n user_mail = mail;\n });\n\n //Templates\n Restangular.all('NotificationsTemplates').customGET(\"LoadTemplatesForSelect\").then(function (templates) {\n $scope.templates = templates;\n $scope.templates.unshift({\n id: null,\n name: $filter('translate')('events.no_template')\n });\n $scope.mail.template_id = null;\n });\n\n $scope.params.entity_type = (options.params.entity_type != null ? options.params.entity_type : null);\n $scope.params.entity_type_id = (options.params.entity_type_id != null ? options.params.entity_type_id : null);\n switch ($scope.params.entity_type) {\n case \"persons\":\n $scope.params.entity_type = null;\n if (options.params.app_enabled) {\n $scope.params.mailing_type_code = 'QR_GUEST_USER_REGISTRATION,PERSONS';\n } else {\n $scope.params.mailing_type_code = 'PERSONS';\n }\n break;\n case \"events\":\n $scope.params.mailing_type_code = 'EVENTS';\n break;\n case \"program\":\n $scope.params.entity_type = null;\n $scope.params.mailing_type_code = 'PROGRAM';\n $scope.isProgramMail = true;\n\n break;\n default:\n $scope.params.mailing_type_code = 'EVENTS';\n }\n\n Restangular.all('Mailings').getList($scope.params).then(function (templates) {\n\n $scope.mailings = templates;\n\n /*\n Si es de programa, lo metemos automáticamente\n if ($scope.params.entity_type = 'PROGRAM') $scope.mailingChange(templates[0].id)\n */ \n\n })\n\n //Modelos de adjuntos (depende de lo que se le pase por parametros.)\n $scope.showDocuments = true;\n if (typeof ($scope.mail.documents) === \"undefined\") {\n $scope.showDocuments = false;\n } else {\n var optionsValues = {\n entity_type: (options.params.entity_type != null ? options.params.entity_type : null),\n entity_type_id: (options.params.entity_type_id != null ? options.params.entity_type_id : null),\n codes: $scope.mail.documents.codes,\n for_event_guest: $scope.mail.documents.for_event_guest,\n for_event_staff: $scope.mail.documents.for_event_staff,\n for_event_workteam: $scope.mail.documents.for_event_workteam,\n for_correspondence: $scope.mail.documents.for_correspondence\n };\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + 'Documents/GetDocumentsByDocumentsType',\n params: optionsValues\n }).then(function (results, status, headers, config) {\n $scope.documents = results.data.rows;\n $scope.documentsTypes = $scope.documents.map(function (item) { return { code: item.FK_documents_documents_types.code, name: item.FK_documents_documents_types.name } }).filter(function (x, i, a) {\n return a.findIndex(m => m.code === x.code) == i;\n });\n });\n }\n }\n\n $scope.loadCombos();\n\n var languageCode = \"es\"; //$translate.use().toLowerCase();\n $scope.tinymceOptions = {\n\n resize: true,\n forced_root_block: false,\n relative_urls: false,\n convert_urls: false,\n remove_script_host: false,\n height: 100,\n body_class: 'custom_tinymce_content',\n //valid_classes: 'razor_expression',\n language: languageCode,\n paste_as_text: true,\n plugins: 'paste autoresize textcolor image lists advlist table noneditable code link fullpage',\n toolbar: \"undo redo | alignleft aligncenter alignright alignjustify | bold italic forecolor backcolor fontsizeselect | bullist numlist outdent indent link | image | code\",\n menubar: false,\n statusbar: false\n\n };\n\n $scope.options = options;\n\n $scope.changeReplies = function (firstime) {\n if (typeof firstime === 'undefined') firstime = false;\n $scope.replyMailsAccounts = [];\n var reply_to = $scope.mail.mail_account_reply;\n if ($scope.mailsAccounts != null && typeof ($scope.mailsAccounts) !== 'undefined' && $scope.mail.mail_account_id != null && typeof ($scope.mail.mail_account_id) !== 'undefined') {\n $scope.replyMailsAccounts.push($scope.mailsAccounts.find(account => $scope.mail.mail_account_id == account.id).email);\n \n if (!firstime) reply_to = $scope.mailsAccounts.find(account=> $scope.mail.mail_account_id == account.id).reply_to; //solo si cambia el combo\n }\n\n $scope.mail.from = $scope.replyMailsAccounts[0];\n $scope.mail.reply_to = reply_to;\n if ($scope.mail.entity_type == \"events\" && $scope.mail.entity_type_id != null) {\n Restangular.one('Events', $scope.mail.entity_type_id).get().then(function (event) {\n $scope.mail.cco_tmp = event.bcc;\n });\n \n }\n\n\n $scope.replyMailsAccounts.push(user_mail);\n\n };\n\n $scope.newAttachment = function (file) {\n if (file != null) {\n $scope.mail.files.unshift(file);\n $scope.mail.filesToShow.unshift(file);\n }\n };\n\n // Response del modal\n\n $scope.newAttachmentStela = function () {\n\n $scope.$modalInstance = $uibModal.open({\n animation: true,\n template: MailingFilesStelaModalView,\n size: \"lg\",\n controller: \"MailingFilesStelaModalCtrl\",\n scope: $scope,\n resolve: {\n entity_type: function () { return $scope.mail.entity_type },\n entity_type_id: function () { return $scope.mail.entity_type_id != null ? $scope.mail.entity_type_id : null; },\n is_public: function () { return false; },\n folderId: function () { return null; }\n }\n\n });\n\n // Response del modal\n $scope.$modalInstance.result.then(function (data) {\n if (data.length > 0) {\n angular.forEach(data, function (row) {\n\n $scope.mail.filesToShow.push({\n name: row.filename,\n type: row.mimetype\n });\n\n var fileStela = {\n name: row.filename,\n file_id: row.id,\n mimetype: row.mimetype,\n uid: row.uid\n }\n\n $scope.mail.attachments.push(fileStela);\n\n })\n }\n\n }, function () {\n\n });\n\n };\n\n $scope.deleteAttachment = function (item) {\n\n var index = $scope.mail.files.indexOf(item);\n $scope.mail.files.splice(index, 1);\n index = $scope.mail.filesToShow.indexOf(item);\n $scope.mail.filesToShow.splice(index, 1);\n\n };\n $scope.onAccept = function () {\n\n if (angular.isUndefined($scope.mail.addresses)) $scope.mail.addresses = \"\";\n if (angular.isUndefined($scope.mail.cc_tmp)) $scope.mail.cc_tmp = \"\";\n if (angular.isUndefined($scope.mail.cco_tmp)) $scope.mail.cco_tmp = \"\";\n\n if ($scope.mail.addresses == \"\" && $scope.mail.cc_tmp == \"\" && $scope.mail.cco_tmp == \"\" && $scope.showToPart) {\n $scope.message = $filter('translate')('mail.missing_mail_to_cco_cc');\n } else {\n if (angular.isDefined($scope.mail.addresses) && $scope.mail.addresses != \"\" && $scope.mail.addresses != null)\n $scope.mail.to = $scope.mail.addresses.split(\",\");\n if (angular.isDefined($scope.mail.cc_tmp) && $scope.mail.cc_tmp != \"\" && $scope.mail.cc_tmp != null)\n $scope.mail.cc = $scope.mail.cc_tmp.split(\",\");\n if (angular.isDefined($scope.mail.cco_tmp) && $scope.mail.cco_tmp != \"\" && $scope.mail.cco_tmp != null)\n $scope.mail.cco = $scope.mail.cco_tmp.split(\",\");\n\n if ($scope.mail.files.length > 0) {\n Upload.base64DataUrl($scope.mail.files).then(function (urls) {\n for (var i = 0; i < urls.length; i++) {\n $scope.mail.attachments.push({\n name: $scope.mail.files[i].name,\n file_id: $scope.mail.files[i].file_id,\n content: urls[i]\n })\n }\n confirmSend();\n });\n \n } else {\n confirmSend();\n }\n }\n\n\n };\n var confirmSend = function () {\n //Marcamos en este punto si se trata de una invitacion o no (para poner correctamente el icono de error,enviado de invitaciones)\n /*\n Hay varias combinaciones para saber que es invitacion:\n 1. Se selecciona una plantilla que sea de tipo invitacion\n 2. Se adjunta un informe que sea de tipo invitacion.\n 3. Se selecciona una comunicación que tenga una plantilla de tipo invitacion\n 4. Se selecciona una comunicacion que tenga un adjunto de tipo invitacion\n */\n if ($scope.options.template != null && $scope.options.template.is_invitation) {\n //opcion 1 y opcion 3\n $scope.mail.mark_as_sent_invitation = true;\n }\n\n if ($scope.options.params.notificationAttachments.length > 0 && $scope.options.params.notificationAttachments.find(row => row.entity_type === \"INVITATION\") !=null ) {\n //opcion 2 y opcion 4\n $scope.mail.mark_as_sent_invitation = true;\n }\n\n if ($scope.loadBee) {\n BeeService.save().then(function (result) {\n $scope.mail.json = result.json;\n $scope.mail.content = result.html;\n send();\n });\n } else {\n send();\n }\n };\n\n var send = function () {\n\n $log.debug(\"This is the mail :\")\n $log.debug($scope.mail);\n $log.debug($scope.mail.scheduled_date);\n\n if ($scope.mail.scheduled_date != null) {\n $scope.mail.scheduled_date = new Date($scope.mail.scheduled_date); \n }\n if (angular.isUndefined($scope.mail.from) || $scope.mail.from == null) {\n $scope.mail.from = $scope.mailsAccounts.find(account => $scope.mail.mail_account_id == account.id).email;\n }\n\n\n $http({\n method: 'post',\n url: (window as any).CONFIG.api_url + 'NotificationsEmails/SendMail',\n data: $scope.mail\n }).then(function (results, status, headers, config) {\n $uibModalInstance.close(true);\n });\n };\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n $scope.openSearchPerson = function (whereToAdd) {\n $scope.$modalInstance = $uibModal.open({\n animation: true,\n template: SearchPersonsModalView,\n size: \"lg\",\n controller: \"searchPersonsModalCtrl\",\n scope: $scope,\n resolve: {\n options: function () {\n return {};\n }\n }\n });\n\n // Response del modal\n $scope.$modalInstance.result.then(function (data) {\n var mailsSelected = \"\";\n angular.forEach(data, function (row) {\n mailsSelected = (mailsSelected != \"\" ? mailsSelected + \",\" + row : row);\n });\n if (whereToAdd == \"addresses\") {\n $scope.mail.addresses = (typeof ($scope.mail.addresses) !== 'undefined' && $scope.mail.addresses != \"\" ? $scope.mail.addresses + \",\" + mailsSelected: mailsSelected);\n } else if (whereToAdd == \"cc_tmp\") {\n $scope.mail.cc_tmp = (typeof ($scope.mail.cc_tmp) !== 'undefined' && $scope.mail.cc_tmp != \"\" ? $scope.mail.cc_tmp + \",\" +mailsSelected: mailsSelected);\n } else if (whereToAdd == \"cco_tmp\") {\n $scope.mail.cco_tmp = (typeof ($scope.mail.cco_tmp) !== 'undefined' && $scope.mail.cco_tmp != \"\" ? $scope.mail.cco_tmp + \",\" +mailsSelected: mailsSelected);\n }\n if (!$scope.$$phase) $scope.$apply();\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n if (!$scope.$$phase) $scope.$apply();\n });\n };\n\n $scope.loadTemplate = function (template_id) {\n if (typeof (template_id) !== \"undefined\" && template_id !== null && template_id !== \"\") {\n if (options.params.entity_type === \"events\") {\n Restangular.one('Templates', template_id).get().then(function(result) {\n $scope.options.template = result;\n });\n Restangular.all(\"NotificationsTemplates\").customGET(\"LoadTemplateFromEmailsFromEvent\", { event_id: options.params.entity_type_id, template_id: template_id }).then(function (res) {\n if (res.content!=null && res.content !== \"\" && typeof (res.content) !== \"undefined\") {\n $scope.mail.content = res.content;\n if (res.json != null && res.json !== \"\") {\n $scope.loadBee = true;\n BeeService.reload(JSON.parse(res.json));\n } else {\n $scope.loadBee = false;\n }\n } else {\n $scope.reloadTemplate(template_id);\n }\n });\n } else {\n $scope.reloadTemplate(template_id);\n }\n } else {\n $scope.mail.content = \"\";\n }\n }\n\n $scope.reloadTemplate = function (template_id) {\n if (typeof (template_id) !== \"undefined\" && template_id !== null && template_id !== \"\") {\n\n Restangular.all(\"NotificationsTemplates\").customGET(\"LoadTemplate\", { template_id: template_id }).then(function (res) {\n if (res !== \"\" && typeof (res) !== \"undefined\") {\n if (res.json != null) {\n $scope.loadBee = true;\n BeeService.reload(JSON.parse(res.json));\n $scope.mail.content = res.html;\n $scope.mail.json = res.json;\n } else {\n $scope.loadBee = false;\n $scope.mail.content = res.html;\n } \n } else {\n\n //options.content = template.FK_templates_tl_templates[0].html;\n toastr.error(\"Ha ocurrido un error, no se encuentra el template original\");\n\n }\n });\n } else {\n $scope.mail.content = \"\";\n }\n }\n\n $scope.openDocumentsModal = function (document_code) {\n if (document_code != null && document_code != \"\") {\n var params = {\n entity_type: (options.params.entity_type != null ? options.params.entity_type : null),\n entity_type_id: (options.params.entity_type_id != null ? options.params.entity_type_id : null),\n documents: { codes: [document_code] }\n };\n generateDocumentService.documentNew({\n params: params,\n onAccept: function (data) {\n //se lo añadimos a los files....\n var doc = {name: data[0].document_name}\n $scope.mail.filesToShow.unshift(doc);\n $scope.mail.notificationAttachments.unshift({ name: data[0].document_name, entity_type: data[0].document_type_code, entity_type_id: data[0].document_id, uid: data[0].uid })\n $scope.mail.document_code = null;\n }\n });\n }\n }\n\n $scope.refreshRecipients = function() {\n\n $http({\n method: 'post',\n url: (window as any).CONFIG.api_url + 'NotificationsEmails/GetRecipientMails',\n data: $scope.mail\n }).then(function (results, status, headers, config) {\n let arr = [];\n $scope.recipientData = results.data.event_guests_ids_mails;\n console.log(results);\n });\n };\n\n $scope.showRecipients = function() {\n $scope.showRecipientList = !$scope.showRecipientList;\n if($scope.showRecipientList) {\n $scope.refreshRecipients();\n }\n };\n\n $scope.mailingChange = function (mailing_id) {\n Restangular.one('Mailings', mailing_id).get().then(function (result) {\n $scope.mail.subject = result.subject;\n $scope.mail.preheader = result.preheader;\n $scope.mail.mail_from = result.mail_account_id;\n $scope.mail.mail_account_id = result.mail_account_id;\n $scope.mail.cco_tmp = result.cco;\n $scope.mail.ics = result.ics;\n $scope.mail.template_id = result.template_id;\n $scope.options.template = result.FK_mailing_template;\n $scope.mail.content = result.content;\n $scope.mail.filesToShow = [];\n $scope.mail.files = [];\n $scope.mail.attachments = [];\n $scope.mail.notificationAttachments = [];\n //$scope.loadTemplate($scope.mail.template_id);\n $scope.blocked_all = true;\n \n if(result.json != null && result.json !== \"\") {\n $scope.loadBee = true;\n BeeService.reload(JSON.parse(result.json));\n } else {\n $scope.loadBee = false;\n }\n \n $scope.mailing = result;\n $scope.mailing.filesToShow = [];\n if (result.FK_mailing_attachment_mailing.length > 0) {\n angular.forEach(result.FK_mailing_attachment_mailing, function (row) {\n if (row.document_id == 0 || row.document_id ==null) {\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + 'MailingsAttachment/getFile?uid=' + row.uid + \"&filename=\" + row.name+\"&file_id=\"+row.file_id,\n responseType: 'arraybuffer'\n }).then(function (results, status, headers, config) {\n var contentType = row.mimetype;\n var filename = row.name;\n\n var file = new Blob([results], { type: contentType });\n file['name'] = filename;\n $scope.mail.files.push(file);\n });\n } else {\n Restangular.one(\"Documents\", row.document_id).get().then(function (res){\n $scope.mail.notificationAttachments.unshift({ name: row.name, entity_type: res.FK_documents_documents_types.code, entity_type_id: row.document_id })\n });\n \n }\n\n $scope.mail.filesToShow.push(row);\n \n });\n }\n });\n }\n\n }]);\n","import BreadcrumbView from '../../common/breadcrumb/breadcrumb.html';\nimport ForbiddenView from './forbidden.html';\n\n\nangular.module(\"forbidden\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('forbidden', {\n url: \"/forbidden\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n })\n .state('forbidden.list', {\n url: \"/list\",\n controller: \"ForbiddenCtrl\",\n template: ForbiddenView\n })\n ;\n }])\n\n .controller('ForbiddenCtrl', ['$scope', function ($scope) {\n \n }])\n;","\nangular.module(\"people_import\", [])\n\n .controller(\"PeopleImportCtrl\", ['$state', '$timeout', '$stateParams', 'Restangular', '$scope', '$rootScope', '$http', '$filter', 'modalService', '$uibModal', 'gridService', \n function ($state, $timeout, $stateParams, Restangular, $scope, $rootScope, $http, $filter, modalService, $uibModal, gridService) {\n\n $scope.genders = [{ id: 'M', name: $filter(\"translate\")('persons.gender_male') }, { id: 'F', name: $filter(\"translate\")('persons.gender_female') }, { id: 'N', name: $filter(\"translate\")('persons.gender_neutral') }];\n $scope.totalPeople = 0;\n $scope.treatments = [];\n\n $scope.check = { dataFullyLoaded: false };\n\n Restangular.one('Companies', $rootScope.company_id).get().then(function (results) {\n\n $scope.military_groups_enabled = results.military_groups_enabled;\n let militaryPositionColumn = $scope.gridPeopleImport.columnDefs.filter((m) => m.name == \"Position_militar\");\n militaryPositionColumn.pop().visible = results.military_groups_enabled;\n\n });\n\n $scope.actions = function (rowEntity) {\n\n if (rowEntity.Duplicate) {\n return [\n { id: 'import', name: \"Importar\" },\n { id: 'ignore', name: \"Ignorar\" },\n { id: 'invite', name: \"Sólo invitar\" },\n { id: 'add_position', name: \"Agregar cargo\" },\n ];\n } else {\n return [\n { id: 'import', name: \"Importar\" },\n { id: 'ignore', name: \"Ignorar\" },\n ];\n }\n\n };\n\n Restangular.all('PersonsTreatments').getList().then(function (data) {\n angular.forEach(data, function (value, key) {\n $scope.treatments.push({ id: value.name, name: value.name });\n });\n });\n\n $scope.selectedRows = [];\n\n $scope.rowFormatter = function (row) {\n return row.entity.Duplicate != null && !row.entity.matched_guest_id;\n };\n\n $scope.rowTitleParser = function (row) {\n\n if (row.entity.Duplicate != null && row.entity.matched_guest_id) {\n\n return $filter(\"translate\")('persons.imported_invited_duplicates');\n\n } else if (row.entity.Duplicate != null) {\n\n return $filter(\"translate\")('persons.imported_database_duplicate');\n\n } else {\n\n return \"\";\n\n };\n\n };\n\n $scope.gridPeopleImport = {\n // enableGridMenu: true,\n paginationPageSizes: 200,\n paginationPageSize: 200,\n enableScrollbars: false,\n enableRowSelection: true,\n enableSelectAll: true,\n onRegisterApi: function (gridApi) {\n\n $scope.gridApi = gridApi;\n callbackFunctionGridResize();\n this.gridApi = gridApi;\n this.gridApi.pagination.on.paginationChanged($scope, this.gridApi.selection.clearSelectedRows);\n this.gridApi.pagination.on.paginationChanged($scope, callbackFunctionGridResize);\n\n },\n columnDefs: [\n {\n name: 'Name', displayName: $filter('translate')('general.name'), minWidth: 150,\n cellTemplate: '
' +\n '
'\n +''\n +'{{ row.entity.Name }}
'\n },\n {\n name: 'Surname', displayName: $filter('translate')('persons.surname'),\n cellTemplate: '
' +\n '{{grid.getCellValue(row, col)}}' +\n '
'\n },\n {\n name: 'Lastname', displayName: $filter('translate')('persons.lastname'),\n cellTemplate: '
' +\n '{{grid.getCellValue(row, col)}}' +\n '
' },\n /*{\n name: 'Gender', displayName: $filter('translate')('persons.gender'), editableCellTemplate: 'ui-grid/dropdownEditor', \n cellFilter: 'mapGender', editDropdownValueLabel: 'name', editDropdownOptionsArray: $scope.genders, width: 60,\n cellTemplate: '
' +\n '{{grid.getCellValue(row, col) | mapGender}}' +\n '
'\n },*/\n {\n name: 'Accreditation', displayName: $filter('translate')('events.guests.accreditation'),\n cellTemplate: '
' +\n '{{grid.getCellValue(row, col)}}' +\n '
' \n },\n {\n name: 'Email', displayName: $filter('translate')('persons.mail'),\n cellTemplate: '
' +\n '{{grid.getCellValue(row, col)}}' +\n '
' },\n {\n name: 'NumIdentification', displayName: 'DNI /NIE',\n cellTemplate: '
' +\n '{{grid.getCellValue(row, col)}}' +\n '
' /* $filter('translate')('persons.num_identification') */\n },\n {\n name: 'Position', displayName: $filter('translate')('persons.position'),\n cellTemplate: '
' +\n '{{grid.getCellValue(row, col)}}' +\n '
'\n },\n {\n visible: false,\n name: 'Position_militar', displayName: $filter('translate')('persons.position_militar'),\n cellTemplate: '
' +\n '{{grid.getCellValue(row, col)}}' +\n '
'\n },\n // {\n // name: 'PositionTreatment', displayName: $filter('translate')('persons.treatment_position'), width: 100, editableCellTemplate: 'ui-grid/dropdownEditor',\n // editDropdownValueLabel: 'name', editDropdownOptionsArray: $scope.treatments\n // },\n {\n name: 'Institution', displayName: $filter('translate')('persons.institution'),\n cellTemplate: '
' +\n '{{grid.getCellValue(row, col)}}' +\n '
' },\n {\n name: 'Group1', displayName: $filter('translate')('persons.group') + \" 1\",\n cellTemplate: '
' +\n '{{grid.getCellValue(row, col)}}' +\n '
' },\n {\n name: 'Action', displayName: $filter('translate')('events.guests.actions'), width: 150, editableCellTemplate: 'ui-grid/dropdownEditor', \n editDropdownValueLabel: 'name', cellFilter: 'mapActionGroup', editDropdownOptionsFunction: function (rowEntity, colDef) {\n return $scope.actions(rowEntity);\n },\n },\n {\n name: ' ',\n exporterSuppressExport: true,\n enableSorting: false,\n enableHiding: false,\n enableFiltering: false,\n enableColumnMenu: false,\n cellTemplate: gridService.actionTemplate([\n {\n title: $filter('translate')('events.user_view'),\n action: 'ng-click=\"grid.appScope.showDuplicate(row.entity)\" ng-if=\"row.entity.Duplicate != null\"',\n cssIconClass: \"fa fa-file\"\n },\n ], {cssClass: \"pull-right\"})\n }\n ],\n // expandableRowTemplate: 'app/common/people_import/expandable_row_people_import.html',\n rowTemplate: '
' +\n '
' +\n '
'\n };\n\n $scope.importOptions = function (people, event_id, person_type, group_id, menu_item_id) {\n\n // $log.debug(people);\n\n $scope.event_id = event_id;\n $scope.person_type = person_type;\n $scope.group_id = group_id;\n $scope.totalPeople = people.length;\n menu_item_id ? $scope.menu_item_id = menu_item_id : $scope.menu_item_id = 1;\n\n /*\n angular.forEach(people, function (row) {\n row.subGridOptions = {\n columnDefs: [\n { name: 'NotesPerson', displayName: $filter('translate')('persons.notes')},\n { name: 'NotesGuest', displayName: $filter('translate')('events.guests.guests_notes')},\n { name: 'Email2', displayName: $filter('translate')('persons.mail') + \" 2\" },\n { name: 'Phone', displayName: $filter('translate')('persons.phone') },\n { name: 'Group4', displayName: $filter('translate')('persons.group') + \" 4\" },\n { name: 'Group5', displayName: $filter('translate')('persons.group') + \" 5\" }\n ],\n data: [ row ]\n };\n */\n\n people.forEach(function (person) {\n // Asignamos el género correctamente para que aparezca bien en el listado\n switch (person.Gender.toLowerCase()) {\n case \"m\":\n case \"hombre\":\n case \"male\":\n case \"masculino\":\n person.Gender = \"M\";\n break;\n case \"n\":\n case \"neutro\":\n case \"neutral\":\n case \"ninguno\":\n person.Gender = \"N\";\n break;\n\n case \"f\":\n case \"mujer\":\n case \"female\":\n case \"femenino\":\n person.Gender = \"F\";\n break;\n }\n });\n\n let index = 0;\n\n // Lo pongo aquí para controlar que se ha cargado todo correctament en importaciones largas\n Promise.all(people.map((p) => p = { ...p, gridId: index++ })).then(function (data) {\n $scope.gridPeopleImport.data = data;\n $scope.check.dataFullyLoaded = true;\n toastr.success($filter('translate')('events.importation_data_fully_loaded'));\n callbackFunctionGridResize();\n });\n/*\n index = 0;\n $scope.gridPeopleImport.data = people.map((p) => p = { ...p, gridId: index++ });\n $log.debug('He aquí los maravillosos datos de este lindo CVS')\n $log.debug($scope.gridPeopleImport.data)\n*/\n }\n \n // Función a mano para gestionar el grid\n let callbackFunctionGridResize = function () {\n\n let visibleRows = $scope.gridPeopleImport.data.length - ($scope.gridPeopleImport.paginationPageSize * ($scope.gridPeopleImport.paginationCurrentPage - 1));\n\n if (visibleRows > $scope.gridPeopleImport.paginationPageSize) visibleRows = $scope.gridPeopleImport.paginationPageSize;\n $scope.gridSize = visibleRows * 30.05 + 100;\n\n }; \n\n // Acciones masivas \n $scope.massiveImport = function () { $scope.gridApi.selection.getSelectedRows().forEach(r => r.Action = 'import') }\n $scope.massiveInvite = function () {\n\n let selectedRows = $scope.gridApi.selection.getSelectedRows();\n selectedRows.forEach(function (r) {\n if (r.Duplicate != null) {\n r.Action = 'invite';\n }\n });\n\n // Si la acción no es compatible con todas las filas, sacamos mensaje. \n if (selectedRows.some(r => r.Duplicate == null)) {\n\n modalService.message({\n title: \"Acción no compatible con todos los elementos\",\n message: \"Esta acción requiere que el invitado tenga una coincidencia en la aplicación, solo se ha aplicado a los invitados pertinentes\",//$filter('translate')('events.image_size_limit') + \"
\" + limit_image_width + \"X\" + limit_image_height,\n onAccept: function () { }\n });\n\n }\n }\n\n $scope.massiveIgnore = function () { $scope.gridApi.selection.getSelectedRows().forEach(r => r.Action = 'ignore') }\n\n $scope.massiveAddPosition = function () {\n\n let selectedRows = $scope.gridApi.selection.getSelectedRows();\n\n selectedRows.forEach(function (r) {\n if (r.Duplicate != null) {\n r.Action = 'add_position';\n }\n }); \n\n if (selectedRows.some(r => r.Duplicate == null)) {\n\n modalService.message({\n title: $filter('translate')('events.import_massive_action_warning'), //\"Acción no compatible con todos los elementos\",\n message: $filter('translate')('events.import_massive_action_warning_message'), //\"Esta acción requiere que el invitado tenga una coincidencia en la aplicación. Solo se ha aplicado a los invitados pertinentes.\",//$filter('translate')('events.image_size_limit') + \"
\" + limit_image_width + \"X\" + limit_image_height,\n onAccept: function () { }\n });\n\n }\n }\n\n $scope.import = function () {\n\n let people = [];\n angular.forEach($scope.gridPeopleImport.data, function (row) {\n let person: any = {};\n angular.copy(row, person);\n person.subGridOptions = null;\n people.push(person);\n });\n\n let request = {\n people: people,\n person_type: $scope.person_type\n };\n\n Restangular.all('Persons').customPOST(request, \"Import\", {event_id: $scope.event_id, group_id: $scope.group_id}).then(function (result) {\n if ($scope.event_id != null && $scope.event_id != 0) {\n\n // GOBACKHERE\n $state.go('events.edit.guests', { id: $scope.event_id, menu_item_id: $scope.menu_item_id });\n\n } else if($scope.group_id != null && $scope.group_id != 0) {\n $state.go('groups.list');\n } else if($scope.person_type != null && $scope.person_type !== \"\") {\n $state.go('persons.list', { person_type: $scope.person_type });\n }\n\n }, function (error) {\n\n let exceptionString = error.data.ExceptionMessage.split('/');\n let exceptionMessage = exceptionString[0];\n let exceptionExtraInfo = exceptionString[1];\n let exceptionRowInfo = exceptionString[2]; \n\n modalService.message({\n title: $filter('translate')('events.guests.invalid_csv_title_boring'),\n message: (exceptionRowInfo ? $filter('translate')('events.guests.row') + \" \" + exceptionRowInfo + \": \" : \"\") + (exceptionExtraInfo ? $filter('translate')(exceptionExtraInfo) + \" \": \"\") + $filter('translate')(exceptionMessage),\n onAccept: function () {\n $state.go('events.edit.guests', { id: $scope.event_id, menu_item_id: $scope.menu_item_id });\n },\n onCancel: function() {\n $state.go('events.edit.guests', { id: $scope.event_id, menu_item_id: $scope.menu_item_id });\n }\n\n });\n }\n\n );\n\n };\n\n $scope.cancel = function () {\n $state.go('events.edit.guests', { id: $scope.event_id, menu_item_id: $scope.menu_item_id });\n };\n\n $scope.showDuplicate = function (rowEntity) {\n let url = $state.href('persons.edit', { id: rowEntity.Duplicate, person_type: rowEntity.PersonType });\n window.open(url, '_blank');\n };\n\n\n\n}])\n.filter('mapGender', function() {\n let genderHash = {\n 'M': 'Hombre',\n 'F': 'Mujer',\n 'N': 'Neutro'\n };\n\n return function(input) {\n if (!input){\n return '';\n } else {\n return genderHash[input];\n }\n };\n})\n .filter('mapActionGroup', function () {\n let actionHash = {\n 'import': 'Importar',\n 'ignore': 'Ignorar',\n 'invite': 'Sólo invitar',\n 'add_position': 'Agregar cargo',\n };\n\n return function(input) {\n if (!input){\n return '';\n } else {\n return actionHash[input];\n }\n };\n\n});\n","angular.module('notifications')\n\n .controller('PushNotificationsCtrl', ['$scope', '$uibModalInstance', '$uibModal', '$http', 'options', 'Restangular', '$filter', 'LoginService', 'modalService', '$log',\n function ($scope, $uibModalInstance, $uibModal, $http, options, Restangular, $filter, LoginService, modalService, $log) {\n\n $scope.notification = options.params;\n $log.debug(\"hhsfjhsaklfas�saf�a\")\n $log.debug(options.params);\n $log.debug($scope);\n $log.debug($scope.notification);\n $scope.notificationTypes = [];\n\n let loadCombos = function () {\n Restangular.all('PushNotifications/Types').getList().then(function (notificationsTypes) {\n $log.debug(notificationsTypes);\n $scope.notificationTypes = notificationsTypes;\n });\n }\n\n loadCombos();\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n $scope.onAccept = function () {\n $log.debug($scope.notification);\n Restangular.all('PushNotifications').post($scope.notification).then(function (result) {\n $log.debug(result);\n });\n $uibModalInstance.close();\n };\n }])\n\n;\n \n","import VersionModalView from '../topnavbar/versionModal.html';\n\n\nangular.module(\"topnavbar\", ['ui.bootstrap'])\n\n .controller('topnavbarCtrl', ['$uibModal', '$scope', '$translate', 'Restangular', '$state', '$http', '$rootScope', 'LoginService', '$log',\n function ($uibModal, $scope, $translate, Restangular, $state, $http, $rootScope, LoginService, $log) {\n\n $scope.currentDate = new Date();\n\n Restangular.all('Languages').getList({ use_for_interface: true }).then(function (languages) {\n $scope.languages = languages;\n angular.forEach(languages, function (lang) {\n if (lang.code == LoginService.get(\"language\")) {\n $rootScope.languageId = lang.id;\n }\n });\n });\n\n $rootScope.roles_permissions = LoginService.get(\"rolesPermissions\");\n\n $scope.changeLanguage = function (key, languageId) {\n $translate.use(key);\n let language = key;\n $rootScope.language = key;\n// setCookie(\"language\", key, 10);\n $http.defaults.headers.common[\"language_code\"] = key;\n $rootScope.languageId = languageId;\n $rootScope.$broadcast(\"language-change\", { key: key });\n $state.reload();\n };\n\n $scope.changeTheme = function (theme) {\n $rootScope.theme = theme;\n localStorage.setItem(\"theme\", theme);\n };\n\n $scope.versions = [];\n\n $rootScope.showVersion = function () {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: VersionModalView,\n controller: \"VersionModalCtrl\",\n resolve: {\n project_code: function () {\n return (window as any).CONFIG.PROJECT_CODE;\n },\n version: function () {\n return $scope.versions[0];\n }\n }\n });\n }\n }])\n .controller('topnavbarSearchCtrl', ['$uibModal', '$scope', '$translate', 'Restangular', '$state', '$http', '$rootScope', 'LoginService', function ($uibModal, $scope, $translate, Restangular, $state, $http, $rootScope, LoginService) {\n $scope.asyncSelected = '';\n \n $scope.itemSelected = function ($item, $model, $label) {\n let stateName: string | null = null;\n let stateParams: any = { id: $item.id };\n if($item.entity === 'person' || $item.related_entity === 'person') {\n stateName = 'persons.edit';\n stateParams.person_type = 'authority';\n } else if($item.entity === 'group' || $item.related_entity === 'group') {\n stateName = 'groups.edit';\n } else if($item.entity === 'event') {\n stateName = 'events.edit';\n stateParams.is_template = false;\n } else if($item.entity === 'correspondence') {\n stateName = 'correspondence.edit';\n } else if($item.entity === 'gift') {\n stateName = 'gifts.edit';\n } else if($item.entity === 'restaurant') {\n stateName = 'restaurants.edit';\n } else if($item.entity === 'material') {\n stateName = 'materials.edit';\n } else if($item.entity === 'space') {\n stateName = 'spaces.list';\n stateParams = {};\n }\n if(stateName != null) {\n if($item.related_entity_id !== undefined && $item.related_entity_id > 0) {\n stateParams.id = $item.related_entity_id;\n }\n $state.go(stateName, stateParams);\n }\n };\n \n $scope.getTerms = function(val) {\n return Restangular.all('search?term=' + val).getList().then(function (searchTerms) {\n return searchTerms;\n });\n };\n\n }])\n .controller(\"VersionModalCtrl\", ['$scope', '$uibModalInstance', 'Restangular', 'version', 'modalService', '$log', function ($scope, $uibModalInstance, Restangular, version, modalService, $log) {\n\n var url = (window as any).CONFIG.version_info_url + 'releasenotes/projects/' + (window as any).CONFIG.PROJECT_CODE + '?' + \"_sortBy=date\" + \"&\" + \"_sortDirection=desc\";\n $scope.versions = [\n ];\n\n // Parece ser que han cambiado la API y que ahora \"success\" y \"error\" van dentro del diccionario. \n\n $.ajax({\n type: \"GET\",\n url: url,\n xhrFields: {\n withCredentials: false\n },\n success: function (data) {\n $log.debug(\"Success:\")\n $log.debug(data);\n $scope.versions = data.rows;\n if ($scope.versions.length > 0) $scope.versions[0].isOpen = true;\n if (!$scope.$$phase) $scope.$apply();\n },\n error: function (data) {\n\n $log.error(\"Error:\");\n $log.error(data);\n }\n })\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n\n }])\n\n/**\n * minimalizaSidebar - Directive for minimalize sidebar\n*/\n.directive('minimalizaSidebar',['$timeout', function minimalizaSidebar($timeout) {\n return {\n restrict: 'A',\n template: '',\n controller: ['$scope', '$element', function ($scope, $element) {\n $scope.minimalize = function () {\n $(\"body\").toggleClass(\"mini-navbar\");\n if (!$('body').hasClass('mini-navbar') || $('body').hasClass('body-small')) {\n // Hide menu in order to smoothly turn on when maximize menu\n $('#side-menu').hide();\n // For smoothly turn on menu\n $timeout(function () {\n $('#side-menu').fadeIn(500);\n }, 100);\n } else {\n // Remove all inline style from jquery fadeIn function to reset menu state\n $('#side-menu').removeAttr('style');\n }\n $(window).trigger(\"resize\");\n }\n }]\n };\n}])\n\n\n\n","import './companies';\nimport './companies-list';\nimport './companies-edit'; ","angular.module(\"companies\")\n\n .controller(\"CompaniesEditCtrl\", ['$rootScope', '$scope', '$http', '$stateParams', 'Restangular', '$state', 'modalService','$filter', function ($rootScope, $scope, $http, $stateParams, Restangular, $state, modalService, $filter) {\n\n $scope.noImage = \"/assets/img/no-image.png\";\n\n $scope.tinymceOptions = {\n resize: true,\n forced_root_block: false,\n\n relative_urls: false,\n convert_urls: false,\n remove_script_host: false,\n\n height: 60,\n body_class: 'custom_tinymce_content',\n //valid_classes: 'razor_expression',\n language: 'es',\n paste_as_text: true,\n plugins: 'paste autoresize textcolor image lists advlist table noneditable code link',\n toolbar: \"undo redo | alignleft aligncenter alignright alignjustify | bold italic forecolor backcolor fontsizeselect | bullist numlist outdent indent link | table | image | code\",\n menubar: false,\n statusbar: false,\n setup: function (editor) {\n\n }\n };\n \n $scope.configureLanguages = function () {\n if ($scope.company != null && $scope.languages != null) {\n angular.forEach($scope.company.FK_companies_languages_companies, function (companyLanguage) {\n var languages = $filter('filter')($scope.languages, { id: companyLanguage.language_id }, 1);\n languages[0].use_for_interface = companyLanguage.use_for_interface;\n languages[0].use_for_translation = companyLanguage.use_for_translation;\n });\n }\n };\n\n //cargando lenguajes\n Restangular.all('Languages').getList().then(function (results) {\n $scope.languages = results;\n $scope.configureLanguages();\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n\n\n //Opciones de menú\n /*\n * De momento lo dejamos en un input sencillo\n * \n $scope.menu_options = [\n\n {\n name: $filter('translate')('companies.menu_classic'),\n code: \"FRONTEND\",\n },\n {\n name: $filter('translate')('companies.menu_new'),\n code: \"FRONTEND_NEW\",\n }\n ]\n */\n $rootScope.title = $filter('translate')('companies.title');\n if (angular.isUndefined($stateParams.id) || $stateParams.id == \"\" ) {\n \n $rootScope.breadcrumb = [\n { title: $filter('translate')('companies.list'), url: \"companies.list\" },\n { title: $filter('translate')('companies.add') }\n ];\n $scope.company = {\n name: '',\n created_at: new Date()\n };\n\n $scope.company.program_mail_list_array = [];\n $scope.company.article_12 = true;\n $scope.selectPrecededDefault = [{ id: \"article12\", name: \"article 12\" }];\n $scope.company.default_order_article = \"article12\";\n\n }\n else {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('companies.list'), url: \"companies.list\" },\n { title: $filter('translate')('companies.edit') }\n ];\n Restangular.one('Companies', $stateParams.id).get().then(function (results) {\n $scope.company = results;\n $scope.configurations = $scope.company.configurations;\n\n // Convertimos el listado en un array para que funcione con chips\n if ($scope.company.configurations.filter(m => m.code == 'PROGRAM_EMAIL_LIST').length > 0) {\n let programMailList = $scope.company.configurations.filter(m => m.code == 'PROGRAM_EMAIL_LIST')[0].value;\n if (programMailList && programMailList.length > 0) $scope.company.program_mail_list_array = $scope.company.configurations.filter(m => m.code == 'PROGRAM_EMAIL_LIST')[0].value.split(',');\n }\n\n $scope.configureLanguages();\n $scope.loadComboPreceded();\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n\n $scope.addFile = function (flowFile) {\n\n var fileReader = new FileReader();\n fileReader.onload = function (event) {\n var uri = event.target.result;\n $scope.$apply(function () {\n $scope.company.logo = uri;\n });\n };\n fileReader.readAsDataURL(flowFile.file);\n\n };\n\n\n $scope.saveCompany = function () {\n\n //generamos datos de lenguajes\n var finalCompanyLanguages = [];\n\n // Sacamos del array los correos para guardarlos en la configuración. \n if (typeof ($scope.company.configurations) !== \"undefined\") {\n if ($scope.company.configurations.filter(m => m.code == 'PROGRAM_EMAIL_LIST').length > 0 && $scope.company.program_mail_list_array) {\n $scope.company.configurations.filter(m => m.code == 'PROGRAM_EMAIL_LIST')[0].value = $scope.company.program_mail_list_array.join(',');\n }\n }\n\n angular.forEach($scope.languages, function (language) {\n\n var companyLanguages = $filter('filter')($scope.company.FK_companies_languages_companies, { language_id: language.id }, 1);\n\n var companyLanguage: any = {};\n if (typeof(companyLanguages) !== \"undefined\" && companyLanguages.length > 0) companyLanguage = companyLanguages[0];\n companyLanguage.company_id = $scope.company.id;\n companyLanguage.language_id = language.id;\n companyLanguage.use_for_interface = language.use_for_interface ? language.use_for_interface : false;\n companyLanguage.use_for_translation = language.use_for_translation ? language.use_for_translation : false;\n finalCompanyLanguages.push(companyLanguage);\n\n });\n\n $scope.company.FK_companies_languages_companies = finalCompanyLanguages;\n\n if (angular.isUndefined($stateParams.id) || $stateParams.id == \"\")\n Restangular.all('Companies').post($scope.company).then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('companies.create_success'));\n $state.go(\"companies.list\");\n } else {\n $scope.errorMessage = result.message;\n }\n });\n else {\n $scope.company.put().then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('companies.edit_success'));\n $state.go(\"companies.list\");\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n };\n\n $scope.loadComboPreceded = function () {\n $scope.company.article_10;\n $scope.company.article_12;\n if ($scope.company.article_10 && $scope.company.article_12) {\n $scope.selectPrecededDefault = [{ id: \"article12\", name: \"article 12\" }, { id: \"article10\", name: \"article 10\" }];\n }\n if ($scope.company.article_10 && !$scope.company.article_12) {\n $scope.selectPrecededDefault = [{ id: \"article10\", name: \"article 10\" }];\n }\n if (!$scope.company.article_10 && $scope.company.article_12) {\n $scope.selectPrecededDefault = [{ id: \"article12\", name: \"article 12\" }];\n }\n if (!$scope.company.article_10 && !$scope.company.article_12) {\n $scope.selectPrecededDefault = [{}];\n }\n }\n\n $scope.deleteCompany = function () {\n\n modalService.confirm({\n title: $filter('translate')('companies.delete_button'),\n message: $filter('translate')('companies.delete_messafe')+\" \" + $scope.company.name + \"?\",\n onAccept: function () {\n Restangular.one('Companies', $stateParams.id).remove().then(function () {\n toastr.success($filter('translate')('companies.delete_success'));\n $state.go(\"companies.list\");\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n });\n\n };\n\n }])\n\n;","angular.module(\"companies\")\n\n .controller('CompaniesListCtrl', ['$rootScope', '$scope', 'Restangular', 'gridService', 'modalService', 'uiGridConstants', '$filter', 'LoginService', '$state', function ($rootScope, $scope, Restangular, gridService, modalService, uiGridConstants, $filter, LoginService, $state) {\n\n if (!LoginService.permissionExist(\"P_MODIFY_USER_COMPANY\"))\n $state.go(\"companies.edit\", { id: LoginService.get(\"companyId\") });\n\n $rootScope.title = $filter('translate')('companies.title');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('companies.list') }\n ];\n\n \n $scope.gridOptionsCompanies = {\n pdfTitle: $filter('translate')('companies.pdf_title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n paginationPageSizes: [10, 20, 30],\n paginationPageSize: 10,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n { name: 'name', displayName: $filter('translate')('companies.name'), enableFiltering: true, enableHiding: false, enableColumnMenu: false },\n { name: 'address', displayName: $filter('translate')('companies.address'), enableFiltering: true, enableHiding: false, enableColumnMenu: false },\n { name: 'phone_1', displayName: $filter('translate')('companies.phone_1'), enableFiltering: true, enableHiding: false, enableColumnMenu: false },\n { name: 'email', displayName: $filter('translate')('companies.email'), enableFiltering: true, enableHiding: false, enableColumnMenu: false },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('companies.button_edit'), action: 'ui-sref=\"companies.edit({id:row.entity.id})\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('companies.button_delete'), action: 'ng-click=\"grid.appScope.BorrarDialog(row.entity.id,row.entity.name);\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n return Restangular.all('Companies').getList(options);\n }\n \n };\n\n $scope.goToEdit = function (rowEntity) {\n $state.go(\"companies.edit\", { id: rowEntity.id });\n }\n\n $scope.BorrarDialog = function (id,name) {\n $scope.id = id;\n $scope.name = name;\n modalService.confirm({\n title: $filter('translate')('companies.button_delete'),\n message: $filter('translate')('companies.delete_message')+\" \"+ + $scope.name + \"?\",\n onAccept: function () {\n Restangular.one('Companies', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('companies.delete_success'));\n $scope.gridOptionsCompanies.gridApi.core.raise.itemDeleted($scope);\n \n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n });\n\n };\n\n\n }])\n\n;","import breadcrumbTemplate from \"../common/breadcrumb/breadcrumb.html\";\nimport companiesListTemplate from \"./companies-list.html\";\nimport companiesEditTemplate from \"./companies-edit.html\";\n\n\nangular.module(\"companies\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('companies', {\n url: \"/companies\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: breadcrumbTemplate,\n })\n .state('companies.list', {\n url: \"/list\",\n controller: \"CompaniesListCtrl\",\n template: companiesListTemplate,\n data: { pageTitle: 'Compañias' }\n })\n .state('companies.edit', {\n url: \"/edit/:id\",\n controller: \"CompaniesEditCtrl\",\n template: companiesEditTemplate,\n data: { pageTitle: 'Compañias' }\n })\n ;\n }])\n;","import './contact_types';\nimport './contact_types-list';\nimport './contact_types-edit';","\nimport toastr from 'toastr';\n\nangular.module(\"contact_types\")\n\n .controller(\"ContactTypesEditCtrl\", ['LoginService', '$scope', '$rootScope', '$state', '$stateParams', 'Restangular', 'gridService', '$filter', '$translate', 'modalService', '$uibModal', '$log',\n function (LoginService, $scope, $rootScope, $state, $stateParams, Restangular, gridService, $filter, $translate, modalService, $uibModal, $log) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"CONTACT_TYPES_WRITE\");\n\n $scope.id = $stateParams.id;\n $rootScope.title = $filter('translate')('contact_types.title');\n $scope.contact_type = {};\n\n if (angular.isUndefined($stateParams.id) || $stateParams.id == \"\") {\n\n $rootScope.breadcrumb = [\n { title: $filter('translate')('contact_types.title'), url: \"contact_types.list\" },\n { title: $filter('translate')('contact_types.title_add') },\n ];\n\n } else {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('contact_types.title'), url: \"contact_types.list\" },\n { title: $filter('translate')('contact_types.title_edit') },\n ];\n\n Restangular.one('ContactsTypes', $scope.id).get().then(function (result) {\n $scope.contact_type = result;\n $log.debug($scope.contact_type)\n });\n }\n\n $scope.saveContactType = function () {\n $log.debug(\"Este es el tipo de contacto\")\n $log.debug($scope.contact_type);\n if (angular.isDefined($scope.id) && $scope.id != \"\") {\n $scope.contact_type.put().then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('contact_types.save_success'));\n $state.go(\"contact_types.list\");\n } else {\n $scope.errorMessage = result.message;\n }\n });\n } else {\n Restangular.all('ContactsTypes').post($scope.contact_type).then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('contact_types.edit_success'));\n $state.go(\"contact_types.list\");\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n }\n\n $scope.checkDelete = function () {\n modalService.confirm({\n title: $filter('translate')('contact_types.button_delete'),\n message: $filter('translate')('contact_types.delete_message') + \" \" + $scope.contact_type.name + \"?\",\n onAccept: function () {\n $scope.contact_type.remove().then(function () {\n toastr.success($filter('translate')('contact_types.deleted_success'));\n $state.go(\"contact_types.list\");\n });\n }\n });\n };\n\n }])\n\n;\n\n","\nimport toastr from 'toastr';\n\nangular.module(\"contact_types\")\n\n .controller(\"ContactTypesListCtrl\", ['LoginService', '$rootScope', '$scope', '$http', '$interval', '$q', 'i18nService', 'Restangular', 'gridService', 'modalService', '$uibModal', '$filter', '$translate', '$state', '$log',\n function (LoginService, $rootScope, $scope, $http, $interval, $q, i18nService, Restangular, gridService, modalService, $uibModal, $filter, $translate, $state, $log) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"CONTACT_TYPES_WRITE\");\n\n $rootScope.title = $filter('translate')('contact_types.title');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('contact_types.title') }\n ];\n\n $scope.gridOptionsContactTypes = {\n pdfTitle: $filter('translate')('contact_types.title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n enableSorting: true,\n paginationPageSizes: [20, 40, 60],\n paginationPageSize: 20,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n { name: 'name', displayName: $filter('translate')('contact_types.name'), enableFiltering: true, enableHiding: false },\n { name: 'code', displayName: $filter('translate')('contact_types.code'), enableFiltering: true, enableHiding: false },\n { name: 'order', displayName: $filter('translate')('contact_types.order'), enableFiltering: true, enableHiding: false },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('contact_types.button_edit'), action: 'ui-sref=\"contact_types.edit({id:row.entity.id})\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('contact_types.button_delete'), action: 'ng-click=\"grid.appScope.deleteDialog(row.entity.id,row.entity.name);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n return Restangular.all('ContactsTypes').getList(options).then(function(result) {\n $log.debug(result)\n return result;\n });\n }\n };\n\n $scope.goToEdit = function (rowEntity) {\n $state.go(\"contact_types.edit\", { id: rowEntity.id});\n }\n\n $scope.deleteDialog = function (id, name) {\n $scope.id = id;\n $scope.name = name;\n modalService.confirm({\n title: $filter('translate')('contact_types.button_delete'),\n message: $filter('translate')('contact_types.delete_message') + \" \" + $scope.name + \"?\",\n onAccept: function () {\n Restangular.one('ContactsTypes', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('contact_types.deleted_success'));\n $scope.gridOptionsContactTypes.gridApi.core.raise.itemDeleted($scope);\n });\n }\n });\n\n };\n\n }])\n\n;","import breadcrumbTemplate from \"../common/breadcrumb/breadcrumb.html\";\nimport contactTypesListTemplate from \"./contact_types-list.html\";\nimport contactTypesEditTemplate from \"./contact_types-edit.html\";\n\nangular.module(\"contact_types\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('contact_types', {\n url: \"/contact_types\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: breadcrumbTemplate,\n })\n\n .state('contact_types.list', {\n url: \"/list\",\n controller: \"ContactTypesListCtrl\",\n template: contactTypesListTemplate,\n requiredPermission: [\"CONTACT_TYPES_READ\"]\n }) \n .state('contact_types.edit', {\n url: \"/edit/:id/:type\",\n controller: \"ContactTypesEditCtrl\",\n template: contactTypesEditTemplate,\n requiredPermission: [\"CONTACT_TYPES_READ\"]\n })\n }])\n;","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n imports: [\n CommonModule\n ]\n})\nexport class CoreModule { }\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AuthService {\n\n constructor() { }\n\n permissionExist(permission: string) {\n const value = localStorage.getItem(\"rolesPermissions\");\n if (value != null) {\n const res = value.split(\",\");\n const index = res.indexOf(permission);\n if (index != -1) {\n return true;\n } else {\n return false;\n }\n }\n }\n}\n","import { Injectable } from '@angular/core';\n\nexport enum LogLevel {\n All = 0,\n Debug = 1,\n Info = 2,\n Warn = 3,\n Error = 4,\n Fatal = 5,\n Off = 6\n}\n\nexport class LogEntry {\n // Public Properties\n entryDate: Date = new Date();\n message: string = \"\";\n level: LogLevel = LogLevel.Debug;\n extraInfo: any[] = [];\n logWithDate: boolean = true;\n \n buildLogString(): string {\n let ret: string = \"\";\n \n if (this.logWithDate) {\n ret = this.entryDate.toLocaleDateString('es-ES', { day: '2-digit', month: '2-digit', year: 'numeric' }) + \" \" + this.entryDate.toLocaleTimeString('es-ES', { hour: '2-digit', minute: '2-digit', second: '2-digit' }) + \" >> \";\n }\n \n ret += this.message;\n if (this.extraInfo.length) {\n ret += \" - Extra Info: \" + this.formatParams(this.extraInfo);\n }\n \n return ret;\n }\n \n private formatParams(params: any[]): string {\n let ret: string = params.join(\",\");\n \n // Is there at least one object in the array?\n if (params.some(p => typeof p == \"object\")) {\n ret = \"\";\n \n // Build comma-delimited string\n for (let item of params) {\n ret += JSON.stringify(item) + \",\";\n }\n }\n \n return ret;\n }\n}\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LogService {\n private level: number = LogLevel.Debug;\n // Log Date\n private logWithDate: boolean = true;\n\n constructor() { }\n\n debug(msg: string, ...optionalParams: any[]) {\n this.writeToLog(msg, LogLevel.Debug, optionalParams);\n }\n \n info(msg: string, ...optionalParams: any[]) {\n this.writeToLog(msg, LogLevel.Info, optionalParams);\n }\n \n warn(msg: string, ...optionalParams: any[]) {\n this.writeToLog(msg, LogLevel.Warn, optionalParams);\n }\n \n error(msg: string, ...optionalParams: any[]) {\n this.writeToLog(msg, LogLevel.Error, optionalParams);\n }\n \n fatal(msg: string, ...optionalParams: any[]) {\n this.writeToLog(msg, LogLevel.Fatal, optionalParams);\n }\n \n log(msg: string, ...optionalParams: any[]) {\n this.writeToLog(msg, LogLevel.All, optionalParams);\n }\n\n private writeToLog(msg: string, level: LogLevel, params: any[]) {\n if (this.shouldLog(level)) {\n let entry: LogEntry = new LogEntry();\n entry.message = msg;\n entry.level = level;\n entry.extraInfo = params;\n entry.logWithDate = this.logWithDate;\n // Depending on the level, log the entry using the appropriate console method\n switch (level) {\n case LogLevel.Debug:\n console.debug(entry.buildLogString());\n break;\n case LogLevel.Info:\n console.info(entry.buildLogString());\n break;\n case LogLevel.Warn:\n console.warn(entry.buildLogString());\n break;\n case LogLevel.Error:\n console.error(entry.buildLogString());\n break;\n case LogLevel.Fatal:\n console.error(entry.buildLogString());\n break;\n case LogLevel.All:\n console.log(entry.buildLogString());\n break;\n }\n }\n }\n \n private shouldLog(level: LogLevel): boolean {\n let ret: boolean = false;\n if ((level >= this.level && level !== LogLevel.Off) || this.level === LogLevel.All) {\n ret = true;\n }\n return ret;\n }\n\n private formatParams(params: any[]): string {\n let ret: string = params.join(\",\");\n \n // Is there at least one object in the array?\n if (params.some(p => typeof p == \"object\")) {\n ret = \"\";\n \n // Build comma-delimited string\n for (let item of params) {\n ret += JSON.stringify(item) + \",\";\n }\n }\n return ret;\n }\n}\n","import './correspondence';\nimport './correspondence-list';\nimport './correspondence-edit'; ","import AddNewPersonModalView from \"../events/guests/addNewPersonModal.html\";\n\n\nangular.module(\"correspondence\")\n\n .controller(\"CorrespondenceEditCtrl\", ['LoginService', '$scope', '$http', '$rootScope', '$state', '$stateParams', '$translate', 'Restangular', 'notificationService', '$filter', 'generateDocumentService', 'modalService', '$uibModal', function (LoginService, $scope, $http, $rootScope, $state, $stateParams,$translate, Restangular, notificationService, $filter, generateDocumentService, modalService, $uibModal) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"CORRESPONDENCE_WRITE\");\n $rootScope.title = $filter('translate')('correspondence.title');\n $scope.allowFoldersFiles = LoginService.permissionExist(\"FILES_READ\");\n $scope.allowTasks = LoginService.permissionExist(\"TASKS_READ\");\n $scope.allowNotifications = LoginService.permissionExist(\"NOTIFICATIONS_READ\");\n\n $scope.correspondence = {\n to_name: null, from_name: null,\n from_person_id: null,\n to_person_id: null,\n status: 'pending',\n information_groups_values: []\n };\n\n $scope.changesNotSaved = false; //para que aparezca el texto de cambios no guardados\n $scope.tinymceDescriptionOptions = {\n resize: true,\n forced_root_block: 'p',\n //min_height: 60,\n //height: 60,\n schema: \"html5\",\n formats: {\n bold: { inline: 'b' },\n underline: { inline: 'u' },\n italic: { inline: 'i' },\n alignleft: { selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div', attributes: { align: \"left\" } },\n aligncenter: { selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div', attributes: { align: \"center\" } },\n alignright: { selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div', attributes: { align: \"right\" } },\n alignjustify: { selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div', attributes: { align: \"justify\" } },\n },\n invalid_elements: 'strong,em',\n fontsize_formats: \"8pt 10pt 12pt 14pt 15pt 16pt 18pt 20pt 22pt 24pt 25pt 28pt 30pt 36pt \",\n body_class: 'custom_tinymce_content',\n language: $translate.use() !== undefined ? $translate.use().toLowerCase() : null, //Hay que customizarlo dependiendo del idioma...\n plugins: 'textcolor paste link lists advlist',\n toolbar: \"undo redo | fontsizeselect bold underline italic | forecolor | link | numlist bullist\",\n menubar: false,\n paste_remove_styles: true, paste_remove_styles_if_webkit: true, paste_strip_class_attributes: true, paste_auto_cleanup_on_paste: true\n };\n\n\n //generamos lista de valores de persons informations groups\n\n let loadInformationGroups = function () { // Lo encapsulo en una función para evitar problemas de asincronía\n\n $scope.correspondence.pigs = [];\n var options = { entity_type: \"correspondence\" };\n Restangular.all('InformationsGroups').getList(options).then(function (informationGroups) {\n $scope.informationGroups = informationGroups;\n $scope.informationGroups.forEach(function (pig) {\n if (pig.configuration != \"\") pig.configuration = JSON.parse(pig.configuration);\n });\n $scope.checkboxSimpleOptions = [\n { option: null, label: $filter('translate')('informations.all'), checked: true },\n { option: true, label: $filter('translate')('events.staff.yes'), checked: false },\n { option: false, label: $filter('translate')('events.staff.no'), checked: false }\n ];\n\n //Lo recorremos para pintarlos correctamente.\n angular.forEach($scope.correspondence.information_groups_values, function (pig) {\n var infoFilter = $scope.informationGroups.filter(function (el) { return el.id == pig.information_group_id; });\n if (infoFilter != null && infoFilter.length > 0) {\n if (infoFilter[0].type == \"checkboxSimple\") {\n $scope.correspondence.pigs[pig.information_group_id] = pig.value; //(pig.value == \"true\" || pig.value == true ? true : false);\n } if (infoFilter[0].type == \"datetime\") {\n $scope.correspondence.pigs[pig.information_group_id] = new Date(pig.value);\n } if (infoFilter[0].type == \"number\") {\n $scope.correspondence.pigs[pig.information_group_id] = parseInt(pig.value);\n } else {\n $scope.correspondence.pigs[pig.information_group_id] = pig.value;\n }\n }\n });\n });\n }\n\n\n // TODO: Revisar si se puede refactorizar esto \n $scope.loadCorrespondence = function (id) {\n if (angular.isUndefined(id) || id == \"\") {\n\n $rootScope.breadcrumb = [\n { title: $filter('translate')('correspondence.title'), url: \"correspondence.list\" },\n { title: $filter('translate')('correspondence.title_add') },\n ];\n\n loadInformationGroups();\n\n } else {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('correspondence.title'), url: \"correspondence.list\" },\n { title: $filter('translate')('correspondence.title_edit') },\n ];\n\n Restangular.one('Correspondences', id).get().then(function (result) {\n\n $scope.correspondence = result;\n\n $scope.correspondence.date = new Date($scope.correspondence.date);\n\n if ($scope.correspondence.date_celebration != null) $scope.correspondence.date_celebration = new Date($scope.correspondence.date_celebration)\n if ($scope.correspondence.from_person_id == null) {\n\n if ($scope.correspondence.from_name != null) {\n $scope.search.from_person = $scope.correspondence.from_name;\n }\n\n } else {\n Restangular.one('Persons', $scope.correspondence.from_person_id).get().then(function (person) {\n\n $scope.search.from_person = {\n id: person.id,\n term: person.name + ' ' + person.surname + (person.lastname != null ? ' ' + person.lastname : '')\n };\n\n if ($scope.correspondence.from_position_id != null) {\n Restangular.one('Positions', $scope.correspondence.from_position_id).get().then(function (position) { // TODO\n\n $scope.search.from_position = {\n id: position.id,\n term: person.gender == \"F\" ? position.female_description : person.gender == \"M\" ? position.male_description : position.name\n };\n \n });\n\n }\n\n $scope.personSelected($scope.search.from_person);\n\n });\n }\n\n if ($scope.correspondence.from_position_id == null) {\n\n if ($scope.correspondence.from_position_name != null) {\n\n $scope.search.from_position = $scope.correspondence.from_position_name;\n\n }\n } else if ($scope.correspondence.from_person_id == null) {\n\n Restangular.one('Positions', $scope.correspondence.from_position_id).get().then(function (results) { // TODO\n\n $scope.search.from_position = {\n id: results.id,\n term: results.name\n };\n\n });\n\n }\n if ($scope.correspondence.to_person_id == null) {\n if ($scope.correspondence.to_name != null) {\n $scope.search.to_person = $scope.correspondence.to_name;\n }\n } else {\n Restangular.one('Persons', $scope.correspondence.to_person_id).get().then(function (results) {\n $scope.search.to_person = {\n id: results.id,\n term: results.name + ' ' + results.surname + (results.lastname != null ? ' ' + results.lastname : '')\n };\n });\n }\n\n loadInformationGroups();\n\n });\n }\n\n }\n\n // End TODO\n\n $scope.loadCorrespondence($stateParams.id);\n\n let loadCombos = function () {\n/* Restangular.all('Persons/AllPersons').getList($scope.options).then(function (persons) {\n $scope.SelectPersons = persons;\n $scope.SelectPersons.unshift({\n id: -1,\n name: $filter('translate')('persons_gifts.another_persons')\n });\n });*/\n Restangular.all('CorrespondencesTypes').getList().then(function (results) {\n $scope.correspondencesTypes = results;\n /*$scope.correspondencesTypes.unshift({\n id: null,\n name: $filter('translate')('correspondence.allTypes')\n });*/\n if (results.length == 1 && (angular.isUndefined($stateParams.id) || $stateParams.id == \"\")){\n $scope.correspondence.correspondence_type_id = results[0].id;\n }\n });\n $scope.status = [{ id: 'pending', name: $filter('translate')('correspondence.pending') }, { id: 'in_process', name: $filter('translate')('correspondence.in_process') }, { id: 'finalized', name: $filter('translate')('correspondence.finalized') }]\n }\n loadCombos();\n\n $scope.savedOptions = JSON.parse(localStorage.getItem(\"correspondences_options\"));\n\n $scope.prepareNavigationBar = function () {\n\n $scope.savedOptions._pageSize = 1;\n Restangular.all('Correspondences/GetNextCorrespondenceId').post($scope.savedOptions).then(function (results) {\n var data = results.rows;\n let id = results.rows[0];\n $stateParams.id = id;\n\n $scope.savedOptions.row_index = $scope.savedOptions._page;\n localStorage.setItem(\"correspondences_options\", JSON.stringify($scope.savedOptions));\n $state.go(\"correspondence.edit\", { id: id }, { reload: true });\n });\n };\n \n $scope.navigatePrevious = function () {\n if ($scope.savedOptions._page > 1) $scope.savedOptions._page--;\n $scope.prepareNavigationBar();\n \n };\n $scope.navigateNext = function () {\n if ($scope.savedOptions._page < $scope.savedOptions._pages) $scope.savedOptions._page++;\n $scope.prepareNavigationBar();\n \n };\n\n $scope.saveCorrespondence = function () {\n\n if(typeof $scope.search.from_person === 'string') {\n $scope.correspondence.from_name = $scope.search.from_person;\n } else if (typeof $scope.search.from_person === 'object' && $scope.search.from_person != null) {\n\n $scope.correspondence.from_person_id = $scope.search.from_person.id;\n $scope.correspondence.from_name = $scope.search.from_person.term; // Rellenamos el nombre, de todos modos por la compatibilidad de los filtros\n\n }\n\n if(typeof $scope.search.from_position === 'string') {\n $scope.correspondence.from_position_name = $scope.search.from_position;\n } else if(typeof $scope.search.from_position === 'object' && $scope.search.from_position != null && $scope.search.from_position.id > 0) {\n $scope.correspondence.from_position_id = $scope.search.from_position.id;\n $scope.correspondence.from_position_name = $scope.search.from_position.term; // Rellenamos el nombre, de todos modos por la compatibilidad de los filtros\n }\n\n if(typeof $scope.search.to_person === 'string') {\n $scope.correspondence.to_name = $scope.search.to_person;\n } else if(typeof $scope.search.to_person === 'object' && $scope.search.to_person != null) {\n $scope.correspondence.to_person_id = $scope.search.to_person.id;\n $scope.correspondence.to_name = $scope.search.to_person.term; // Rellenamos el nombre, de todos modos por la compatibilidad de los filtros\n }\n angular.forEach($scope.informationGroups, function (pig) {\n var value = $scope.correspondence.pigs[pig.id];\n var pips = $filter(\"filter\")($scope.correspondence.information_groups_values, { information_group_id: pig.id });\n if (pips != null && pips.length > 0) {\n var pip = pips[0];\n pip.value = value;\n } else {\n var newPip = {\n entity_type: \"correspondence\",\n entity_type_id: (angular.isDefined($stateParams.id) && $stateParams.id != \"\" ? $scope.correspondence.id : null),\n information_group_id: pig.id,\n value: value\n };\n if (typeof (value) != \"undefined\") $scope.correspondence.information_groups_values.push(newPip);\n }\n });\n angular.forEach($scope.correspondence.information_groups_values, function (pig) {\n $scope.correspondence.pigs[pig.information_group_id] = pig.value;\n });\n\n if (angular.isDefined($scope.correspondence.id)) {\n $scope.correspondence.put().then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('correspondence.edit_success'));\n $state.go(\"correspondence.edit\", { id: result.id });\n $scope.changesNotSaved = false;\n } else {\n $scope.errorMessage = result.message;\n }\n });\n } else {\n\n Restangular.all('Correspondences').post($scope.correspondence).then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('correspondence.save_success'));\n $state.go(\"correspondence.edit\", { id: result.id });\n $scope.changesNotSaved = false;\n } else {\n $scope.errorMessage = result.message;\n }\n\n });\n }\n }\n\n $scope.checkDelete = function (description) {\n modalService.confirm({\n title: $filter('translate')('correspondence.button_delete'),\n message: $filter('translate')('correspondence.delete_message') + \"?\",\n onAccept: function () {\n Restangular.one('Correspondences', $stateParams.id).remove().then(function () {\n toastr.success($filter('translate')('correspondence.deleted_success'));\n $state.go(\"correspondence.list\");\n });\n }\n });\n };\n\n $scope.search = {\n \"from_person\": null,\n \"from_position\": null,\n \"to_person\": null,\n positions: [],\n persons: [],\n person_min_length: 3,\n position_min_length: 3\n };\n\n $scope.getPersonsSearch = function(val) {\n if(val == null) {\n val = '';\n }\n let ret = [];\n if($scope.search.from_position != null && $scope.search.from_position.id !== undefined) {\n angular.forEach($scope.search.persons, function (row) {\n if(row.term.includes(val)) {\n ret.push(row);\n }\n });\n } else {\n ret = Restangular.all('search/person/' + val).getList().then(function (searchTerms) {\n\n return searchTerms;\n });\n }\n return ret;\n };\n\n $scope.getPositionsSearch = function(val) {\n if(val == null) {\n val = '';\n }\n let ret = [];\n if($scope.search.from_person != null && $scope.search.from_person.id !== undefined) {\n angular.forEach($scope.search.positions, function (row) {\n if(row.term.includes(val)) {\n ret.push(row);\n }\n });\n } else {\n ret = Restangular.all('search/position/' + val).getList().then(function (searchTerms) {\n return searchTerms;\n });\n }\n return ret;\n };\n\n $scope.getPersonsToSearch = function (val) {\n return Restangular.all('search/person/' + val).getList().then(function (searchTerms) {\n return searchTerms;\n });\n };\n\n $scope.positionSelected = function($item, $model, $label) {\n $scope.search.person_min_length = 0;\n $scope.changesNotSaved = true;\n Restangular.all('PersonsPositions?position_id=' + $item.id).getList().then(function (results) {\n if(results.totalRows !== undefined && results.totalRows > 0) {\n $scope.search.persons = [];\n angular.forEach(results, function (row) {\n $scope.search.persons.push({\n id: row.FK_persons_positions_persons.id,\n term: row.FK_persons_positions_persons.name + ' ' + row.FK_persons_positions_persons.surname + (row.FK_persons_positions_persons.lastname!=null?' ' + row.FK_persons_positions_persons.lastname:'')\n });\n });\n }\n });\n };\n $scope.personSelected = function ($item, $model, $label) {\n let today = new Date();\n $scope.search.position_min_length = 0;\n Restangular.one('Persons', $item.id).get().then(function (results) {\n if(results.FK_persons_positions_persons != undefined && results.FK_persons_positions_persons.length > 0) {\n $scope.search.positions = [];\n angular.forEach(results.FK_persons_positions_persons, function (row) {\n if (row.to_date >= today || row.to_date == null) {\n $scope.search.positions.push({\n id: row.FK_persons_positions_positions.id, // Este es el position_id de cara a luego usarlo para buscar el correo\n term: row.FK_persons_positions_positions.name\n });\n }\n });\n\n }\n });\n };\n\n /* $scope.foldersFiles = function () {\n foldersService.folders(\"correspondence\", $scope.correspondence.id);\n };*/\n $scope.addNewPerson = function (person_type) {\n if ($rootScope.sizeLg) {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: AddNewPersonModalView,\n size: \"x-lg\",\n controller: \"AddNewPersonModalCtrl\",\n resolve: {\n person_type: function () {\n return person_type;\n },\n }\n }).closed.then(function (result) {\n //no me devuelve parametros para poder preseleccionar a la persona...\n Restangular.all('Persons/AllPersons').getList($scope.options).then(function (persons) {\n $scope.SelectPersons = persons;\n $scope.SelectPersons.unshift({\n id: -1,\n name: $filter('translate')('persons_gifts.another_persons')\n });\n });\n });\n\n } else {\n\n let $modalInstance = $uibModal.open({\n animation: true,\n template: AddNewPersonModalView,\n controller: \"AddNewPersonModalCtrl\",\n resolve: {\n person_type: function () {\n return person_type;\n },\n }\n }).closed.then(function (result) {\n Restangular.all('Persons/AllPersons').getList($scope.options).then(function (persons) {\n $scope.SelectPersons = persons;\n $scope.SelectPersons.unshift({\n id: -1,\n name: $filter('translate')('persons_gifts.another_persons')\n });\n });\n });\n }\n\n };\n $scope.documentAndEmail = function (email) {\n\n let params: any = {\n entity_type: \"correspondence\",\n entity_type_id: $stateParams.id,\n documents: { codes: [\"CORRESPONDENCE_RESPONSE\"] }\n };\n if (!email) {\n generateDocumentService.documentNew({\n params: params,\n onAccept: function (data) {\n angular.forEach(data, function (item) {\n $http({\n method: 'post',\n url: (window as any).CONFIG.api_url + 'documentgenerator/Generate',\n params: { document_id: item.document_id, correspondence_id: params.entity_type_id, outputType: 'pdf' }\n }).then(function (result, status, headers, config) {\n let url = (window as any).CONFIG.api_url + 'documentgenerator/download/' + result.data;\n window.open(url, '_blank');\n });\n })\n }\n });\n } else {\n\n let personId = ($scope.correspondence.from_person_id != -1 ? [$scope.correspondence.from_person_id] : null);\n params.persons_ids = personId;\n notificationService.notificationMail({\n params: params,\n onAccept: function (data) {\n toastr.success($filter('translate')('notifications.sending_mail_success'));\n }\n });\n\n }\n }\n\n}])\n\n;\n\n","angular.module(\"correspondence\")\n\n .controller(\"CorrespondenceListCtrl\", ['LoginService', '$rootScope', '$scope', '$http', '$interval', '$q', 'i18nService', 'Restangular', 'gridService', 'modalService', '$uibModal', '$filter', '$translate', '$state', 'datasetsService', function (LoginService, $rootScope, $scope, $http, $interval, $q, i18nService, Restangular, gridService, modalService, $uibModal, $filter, $translate, $state, datasetsService) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"CORRESPONDENCE_WRITE\");\n\n $rootScope.title = $filter('translate')('correspondence.title');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('correspondence.title') }\n ];\n let pigstoShowInList = [];\n $scope.search = { status: \"pending\"};\n\n let loadCombos = function () {\n Restangular.all('CorrespondencesTypes').getList().then(function (results) {\n\n $scope.correspondencesTypes = results;\n $scope.correspondencesTypes.unshift({\n id: null,\n name: $filter('translate')('correspondence.allTypes')\n });\n });\n Restangular.all('correspondences/senders').getList().then(function (searchTerms) {\n $scope.senders = searchTerms;\n });\n Restangular.all('correspondences/senders/positions').getList().then(function (searchTerms) {\n $scope.senderPositions = searchTerms;\n });\n\n var optionsPIGa = { entity_type: \"correspondence\" };\n Restangular.all('InformationsGroups').getList(optionsPIGa).then(function (personsInformationGroups) {\n $scope.personsInformationGroups = personsInformationGroups;\n angular.forEach($scope.personsInformationGroups, function (pig) {\n if (pig.configuration != \"\") pig.configuration = JSON.parse(pig.configuration);\n });\n $scope.checkboxSimpleOptions = [\n { option: null, label: $filter('translate')('informations.all'), checked: true },\n { option: true, label: $filter('translate')('events.staff.yes'), checked: false },\n { option: false, label: $filter('translate')('events.staff.no'), checked: false }\n ];\n pigstoShowInList = $scope.personsInformationGroups.filter(function (el) { return el.notify_in_list; });//para saber si mostrar o no lo columna.\n });\n }\n\n loadCombos();\n\n // $scope.gridOptionsCorrespondence.columnDefs[4].visible = ($scope.search.status !== \"pending\"); \n\n $scope.loadData = function () {\n if (angular.isDefined($scope.gridOptionsCorrespondence)) {\n $scope.gridOptionsCorrespondence.loadData(false);\n } else {\n $scope.gridOptionsCorrespondence = {\n pdfTitle: $filter('translate')('correspondence.pdf_title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n enableSorting: true,\n paginationPageSizes: [50, 100, 200],\n paginationPageSize: 100,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n {\n name: 'date_celebration', displayName: $filter('translate')('correspondence.date_celebration'), width: 120,\n type: 'date', cellFilter: 'toLocalDate | date:\\'dd/MM/yyyy\\''\n },\n {\n name: 'hide_from_pending_report', width: 25, field: 'hide_from_pending_report', displayName: \"\", enableFiltering: false, enableHiding: false, enableColumnMenu: false,\n cellTemplate: '
' +\n '' +\n '
',\n visible: ($rootScope.sizeSm || $rootScope.sizeXs || $rootScope.sizeMd ? false : true)\n },\n {\n name: 'from_name_show', displayName: $filter('translate')('correspondence.from_person_id'), enableFiltering: false, enableHiding: true, width: 150,\n cellTemplate: '
' +\n '{{grid.getCellValue(row, col)}}' +\n '
' \n },\n {\n name: 'from_position_name', displayName: $filter('translate')('persons.position'), enableFiltering: false, enableHiding: true, width: 250,\n cellTemplate: '
' +\n '{{grid.getCellValue(row, col)}}' +\n '
'\n },\n {\n name: 'correspondence_type_name', displayName: $filter('translate')('correspondence.correspondence_type'), enableFiltering: false, enableHiding: true, width: 100,\n cellTemplate: '
' +\n '{{grid.getCellValue(row, col)}}' +\n '
' \n },\n {\n name: 'description_plain', displayName: $filter('translate')('correspondence.description'), enableFiltering: true, enableHiding: true, width: 350,\n cellTemplate: '
' +\n '{{grid.getCellValue(row, col)}}' +\n '
'\n },\n {\n name: 'attachtment', displayName: $filter('translate')('correspondence.attachtment'), enableFiltering: true, enableHiding: true, width: 70,\n cellTemplate: '
0\" class=\"fa fa-paperclip fa-lg\">
'\n },\n {\n name: 'tasksStatus', displayName: $filter('translate')('correspondence.tasksStatus'), enableFiltering: true, enableHiding: true, width: 70,\n cellTemplate: '
0\">'\n },\n\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('correspondence.button_edit'), action: 'ng-click=\"grid.appScope.goToEdit(row.entity)\"', cssIconClass: \"fa fa-edit\", cssClass: \"btn btn-xs btn-white btn-ouline btn-custom-laptop\" },\n { title: $filter('translate')('correspondence.button_delete'), action: 'ng-click=\"grid.appScope.deleteDialog(row.entity.id,row.entity.name);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\", cssClass: \"btn btn-xs btn-white btn-ouline btn-custom-laptop\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n\n options.status = $scope.search.status;\n options.date_from = $scope.search.date_from;\n options.date_to = $scope.search.date_to;\n options.date_celebration_from = $scope.search.date_celebration_from;\n options.date_celebration_to = $scope.search.date_celebration_to;\n options.name = $scope.search.name;\n options.correspondence_type_id = $scope.search.correspondence_type_id;\n\n // Comento lo anterior\n\n /*\n \n if($scope.search.from_person !== undefined) {\n if($scope.search.from_person.id !== undefined) {\n options.from_person_id = $scope.search.from_person.id;\n } else {\n options.from_name = $scope.search.from_person.name;\n }\n }\n\n if($scope.search.from_position !== undefined) {\n if($scope.search.from_position.id !== undefined) {\n options.from_position_id = $scope.search.from_position.id;\n } else {\n options.from_position_name = $scope.search.from_position.term;\n }\n }\n \n */\n\n // Revisar esto para arreglar filtros\n\n if (typeof $scope.search.from_person === 'string') {\n options.from_name = $scope.search.from_person;\n } else if (typeof $scope.search.from_person === 'object' && $scope.search.from_person != null) {\n if ($scope.search.from_person.id > 0) { // Por algún motivo no siempre tienen ID\n options.from_person_id = $scope.search.from_person.id;\n } else {\n options.from_name = $scope.search.from_person.name; // ni no tiene ID, lo hacemos con simplemente el nombre\n }\n }\n\n if (typeof $scope.search.from_position === 'string') {\n options.from_position_name = $scope.search.from_position;\n } else if (typeof $scope.search.from_position === 'object' && $scope.search.from_position != null) {\n if ($scope.search.from_position.id > 0) {\n options.from_position_id = $scope.search.from_position.id;\n } else {\n options.from_position_name = $scope.search.from_position.name; // ni no tiene ID, lo hacemos con simplemente el nombre\n }\n }\n\n // \n\n options.to_person_id = ($scope.search.to_person_id === -1 ? null : $scope.search.to_person_id);\n\n // No veo el filtro to_name se use en el listado\n options.to_name = $scope.search.to_name;\n \n var pigs = \"\";\n for (var key in $scope.search.pigs) {\n if (typeof $scope.search.pigs[key] != \"undefined\" && $scope.search.pigs[key] != \"\" && $scope.search.pigs[key] != null) {\n if (typeof ($scope.search.pigs[key]) == \"object\") {\n //estamos en el selector simple.\n var infoFilter = $scope.personsInformationGroups.filter(function (el) { return el.id == key; });\n if (infoFilter.length === 1) {\n if (infoFilter[0].type == \"datetime\") {\n if ($scope.search.pigs[key] != null) pigs += (pigs != \"\" ? \"#\" : \"\") + key + \"=>\" + new Date($scope.search.pigs[key]).toISOString();\n } else if (infoFilter[0].type == \"checkboxSimple\") {\n if ($scope.search.pigs[key].checked != \"\") pigs += (pigs != \"\" ? \"#\" : \"\") + key + \"=>\" + $scope.search.pigs[key].checked;\n } else {\n pigs += (pigs != \"\" ? \"#\" : \"\") + key + \"=>\" + $scope.search.pigs[key];\n }\n }\n } else {\n pigs += (pigs != \"\" ? \"#\" : \"\") + key + \"=>\" + $scope.search.pigs[key];\n }\n }\n }\n\n options.pigs = pigs;\n\n var deferred = $q.defer();\n Restangular.all('Correspondences').getList(options).then(function (results) {\n\n $scope.correspondences = results;\n //guardamos opciones\n options._pages = results.length;\n localStorage.setItem(\"correspondences_options\", JSON.stringify(options));\n\n deferred.resolve(results);\n });\n\n return deferred.promise;\n }\n };\n //$scope.gridOptionsCorrespondence.columnDefs[5].visible = ($scope.search.status !== \"pending\"); \n }\n }\n\n $scope.changeStatus = function (status) {\n \n $scope.search.status = status;\n/* if (angular.isDefined($scope.gridOptionsCorrespondence)) {\n $scope.gridOptionsCorrespondence.columnDefs[5].visible = (status !== \"pending\");\n $scope.gridOptionsCorrespondence.columnDefs[6].visible = (pigstoShowInList.length > 0);\n }*/\n $scope.loadData();\n }\n $scope.changeStatus(\"pending\");\n\n $scope.goToEdit = function (rowEntity) {\n var idx = 0;\n $scope.correspondences.forEach(function (row, index) {\n if (row.id == rowEntity.id) idx = index;\n });\n\n var savedOptions = JSON.parse(localStorage.getItem(\"correspondences_options\"));\n var offset = (savedOptions._page- 1) * savedOptions._pageSize;\n savedOptions.row_index = offset + idx;\n savedOptions._page = savedOptions.row_index + 1;\n localStorage.setItem(\"correspondences_options\", JSON.stringify(savedOptions));\n\n $state.go(\"correspondence.edit\", { id: rowEntity.id });\n }\n\n $scope.clearForm = function () {\n var status = $scope.search.status;\n $scope.search = { status: status, correspondence_type_id: null, pigs: [] };\n $scope.loadData();\n }\n\n $scope.deleteDialog = function (id, name) {\n modalService.confirm({\n title: $filter('translate')('correspondence.button_delete'),\n message: $filter('translate')('correspondence.delete_message') + \" \" + name + \"?\",\n onAccept: function () {\n Restangular.one('Correspondences', id).remove().then(function () {\n toastr.success($filter('translate')('correspondence.deleted_success'));\n //$scope.gridOptionsCorrespondence.gridApi.core.raise.itemDeleted($scope);\n $scope.loadData();\n\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n });\n\n };\n\n $scope.export = function () {\n var options = {\n filters: {\n EXPORT_TYPE: \"CORRESPONDENCE\",\n TYPE: $scope.search.correspondence_type_id,\n STATUS: $scope.search.status,\n FROM_PERSON_ID: $scope.search.from_person_id,\n FROM_POSITION_ID: $scope.search.from_position_id,\n FROM_NAME: $scope.search.from_name,\n DESCRIPTION: $scope.search.description,\n DATE_FROM: $scope.search.date_from,\n DATE_TO: $scope.search.date_to\n }\n };\n\n datasetsService.exportByType(\"correspondence\", options);\n };\n\n $scope.print_pending = function (code) {\n var options = {\n filters: {\n CORRESPONDENCE_TYPE_ID: $scope.search.correspondence_type_id != null ? $scope.search.correspondence_type_id : undefined, \n STATUS: $scope.search.status,\n FROM_PERSON_ID: $scope.search.from_person != null ? $scope.search.from_person.id : undefined,\n FROM_POSITION_ID: $scope.search.from_position != null ? $scope.search.from_position.id : undefined,\n FROM_NAME: $scope.search.from_name,\n DESCRIPTION: $scope.search.name,\n DATE_FROM: $scope.search.date_from,\n DATE_TO: $scope.search.date_to,\n DATE_CELEBRATION: $scope.search.date_celebration\n }\n };\n\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + 'Documents/GetDocumentsByDocumentCode',\n params: { code: code, filters: options.filters }\n }).then(function (results, status, headers, config) {\n if (results.data.rows.length > 0) {\n var item = results.data.rows[0];\n $http({\n method: 'post',\n url: (window as any).CONFIG.api_url + 'documentgenerator/Generate',\n params: { document_id: item.id, outputType: 'pdf', filters: options.filters }\n }).then(function (result, status, headers, config) {\n let url = (window as any).CONFIG.api_url + 'documentgenerator/download/' + result.data;\n window.open(url, '_blank');\n });\n }\n }); \n };\n\n }])\n\n;","\n\nimport BreadcrumbView from \"../common/breadcrumb/breadcrumb.html\";\nimport CorrespondenceListView from \"./correspondence-list.html\";\nimport CorrespondenceEditView from \"./correspondence-edit.html\";\nimport TasksListView from \"../tasks/tasks-list.html\";\nimport NotificationsListView from \"../notifications/notifications-list.html\";\nimport FoldersListView from \"../folders/folders-list.html\";\n\nangular.module(\"correspondence\", [])\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('correspondence', {\n url: \"/correspondence\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n })\n\n .state('correspondence.list', {\n url: \"/list\", \n controller: \"CorrespondenceListCtrl\",\n template: CorrespondenceListView,\n requiredPermission: [\"CORRESPONDENCE_READ\"]\n }) \n .state('correspondence.edit', {\n url: \"/edit/:id\",\n views: {\n '': {\n controller: \"CorrespondenceEditCtrl\",\n template: CorrespondenceEditView,\n },\n 'tasks@correspondence.edit': {\n controller: \"TasksListCtrl\",\n template: TasksListView,\n resolve: {\n entity_type: [function () { return \"correspondence\"; }],\n entity_type_id: ['$stateParams', function ($stateParams) {\n if (angular.isDefined($stateParams.id) && $stateParams.id != \"\") {\n return $stateParams.id;\n }\n return null;\n }]\n }\n },\n 'notifications@correspondence.edit': {\n controller: \"NotificationsListCtrl\",\n template: NotificationsListView,\n resolve: {\n entity_type: [function () { return \"correspondence\"; }],\n entity_type_id: ['$stateParams', function ($stateParams) {\n if (angular.isDefined($stateParams.id) && $stateParams.id != \"\") {\n return $stateParams.id;\n }\n return null;\n }]\n }\n },\n 'foldersFiles@correspondence.edit': {\n controller: \"FoldersListCtrl\",\n template: FoldersListView,\n resolve: {\n entity_type: [function () { return \"correspondence\"; }],\n entity_type_id: ['$stateParams', function ($stateParams) {\n if (angular.isDefined($stateParams.id) && $stateParams.id != \"\") {\n return $stateParams.id;\n }\n return null;\n }],\n is_public: [function () { return false}]\n }\n },\n },\n requiredPermission: [\"CORRESPONDENCE_READ\"]\n })\n }])\n;","import './correspondences_types';\nimport './correspondences_types-list';\nimport './correspondences_types-edit'; ","angular.module(\"correspondences_types\")\n\n .controller(\"CorrespondencesTypesEditCtrl\", ['LoginService', '$scope', '$rootScope', '$state', '$stateParams', 'Restangular', '$filter', 'modalService', function (LoginService, $scope, $rootScope, $state, $stateParams, Restangular, $filter, modalService) {\n \n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"CORRESPONDENCE_TYPE_WRITE\");\n $rootScope.title = $filter('translate')('correspondences_types.title');\n\n $scope.correspondence_type = {};\n $scope.selectEntityTypes = [{ id: 'events', name: $filter(\"translate\")('entity_types.events') }, { id: 'correspondence', name: $filter(\"translate\")('entity_types.correspondence') }];;\n\n if (angular.isUndefined($stateParams.id) || $stateParams.id == \"\") {\n \n $rootScope.breadcrumb = [\n { title: $filter('translate')('correspondences_types.title'), url: \"correspondences_types.list\" },\n { title: $filter('translate')('correspondences_types.title_add') },\n ];\n \n } else {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('correspondences_types.title'), url: \"correspondences_types.list\" },\n { title: $filter('translate')('correspondences_types.title_edit') },\n ];\n\n Restangular.one('CorrespondencesTypes', $stateParams.id).get().then(function (result) {\n \n $scope.correspondence_type = result; \n });\n } \n \n $scope.save = function () { \n if (angular.isDefined($scope.correspondence_type.id)) {\n $scope.correspondence_type.put().then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('correspondences_types.edit_success')); \n $state.go(\"correspondences_types.list\");\n } else {\n $scope.errorMessage = result.message;\n }\n });\n } else {\n Restangular.all('CorrespondencesTypes').post($scope.correspondence_type).then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('correspondences_types.save_success'));\n $state.go(\"correspondences_types.list\");\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n }\n\n $scope.checkDelete = function () {\n modalService.confirm({\n title: $filter('translate')('correspondences_types.button_delete'),\n message: $filter('translate')('correspondences_types.delete_message') + \" \" + $scope.correspondence_type.name + \"?\",\n onAccept: function () {\n $scope.correspondence_type.remove().then(function () {\n toastr.success($filter('translate')('correspondences_types.deleted_success'));\n $state.go(\"correspondences_types.list\");\n });\n }\n });\n }; \n\n}])\n\n;\n\n","angular.module(\"correspondences_types\")\n\n .controller(\"CorrespondencesTypesListCtrl\", ['LoginService', '$rootScope', '$scope', 'Restangular', 'gridService', 'modalService', '$filter', '$state', function (LoginService, $rootScope, $scope, Restangular, gridService, modalService, $filter, $state) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"CORRESPONDENCE_TYPE_WRITE\");\n\n $rootScope.title = $filter('translate')('correspondences_types.title');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('correspondences_types.title') }\n ];\n\n $scope.selectEntityTypes = [{ id: null, name: $filter(\"translate\")('entity_types.all') }, { id: 'events', name: $filter(\"translate\")('entity_types.events') }, { id: 'correspondence', name: $filter(\"translate\")('entity_types.correspondence') }];;\n $scope.search = { entity_type: null };\n $scope.gridOptionsCorrespondencesTypes = {\n pdfTitle: $filter('translate')('correspondences_types.pdf_title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n enableSorting: true, \n paginationPageSizes: [20, 40, 60],\n paginationPageSize: 20,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n { name: 'code', displayName: $filter('translate')('correspondences_types.code'), enableFiltering: false, enableHiding: true },\n { name: 'name', displayName: $filter('translate')('correspondences_types.name'), enableFiltering: true, enableHiding: false },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('correspondences_types.button_edit'), action: 'ui-sref=\"correspondences_types.edit({id:row.entity.id})\"', cssClass: \"btn btn-xs btn-default btn-outline btn-custom-laptop\", cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('correspondences_types.button_delete'), action: 'ng-click=\"grid.appScope.deleteDialog(row.entity.id,row.entity.name);\" ng-if=\"grid.appScope.allowWrite\"', cssClass: \"btn btn-xs btn-default btn-outline btn-custom-laptop\", cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n options.entity_type = $scope.search.entity_type;\n return Restangular.all('CorrespondencesTypes').getList(options);\n }\n };\n\n $scope.goToEdit = function (rowEntity) {\n $state.go(\"correspondences_types.edit\", { id: rowEntity.id });\n }\n\n $scope.loadData = function () {\n $scope.gridOptionsCorrespondencesTypes.loadData(false);\n }\n\n $scope.deleteDialog = function (id, name) {\n $scope.id = id;\n $scope.name = name;\n modalService.confirm({\n title: $filter('translate')('correspondences_types.button_delete'),\n message: $filter('translate')('correspondences_types.delete_message') + \" \" + $scope.name + \"?\",\n onAccept: function () {\n Restangular.one('CorrespondencesTypes', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('correspondences_types.deleted_success'));\n $scope.gridOptionsCorrespondencesTypes.gridApi.core.raise.itemDeleted($scope);\n \n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n });\n\n };\n \n }])\n\n;","import BreadcrumbView from \"../common/breadcrumb/breadcrumb.html\";\nimport CorrespondencesTypesListView from \"./correspondences_types-list.html\";\nimport CorrespondencesTypesEditView from \"./correspondences_types-edit.html\";\n\n\nangular.module(\"correspondences_types\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('correspondences_types', {\n url: \"/correspondences_types\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n })\n .state('correspondences_types.list', {\n url: \"/list\",\n controller: \"CorrespondencesTypesListCtrl\",\n template: CorrespondencesTypesListView,\n requiredPermission: [\"CORRESPONDENCE_TYPE_READ\"]\n }) \n .state('correspondences_types.edit', {\n url: \"/edit/:id\",\n controller: \"CorrespondencesTypesEditCtrl\",\n template: CorrespondencesTypesEditView,\n requiredPermission: [\"CORRESPONDENCE_TYPE_READ\"]\n })\n }])\n;","import './countries';\nimport './countries-list';\nimport './countries-edit'; \nimport './countries_regions-edit';\n","import CountriesAddRegionModalView from \"./countries_add_region_modal.html\";\n\nangular.module(\"countries\")\n\n .controller(\"CountriesEditCtrl\", ['$rootScope', '$scope', '$http', '$stateParams', 'Restangular', '$state', 'modalService', '$filter', 'gridService', '$q', '$uibModal', '$log', function ($rootScope, $scope, $http, $stateParams, Restangular, $state, modalService, $filter, gridService, $q, $uibModal, $log) {\n\n $scope.allowWrite = true;\n let filter = false;\n $scope.regionFilter = {};\n\n $rootScope.title = $filter('translate')('countries.title');\n if (angular.isUndefined($stateParams.id) || $stateParams.id == \"\" ) {\n \n $rootScope.breadcrumb = [\n { title: $filter('translate')('countries.list'), url: \"countries.list\" },\n { title: $filter('translate')('countries.add') }\n ];\n $scope.country = {\n name: '',\n created_at: new Date()\n };\n }\n else {\n\n $rootScope.breadcrumb = [\n { title: $filter('translate')('countries.list'), url: \"countries.list\" },\n { title: $filter('translate')('countries.edit') }\n ];\n\n\n Restangular.one('Countries', $stateParams.id).get().then(function (results) {\n $scope.country = results;\n $log.debug($scope.country);\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n\n $scope.addFile = function (flowFile) {\n var fileReader = new FileReader();\n fileReader.onload = function (event) {\n var uri = event.target.result;\n $scope.$apply(function () {\n $scope.country.logo = uri;\n });\n };\n fileReader.readAsDataURL(flowFile.file);\n };\n\n $log.debug($stateParams.id);\n \n\n $scope.gridRegions = {\n pdfTitle: $filter('translate')('countries.regions'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n enableSorting: true,\n paginationPageSizes: [10, 20, 30],\n paginationPageSize: 10,\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n {\n name: 'name', displayName: $filter('translate')('countries.name'), enableFiltering: true, enableHiding: false,\n },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('general.edit'), action: 'ui-sref=\"countries.regions_edit({id:row.entity.id, parent_id: grid.appScope.country.id})\"; ng-if=\"grid.appScope.allowWrite\"', context: $scope, cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('general.delete'), action: 'ng-click=\"grid.appScope.deleteRegionDialog(row.entity.id,row.entity.name);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n }\n ],\n getData: function (options) {\n\n if (filter) {\n options.name = $scope.regionFilter.name;\n }\n\n options.country_id = $scope.country.id;\n\n return Restangular.all('CountriesRegions').getList(options).then(function (results) {\n return results;\n });\n \n }\n };\n\n $scope.search = function () {\n if (angular.isDefined($scope.gridRegions.loadData)) {\n filter = true;\n $scope.gridRegions.loadData();\n }\n }\n\n $scope.addRegion = function () {\n\n let $modalInstance = $uibModal.open({\n animation: true,\n template: CountriesAddRegionModalView,\n size: \"lg\",\n controller: \"AddRegionModalCtrl\",\n scope: $scope,\n resolve: {\n value: function () { }\n },\n });\n\n\n };\n\n\n\n\n\n\n $scope.saveCountry = function () {\n if (angular.isUndefined($stateParams.id) || $stateParams.id == \"\")\n Restangular.all('Countries').post($scope.country).then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('countries.create_success'));\n $scope.country = result;\n //$state.go(\"countries.list\");\n } else {\n $scope.errorMessage = result.message;\n }\n });\n else {\n $scope.country.put().then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('countries.edit_success'));\n //$state.go(\"countries.list\");\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n };\n\n $scope.deleteCountry = function () {\n\n modalService.confirm({\n title: $filter('translate')('countries.delete'),\n message: $filter('translate')('countries.delete_message')+\" \" + $scope.country.name + \"?\",\n onAccept: function () {\n Restangular.one('Countries', $stateParams.id).remove().then(function () {\n toastr.success($filter('translate')('countries.delete_success'));\n $state.go(\"countries.list\");\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n });\n\n };\n\n\n $scope.deleteRegionDialog = function (id, name) {\n $scope.id = id;\n $scope.name = name;\n modalService.confirm({\n title: $filter('translate')('countries.region_delete'),\n message: $filter('translate')('countries.region_delete_message') + \" \" + name + \"?\",\n onAccept: function () {\n Restangular.one('CountriesRegions', id).remove().then(function () {\n toastr.success($filter('translate')('countries.region_remove_success'));\n $scope.gridRegions.data =\n $scope.gridRegions.data.filter(function (el) { return el.id != $scope.id; });\n }, function (response) {\n $log.error(\"Error with status code\", response.status);\n });\n }\n });\n\n };\n\n }])\n\n .controller('AddRegionModalCtrl', ['$scope', '$uibModalInstance', '$uibModal', '$http', 'Restangular', '$filter', 'LoginService', 'modalService', '$log',\n function ($scope, $uibModalInstance, $uibModal, $http, Restangular, $filter, LoginService, modalService, $log) {\n\n // $scope.region = options.params;\n $scope.region = {};\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n $scope.onAccept = function () {\n $scope.region.country_id = $scope.country.id;\n Restangular.all('CountriesRegions').post($scope.region).then(function (result) {\n if (typeof (result.id) != \"undefined\") {\n toastr.success($filter('translate')('countries.region_created_success'));\n $scope.gridRegions.loadData();\n $log.debug($scope.region)\n\n } else {\n $scope.errorMessage = result.message;\n }\n });\n\n $uibModalInstance.close();\n };\n }])\n\n;","angular.module(\"countries\")\n\n .controller('CountriesListCtrl', ['$rootScope', '$scope', 'Restangular', 'gridService', 'modalService', 'uiGridConstants', '$filter', 'LoginService', '$state', 'treeService', 'uiGridTreeViewConstants', '$q', function ($rootScope, $scope, Restangular, gridService, modalService, uiGridConstants, $filter, LoginService, $state, treeService, uiGridTreeViewConstants, $q) {\n\n if (!LoginService.permissionExist(\"P_MODIFY_USER_COMPANY\"))\n $state.go(\"countries.edit\", { id: LoginService.get(\"countryId\") });\n\n $rootScope.title = $filter('translate')('countries.title');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('countries.list') }\n ];\n\n let filter = false;\n \n $scope.gridOptionsCountries = {\n pdfTitle: $filter('translate')('countries.pdf_title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n paginationPageSizes: [25, 50, 75],\n paginationPageSize: 25,\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n { name: 'name', displayName: $filter('translate')('countries.name'), enableFiltering: true, enableHiding: false, enableColumnMenu: false },\n { name: 'code', displayName: $filter('translate')('countries.code'), enableFiltering: true, enableHiding: false, enableColumnMenu: false },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('companies.button_edit'), action: 'ui-sref=\"countries.edit({id:row.entity.id})\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('companies.button_delete'), action: 'ng-click=\"grid.appScope.BorrarDialog(row.entity.id,row.entity.name);\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n\n if (filter) {\n options.name = $scope.countryFilter.name;\n options.code = $scope.countryFilter.code;\n }\n\n return Restangular.all('Countries').getList(options).then(function (result) {\n return result;\n });\n \n }\n \n };\n\n $scope.goToEdit = function (rowEntity) {\n $state.go(\"countries.edit\", { id: rowEntity.id });\n }\n\n $scope.search = function () {\n if (angular.isDefined($scope.gridOptionsCountries.loadData)) {\n filter = true;\n $scope.gridOptionsCountries.loadData();\n }\n }\n\n $scope.BorrarDialog = function (id,name) {\n $scope.id = id;\n $scope.name = name;\n modalService.confirm({\n title: $filter('translate')('countries.delete'),\n message: $filter('translate')('countries.delete_message') + \" \" + name + \"?\",\n onAccept: function () {\n Restangular.one('Countries', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('companies.delete_success'));\n $scope.gridOptionsCountries.gridApi.core.raise.itemDeleted($scope);\n \n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n });\n\n };\n\n\n }])\n\n;","import BreadcrumbView from \"../common/breadcrumb/breadcrumb.html\";\nimport CountriesListView from \"./countries-list.html\";\nimport CountriesEditView from \"./countries-edit.html\";\nimport CountriesRegionsEditView from \"./countries_regions-edit.html\";\n\n\nangular.module(\"countries\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('countries', {\n url: \"/countries\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n })\n .state('countries.list', {\n url: \"/list\",\n controller: \"CountriesListCtrl\",\n template: CountriesListView,\n data: { pageTitle: 'Países' }\n })\n .state('countries.edit', {\n url: \"/edit/:id\",\n controller: \"CountriesEditCtrl\",\n template: CountriesEditView,\n data: { pageTitle: 'Países' }\n })\n .state('countries.regions_edit', {\n url: \"/edit/regions/:id\",\n controller: \"CountriesRegionsEditCtrl\",\n template: CountriesRegionsEditView,\n params: {\n 'id': \"\",\n 'parent_id': \"\",\n },\n data: { pageTitle: 'Regiones' }\n });\n }])\n;","import CountriesRegionsCitiesModalView from \"./countries_regions_cities_modal.html\";\n\n\nangular.module(\"countries\")\n\n .controller(\"CountriesRegionsEditCtrl\", ['LoginService', '$scope', '$rootScope', '$controller', '$state', '$stateParams', 'Restangular', '$uibModal', 'modalService', '$compile', 'gridService', '$filter', '$translate', '$q', '$log',\n function (LoginService, $scope, $rootScope, $controller, $state, $stateParams, Restangular, $uibModal, modalService, $compile, gridService, $filter, $translate, $q, $log) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = true //LoginService.permissionExist(\"CMS_CATEGORIES_WRITE\");\n $rootScope.title = $filter('translate')('countries.regions');\n\n let filter = false;\n $scope.cityFilter = {};\n\n if (angular.isUndefined($stateParams.id) || $stateParams.id == \"\") {\n\n $rootScope.breadcrumb = [\n { title: $filter('translate')('countries.list'), url: \"countries.list\" },\n { title: $filter('translate')('countries.edit'), url: `countries.edit({ id: ${$scope.region.country_id}})` },\n { title: $filter('translate')('countries.region_add') },\n\n ];\n } else {\n \n Restangular.one('CountriesRegions', $stateParams.id).get().then(function (result) {\n $scope.region = result;\n $log.debug($scope.region);\n $rootScope.breadcrumb = [\n { title: $filter('translate')('countries.list'), url: \"countries.list\" },\n { title: $filter('translate')('countries.edit'), url: `countries.edit({ id: ${$scope.region.country_id}})` },\n { title: $filter('translate')('countries.region_edit') },\n ];\n });\n }\n\n $scope.gridCities = {\n pdfTitle: $filter('translate')('countries.regions'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n enableSorting: true,\n paginationPageSizes: [10, 20, 30],\n paginationPageSize: 10,\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n {\n name: 'name', displayName: $filter('translate')('countries.name'), enableFiltering: true, enableHiding: false,\n },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('general.edit'), action: 'ng-click=\"grid.appScope.cityModal(row.entity.id)\" ng-if=\"grid.appScope.allowWrite\"', context: $scope, cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('general.delete'), action: 'ng-click=\"grid.appScope.deleteCityDialog(row.entity.id,row.entity.name);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n }\n ],\n getData: function (options) {\n $log.debug($scope.cityFilter)\n\n if (filter) {\n options.name = $scope.cityFilter.name;\n }\n\n options.country_region_id = $scope.region.id;\n\n return Restangular.all('CountriesRegionsCities').getList(options).then(function (results) {\n return results;\n });\n\n }\n };\n\n $scope.search = function () {\n if (angular.isDefined($scope.gridCities.loadData)) {\n filter = true;\n $scope.gridCities.loadData();\n }\n }\n\n $scope.cityModal = function (id: string | null = \"\") {\n\n $scope.city = {};\n id = !angular.isUndefined(id) ? $scope.city.id = id : $scope.city.id = null;\n\n let $modalInstance = $uibModal.open({\n animation: true,\n template: CountriesRegionsCitiesModalView,\n size: \"lg\",\n controller: \"CountriesRegionsCitiesModalCtrl\",\n scope: $scope,\n resolve: {\n value: function () { }\n },\n });\n\n }\n\n $scope.save = function () {\n\n if (!angular.isUndefined($scope.region.id)) {\n $scope.region.put().then(function (result) {\n if (typeof (result.id) != \"undefined\") {\n toastr.success($filter('translate')('countries.region_modified_success'));\n // $state.go(\"countries.edit\", { id: $scope.region.country_id });\n } else {\n $scope.errorMessage = result.message;\n }\n });\n } else {\n Restangular.all('CountriesRegions').post($scope.region).then(function (result) {\n if (typeof (result.id) != \"undefined\") {\n toastr.success($filter('translate')('countries.region_created_success'));\n $scope.region = result;\n $log.debug($scope.region)\n // $state.go(\"countries.edit\", { id: $scope.region.country_id });\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n }\n\n $scope.checkDelete = function () {\n modalService.confirm({\n title: $filter('translate')('countries.region_delete'),\n message: $filter('translate')('countries.region_delete_message') + \" \" + $scope.region.name + \"?\",\n onAccept: function () {\n $scope.region.remove().then(function () {\n toastr.success($filter('translate')('countries.region_remove_success'));\n $state.go(\"countries.edit\", { id: $scope.region.country_id });\n });\n }\n });\n };\n\n $scope.deleteCityDialog = function (id, name) {\n $scope.id = id;\n $scope.name = name;\n modalService.confirm({\n title: $filter('translate')('countries.city_delete'),\n message: $filter('translate')('countries.city_delete_message') + \" \" + name + \"?\",\n onAccept: function () {\n Restangular.one('CountriesRegionsCities', id).remove().then(function () {\n toastr.success($filter('translate')('countries.city_remove_success'));\n $scope.gridCities.loadData();\n }, function (response) {\n $log.error(\"Error with status code\", response.status);\n });\n }\n });\n\n };\n\n\n\n }])\n\n .controller(\"CountriesRegionsCitiesModalCtrl\", ['$scope', '$uibModalInstance', '$uibModal', '$http', 'Restangular', '$filter', 'LoginService', 'modalService', '$log',\n function ($scope, $uibModalInstance, $uibModal, $http, Restangular, $filter, LoginService, modalService, $log) {\n\n $scope.modalTitle = \"title\";\n $log.debug(\"inside\");\n\n if (angular.isUndefined($scope.city.id) || $scope.city.id == \"\") {\n\n $scope.city = { country_region_id: $scope.region.id };\n $scope.modalTitle = $filter('translate')('countries.cities_add');\n $log.debug($scope.modalTitle);\n $log.debug($scope.city)\n } else {\n\n $scope.modalTitle = $filter('translate')('countries.cities_edit');\n\n Restangular.one('CountriesRegionsCities', $scope.city.id).get().then(function (result) {\n $scope.city = result;\n $log.debug($scope.city);\n });\n }\n\n $scope.onAccept = function () {\n $log.debug($scope.city)\n\n if (!angular.isUndefined($scope.city.id)) {\n $scope.city.put().then(function (result) {\n if (typeof (result.id) != \"undefined\") {\n toastr.success($filter('translate')('countries.city_modified_success'));\n $scope.gridCities.loadData();\n $scope.city = {};\n } else {\n $scope.errorMessage = result.message;\n }\n });\n } else {\n Restangular.all('CountriesRegionsCities').post($scope.city).then(function (result) {\n if (typeof (result.id) != \"undefined\") {\n toastr.success($filter('translate')('countries.city_created_success'));\n $scope.gridCities.loadData();\n $scope.city = {};\n } else {\n $scope.errorMessage = result.message;\n }\n });\n \n }\n $uibModalInstance.close();\n }\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n \n \n\n }])\n\n ;\n\n","import './dashboard';\nimport './dashboard-list';\nimport './dashboard-show'; ","angular.module(\"dashboard\")\n\n .controller('dashboardListCtrl', ['$rootScope', '$scope', '$filter', 'LoginService', 'Restangular', '$stateParams', '$http', '$interval', '$templateCache', function ($rootScope, $scope, $filter, LoginService, Restangular, $stateParams, $http, $interval, $templateCache) {\n \n $rootScope.title = $filter('translate')('dashboard.dashboard');\n $scope.showCalendar = LoginService.permissionExist(\"EVENTS_READ\");\n $rootScope.breadcrumb = [];\n\n $scope.urlApi = (window as any).CONFIG.api_url;\n var options = {\n required_image: false,\n show_in_dashboard: true,\n _sortBy: \"date_to\",\n _sortDirection: \"asc\"\n };\n\n let loadEvents = function () {\n Restangular.all('Events').getList(options).then(function (events) {\n $scope.events = events;\n $scope.loadGuestsInfo();\n });\n }\n\n if (LoginService.permissionExist(\"EVENTS_READ\")) { //Sólo se muestra los eventos, si tiene permiso a ver eventos.\n loadEvents();\n \n $scope.loadGuestsInfo = function () {\n\n var today = new Date();\n\n angular.forEach($scope.events, function (item) {\n let date_from = new Date(item.date_from);\n item.hours = 0;\n if (item.all_day) {\n item.days = Math.round((date_from.getTime() - today.getTime()) / (1000 * 60 * 60 * 24));\n } else {\n item.hours = Math.round((date_from.getTime() - today.getTime()) / 1000 / 60 / 60);\n if (item.hours > 0) {\n item.days = 1;\n } else {\n item.days = Math.round((date_from.getTime() - today.getTime()) / (1000 * 60 * 60 * 24));\n }\n }\n if (item.days <= 0) {\n var params = { event_id: item.id };\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + 'Events/getActualEventCounts/',\n params: params\n }).then(function (results, status, headers, config) {\n $scope.invitedGuests = results.data;\n item.totalGuestsConfirmed = $scope.invitedGuests.total_guests_confirmed;\n item.totalGuestsNotExpected = $scope.invitedGuests.total_guests_not_expected;\n item.invitedGuestNotInYet = $scope.invitedGuests.guests_not_in_yet;\n item.filterGuestsIn = $scope.invitedGuests.guests_in;\n item.filterGuestsRejected = $scope.invitedGuests.guests_rejected;\n });\n }\n });\n\n };\n\n let intervalLoadInfoFirstDashboard = $interval(function () { $scope.loadGuestsInfo(); }, (window as any).CONFIG.time_check_changes_guests);\n //Cuando salga del events, se destruirá el intervalo.\n $scope.$on(\"$destroy\", function () {\n if (angular.isDefined(intervalLoadInfoFirstDashboard)) {\n $interval.cancel(intervalLoadInfoFirstDashboard);\n intervalLoadInfoFirstDashboard = undefined;\n }\n });\n\n //set or unset as favourite event\n $scope.eventFavourite = function (event_id) {\n Restangular.all('EventsFavouriteUsers').customPOST({}, \"SetOrUnsetFavourite\", { event_id: event_id }).then(function (result) {\n loadEvents();\n });\n\n }\n }\n }])\n\n;","angular.module(\"dashboard\")\n\n .controller('dashboardShowCtrl', ['$rootScope', '$scope', '$filter', 'LoginService', 'Restangular', '$stateParams', 'treeService', '$interval', '$http', 'filterFilter', '$log',\n function ($rootScope, $scope, $filter, LoginService, Restangular, $stateParams, treeService, $interval, $http, filterFilter, $log) {\n $scope.totalRow = 0;\n $scope.invitedGuestNotInYet = 0;\n $scope.filterGuestsIn = 0;\n $scope.filterGuestsRejected =0;\n $scope.totalGuestNotInYet = 0;\n $scope.totalGuestIn = 0;\n\n function isDefinedAndNotNull(val) {\n return angular.isDefined(val) && val !== null\n }\n function isDefinedAndNotNullOrEmpty(val) {\n return angular.isDefined(val) && val !== null && val !== \"\"\n }\n\n if (angular.isUndefined($stateParams.id) || $stateParams.id == \"\") {\n $rootScope.title = $filter('translate')('dashboard.dashboard');\n $rootScope.breadcrumb = [];\n } else {\n $rootScope.title = $filter('translate')('dashboard.dashboard');\n $rootScope.breadcrumb = [{ title: $filter('translate')('dashboard.dashboard'), url: \"dashboard.list\" }];\n }\n\n Restangular.one('Events', $stateParams.id).get().then(function (results) {\n $rootScope.is_template = results.is_template;\n $scope.event = results;\n $scope.event.date_from = new Date($scope.event.date_from);\n $scope.event.date_to = new Date($scope.event.date_to);\n });\n\n $scope.getGuestFilters = function (guests, type) {\n if (type == 'notin') {\n var res = filterFilter(guests, { confirmation_status: 'confirmed' });\n return filterFilter(res, { check_in_date: null }).length;\n } else if (type == 'in') {\n var res = filterFilter(guests, { confirmation_status: 'confirmed' });\n return filterFilter(res, { check_in_date: '!!' }).length;\n //return filterFilter(guests, { confirmation_status: 'confirmed' } && { check_in_date: '!!' }).length; NO SE PONE ASI PORWUE NO LE GUSTA MAS DE UN FILTRO.\n } else {\n var res = filterFilter(guests, { confirmation_status: '!confirmed' });\n return filterFilter(res, { check_in_date: '!!' }).length;\n //return filterFilter(guests, { confirmation_status: '!confirmed' } && { check_in_date: '!!' }).length; NO SE PONE ASI PORWUE NO LE GUSTA MAS DE UN FILTRO.\n }\n };\n\n $scope.loadGuests = function () {\n var params = { event_id: $stateParams.id };\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + 'Events/getActualEventInfo/',\n params: params\n }).then(function (results, status, headers, config) {\n $scope.invitedGuests = results.data.rows;\n $scope.totalRow = results.data.totalRow;\n $scope.invitedGuestNotInYet = $scope.getGuestFilters($scope.invitedGuests, 'notin');\n $scope.filterGuestsIn = $scope.getGuestFilters($scope.invitedGuests, 'in');\n $scope.filterGuestsRejected = $scope.getGuestFilters($scope.invitedGuests, 'rejected');\n $scope.totalGuestNotInYet = ($scope.invitedGuestNotInYet / ($scope.invitedGuestNotInYet + $scope.filterGuestsIn) * 100);\n $scope.totalGuestIn = ($scope.filterGuestsIn / ($scope.invitedGuestNotInYet + $scope.filterGuestsIn) * 100);\n });\n };\n $scope.loadGuests();\n let intervalLoadInfoDashboard = $interval(function () { $scope.loadGuests(); }, (window as any).CONFIG.time_check_changes_guests); \n\n //Cuando salga del events, se destruirá el intervalo.\n $scope.$on(\"$destroy\", function () {\n $log.debug(\"Entra en el destroy del dashboard\");\n if (angular.isDefined(intervalLoadInfoDashboard)) {\n $interval.cancel(intervalLoadInfoDashboard);\n intervalLoadInfoDashboard = undefined;\n }\n });\n\n //Grupos Por ahora nos los ponemos, siguiente version\n /* Restangular.all('Groups').getList().then(function (results) {\n var data = treeService.groups(results, null);\n $scope.groups = data;\n\n $scope.getvalueArray = function (item) {\n result = [];\n for (var i = 0; i < item; i++) {\n result.push(i);\n }\n return result;\n }\n });\n // Selecciona y deselecciona a todos los hijos\n $scope.toggleCheckTree = function (item) {\n\n angular.forEach($scope.groups, function (child) {\n if (child.parent_group_id == item.id) {\n child.checked = item.checked;\n $scope.toggleCheckTree(child);\n }\n });\n\n }*/\n\n /* $scope.options = {\n user_id: LoginService.get(\"userId\"),\n is_today_event: true\n };\n\n Restangular.all('Events').getList($scope.options).then(function (events) {\n $scope.events = events;\n });*/\n\n }])\n\n;","import BreadcrumbView from \"../common/breadcrumb/breadcrumb.html\";\nimport DashboardListView from \"./dashboard-list.html\";\nimport DashboardShowView from \"./dashboard-show.html\";\n\n\nangular.module(\"dashboard\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('dashboard', {\n url: \"/dashboard\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n })\n .state('dashboard.list', {\n url: \"/list\",\n controller: \"dashboardListCtrl\",\n template: DashboardListView\n })\n\n .state('dashboard.show', {\n url: \"/show/:id\",\n controller: \"dashboardShowCtrl\",\n template: DashboardShowView,\n data: { pageTitle: 'Evento actual' }\n })\n ;\n }])\n;","import './dashboard_space';\nimport './dashboard_space-show'; ","angular.module(\"dashboard_space\")\n\n .controller('DashboardSpaceShowCtrl', ['$rootScope', '$scope', 'Restangular', '$uibModal', '$filter', '$translate', '$stateParams', '$state', '$timeout', 'LoginService', function ($rootScope, $scope, Restangular, $uibModal, $filter, $translate, $stateParams, $state, $timeout, LoginService) {\n \n $scope.id = $stateParams.spaceId;\n\n }])\n \n;","import BreadcrumbView from \"../common/breadcrumb/breadcrumb.html\";\nimport DashboardSpaceShowView from \"./dashboard_space-show.html\";\n\n\nangular.module(\"dashboard_space\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('dashboard_space', {\n url: \"/dashboard_space\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n })\n .state('dashboard_space.show', {\n url: \"/show/:id/:spaceId\",\n controller: \"DashboardSpaceShowCtrl\",\n template: DashboardSpaceShowView\n })\n ;\n }])\n;","import './datasets';\nimport './datasets-service';\nimport './datasets-list';\nimport './datasets-edit'; \nimport './datasets-export';","angular.module(\"datasets\")\n\n .controller(\"DatasetsEditCtrl\", ['LanguagesService', 'LoginService', '$scope', '$rootScope', '$state', '$stateParams', 'Restangular', 'gridService', '$filter', '$translate', 'modalService', '$uibModal',\n function (LanguagesService, LoginService, $scope, $rootScope, $state, $stateParams, Restangular, gridService, $filter, $translate, modalService, $uibModal) {\n\n // Comprobamos si tiene permiso escritura\n\n $scope.allowWrite = LoginService.permissionExist(\"DATASETS_WRITE\");\n\n $rootScope.title = $filter('translate')('datasets.title');\n\n $scope.types = [\n { id: \"persons\", name: \"Autoridades\" },\n { id: \"events\", name: \"Eventos\" },\n { id: \"correspondence\", name: \"Correspondencia\" },\n { id: \"groups\", name: \"Grupos de autoridades\" },\n { id: \"staff\", name: \"Personal\" },\n { id: \"materials\", name: \"Materiales\" },\n { id: \"gifts\", name: \"Almacén de regalos\" },\n { id: \"persons_gifts\", name: \"Regalos\" },\n { id: \"restaurants\", name: \"Restaurantes\" },\n { id: \"tasks\", name: \"Tareas\" },\n { id: \"event_guests\", name: \"Invitados de evento\" },\n { id: \"inscriptions\", name: \"Inscripciones\" },\n { id: \"reservation\", name: \"Reservas\" },\n { id: \"event_resume\", name: \"Resumen Eventos\" },\n { id: \"act_resume\", name: \"Resumen Actos\" },\n { id: \"positions\", name: \"Cargos\" }\n ];\n\n $scope.dataset = {};\n if (angular.isUndefined($stateParams.id) || $stateParams.id == \"\") {\n\n $rootScope.breadcrumb = [\n { title: $filter('translate')('datasets.title'), url: \"datasets.list\" },\n { title: $filter('translate')('datasets.title_add') },\n ];\n\n } else {\n\n $rootScope.breadcrumb = [\n { title: $filter('translate')('datasets.title'), url: \"datasets.list\" },\n { title: $filter('translate')('datasets.title_edit') },\n ];\n\n Restangular.one('Datasets', $stateParams.id).get().then(function (result) {\n $scope.dataset = result;\n if ($scope.allowWrite) {\n if ($scope.dataset.is_system_dataset) {\n $scope.allowWrite = false;\n } else {\n $scope.allowWrite = true;\n }\n }\n });\n\n }\n\n $scope.save = function () {\n if (angular.isDefined($stateParams.id) && $stateParams.id != \"\") {\n $scope.dataset.put().then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('datasets.save_success'));\n $state.go(\"datasets.list\");\n } else {\n $scope.errorMessage = result.message;\n }\n });\n } else {\n Restangular.all('Datasets').post($scope.dataset).then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('datasets.edit_success'));\n $state.go(\"datasets.list\");\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n };\n\n $scope.checkDelete = function () {\n modalService.confirm({\n title: $filter('translate')('datasets.button_delete'),\n message: $filter('translate')('datasets.delete_message') + \" \" + $scope.dataset.name + \"?\",\n onAccept: function () {\n $scope.dataset.remove().then(function () {\n toastr.success($filter('translate')('datasets.deleted_success'));\n $state.go(\"datasets.list\");\n });\n }\n });\n };\n\n }]);\n\n","angular.module(\"datasets\")\n\n .controller(\"DatasetsExportCtrl\", ['$uibModalInstance', 'LoginService', '$scope', 'id', 'type', 'options', '$stateParams', 'Restangular', '$filter', '$log',\n function ($uibModalInstance, LoginService, $scope, id, type, options, $stateParams, Restangular, $filter, $log) {\n\n $scope.dataset_id = id;\n $scope.configuration = null;\n $scope.datasets = null;\n $scope.fileType = { value: \"xlsx\"};\n $scope.fileTypeOptions = [\n //{ name: \"csv\", translation: $filter('translate')('datasets.export_csv') },\n { name: \"xlsx\", translation: $filter('translate')('datasets.export_xlsm') },\n { name: \"pdf\", translation: $filter('translate')('datasets.export_pdf') },\n ];\n\n //Comprobamos si tiene permiso escritura\n $scope.allowExport = LoginService.permissionExist(\"DATASETS_EXPORT\");\n\n $scope.options = options; \n\n $log.debug('options');\n $log.debug(options);\n\n // Lo metemos en el filtro\n $scope.useFilter = false;\n $scope.toggleFilter = function () {\n if ($scope.useFilter) {\n $scope.useFilter = false;\n } else {\n $scope.useFilter = true;\n }\n }\n\n // Controlamos si hemos venido desde una exportación completa de grupo \n var recursiveElementId = null;\n if (options && options.recursiveElementId) {\n recursiveElementId = options.recursiveElementId;\n } \n\n //Obtenemos información de configuracion de exportación\n $log.debug(\"DatasetsExportCtrl\", id, type, options);\n $scope.loadExportConfig = function(dataset_id) {\n Restangular.all('Datasets').customGET(\"ExportConfig\", { id: dataset_id }).then(function (result) {\n $scope.configuration = result;\n $log.debug(result);\n });\n };\n\n if (id != null) {\n $scope.loadExportConfig(id);\n } else if (type != null) {\n Restangular.all('Datasets').getList({ type: type }).then(function (result) {\n $scope.datasets = result;\n $log.debug(result);\n });\n }\n\n $scope.onDatasetChange = function (dataset) {\n $scope.dataset_id = dataset.id;\n $scope.loadExportConfig(dataset.id);\n };\n\n $scope.onExport = function () {\n $log.debug($scope.fileType);\n $log.debug($scope.options);\n\n var data = {\n id: $scope.configuration.id,\n name: $scope.configuration.name,\n columns: $scope.configuration.columns,\n options: options\n };\n\n // Controlamos desde aquí si se usa el filtro o no\n if (!$scope.useFilter) {\n if (data.options != null) {\n data.options.FILTERED_IDS = null;\n }\n }\n\n $log.debug(data);\n \n var settings = {\n id: $scope.dataset_id,\n fileType: $scope.fileType.value,\n recursiveElementId: options!=null?options.recursiveElementId:null\n }\n\n Restangular.all('Datasets').customPOST(data, \"Export\", { id: $scope.dataset_id, fileType: $scope.fileType.value, recursiveElementId: recursiveElementId }).then(function (result) {\n $scope.exportResult = result;\n $scope.getSize();\n });\n };\n\n $scope.getSize = function () {\n var result = \"\";\n if ($scope.exportResult.size < 1024) {\n result = $scope.exportResult.size + \" bytes\";\n }else if ($scope.exportResult.size < (1024 * 1024)) {\n result = $filter('number')($scope.exportResult.size / 1024, 2) + \"Kb\";\n } else {\n result = $filter('number')($scope.exportResult.size / 1024 / 1024, 2) + \"Mb\";\n }\n $scope.exportResult.size_description = result;\n };\n\n $scope.onDownload = function () {\n var url = \"/api/datasets/download/\" + $scope.exportResult.code + \"?fileName=\" + $scope.exportResult.name;\n window.open(url);\n $uibModalInstance.close();\n };\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n }]);\n\n","angular.module(\"datasets\")\n\n .controller(\"DatasetsListCtrl\", ['datasetsService', 'LoginService', '$rootScope', '$scope', '$http', '$interval', '$q', 'i18nService', 'Restangular', 'gridService', 'modalService', '$uibModal', '$filter', '$translate', '$state', '$log',\n function (datasetsService, LoginService, $rootScope, $scope, $http, $interval, $q, i18nService, Restangular, gridService, modalService, $uibModal, $filter, $translate, $state, $log) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"DATASETS_WRITE\");\n\n $rootScope.title = $filter('translate')('datasets.title');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('datasets.title') }\n ];\n\n $scope.gridOptions = {\n pdfTitle: $filter('translate')('datasets.title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n enableSorting: true,\n paginationPageSizes: [20, 40, 60],\n paginationPageSize: 20,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n { name: 'name', displayName: $filter('translate')('datasets.name'), enableFiltering: true, enableHiding: false },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('datasets.button_export'), action: 'ng-click=\"grid.appScope.exportDialog(row.entity.id)\"', cssIconClass: \"fa fa-gears\" },\n { title: $filter('translate')('datasets.button_edit'), action: 'ui-sref=\"datasets.edit({id:row.entity.id})\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('datasets.button_delete'), action: 'ng-click=\"grid.appScope.deleteDialog(row.entity.id,row.entity.name);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n return Restangular.all('Datasets').getList(options);\n }\n };\n\n $scope.goToEdit = function (rowEntity) {\n $state.go(\"datasets.edit\", { id: rowEntity.id });\n };\n\n $scope.deleteDialog = function (id, name) {\n $scope.id = id;\n $scope.name = name;\n modalService.confirm({\n title: $filter('translate')('datasets.button_delete'),\n message: $filter('translate')('datasets.delete_message') + \" \" + $scope.name + \"?\",\n onAccept: function () {\n Restangular.one('Datasets', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('datasets.deleted_success'));\n $scope.gridOptions.gridApi.core.raise.itemDeleted($scope);\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n });\n };\n\n $scope.exportDialog = function (id) {\n $log.debug(\"export\", id);\n datasetsService.export(id, null);\n };\n\n }])\n\n;","import DatasetsExportView from \"./datasets-export.html\";\n\n\nangular.module(\"datasets\")\n .factory(\"datasetsService\", ['$injector', function ($injector) {\n var instance = null;\n function remove() {\n instance = null;\n }\n var service = {\n export: function (id, options) {\n if (instance != null) return;\n var $uibModal = $injector.get(\"$uibModal\");\n instance = $uibModal.open({\n animation: true,\n template: DatasetsExportView,\n controller: 'DatasetsExportCtrl',\n size: 'md',\n resolve: {\n id: function () { return id; },\n type: function () { return null; },\n options: function () { return options; }\n }\n });\n instance.result.then(function (result) {\n remove();\n }, function () {\n remove();\n })\n },\n exportByType: function (type, options) {\n if (instance != null) return;\n var $uibModal = $injector.get(\"$uibModal\");\n instance = $uibModal.open({\n animation: true,\n template: DatasetsExportView,\n controller: 'DatasetsExportCtrl',\n size: 'md',\n resolve: {\n id: function () { return null; },\n type: function () { return type; },\n options: function () { return options; }\n }\n });\n instance.result.then(function (result) {\n remove();\n }, function () {\n remove();\n })\n },\n };\n return service;\n }]);","import BreadcrumbView from \"../common/breadcrumb/breadcrumb.html\";\nimport DatasetsListView from \"./datasets-list.html\";\nimport DatasetsEditView from \"./datasets-edit.html\";\nimport DatasetsExportView from \"./datasets-export.html\";\n\n\nangular.module(\"datasets\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('datasets', {\n url: \"/datasets\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n })\n\n .state('datasets.list', {\n url: \"/list\",\n controller: \"DatasetsListCtrl\",\n template: DatasetsListView,\n cache: false,\n requiredPermission: [\"DATASETS_READ\"]\n })\n .state('datasets.edit', {\n url: \"/edit/:id\",\n controller: \"DatasetsEditCtrl\",\n template: DatasetsEditView,\n cache: false,\n requiredPermission: [\"DATASETS_READ\"]\n })\n .state('datasets.export', {\n url: \"/export/:id\",\n controller: \"DatasetsExportCtrl\",\n template: DatasetsExportView,\n cache: false,\n requiredPermission: [\"DATASETS_EXPORT\"]\n })\n }])\n;","import './documents_reports';\nimport './documents_reports-list';\nimport './documents_reports-edit'; ","angular.module(\"documents_reports\")\n\n .controller('DocumentsReportsEditCtrl', ['$rootScope', '$scope', '$http', '$stateParams', 'Restangular', '$state', '$translate', 'modalService','$filter','Upload', '$log',\n function ($rootScope, $scope, $http, $stateParams, Restangular, $state, $translate, modalService, $filter, Upload, $log) {\n\n Restangular.one('Companies', $rootScope.company_id).get().then(function (results) {\n $scope.company_uid = results.uid;\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n\n //cargando documents types\n Restangular.all('DocumentsTypes').getList().then(function (results) {\n $scope.documentsTypes = results;\n }, function (response) {\n $scope.errorMessage = response.message;\n }); \n\n $scope.fileJrxml = {};\n $scope.fileJasper = {};\n\n $rootScope.title = $filter('translate')('documents_reports.title');\n\n if (angular.isUndefined($stateParams.id) || $stateParams.id == \"\") {\n\n $rootScope.breadcrumb = [\n { title: $filter('translate')('documents_reports.list'), url: \"documents_reports.list\" },\n { title: $filter('translate')('documents_reports.button_add') }\n ];\n $scope.documents_reports = {\n created_at: new Date()\n };\n }\n else {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('documents_reports.list'), url: \"documents_reports.list\" },\n { title: $filter('translate')('documents_reports.edit') }\n ];\n Restangular.one('Documents', $stateParams.id).get().then(function (results) {\n $scope.documents_reports = results;\n\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n\n $scope.uploadFileJrxml = function ($file) {\n $scope.errorMsgJrxml = undefined;\n $scope.fileJrxml = $file;\n if ($scope.fileJrxml.name.indexOf(\".jrxml\") < 0) {\n $scope.errorMsgJrxml = $filter('translate')('documents_reports.fileJrxmlTypeIncorrect');\n }\n }\n $scope.uploadFileJasper = function ($file) {\n $scope.errorMsgJasper = undefined;\n $scope.fileJasper = $file;\n \n if ($scope.fileJasper.name.indexOf(\".jasper\") < 0) {\n $scope.errorMsgJasper = $filter('translate')('documents_reports.fileJasperTypeIncorrect');\n }\n }\n\n $scope.uploadToServer = function () {\n var path = \"\";\n if ($scope.documents_reports.is_general) {\n path = \"general\";\n } else {\n path = $scope.company_uid;\n }\n $scope.fileJrxml.upload = Upload.upload({\n url: (window as any).CONFIG.api_url + \"Reports/uploadFile\",\n data: { file: $scope.fileJrxml, name: $scope.fileJrxml.name, path: path },\n });\n $scope.fileJasper.upload = Upload.upload({\n url: (window as any).CONFIG.api_url + \"Reports/uploadFile\",\n data: { file: $scope.fileJasper, name: $scope.fileJasper.name, path: path },\n });\n $scope.fileJrxml.upload.then(function (response) {\n if (response.data) {\n $log.debug(response.data, response);\n $scope.errorMsg = response.data;\n } else {\n $scope.documents_reports.jasper_path = undefined;\n }\n }, function (response) { //error\n $scope.errorMsg = response.data;\n });\n }\n\n $scope.cancel = function () {\n $state.go(\"documents_reports.list\", { \"reset\": false });\n };\n\n $scope.save = function () {\n let path = \"general\";\n if (!$scope.documents_reports.is_general) {\n path = $scope.company_uid;\n }\n \n let hasUploadedFiles = false;\n let uploadFileNameError = false;\n if($scope.fileJrxml.name !== undefined && $scope.fileJasper.name !== undefined) {\n if ($scope.fileJasper.name.substring(0, $scope.fileJasper.name.length - 7) === $scope.fileJrxml.name.substring(0, $scope.fileJrxml.name.length - 6)) {\n $scope.documents_reports.jasper_path = path +'\\\\'+ $scope.fileJrxml.name;\n hasUploadedFiles = true;\n } else {\n uploadFileNameError = true;\n $scope.errorMsgJasper = $filter('translate')('documents_reports.filesDistinctName');\n }\n }\n \n if(!uploadFileNameError) {\n if (angular.isUndefined($stateParams.id) || $stateParams.id === \"\")\n Restangular.all('Documents').post($scope.documents_reports).then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('documents_reports.create_success'));\n $state.go(\"documents_reports.edit\");\n if(hasUploadedFiles) {\n $scope.uploadToServer();\n }\n } else {\n $scope.errorMessage = result.message;\n }\n });\n else {\n $scope.documents_reports.put().then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('documents_reports.edit_success'));\n $state.go(\"documents_reports.edit\");\n if(hasUploadedFiles) {\n $scope.uploadToServer();\n }\n } else {\n $scope.errorMessage = result.message;\n }\n });\n } \n }\n };\n }]);","import angular from \"angular\";\nimport toastr from 'toastr';\n\nangular.module(\"documents_reports\")\n\n .controller('DocumentsReportsListCtrl', ['$rootScope', '$scope', 'Restangular', 'gridService', 'modalService', 'uiGridConstants', '$filter', 'LoginService', '$stateParams', '$state', '$log',\n function ($rootScope, $scope, Restangular, gridService, modalService, uiGridConstants, $filter, LoginService, $stateParams, $state, $log) {\n\n $rootScope.title = $filter('translate')('documents_reports.title');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('documents_reports.subtitleList') }\n ];\n\n Restangular.all('DocumentsTypes').getList().then(function (results) {\n $scope.documentsTypes = results;\n }, function (response) {\n $scope.errorMessage = response.message;\n }); \n\n $scope.documents_reports_filter = {\n name: \"\",\n description: \"\",\n code: \"\",\n type: \"\"\n };\n\n //reseteamos los filtros del buscador\n if (!angular.isDefined($stateParams.reset) || $stateParams.reset == null) $stateParams.reset = true;\n\n $log.debug($stateParams.reset);\n\n if ($stateParams.reset != false) {\n localStorage.removeItem(\"persons_filters\");\n } else {\n var savedFilters = localStorage.getItem(\"documents_reports_filter\");\n $log.debug(savedFilters);\n if (savedFilters != null) {\n $scope.documents_reports_filter = JSON.parse(savedFilters);\n }\n }\n\n $scope.gridOptionsDocuments = {\n pdfTitle: $filter('translate')('documents_reports.pdf_title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n paginationPageSizes: [20, 50, 100],\n paginationPageSize: 100,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n { name: 'name', displayName: $filter('translate')('documents_reports.name'), width: 200, enableFiltering: true, enableHiding: false, enableColumnMenu: false },\n { name: 'description', displayName: $filter('translate')('documents_reports.description'), enableFiltering: true, enableHiding: false, enableColumnMenu: false },\n { name: 'jasper_path', displayName: $filter('translate')('documents_reports.path'), width: 500, cellTemplate: '{{row.entity.jasper_path}}', enableFiltering: true, enableHiding: false, enableColumnMenu: false },\n { name: 'FK_documents_documents_types.name', displayName: $filter('translate')('documents_reports.type'), enableFiltering: true, enableHiding: false, enableColumnMenu: false },\n { name: 'usage_count', displayName: $filter('translate')('documents_reports.usage_count'), enableFiltering: true, enableHiding: false, enableColumnMenu: false },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('documents_reports.button_duplicate'), action: 'ng-click=\"grid.appScope.duplicate(row.entity.id)\"', cssIconClass: \"fa fa-copy\" },\n { title: $filter('translate')('documents_reports.button_edit'), action: 'ui-sref=\"documents_reports.edit({id:row.entity.id})\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('documents_reports.button_delete'), action: 'ng-click=\"grid.appScope.BorrarDialog(row.entity.id,row.entity.name);\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n\n ],\n getData: function (options) {\n if ($scope.documents_reports_filter.name != \"\") options.name = $scope.documents_reports_filter.name;\n if ($scope.documents_reports_filter.description != \"\") options.description = $scope.documents_reports_filter.description;\n if ($scope.documents_reports_filter.code != \"\") options.code = $scope.documents_reports_filter.code;\n if ($scope.documents_reports_filter.type != \"\") options.type = $scope.documents_reports_filter.type;\n\n localStorage.setItem(\"documents_reports_filter\", JSON.stringify($scope.documents_reports_filter));\n\n return Restangular.all('Documents').getList(options);\n }\n\n };\n\n $scope.goToEdit = function (rowEntity) {\n $state.go(\"documents_reports.edit\", { id: rowEntity.id });\n }\n\n $scope.searchDocumentsReports = function () {\n if (angular.isDefined($scope.gridOptionsDocuments.loadData)) {\n $scope.gridOptionsDocuments.loadData(false);\n }\n }\n\n $scope.clearFilters = function () {\n $scope.documents_reports_filter = {\n name: \"\",\n description: \"\",\n code: \"\",\n type: \"\"\n };\n\n $scope.gridOptionsDocuments.loadData(false);\n }\n\n $scope.BorrarDialog = function (id, name) {\n $scope.id = id;\n $scope.name = name;\n modalService.confirm({\n title: $filter('translate')('documents_reports.button_delete'),\n message: $filter('translate')('documents_reports.delete_message') + \" \" + name + \"?\",\n onAccept: function () {\n Restangular.one('Documents', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('documents_reports.delete_success'));\n $scope.gridOptionsDocuments.gridApi.core.raise.itemDeleted($scope);\n\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n });\n };\n\n $scope.duplicate = function (id) {\n Restangular.all('Documents').customPOST({}, \"DuplicateDocument\", { id: id }).then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('documents_reports.create_success'));\n $scope.gridOptionsDocuments.loadData();\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n }]);","import BreadcrumbView from \"../common/breadcrumb/breadcrumb.html\";\nimport DocumentsReportsListView from \"./documents_reports-list.html\";\nimport DocumentsReportsEditView from \"./documents_reports-edit.html\";\n\n\nangular.module(\"documents_reports\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('documents_reports', {\n url: \"/documents_reports\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n })\n .state('documents_reports.list', {\n url: \"/list\",\n controller: \"DocumentsReportsListCtrl\",\n template: DocumentsReportsListView,\n params: { reset: null },\n data: { pageTitle: 'Documentos' }\n })\n .state('documents_reports.edit', {\n url: \"/edit/:id\",\n controller: \"DocumentsReportsEditCtrl\",\n template: DocumentsReportsEditView,\n data: { pageTitle: 'Documentos' }\n })\n ;\n }])\n ;","import './documents_types';\nimport './documents_types-list';\nimport './documents_types-edit'; ","import DocumentsTypesVariablesModalView from \"./documentsTypesVariablesModal.html\";\n\nangular.module(\"documents_types\")\n\n .controller('DocumentsTypesEditCtrl', ['$rootScope', '$scope', 'Restangular', 'gridService', 'modalService', '$filter', 'LoginService', '$stateParams', '$state', '$q', '$uibModal',\n function ($rootScope, $scope, Restangular, gridService, modalService, $filter, LoginService, $stateParams, $state, $q, $uibModal) {\n\n $scope.document_type = {};\n if (angular.isUndefined($stateParams.id) || $stateParams.id == \"\") {\n\n $rootScope.breadcrumb = [\n { title: $filter('translate')('documents_types.subtitleList'), url: \"documents_types.list\" },\n { title: $filter('translate')('documents_types.button_add') }\n ];\n }\n else {\n Restangular.one('DocumentsTypes', $stateParams.id).get().then(function (results) {\n $scope.document_type = results;\n\n $rootScope.breadcrumb = [\n { title: $filter('translate')('documents_types.subtitleList'), url: \"documents_types.list\" },\n { title: $scope.document_type.name + \" - \" + $filter('translate')('general.edit') }\n ];\n\n\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n\n $scope.cancel = function () {\n $state.go(\"documents_types.list\", { \"reset\": false });\n };\n\n $scope.gridOptionsVariables = {\n pdfTitle: $filter('translate')('materials.pdf_title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n //gridMenuShowHideColumns: false,\n enableSorting: true,\n paginationPageSizes: [20, 40, 60],\n paginationPageSize: 20,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'name', displayName: $filter('translate')('documents_types.name'), enableFiltering: true },\n { name: 'code', displayName: $filter('translate')('documents_types.code'), enableFiltering: true },\n { name: 'format', displayName: $filter('translate')('documents_types.format'), enableFiltering: true },\n { name: 'order', displayName: $filter('translate')('documents_types.order'), enableFiltering: true },\n { name: 'show_by_default', displayName: $filter('translate')('type_variable.by_default'), enableFiltering: true, cellTemplate: ' 0\" class=\"fa fa-circle\" style=\"color:green\">' },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('general.edit'), action: 'ng-click=\"grid.appScope.addDocumentTypeVariable(row.entity)\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('general.delete'), action: 'ng-click=\"grid.appScope.deleteVariablesDialog(row.entity.id,row.entity.name);\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n\n ],\n getData: function (options) {\n var deferred = $q.defer();\n Restangular.all(\"DocumentsTypes\").customGET(\"GetVariables\", { document_type_id: $scope.document_type.id }).then(function (results) {\n var data = results;\n data.totalRows = results.length;\n $scope.totalRows = data.totalRows;\n deferred.resolve(data);\n });\n\n return deferred.promise;\n \n }\n };\n\n\n $scope.save = function () {\n if (angular.isUndefined($stateParams.id) || $stateParams.id === \"\")\n Restangular.all('DocumentsTypes').post($scope.document_type).then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('documents_types.create_success'));\n $scope.document_type.id = result.id;\n } else {\n $scope.errorMessage = result.message;\n }\n });\n else {\n $scope.document_type.put().then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('documents_types.edit_success'));\n $state.go(\"documents_types.edit\");\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n };\n\n $scope.addDocumentTypeVariable = function (rowEntity) {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: DocumentsTypesVariablesModalView,\n size: \"lg\",\n controller: \"DocumentsTypesVariablesModalCtrl\",\n scope: $scope,\n resolve: {\n document_type_variable_id: function () {\n return rowEntity ? rowEntity.id: null;\n },\n document_type_id: function () {\n return $scope.document_type.id;\n }\n }\n });\n\n $modalInstance.result.then(function (success) {\n $scope.gridOptionsVariables.loadData(false);\n });\n }\n\n\n $scope.delete = function (id, name) {\n $scope.id = id;\n $scope.name = name;\n modalService.confirm({\n title: $filter('translate')('general.delete'),\n message: $filter('translate')('general.delete_message') + \" \" + $scope.name + \"?\",\n onAccept: function () {\n Restangular.one('DocumentsTypes', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('documents_types.delete_success'));\n $state.go(\"documents_types.list\", { \"reset\": false });\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n });\n\n };\n\n $scope.goToEdit = function (rowEntity) {\n $scope.addDocumentTypeVariable(rowEntity);\n }\n\n\n $scope.deleteVariablesDialog = function (id, name) {\n $scope.id = id;\n $scope.name = name;\n modalService.confirm({\n title: $filter('translate')('general.delete'),\n message: $filter('translate')('general.delete_message') + \" \" + $scope.name + \"?\",\n onAccept: function () {\n Restangular.one('DocumentsTypesVariables', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('documents_types.delete_success'));\n $scope.gridOptionsVariables.gridApi.core.raise.itemDeleted($scope);\n\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n });\n\n };\n\n\n\n }]);","angular.module(\"documents_types\")\n\n .controller('DocumentsTypesListCtrl', ['$rootScope', '$scope', 'Restangular', 'gridService', 'modalService', 'uiGridConstants', '$filter', 'LoginService', '$stateParams', '$state',\n function ($rootScope, $scope, Restangular, gridService, modalService, uiGridConstants, $filter, LoginService, $stateParams, $state) {\n\n $rootScope.title = $filter('translate')('documents_types.title');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('documents_types.subtitleList') }\n ];\n\n $scope.gridOptionsDocumentsTypes = {\n pdfTitle: $filter('translate')('documents_types.pdf_title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n paginationPageSizes: [20, 50, 100],\n paginationPageSize: 100,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'name', displayName: $filter('translate')('documents_types.name'), enableFiltering: true, enableHiding: false, enableColumnMenu: false },\n { name: 'code', displayName: $filter('translate')('documents_types.code'), enableFiltering: true, enableHiding: false, enableColumnMenu: false },\n { name: 'icon', displayName: $filter('translate')('documents_types.icon'), enableFiltering: true, enableHiding: false, enableColumnMenu: false, cellTemplate: \"
 
\" },\n { name: 'order', displayName: $filter('translate')('documents_types.order'), enableFiltering: true, enableHiding: false, enableColumnMenu: false },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('general.edit'), action: 'ui-sref=\"documents_types.edit({id:row.entity.id})\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('general.delete'), action: 'ng-click=\"grid.appScope.deleteDialog(row.entity.id,row.entity.name);\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n\n ],\n getData: function (options) {\n\n return Restangular.all('DocumentsTypes').getList(options);\n }\n\n };\n\n $scope.goToEdit = function (rowEntity) {\n $state.go(\"documents_types.edit\", { id: rowEntity.id });\n }\n\n $scope.deleteDialog = function (id, name) {\n $scope.id = id;\n $scope.name = name;\n modalService.confirm({\n title: $filter('translate')('providers.button_delete'),\n message: $filter('translate')('providers.delete_message') + \" \" + $scope.name + \"?\",\n onAccept: function () {\n Restangular.one('DocumentsTypes', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('providers.delete_success'));\n $scope.gridOptionsDocumentsTypes.gridApi.core.raise.itemDeleted($scope);\n\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n });\n\n };\n\n\n }]);","import BreadcrumbView from \"../common/breadcrumb/breadcrumb.html\";\nimport DocumentsTypesListView from \"./documents_types-list.html\";\nimport DocumentsTypesEditView from \"./documents_types-edit.html\";\n\n\nangular.module(\"documents_types\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('documents_types', {\n url: \"/documents_types\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n })\n .state('documents_types.list', {\n url: \"/list\",\n controller: \"DocumentsTypesListCtrl\",\n template: DocumentsTypesListView,\n params: { reset: null },\n data: { pageTitle: 'Tipos de documentos' }\n })\n .state('documents_types.edit', {\n url: \"/edit/:id\",\n controller: \"DocumentsTypesEditCtrl\",\n template: DocumentsTypesEditView,\n data: { pageTitle: 'Tipos de documentos' }\n })\n ;\n }])\n ;","import './event_hosts';\nimport './event_hosts-list';\nimport './event_hosts-edit';","import IconPicker from '../../scripts/iconpicker-1.5.0.js';\n\nangular.module(\"eventHosts\")\n\n .controller(\"EventHostsEditCtrl\", ['LoginService', '$scope', '$rootScope', '$controller', '$state', '$stateParams', 'Restangular', '$uibModal', 'modalService', '$compile', 'gridService', '$filter', '$translate',\n function (LoginService, $scope, $rootScope, $controller, $state, $stateParams, Restangular, $uibModal, modalService, $compile, gridService, $filter, $translate) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"EVENT_HOSTS_WRITE\");\n $rootScope.title = $filter('translate')('event-hosts.title');\n\n\n IconPicker.Init({\n // Required: You have to set the path of IconPicker JSON file to \"jsonUrl\" option. e.g. '/content/plugins/IconPicker/dist/iconpicker-1.5.0.json'\n jsonUrl: '/assets/iconpicker-1.5.0.json',\n // Optional: Change the buttons or search placeholder text according to the language.\n searchPlaceholder: 'Search Icon',\n showAllButton: 'Show All',\n cancelButton: 'Cancel',\n noResultsFound: 'No results found.', // v1.5.0 and the next versions\n borderRadius: '20px', // v1.5.0 and the next versions\n });\n\n IconPicker.Run('#GetIconPicker', function () {\n // ng-bind no funciona para asignar el icono porque no detecta el cambio que hacemos con el IconPicker, así que hay que hacerlo a pelo.\n let icon = document.querySelector(\"#IconPreview\").getAttribute(\"class\");\n icon = icon.substring(icon.indexOf('-')+1);\n $scope.event_host.icon = icon;\n\n });\n\n $scope.event_host_id = $stateParams.id;\n \n\n if (angular.isUndefined($stateParams.id) || $stateParams.id == \"\") {\n\n $rootScope.breadcrumb = [\n { title: $filter('translate')('event-hosts.title'), url: \"eventHosts.list\" },\n { title: $filter('translate')('event-hosts.add') },\n ];\n\n $scope.event_host = {};\n\n } else {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('event-hosts.title'), url: \"eventHosts.list\" },\n { title: $filter('translate')('general.edit') },\n ];\n\n Restangular.one('EventHosts', $stateParams.id).get().then(function (result) {\n $scope.event_host = result;\n });\n }\n\n $scope.save = function (frmEventHosts) {\n\n if (!angular.isUndefined($scope.event_host.id)) {\n $scope.event_host.put().then(function (result) {\n if (typeof (result.id) != \"undefined\") {\n toastr.success($filter('translate')('event_host.modified_success'));\n $state.go(\"event_hosts.list\");\n } else {\n $scope.errorMessage = result.message;\n }\n });\n } else {\n Restangular.all('EventHosts').post($scope.event_host).then(function (result) {\n if (typeof (result.id) != \"undefined\") {\n toastr.success($filter('translate')('event_host.created_success'));\n $state.go(\"event_hosts.list\");\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n }\n\n\n $scope.checkDelete = function () {\n modalService.confirm({\n title: $filter('translate')('event_host.delete'),\n message: $filter('translate')('event_host.delete_message') + \" \" + $scope.event_host.name + \"?\",\n onAccept: function () {\n $scope.event_host.remove().then(function () {\n toastr.success($filter('translate')('event_host.remove_success'));\n $state.go(\"event_hosts.list\");\n });\n }\n });\n };\n\n }])\n\n ;\n\n","angular.module(\"eventHosts\")\n\n .controller(\"EventHostsListCtrl\", ['LoginService', '$rootScope', '$scope', '$http', '$interval', '$q', 'i18nService', 'Restangular', 'uiGridTreeViewConstants', 'gridService', 'treeService', 'modalService', '$uibModal', '$filter', '$translate', '$state',\n function (LoginService, $rootScope, $scope, $http, $interval, $q, i18nService, Restangular, uiGridTreeViewConstants, gridService, treeService, modalService, $uibModal, $filter, $translate, $state) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"EVENT_HOSTS_WRITE\");\n\n $rootScope.title = $filter('translate')('event-hosts.title');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('event-hosts.title') }\n ];\n\n $scope.gridOptions = {\n pdfTitle: $filter('translate')('event-hosts.pdf_title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n enableSorting: true,\n paginationPageSizes: [20, 40, 60],\n paginationPageSize: 20,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n {\n name: 'icon', displayName: $filter('translate')('general.icon'), cellTemplate: '
' +\n '' +\n '
', width: 80, enableFiltering: false, enableHiding: false },\n { name: 'color', displayName: $filter('translate')('general.color'), enableFiltering: false, cellTemplate: gridService.colorTemplate(\"color\"), maxWidth: 30},\n { name: 'name', displayName: $filter('translate')('general.name'), enableFiltering: true, enableHiding: false },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('general.button_edit'), action: 'ui-sref=\"event_hosts.edit({id:row.entity.id})\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('general.button_delete'), action: 'ng-click=\"grid.appScope.deleteDialog(row.entity.id,row.entity.name);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n return Restangular.all('EventHosts').getList(options);\n }\n };\n\n $scope.goToEdit = function (rowEntity) {\n $state.go(\"event_hosts.edit\", { id: rowEntity.id });\n }\n\n\n $scope.deleteDialog = function (id, name) {\n $scope.id = id;\n $scope.name = name;\n modalService.confirm({\n title: $filter('translate')('event-hosts.button_delete'),\n message: $filter('translate')('event-hosts.delete_message') + \" \" + $scope.name + \"?\",\n onAccept: function () {\n Restangular.one('EventHosts', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('event-hosts.deleted_success'));\n $scope.gridOptions.gridApi.core.raise.itemDeleted($scope);\n\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n });\n\n };\n\n }])\n\n ;","import BreadcrumbView from \"../common/breadcrumb/breadcrumb.html\";\nimport EventHostsListView from \"./event_hosts-list.html\";\nimport EventHostsEditView from \"./event_hosts-edit.html\";\n\n\nangular.module(\"eventHosts\", ['ui.bootstrap.contextMenu'])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('event_hosts', {\n url: \"/event_hosts\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n })\n\n .state('event_hosts.list', {\n url: \"/list\",\n controller: \"EventHostsListCtrl\",\n template: EventHostsListView,\n requiredPermission: [\"EVENT_HOSTS_READ\"]\n })\n .state('event_hosts.edit', {\n url: \"/edit/:id\",\n controller: \"EventHostsEditCtrl\",\n template: EventHostsEditView,\n requiredPermission: [\"EVENT_HOSTS_READ\"]\n })\n }])\n ;","import './events';\nimport './events-list';\nimport './events-edit';\n\nimport './accreditations/accreditations-list';\nimport './annexes/events_annexes';\nimport './budget/budget-list';\nimport './cms_categories/cms_article_event-edit';\nimport './cms_categories/cms_article_event-list';\nimport './cms_categories/cms_categories_event-edit';\nimport './cms_categories/cms_categories_event-list';\nimport './common/historicMails';\nimport './diary/diary';\nimport './documents/documents-edit';\nimport './documents/documents-list';\nimport './groups/groups-list';\nimport './guests/import/guests-import';\nimport './guests/actions-menu';\nimport './guests/guests-list';\nimport './guests/guestsNotesModal';\nimport './guests/guestsSpaceZonesModal';\nimport './guests/guestVehiclesModal';\nimport './guests/searchGroupModal';\nimport './historic_mails/historic_mails-list';\nimport './indicators_types/indicators_types-list';\nimport './locations/locationsEvents-list';\nimport './mail_accounts/mail_accounts-list';\nimport './materials/materials-list';\nimport './parkings/parkings-list';\nimport './programs_acts/programs_acts-list';\nimport './push_notifications/push_notifications_event-edit';\nimport './push_notifications/push_notifications_event-list';\nimport './resume/resume-list';\nimport './spaces/spaces-edit';\nimport './spaces/spaces-list';\nimport './staff/staff-list';\nimport './work_team/work_team-list';\nimport './tasks/tasks-list';\n","import AccreditationsModalView from \"./accreditationsModal.html\";\n\n\nangular.module(\"events\")\n.controller(\"EventsAccreditationsCtrl\", ['event', 'LoginService', '$rootScope', '$scope', 'Restangular', 'gridService', 'modalService', '$uibModal', '$filter', '$translate', '$stateParams', '$state', 'uiGridConstants', '$timeout', '$q', '$http', 'uiGridTreeViewConstants', 'treeService', '$sce', '$log',\n function (event, LoginService, $rootScope, $scope, Restangular, gridService, modalService, $uibModal, $filter, $translate, $stateParams, $state, uiGridConstants, $timeout, $q, $http, uiGridTreeViewConstants, treeService, $sce, $log) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"EVENTS_ACCREDITATION_WRITE\");\n if(!Array.isArray($scope.$parent.menusItems)) {\n $state.go(\"events.edit\", { id: $stateParams.id });\n } else {\n let results = $scope.$parent.menusItems.filter(m => m.id === parseInt($stateParams.menu_item_id, 10));\n if(results.length > 0) {\n $scope.allowWrite &&= results[0].editable;\n } else {\n $scope.allowWrite = false;\n }\n }\n $rootScope.breadcrumb = [\n { title: $filter('translate')('events.title'), url: \"events.list\" },\n { title: event.name, url: \"events.edit({ id: \" + event.id + \" })\" },\n { title: $filter('translate')('events.accreditations.accreditations') }\n ];\n $rootScope.title = event.name + \" - \" + $filter('translate')('events.accreditations.accreditations');\n\n\n $scope.accreditations = {};\n\n function isDefinedAndNotNull(val) {\n return angular.isDefined(val) && val !== null\n }\n\n $scope.is_template = $stateParams.is_template == 'true';\n $scope.gridOptionsEventAccreditations = {\n pdfTitle: function () { return event.name + \" - \" + $filter('translate')('events.accreditations.pdf_title'); },\n exporterMenuCsv: true,\n enableGridMenu: true,\n showTreeExpandNoChildren: false,\n enableSorting: true,\n rowTemplate: '
',\n paginationPageSizes: [10, 20, 40],\n paginationPageSize: 10,\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n {\n name: 'color', displayName: $filter('translate')('events.accreditations.color'), width: 60, enableFiltering: false, enableHiding: false, enableColumnMenu: false,\n cellTemplate: '
 
',\n },\n {\n name: 'name', displayName: $filter('translate')('events.accreditations.name'), enableFiltering: true, enableHiding: false, enableColumnMenu: false,\n cellTemplate: '',\n },\n {\n name: ' ', width: 60, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionIconTemplate([\n { title: \"\", action: ' ng-click=\"grid.appScope.addEventAccreditation(row.entity.id)\" ng-if=\"grid.appScope.allowWrite && row.entity.id != null\"', cssIconClass: \"fa fa-edit\" },\n { title: \"\", action: 'ng-click=\"grid.appScope.deleteDialog(row.entity.id,row.entity.name);\" ng-if=\"grid.appScope.allowWrite && row.entity.id != null\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n var deferred = $q.defer();\n\n options.event_id = $stateParams.id;\n Restangular.all('EventsGuestsAccreditations').getList(options).then(function (result) {\n deferred.resolve(result);\n });\n return deferred.promise;\n\n }\n };\n\n\n\n $scope.addEventAccreditation = function (id) {\n\n $log.debug(id);\n\n let $modalInstance = $uibModal.open({\n animation: true,\n template: AccreditationsModalView,\n controller: \"AccreditationsModalCtrl\",\n size: 'md',\n resolve: {\n event_guest_accreditation_id: function () {\n return id;\n },\n event_id: function () {\n return $stateParams.id;\n }\n }\n\n });\n\n //Retorno de los datos desde el modal.\n $modalInstance.result.then(function (resultModal) {\n $scope.gridOptionsEventAccreditations.loadData(false);\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n });\n\n };\n\n //Delete desde el listado\n $scope.deleteDialog = function (id, title) {\n\n modalService.confirm({\n title: $filter('translate')('events.accreditations.button_delete'),\n message: $filter('translate')('events.accreditations.delete_message') + \" \" + title + \"?\",\n onAccept: function () {\n Restangular.one('EventsGuestsAccreditations', id).remove().then(function () {\n toastr.success($filter('translate')('events.accreditations.deleted_success'));\n $scope.gridOptionsEventAccreditations.loadData();\n }, function (response) {\n $log.error(\"Error with status code\", response.status);\n alert(\"Error al borrar\")\n });\n }\n });\n\n };\n\n}])\n\n.controller(\"AccreditationsModalCtrl\", ['LoginService', '$scope', '$uibModalInstance', 'Restangular', 'modalService', '$filter', '$http', '$stateParams', '$q', 'event_guest_accreditation_id', 'event_id', '$log',\n function (LoginService, $scope, $uibModalInstance, Restangular, modalService, $filter, $http, $stateParams, $q, event_guest_accreditation_id, event_id, $log) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"EVENTS_ACCREDITATION_WRITE\");\n\n $scope.is_template = $stateParams.is_template == 'true';\n $scope.eventAccreditation = {};\n\n $log.debug(event_guest_accreditation_id);\n\n if (angular.isUndefined(event_guest_accreditation_id) || event_guest_accreditation_id == null || typeof(event_guest_accreditation_id) === 'undefined') {\n $scope.eventAccreditation.event_id = event_id;\n $scope.eventAccreditation.id = 0;\n\n\n }\n else {\n\n Restangular.one('EventsGuestsAccreditations', event_guest_accreditation_id).get().then(function (results) {\n $scope.eventAccreditation = results;\n\n });\n }\n\n $scope.saveEventAccreditation = function () {\n if ($scope.eventAccreditation.id == 0) $scope.eventAccreditation.id = null;\n\n if (angular.isDefined($scope.eventAccreditation.id) && $scope.eventAccreditation.id!=null) {\n $scope.eventAccreditation.put().then(function (result) {\n if (angular.isDefined(result.id)) {\n $uibModalInstance.close();\n toastr.success($filter('translate')('events.accreditations.edit_success'));\n }\n });\n } else {\n Restangular.all('EventsGuestsAccreditations').post($scope.eventAccreditation).then(function (result) {\n if (angular.isDefined(result.id)) {\n $uibModalInstance.close();\n toastr.success($filter('translate')('events.accreditations.add_success'));\n\n }\n });\n }\n }\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n //Delete desde el popup\n $scope.checkDeleteEventAccreditation = function () {\n modalService.confirm({\n title: $filter('translate')('events.accreditations.button_delete'),\n message: $filter('translate')('events.accreditations.delete_message') + \" \" + $scope.eventAccreditation.name + \"?\",\n onAccept: function () {\n Restangular.one('EventsGuestsAccreditations', $scope.eventAccreditation.id).remove().then(function () {\n $uibModalInstance.close();\n if (typeof $scope.refetchEvents == 'function') $scope.refetchEvents();\n });\n }\n });\n };\n\n}])\n\n;\n\n;\n","angular.module(\"events\")\n\n .controller(\"EventsAnnexesCtrl\", ['LoginService', '$timeout', '$scope', '$rootScope', '$state', '$stateParams', 'Restangular', 'gridService', '$filter', '$translate', 'modalService', '$uibModal', 'Upload', '$log',\n function (LoginService, $timeout, $scope, $rootScope, $state, $stateParams, Restangular, gridService, $filter, $translate, modalService, $uibModal, Upload, $log) {\n\n $scope.annexes_types = {};\n $scope.files = [];\n $scope.event.changesNotSaved = false;\n $scope.event_id = $stateParams.id;\n $scope.annexes_events = [];\n $scope.template_options = [{ value: \"template_one_column\", name: $filter('translate')('events.programs_acts.one_column') }, { value: \"template_type_photo\", name: $filter('translate')('events.programs_acts.type_photo') }];\n\n //Opciones del editor\n $scope.tinymceOptions = {\n resize: true,\n //forced_root_block: 'div',\n //min_height: 60,\n //height: 60,\n schema: \"html5\",\n formats: {\n bold: { inline: 'b' },\n underline: { inline: 'u' },\n italic: { inline: 'i' },\n alignleft: { selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div', attributes: { align: \"left\" } },\n aligncenter: { selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div', attributes: { align: \"center\" } },\n alignright: { selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div', attributes: { align: \"right\" } },\n alignjustify: { selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div', attributes: { align: \"justify\" } },\n },\n invalid_elements: 'strong,em',\n invalid_styles: { \n 'table': 'height', \n 'tr' : 'height',\n 'th' : 'height',\n 'td' : 'height'\n },\n fontsize_formats: \"8px 10px 12px 14px 15px 16px 18px 20px 22px 24px 25px 28px 30px 36px \",\n font_formats: 'Arial=Arial;Cambria=Cambria;Courier New=Courier New;Segoe Script=Segoe Script;Tahoma=Tahoma;Verdana=Verdana',\n body_class: 'custom_tinymce_content',\n language: $translate.use().toLowerCase(), //Hay que customizarlo dependiendo del idioma...\n paste_as_text: true,\n plugins: 'paste textcolor code image lists advlist table link autoresize noneditable',\n toolbar: \"undo redo | fontselect fontsizeselect forecolor | bold underline italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent link | image-custom | table | code\",\n menubar: false,\n\n setup: function (editor) {\n editor.ui.registry.addButton('image-custom', {\n title: $filter('translate')('events.image') ,\n icon: 'image',\n onAction: function () {\n modalService.image({\n title: $filter('translate')('events.image'),\n event_id: $scope.event_id,\n onAccept: function (resultModal) {\n $log.debug(resultModal);\n var html = \"\";\n editor.insertContent(html);\n },\n onCancel: function (response) {\n //nada\n }\n });\n }\n });\n }\n };\n\n Restangular.all('AnnexesTypes').getList({}).then(function (response) {\n $scope.annexes_types = response;\n $scope.cargaInicial = true;\n });\n\n $scope.loadData = function () {\n Restangular.all('EventsAnnexes').getList({ event_id: $scope.event_id, is_explicit_annex: false }).then(function (response) {\n $scope.annexes_events = response;\n angular.forEach($scope.annexes_events, function (row) {\n if (row.template_images == null) {\n row.template_images = \"template_one_column\";\n }\n })\n });\n };\n\n $scope.loadData();\n\n $scope.add_annex = function (annex_type_id) {\n var annexes_tl = [];\n $scope.event.changesNotSaved = true;\n Restangular.one('AnnexesTypes', annex_type_id).get().then(function (results) {\n angular.forEach(results.FK_events_programs_annexes_types_tl_events_programs_annexes_types, function (rows_tl) {\n annexes_tl.push({\n language_id: rows_tl.language_id,\n title: rows_tl.name\n });\n });\n $scope.annexes_events.push({\n id: 0,\n event_id: $scope.event_id,\n is_explicit_annex: false,\n annex_type_id: annex_type_id,\n FK_events_programs_annexes_events_programs_annexes_types: results,\n FK_events_programs_annexes_tl_events_programs_annexes: annexes_tl\n });\n\n $scope.save();\n });\n }\n\n $scope.addImages = function (files, annex_event, errFiles) {\n $scope.event.changesNotSaved = true;\n if (errFiles.length > 0) {\n $log.debug(\"Ha ocurrido un error con las imágenes: \")\n $log.debug(errFiles);\n }\n angular.forEach(files, function (file, idx) {\n Restangular.all(\"FilesTypesWhitelist\").customGET(\"GetTotalSizeAllowed\", { entity: \"events_programs_annexes\" }).then(function (result) {\n if (result.filter(e => e.type === file.type).length <= 0) {\n var typeAllowed = result.map(o => o.type).join(', ');\n $scope.event.changesNotSaved = false;\n modalService.message({\n title: \"Error\",\n message: $filter('translate')('general.type_file_not_allowed') + \"
\" + typeAllowed,\n onAccept: function () { }\n });\n } else {\n var fileReader = new FileReader();\n var maxSizeAllowed = result.find(e => e.type === file.type).maxsize;\n fileReader.onload = function (event) {\n if (!event.target) return;\n var image = new Image();\n image.src = event.target.result as string;\n\n image.onload = function () {\n var sizeFileMB = file.size / 1024;\n if (sizeFileMB > 0) {\n //Comprobamos que no pase del tamaño limite de imagen\n if (sizeFileMB > maxSizeAllowed) {\n $scope.event.changesNotSaved = false;\n modalService.message({\n title: \"Error\",\n message: $filter('translate')('general.image_size_limit') + \"
\" + maxSizeAllowed + \" Kb\",\n onAccept: function () { }\n });\n } else {\n file.is_deleted = false;\n file.orden = idx;\n file.is_deleted = false;\n file.is_inserted = false;\n file.image = image.src;\n file.entity_type = \"events_programs_annexes\";\n file.entity_type_id = annex_event.id;\n $scope.annexes_events.find(element => element.id == annex_event.id).files.push(file);\n if (!$scope.$$phase) $scope.$apply()\n\n }\n } else {\n file.is_deleted = false;\n file.is_inserted = false;\n file.orden = idx;\n file.image = image.src;\n $scope.annexes_events.find(element => element.id == annex_event.id).files.push(file);\n if (!$scope.$$phase) $scope.$apply()\n }\n };\n };\n fileReader.readAsDataURL(file);\n }\n });\n });\n };\n\n $scope.removeFile = function (file) {\n $scope.event.changesNotSaved = true;\n modalService.confirm({\n title: \"Borrar documento\",\n message: \"¿Está usted seguro de querer borrar \" + (angular.isUndefined(file.name) ? file.filename : file.name) + \"?\",\n onAccept: function () {\n angular.forEach($scope.annexes_events, function (annex) {\n angular.forEach(annex.files, function (item) {\n if (file.image == item.image) {\n item.is_deleted = true;\n }\n })\n });\n }\n });\n }\n\n $scope.save = function () {\n angular.forEach($scope.annexes_events, function (annex) {\n if (annex.id != 0) {\n annex.put().then(function (result) {\n if (angular.isDefined(result.id)) {\n annex = result;\n $scope.loadData();\n } else {\n $scope.errorMessage = result.message;\n }\n $scope.event.changesNotSaved = false;\n });\n\n } else {\n Restangular.all('EventsAnnexes').post(annex).then(function (result) {\n if (angular.isDefined(result.id)) {\n annex.id = result.id;\n $scope.loadData();\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n });\n\n $scope.saveImages();\n\n }\n\n $scope.saveImages = function () {\n angular.forEach($scope.annexes_events, function (annex) {\n angular.forEach(annex.files, function (file) {\n if (file.is_deleted) {\n if ((!angular.isUndefined(file.id) || file.id != null)) {\n Restangular.one('Files', file.id).remove().then(function () {\n toastr.success($filter('translate')('general.deleted_success'));\n });\n }\n } else {\n if ((angular.isUndefined(file.id) || file.id == null) && !file.is_inserted) {\n file.upload = Upload.upload({\n url: (window as any).CONFIG.api_url + \"Files/uploadFile\",\n data: { file: file, name: file.name, folder_id: null, entity_type: file.entity_type, entity_type_id: file.entity_type_id, is_public: false },\n }).then(function (result) {\n if (result.data.FileId != null) {\n file.id = result.data.FileId;\n }\n });\n }\n }\n });\n });\n }\n\n $scope.delete = function (event_annex_id) {\n modalService.confirm({\n title: $filter('translate')('general.delete_button'),\n message: $filter('translate')('general.delete_message') + \"?\",\n onAccept: function () {\n Restangular.one('EventsAnnexes', event_annex_id).remove().then(function () {\n toastr.success($filter('translate')('general.delete_success'));\n $scope.loadData();\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n });\n }\n\n\n }])\n;\n\n","angular.module(\"events\")\n\n .controller(\"EventsBudgetListCtrl\", ['event', 'LoginService', '$rootScope', '$scope', 'Restangular', 'gridService', 'modalService', '$uibModal', '$filter', '$translate', '$stateParams', '$state', 'uiGridConstants', '$timeout', '$q', '$http', 'uiGridTreeViewConstants', 'treeService', '$sce',\n function (event, LoginService, $rootScope, $scope, Restangular, gridService, modalService, $uibModal, $filter, $translate, $stateParams, $state, uiGridConstants, $timeout, $q, $http, uiGridTreeViewConstants, treeService, $sce) {\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"EVENTS_BUDGET_READ\");\n if(!Array.isArray($scope.$parent.menusItems)) {\n $state.go(\"events.edit\", { id: $stateParams.id });\n } else {\n let results = $scope.$parent.menusItems.filter(m => m.id === parseInt($stateParams.menu_item_id, 10));\n if(results.length > 0) {\n $scope.allowWrite &&= results[0].editable;\n } else {\n $scope.allowWrite = false;\n }\n }\n\n $scope.hasResults = false;\n\n $rootScope.breadcrumb = [\n { title: $filter('translate')('events.title'), url: \"events.list\" },\n { title: $filter('translate')('events.title'), url: \"events.list\" },\n { title: $filter('translate')('events.budget.title') }\n ];\n function isDefinedAndNotNull(val) {\n return angular.isDefined(val) && val !== null;\n }\n $scope.event = event;\n $rootScope.breadcrumb = [\n { title: $filter('translate')('events.title'), url: \"events.list\" },\n { title: $scope.event.name, url: \"events.edit({ id: \" + $scope.event.id + \" })\" },\n { title: $filter('translate')('events.budget.title') }\n ];\n $rootScope.title = $scope.event.name + \" - \" + $filter('translate')('events.budget.title');\n\n $scope.gridBudget = {\n pdfTitle: $scope.event.name + \" - \" + $filter('date')($scope.event.date_from, 'dd/MM/yyyy HH:mm'),\n exporterPdfFooter: \"footer\",\n exporterMenuCsv: true,\n enableGridMenu: true,\n enablePaginationControls: false,\n enableFiltering: false,\n showColumnFooter: false,\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n {\n name: 'name', displayName: $filter('translate')('events.budget.name'), enableFiltering: false, enableHiding: false, enableColumnMenu: false,\n cellTemplate: '
'+\n '
{{row.entity[col.field]}}
'\n ,customFormatFn: function (value) {\n value = value.replace('', '\\r\\t');\n return value;\n },\n },\n {\n name: 'total', displayName: $filter('translate')('events.budget.total'), enableFiltering: false, enableHiding: false,\n enableColumnMenu: false, width: 100, aggregationType: uiGridConstants.aggregationTypes.sum,\n cellTemplate: '
{{row.entity[col.field]}}
' +\n '
{{row.entity[col.field]}}
'\n }\n ],\n getData: function (options) {\n var deferred = $q.defer();\n options.event_id = $stateParams.id;\n Restangular.all('EventsBudget').getList(options).then(function (result) {\n $scope.hasResults = result.length > 0;\n result.forEach(function (item) {\n item.name = item.name.replace(/^\\s+/g, ''); //Le ponemos espacios para que indente\n\n });\n\n deferred.resolve(result);\n });\n return deferred.promise;\n }\n };\n}])\n\n;\n","import IconPicker from '../../../scripts/iconpicker-1.5.0.js';\n\nangular.module(\"events\")\n\n .controller(\"cmsArticlesEventsEditCtrl\", ['LoginService', '$scope', '$rootScope', '$controller', '$state', '$stateParams', 'Restangular', '$uibModal', 'modalService', '$compile', 'gridService', '$filter', '$translate', '$q', '$log',\n function (LoginService, $scope, $rootScope, $controller, $state, $stateParams, Restangular, $uibModal, modalService, $compile, gridService, $filter, $translate, $q, $log) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = true // LoginService.permissionExist(\"CMS_CATEGORIES_WRITE\");\n $rootScope.title = $filter('translate')('cms_articles.title');\n\n $scope.currentState = $state.current.name;\n $scope.cms_article = { id: 0, cms_category_id: $state.params.parent_id };\n\n $log.debug($state.params)\n $log.debug($stateParams)\n\n $log.debug(`${$rootScope}`);\n let languageCode = \"es\"\n let stateGo = \"\";\n let stateGoParams = {};\n\n $scope.standalone = $stateParams.standalone;\n if ($scope.standalone == true) {\n\n $scope.uiSerf = \"events.edit.cms_article-list({ id: \" + $scope.event.id + \" })\";\n stateGo = \"events.edit.cms_article-list\";\n stateGoParams = {id: $scope.event.id};\n\n } else {\n $scope.uiSerf = \"events.edit.cms_categories - edit({ id: \" + $scope.event.id + \", category_id: \" + $scope.cms_article.cms_category_id + \" })\";\n stateGo = \"events.edit.cms_categories-edit\";\n stateGoParams = { id: $scope.event.id, category_id: $scope.cms_article.cms_category_id };\n }\n\n\n\n \n\n $log.debug($scope.uiSerf)\n $log.debug(stateGo)\n\n //Gestor de texto \n $scope.tinymceOptions = {\n resize: true,\n //forced_root_block: 'div',\n min_height: 60,\n height: 60,\n schema: \"html5\",\n formats: {\n bold: { inline: 'b' },\n underline: { inline: 'u' },\n italic: { inline: 'i' },\n alignleft: { selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div', attributes: { align: \"left\" } },\n aligncenter: { selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div', attributes: { align: \"center\" } },\n alignright: { selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div', attributes: { align: \"right\" } },\n alignjustify: { selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div', attributes: { align: \"justify\" } },\n },\n invalid_elements: 'strong,em',\n fontsize_formats: \"8px 10px 12px 14px 15px 16px 18px 20px 22px 24px 25px 28px 30px 36px \",\n font_formats: 'Arial=Arial;Cambria=Cambria;Courier New=Courier New;Segoe Script=Segoe Script;Tahoma=Tahoma;Verdana=Verdana',\n body_class: 'custom_tinymce_content',\n language: $translate.use().toLowerCase(), //Hay que customizarlo dependiendo del idioma...\n paste_as_text: true,\n plugins: 'paste textcolor code',\n toolbar: \"undo redo | fontsizeselect bold underline italic | forecolor fontselect | alignleft aligncenter alignright alignjustify | code\",\n menubar: false\n };\n\n //\n IconPicker.Init({\n // Required: You have to set the path of IconPicker JSON file to \"jsonUrl\" option. e.g. '/content/plugins/IconPicker/dist/iconpicker-1.5.0.json'\n jsonUrl: '/assets/iconpicker-1.5.0.json',\n // Optional: Change the buttons or search placeholder text according to the language.\n searchPlaceholder: 'Search Icon',\n showAllButton: 'Show All',\n cancelButton: 'Cancel',\n noResultsFound: 'No results found.', // v1.5.0 and the next versions\n borderRadius: '20px', // v1.5.0 and the next versions\n });\n\n IconPicker.Run('#GetIconPicker', function () {\n // ng-bind no funciona para asignar el icono porque no detecta el cambio que hacemos con el IconPicker, así que hay que hacerlo a pelo.\n let icon = document.querySelector(\"#IconPreview\").getAttribute(\"class\");\n icon = icon.substring(icon.indexOf('-') + 1);\n $scope.cms_article.icon = icon;\n });\n\n\n if (angular.isUndefined($state.params.article_id) || $state.params.article_id == \"\") {\n if ($state.params.standalone == true) {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('events.title'), url: \"events.list\" },\n { title: $scope.event.name, url: \"events.edit({ id: \" + $scope.event.id + \" })\" },\n { title: $filter('translate')('cms_articles.title'), url: \"events.edit.cms_article-list({ id: \" + $scope.event.id + \" })\" },\n { title: $filter('translate')('cms_articles.add') },\n\n ];\n } else {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('events.title'), url: \"events.list\" },\n { title: $scope.event.name, url: \"events.edit({ id: \" + $scope.event.id + \" })\" },\n { title: $filter('translate')('cms_categories.title'), url: \"events.edit.cms_categories-list({ id: \" + $scope.event.id + \" })\" },\n { title: $filter('translate')('cms_categories.edit'), url: \"events.edit.cms_categories-edit({id: \" + $scope.event.id + \", category_id: \" + $scope.cms_article.cms_category_id + \"})\" },\n { title: $filter('translate')('cms_articles.add') },\n\n ];\n }\n\n } else {\n if ($state.params.standalone == true) {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('events.title'), url: \"events.list\" },\n { title: $scope.event.name, url: \"events.edit({ id: \" + $scope.event.id + \" })\" },\n { title: $filter('translate')('cms_articles.title'), url: \"events.edit.cms_article-list({ id: \" + $scope.event.id + \" })\" },\n { title: $filter('translate')('cms_articles.edit') },\n\n ];\n } else {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('events.title'), url: \"events.list\" },\n { title: $scope.event.name, url: \"events.edit({ id: \" + $scope.event.id + \" })\" },\n { title: $filter('translate')('cms_categories.title'), url: \"events.edit.cms_categories-list({ id: \" + $scope.event.id + \" })\" },\n { title: $filter('translate')('cms_categories.edit'), url: \"events.edit.cms_categories-edit({id: \" + $scope.event.id + \",category_id: \" + $scope.cms_article.cms_category_id + \"})\" },\n { title: $filter('translate')('cms_articles.edit') },\n\n ];\n }\n\n Restangular.one('CmsArticles', $state.params.article_id).get().then(function (result) {\n\n $scope.cms_article = result;\n });\n }\n\n $scope.save = function () {\n\n $log.debug($scope.cms_article)\n\n if (!angular.isUndefined($scope.cms_article.id)) {\n $scope.cms_article.put().then(function (result) {\n if (typeof (result.id) != \"undefined\") {\n toastr.success($filter('translate')('cms_articles.modified_success'));\n $state.go(stateGo, stateGoParams);\n } else {\n $scope.errorMessage = result.message;\n }\n });\n } else {\n Restangular.all('CmsArticles').post($scope.cms_article).then(function (result) {\n if (typeof (result.id) != \"undefined\") {\n toastr.success($filter('translate')('cms_articles.created_success'));\n $state.go(stateGo, stateGoParams);\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n }\n\n $scope.checkDelete = function () {\n modalService.confirm({\n title: $filter('translate')('cms_articles.delete'),\n message: $filter('translate')('cms_articles.delete_message') + \" \" + $scope.cms_article.title + \"?\",\n onAccept: function () {\n $scope.cms_article.remove().then(function () {\n toastr.success($filter('translate')('cms_articles.remove_success'));\n $state.go(stateGo, stateGoParams);\n });\n }\n });\n };\n\n }])\n\n ;\n\n","\n\nangular.module(\"events\")\n\n .controller(\"cmsArticlesEventsListCtrl\", ['LoginService', '$scope', '$rootScope', '$controller', '$state', '$stateParams', 'Restangular', '$uibModal', 'modalService', '$compile', 'gridService', '$filter', '$translate', '$q', '$log',\n function (LoginService, $scope, $rootScope, $controller, $state, $stateParams, Restangular, $uibModal, modalService, $compile, gridService, $filter, $translate, $q, $log) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"CMS_CATEGORIES_WRITE\");\n $rootScope.title = $filter('translate')('cms_articles.title');\n\n $scope.id = $stateParams.id\n $log.debug($scope.id)\n\n\n $rootScope.breadcrumb = [\n { title: $filter('translate')('events.title'), url: \"events.list\" },\n { title: $scope.event.name, url: \"events.edit({ id: \" + $scope.event.id + \" })\" },\n { title: $filter('translate')('cms_articles.title') }\n ];\n\n $scope.filter = {};\n let filter = false;\n\n $scope.gridArticles = {\n pdfTitle: $filter('translate')('cms_categories.articles'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n enableSorting: true,\n paginationPageSizes: [10, 20, 30],\n paginationPageSize: 10,\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n {\n name: 'icon', displayName: $filter('translate')('cms.icon'), cellTemplate: '
' +\n '' +\n '
', width: 80, enableFiltering: false, enableHiding: false\n },\n {\n name: 'title', displayName: $filter('translate')('cms_article.title'), enableFiltering: true, enableHiding: false, width: 150\n },\n {\n name: 'FK_cms_articles_cms_categories.name', displayName: $filter('translate')('cms_article.category'), enableFiltering: true, enableHiding: false,\n },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('general.edit'), action: 'ui-sref=\"events.edit.cms_article-edit({article_id:row.entity.id, parent_id:row.entity.cms_category_id, standalone: true})\"; ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('general.delete'), action: 'ng-click=\"grid.appScope.deleteArticleDialog(row.entity.id,row.entity.title);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n }\n ],\n getData: function (options) {\n\n var deferred = $q.defer();\n options.full = true;\n options.event_id = $scope.id;\n\n if (filter) {\n options.title = $scope.filter.title;\n options.category = $scope.filter.category;\n }\n\n Restangular.all('CmsArticles').getList(options).then(function (results) {\n deferred.resolve(results);\n });\n return deferred.promise;\n }\n };\n\n\n $scope.search = function () {\n if (angular.isDefined($scope.gridArticles.loadData)) {\n filter = true;\n $scope.gridArticles.loadData(false);\n }\n }\n\n $scope.deleteArticleDialog = function (id, title) {\n $scope.id = id;\n $scope.name = title;\n modalService.confirm({\n title: $filter('translate')('cms_articles.delete'),\n message: $filter('translate')('cms_articles.delete_message') + \" \" + title + \"?\",\n onAccept: function () {\n Restangular.one('CmsArticles', id).remove().then(function () {\n toastr.success($filter('translate')('cms_articles.remove_success'));\n $scope.gridArticles.loadData(false);\n }, function (response) {\n $log.error(\"Error with status code\", response.status);\n });\n }\n });\n\n };\n\n }])\n\n ;\n\n","import IconPicker from '../../../scripts/iconpicker-1.5.0.js';\n\nangular.module(\"events\")\n\n .controller(\"cmsCategoriesEventsEditCtrl\", ['LoginService', '$scope', '$rootScope', '$controller', '$state', '$stateParams', 'Restangular', '$uibModal', 'modalService', '$compile', 'gridService', '$filter', '$translate', '$q', '$log',\n function (LoginService, $scope, $rootScope, $controller, $state, $stateParams, Restangular, $uibModal, modalService, $compile, gridService, $filter, $translate, $q, $log) {\n\n //Comprobamos si tiene permiso escritura\n\n\n $scope.allowWrite = LoginService.permissionExist(\"CMS_CATEGORIES_WRITE\");\n $rootScope.title = $filter('translate')('cms_categories.title');\n\n $scope.cms_categories_id = $state.params.category_id;\n $scope.currentState = $state.current.name;\n $scope.cms_categories = { event_id: $state.params.id, parent_cms_category_id: null};\n\n $log.debug($scope.cms_categories);\n $log.debug($state.params);\n\n\n\n\n IconPicker.Init({\n // Required: You have to set the path of IconPicker JSON file to \"jsonUrl\" option. e.g. '/content/plugins/IconPicker/dist/iconpicker-1.5.0.json'\n jsonUrl: '/assets/iconpicker-1.5.0.json',\n // Optional: Change the buttons or search placeholder text according to the language.\n searchPlaceholder: 'Search Icon',\n showAllButton: 'Show All',\n cancelButton: 'Cancel',\n noResultsFound: 'No results found.', // v1.5.0 and the next versions\n borderRadius: '20px', // v1.5.0 and the next versions\n });\n\n IconPicker.Run('#GetIconPicker', function () {\n // ng-bind no funciona para asignar el icono porque no detecta el cambio que hacemos con el IconPicker, así que hay que hacerlo a pelo.\n let icon = document.querySelector(\"#IconPreview\").getAttribute(\"class\");\n icon = icon.substring(icon.indexOf('-') + 1);\n $scope.cms_categories.icon = icon;\n\n });\n\n\n $scope.gridArticles = {\n pdfTitle: $filter('translate')('cms_categories.articles'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n enableSorting: true,\n paginationPageSizes: [10, 20, 30],\n paginationPageSize: 10,\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n {\n name: 'icon', displayName: $filter('translate')('cms.icon'), cellTemplate: '
' +\n '' +\n '
', width: 80, enableFiltering: false, enableHiding: false\n },\n {\n name: 'title', displayName: $filter('translate')('cms_article.title'), enableFiltering: true, enableHiding: false,\n },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('general.edit'), action: 'ui-sref=\"events.edit.cms_article-edit({article_id:row.entity.id, parent_id:row.entity.cms_category_id})\"; ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('general.delete'), action: 'ng-click=\"grid.appScope.deleteArticleDialog(row.entity.id,row.entity.title);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n }\n ],\n getData: function (options) {\n\n var deferred = $q.defer();\n options = { category_id: $scope.cms_categories.id };\n\n Restangular.all('CmsArticles').getList(options).then(function (results) {\n deferred.resolve(results);\n });\n return deferred.promise;\n }\n };\n\n Restangular.all('CmsCategories').getList({ event_id: $scope.event.id}).then(function (cms_categories) {\n $scope.selectCmsCategories = cms_categories;\n if (!angular.isUndefined($state.params.category_id) && $state.params.category_id != \"\") {\n $scope.selectCmsCategories = $scope.selectCmsCategories.filter(function (x) {\n return (x.id != $state.params.category_id && x.parent_cms_category_id != $state.params.category_id);\n })\n }\n });\n\n if (angular.isUndefined($state.params.category_id) || $state.params.category_id == \"\") {\n\n $rootScope.breadcrumb = [\n { title: $filter('translate')('events.title'), url: \"events.list\" },\n { title: $scope.event.name, url: \"events.edit({ id: \" + $scope.event.id + \" })\" },\n { title: $filter('translate')('cms_categories.title'), url: \"events.edit.cms_categories-list({ id: \" + $scope.event.id + \" })\" },\n\n { title: $filter('translate')('cms_categories.add') },\n ];\n } else {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('events.title'), url: \"events.list\" },\n { title: $scope.event.name, url: \"events.edit({ id: \" + $scope.event.id + \" })\" },\n { title: $filter('translate')('cms_categories.title'), url: \"events.edit.cms_categories-list({ id: \" + $scope.event.id + \" })\" },\n { title: $filter('translate')('cms_categories.edit') },\n ];\n\n Restangular.one('CmsCategories', $state.params.category_id).get().then(function (results) {\n $scope.cms_categories = results;\n });\n }\n\n\n $scope.save = function () {\n\n $scope.cms_categories.event_id = $state.params.id;\n\n if (!angular.isUndefined($scope.cms_categories.id)) {\n $scope.cms_categories.put().then(function (result) {\n if (typeof (result.id) != \"undefined\") {\n toastr.success($filter('translate')('cms_categories.modified_success'));\n } else {\n $scope.errorMessage = result.message;\n }\n });\n } else {\n Restangular.all('CmsCategories').post($scope.cms_categories).then(function (result) {\n if (typeof (result.id) != \"undefined\") {\n toastr.success($filter('translate')('cms_categories.created_success'));\n $scope.cms_categories.id = result.id;\n $log.debug($scope.cms_categories);\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n }\n\n $scope.checkDelete = function () {\n\n //Comprobamos si tiene hijos\n let hijos = false;\n $scope.selectCmsCategories.forEach(category => {\n if (category.parent_cms_category_id == $scope.cms_categories.id) { hijos = true };\n\n });\n\n if (hijos) {\n modalService.message({\n title: $filter('translate')('cms_categories.delete_message_children_title'),\n message: $filter('translate')('cms_categories.delete_message_children_error'),\n onAccept: function () { }\n });\n } else {\n modalService.confirm({\n title: $filter('translate')('cms_categories.delete'),\n message: $filter('translate')('cms_categories.delete_message') + \" \" + $scope.cms_categories.name + \"?\",\n onAccept: function () {\n $scope.cms_categories.remove().then(function () {\n toastr.success($filter('translate')('cms_categories.remove_success'));\n $state.go(\"events.edit.cms_categories-list\");\n });\n\n\n }\n });\n\n };\n };\n\n\n $scope.deleteArticleDialog = function (id, title) {\n $scope.id = id;\n $scope.title = title;\n modalService.confirm({\n title: $filter('translate')('cms_articles.delete'),\n message: $filter('translate')('cms_articles.delete_message') + \" \" + title + \"?\",\n onAccept: function () {\n Restangular.one('CmsArticles', id).remove().then(function () {\n toastr.success($filter('translate')('cms_articles.remove_success'));\n $scope.gridArticles.data =\n $scope.gridArticles.data.filter(function (el) { return el.id != $scope.id; });\n }, function (response) {\n $log.error(\"Error with status code\", response.status);\n });\n }\n });\n\n };\n\n }]);\n\n","angular.module(\"events\")\n\n .controller(\"cmsCategoriesEventsListCtrl\", ['LoginService', '$rootScope', '$scope', '$http', '$interval', '$q', 'i18nService', 'Restangular', 'uiGridTreeViewConstants', 'gridService', 'treeService', 'modalService', '$uibModal', '$filter', '$translate', '$state', '$stateParams', '$log',\n function (LoginService, $rootScope, $scope, $http, $interval, $q, i18nService, Restangular, uiGridTreeViewConstants, gridService, treeService, modalService, $uibModal, $filter, $translate, $state, $stateParams, $log) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"CMS_CATEGORIES_WRITE\");\n\n $scope.id = $stateParams.id\n $log.debug($scope.id)\n\n $rootScope.title = $filter('translate')('cms_categories.title');\n\n\n $rootScope.breadcrumb = [\n { title: $filter('translate')('events.title'), url: \"events.list\" },\n { title: $scope.event.name, url: \"events.edit({ id: \" + $scope.event.id + \" })\" },\n { title: $filter('translate')('cms_categories.title') }\n ];\n\n\n\n $log.debug($stateParams);\n $scope.gridOptions = {\n pdfTitle: $filter('translate')('cms_categories.title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n enableSorting: true,\n expandAllRows: true,\n gridMenuShowHideColumns: false,\n paginationPageSizes: [15, 30, 45],\n paginationPageSize: 15,\n // rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n\n columnDefs: [\n { name: 'id', visible: false, exporterSuppressExport: true },\n {\n name: 'icon', displayName: $filter('translate')('cms.icon'), cellTemplate: '
' +\n '' +\n '
', width: 80, enableFiltering: false, enableHiding: false\n },\n\n { name: 'name', displayName: $filter('translate')('general.name'), enableFiltering: true, enableHiding: false },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('general.edit'), action: 'ui-sref=\"events.edit.cms_categories-edit({category_id: row.entity.id})\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('general.delete'), action: 'ng-click=\"grid.appScope.deleteDialog(row.entity.id,row.entity.name);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n var deferred = $q.defer();\n\n Restangular.all('CmsCategories').getList({ options, event_id: $scope.id }).then(function (result) {\n\n $scope.allCmsCategories = result;\n\n result.unshift({\n id: null,\n name: null\n });\n var treeCmsCategories = [];\n var data = treeService.cmsCategoriesTree(result, null, treeCmsCategories);\n\n deferred.resolve(data);\n });\n return deferred.promise;\n }\n\n };\n\n $scope.goToEdit = function (rowEntity) {\n $state.go(\"events.edit.cms_categories-edit\", { cms_categories_id: rowEntity.cms_categories_id, category_id: rowEntity.id });\n }\n\n $scope.deleteDialog = function (id, name) {\n $scope.id = id;\n $scope.name = name;\n\n let hijos = false;\n $scope.allCmsCategories.forEach(category => {\n if (category.parent_cms_category_id == id) { hijos = true };\n });\n\n if (hijos) {\n modalService.message({\n title: $filter('translate')('cms_categories.delete_message_children_title'),\n message: $filter('translate')('cms_categories.delete_message_children_error'),\n onAccept: function () { }\n });\n } else {\n modalService.confirm({\n title: $filter('translate')('cms_categories.delete'),\n message: $filter('translate')('cms_categories.delete_message') + \" \" + $scope.name + \"?\",\n onAccept: function () {\n Restangular.one('CmsCategories', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('cms_categories.remove_success'));\n $scope.gridOptions.data = $scope.allCmsCategories =\n $scope.gridOptions.data.filter(function (el) { return el.id != $scope.id; });\n }, function (response) {\n $log.error(\"Error with status code\", response.status);\n });\n }\n });\n };\n };\n\n }]);","import HistoricMailsModalInfoView from \"../historic_mails/historic_mails-modal_info.html\";\n\n\nangular.module('events')\n\n .controller('historicMailsModalCtrl', ['$scope', '$uibModalInstance', '$uibModal', 'options', '$filter', 'gridService', 'Restangular', '$log',\n function ($scope, $uibModalInstance,$uibModal, options, $filter, gridService, Restangular, $log) {\n\n $log.debug(options);\n\n\n $scope.gridOptionHistoricMails = {\n pdfTitle: $filter('translate')('events.historic_mails.historic_mails'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n enableSorting: true,\n paginationPageSizes: [5, 10, 20],\n paginationPageSize: 5,\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n {\n name: 'mail_date', field: 'mail_date', displayName: $filter('translate')('events.historic_mails.mail_date'),\n enableFiltering: false, enableHiding: true, cellFilter: 'toLocalDate | date:\\'dd/MM/yyyy HH:mm\\'', width: 120\n },\n { name: 'subject', field: 'subject', displayName: $filter('translate')('events.historic_mails.subject'), enableFiltering: false, enableHiding: true },\n { name: 'to', field: 'to', displayName: $filter('translate')('events.historic_mails.to'), enableFiltering: false, enableHiding: true },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: \"\", action: 'ng-click=\"grid.appScope.infoModal(row.entity.id)\"', cssIconClass: \"fa fa-info\" },\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (optionsGrid) {\n optionsGrid.module = options.module;\n optionsGrid.code = options.code;\n optionsGrid.event_id = options.event_id;\n optionsGrid.to = options.to;\n return Restangular.all('HistoricMails').getList(optionsGrid);\n }\n };\n /**\n * Abre el modal con la información del mail.\n */\n $scope.infoModal = function (id) {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: HistoricMailsModalInfoView,\n size: \"lg\",\n controller: \"HistoricMailModalCtrl\",\n resolve: {\n options: function () {\n return { id: id };\n }\n }\n });\n //Response del modal\n $modalInstance.result.then(function () {\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n if (!$scope.$$phase) $scope.$apply();\n });\n }\n\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n }]);","angular.module(\"events\")\n\n .controller(\"EventsDiaryCtrl\", ['event', 'LoginService', '$rootScope', '$scope', 'Restangular', 'gridService', 'modalService', '$uibModal', '$filter', '$translate', '$stateParams', '$state',\n function (event, LoginService, $rootScope, $scope, Restangular, gridService, modalService, $uibModal, $filter, $translate, $stateParams, $state) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"EVENTS_DIARY_WRITE\");\n\n if(!Array.isArray($scope.$parent.menusItems)) {\n $state.go(\"events.edit\", { id: $stateParams.id });\n } else {\n let results = $scope.$parent.menusItems.filter(m => m.id === parseInt($stateParams.menu_item_id, 10));\n if(results.length > 0) {\n $scope.allowWrite &&= results[0].editable;\n } else {\n $scope.allowWrite = false;\n }\n }\n\n $scope.event_id = $stateParams.id;\n\n //Restangular.one('Events', $stateParams.id).get().then(function (results) {\n // event = results;\n $rootScope.breadcrumb = [\n { title: $filter('translate')('events.title'), url: \"events.list\" },\n { title: event.name, url: \"events.edit({ id: \" + event.id + \" })\" },\n { title: $filter('translate')('events.diary.diary') }\n ];\n $rootScope.title = event.name + \" - \" + $filter('translate')('events.diary.diary');\n //});\n\n\n }])\n\n;\n","angular.module(\"events\")\n\n .controller(\"EventsDocumentsEditCtrl\", ['LoginService', '$scope', '$rootScope', '$state', '$stateParams', 'Restangular', 'gridService', '$filter', '$translate', 'modalService', '$uibModal', 'Upload',\n function (LoginService, $scope, $rootScope, $state, $stateParams, Restangular, gridService, $filter, $translate, modalService, $uibModal, Upload) {\n\n //Opciones del editor\n $scope.tinymceOptions = {\n resize: true,\n //forced_root_block: 'div',\n min_height: 60,\n height: 60,\n schema: \"html5\",\n formats: {\n bold: { inline: 'b' },\n underline: { inline: 'u' },\n italic: { inline: 'i' },\n alignleft: { selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div', attributes: { align: \"left\" } },\n aligncenter: { selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div', attributes: { align: \"center\" } },\n alignright: { selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div', attributes: { align: \"right\" } },\n alignjustify: { selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div', attributes: { align: \"justify\" } },\n },\n invalid_elements: 'strong,em',\n fontsize_formats: \"8px 10px 12px 14px 15px 16px 18px 20px 22px 24px 25px 28px 30px 36px \",\n font_formats: 'Arial=Arial;Cambria=Cambria;Courier New=Courier New;Segoe Script=Segoe Script;Tahoma=Tahoma;Verdana=Verdana',\n body_class: 'custom_tinymce_content',\n language: $translate.use().toLowerCase(), //Hay que customizarlo dependiendo del idioma...\n paste_as_text: true,\n plugins: 'paste textcolor',\n toolbar: \"undo redo | fontsizeselect bold underline italic | forecolor fontselect | alignleft aligncenter alignright alignjustify\",\n menubar: false\n };\n\n if ($state.current.name == \"events.edit.documents.edit\") {\n\n Restangular.one('Events', $stateParams.id).get().then(function (results) {\n $scope.event = results;\n $rootScope.breadcrumb = [\n { title: $filter('translate')('events.title'), url: \"events.list\" },\n { title: $scope.event.name, url: \"events.edit({ id: \" + $scope.event.id + \" })\" },\n { title: $filter('translate')('events.documents.documents'), url: \"events.edit.documents({ id:\" + $stateParams.id + \" })\" },\n { title: $filter('translate')('events.documents.configure') }\n ];\n });\n $scope.isDocumentEditState = true;\n } else {\n $scope.isDocumentEditState = false;\n }\n\n $scope.eventId = $stateParams.id;\n\n if ($state.current.name == \"events.edit.documents.edit\") {\n $scope.document_type_id = $stateParams.document_type_id;\n }\n $scope.loadOptions = function (document_type_id, show_by_default) {\n $scope.document_type_id = document_type_id;\n $scope.loadData(show_by_default);\n };\n \n $scope.documents = {\n event_id: $scope.eventId,\n document_type_id: $scope.document_type_id\n };\n\n $scope.loadData = function (show_by_default) {\n var options = { document_type_id: $scope.document_type_id, event_id: $stateParams.id, show_by_default: show_by_default };\n Restangular.all('DocumentsTypesVariables').getList(options).then(function (response) {\n $scope.documents_types_variables = response;\n });\n };\n if ($state.current.name == \"events.edit.documents.edit\") {\n $scope.loadData();\n }\n \n\n $scope.save = function () {\n // if (angular.isUndefined($stateParams.document_type_id) || $stateParams.document_type_id == \"\") {\n //Limpiamos los caracteres raros.\n\n var copyDocumentsTypesVariables = angular.copy($scope.documents_types_variables);\n for (var i = 0; i < $scope.documents_types_variables.length; i++) {\n for (var j = 0; j < $scope.documents_types_variables[i].FK_events_documents_types_document_types_variables.length; j++) {\n if ($scope.documents_types_variables[i].FK_events_documents_types_document_types_variables[j].value == \"
 
\") {\n copyDocumentsTypesVariables[i].FK_events_documents_types_document_types_variables[j].value = \"\";\n break;\n }\n if ($scope.documents_types_variables[i].FK_events_documents_types_document_types_variables[0].is_explicit_document_type == true) {\n copyDocumentsTypesVariables[i].FK_events_documents_types_document_types_variables[j].is_explicit_document_type = true;\n } else {\n copyDocumentsTypesVariables[i].FK_events_documents_types_document_types_variables[j].is_explicit_document_type = false;\n }\n }\n }\n\n $scope.results = {\n event_id: $scope.eventId,\n documentTypesVariables: copyDocumentsTypesVariables\n }\n\n Restangular.all('DocumentsTypesVariables/CustomDocumentTypesVariables').post($scope.results).then(function (result) {\n\n $scope.loadData();\n });\n }\n\n $scope.addFile = function (flowFile, id) {\n var fileReader = new FileReader();\n fileReader.onload = function (event) {\n var uri = event.target.result;\n $scope.$apply(function () {\n angular.forEach($scope.documents_types_variables, function (item) {\n if (item.id == id) {\n if (item.FK_events_documents_types_document_types_variables.length == 0) {\n item.FK_events_documents_types_document_types_variables.push({ icon: \"isNewImage\", value: uri });\n } else {\n item.FK_events_documents_types_document_types_variables[0].icon = \"isNewImage\";\n item.FK_events_documents_types_document_types_variables[0].value = uri;\n }\n item.FK_events_documents_types_document_types_variables.delete_icon = false;\n }\n });\n \n });\n };\n fileReader.readAsDataURL(flowFile.file);\n };\n \n\n }])\n;\n\n","import ReportsPreviewModalView from \"../../reports/reports-preview.html\";\nimport DocumentsImportDocumentModalView from \"./DocumentsImportDocumentModal.html\";\n\n\nangular.module(\"events\")\n .controller(\"EventsDocumentsListCtrl\", ['event', 'LoginService', '$rootScope', '$scope', 'Restangular', 'gridService', 'modalService', '$uibModal', '$filter', '$translate', '$stateParams', '$state', '$http', '$window', 'uiGridConstants', 'eventService', 'Upload', '$log',\n function (event, LoginService, $rootScope, $scope, Restangular, gridService, modalService, $uibModal, $filter, $translate, $stateParams, $state, $http, $window, uiGridConstants, eventService, Upload, $log) {\n\n $rootScope.title = $filter('translate')('events.title') + \" - \" + $filter('translate')('events.documents.documents');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('events.title'), url: \"events.list\" },\n { title: $filter('translate')('events.title'), url: \"events.list\" },\n { title: $filter('translate')('events.documents.documents') }\n ];\n $scope.classSize = \"col-lg-12\";\n\n function isDefinedAndNotNull(val) {\n return angular.isDefined(val) && val !== null;\n }\n function isDefinedAndNotNullOrEmpty(val) {\n return angular.isDefined(val) && val !== null && val !== \"\";\n }\n\n $scope.event = event;\n $rootScope.breadcrumb = [\n { title: $filter('translate')('events.title'), url: \"events.list\" },\n { title: $scope.event.name, url: \"events.edit({ id: \" + $scope.event.id + \" })\" },\n { title: $filter('translate')('events.documents.documents') }\n ];\n $rootScope.title = $scope.event.name + \" - \" + $filter('translate')('events.documents.documents');\n\n $scope.is_template = $stateParams.is_template == 'true';\n\n var options = {\n event_id: $stateParams.id,\n has_variables: true,\n no_program_act_config: true\n };\n\n Restangular.all('DocumentsTypes').getList(options).then(function (data) {\n $scope.documentTypes = data;\n\n $scope.loadTemplateDocuments();\n \n angular.forEach($scope.documentTypes, function (documentType) {\n var options = {\n code: documentType.code\n };\n Restangular.all('Documents/GetDocumentsByDocumentTypeCode').getList(options).then(function (data) {\n documentType.documents = data;\n });\n });\n });\n\n $scope.configure = function (document) {\n\n $scope.$modalInstance = $uibModal.open({\n animation: true,\n template: ReportsPreviewModalView,\n controller: 'ReportsPreviewCtrl',\n size: 'lg',\n resolve: {\n document: function () {\n return document;\n },/*\n event: function () {\n return event;\n }*/\n entity_type: function () { return \"events\"; },\n entity_type_id: function () { return event.id; }\n }\n\n });\n\n $scope.$modalInstance.result.then(function (data) {\n let modified = [];\n\n //añadimos info de parametros\n angular.forEach(data, function (parameter) {\n if(typeof parameter.values !== \"undefined\") {\n parameter.entity_type = \"events\";\n parameter.entity_type_id = $scope.event.id;\n parameter.document_id = document.id;\n if (parameter.name == 'JasperParameter' && parameter.values !=null) {\n let values = [];\n var val = {\n language_id: 1,\n value: parameter.values\n };\n values.push(val);\n parameter.values = values;\n }\n modified.push(parameter);\n }\n });\n\n //guardar parametros para el evento en cuestion\n Restangular.all('DocumentsConfig').post(modified).then(function (data) {\n $log.debug(data);\n });\n\n });\n };\n\n // Importación de archivos \n $scope.importDocument = function (documentTypeId) {\n $scope.$modalInstance = $uibModal.open({\n animation: true,\n template: DocumentsImportDocumentModalView,\n size: \"lg\",\n controller: \"DocumentsImportDocumentModalCtrl\",\n scope: $scope,\n resolve: {\n documentTypeId: function () {\n return documentTypeId;\n },\n },\n });\n }\n\n $scope.loadTemplateDocuments = function () {\n Restangular.all(\"folders\").customGET(\"getTemplateFolders\", { event_id : $stateParams.id } ).then(function (res) {\n let allTemplateFiles = res;\n $scope.documentTypes.forEach(function (documentType) {\n let templateFiles = allTemplateFiles.filter(f => f.DocumentTypeId == documentType.id);\n documentType.templateFiles = null;\n documentType.templateFiles = templateFiles;\n if (templateFiles.length > 0) {\n $log.debug(templateFiles);\n }\n });\n });\n };\n\n $scope.download = function (file) {\n modalService.confirm({\n title: $filter('translate')('events.documents.download_file'),\n message: $filter('translate')('events.documents.download_file_message') + \" \" + file.name + \"?\",\n onAccept: function () {\n let filePath = \"/api/files/\" + file.uid + \"/download\";\n var link = document.createElement('a');\n link.href = filePath;\n link.download = `${file.name}`;\n link.click();\n }\n });\n };\n\n $scope.checkDelete = function (file) {\n modalService.confirm({\n title: $filter('translate')('events.documents.delete'),\n message: $filter('translate')('events.documents.delete_message') + \" \" + file.name + \"?\",\n onAccept: function () {\n Restangular.all(\"Files\").customGET(\"removeFileTemplate\", { fileId: file.id }).then(function (result) {\n $scope.loadTemplateDocuments();\n toastr.success($filter('translate')('events.documents.remove_success'));\n });\n }\n });\n };\n\n // Subimos el archivo\n let uploadFile = function (id) {\n $scope.replacementFile.upload = Upload.upload({\n url: (window as any).CONFIG.api_url + `Files/replaceFile/${id}`,\n data: { file: $scope.replacementFile, fileId: id },\n\n });\n\n $scope.replacementFile.upload.then(function (response) {\n toastr.success($filter('translate')('events.documents.replace_success'));\n $scope.loadTemplateDocuments();\n }, function (response) {\n if (response.status > 0) {\n let errorMsg = response.status + ': ' + response.data;\n toastr.error(\"Ha ocurrido un error: \" + errorMsg);\n }\n })\n\n return true;\n };\n\n // Seleccionamos el archivo a subir \n $scope.replaceFile = function (documentType, fileId) {\n $scope.replacementFile = null;\n \n $(\"#frmNewFile\").click();\n $(\"#frmNewFile\").change(function () {\n var fileInput = document.querySelector('#frmNewFile') as HTMLInputElement;\n var file = fileInput?.files?.[0];\n if (file) {\n documentType.templateFiles = [];\n var fileReader = new FileReader();\n /* \n * fileReader.onload = function (event) {\n var src = event.target.result;\n $scope.showImg = src;\n if (!$scope.$$phase) $scope.$apply();\n };\n */\n fileReader.readAsDataURL(file);\n $scope.replacementFile = file;\n uploadFile(fileId)\n } else {\n $scope.replacementFile = null;\n return false;\n }\n });\n };\n\n }])\n\n\n\n .controller(\"DocumentsImportDocumentModalCtrl\", ['$scope', 'Restangular', 'documentTypeId', '$stateParams', '$log',\n function ($scope, Restangular, documentTypeId, $stateParams, $log) {\n\n $scope.documentToAdd = {};\n $scope.selectFiles = [];\n\n Restangular.all('Files').getList({ documentTypeId: documentTypeId}).then(function (data) {\n $scope.selectFiles = data;\n });\n\n $scope.onSelect = function () {\n $log.debug($scope.documentToAdd.selected)\n }\n\n $scope.onAccept = function () {\n if ($scope.documentToAdd.selected.entity_type != \"events\" || $scope.documentToAdd.selected.entity_type_id != $stateParams.id) {\n $scope.documentToAdd.selected.entity_type = \"events\";\n $scope.documentToAdd.selected.entity_type_id = $stateParams.id;\n };\n\n Restangular.all('Files').customPOST($scope.documentToAdd.selected, \"addFileToTemplates\").then(function (result) {\n $scope.loadTemplateDocuments();\n $scope.$modalInstance.close();\n });\n }\n\n $scope.onCancel = function () {\n $scope.$modalInstance.dismiss('cancel');\n };\n\n }])\n","angular.module(\"events\")\n\n .controller(\"EventsMenuCtrl\", ['$state', 'event', 'LoginService', '$scope', '$stateParams', '$rootScope', 'eventService', '$interval', 'treeService', 'Restangular', 'modalService', '$filter', '$log', function ($state, event, LoginService, $scope, $stateParams, $rootScope, eventService, $interval, treeService, Restangular, modalService,$filter, $log) {\n\n event.changesNotSaved = false; //para que aparezca el texto de cambios no guardados\n event.locationChanged = false;\n\n //Gestión de campos avanzados\n\n $scope.allOptions = false;\n $scope.toggleIcon = \"fas fa-toggle-off\";\n\n $scope.toggleAllOptions = function () {\n\n if ($scope.allOptions) {\n $scope.allOptions = false;\n // $scope.toggleIcon = \"fas fa-toggle-off\";\n } else {\n $scope.allOptions = true;\n // $scope.toggleIcon = \"fas fa-toggle-on\";\n }\n }\n\n //Comprobamos si la empresa tiene marcado la opción de el artículo 10 para mostrar las opciones en consecuencia\n $scope.article10 = false;\n $scope.article12 = false;\n $scope.public_guest_app_enabled = false;\n Restangular.one('Companies', $rootScope.company_id).get().then(function (results) {\n\n if (results.article_10 == true) { $scope.article10 = true; }\n if (results.article_12 == true) { $scope.article12 = true; }\n\n if (results.public_guest_app_enabled == true) { $scope.public_guest_app_enabled = true; }\n // cargamos el menu ahora para poder filtrar los items según los permisos\n $scope.loadMenu();\n\n }); \n\n $scope.selectActFormat = [\n { name: \"presencial\", translation: $filter('translate')('events.format_presencial') },\n { name: \"mixto\", translation: $filter('translate')('events.format_mixto') },\n { name: \"videoconferencia\", translation: $filter('translate')('events.format_videoconferencia') }\n ];\n\n $scope.showCheckRestricted = true;\n $scope.state = $state; //Controlamos que solo en el estado de edicion general se muestre la edicion de la imagen.\n\n $scope.allowShowInformation = LoginService.permissionExist(\"INFORMATION_READ\"); //Menu MEMORIA\n //Permisos para los distintos enlaces:\n $scope.allowShowWorkTeam = LoginService.permissionExist(\"EVENTS_WORK_TEAM_READ\");\n $scope.allowShowGuests = LoginService.permissionExist(\"EVENTS_GUESTS_READ\");\n $scope.allowShowTasks = LoginService.permissionExist(\"EVENTS_TASKS_READ\");\n $scope.allowShowProgramAct = LoginService.permissionExist(\"EVENTS_PROGRAM_ACT_READ\");\n $scope.allowShowDiary = LoginService.permissionExist(\"EVENTS_DIARY_READ\");\n $scope.allowShowMaterials = LoginService.permissionExist(\"EVENTS_MATERIALS_READ\");\n $scope.allowShowStaff = LoginService.permissionExist(\"EVENTS_STAFF_READ\");\n $scope.allowShowSpace = LoginService.permissionExist(\"EVENTS_SPACE_READ\");\n $scope.allowShowIndicator = LoginService.permissionExist(\"EVENTS_INDICATOR_READ\");\n $scope.allowShowMailAccount = LoginService.permissionExist(\"EVENTS_MAIL_ACCOUNT_READ\");\n $scope.allowShowBudget = LoginService.permissionExist(\"EVENTS_BUDGET_READ\");\n $scope.allowShowInscriptionsForms = LoginService.permissionExist(\"INSCRIPTIONS_FORMS_READ\");\n $scope.allowShowParkings = LoginService.permissionExist(\"EVENTS_PARKINGS_READ\");\n $scope.allowShowAccreditation = LoginService.permissionExist(\"EVENTS_ACCREDITATION_READ\");\n $scope.allowShowHistoric = LoginService.permissionExist(\"EVENTS_HISTORIC_READ\");\n $scope.allowShowNotifications = LoginService.permissionExist(\"NOTIFICATIONS_READ\");\n $scope.allowShowCMS = LoginService.permissionExist(\"CMS_CATEGORIES_READ\");\n\n $scope.showEventsMenu = false;\n $scope.sizewidth = 700;\n $scope.regxUrls = /^http(s)?:\\/\\/.*/;\n\n $scope.$watch(function () {\n if (!$rootScope.sizeLg && !$rootScope.sizeMd) {\n $scope.showButtonMenu = true;\n\n $scope.buttontext = \"\";\n if (!$rootScope.sizeXs) $scope.buttontext = $filter('translate')('events.button_toggle_menu');\n\n } else {\n $scope.showButtonMenu = false;\n $scope.showEventsMenu = true;\n }\n if (typeof (angular.element(\".blockDatesSize\")[0]) !== 'undefined') $scope.sizewidth = angular.element(\".blockDatesSize\")[0].offsetWidth;\n\n });\n\n $scope.toggleEventsMenu = function () {\n\n $scope.showEventsMenu = !$scope.showEventsMenu;\n\n }\n\n $scope.isPageLoaded = false;\n\n $scope.loadMenu = function () {\n Restangular.all('Menus').getList({ code: 'EVENT_MENU' }).then(function (results) {\n $scope.menu = results;\n let options = { menu_id: $scope.menu[0].id, _sortBy: \"position\", _sortDirection: \"asc\" };\n Restangular.all('MenusItems').getList(options).then(function (results) {\n\n // filtramos si tiene la app activada\n if (!$scope.public_guest_app_enabled) {\n results = results.filter(m => !m.ui_sref.includes('events.edit.push_notifications'));\n }\n\n let menusItems = [];\n menusItems = treeService.menuTree(results, null, menusItems);\n $scope.menusItems = [];\n let idxParent;\n let profilePermissions = false;\n let isSuperAdmin = LoginService.permissionExist(\"SUPER_ADMIN\");\n if (LoginService.permissionExist(\"SUPER_ADMIN\")) {\n profilePermissions = true;\n } else {\n if (event.logged_event_user != null) {\n if (event.logged_event_user.event_id == $scope.event.id && event.logged_event_user.FK_events_staff_staff != null) {\n profilePermissions = true;\n }\n }\n }\n angular.forEach(menusItems, function (menuItem, idx) {\n menuItem.editable = 1;\n if (event.is_restricted_access) {\n menuItem.visible = 0;\n menuItem.editable = 0;\n if(profilePermissions != false) {\n menuItem.visible = 1;\n menuItem.editable = 1;\n }\n }\n if (menuItem.parent_menu_item_id == null) {\n menuItem.childs = [];\n $scope.menusItems.push(menuItem);\n idxParent = $scope.menusItems.length - 1;\n } else {\n if (angular.isDefined(idxParent)) {\n $scope.menusItems[idxParent].childs.push(menuItem);\n }\n }\n if(menuItem.ui_sref === \"events.edit\") {\n $scope.mainDataEditable = menuItem.editable;\n $scope.mainDataVisible = menuItem.visible;\n } else {\n menuItem.ui_sref = menuItem.ui_sref.replace(\"})\", \", menu_item_id: \" + menuItem.id + \"})\");\n }\n });\n });\n });\n\n // solo podran checkear si es restringido, el responsable que creo el evento o el super administrador\n if (LoginService.get(\"userId\") != event.responsible_id && !LoginService.permissionExist(\"SUPER_ADMIN\")) {\n $scope.showCheckRestricted = false;\n }\n\n };\n\n $scope.id = $stateParams.id;\n $scope.is_template = $stateParams.is_template == 'true';\n if (angular.isDefined($stateParams.id) && $stateParams.id != \"\") {\n\n $rootScope.is_template = event.is_template;\n $scope.event = event;\n $scope.event.date_from = new Date($scope.event.date_from);\n $scope.event.date_to = new Date($scope.event.date_to);\n $scope.days = Math.round(($scope.event.date_from.getTime() - (new Date()).getTime()) / (1000 * 60 * 60 * 24));\n $scope.event_ended = ($scope.event.date_to.getTime() - (new Date()).getTime()) < 0;\n $scope.total_guests = 0;\n $scope.guestProgress = 0;\n $scope.total_staff = 0;\n $scope.staffProgress = 0\n $scope.total_tasks = 0;\n $scope.taskProgress = 0;\n $scope.total_materials = 0;\n $scope.materialsProgress = 0;\n $scope.format = \"presencial\";\n if ($scope.event.reply_deadline) {\n $scope.event.reply_deadline = new Date($scope.event.reply_deadline);\n }\n\n $scope.progress = 0;\n\n $scope.calculaTotal = function () {\n if ($scope.event.event_finished) {\n $scope.progress = 100;\n } else {\n var total = 0;\n if ($scope.total_guests > 0) total++;\n if ($scope.total_staff > 0) total++;\n if ($scope.total_tasks > 0) total++;\n if ($scope.total_materials > 0) total++;\n if (total > 0)\n $scope.progress = (($scope.guestProgress + $scope.staffProgress + $scope.taskProgress + $scope.materialsProgress) / total).toFixed(0);\n else\n $scope.progress = 100;\n }\n }\n\n //Traducimos el bool para que se muestre en el formulario \n\n if ($scope.event.article_10 == true) {\n $scope.event.radio_article_10 = \"1\";\n $scope.article10 == true\n } else {\n $scope.event.radio_article_10 = \"0\";\n $scope.article12 == true;\n } \n\n $scope.loadInfo = function (event_id) {\n //obtenemos los invitados.\n eventService.getGuests(event_id)\n .then(function (result) {\n $scope.guests_pending = result.data.guests_pending;\n $scope.guests_rejected = result.data.guests_rejected;\n $scope.guests_confirmed = result.data.guests_confirmed;\n $scope.guests_delegated = result.data.guests_delegated;\n $scope.guests_manage_delegate = result.data.guests_manage_delegate;\n $scope.guests_pending_approval = result.data.guests_pending_approval;\n $scope.total_guests = result.data.total_guests;\n $scope.total_guests_original = result.data.total_guests_original;\n $scope.companion_guests_confirmed = result.data.companion_guests_confirmed;\n $scope.companion_guests_pending_approval = result.data.companion_guests_pending_approval;\n $scope.companion_guests_confirmed_nominal = result.data.companion_guests_confirmed_nominal;\n $scope.companion_guests_confirmed_not_nominal = result.data.companion_guests_confirmed_not_nominal;\n\n if ($scope.total_guests > 0)\n $scope.guestProgress = ($scope.guests_rejected + $scope.guests_confirmed) / $scope.total_guests * 100;\n else\n $scope.guestProgress = 0;\n $scope.calculaTotal();\n });\n //obtenemos el personal.\n eventService.getStaff(event_id)\n .then(function (result) {\n $scope.staff_pending = result.data.staff_pending;\n $scope.staff_confirmed = result.data.staff_confirmed;\n $scope.total_staff = result.data.total_staff;\n if ($scope.total_staff > 0)\n $scope.staffProgress = $scope.staff_confirmed / $scope.total_staff * 100;\n else\n $scope.staffProgress = 0;\n $scope.calculaTotal();\n });\n //obtenemos las tareas.\n eventService.getTasks(event_id)\n .then(function (result) {\n $scope.tasks_pending = result.data.tasks_pending;\n $scope.tasks_completed = result.data.tasks_completed;\n $scope.tasks_canceled = result.data.tasks_canceled;\n $scope.total_tasks = result.data.total_tasks;\n if ($scope.total_tasks > 0)\n $scope.taskProgress = ($scope.tasks_completed + $scope.tasks_canceled) / $scope.total_tasks * 100;\n else\n $scope.taskProgress = 0;\n $scope.calculaTotal();\n });\n //obtenemos los materiales.\n eventService.getMaterials(event_id)\n .then(function (result) {\n $scope.materials_pending = result.data.materials_pending;\n $scope.materials_confirmed = result.data.materials_confirmed;\n $scope.total_materials = result.data.total_materials;\n if ($scope.total_materials > 0)\n $scope.materialsProgress = $scope.materials_confirmed / $scope.total_materials * 100;\n else\n $scope.materialsProgress = 0;\n $scope.calculaTotal();\n });\n //obtenemos las inscripciones.\n eventService.getPendingInscriptions(event_id)\n .then(function (result) {\n $scope.inscriptions_pending = result.data.pending;\n $scope.total_inscriptions = result.data.total;\n });\n }\n $scope.loadInfo($stateParams.id);\n\n let intervalLoadInfo = $interval(function () { $scope.loadInfo($stateParams.id); }, (window as any).CONFIG.time_check_changes_guests);\n\n let limit_image_height = 0;\n let limit_image_width = 0;\n let loadConfigurationOptions = function () {\n let group_name = \"Imágenes\";\n Restangular.all('Configurations').getList({ code: \"\", group_name: group_name }).then(function (response) {\n let configuration = response;\n limit_image_width = configuration.filter(function (config) { return config.code == \"LIMIT_IMAGE_WIDTH\"; }).map(function (config) { return config.value; })[0];\n limit_image_height = configuration.filter(function (config) { return config.code == \"LIMIT_IMAGE_HEIGHT\"; }).map(function (config) { return config.value; })[0];\n });\n }\n\n loadConfigurationOptions(); //Load image since from company_id\n\n //Cuando salga del events, se destruirá el intervalo.\n $scope.$on(\"$destroy\", function () {\n if (angular.isDefined(intervalLoadInfo)) {\n $interval.cancel(intervalLoadInfo);\n intervalLoadInfo = undefined;\n }\n });\n\n /* Foto */\n /* $scope.selectImage = function (flowFile) {\n var fileReader = new FileReader();\n fileReader.onload = function (event) {\n var uri = event.target.result;\n $scope.$apply(function () {\n $scope.event.icon = uri;\n if (angular.isUndefined($scope.event.FK_events_images) || $scope.event.FK_events_images == null) $scope.event.FK_events_images = {};\n $scope.event.FK_events_images.image = uri;\n $scope.event.image_id = null; //Reseteamo el id para que pille la imagen.\n });\n };\n fileReader.readAsDataURL(flowFile.file);\n };\n \n */\n\n $scope.selectImage = function () {\n $(\"#frmImage\").trigger(\"click\");\n $(\"#frmImage\").change(function () {\n var fileInput = document.querySelector('#frmImage') as HTMLInputElement;\n var file = fileInput?.files?.[0];\n if (file) {\n Restangular.all(\"FilesTypesWhitelist\").customGET(\"GetTotalSizeAllowed\", { entity: \"events\" }).then(function (result) {\n if (result.filter(e => e.type === file.type).length <= 0) {\n var typeAllowed = result.map(o => o.type).join(', ');\n modalService.message({\n title: \"Error\",\n message: $filter('translate')('general.type_file_not_allowed') + \"
\" + typeAllowed,\n onAccept: function () { }\n });\n } else {\n var maxSizeAllowed = result.find(e => e.type === file.type).maxsize;\n var sizeFileMB = file.size / 1024;\n if (sizeFileMB > 0) {\n //Comprobamos que no pase del tamaño limite de imagen\n if (sizeFileMB > maxSizeAllowed) {\n modalService.message({\n title: \"Error\",\n message: $filter('translate')('general.image_size_limit') + \"
\" + maxSizeAllowed + \" Kb\",\n onAccept: function () { }\n });\n } else {\n var fileReader = new FileReader();\n fileReader.onload = function (event) {\n if (!event.target) return;\n var image = new Image();\n image.src = event.target.result as string;\n image.onload = function () {\n // access image size here \n\n if (limit_image_height != 0 && limit_image_width != 0) {\n //Comprobamos que no pase del tamaño limite de imagen\n if (image.width > limit_image_width || image.height > limit_image_height) {\n modalService.message({\n title: \"Error\",\n message: $filter('translate')('events.image_size_limit') + \"
\" + limit_image_width + \"X\" + limit_image_height,\n onAccept: function () { }\n });\n } else {\n if (angular.isUndefined($scope.event.FK_events_images) || $scope.event.FK_events_images == null) $scope.event.FK_events_images = {};\n $scope.event.FK_events_images.image = image.src;\n $scope.event.icon = image.src;\n $scope.event.image_id = null; //??\n $scope.event.changesNotSaved = true;\n if (!$scope.$$phase) $scope.$apply()\n }\n } else {\n if (angular.isUndefined($scope.event.FK_events_images) || $scope.event.FK_events_images == null) $scope.event.FK_events_images = {};\n $scope.event.FK_events_images.image = image.src;\n $scope.event.icon = image.src;\n $scope.event.image_id = null; //??\n $scope.event.changesNotSaved = true;\n if (!$scope.$$phase) $scope.$apply()\n }\n };\n };\n fileReader.readAsDataURL(file);\n }\n } else {\n $scope.removeImage();\n }\n }\n });\n } else {\n $scope.removeImage();\n }\n });\n };\n\n $scope.getImage = function () {\n if ($scope.event.FK_events_images != null && $scope.event.FK_events_images.image != null) {\n return $scope.event.FK_events_images.image;\n } else if ($scope.event.image_id != null) {\n let widthContainer = $(\"#eventMenuContainer\").width();\n return \"/api/Image/GetImageBmp?id=\" + $scope.event.image_id + \"&maxW=\" + widthContainer + \"&maxH2=150\";\n } else {\n return \"assets/img/no_image_event.png\";\n }\n };\n\n $scope.removeImage = function ($event) {\n $scope.event.image_id = null;\n if ($scope.event.FK_events_images != null) $scope.event.FK_events_images.image = null;\n $scope.event.icon = null;\n $scope.event.changesNotSaved = true;\n };\n\n }\n }])\n\n .controller(\"EventsEditCtrl\", ['$http', 'event', 'LoginService', '$scope', '$rootScope', '$controller', '$state', '$stateParams', 'Restangular', '$uibModal', 'modalService', '$compile', 'gridService', '$filter', '$translate', 'eventService', 'generateDocumentService', '$log', '$timeout',\n function ($http, event, LoginService, $scope, $rootScope, $controller, $state, $stateParams, Restangular, $uibModal, modalService, $compile, gridService, $filter, $translate, eventService, generateDocumentService, $log, $timeout) {\n\n $scope.isPageLoaded = false;\n\n //Comprobamos si tiene permiso escritura\n $scope.restricted_access = false;\n $scope.allowWrite = LoginService.permissionExist(\"EVENTS_WRITE\");\n $scope.allowShowGuests = LoginService.permissionExist(\"EVENTS_GUESTS_READ\");\n $rootScope.title = $filter('translate')('events.title');\n $rootScope.days = 0;\n $scope.id = $stateParams.id;\n $scope.is_template = $stateParams.is_template == 'true';\n $scope.urlApi = (window as any).CONFIG.api_url;\n $scope.guests = {};\n $scope.location_id = null;\n $scope.isLocationSelected = false;\n $scope.locationAvailable = false;\n $scope.parent_allowed = true;\n $scope.event = [{}];\n\n $scope.selectIdentificationTypes = [{ id: 'document', name: $filter(\"translate\")('events.identification_document') }, { id: 'document_birthdate', name: $filter(\"translate\")('events.identification_document_birthdate') }];\n\n $scope.onCheckIdentification = function (check) {\n if (check) {\n $scope.event.identification_type = $scope.selectIdentificationTypes[0].id;\n } else {\n $scope.event.identification_type = null;\n }\n }\n\n // Controlamos que no se pueda hacer que un padre sea hijo. \n $scope.checkIfParentAllowed = function (item) {\n if (item && item.is_parent) {\n $scope.parent_allowed = false;\n $scope.event.parent_event_id = null;\n } else {\n $scope.parent_allowed = true;\n };\n }\n\n if (angular.isUndefined($stateParams.id) || $stateParams.id == \"\") {\n $scope.$parent.mainDataEditable = true;\n $scope.$parent.mainDataVisible = true;\n $scope.event = { information_groups_values: [], language_id: $rootScope.languageId, format: \"presencial\" };\n\n Restangular.one('Companies', $rootScope.company_id).get().then(function (results) {\n if (results.article_10 == true) { $scope.article10 = true; }\n if (results.article_12 == true) { $scope.article12 = true; }\n if (results.default_order_article == 'article10') {\n $scope.event.article_10 = \"1\";\n } else {\n $scope.event.article_10 = \"0\";\n }\n if (results.public_guest_app_enabled == true) { $scope.public_guest_app_enabled = true; }\n // cargamos el menu ahora para poder filtrar los items según los permisos\n $scope.loadMenu();\n\n }); \n\n\n if ($rootScope.newEvent!=null && !angular.isUndefined($rootScope.newEvent) && !angular.isUndefined($rootScope.newEvent.date) && $rootScope.newEvent.date!=null) {\n $scope.event.all_day = true;\n $scope.event.date_from = $rootScope.newEvent.date;\n $scope.event.date_to = $rootScope.newEvent.date;\n } else {\n $scope.event.all_day = false;\n }\n $rootScope.newEvent = null;\n $rootScope.breadcrumb = [\n { title: $filter('translate')('events.title'), url: \"events.list\" },\n { title: $filter('translate')('events.title_add')}\n ];\n $scope.restricted_access = false;\n\n // Cargamos igualemnte los infromation groups a petición de Rodolfo\n var options = { entity_type: \"events\" };\n Restangular.all('InformationsGroups').getList(options).then(function (informationGroups) {\n $scope.informationGroups = informationGroups;\n $scope.search.location = event.location;\n $scope.informationGroups.forEach(function (pig) {\n if (pig.configuration != \"\") pig.configuration = JSON.parse(pig.configuration);\n });\n $scope.checkboxSimpleOptions = [\n { option: null, label: $filter('translate')('informations.all'), checked: true },\n { option: true, label: $filter('translate')('events.staff.yes'), checked: false },\n { option: false, label: $filter('translate')('events.staff.no'), checked: false }\n ];\n });\n\n \n } else {\n $scope.is_template = event.is_template;\n\n $scope.event = event;\n\n if (!$scope.event.format) $scope.event.format = \"presencial\";\n\n if ($scope.event.event_type && $scope.event.event_type.is_parent) {\n $scope.parent_allowed = false;\n }\n\n //BUSCAR\n //generamos lista de valores de persons informations groups\n $scope.event.pigs = [];\n\n var options = { entity_type: \"events\" };\n Restangular.all('InformationsGroups').getList(options).then(function (informationGroups) {\n $scope.informationGroups = informationGroups;\n $scope.search.location = event.location;\n\n $scope.informationGroups.forEach(function (pig) {\n if (pig.configuration != \"\") pig.configuration = JSON.parse(pig.configuration);\n });\n $scope.checkboxSimpleOptions = [\n { option: null, label: $filter('translate')('informations.all'), checked: true },\n { option: true, label: $filter('translate')('events.staff.yes'), checked: false },\n { option: false, label: $filter('translate')('events.staff.no'), checked: false }\n ];\n //Lo recorremos para pintarlos correctamente.\n angular.forEach($scope.event.information_groups_values, function (pig) {\n var infoFilter = $scope.informationGroups.filter(function (el) { return el.id == pig.information_group_id; });\n if (infoFilter[0].type == \"checkboxSimple\") {\n $scope.event.pigs[pig.information_group_id] = pig.value; //(pig.value == \"true\" || pig.value == true ? true : false);\n } if (infoFilter[0].type == \"datetime\") {\n $scope.event.pigs[pig.information_group_id] = new Date(pig.value);\n } else {\n $scope.event.pigs[pig.information_group_id] = pig.value;\n }\n });\n });\n\n $rootScope.title = $scope.event.name;\n $rootScope.breadcrumb = [\n { title: $filter('translate')('events.title'), url: \"events.list\" },\n { title: $scope.event.name + \" - \" + $filter('translate')('events.title_edit') }\n ];\n if ($scope.event.date_from != null) $scope.event.date_from = new Date($scope.event.date_from);\n if ($scope.event.date_to != null) $scope.event.date_to = new Date($scope.event.date_to);\n if ($scope.event.FK_events_users == null) $scope.event.FK_events_users = undefined;\n $scope.restricted_access = $scope.event.is_restricted_access && (LoginService.get(\"userId\") != $scope.event.responsible_id);\n }\n $scope.saveEvent = function () {\n\n // Si el evento permite acompañantes, el número máximo de acompañantes tiene que ser menor que 0 \n if ($scope.event.is_companions_allowed == false && $scope.event.default_companions_limit < 1) {\n\n return modalService.message({\n title: $filter('translate')('events.min_companions_limit_exception_title'),\n message: $filter('translate')('events.min_companions_limit_exception_message'),\n onAccept: function () { }\n });\n // break;\n }\n\n if ($scope.search.location != null) {\n if (typeof ($scope.search.location.term) != \"undefined\") {\n $scope.event.location = $scope.search.location.term;\n $scope.event.location_id = $scope.search.location.id;\n } else {\n $scope.event.location = $scope.search.location;\n if ($scope.event.locationChanged) {\n $scope.event.location_id = null;\n }\n }\n } else {\n $scope.event.location = $scope.search.location;\n }\n\n $scope.event.is_template = $scope.is_template;\n if (angular.isDefined($scope.event.FK_events_users) && $scope.event.FK_events_users!=null) $scope.event.responsible_id = $scope.event.FK_events_users.id;\n if ($scope.event.date_to != null && $scope.event.date_to < $scope.event.date_from) $scope.event.date_to = $scope.event.date_from;\n\n // Aseguramos que la variable tenga valor\n if ($scope.event.pigs) {\n angular.forEach($scope.informationGroups, function (pig) {\n var value = $scope.event.pigs[pig.id];\n var pips = $filter(\"filter\")($scope.event.information_groups_values, { information_group_id: pig.id });\n if (pips != null && pips.length > 0) {\n var pip = pips[0];\n pip.value = value;\n } else {\n var newPip = {\n entity_type: \"events\",\n entity_type_id: (angular.isDefined($stateParams.id) && $stateParams.id != \"\" ? $scope.event.id : null),\n information_group_id: pig.id,\n value: value\n };\n if (typeof (value) != \"undefined\") $scope.event.information_groups_values.push(newPip);\n }\n });\n angular.forEach($scope.event.information_groups_values, function (pig) {\n $scope.event.pigs[pig.information_group_id] = pig.value;\n });\n }\n\n // Permisividad de acompañantes\n if ((typeof ($scope.event.is_companions_allowed) != \"undefined\") && (typeof ($scope.event.default_companions_limit) != \"undefined\")) {\n if (typeof ($scope.event.is_companions_allowed) != \"undefined\" && $scope.event.is_companions_allowed == true) $scope.event.default_companions_limit = 0;\n if ($scope.event.is_companions_allowed == false && typeof ($scope.event.default_companions_limit) != \"undefined\" && ($scope.event.default_companions_limit == 0 || $scope.event.default_companions_limit == \"\")) $scope.event.is_companions_allowed = true;\n } else {\n // Si no se han informado los campos 'No permitir acompañantes' y 'Límite de acompañantes' se rellena su valor automáticamente\n $scope.event.is_companions_allowed = true;\n $scope.event.default_companions_limit = 1;\n }\n\n if ($scope.event.radio_article_10 == \"1\") {\n $scope.event.article_10 = true;\n } else {\n $scope.event.article_10 = false;\n }\n\n if (angular.isDefined($stateParams.id) && $stateParams.id != \"\") {\n\n $scope.event.put().then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('events.edit_success'));\n $state.go(\"events.edit\", { id: result.id, is_template: $scope.is_template });\n $scope.event.changesNotSaved = false;\n $scope.event.locationChanged = false;\n if ($scope.event.article_10 == true) {\n $scope.event.radio_article_10 = \"1\";\n } else {\n $scope.event.radio_article_10 = \"0\";\n }\n } else {\n $scope.errorMessage = result.message;\n }\n console.log($scope.event.changesNotSaved);\n });\n } else {\n Restangular.all('Events').post($scope.event).then(function (result) {\n\n\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('events.create_success'));\n $state.go(\"events.edit\", { id: result.id, is_template: $scope.is_template });\n $scope.event.changesNotSaved = false;\n $scope.event.locationChanged = false;\n if ($scope.event.article_10 == true) {\n $scope.event.radio_article_10 = \"1\";\n } else {\n $scope.event.radio_article_10 = \"0\";\n }\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n\n console.log($scope.event.changesNotSaved);\n }\n let loadDataCombos = function () {\n Restangular.all('Users').getList({ withoutImages: true }).then(function (users) {\n $scope.selectUsers = users;\n //Valor por defecto Responsable_id, si es nuevo evento\n if (angular.isUndefined($stateParams.id) || $stateParams.id == \"\") {\n var defaultUserFilter = users.filter(function (u) { return u.id == parseInt(localStorage.getItem(\"userId\")); });\n if (defaultUserFilter != null && defaultUserFilter.length > 0) {\n $scope.event.FK_events_users = defaultUserFilter[0];\n }\n }\n });\n\n Restangular.all('EventsTypes').getList().then(function (eventsTypes) {\n $scope.selectEventsTypes = eventsTypes;\n });\n\n Restangular.all(\"Languages\").getList({ use_for_translation: true, only_active: true }).then(function (languages) {\n $scope.availableLanguages = languages;\n });\n\n Restangular.all('EventHosts').getList().then(function (eventHosts) {\n $scope.eventHosts = eventHosts;\n });\n\n Restangular.all(\"Events\").customGET(\"AvailableParents\").then(function (result) {\n $scope.selectParents = result;\n $scope.filterParents();\n });\n\n };\n\n // Filtramso los eventos que están dentro del rango \n\n $scope.filterParents = function () {\n if ($scope.selectParents) {\n $scope.selectParentsFiltered = $scope.selectParents.filter(e => e.date_from);\n $scope.selectParentsFiltered = $scope.selectParentsFiltered.filter(e => new Date(e.date_to) > new Date($scope.event.date_to) && new Date(e.date_to) > new Date($scope.event.date_from));\n $scope.selectParentsFiltered = $scope.selectParentsFiltered.filter(e => new Date(e.date_from) < new Date($scope.event.date_from) && new Date(e.date_from) < new Date($scope.event.date_to));\n // Comprobamos si el evento padre puede seguir siendolo (Si el evento que editamso está dentro del rango de fechas)\n if (!$scope.selectParentsFiltered.map(p => p.id).includes($scope.event.parent_event_id)) {\n $scope.event.parent_event_id = null;\n };\n }\n\n };\n\n loadDataCombos();\n\n $scope.checkDelete = function () {\n modalService.confirm({\n title: $filter('translate')('events.button_delete'),\n message: $filter('translate')('events.delete_message') + \" \" + $scope.event.name + \"?\",\n onAccept: function () {\n Restangular.one('Events', $scope.event.id).remove({ send_notifications: $scope.event.send_notifications }).then(function () {\n //$scope.event.remove().then(function () {\n toastr.success($filter('translate')('events.delete_success'));\n if ($scope.is_template) $state.go(\"events.list\", { is_template: true });\n else $state.go(\"events.list\", { is_template: false });\n });\n }\n });\n };\n\n $scope.createTemplateFromEvent = function () {\n if (angular.isDefined($scope.event.id)) {\n modalService.confirm({\n title: $filter('translate')('events.button_create_template'),\n message: $filter('translate')('events.button_create_template_message') + \" \" + $scope.event.name + \"?\",\n onAccept: function () {\n Restangular.all(\"Events/createTemplateFromEvent\").post($scope.event).then(function (event) {\n toastr.success($filter('translate')('events.created_template_from_event_success'));\n\n });\n }\n });\n\n }\n }\n\n //set or unset as favourite event\n $scope.eventFavourite = function (event_id) {\n Restangular.all('EventsFavouriteUsers').customPOST({}, \"SetOrUnsetFavourite\", { event_id: event_id }).then(function (result) {\n $scope.event.favourite_to_user = !$scope.event.favourite_to_user;\n });\n\n }\n\n $scope.search = {\n \"location\": null,\n locations: [],\n location_min_length: 3\n };\n\n $scope.getLocationsSearch = function (val) {\n if (val == null) {\n val = '';\n } else {\n val = val.replace(/[:.?*+^$[\\\\(){|]/, \"\");\n }\n let ret = [];\n\n /*if ($scope.search.location != null) {\n angular.forEach($scope.search.location, function (row) {\n if (row.term.includes(val)) {\n ret.push(row);\n }\n });\n } else {*/\n ret = Restangular.all('search/locations/' + val).getList().then(function (searchTerms) {\n return searchTerms;\n });\n //}\n return ret;\n };\n\n $scope.locationSelected = function ($item, $model, $label) {\n $scope.isLocationSelected = true;\n Restangular.all('Locations/' + $item.id + '/CheckAvailability').customGETLIST(\"\",\n { date_from: $scope.event.date_from, date_to: $scope.event.date_to})\n .then(function (results) {\n if(angular.isArray(results) && results.length > 0) {\n $scope.locationAvailable = false;\n $scope.event.reserve = false;\n } else {\n $scope.locationAvailable = true;\n }\n });\n $scope.search.position_min_length = 0;\n $scope.location_id = $item.id;\n Restangular.one('Locations', $item.id).get().then(function (results) {\n if (results.name !== undefined && results.length > 0) {\n $scope.search.locations = [];\n angular.forEach(results, function (row) {\n $scope.search.locations.push({\n id: row.id, // Este es el position_id de cara a luego usarlo para buscar el correo\n term: row.name\n });\n });\n\n }\n });\n };\n\n\n $scope.printDialog = function (code, type_document, type_result, id) {\n var params = {\n entity_type: \"events\",\n entity_type_id: $stateParams.id,\n documents: { codes: [code] }\n };\n generateDocumentService.documentNew({\n params: params,\n onAccept: function (data) {\n angular.forEach(data, function (item) {\n //url = (window as any).CONFIG.api_url + 'documentgenerator/' + item.document_url_method + '/' + item.document_id + '/' + params.entity_type_id + '/pdf';\n //$log.debug(url);\n //window.open(url, '_blank');\n $http({\n method: 'post',\n url: (window as any).CONFIG.api_url + 'documentgenerator/Generate',\n params: { document_id: item.document_id, outputType: 'pdf', event_id: params.entity_type_id }\n }).then(function (result, status, headers, config) {\n var url = (window as any).CONFIG.api_url + 'documentgenerator/download/' + result.data;\n window.open(url, '_blank');\n });\n })\n }\n });\n };\n\n $scope.duplicateEvent = function () {\n\n modalService.confirm({\n title: $filter('translate')('events.duplicate_event'),\n message: $filter('translate')('events.duplicate_events_message') + \" \" + $scope.event.name + \"?\",\n onAccept: function () {\n if ($scope.event.id != null) {\n Restangular.all('Events').customPOST({}, $scope.event.id + \"/duplicate\", {}).then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('events.create_success'));\n $state.go(\"events.edit\", { id: result.id, is_template: $scope.is_template });\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n }\n });\n\n }\n\n $scope.$watchGroup(['event.name', 'event.radio_article_10', 'event.date_from.getUTCDate()', 'event.date_to.getUTCDate()',\n 'event.FK_events_users', 'event.is_companions_allowed', 'event.default_companions_limit', 'event.all_day',\n 'event.show_in_dashboard', 'event.event_finished', 'event.require_invitation_confirmation',\n 'event.allow_request_invitation', 'event.is_restricted_access', 'event.hide_from_agenda_report', 'event.is_public', 'event.allow_parking','event.notes'], function (newVal, oldVal) {\n\n if (newVal === oldVal) {\n $scope.event.changesNotSaved = false;\n return;\n } else {\n $scope.event.changesNotSaved = true;\n }\n }, true);\n }])\n\n;\n","import EventTemplateModalView from \"./templateModal.html\";\nimport ReportsPreviewModal from \"../reports/reports-preview.html\";\n\n\nangular.module(\"events\")\n\n .controller(\"EventsListCtrl\", ['$rootScope', '$scope', '$http', '$interval', '$q', 'i18nService', 'Restangular', 'gridService', 'modalService', '$uibModal', '$filter', '$translate', 'LoginService', '$stateParams', '$state', 'datasetsService', 'treeService', '$log',\n function ($rootScope, $scope, $http, $interval, $q, i18nService, Restangular, gridService, modalService, $uibModal, $filter, $translate, LoginService, $stateParams, $state, datasetsService, treeService, $log) {\n $log = $log.getInstance(\"EventsListCtrl\");\n \n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"EVENTS_WRITE\");\n\n if ($stateParams.is_template == 'true') {\n $rootScope.title = $filter('translate')('events.title_template');\n } else {\n $rootScope.title = $filter('translate')('events.title');\n }\n\n $scope.dateEvents = {};\n $scope.viewAll = LoginService.permissionExist(\"P_EVENTS_VIEW_ALL\");\n $rootScope.breadcrumb = [\n { title: $filter('translate')('events.title') }\n ];\n $scope.is_template = $stateParams.is_template == 'true';\n $scope.eventFilter = {};\n\n //$scope.eventFilter.date_from = new Date(); // rodolfo quiere que se lo quite 04/12/2020\n\n Restangular.all('Mobile/Events/current/access/control').getList().then(function (result) {\n $log.debug(result);\n });\n \n let filter = false;\n if ($rootScope.sizeSm || $rootScope.sizeXs) {\n var maxbottomwidth = 60;\n var titleedit = \"\";\n var titledelete = \"\";\n var actionedit = 'popover-placement=\"top\" popover-append-to-body=\"true\" type=\"button\" popover-trigger=\"mouseenter\" uib-popover=\"' + $filter('translate')('events.button_edit') + '\" ui-sref=\"events.edit({id:row.entity.id, is_template:false})\"';\n var actiondelete = 'popover-placement=\"top\" popover-append-to-body=\"true\" type=\"button\" popover-trigger=\"mouseenter\" uib-popover=\"' + $filter('translate')('events.button_delete') + '\" ng-click=\"grid.appScope.deleteDialog(row.entity.id,row.entity.name);\" ng-if=\"grid.appScope.allowWrite\"';\n } else if ($rootScope.sizeLg || $rootScope.sizeMd) {\n var maxbottomwidth = 150;\n var titleedit =\" \"+ $filter('translate')('events.button_edit');\n var titledelete =\" \"+ $filter('translate')('events.button_delete')\n var actionedit = 'ui-sref=\"events.edit({id:row.entity.id, is_template:false})\"';\n var actiondelete = 'ng-click=\"grid.appScope.deleteDialog(row.entity.id,row.entity.name);\" ng-if=\"grid.appScope.allowWrite\"';\n }\n\n if (!$scope.is_template) {\n $scope.options = {\n date_from: new Date(), _sortBy: 'date_from',\n required_image: true\n };\n if (!$scope.viewAll) {\n $scope.options.user_id = LoginService.get(\"userId\");\n }\n $scope.options.is_template = false;\n /* Restangular.all('Events').getList($scope.options).then(function (events) {\n $scope.events = events;\n });*/\n var optionsPIGa = { entity_type: \"events\" };\n Restangular.all('InformationsGroups').getList(optionsPIGa).then(function (informationGroups) {\n $scope.informationGroups = informationGroups;\n angular.forEach($scope.informationGroups, function (pig) {\n if (pig.configuration != \"\") pig.configuration = JSON.parse(pig.configuration);\n });\n $scope.checkboxSimpleOptions = [\n { option: null, label: $filter('translate')('informations.all'), checked: true },\n { option: true, label: $filter('translate')('events.staff.yes'), checked: false },\n { option: false, label: $filter('translate')('events.staff.no'), checked: false }\n ];\n });\n }\n\n $scope.goToEdit = function (rowEntity) {\n $state.go(\"events.edit\", { group_id: rowEntity.group_id, id: rowEntity.id, is_template: $scope.is_template });\n }\n\n if (!$scope.is_template) {//Si no es plantilla\n $scope.gridOptionsEvents = {\n pdfTitle: $filter('translate')('events.pdf_title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n showTreeExpandNoChildren: false,\n expandAllRows: false,\n //gridMenuShowHideColumns: false,\n enableSorting: true,\n paginationPageSizes: [20, 40, 60],\n paginationPageSize: 20,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n {\n name: 'favourite_to_user', width: 25, field: 'favourite_to_user', displayName: \"\", enableFiltering: false, enableHiding: false, enableColumnMenu: false,\n cellTemplate: '
' +\n '' +\n '
',\n visible: ($rootScope.sizeSm || $rootScope.sizeXs || $rootScope.sizeMd ? false : true)\n },\n {\n name: 'icon', displayName: $filter('translate')('cms.icon'), cellTemplate: '
' +\n '' +\n '
', width: 80, enableFiltering: false, enableHiding: false\n },\n {\n name: 'is_restricted_access', width: 25, field: 'is_restricted_access', displayName: \"\", enableFiltering: false, enableHiding: false, enableColumnMenu: false,\n cellTemplate: '
' +\n '' +\n '
',\n visible: ($rootScope.sizeSm || $rootScope.sizeXs || $rootScope.sizeMd ? false : true) \n },\n {\n name: 'name', displayName: $filter('translate')('events.name'), enableFiltering: true, enableHiding: false, enableColumnMenu: false, minWidth: 125,\n cellTemplate: '
' +\n '{{grid.getCellValue(row, col)}}' +\n '
'\n },\n {\n name: 'date_from', displayName: $filter('translate')('events.date_from'), maxWidth: 125,minWidth:80,\n type: 'date', cellFilter: 'toLocalDate | date:\\'dd/MM/yyyy\\'',\n customFormatFn: function (value) {\n if (value != null) {\n var fecha = new Date(value);\n return $filter('date')(fecha, 'dd/MM/yyyy');\n }\n return \"\";\n },\n filterHeaderTemplate: '
' +\n '' +\n '
',\n enableFiltering: true, enableColumnMenu: false\n },\n {\n name: 'pigs', displayName: $filter('translate')('events.pigs'), enableFiltering: false,\n enableHiding: true, enableColumnMenu: false, enableSorting: false, exporterSuppressExport: false,\n minWidth: 100, maxWidth: 125,\n cellTemplate: '
' +\n ' ' +\n '' +\n '' +\n '' +\n\n '' +\n '
',\n visible: ($rootScope.sizeXs ? false : true)\n },\n {\n name: 'progress', displayName: $filter('translate')('events.progress'), enableFiltering: false,\n enableHiding: true, enableColumnMenu: false, enableSorting: false, exporterSuppressExport: true,\n minWidth: ($rootScope.sizeSm || $rootScope.sizeXs || $rootScope.sizeMd ? 50 : 100),\n maxWidth: ($rootScope.sizeSm || $rootScope.sizeXs || $rootScope.sizeMd ? 50 : 200),\n cellTemplate: '
' +\n '
' +\n '
' +\n '{{row.entity.progress}}%'+\n '
'+\n '
'+\n '
',\n visible: ($rootScope.sizeXs ? false : true)\n },\n {\n name: 'responsible', field: 'FK_events_users.name', displayName: $filter('translate')('events.responsible'), enableFiltering: true, enableHiding: true, enableColumnMenu: false, minWidth: 100, maxWidth: 125,\n cellTemplate: '
' +\n '{{grid.getCellValue(row, col)}}' +\n '
',\n visible: ($rootScope.sizeSm || $rootScope.sizeXs ? false : true)\n },\n {\n name: 'guests', displayName: $filter('translate')('events.guests.guests'), enableFiltering: true, enableHiding: false, enableColumnMenu: false, minWidth: 100, maxWidth: 125,\n cellTemplate: '
' +\n '{{row.entity.totalGuests}}
' +\n '{{row.entity.totalGuestsConfirmed}}
',\n visible: ($rootScope.sizeSm || $rootScope.sizeXs ? false : true)\n },\n\n //\n\n {\n name: ' ', minWidth: 50, maxWidth: maxbottomwidth, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionIconNoSpaceTemplate([\n { title: titleedit, action: actionedit, cssIconClass: \"fa fa-edit\", cssClass: \"btn btn-xs btn-default btn-outline btn-custom-laptop\" },\n { title: titledelete, action: actiondelete, cssIconClass: \"fa fa-remove\", cssClass: \"btn btn-xs btn-default btn-outline btn-custom-laptop\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n options.is_template = angular.isUndefined($scope.is_template);\n options._sortBy = \"date_from\";\n if (filter) {\n options.name = $scope.eventFilter.name;\n options.date_from = $scope.eventFilter.date_from;\n options.date_to = $scope.eventFilter.date_to;\n }\n\n if (!!$scope.dateEvents.DateFrom) options.date_from = $scope.dateEvents.DateFrom;\n if (!!$scope.dateEvents.DateTo) options.date_to = $scope.dateEvents.DateTo;\n if (!$scope.viewAll) options.user_id = LoginService.get(\"userId\");\n var pigs = \"\";\n for (var key in $scope.eventFilter.pigs) {\n if (typeof $scope.eventFilter.pigs[key] != \"undefined\" && $scope.eventFilter.pigs[key] != \"\" && $scope.eventFilter.pigs[key] != null) {\n if (typeof ($scope.eventFilter.pigs[key]) == \"object\") {\n var infoFilter = $scope.informationGroups.filter(function (el) { return el.id == key; });\n if(infoFilter.length == 1) {\n if (infoFilter[0].type == \"datetime\") {\n if ($scope.eventFilter.pigs[key] != null) pigs += (pigs != \"\" ? \"#\" : \"\") + key + \"=>\" + new Date($scope.eventFilter.pigs[key]).toISOString();\n } else if (infoFilter[0].type == \"checkboxSimple\") {\n if($scope.eventFilter.pigs[key].checked != \"\") pigs += (pigs != \"\" ? \"#\" : \"\") + key + \"=>\" + $scope.eventFilter.pigs[key].checked;\n } else {\n pigs += (pigs != \"\" ? \"#\" : \"\") + key + \"=>\" + $scope.eventFilter.pigs[key];\n }\n }\n } else {\n pigs += (pigs != \"\" ? \"#\" : \"\") + key + \"=>\" + $scope.eventFilter.pigs[key];\n }\n }\n }\n options.pigs = pigs;\n //return Restangular.all('Events').getList(options);\n\n var deferred = $q.defer();\n Restangular.all('Events').getList(options).then(function (result) {\n let data = treeService.eventsTree(result, []);\n\n data.totalRows = result.totalRows;\n deferred.resolve(data);\n });\n return deferred.promise;\n }\n };\n } else { //Si es plantilla\n $scope.gridOptionsEvents = {\n pdfTitle: $filter('translate')('events.pdf_title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n //gridMenuShowHideColumns: false,\n enableSorting: true,\n paginationPageSizes: [20, 40, 60],\n paginationPageSize: 20,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false },\n { name: 'name', displayName: $filter('translate')('events.name'), enableFiltering: true, enableHiding: false, enableColumnMenu: false },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('events.button_edit'), action: 'ui-sref=\"events.edit({id:row.entity.id, is_template:true})\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('events.button_delete'), action: 'ng-click=\"grid.appScope.deleteDialog(row.entity.id,row.entity.name);\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n options.is_template = $stateParams.is_template;\n options.name = $scope.eventFilter.name;\n options.date_from = $scope.eventFilter.date_from;\n options.date_to = $scope.eventFilter.date_to;\n if (!!$scope.dateEvents.DateFrom) options.date_from = $scope.dateEvents.DateFrom;\n if (!!$scope.dateEvents.DateTo) options.date_to = $scope.dateEvents.DateTo;\n if (!$scope.viewAll) options.user_id = LoginService.get(\"userId\");\n return Restangular.all('Events').getList(options);\n }\n };\n }\n\n //set or unset as favourite event\n $scope.eventFavourite = function (event_id) {\n Restangular.all('EventsFavouriteUsers').customPOST({}, \"SetOrUnsetFavourite\", { event_id: event_id}).then(function (result) {\n $scope.gridOptionsEvents.loadData(false);\n });\n\n }\n\n $scope.searchEvents = function () {\n if (angular.isDefined($scope.gridOptionsEvents.loadData)) {\n filter = true;\n $scope.gridOptionsEvents.loadData(false);\n }\n }\n\n $scope.deleteDialog = function (id, name) {\n $scope.id = id;\n $scope.name = name;\n modalService.confirm({\n title: $filter('translate')('events.button_delete'),\n message: $filter('translate')('events.delete_message') + \" \" + $scope.name + \"?\",\n onAccept: function () {\n Restangular.one('Events', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('events.delete_success'));\n $scope.gridOptionsEvents.gridApi.core.raise.itemDeleted($scope);\n Restangular.all('Events').getList($scope.options).then(function (events) {\n $scope.events = events;\n });\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n });\n\n };\n\n $scope.templateDialog = function () {\n Restangular.all('Events').getList({ is_template: true }).then(function (templates) {\n templates.unshift({\n id: undefined,\n name: $filter('translate')('events.no_template')\n })\n $scope.templates = templates;\n\n let $modalInstance = $uibModal.open({\n animation: true,\n template: EventTemplateModalView,\n size: \"lg\",\n controller: \"TemplateModalCtrl\",\n resolve: {\n templates: function () { return $scope.templates; }\n }\n });\n //Response del modal\n $modalInstance.result.then(function (id) {\n $state.go(\"events.edit\", { id: id, is_template: false });\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n });\n });\n\n }\n\n $scope.export = function () {\n var options = {\n filters: {\n NAME: $scope.eventFilter.name,\n DATE_FROM: $scope.eventFilter.date_from,\n DATE_TO: $scope.eventFilter.date_to\n }\n };\n\n var n = 0;\n for (var key in $scope.eventFilter.pigs) {\n n++;\n options.filters[\"PIG\" + n] = \"#\" + key + \"=\" + $scope.eventFilter.pigs[key] + \"#\";\n }\n\n datasetsService.exportByType(\"events\", options);\n };\n\n }])\n .controller(\"TemplateModalCtrl\", ['$scope', '$uibModalInstance', 'Restangular', 'modalService', '$filter', '$http', '$stateParams', '$q', 'templates', function ($scope, $uibModalInstance, Restangular, modalService, $filter, $http, $stateParams, $q, templates) {\n $scope.templates = templates;\n\n $scope.createFromTemplate = function (i) {\n var template = $scope.templates[i];\n if (angular.isDefined(template.id)) {\n Restangular.all(\"Events/createFromTemplate\").post(template).then(function (event) {\n if (event.id < 1) event.id = undefined;\n $uibModalInstance.close(event.id);\n });\n }\n else\n $uibModalInstance.close(template.id);\n }\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n\n }])\n\n\n /***\n * Modal para elegir que tipo de documento imprimir\n ****/\n .controller(\"ModalGenerateDocumentCtrl\", ['Restangular', '$scope', '$uibModalInstance', '$uibModal', '$http', 'options', '$translate', '$log', function (Restangular, $scope, $uibModalInstance, $uibModal, $http, options, $translate, $log) {\n $scope.orderPrintModal = { _sortBy: \"prefered\" };\n var optionsValues = { code: options.params.code };\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + 'Documents/GetDocumentsByDocumentType',\n params: optionsValues\n }).then(function (results, status, headers, config) {\n $scope.documents = results.data.rows;\n\n //revisamos los documentos, para quitar los electronicos y marcar como electronicos los normales\n angular.forEach($scope.documents, function (document) {\n $log.debug(document);\n });\n\n\n $scope.api_url = (window as any).CONFIG.api_url;\n $scope.type_document = options.params.type_document;\n $scope.type_result = options.params.type_result;\n $scope.showOrder = (options.params.code == \"PROPOSAL_GUEST_LIST\" ? true : false);//sale la opción de ordenación\n\n if (options.params.type_result == 'list') {\n $scope.params = options.params.event_id;\n } else if (options.params.type_result == 'list_checked') {\n $scope.params = options.params.event_id + \"/\" + options.params.event_guests_id;\n } else {\n $scope.params = options.params.event_id + \"/\" + options.params.id;\n }\n //Con rest, podemos concatenar cualquier cosa. Es cuestion de ponerlo en la llamada así:\n // var params = { event_id: $stateParams.id, code: \"EVENT_MENU\", type_document: \"pdf\", type_result: \"list\", id: \"\", rest: \"/\" + menu.id };\n if (angular.isDefined(options.params.rest) && options.params.rest != \"\") $scope.params = $scope.params + options.params.rest;\n });\n\n $scope.onAccept = function (document_id, url) {\n if (optionsValues.code == \"PROPOSAL_GUEST_LIST\") url += \"/\" + $scope.orderPrintModal._sortBy;\n var data = { document_id: document_id, url: url };\n $uibModalInstance.close(data);\n };\n $scope.onError = function (errorMessage) {\n $uibModalInstance.close(errorMessage);\n };\n\n $scope.onConfigure = function ($event, document) {\n $event.preventDefault();\n $event.stopPropagation();\n $log.debug(document);\n\n let $modalInstance = $uibModal.open({\n animation: true,\n template: ReportsPreviewModal,\n controller: 'ReportsPreviewCtrl',\n size: 'lg',\n resolve: {\n document: function () {\n return document;\n },\n /*event: function () {\n return {\n id: options.params.event_id\n };\n }*/\n entity_type: function () { return \"events\" },\n entity_type_id: function () { return options.params.event_id }\n }\n\n });\n $modalInstance.result.then(function (data) {\n let modified = [];\n //añadimos info de parametros\n angular.forEach(data, function (parameter) {\n if(typeof parameter.values !== \"undefined\") {\n parameter.entity_type = \"events\";\n parameter.entity_type_id = $scope.event.id;\n parameter.document_id = document.id;\n modified.push(parameter);\n }\n });\n\n //guardar parametros para el evento en cuestion\n Restangular.all('DocumentsConfig').post(modified).then(function (data) {\n $log.debug(data);\n });\n });\n };\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n }])\n\n;\n","import BreadcrumbView from \"../common/breadcrumb/breadcrumb.html\";\nimport EventsListView from \"./events-list.html\";\nimport EventsMenuView from \"./events-menu.html\";\nimport EventsEditView from \"./events-edit.html\";\nimport GuestsListView from \"./guests/guests-list.html\";\nimport GuestsImportView from \"./guests/import/guests-import.html\";\nimport WorkTeamListView from \"./work_team/work_team-list.html\";\nimport TasksListView from \"./tasks/tasks-list.html\";\nimport StaffListView from \"./staff/staff-list.html\";\nimport ProgramsActsListView from \"./programs_acts/programs_acts-list.html\";\nimport MaterialsListView from \"./materials/materials-list.html\";\nimport ParkingsListView from \"./parkings/parkings-list.html\";\nimport IndicatorsTypesListView from \"./indicators_types/indicators_types-list.html\";\nimport DiaryView from \"./diary/diary.html\";\nimport BudgetListView from \"./budget/budget-list.html\";\nimport SpacesListView from \"./spaces/spaces-list.html\";\nimport ResumeListView from \"./resume/resume-list.html\";\nimport MailAccountsListView from \"./mail_accounts/mail_accounts-list.html\";\nimport InformationsListView from \"../informations/informations-list.html\";\nimport InformationsEditView from \"../informations/informations-edit.html\";\nimport InscriptionsFormsListView from \"../inscriptions_forms/inscriptions_forms-list.html\";\nimport InscriptionsFormsShowInscriptionsView from \"../inscriptions_forms/inscriptions_forms-show_inscriptions.html\";\nimport InscriptionsFormsEditView from \"../inscriptions_forms/inscriptions_forms-edit.html\";\nimport DocumentsListView from \"./documents/documents-list.html\";\nimport DocumentsEditView from \"./documents/documents-edit.html\";\nimport AccreditationsListView from \"./accreditations/accreditations-list.html\";\nimport HistoricMailsListView from \"./historic_mails/historic_mails-list.html\";\nimport NotificationsListView from \"../notifications/notifications-list.html\";\nimport NotificationsEditView from \"../notifications/notifications-edit.html\";\nimport MailingsListView from \"../mailings/mailings-list.html\";\nimport GroupsListView from \"./groups/groups-list.html\";\nimport LocationsEventsListView from \"./locations/locationsEvents-list.html\";\nimport CmsCategoriesEventListView from \"./cms_categories/cms_categories_event-list.html\";\nimport CmsCategoriesEventEditView from \"./cms_categories/cms_categories_event-edit.html\";\nimport CmsArticleEventEditView from \"./cms_categories/cms_categories_event-edit.html\";\nimport CmsArticleEventListView from \"./cms_categories/cms_categories_event-list.html\";\nimport PushNotificationsEventListView from \"./push_notifications/push_notifications_event-list.html\";\nimport PushNotificationsEventEditView from \"./push_notifications/push_notifications_event-edit.html\";\nimport FoldersListView from \"../folders/folders-list.html\";\n\n\nangular.module(\"events\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('events', {\n url: \"/events\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView\n })\n .state('events.list', {\n url: \"/list/:is_template\",\n controller: \"EventsListCtrl\",\n template: EventsListView,\n cache: false,\n onEnter: ['$rootScope', function ($rootScope) {\n $rootScope.is_template = false;\n }]\n })\n .state('menu', {\n url: \"/:id/:is_template\",\n abstract: true,\n cache: false,\n controller: \"EventsMenuCtrl\",\n template: EventsMenuView,\n parent: 'events',\n resolve: {\n event: ['Restangular', '$stateParams', function (Restangular, $stateParams) {\n if (angular.isDefined($stateParams.id) && $stateParams.id != \"\") {\n return Restangular.one('Events', $stateParams.id).get();\n }\n return {};\n }]\n }\n })\n .state('events.edit', {\n url: \"/:menu_item_id\",\n controller: \"EventsEditCtrl\",\n template: EventsEditView,\n parent: 'menu',\n cache: false,\n requiredPermission: [\"EVENTS_READ\"]\n })\n\n .state('events.edit.guests', {\n url: \"/guests/:status/:menu_item_id\",\n controller: \"EventsGuestsListCtrl\",\n template: GuestsListView,\n parent: 'menu',\n cache: false,\n requiredPermission: [\"EVENTS_GUESTS_READ\"]\n })\n .state('events.edit.guests.import', {\n url: \"/guests/import\",\n controller: \"EventsGuestsImportCtrl\",\n template: GuestsImportView,\n parent: 'menu',\n cache: false,\n requiredPermission: [\"EVENTS_GUESTS_READ\"],\n params: {\n people: null,\n menu_item_id: null\n }\n })\n\n .state('events.edit.work_team', {\n url: \"/work_team/:menu_item_id\",\n controller: \"EventsWorkTeamListCtrl\",\n template: WorkTeamListView,\n parent: 'menu',\n cache: false,\n requiredPermission: [\"EVENTS_WORK_TEAM_READ\"]\n })\n .state('events.edit.tasks', {\n url: \"/tasks/:taskId/:menu_item_id\",\n controller: \"EventsTasksListCtrl\",\n template: TasksListView,\n parent: 'menu',\n cache: false,\n requiredPermission: [\"EVENTS_TASKS_READ\"]\n })\n .state('events.edit.staff', {\n url: \"/staff/:staffId/:menu_item_id\",\n controller: \"EventsStaffListCtrl\",\n template: StaffListView,\n parent: 'menu',\n cache: false,\n requiredPermission: [\"EVENTS_STAFF_READ\"]\n })\n .state('events.edit.programs_acts', {\n url: \"/programs_acts/:programActId/:menu_item_id\",\n controller: \"EventsProgramsActsListCtrl\",\n template: ProgramsActsListView,\n parent: 'menu',\n cache: false,\n requiredPermission: [\"EVENTS_PROGRAM_ACT_READ\"]\n })\n .state('events.edit.materials', {\n url: \"/materials/:materialId/:menu_item_id\",\n controller: \"EventsMaterialsListCtrl\",\n template: MaterialsListView,\n parent: 'menu',\n cache: false,\n requiredPermission: [\"EVENTS_MATERIALS_READ\"]\n })\n .state('events.edit.parkings', {\n url: \"/parkings/:menu_item_id\",\n controller: \"EventsParkingsListCtrl\",\n template: ParkingsListView,\n parent: 'menu',\n cache: false,\n requiredPermission: [\"EVENTS_PARKINGS_READ\"]\n })\n .state('events.edit.indicators_types', {\n url: \"/indicators/:menu_item_id\",\n controller: \"EventsIndicatorsListCtrl\",\n template: IndicatorsTypesListView,\n parent: 'menu',\n cache: false,\n requiredPermission: [\"EVENTS_INDICATOR_READ\"]\n })\n .state('events.edit.diary', {\n url: \"/diary/:menu_item_id\",\n controller: \"EventsDiaryCtrl\",\n template: DiaryView,\n parent: 'menu',\n cache: false,\n requiredPermission: [\"EVENTS_DIARY_READ\"]\n })\n .state('events.edit.budget', {\n url: \"/budget/:menu_item_id\",\n controller: \"EventsBudgetListCtrl\",\n template: BudgetListView,\n parent: 'menu',\n cache: false,\n requiredPermission: [\"EVENTS_BUDGET_READ\"]\n })\n\n .state('events.edit.spaces', {\n url: \"/spaces/:menu_item_id\",\n controller: \"EventsSpacesListCtrl\",\n template: SpacesListView,\n parent: 'menu',\n cache: false,\n requiredPermission: [\"EVENTS_SPACE_READ\"]\n })\n\n .state('events.edit.resume', {\n url: \"/resume/:menu_item_id\",\n controller: \"EventsResumeListCtrl\",\n template: ResumeListView,\n parent: 'menu',\n cache: false,\n requiredPermission: [\"RESUME_REPORT_READ\"]\n })\n .state('events.edit.mail_accounts', {\n url: \"/mail_accounts/:menu_item_id\",\n controller: \"EventMailAccountCtrl\",\n template: MailAccountsListView,\n parent: 'menu',\n cache: false,\n requiredPermission: [\"EVENTS_MAIL_ACCOUNT_READ\"]\n })\n\n .state('events.edit.informations', {\n url: \"/informations/:menu_item_id\",\n controller: \"InformationsListCtrl\",\n parent: 'menu',\n template: InformationsListView,\n data: { pageTitle: 'Memoria' },\n cache: false,\n requiredPermission: [\"INFORMATION_READ\"]\n\n })\n\n .state('events.edit.informations.edit', {\n url: \"/informations/edit/:information_id\",\n controller: \"InformationsEditCtrl\",\n template: InformationsEditView,\n parent: 'menu',\n data: { pageTitle: 'Memoria' },\n cache: false,\n requiredPermission: [\"INFORMATION_READ\"]\n })\n\n .state('events.edit.inscriptions_forms', {\n url: \"/inscriptions_forms/:menu_item_id\",\n controller: \"InscriptionsFormsListCtrl\",\n parent: 'menu',\n template: InscriptionsFormsListView,\n cache: false\n })\n\n .state('events.edit.inscriptions_forms.show_inscriptions', {\n url: \"/inscriptions_forms/show_inscriptions/:inscription_form_id\",\n cache: false,\n controller: \"InscriptionsFormsShowInscriptionsCtrl\",\n parent: 'menu',\n template: InscriptionsFormsShowInscriptionsView,\n //requiredPermission: [\"INSCRIPTIONS_FORMS_READ\"]\n })\n .state('events.edit.inscriptions_forms.edit', {\n url: \"/inscriptions_forms/edit/:inscription_form_id\",\n controller: \"InscriptionsFormsEditCtrl\",\n template: InscriptionsFormsEditView,\n parent: 'menu',\n cache: false\n })\n .state('events.edit.documents', {\n url: \"/documents/:menu_item_id\",\n controller: \"EventsDocumentsListCtrl\",\n template: DocumentsListView,\n parent: 'menu',\n cache: false\n })\n .state('events.edit.documents.edit', {\n url: \"/documents/edit/:document_type_id\",\n controller: \"EventsDocumentsEditCtrl\",\n template: DocumentsEditView,\n parent: 'menu',\n cache: false\n })\n .state('events.edit.accreditations', {\n url: \"/accreditations/edit/:document_type_id/:menu_item_id\",\n controller: \"EventsAccreditationsCtrl\",\n template: AccreditationsListView,\n parent: 'menu',\n cache: false,\n requiredPermission: [\"EVENTS_ACCREDITATION_READ\"]\n })\n .state('events.edit.historic_mails', {\n url: \"/historic_mails/:menu_item_id\",\n controller: \"EventsHistoricMailsListCtrl\",\n template: HistoricMailsListView,\n parent: 'menu',\n cache: false,\n requiredPermission: [\"EVENTS_HISTORIC_READ\"]\n })\n\n .state('events.edit.notifications', {\n url: \"/notifications/:menu_item_id\",\n controller: \"NotificationsListCtrl\",\n template: NotificationsListView,\n params: {\n mailing_id: null\n },\n resolve: {\n entity_type: [function () { return \"events\"; }],\n },\n cache: false,\n parent: 'menu',\n data: { pageTitle: 'Notificaciones' },\n requiredPermission: [\"NOTIFICATIONS_READ\"]\n })\n .state('events.edit.notifications.edit', {\n url: \"/notifications/edit/:notificationId\",\n controller: \"NotificationsEditCtrl\",\n template: NotificationsEditView,\n cache: false,\n parent: 'menu',\n data: { pageTitle: 'Notificación' },\n requiredPermission: [\"NOTIFICATIONS_READ\"]\n })\n .state('events.edit.mailings', {\n url: \"/mailings/:menu_item_id\",\n controller: \"MailingsListCtrl\",\n template: MailingsListView,\n resolve: {\n entity_type: [function () { return \"events\"; }],\n },\n cache: false,\n parent: 'menu',\n data: { pageTitle: 'Comunicaciones' },\n requiredPermission: [\"MAILINGS_READ\"]\n })\n .state('events.edit.groups', {\n url: \"/groups/:menu_item_id\",\n controller: \"EventGroupsListCtrl\",\n parent: 'menu',\n template: GroupsListView,\n data: { pageTitle: 'Grupos' },\n cache: false\n })\n .state('events.edit.location', {\n url: \"/locations/:locationId/:menu_item_id\",\n controller: \"LocationsEventsListCtrl\",\n template: LocationsEventsListView,\n parent: 'menu',\n cache: false\n })\n .state('events.edit.cms_categories-list', {\n url: \"/cms_categories/:menu_item_id\",\n controller: \"cmsCategoriesEventsListCtrl\",\n template: CmsCategoriesEventListView,\n parent: 'menu',\n cache: false\n })\n .state('events.edit.cms_categories-edit', {\n url: \"/cms_categories/edit/:category_id\",\n controller: \"cmsCategoriesEventsEditCtrl\",\n template: CmsCategoriesEventEditView,\n parent: 'menu',\n cache: false\n })\n .state('events.edit.cms_article-edit', {\n url: \"/cms_categories/edit/article/:article_id\",\n controller: \"cmsArticlesEventsEditCtrl\",\n template: CmsArticleEventEditView,\n params: {\n 'article_id': \"\",\n 'parent_id': \"\",\n 'standalone': false,\n },\n parent: 'menu',\n cache: false\n })\n .state('events.edit.cms_article-list', {\n url: \"/cms_categories/article-list/:menu_item_id\",\n controller: \"cmsArticlesEventsListCtrl\",\n template: CmsArticleEventListView,\n parent: 'menu',\n cache: false\n })\n .state('events.edit.push_notifications', {\n url: \"/push_notifications/:menu_item_id\",\n controller: \"pushNotificationsEventListCtrl\",\n template: PushNotificationsEventListView,\n parent: \"menu\",\n cache: false\n })\n .state('events.edit.push_notifications.edit', {\n url: \"/edit/:notificationId\",\n controller: \"pushNotificationsEventEditCtrl\",\n template: PushNotificationsEventEditView,\n params: {\n 'notificationId': \"\",\n },\n parent: \"menu\",\n cache: false\n })\n .state('events.edit.folders', {\n url: \"/folders/list/:entity_type/:entity_type_id/:is_public\",\n controller: \"FoldersListCtrl\",\n template: FoldersListView,\n cache: false,\n parent: 'menu',\n data: { pageTitle: 'Carpetas' },\n requiredPermission: [\"FILES_READ\"],\n resolve: {\n entity_type: ['$stateParams', function ($stateParams) {\n if (angular.isDefined($stateParams.entity_type) && $stateParams.entity_type != \"\") {\n return $stateParams.entity_type;\n }\n return null;\n }],\n entity_type_id: ['$stateParams', function ($stateParams) {\n if (angular.isDefined($stateParams.entity_type_id) && $stateParams.entity_type_id != \"\") {\n return $stateParams.entity_type_id;\n }\n return null;\n }],\n is_public: ['$stateParams', function ($stateParams) {\n if (angular.isDefined($stateParams.entity_type_id) && $stateParams.entity_type_id != \"\") {\n return $stateParams.is_public;\n }\n return null;\n }]\n\n },\n })\n\n }])\n;\n","import SearchGroupModalView from \"../guests/searchGroupModal.html\";\n\nimport _ from 'lodash';\n\nangular.module('events')\n\n .controller('EventGroupsListCtrl', ['event', '$scope', '$rootScope', '$uibModal', '$filter', 'Restangular', '$stateParams', '$sce', 'treeService', '$http', function (event, $scope, $rootScope, $uibModal, $filter, Restangular, $stateParams, $sce, treeService, $http) {\n\n var event_id = parseInt($stateParams.id);\n\n $rootScope.title = event.name + \" - \" + $filter('translate')('groups.title');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('events.title'), url: \"events.list\" },\n { title: event.name, url: \"events.edit({ id: \" + event_id + \" })\" },\n { title: $filter('translate')('groups.title') }\n ];\n\n $scope.search = {\n name: \"\",\n hasSearched: false,\n hasFilteredGroups: false,\n groupsNamesArray: [],\n listGroupsIds: [],\n listPositionsIds: []\n }\n\n $scope.getvalueArray = function (item) {\n let result = [];\n for (var i = 0; i < item; i++) {\n result.push(i);\n }\n return result;\n }\n\n $scope.loadData = function () {\n Restangular.all('EventsGroups').customGET(\"GetGroupsByEvent\", { event_id: event_id }).then(function (results) {\n $scope.eventGroup = results;\n $scope.eventGroup.event_id = event_id;\n if ($scope.eventGroup != null && $scope.eventGroup.groupsIds != null && $scope.eventGroup.groupsIds != \"\") {\n $scope.search.listGroupsIds = $.map($scope.eventGroup.groupsIds.split(','), function (value) {\n return parseInt(value, 10);\n });\n }\n if ($scope.eventGroup != null && $scope.eventGroup.positionsIds != null && $scope.eventGroup.positionsIds != \"\") {\n $scope.search.listPositionsIds = $.map($scope.eventGroup.positionsIds.split(','), function (value) {\n return parseInt(value, 10);\n });\n }\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + 'EventsGroups/GetListGroupsByEventAndPositions',\n params: { event_id: event_id }\n }).then(function (resultsGroups, status, headers, config) {\n var data = treeService.groups(resultsGroups.data, null);\n $scope.groups = data;\n\n //Seleccionamos los grupos que ya están añadidos.\n //Habria que borrarlo pero así no aparece el texto....\n angular.forEach(data, function (item) {\n var index = ($scope.search.listGroupsIds != null && typeof ($scope.search.listGroupsIds) !== 'undefined' ? $scope.search.listGroupsIds.indexOf(item.id) : -1);\n\n if (index > -1) {\n item.checked = true;\n item.forceChecked = true;\n }\n\n //comprobamos si tiene alguna posicion seleccionada.\n let seleccionar = false;\n angular.forEach(item.FK_positions_groups, function (position) {\n if (position.selected) seleccionar = true;\n });\n });\n });\n\n\n });\n }\n\n $scope.loadData();\n\n $scope.filterGroups = function () {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: SearchGroupModalView,\n size: \"lg\",\n controller: \"SearchGroupModalCtrl\",\n resolve: {\n preselect: function () {\n return false;\n },\n event_id: function () {\n return event_id;\n },\n is_filter: function () {\n return false;\n },\n listGroupsIds: function () {\n return $scope.search.listGroupsIds;\n },\n listPositionsIds: function () {\n return $scope.search.listPositionsIds;\n }\n }\n });\n\n // Response del modal\n $modalInstance.result.then(function (groups) {\n $scope.search.hasFilteredGroups = groups.ids.length > 0;\n $scope.search.groupsNamesArray = _.chain(groups.groups)\n .filter(function (group) { return _.some(groups.ids, function (id) { return id == group.id; }); }).value();\n\n $scope.eventGroup.groupsIds = _.chain(groups.ids).reduce(function (memo, group) { return (memo == \"\" ? group : memo + \",\" + group); }, \"\").value();\n $scope.search.listGroupsIds = groups.ids;\n $scope.search.listPositionsIds = groups.listPositions;\n $scope.eventGroup.positionsIds = _.chain(groups.listPositions).reduce(function (memo, positionId) { return (memo == \"\" ? positionId : memo + \",\" + positionId); }, \"\").value();//groups.listPositions;\n $scope.save();\n\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n if (!$scope.$$phase) $scope.$apply();\n });\n };\n\n $scope.trustAsHtml = function (string) {\n return $sce.trustAsHtml(string);\n };\n\n $scope.save = function () {\n if (angular.isDefined($scope.eventGroup.id) && $scope.eventGroup.id != null) {\n $scope.eventGroup.put().then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('events.groups.edit_success'));\n $scope.loadData();\n }\n });\n } else {\n var postGroups = { event_id: $stateParams.id, groupsIds: $scope.eventGroup.groupsIds, positionsIds: $scope.eventGroup.positionsIds };\n\n Restangular.all('EventsGroups').post(postGroups).then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('events.groups.add_success'));\n $scope.loadData();\n }\n });\n }\n }\n\n }]);","import AddNewParkingModalView from \"../parkings/addNewParkingModal.html\";\nimport AddNewZoneModalView from \"../guests/addNewZone.html\";\n\nimport _ from 'lodash';\n\n\nangular.module(\"events\")\n\n.controller(\"addNewZoneModalCtrl\", ['$scope', '$uibModalInstance', 'Restangular', '$http', 'modalService', '$filter', 'options', '$stateParams', function ($scope, $uibModalInstance, Restangular, $http, modalService, $filter, options, $stateParams) {\n\n $scope.option = {\n name: \"\",\n parking_id: undefined\n };\n\n $scope.only_one = options.only_one;\n\n if (options.type == 'parking') {\n Restangular.all('EventsParkings').getList({ event_id: $stateParams.id }).then(function (parkings) {\n $scope.selectParkings = parkings;\n if (!$scope.$$phase) $scope.$apply();\n });\n }\n\n $scope.saveOption = function () {\n $uibModalInstance.close($scope.option);\n\n };\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n }])\n\n .controller(\"assignParkingMassiveModalCtrl\", ['$scope', '$uibModalInstance', '$uibModal', 'Restangular', '$http', 'modalService', '$filter', 'options', '$stateParams', 'allow_parking', 'max_vehicles', '$log',\n function ($scope, $uibModalInstance, $uibModal, Restangular, $http, modalService, $filter, options, $stateParams, allow_parking, max_vehicles, $log) {\n\n $scope.options = {\n parking_id: 0,\n allow_parking: allow_parking,\n max_vehicles: max_vehicles\n };\n\n\n $log.debug($scope.option)\n Restangular.all('EventsParkings').getList({ event_id: $stateParams.id }).then(function (parkings) {\n $scope.selectParkings = parkings;\n $scope.selectParkings.push({ id: 0, name: $filter('translate')('events.guests.no_parking') })\n if (!$scope.$$phase) $scope.$apply();\n });\n\n $scope.addNewParking = function () {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: AddNewParkingModalView,\n controller: \"addParkingModalCtrl\",\n size: 'lg',\n resolve: {\n options: {\n event_id: $stateParams.id\n }\n }\n });\n //Response del modal\n $modalInstance.result.then(function (parking) {\n Restangular.all('EventsParkings').post(parking).then(function (result) {\n if (angular.isDefined(result.id)) {\n $scope.selectParkings.push(result);\n $scope.option.parking_id = result.id;\n }\n });\n if (!$scope.$$phase) $scope.$apply();\n });\n }\n\n $scope.saveOption = function () {\n $uibModalInstance.close($scope.options);\n };\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n }])\n\n.controller(\"assignZoneMassiveModalCtrl\", ['$scope', '$uibModalInstance', '$uibModal', 'Restangular', '$http', 'modalService', '$filter', 'options', '$stateParams', function ($scope, $uibModalInstance, $uibModal, Restangular, $http, modalService, $filter, options, $stateParams) {\n\n $scope.option = {\n zone: \"\",\n companions_zone: \"\"\n };\n\n Restangular.all('EventsGuests/GetZoneOptions').getList({ event_id: $stateParams.id }).then(function (results) {\n $scope.selectZones = _.map(results, function (zone) { return { id: zone, name: zone } });\n $scope.selectZones.push({ id: -1, name: $filter('translate')('events.guests.no_zone') })\n if (!$scope.$$phase) $scope.$apply();\n });\n\n $scope.addNewZone = function (type) {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: AddNewZoneModalView,\n size: \"lg\",\n controller: \"addNewZoneModalCtrl\",\n resolve: {\n options: {\n only_one: true\n }\n }\n });\n\n //Response del modal\n $modalInstance.result.then(function (option) {\n $scope.selectZones.push({ id: option.name, name: option.name });\n\n if (type == 'zone') {\n $scope.option.zone = option.name;\n } else if (type == 'companions_zone') {\n $scope.option.companions_zone = option.name;\n }\n\n if (!$scope.$$phase) $scope.$apply();\n });\n }\n\n $scope.saveOption = function () {\n if ($scope.option.zone == null) $scope.option.zone = \"\";\n if ($scope.option.companions_zone == null) $scope.option.companions_zone = \"\";\n $uibModalInstance.close($scope.option);\n };\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n}])\n\n.controller(\"assignCompanionsLimitModalCtrl\", ['$scope', '$uibModalInstance', '$uibModal', 'Restangular', '$http', 'modalService', '$filter', 'options', '$stateParams', function ($scope, $uibModalInstance, $uibModal, Restangular, $http, modalService, $filter, options, $stateParams) {\n\n $scope.options = {\n max_companions_allowed: 0\n };\n $scope.saveOption = function () {\n $uibModalInstance.close($scope.options);\n };\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n}])\n \n.controller(\"assignAccreditationMassiveModalCtrl\", ['$scope', '$uibModalInstance', '$uibModal', 'Restangular', '$http', 'modalService', '$filter', 'options', '$stateParams', '$log',\n function ($scope, $uibModalInstance, $uibModal, Restangular, $http, modalService, $filter, options, $stateParams, $log) {\n\n $scope.option = {\n event_guest_accreditation_id: undefined\n };\n $log.debug(options);\n //Tipo de acreditación del invitado en el evento\n Restangular.all('EventsGuestsAccreditations').getList({ event_id: options.event_id }).then(function (results) {\n $log.debug(results);\n $scope.selectAccreditions = results;\n if (!$scope.$$phase) $scope.$apply();\n });\n $scope.saveOption = function () {\n $uibModalInstance.close($scope.option);\n };\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n}])\n \n.controller(\"assignActsMassiveModalCtrl\", ['event_id', '$scope', '$uibModalInstance', '$uibModal', 'Restangular', '$http', 'modalService', '$filter', '$stateParams', function (event_id, $scope, $uibModalInstance, $uibModal, Restangular, $http, modalService, $filter, $stateParams) {\n\n $scope.eventsProgramsActSelected = [];\n //Tipo de acreditación del invitado en el evento\n //Tiene algun acto especifico para marcar a los invitados.\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + 'EventsProgramsActs/GetEventEspecificActs',\n params: { event_id: event_id }\n }).then(function (results, status, headers, config) {\n $scope.eventsActs = results.data;\n if ($scope.eventsActs.length > 0) {\n $scope.haveEspecificActs = true;\n }\n });\n\n $scope.saveOption = function () {\n $uibModalInstance.close($scope.eventsProgramsActSelected);\n };\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n}])\n\n .controller(\"assignAnnexesModalCtrl\", ['event_id', '$scope', '$uibModalInstance', '$uibModal', 'Restangular', '$http', 'modalService', '$filter', '$stateParams', '$rootScope', function (event_id, $scope, $uibModalInstance, $uibModal, Restangular, $http, modalService, $filter, $stateParams,$rootScope) {\n\n $scope.eventsAnnexesSelected = [];\n\n Restangular.all('EventsAnnexes').getList({ event_id: event_id, is_explicit_annex: true }).then(function (response) {\n $scope.annexes = response;\n angular.forEach($scope.annexes, function (row) {\n row.FK_events_programs_annexes_tl_events_programs_annexes = row.FK_events_programs_annexes_tl_events_programs_annexes.find(element => element.language_id == $rootScope.languageId);\n });\n\n if ($scope.annexes.length > 0) {\n $scope.haveEspecificAnnexes = true;\n }\n });\n\n $scope.saveOption = function () {\n $uibModalInstance.close($scope.eventsAnnexesSelected);\n };\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n }])\n\n ;","angular.module(\"events\")\n\n .controller(\"GuestVehiclesModalCtrl\", ['$scope', '$uibModalInstance', 'event_guest_vehicle', 'event_guest_id', 'Restangular', function ($scope, $uibModalInstance, event_guest_vehicle, event_guest_id, Restangular) {\n\n // Comprobamos si tiene permiso escritura\n $scope.allowWrite = true;\n\n if (angular.isUndefined(event_guest_vehicle)) {\n $scope.guestVehicle = { event_guest_id: event_guest_id };\n\n } else {\n $scope.guestVehicle = event_guest_vehicle;\n }\n\n $scope.saveGuestVehicle = function () {\n\n if ($scope.guestVehicle.id) {\n $scope.guestVehicle.put().then(function (result) {\n $uibModalInstance.close();\n });\n } else {\n Restangular.all('EventsGuestsVehicles').post($scope.guestVehicle).then(function (result) {\n $uibModalInstance.close(result);\n });\n }\n }\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n }])","import Encoding from \"encoding-japanese\";\nimport _ from 'lodash';\n\nimport SearchGuestsModalView from \"./searchGuestsModal.html\";\nimport ConfigGuestModalView from \"./configGuestModal.html\";\nimport SearchGroupModalView from \"./searchGroupModal.html\";\nimport AssignIdentifierModalView from \"./assignIdentifierModal.html\";\nimport AssignZoneModalView from \"./assignZone.html\";\nimport AssignParkingsModalView from \"./assignParkings.html\";\nimport AssignAccreditationModalView from \"./assignAccreditation.html\";\nimport AssignActsModalView from \"./assignActs.html\";\nimport AssignAnnexesModalView from \"./assignAnnexes.html\";\nimport AssignTagsModalView from \"../../tags/AssignTagsModal.html\";\nimport AddNewPersonModalView from \"./addNewPersonModal.html\";\nimport AddNewParkingModalView from \"../parkings/addNewParkingModal.html\";\nimport AddNewZoneModalView from \"./addNewZone.html\";\nimport GuestNotesModalView from \"./guestNotesModal.html\";\nimport GuestSpaceZonesModalView from \"./guestSpaceZonesModal.html\";\nimport GuestVehiclesModalView from \"./guestVehiclesModal.html\";\nimport AssignCompanionsLimitModalView from \"./assignCompanionsLimit.html\";\n\nangular.module(\"events\")\n .directive(\"repeatEnd\", [\"$timeout\", function ($timeout) {\n return {\n restrict: \"A\",\n link: function (scope: angular.IScope, element, attrs) {\n if ((scope as any).$last) {\n $timeout(function () {\n scope.$eval(attrs.repeatEnd);\n });\n }\n }\n };\n }])\n\n .directive(\"focus\", [\"$timeout\", function ($timeout) {\n return {\n scope: {\n trigger: '@focus'\n },\n link: function (scope, element) {\n scope.$watch('trigger', function (value) {\n if (value === \"true\") {\n $timeout(function () {\n const input = element[0] as HTMLInputElement;\n input.focus();\n input.setSelectionRange(0, input.value.length);\n });\n }\n });\n }\n };\n }])\n\n .controller(\"EventsGuestsListCtrl\", ['event', 'notificationService', 'LoginService', '$rootScope', '$scope', 'Restangular', 'gridService', 'modalService', '$uibModal', '$filter', '$translate', '$stateParams', '$state', '$http', '$window', '$sce', 'generateDocumentService', 'datasetsService','eventService', '$log',\n function (event, notificationService, LoginService, $rootScope, $scope, Restangular, gridService, modalService, $uibModal, $filter, $translate, $stateParams, $state, $http, $window, $sce, generateDocumentService, datasetsService, eventService, $log) {\n\n $scope.showAdvanceSearch = false;\n $scope.showComunications = true;\n $scope.showAttachments = false;\n $scope.incidentMessage = false;\n\n //opciones de paginacion\n $scope.paginationOptions = {\n pageSize: 250,\n currentPage: 0,\n numPages: 0,\n total: 0,\n pageStart: 0,\n pageEnd: 0,\n pageArray: []\n };\n\n $scope.search = {\n name: \"\",\n hasSearched: false,\n hasFilteredGroups: false,\n _sortBy: \"name\",\n pigs: [],\n send_status: null,\n accreditions_ids: null,\n parkings_ids: null,\n document_sent_id: null,\n zones: null,\n comunication: \"\",\n attachments: null,\n communicationStatus: \"unsent\",\n //checkIn\n checkInFilter: false,\n checkInArrived: true,\n checkInAnyDate: true,\n checkInDate: event.date_from,\n\n };\n\n $scope.showGroupByGroups = false;\n\n // Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"EVENTS_GUESTS_WRITE\");\n $scope.allowUserRead = LoginService.permissionExist(\"USERS_READ\");\n $scope.allowImport = LoginService.permissionExist(\"PERSONS_IMPORT\");\n\n if (!Array.isArray($scope.$parent.menusItems)) {\n $state.go(\"events.edit\", {id: $stateParams.id});\n } else {\n let results = $scope.$parent.menusItems.filter(m => m.id === parseInt($stateParams.menu_item_id, 10));\n if (results.length > 0) {\n $scope.allowWrite &&= results[0].editable;\n $scope.allowImport &&= results[0].editable;\n } else {\n $scope.allowWrite = false;\n $scope.allowImport = false;\n }\n }\n\n // Traducciones que se repiten mucho\n $scope.send_status_unsent = $filter('translate')('events.guests.send_status_unsent');\n $scope.send_status_print = $filter('translate')('events.guests.send_status_print');\n $scope.send_status_mail = $filter('translate')('events.guests.send_status_mail');\n $scope.send_status_inscription = $filter('translate')('events.guests.send_status_inscription');\n $scope.pending = $filter('translate')('events.guests.pending');\n $scope.parking_pending = $filter('translate')('events.guests.parking_pending');\n $scope.pending_approval = $filter('translate')('events.guests.pending_approval');\n $scope.confirmed = $filter('translate')('events.guests.confirmed');\n $scope.rejected = $filter('translate')('events.guests.rejected');\n $scope.delegated = $filter('translate')('events.guests.delegated');\n $scope.manage_delegate = $filter('translate')('events.guests.manage_delegate');\n $scope.guests_translate = $filter('translate')('events.guests.guests');\n $scope.companion_nominal = $filter('translate')('events.guests.nominals');\n $scope.companion_not_nominal = $filter('translate')('events.guests.not_nominals');\n\n $scope.api_url = (window as any).CONFIG.api_url;\n $rootScope.title = $filter('translate')('events.title') + \" - \" + $filter('translate')('events.guests.guests');\n $rootScope.breadcrumb = [\n {title: $filter('translate')('events.title'), url: \"events.list\"},\n {title: $filter('translate')('events.title'), url: \"events.list\"},\n {title: $filter('translate')('events.guests.guests')}\n ];\n\n $scope.companion = false;\n $scope.addresses = [];\n $scope.guestsId = [];\n $scope.invitedGuests = [];\n $scope.invitedGuestsGroupByGroups = [];\n $scope.checkboxSimpleOptions = [];\n $scope.showParkingColumn = false;\n $scope.totalColumns = 7;\n $scope.documentsForGuests = [];\n $scope.accreditationsList = [];\n $scope.inscription_form_id = 0;\n\n $scope.sendStatusList = [\n {text: $scope.send_status_unsent, value: 'unsent', checked: false},\n {text: $filter('translate')('events.guests.send_status_print'), value: 'print', checked: false},\n {text: $filter('translate')('events.guests.send_status_mail'), value: 'mail', checked: false},\n {\n text: $filter('translate')('events.guests.send_status_inscription'),\n value: 'inscription',\n checked: false\n }\n ];\n\n $scope.confirmationStatusList = [\n {text: $scope.pending, value: 'pending', checked: $stateParams.status === 'pending'},\n {text: $scope.rejected, value: 'rejected', checked: $stateParams.status === 'rejected'},\n {text: $scope.confirmed, value: 'confirmed', checked: $stateParams.status === 'confirmed'},\n {text: $scope.delegated, value: 'delegated', checked: $stateParams.status === 'delegated'},\n {\n text: $scope.pending_approval,\n value: 'pending_approval',\n checked: $stateParams.status === 'pending_approval'\n },\n {\n text: $scope.manage_delegate,\n value: 'manage_delegate',\n checked: $stateParams.status === 'manage_delegate'\n }\n ];\n\n $scope.use_rfid_access_control = event.use_rfid_access_control;\n\n function isDefinedAndNotNull(val) {\n return angular.isDefined(val) && val !== null;\n }\n\n function isDefinedAndNotNullOrEmpty(val) {\n return angular.isDefined(val) && val !== null && val !== \"\";\n }\n\n /// $scope.event = event;\n $rootScope.breadcrumb = [\n {title: $filter('translate')('events.title'), url: \"events.list\"},\n {title: event.name, url: \"events.edit({ id: \" + event.id + \" })\"},\n {title: $filter('translate')('events.guests.guests')}\n ];\n\n $rootScope.title = event.name + \" - \" + $filter('translate')('events.guests.guests');\n let optionsPi = {entity_type: \"persons\"};\n Restangular.all('InformationsGroups').getList(optionsPi).then(function (personsInformationGroups) {\n $scope.personsInformationGroups = personsInformationGroups;\n angular.forEach($scope.personsInformationGroups, function (pig) {\n if (pig.configuration != \"\") pig.configuration = JSON.parse(pig.configuration);\n });\n $scope.checkboxSimpleOptions = [\n {option: null, label: $filter('translate')('informations.all'), checked: true},\n {option: true, label: $filter('translate')('events.staff.yes'), checked: false},\n {option: false, label: $filter('translate')('events.staff.no'), checked: false}\n ];\n });\n\n //obtenemos el identificador del inscription_form. (ahora sólo hay uno, hay que comprobar que pasa si hay más de uno)\n var params = {\n event_id: $stateParams.id\n };\n\n Restangular.all(\"InscriptionsForms\").customGET(\"CustomGetInscriptionFromEvent\", params).then(function (results) {\n $scope.inscription_form_id = results;\n });\n\n $scope.togleIncidents = function () {\n $scope.auxShowIncidents = $scope.showIncidents;\n };\n\n $scope.app_enabled = false;\n\n Restangular.one('Companies', $rootScope.company_id).get().then(function (results) {\n $scope.app_enabled = results.public_guest_app_enabled;\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n\n //Tipo de acreditación del invitado en el evento\n Restangular.all('EventsGuestsAccreditations').getList({event_id: params.event_id}).then(function (results) {\n $scope.accreditationsList = results;\n $scope.accreditationsList.push({id: 0, name: $filter('translate')('events.guests.no_accreditation')});\n });\n\n //Parkings del evento\n Restangular.all('EventsParkings').getList({event_id: params.event_id}).then(function (results) {\n if (results.totalRows > 0) {\n $scope.parkingsList = results;\n $scope.parkingsList.push({id: 0, name: $filter('translate')('events.guests.no_parking')});\n $scope.showParkingColumn = true;\n $scope.totalColumns = 8;\n }\n });\n\n //zonas\n Restangular.all('EventsGuests/GetZoneOptions').getList({event_id: params.event_id}).then(function (results) {\n $scope.zonesList = _.map(results, function (zone) {\n return {id: zone, name: zone}\n });\n $scope.zonesList.push({id: 'no_zone', name: $filter('translate')('events.guests.no_zone')});\n if (!$scope.$$phase) $scope.$apply();\n });\n\n // Documentos que se han podido enviar\n Restangular.all('Documents/UsedInEvent').getList({event_id: params.event_id}).then(function (results) {\n $scope.documentsForGuests = results;\n });\n\n Restangular.all('EventsGuests/GetNamesComunications').getList({event_id: params.event_id}).then(function (results) {\n $scope.selectComunications = results;\n // $scope.selectComunications.push($filter('translate')('events.guests.no_comunication'));\n });\n\n $scope.selectAttachment = [\n {key: \"att_parking_mail\", text: $filter('translate')('events.guests.no_att_parking_mail')},\n {key: \"att_menu_mail\", text: $filter('translate')('events.guests.no_att_menu_mail')},\n {key: \"att_acreditation\", text: $filter('translate')('events.guests.no_att_acreditation')},\n {key: \"att_program\", text: $filter('translate')('events.guests.no_att_program')},\n {key: \"att_send_status\", text: $filter('translate')('events.guests.no_att_send_status')}\n ];\n\n //invertir color\n\n /* FILTROS */\n $scope.showIncidents = false;\n $scope.guestReferred = false;\n $scope.guestInformation = false;\n\n $scope.searchGuests = function () {\n $scope.paginationOptions.currentPage = 0;\n $scope.loadGuests();\n };\n\n $scope.loadGroups = function () {\n Restangular.all('Groups').getList().then(function (results) {\n $scope.groups = results;\n });\n };\n\n /*\n * Cargo datos.\n */\n $scope.loadGuests = function () {\n $scope.search.hasSearched = true;\n let options: any = {\n _pageSize: $scope.paginationOptions.pageSize,\n _page: $scope.paginationOptions.currentPage,\n event_id: $stateParams.id\n };\n\n // Comprobamos si hay incidencias o no\n Restangular.one('EventsGuests/ExistsIncidencesInPositions').get({event_id: params.event_id}).then(function (res) {\n $scope.incidentMessage = res;\n });\n\n options.confirmation_status = _.chain($scope.confirmationStatusList)\n .filter(function (status) {\n return status.checked;\n })\n .map(function (status) {\n return status.value;\n })\n .value();\n\n if (typeof ($scope.search.send_status) !== \"undefined\" && $scope.search.send_status != null) options.send_status = [$scope.search.send_status];\n if (typeof ($scope.search.accreditions_ids) !== \"undefined\" && $scope.search.accreditions_ids != null) options.accreditions_ids = [$scope.search.accreditions_ids];\n if (typeof ($scope.search.parkings_ids) !== \"undefined\" && $scope.search.parkings_ids != null) options.parkings_ids = [$scope.search.parkings_ids];\n if (typeof ($scope.search.zones) !== \"undefined\" && $scope.search.zones != null) options.zones = [$scope.search.zones];\n if (typeof ($scope.search.document_sent_id) !== \"undefined\" && $scope.search.document_sent_id != null) options.document_sent_id = [$scope.search.document_sent_id];\n\n options.incidents = $scope.showIncidents;\n options.deferred = $scope.guestReferred;\n options.name = $scope.search.name;\n options.groups_ids = $scope.search.groups;\n options.comunication = $scope.search.comunication;\n options.communicationStatus = $scope.search.communicationStatus;\n\n // check in \n if ($scope.search.checkInFilter == true) {\n options.checkInArrived = $scope.search.checkInArrived;\n if ($scope.search.checkInAnyDate != true && typeof ($scope.search.checkInDate) !== \"undefined\" && $scope.search.checkInDate != null) options.checkInDate = $scope.search.checkInDate;\n }\n\n if (typeof ($scope.search.attachment) !== \"undefined\") {\n var cont = 0;\n angular.forEach($scope.search.attachment, function (item) {\n cont = cont + 1;\n if (cont == 1) {\n options.attachment = item;\n }\n });\n };\n\n options.institution = $scope.search.institution;\n\n var pigs = \"\";\n for (var key in $scope.search.pigs) {\n if (typeof $scope.search.pigs[key] != \"undefined\" && $scope.search.pigs[key] != \"\") {\n if (typeof ($scope.search.pigs[key]) == \"object\") {\n //estamos en el selector simple.\n //if ($scope.search.pigs[key].checked != \"\") pigs += (pigs != \"\" ? \"#\" : \"\") + key + \"=>\" + $scope.search.pigs[key].checked;\n var infoFilter = $scope.personsInformationGroups.filter(function (el) {\n return el.id == key;\n });\n if (infoFilter.length == 1) {\n if (infoFilter[0].type == \"datetime\") {\n if ($scope.search.pigs[key] != null) pigs += (pigs != \"\" ? \"#\" : \"\") + key + \"=>\" + new Date($scope.search.pigs[key]).toISOString();\n } else if (infoFilter[0].type == \"checkboxSimple\") {\n if ($scope.search.pigs[key].checked != \"\") pigs += (pigs != \"\" ? \"#\" : \"\") + key + \"=>\" + $scope.search.pigs[key].checked;\n } else {\n pigs += (pigs != \"\" ? \"#\" : \"\") + key + \"=>\" + $scope.search.pigs[key];\n }\n }\n } else {\n pigs += (pigs != \"\" ? \"#\" : \"\") + key + \"=>\" + $scope.search.pigs[key];\n }\n }\n }\n\n options.pigs = pigs;\n\n options.positions_ids = $scope.search.positions;\n options._sortBy = $scope.search._sortBy;\n if (options._sortBy == 'group') {\n $scope.showGroupByGroups = true;\n options._pageSize = 5000;\n $scope.paginationOptions.pageSize = 5000;\n } else {\n $scope.showGroupByGroups = false;\n }\n\n // Cuando la busqueda sea por nombre, no vamos a poner paginacion, asi busca por todos los invitados, tanto acompañantes como delegados\n if (options.name != null && options.name != \"\") {\n options._pageSize = null;\n options._page = null;\n $scope.paginationOptions.pageSize = 5000;\n }\n if (options.confirmation_status != null && options.confirmation_status.length > 0) {\n options._pageSize = null;\n options._page = null;\n $scope.paginationOptions.pageSize = 5000;\n }\n Restangular.all('EventsGuests').getList(options).then(function (guests) {\n $scope.invitedGuests = guests;\n $scope.items = new Array();\n var items = new Array();\n if ($scope.showGroupByGroups) {\n //cargamos grupos\n Restangular.all('Groups').getList().then(function (results) {\n //sacamos grupos que es necesario pintar\n var groupsIds = new Array();\n angular.forEach(guests, function (guest) {\n if (groupsIds.indexOf(guest.group_id) < 0) groupsIds.push(guest.group_id);\n });\n\n //generamos lista de grupos\n function addParentGroup(allGroups, groups, group) {\n if (group.FK_groups_groups_groups1 != null && group.FK_groups_groups_groups1.length > 0) {\n //Tiene algun padre.\n if (group.FK_groups_groups_groups1[0].parent_group_id != null) {\n var parent = $filter('filter')(allGroups, {id: group.FK_groups_groups_groups1[0].parent_group_id}, true)[0];\n //tenemos al padre.\n addParentGroup(results, groups, parent);\n\n //comprobamos si existe ya, para no añadirlo varias veces\n var foundGroups = $filter('filter')(groups, {id: parent.id}, true);\n if (foundGroups.length == 0) {\n groups.push(parent);\n }\n }\n }\n }\n\n var groups = new Array();\n angular.forEach(results, function (group) {\n if (groupsIds.indexOf(group.id) >= 0) {\n\n //buscamos padres y los añadimos\n addParentGroup(results, groups, group);\n\n //añadimos actual\n groups.push(group);\n\n }\n });\n\n $scope.groups = groups;\n\n var level = 0;\n var pushedGroups = new Array();\n angular.forEach(groups, function (group) {\n\n if (group.FK_groups_groups_groups1 == null || group.FK_groups_groups_groups1.length == 0) {\n //No tiene padre\n level = 0;\n } else {\n //si el padre ya ha salido, pasamo level al del padre + 1\n var parentPushed = $filter('filter')(pushedGroups, {id: group.FK_groups_groups_groups1[0].parent_group_id}, true);\n if (parentPushed.length > 0) {\n level = parentPushed[0].level + 1;\n }\n }\n\n //añadimos grupo a lista final\n group.text_color = invertColor(group.color);\n group.type = \"group\";\n group.level = level;\n items.push(group);\n\n //añadimos invitados del grupo\n var groupGuests = $filter('filter')(guests, {\n group_id: group.id,\n referrer_person_id: null\n }, true);\n angular.forEach(groupGuests, function (guest) {\n guest.type = \"guest\";\n guest.level = level;\n items.push(guest);\n\n //los acompañantes de este se inluyen seguidamente\n var companions = $filter('filter')(guests, {referrer_person_id: guest.person_id}, true);\n angular.forEach(companions, function (companion) {\n companion.type = \"guest\";\n companion.level = level + 1;\n items.push(companion);\n });\n });\n\n pushedGroups.push(group);\n\n level++;\n });\n $scope.items = items;\n });\n\n } else {\n //Si la opcion de busqueda del nombre no esta vacia, buscaremos en todos los niveles, sin identificar si es acompañante o delegado en\n if (options[\"name\"] != \"\" || options[\"confirmation_status\"] != \"\") {\n $scope.items = guests;\n $scope.items.forEach(function (row) {\n if (row.referred_in != null) {\n row.referred_in = row.referred_in.replace('
', ' ');\n }\n\n row.type = \"guest\";\n row.level = 0;\n //Obtener el número real de acompañantes de un invitado\n var companions = $filter('filter')(guests, {referrer_person_id: row.person_id}, true);\n row.tot_companions = companions.length;\n if (row.num_companions > companions.length) {\n row.tot_companions_not_nominal = row.num_companions - companions.length;\n }\n items.push(row);\n $scope.namesColumnMailings = row.namesColumnMailings;\n })\n $scope.searchByName = true;\n } else {\n //añadimos invitados\n var principalGuests = null;\n if (typeof (options.attachment) == 'undefined' && ((options.comunication == '' || options.comunication == null))) {\n principalGuests = $filter('filter')(guests, {referrer_person_id: null}, true);\n } else {\n principalGuests = guests;\n }\n angular.forEach(principalGuests, function (guest) {\n guest.type = \"guest\";\n guest.level = 0;\n //Obtener el número real de acompañantes de un invitado\n var companions = $filter('filter')(guests, {referrer_person_id: guest.person_id}, true);\n guest.tot_companions = companions.length;\n if (guest.num_companions > companions.length) {\n guest.tot_companions_not_nominal = guest.num_companions - companions.length;\n }\n if (guest.referred_in != null) {\n guest.referred_in = guest.referred_in.replace('
', ' ');\n }\n\n items.push(guest);\n\n if (typeof (options.attachment) == 'undefined' && ((options.comunication == '' || options.comunication == null))) {\n angular.forEach(companions, function (companion) {\n companion.type = \"guest\";\n companion.level = 1;\n var g_companions = $filter('filter')(guests, {referrer_person_id: companion.person_id}, true);\n companion.tot_companions = g_companions.length;\n if (companion.num_companions > g_companions.length) {\n companion.tot_companions_not_nominal = companion.num_companions - g_companions.length;\n }\n if (companion.referred_in != null) {\n companion.referred_in = companion.referred_in.replace('
', ' ');\n }\n items.push(companion);\n if (companion.tot_companions > 0 && companion.referred_option == \"delegated\") {\n angular.forEach(g_companions, function (companion_sub) {\n companion_sub.type = \"guest\";\n companion_sub.level = 1;\n if (companion_sub.referred_in != null) {\n companion_sub.referred_in = companion_sub.referred_in.replace('
', ' ');\n }\n items.push(companion_sub);\n });\n }\n });\n }\n\n $scope.namesColumnMailings = guest.namesColumnMailings;\n\n });\n\n $scope.items = items;\n\n }\n }\n\n //Paginacion\n $scope.paginationOptions.total = guests.totalRows;\n $scope.paginationOptions.numPages = Math.ceil($scope.paginationOptions.total / $scope.paginationOptions.pageSize);\n $scope.paginationOptions.pageArray = _.range(parseInt($scope.paginationOptions.numPages));\n\n if ($scope.paginationOptions.currentPage >= $scope.paginationOptions.numPages) {\n $scope.paginationOptions.currentPage = $scope.paginationOptions.numPages;\n }\n $scope.paginationOptions.pageStart = ($scope.paginationOptions.currentPage * $scope.paginationOptions.pageSize) + 1;\n $scope.paginationOptions.pageEnd = ($scope.paginationOptions.currentPage * $scope.paginationOptions.pageSize) + guests.length;\n if ($scope.paginationOptions.pageStart > $scope.paginationOptions.total) $scope.paginationOptions.pageStart = 0;\n\n if (!$scope.$$phase) {\n $scope.$apply();\n }\n\n });\n };\n\n $scope.clearform = function () {\n $scope.search = {\n name: \"\",\n hasSearched: false,\n hasFilteredGroups: false,\n _sortBy: \"name\",\n pigs: [],\n send_status: null,\n accreditions_ids: null,\n parkings_ids: null,\n document_sent_id: null,\n zones: null,\n comunication: \"\",\n attachments: null,\n communicationStatus: \"unsent\",\n //checkIn\n checkInFilter: false,\n checkInArrived: true,\n checkInAnyDate: true,\n checkInDate: event.date_from,\n\n };\n $scope.paginationOptions = {\n pageSize: 250,\n currentPage: 0,\n numPages: 0,\n total: 0,\n pageStart: 0,\n pageEnd: 0,\n pageArray: []\n };\n $scope.showIncidents = false;\n $scope.loadGuests();\n }\n\n $scope.changePage = function (page) {\n $(\"html, body\").animate({scrollTop: $('#divGuestList').offset().top}, 300);\n $scope.paginationOptions.currentPage = page;\n $scope.loadGuests();\n };\n\n $scope.checkAll = function (selectedAll) {\n _.each($scope.invitedGuests, function (guest) {\n guest.value = selectedAll ? guest.id : \"\";\n });\n };\n\n /* Sección guests_events */\n $scope.saveEventGuests = function () {\n $scope.eventGuestsContainer = {};\n $scope.eventGuestsContainer.event_id = $stateParams.id;\n $scope.eventGuestsContainer.events_guests = $scope.invitedGuests;\n\n Restangular.all('EventsGuests').post($scope.eventGuestsContainer).then(function (result) {\n toastr.success($filter('translate')('events.edit_success'));\n $state.go(\"events\", {id: $stateParams.id});\n });\n };\n\n $scope.searchMasiveDialog = function () {\n\n let $modalInstance = $uibModal.open({\n animation: true,\n template: SearchGuestsModalView,\n size: \"lg\",\n controller: \"SearchGuestsModalCtrl\",\n scope: $scope,\n resolve: {\n options: function () {\n return {};\n }\n }\n });\n //Response del modal\n $modalInstance.result.then(function (data) {\n $scope.loadGuests();\n if (!$scope.$$phase) $scope.$apply();\n $scope.$parent.loadInfo($stateParams.id);\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n if (!$scope.$$phase) $scope.$apply();\n });\n\n }; //addPersonsPositionDialog\n\n $scope.deleteDialog = function (id, name, surname, send_status) {\n let allName = name + \" \" + surname;\n\n var message = $filter('translate')('events.guests.delete_confirmation') + \" \" + allName + \"?\";\n if (send_status !== 'unsent') {\n message = $filter('translate')('events.guests.invitation_already_sent') + \" (\" + $filter('translate')('events.guests.send_status_' + send_status) + \").
\" + message;\n }\n\n $scope.id = id;\n modalService.confirm({\n title: $filter('translate')('events.guests.delete'),\n message: message,\n onAccept: function () {\n Restangular.one('EventsGuests', id).remove().then(function () {\n $scope.loadGuests();\n toastr.success($filter('translate')('events.guests.delete_ok'));\n $scope.$parent.loadInfo($stateParams.id);\n }, function (response) {\n alert(\"Error al borrar\")\n });\n }\n });\n };\n\n /**\n * Popup de configuracion del invitado.\n * @param {guest} item - The guest.\n **/\n $scope.configDialog = function (item) {\n let $modalInstance = null;\n if ($rootScope.sizeLg) {\n $modalInstance = $uibModal.open({\n animation: true,\n template: ConfigGuestModalView,\n size: \"lg-extra\",\n controller: \"ConfigGuestsModalCtrl\",\n resolve: {\n item: function () {\n return item;\n },\n event: function () {\n return event;\n }\n }\n });\n } else {\n $modalInstance = $uibModal.open({\n animation: true,\n template: ConfigGuestModalView,\n controller: \"ConfigGuestsModalCtrl\",\n resolve: {\n item: function () {\n return item;\n },\n event: function () {\n return event;\n }\n }\n });\n }\n\n //Response del modal\n $modalInstance.result.then(function (data) {\n $scope.showIncidents = false;\n $scope.loadGuests();\n $scope.$parent.loadInfo($stateParams.id); //recalculamos\n if (!$scope.$$phase) $scope.$apply();\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n if (!$scope.$$phase) $scope.$apply();\n });\n }; //End configdialog\n\n let loadDocuments = function () {\n var optionsValues = {\n codes: [\"GUEST_LIST\", \"PROPOSAL_GUEST_LIST\", \"PROGRAM_ACTS\", \"GUEST_ACCREDITATION\", \"GUEST_LIST_ADDRESSES\", \"GUEST_PARKING\", \"INVITATION\", \"SEATING\", \"CERTIFICATES\", \"PROTOCOL_NOTES\", \"EVENT_MENU\"]\n };\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + 'Documents/GetDocumentsByDocumentsType',\n params: optionsValues\n }).then(function (results, status, headers, config) {\n $scope.documentsTypesSpecifics = results.data.rows.map(function (item) {\n return {\n code: item.FK_documents_documents_types.code,\n name: item.FK_documents_documents_types.name,\n icon: item.FK_documents_documents_types.icon\n }\n }).filter(function (x, i, a) {\n return a.findIndex(m => m.code === x.code) == i;\n });\n });\n };\n\n loadDocuments();\n\n let generateDocumentPopup = function (code, event_guests_id) {\n var params = {\n entity_type: \"events\",\n entity_type_id: $stateParams.id,\n event_guests_id: event_guests_id,\n mail_account_id: event.mail_account_id,\n mail_account_reply: event.reply_to,\n documents: {codes: code}\n };\n generateDocumentService.documentNew({\n params: params,\n onAccept: function (data) {\n angular.forEach(data, function (item) {\n $http({\n method: 'post',\n url: (window as any).CONFIG.api_url + 'documentgenerator/Generate',\n params: {\n document_id: item.document_id,\n event_id: $stateParams.id,\n event_guests_id: event_guests_id.toString(),\n order: item.url_params,\n outputType: 'pdf',\n type: item.type\n }\n }).then(function (result, status, headers, config) {\n var url = (window as any).CONFIG.api_url + 'documentgenerator/download/' + result.data;\n window.open(url, '_blank');\n });\n })\n }\n });\n };\n\n $scope.newPrintDialog = function (code) {\n let event_guests_id = [];\n //miramos si dependiendo del codigo debe o no seleccionar personas.\n var type_result = \"list_checked\";\n if (code === \"PROPOSAL_GUEST_LIST\" || code === \"GUEST_LIST\") type_result = \"\";\n\n if (type_result === \"list_checked\") {\n var guests = _.chain($scope.invitedGuests)\n .filter(function (option) {\n return angular.isDefined(option.value) && option.value != \"\";\n })\n .value();\n\n if (guests.length === 0) {\n modalService.message({\n title: \"Error\",\n message: $filter('translate')('events.guests.select_persons'),\n onAccept: function () {\n }\n });\n } else {\n if (code == \"PROGRAM_ACTS\" && guests.length > 1) {\n modalService.message({\n title: \"Error\",\n message: $filter('translate')('events.guests.max_guests_selection'),\n onAccept: function () {\n }\n });\n } else {\n event_guests_id = _.map(guests, function (guest) {\n return guest.id;\n });\n\n if (code == \"GUEST_ACCREDITATION\" || code == \"INVITATION\" || code == \"GUEST_PARKING\" || code == \"GUEST_LIST_ADDRESSES\") {\n //preguntar si le cambia al invitado el estado de envio de las partes que sean.\n var message = $filter('translate')('events.guests.mark_as_sent_invitation');\n if (code == \"GUEST_PARKING\") message = $filter('translate')('events.guests.mark_as_sent_parking');\n if (code == \"GUEST_ACCREDITATION\") message = $filter('translate')('events.guests.mark_as_sent_accreditation')\n modalService.confirm({\n title: \"\",\n message: message,\n onAccept: function () {\n generateDocumentPopup(code, event_guests_id); //Popup de documentación\n\n //1) Se actualiza el estado de envio.\n var url = \"ChangeStatus\";\n if (code == \"GUEST_PARKING\") url = \"ChangeStatusParking\";\n if (code == \"GUEST_ACCREDITATION\") url = \"ChangeStatusAccreditation\";\n var params = {event_guests_id: event_guests_id, send_status: \"print\"};\n $http({\n method: 'post',\n url: (window as any).CONFIG.api_url + 'EventsGuests/' + url,\n params: params\n }).then(function (results, status, headers, config) {\n $scope.loadGuests();\n });\n },\n onCancel: function () {\n generateDocumentPopup(code, event_guests_id);\n }\n });\n\n } else {\n generateDocumentPopup(code, event_guests_id);\n }\n }\n }\n } else {\n generateDocumentPopup(code, []);\n }\n }\n\n $scope.printCSV = function () {\n window.open((window as any).CONFIG.api_url + 'documentgenerator/GetCsvGuests/' + $stateParams.id, '_blank');\n };\n\n $scope.searchGroup = function () {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: SearchGroupModalView,\n size: \"lg\",\n controller: \"SearchGroupModalCtrl\",\n resolve: {\n preselect: function () {\n return true; //para preseleccionar los grupos ya buscados\n },\n event_id: function () {\n return $stateParams.id;\n },\n is_filter: function () {\n return false;\n },\n listGroupsIds: function () {\n return [];\n },\n listPositionsIds: function () {\n return [];\n }\n }\n });\n\n //Response del modal\n $modalInstance.result.then(function (groups) {\n var postGroups = { event_id: $stateParams.id, list: null, listPositions: groups.listPositions };\n\n if (typeof (groups) != 'undefined' && groups != null && groups.listPositions.length > 0) {\n\n //Peticion al api para que me devuelva las personas que estan en esos grupos.\n Restangular.all('EventsGuests/AddGuestFromGroups').post(postGroups).then(function (success) {\n $scope.loadGuests();\n });\n }\n\n $scope.loadGuests();\n\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n if (!$scope.$$phase) $scope.$apply();\n });\n };\n\n $scope.getContrastYIQ = function (hexcolor) {\n if (hexcolor != null) {\n if (hexcolor[0] === \"#\") {\n hexcolor = hexcolor.substring(1, hexcolor.length);\n }\n var r = parseInt(hexcolor.substr(0, 2), 16);\n var g = parseInt(hexcolor.substr(2, 2), 16);\n var b = parseInt(hexcolor.substr(4, 2), 16);\n var yiq = ((r * 299) + (g * 587) + (b * 114)) / 1000;\n return (yiq >= 128) ? {color: '#000000'} : {color: '#FFFFFF'};\n } else {\n return \"\";\n }\n };\n\n $scope.assignIdentifier = function (event_guest, index) {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: AssignIdentifierModalView,\n size: \"md\",\n controller: \"AssignIdentifierModalCtrl\",\n resolve: {\n event_guest: function () {\n return event_guest;\n }\n }\n });\n\n //Response del modal\n $modalInstance.result.then(function (data) {\n\n Restangular.all(\"EventsGuests\").customPOST({}, \"CustomSaveIdentifier\", data).then(function (results) {\n\n if (results != true) {\n\n modalService.confirm({\n title: $filter('translate')('events.guests.warning'),\n message: $filter('translate')('events.guests.identifier_already_used') + \"?\",\n onAccept: function () {\n data.forceSaved = true;\n Restangular.all(\"EventsGuests\").customPOST({}, \"CustomSaveIdentifier\", data).then(function (results) {\n\n\n toastr.success($filter('translate')('events.guests.identifier_saved'));\n event_guest.identify_id = 0;\n //$scope.invitedGuests[index] = event_guest;\n\n if (!$scope.$$phase) $scope.$apply();\n\n });\n\n }\n });\n } else {\n event_guest.identify_id = 0;\n //$scope.invitedGuests[index] = event_guest;\n $scope.$parent.loadInfo($stateParams.id); //recalculamos*/\n if (!$scope.$$phase) $scope.$apply();\n }\n });\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n if (!$scope.$$phase) $scope.$apply();\n });\n };\n\n $scope.sendProgram = function (code) {\n var personIds = _.chain($scope.invitedGuests)\n .filter(function (guest) {\n return angular.isDefined(guest.value) && guest.value != \"\";\n })\n .map(function (guest) {\n return guest.person_id;\n })\n .value();\n if (personIds.length === 0) {\n modalService.message({\n title: \"Error\",\n message: $filter('translate')('events.select_program_persons'),\n onAccept: function () {\n }\n });\n } else if (event.mail_account_id === null || event.mail_account_id === 0) {\n modalService.message({\n title: \"Error\",\n message: $filter('translate')('events.select_mail_from_address'),\n onAccept: function () {\n }\n });\n } else {\n modalService.confirm({\n title: $filter('translate')('events.guests.warning'),\n message: $filter('translate')('events.guests.program_send_mail'),\n onAccept: function () {\n let params: any = {\n event_id: $stateParams.id,\n code: code,\n type_document: 'pdf',\n type_result: 'list',\n id: \"\",\n event_guests_id: \"\"\n };\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + 'EventsGuests/GetProgramInfo',\n params: {event_id: $stateParams.id}\n }).success(function (results, status, headers, config) {\n if (results) {\n params = {person_ids: personIds, event_id: $stateParams.id};\n $http({\n method: 'post',\n url: (window as any).CONFIG.api_url + 'EventsGuests/SendProgram',\n params: params\n }).success(function (results, status, headers, config) {\n if (results.success) {\n toastr.success($filter('translate')('events.work_team.email_sent_success'));\n } else {\n modalService.message({\n title: $filter('translate')('events.guests.fail_send_email'),\n message: results.message,\n onAccept: function () {\n }\n });\n }\n\n });\n } else {\n //Primero comprobamos si existe algo en el programa:\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + 'EventsGuests/ProgramExist',\n params: {event_id: $stateParams.id}\n }).success(function (resultsProgramExist, status, headers, config) {\n if (resultsProgramExist) {\n var paramsNew = {\n entity_type: \"events\",\n entity_type_id: $stateParams.id,\n documents: {codes: code}\n };\n generateDocumentService.documentNew({\n params: paramsNew,\n onAccept: function (data) {\n params = {\n person_ids: personIds,\n event_id: $stateParams.id,\n document_id: data.document_id\n };\n $http({\n method: 'post',\n url: (window as any).CONFIG.api_url + 'EventsGuests/SendProgram',\n params: params\n }).success(function (results, status, headers, config) {\n if (results.success) {\n toastr.success($filter('translate')('events.work_team.email_sent_success'));\n } else {\n modalService.message({\n title: $filter('translate')('events.guests.fail_send_email'),\n message: results.message,\n onAccept: function () {\n }\n });\n }\n });\n },\n onError: function (response) {\n let errorMessage = response.message;\n toastr.error(errorMessage);\n }\n });\n } else {\n modalService.message({\n title: $filter('translate')('events.guests.not_program_defined_title'),\n message: $filter('translate')('events.guests.not_program_defined'),\n onAccept: function () {\n }\n });\n }\n\n });\n }\n });\n }\n });\n }\n };\n\n /**\n * ACCIONES\n **/\n $scope.AssociateZone = function () {\n var guestsIds = _.chain($scope.invitedGuests)\n .filter(function (option) {\n return angular.isDefined(option.value) && option.value != \"\";\n })\n .map(function (option) {\n return option.value;\n })\n .value();\n if (guestsIds.length == 0) {\n modalService.message({\n title: \"Error\",\n message: $filter('translate')('events.guests.select_persons'),\n onAccept: function () {\n }\n });\n } else {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: AssignZoneModalView,\n size: \"lg\",\n controller: \"assignZoneMassiveModalCtrl\",\n resolve: {\n options: {\n only_one: false\n }\n }\n });\n //Response del modal\n $modalInstance.result.then(function (option) {\n var params = {\n event_guests_ids: guestsIds,\n zone: option.zone,\n companions_zone: option.companions_zone\n };\n\n $http({\n method: 'post',\n url: (window as any).CONFIG.api_url + 'EventsGuests/SetMassiveZones',\n params: params\n }).then(function (results, status, headers, config) {\n toastr.success($filter('translate')('events.guests.action_success'));\n $scope.searchGuests();\n });\n });\n }\n };\n\n $scope.AssociateParking = function (type) {\n var guestsIds = _.chain($scope.invitedGuests)\n .filter(function (option) {\n return angular.isDefined(option.value) && option.value != \"\";\n })\n .map(function (option) {\n return option.value;\n })\n .value();\n if (guestsIds.length == 0) {\n modalService.message({\n title: \"Error\",\n message: $filter('translate')('events.guests.select_persons'),\n onAccept: function () {\n }\n });\n } else {\n\n let $modalInstance = $uibModal.open({\n animation: true,\n template: AssignParkingsModalView,\n size: \"lg\",\n controller: \"assignParkingMassiveModalCtrl\",\n resolve: {\n options: {},\n allow_parking: function () {\n return event.allow_parking;\n },\n max_vehicles: function () {\n return event.default_vehicle_limit;\n }\n }\n });\n\n // Response del modal\n $modalInstance.result.then(function (options) {\n Restangular.all(\"EventsGuests\").customPOST(guestsIds, \"SetMassiveParkings\", { value: options.parking_id, allow_parking: options.allow_parking, max_vehicles: options.max_vehicles }).then(function (results) {\n toastr.success($filter('translate')('events.guests.action_success'));\n $scope.loadGuests();\n })\n\n });\n \n }\n };\n\n $scope.massiveAsignmentAccreditation = function (type) {\n var guestsIds = _.chain($scope.invitedGuests)\n .filter(function (option) {\n return angular.isDefined(option.value) && option.value != \"\";\n })\n .map(function (option) {\n return option.value;\n })\n .value();\n if (guestsIds.length == 0) {\n modalService.message({\n title: \"Error\",\n message: $filter('translate')('events.guests.select_persons'),\n onAccept: function () {\n }\n });\n } else {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: AssignAccreditationModalView,\n // size: \"lg\",\n controller: \"assignAccreditationMassiveModalCtrl\",\n resolve: {\n options: function () {\n return {\n event_id: event.id\n }\n }\n }\n });\n //Response del modal\n $modalInstance.result.then(function (option) {\n\n var params = {event_guests_ids: guestsIds, value: option.event_guest_accreditation_id};\n $http({\n method: 'post',\n url: (window as any).CONFIG.api_url + 'EventsGuests/SetMassiveAccreditions',\n params: params\n }).then(function (results, status, headers, config) {\n toastr.success($filter('translate')('events.guests.action_success'));\n //actualizamos datos de invitados\n angular.forEach($scope.invitedGuests, function (guest) {\n if (guestsIds.indexOf(guest.id) >= 0) {\n guest.event_guest_accreditation_id = option.event_guest_accreditation_id;\n }\n });\n $scope.loadGuests();\n });\n });\n }\n };\n\n $scope.filterGroups = function () {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: SearchGroupModalView,\n size: \"lg\",\n controller: \"SearchGroupModalCtrl\",\n resolve: {\n preselect: function () {\n return true;\n },\n event_id: function () {\n return $stateParams.id;\n },\n is_filter: function () {\n return true;\n },\n listGroupsIds: function () {\n return $scope.search.groups;\n },\n listPositionsIds: function () {\n return $scope.search.positions;\n }\n }\n });\n\n //Response del modal\n $modalInstance.result.then(function (groups) {\n $scope.search.hasFilteredGroups = groups.ids.length > 0;\n $scope.search.groups_names = groups.ids.length + \" \" + $filter('translate')('guest.groups') + \". \" + groups.listPositions.length + \" \" + $filter('translate')('guest.position');\n /* $scope.search.groups_names = _.chain(groups.groups)\n .filter(function (group) {\n return _.some(groups.ids, function (id) {\n return id === group.id;\n });\n })\n .reduce(function (memo, group) { return memo + group.name + \"\\n\"; }, \"\")\n .value();*/\n $scope.search.groups = groups.ids;\n $scope.search.positions = groups.listPositions;\n\n }, function () {\n\n console.info('Modal dismissed at: ' + new Date());\n if (!$scope.$$phase) $scope.$apply();\n\n });\n };\n\n $scope.unfilterGroups = function () {\n $scope.search.groups = [];\n $scope.search.positions = [];\n $scope.search.hasFilteredGroups = false;\n };\n\n $scope.MassiveRemove = function () {\n var persons = _.chain($scope.invitedGuests)\n .filter(function (guest) {\n return angular.isDefined(guest.value) && guest.value != \"\";\n })\n .value();\n\n var is_invited = _.some(persons, function (person) {\n return person.send_status != 'unsent';\n });\n var guest_ids = _.map(persons, function (person) {\n return person.id;\n });\n\n var deleteItems = {event_id: $stateParams.id, list: guest_ids}\n var delete_message = \"\";\n if (is_invited) delete_message = $filter('translate')('events.guests.invitation_already_sent_massive') + \"
\";\n delete_message += $filter('translate')('events.guests.delete_confirm_massive');\n modalService.confirm({\n title: $filter('translate')('events.guests.warning'),\n message: delete_message,\n onAccept: function () {\n Restangular.all('EventsGuests/DeleteMassive').post(deleteItems).then(function (results, status, headers, config) {\n toastr.success($filter('translate')('events.guests.action_success'));\n $scope.loadGuests();\n });\n }\n });\n };\n\n $scope.SetCompanionsLimit = function () {\n var guestsIds = _.chain($scope.invitedGuests)\n .filter(function (option) {\n return angular.isDefined(option.value) && option.value != \"\";\n })\n .map(function (option) {\n return option.value;\n })\n .value();\n if (guestsIds.length == 0) {\n modalService.message({\n title: \"Error\",\n message: $filter('translate')('events.guests.select_persons'),\n onAccept: function () {\n }\n });\n } else {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: AssignCompanionsLimitModalView,\n size: \"md\",\n controller: \"assignCompanionsLimitModalCtrl\",\n resolve: {\n options: {}\n }\n });\n\n // Response del modal\n $modalInstance.result.then(function (option) {\n\n var params = {event_guests_ids: guestsIds, value: option.max_companions_allowed};\n $http({\n method: 'post',\n url: (window as any).CONFIG.api_url + 'EventsGuests/SetMassiveCompanions',\n params: params\n }).then(function (results, status, headers, config) {\n toastr.success($filter('translate')('events.guests.action_success'));\n\n });\n });\n }\n };\n\n $scope.massiveAsignmentActs = function (type) {\n var guestsIds = _.chain($scope.invitedGuests)\n .filter(function (option) {\n return angular.isDefined(option.value) && option.value != \"\";\n })\n .map(function (option) {\n return option.value;\n })\n .value();\n if (guestsIds.length == 0) {\n modalService.message({\n title: \"Error\",\n message: $filter('translate')('events.guests.select_persons'),\n onAccept: function () {\n }\n });\n } else {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: AssignActsModalView,\n size: \"lg\",\n controller: \"assignActsMassiveModalCtrl\",\n resolve: {\n event_id: function () {\n return $stateParams.id;\n },\n }\n });\n\n // Response del modal\n $modalInstance.result.then(function (eventsProgramsActSelected) {\n //Seleccionamos los actos a los que invitado esta invitado.\n let event_acts_ids = [];\n angular.forEach(eventsProgramsActSelected, function (item, idx) {\n if (item) event_acts_ids.push(idx);\n });\n\n if (event_acts_ids.length > 0) {\n var epag = {\n event_acts_ids: event_acts_ids,\n guests_id: guestsIds,\n event_id: event.id\n }\n //Guardamos los actos\n $http({\n method: 'post',\n url: (window as any).CONFIG.api_url + 'EventsGuests/SetMassiveActsGuest',\n data: epag,\n }).then(function (resultsImage, status, headers, config) {\n toastr.success($filter('translate')('events.guests.action_success'));\n });\n }\n });\n }\n };\n\n $scope.assignAnnexes = function (type) {\n var guestsIds = _.chain($scope.invitedGuests)\n .filter(function (option) {\n return angular.isDefined(option.value) && option.value != \"\";\n })\n .map(function (option) {\n return option.value;\n })\n .value();\n if (guestsIds.length == 0) {\n modalService.message({\n title: \"Error\",\n message: $filter('translate')('events.guests.select_persons'),\n onAccept: function () {\n }\n });\n } else {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: AssignAnnexesModalView,\n size: \"lg\",\n controller: \"assignAnnexesModalCtrl\",\n resolve: {\n event_id: function () {\n return $stateParams.id;\n },\n }\n });\n //Response del modal\n $modalInstance.result.then(function (eventsAnnexesSelected) {\n //Seleccionamos los actos a los que invitado esta invitado.\n let events_annexes_ids = [];\n angular.forEach(eventsAnnexesSelected, function (item, idx) {\n if (item) events_annexes_ids.push(idx);\n });\n\n if (events_annexes_ids.length > 0) {\n var annexes = {\n guests_ids: guestsIds,\n event_id: event.id,\n events_annexes_ids: events_annexes_ids\n }\n\n //Guardamos los actos\n $http({\n method: 'post',\n url: (window as any).CONFIG.api_url + 'EventsGuests/SetAnnexesGuest',\n data: annexes,\n }).then(function (resultsImage, status, headers, config) {\n toastr.success($filter('translate')('events.guests.action_success'));\n });\n }\n });\n }\n };\n\n $scope.assignSpaces = async function () {\n\n\n let selectedGuestsIds = _.chain($scope.invitedGuests)\n .filter(function (option) {\n return angular.isDefined(option.value) && option.value != \"\";\n })\n .map(function (option) {\n return option.value;\n })\n .value();\n\n // let selectedGuestsIds = $scope.items.filter(f => f.value != null).map(m => m.id);\n\n if (selectedGuestsIds.length == 0) {\n modalService.message({\n title: \"Error\",\n message: $filter('translate')('events.guests.select_persons'),\n onAccept: function () {\n }\n });\n } else {\n\n let spaces = await eventService.getSpaces(event.id);\n spaces.push({ id: -1, name: $filter('translate')('events.guests.no_space') });\n\n /*\n spaces.forEach(function (space) {\n space.FK_events_spaces_zones_events_spaces.push({ id: -1, name: $filter('translate')('events.guests.no_zone') })\n });\n */ \n\n let $modalInstance = $uibModal.open({\n animation: true,\n template: GuestSpaceZonesModalView,\n controller: \"GuestSpaceZonesModalCtrl\",\n size: 'md',\n resolve: {\n event_guest_zone: function () {\n return undefined;\n },\n event_guest_id: function () {\n return null;\n },\n spaces: function () {\n return spaces;\n }\n }\n });\n\n // Retorno de los datos desde el modal.\n $modalInstance.result.then(function (resultModal) {\n\n let spaceID = resultModal.spaceSelected.id;\n let zoneID = spaceID > 1 ? resultModal.event_guest_zone.id : null;\n\n $log.debug('selectedGuestsIds: ')\n $log.debug(selectedGuestsIds)\n\n // if (spaceID = -1) zoneID = -1; // Para desasingar\n\n Restangular.all('EventsGuests/MassiveChangeSpaceZone/' + spaceID + '/' + zoneID).post(selectedGuestsIds).then(function (response) {\n $scope.loadGuests();\n toastr.success($filter('translate')('events.guests.action_success'));\n }, function (error) {\n $log.error(error);\n var errorMessage = \"Error desconocido\";\n if (error.data?.ExceptionMessage != null) errorMessage = error.data.ExceptionMessage;\n $scope.loadGuests();\n toastr.error(errorMessage);\n });\n });\n\n }\n }\n\n $scope.loadGuests();\n\n $scope.sendPushNotifications = function () {\n\n var guestsIds = _.chain($scope.invitedGuests)\n .filter(function (option) {\n return angular.isDefined(option.value) && option.value != \"\";\n })\n .map(function (option) {\n return option.value;\n })\n .value();\n if (guestsIds.length === 0) {\n modalService.message({\n title: \"Error\",\n message: $filter('translate')('events.guests.select_persons'),\n onAccept: function () {\n }\n });\n } else {\n let params = {\n listIds: guestsIds,\n type: 'guest',\n event_id: $stateParams.id\n };\n notificationService.notificationPush({\n params: params,\n onAccept: function (data) {\n toastr.success($filter('translate')('notifications.sending_mail_success'));\n }\n });\n }\n }\n\n // REVISAR\n $scope.sendNotifications = function () {\n var guestsIds = _.chain($scope.invitedGuests)\n .filter(function (option) {\n return angular.isDefined(option.value) && option.value != \"\";\n })\n .map(function (option) {\n return option.value;\n })\n .value();\n if (guestsIds.length == 0) {\n modalService.message({\n title: \"Error\",\n message: $filter('translate')('events.guests.select_persons'),\n onAccept: function () {\n }\n });\n } else {\n if (event.mail_account_id == null || event.mail_account_id == 0) {\n modalService.message({\n title: \"Error\",\n message: $filter('translate')('events.select_mail_from_address'),\n onAccept: function () {\n }\n });\n } else {\n\n var params = {\n entity_type: \"events\",\n entity_type_id: $stateParams.id,\n event_guests_ids: guestsIds,\n mail_account_id: event.mail_account_id,\n mail_account_reply: event.reply_to,\n documents: {for_event_guest: true}\n };\n\n notificationService.notificationMail({\n params: params,\n onAccept: function (data) {\n toastr.success($filter('translate')('notifications.sending_mail_success'));\n }\n });\n }\n }\n }\n $scope.searchByIncident = function () {\n $scope.showIncidents = true;\n $scope.paginationOptions.currentPage = 0;\n $scope.loadGuests();\n }\n\n $scope.export = function () {\n\n // Mandamos los ID de los items después del filtro \n let filteredItemsIds = $scope.items.map(i => i.id);\n\n let options = {\n filters: {\n NAME: $scope.search.name,\n EVENT_ID: $stateParams.id\n },\n GUEST_LIST_INCLUDE_ACTS: true,\n FILTERED_IDS: filteredItemsIds,\n };\n\n let n = 0;\n for (let key in $scope.search.pigs) {\n n++;\n options.filters[\"PIG\" + n] = \"#\" + key + \"=\" + $scope.search.pigs[key] + \"#\";\n }\n\n datasetsService.exportByType(\"event_guests\", options);\n\n };\n\n let importCSVConfigured = false;\n\n let initImportCSV = function () {\n $(\"#frmCSV\").change(function () {\n const fileInput = document.querySelector('#frmCSV');\n const file = fileInput?.files?.[0];\n if (file) {\n let reader = new FileReader();\n reader.onload = function (e) {\n const codes = new Uint8Array(e.target?.result as ArrayBuffer);\n const detectedEncoding = Encoding.detect(codes);\n try {\n let unicodeString = Encoding.convert(codes, {\n to: 'unicode',\n from: detectedEncoding,\n type: 'string'\n });\n\n let request = {\n file: btoa(unicodeString),\n person_type: \"anonymous\",\n mime: file.type\n }\n Restangular.all('Persons/ImportCSV?event_id=' + $stateParams.id).post(request).then(function (data) {\n if (data && data.length > 0) {\n $state.go('events.edit.guests.import', {\n event_id: $stateParams.id,\n people: data,\n menu_item_id: $stateParams.menu_item_id\n });\n } else {\n const fileInput = document.querySelector('#frmCSV');\n if (fileInput) {\n fileInput.value = \"\";\n }\n }\n }, function (error) {\n const fileInput = document.querySelector('#frmCSV');\n if (fileInput) {\n fileInput.value = \"\";\n }\n\n let exceptionString = error.data.ExceptionMessage.split('/');\n let exceptionMessage = exceptionString[0];\n let exceptionExtraInfo = exceptionString[1];\n let exceptionRowInfo = exceptionString[2]; \n\n // Para que esté \"a prueba de funcionarios\", pasamos el error por un modal. Así les obliga a leer el mensaje para seguir trabajando\n modalService.message({\n title: $filter('translate')('events.guests.invalid_csv_title_boring'),\n message: (exceptionRowInfo ? $filter('translate')('events.guests.row') + \" \" + exceptionRowInfo + \": \" : \"\") + (exceptionExtraInfo ? $filter('translate')(exceptionExtraInfo) + \" \" : \"\") + $filter('translate')(exceptionMessage), \n onAccept: function () {\n }\n });\n\n });\n } catch (e) {\n // Uncaught RangeError: Maximum call stack size exceeded\n }\n };\n reader.readAsArrayBuffer(file);\n // Borramos el value para que entre en la función al intentar cargar por segunda vez un archivo con el mismo nombre\n const fileInput = document.querySelector('#frmCSV') as HTMLInputElement;\n if (fileInput) {\n fileInput.value = \"\";\n }\n }\n });\n };\n\n $scope.importCSV = function () {\n if (!importCSVConfigured) {\n importCSVConfigured = true;\n initImportCSV();\n }\n $(\"#frmCSV\").trigger(\"click\");\n };\n\n let updateCSVConfigured = false;\n\n let initUpdateCSV = function () {\n $(\"#frmCSV2\").change(function () {\n let fileInput = document.querySelector('#frmCSV2') as HTMLInputElement;\n let file = fileInput?.files?.[0];\n if (file) {\n let reader = new FileReader();\n reader.onload = function (e) {\n if (!e.target) return;\n const codes = new Uint8Array(e.target.result as ArrayBuffer);\n const detectedEncoding = Encoding.detect(codes);\n try {\n let unicodeString = Encoding.convert(codes, {\n to: 'unicode',\n from: detectedEncoding,\n type: 'string'\n });\n\n let request = {\n file: btoa(unicodeString),\n person_type: \"anonymous\",\n mime: file.type\n }\n\n Restangular.all('EventsGuests/UpdateCSV?event_id=' + $stateParams.id).post(request).then(function (data) {\n toastr.success($filter('translate')('persons.import_csv.success'));\n $scope.loadGuests();\n });\n } catch (e) {\n // Uncaught RangeError: Maximum call stack size exceeded\n }\n };\n\n reader.readAsArrayBuffer(file);\n }\n });\n };\n\n $scope.updateCSV = function () {\n if (!updateCSVConfigured) {\n updateCSVConfigured = true;\n initUpdateCSV();\n }\n $(\"#frmCSV2\").trigger(\"click\");\n };\n\n function invertColor(hex) {\n if (hex != null && hex !== 'undefined' && hex != \"\") {\n if (hex.indexOf('#') === 0) {\n hex = hex.slice(1);\n }\n // convert 3-digit hex to 6-digits.\n if (hex.length === 3) {\n hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];\n }\n if (hex.length !== 6) {\n throw new Error('Invalid HEX color.');\n }\n var r = parseInt(hex.slice(0, 2), 16),\n g = parseInt(hex.slice(2, 4), 16),\n b = parseInt(hex.slice(4, 6), 16);\n\n return (r * 0.299 + g * 0.587 + b * 0.114) > 186\n ? '#000000'\n : '#FFFFFF';\n } else {\n return \"#000000\";\n }\n }\n\n //Mass confirmation \n $scope.confirmSelected = function () {\n let selectedToConfirm = $scope.items.filter(f => f.value != null && f.confirmation_status != \"confirmed\");\n let selectedToCheck = $scope.items.filter(f => f.value != null);\n\n let date = new Date();\n let day = date.getDate();\n let month = date.getMonth() + 1;\n let year = date.getFullYear();\n\n modalService.confirm({\n title: $filter('translate')('events.guests.confirm_selected'),\n message: $filter('translate')('events.guests.confirm_selected_message'),\n onAccept: function () {\n\n Restangular.all('EventsGuests/massiveConfirmation/confirmed').post(selectedToConfirm).then(function (result) {\n selectedToConfirm.forEach((item) => {\n item.confirmation_status = \"confirmed\";\n item.confirmation_date = `${day}/${month}/${year}`;\n });\n $scope.loadGuests();\n });\n\n // Asignamos a los actos en cuestion \n Restangular.all(\"EventsProgramsActs\").customGET(\"GetEventConfirmableActs\", { event_id: event.id }).then(function (res) {\n\n if (res.length > 0) {\n let epag = {\n event_acts_ids: res.map(m => m.id),\n guests_id: selectedToCheck.map(e => e.id),\n event_id: event.id,\n guest_id: null,\n event_acts_show_ids: null\n }\n Restangular.all(\"EventsGuests\").customPOST(epag, \"SetMassiveActsGuest\", {onlyConfirmableActs: true}).then(function (results) {\n selectedToCheck.forEach(m => m.partial_attendance = false)\n });\n }\n ;\n });\n }\n });\n // Metemos aquí el método para añadir parciales \n }\n }])\n\n\n .controller(\"SearchGuestsModalCtrl\", ['uiGridSelectionService', '$timeout', 'LoginService', '$scope', '$uibModalInstance', 'Restangular', 'modalService', '$filter', '$http', '$stateParams', '$q', '$uibModal', 'options', '$rootScope', function (uiGridSelectionService, $timeout, LoginService, $scope, $uibModalInstance, Restangular, modalService, $filter, $http, $stateParams, $q, $uibModal, options, $rootScope) {\n\n // Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"EVENTS_GUESTS_WRITE\");\n\n $scope.searchModal = {pigs: []};\n $scope.showError = false;\n $scope.selectedRows = [];\n $scope.options = options;\n $scope.showResults = false;\n $scope.personPositionModal = {};\n $scope.personPositionOrigin = {};\n $scope.personPositionModal.persons_groups = {};\n // $scope.personPositionModal.persons_persons_treatments = {};\n // $scope.personPositionModal.persons_position_treatments = {};\n $scope.personPositionModal.FK_positions_groups = null;\n $scope.type_persons = [\n\n {option: null, label: $filter('translate')('persons.title_all'), checked: true},\n {option: \"authority\", label: $filter('translate')('persons.title'), checked: false},\n {option: 'anonymous', label: $filter('translate')('persons.title_anonymous'), checked: false}\n\n ];\n $scope.typePersonSelected = {checked: $scope.type_persons[0].option};\n\n if ($scope.personPositionModal.position_order == 0) $scope.personPositionModal.position_order = null;\n\n //cargamos los grupos de información\n let optionsPIG = {entity_type: \"persons\"};\n Restangular.all('InformationsGroups').getList(optionsPIG).then(function (personsInformationGroups) {\n $scope.personsInformationGoups = personsInformationGroups.filter(m => m.use_in_search == true);\n $scope.personsInformationGoups.forEach(function (pig) {\n if (pig.configuration != \"\") pig.configuration = JSON.parse(pig.configuration);\n });\n $scope.checkboxSimpleOptions = [\n {option: null, label: $filter('translate')('informations.all'), checked: true},\n {option: true, label: $filter('translate')('events.staff.yes'), checked: false},\n {option: false, label: $filter('translate')('events.staff.no'), checked: false}\n ];\n });\n\n //Custom function. return null values instead of undefined\n function isDefinedAndNotNull(val) {\n\n return angular.isDefined(val) && val !== null;\n\n }\n\n $scope.parsePersonType = function (person_type) {\n\n var result = \"\";\n\n if (person_type == \"authority\") {\n\n result = $filter('translate')('persons.title');\n\n } if (person_type === \"anonymous\") {\n\n result = $filter('translate')('persons.title_anonymous');\n\n } else if (person_type === \"imported\") {\n\n result = $filter('translate')('persons.title_imported');\n\n } else if (person_type === \"enrolled\") {\n\n result = $filter('translate')('inscriptions_forms.inscripted');\n\n }\n\n return result;\n };\n\n let group_id = \"\";\n let position_id = \"\";\n\n $scope.searchGuestsOptions = function () {\n $scope.selectedRows = [];\n //gridGuestsOptions;\n $scope.showResults = true;\n if (isDefinedAndNotNull($scope.personPositionModal.FK_positions_groups)) {\n position_id = $scope.personPositionModal.FK_positions_groups.selected.id;\n }\n if (angular.isDefined($scope.personPositionModal.persons_groups.selected)) group_id = $scope.personPositionModal.persons_groups.selected.id;\n\n if (!angular.isDefined($scope.searchModal)) {\n $scope.searchModal = {};\n $scope.searchModal.name2 = \"\";\n $scope.searchModal.surname = \"\";\n $scope.searchModal.lastname = \"\";\n $scope.searchModal.historic_position = false;\n }\n\n if (angular.isDefined($scope.gridGuestsOptions)) {\n $scope.gridGuestsOptions.loadData(false);\n //quitamos la seleccion\n //$scope.gridGuestsOptions.gridApi.selection.clearSelectedRows();\n } else {\n $scope.gridGuestsOptions = {\n exporterMenuCsv: false,\n enableGridMenu: true,\n enableHiding: false,\n enableSelectionBatchEvent: true,//para obtener los seleccionados\n gridMenuShowHideColumns: false,\n paginationPageSizes: [5, 10, 25],\n paginationPageSize: 5,\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n this.gridApi.core.on.rowsRendered($scope, callbackFunctionItemChange);\n this.gridApi.selection.on.rowSelectionChanged($scope, callbackFunctionRowSelected);\n this.gridApi.selection.on.rowSelectionChangedBatch($scope, callbackFunctionRowSelected);\n },\n columnDefs: [\n {\n name: 'id',\n visible: false,\n enableFiltering: false,\n enableHiding: false,\n exporterSuppressExport: true\n },\n {\n name: 'positionId',\n visible: false,\n enableFiltering: false,\n enableHiding: false,\n exporterSuppressExport: true\n },\n\n {\n name: 'death',\n width: 25,\n displayName: \"\",\n enableFiltering: false,\n enableHiding: false,\n enableColumnMenu: false,\n cellTemplate: '
' +\n '' +\n '
'\n },\n\n {\n field: 'photo',\n nableFiltering: false,\n enableSorting: false,\n displayName: $filter('translate')('persons.photo'),\n cellTemplate: \"
\",\n width: 70,\n enableFiltering: false\n\n },\n {\n name: 'position_and_group_name',\n displayName: $filter('translate')('persons.position'),\n enableFiltering: false,\n enableSorting: false,\n enableHiding: false,\n minWidth: 200,\n cellTemplate: '
' +\n '{{grid.getCellValue(row, col)}}' +\n '
'\n },\n {\n name: 'name',\n displayName: $filter('translate')('persons.name'),\n enableFiltering: true,\n enableSorting: true,\n enableHiding: false\n },\n {\n name: 'surname',\n displayName: $filter('translate')('persons.surname'),\n enableFiltering: true,\n enableSorting: true,\n enableHiding: false\n },\n {\n name: 'lastname',\n displayName: $filter('translate')('persons.lastname'),\n enableFiltering: true,\n enableSorting: true,\n enableHiding: false\n },\n {\n name: 'person_type',\n displayName: $filter('translate')('persons.type'),\n enableFiltering: true,\n cellTemplate: '
{{grid.appScope.parsePersonType(row.entity.person_type)}}
'\n },\n ],\n getData: function (options) {\n var deferred = $q.defer();\n options.event_id = $stateParams.id;\n options.group_id = group_id;\n options.position_id = position_id;\n options.group_position_name = $scope.searchModal.group_position_name;\n options.nameSearch = $scope.searchModal.name2;\n options.surnameSearch = $scope.searchModal.surname;\n options.lastnameSearch = $scope.searchModal.lastname;\n options.state = $scope.searchModal.state;\n options.tags = $scope.tags;\n var pigs = \"\";\n\n for (var key in $scope.searchModal.pigs) {\n if (typeof $scope.searchModal.pigs[key] != \"undefined\" && $scope.searchModal.pigs[key] != \"\" && $scope.searchModal.pigs[key] != null) {\n if (typeof ($scope.searchModal.pigs[key]) == \"object\") {\n //estamos en el selector simple.\n var infoFilter = $scope.personsInformationGoups.filter(function (el) {\n return el.id == key;\n });\n if (infoFilter.length == 1) {\n if (infoFilter[0].type == \"datetime\") {\n if ($scope.searchModal.pigs[key] != null) pigs += (pigs != \"\" ? \"#\" : \"\") + key + \"=>\" + new Date($scope.searchModal.pigs[key]).toISOString();\n } else if (infoFilter[0].type == \"checkboxSimple\") {\n if ($scope.searchModal.pigs[key].checked != \"\") pigs += (pigs != \"\" ? \"#\" : \"\") + key + \"=>\" + $scope.searchModal.pigs[key].checked;\n } else {\n pigs += (pigs != \"\" ? \"#\" : \"\") + key + \"=>\" + $scope.searchModal.pigs[key];\n }\n }\n } else {\n pigs += (pigs != \"\" ? \"#\" : \"\") + key + \"=>\" + $scope.searchModal.pigs[key];\n }\n }\n }\n options.pigs = pigs;\n options.historic_position = $scope.searchModal.historic_position;\n options.person_type = $scope.typePersonSelected.checked;\n options.save = false;\n\n Restangular.all('EventsGuests/SearchGuestOptions').post(options).then(function (results) {\n var data = results.rows;\n var personsIds = [];\n angular.forEach(data, function (dataR) {\n if (personsIds.indexOf(dataR.id) < 0) {\n personsIds.push(dataR.id);\n }\n });\n //Obtenemos sus imágenes\n if (personsIds.length > 0) {\n $http({\n method: 'post',\n url: (window as any).CONFIG.api_url + 'Persons/ImagesSmall',\n params: {ids: personsIds}\n }).then(function (resultsImage, status, headers, config) {\n angular.forEach(data, function (person) {\n for (var i = 0; i < resultsImage.data.length; i++) {\n if (person.id == resultsImage.data[i].person_id) {\n person.photo = resultsImage.data[i].image_small;\n break;\n }\n }\n });\n });\n }\n data.totalRows = results.totalRows;\n $scope.totalRows = results.totalRows;\n deferred.resolve(data);\n\n });\n return deferred.promise;\n\n }\n }; //End gridoptions\n }\n };\n\n let callbackFunctionRowSelected = function (row, evt) {\n let addAll = row.length > 1;\n\n if (!addAll) {\n //buscamos si ya existe la persona añadida\n var index = $scope.selectedRows.map(function (e) {\n return e.id;\n }).indexOf(row.entity.id);\n if (index < 0) {\n if (row.isSelected) {\n $scope.selectedRows.push({id: row.entity.id, positionId: [row.entity.positionId]});\n } else {\n $scope.selectedRows.splice(index, 1);\n }\n } else {\n //ya existe, si is seleccionado, lo añadimos y sino lo borramos.\n if (row.isSelected) {\n $scope.selectedRows.map(function (e) {\n if (e.id == row.entity.id) e.positionId.push(row.entity.positionId)\n });\n } else {\n\n for (let i = 0; i < $scope.selectedRows.length; i++) {\n if ($scope.selectedRows[i].id == row.entity.id) {\n\n //var indexPosition = $scope.selectedRows[i].positionId.map(function (e) { return e.positionId; }).indexOf(row.entity.positionId);\n var indexPosition = $scope.selectedRows[i].positionId.indexOf(row.entity.positionId);\n var lengthOfPositions = $scope.selectedRows[i].positionId.map(function (e) {\n return e.positionId;\n }).length;\n }\n }\n\n $scope.selectedRows.map(function (e) {\n if (e.id == row.entity.id) e.positionId.splice(indexPosition, 1)\n });\n if (lengthOfPositions == 1) {\n //eliminamos a la persona\n var index = $scope.selectedRows.map(function (e) {\n return e.id;\n }).indexOf(row.entity.id);\n $scope.selectedRows.splice(index, 1);\n }\n }\n\n }\n\n } else {\n if (row[0].isSelected) {\n //se ha seleccionado todo.\n $scope.selectedRows = [];\n for (let i = 0; i < $scope.gridGuestsOptions.gridApi.grid.options.totalItems; i++) {\n $scope.selectedRows.push(i);\n }\n ;\n } else {\n $scope.selectedRows = [];\n }\n\n }\n }\n\n let callbackFunctionItemChange = function () {\n $timeout(function () {\n for (var i = 0; i < $scope.gridGuestsOptions.data.length; i++) {\n var row = $scope.gridGuestsOptions.data[i];\n for (var select = 0; select < $scope.selectedRows.length; select++) {\n let selected = $scope.selectedRows[select];\n if (row.id == selected.id) {\n $scope.gridGuestsOptions.gridApi.selection.toggleRowSelection(row);\n break\n }\n }\n ;\n }\n }, 350);//lo pongo así porque sino falla la primera vez\n }\n\n $scope.searchByTags = function () {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: AssignTagsModalView,\n size: \"ld\",\n controller: \"tagsEditCtrl\",\n scope: $scope,\n resolve: {\n is_modal: function () {\n return true;\n },\n entity_type: function () {\n return \"persons\";\n },\n entity_id: function () {\n return null;\n }\n }\n });\n\n $modalInstance.result.then(function (data) {\n $scope.tags = [];\n angular.forEach(data, function (key, item) {\n Restangular.one('Tags', item).get().then(function (result) {\n $scope.tags.push(result);\n })\n });\n }, function () {\n });\n }\n\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n $scope.addGuests = function (continueOption) {\n\n var addAll = $scope.gridGuestsOptions.gridApi.selection.getSelectAllState();\n if (addAll) {\n let options: any = {};\n options.event_id = $stateParams.id;\n options.group_id = group_id;\n options.position_id = position_id;\n options.nameSearch = $scope.searchModal.name2;\n options.surnameSearch = $scope.searchModal.surname;\n options.lastnameSearch = $scope.searchModal.lastname;\n options.historic_position = $scope.searchModal.historic_position;\n options.person_type = $scope.typePersonSelected.checked;\n options.group_position_name = $scope.searchModal.group_position_name;\n options.state = $scope.searchModal.state;\n var pigs = \"\";\n for (var key in $scope.searchModal.pigs) {\n if (typeof $scope.searchModal.pigs[key] != \"undefined\" && $scope.searchModal.pigs[key] != \"\" && $scope.searchModal.pigs[key] != null) {\n if (typeof ($scope.searchModal.pigs[key]) == \"object\") {\n //estamos en el selector simple.\n //if ($scope.searchModal.pigs[key].checked != \"\") pigs += (pigs != \"\" ? \"#\" : \"\") + key + \"=>\" + $scope.searchModal.pigs[key].checked;\n var infoFilter = $scope.personsInformationGoups.filter(function (el) {\n return el.id == key;\n });\n if (infoFilter.length == 1) {\n if (infoFilter[0].type == \"datetime\") {\n if ($scope.searchModal.pigs[key] != null) pigs += (pigs != \"\" ? \"#\" : \"\") + key + \"=>\" + new Date($scope.searchModal.pigs[key]).toISOString();\n } else if (infoFilter[0].type == \"checkboxSimple\") {\n if ($scope.searchModal.pigs[key].checked != \"\") pigs += (pigs != \"\" ? \"#\" : \"\") + key + \"=>\" + $scope.searchModal.pigs[key].checked;\n } else {\n pigs += (pigs != \"\" ? \"#\" : \"\") + key + \"=>\" + $scope.searchModal.pigs[key];\n }\n }\n } else {\n pigs += (pigs != \"\" ? \"#\" : \"\") + key + \"=>\" + $scope.searchModal.pigs[key];\n }\n }\n }\n options.pigs = pigs;\n\n //si no hay al menos un filtro, no dejamos añadir, porque añadirian toda la bd\n if ((options.group_id == \"\" || options.group_id == null) &&\n (options.group_position_name == \"\" || options.group_position_name == null) &&\n (options.nameSearch == \"\" || options.nameSearch == null) &&\n (options.surnameSearch == \"\" || options.surnameSearch == null) &&\n (options.lastnameSearch == \"\" || options.lastnameSearch == null) &&\n (options.group_position_name == \"\" || options.group_position_name == null) &&\n (options.state == \"\" || options.state == null) &&\n (options.pigs == \"\" || options.pigs == null)\n ) {\n alert(\"Debes indicar al menos un filtro.\");\n return;\n }\n\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + 'EventsGuests/AddAllPersonsToEvent',\n params: options\n }).then(function (results, status, headers, config) {\n // Devolvemos el control al principal\n if (results.data) {\n if (continueOption == 0) {\n toastr.success($filter('translate')('events.guests.action_success'));\n $uibModalInstance.close();\n } else {\n if (!$scope.$$phase) $scope.$apply();\n $scope.$parent.loadGuests();\n $scope.gridGuestsOptions.loadData(false);\n }\n } else {\n toastr.error($filter('translate')('events.guests.event_closed'));\n }\n });\n } else {\n //Devolvemos el control al principal\n //var rows = $scope.gridGuestsOptions.gridApi.selection.getSelectedRows(); esta guardado en el seleccionado.\n var ids = new Array();\n angular.forEach($scope.selectedRows, function (row) {\n let positionIdSelected = null;\n\n if (row.positionId.length <= 1) {\n positionIdSelected = row.positionId[0];\n }\n let aux = {\n guest_id: row.id,\n position_id: positionIdSelected\n }\n ids.push(aux);\n });\n if (ids.length > 0) {\n var guestsOptions = {event_id: $stateParams.id, guests_position: ids};\n Restangular.all('EventsGuests/AddPersonsToEvent').post(guestsOptions).then(function (result) {\n if (result) {\n toastr.success($filter('translate')('events.guests.action_success'));\n if (continueOption == 0) {\n $uibModalInstance.close();\n } else {\n if (!$scope.$$phase) $scope.$apply();\n $scope.$parent.loadGuests();\n }\n } else {\n toastr.error($filter('translate')('events.guests.event_closed'));\n }\n });\n }\n }\n\n };//savePersonPosition\n\n $scope.addGuestsCompanion = function () {\n $scope.showError = false;\n var addAll = $scope.gridGuestsOptions.gridApi.selection.getSelectAllState();\n\n if (addAll) {\n //Ha seleccionado todos, volvemos a buscar sin pagina.\n options = {};\n options.event_id = $stateParams.id,\n options.nameSearch = $scope.searchModal.name2,\n options.surnameSearch = $scope.searchModal.surname,\n options.lastnameSearch = $scope.searchModal.lastname;\n options._page = null;\n options._pageSize = null;\n options.person_type = $scope.typePersonSelected.checked;\n options.historic_position = $scope.searchModal.historic_position;\n\n //Pigs\n var pigs = \"\";\n for (var key in $scope.searchModal.pigs) {\n if (typeof $scope.searchModal.pigs[key] != \"undefined\" && $scope.searchModal.pigs[key] != \"\" && $scope.searchModal.pigs[key] != null) {\n if (typeof ($scope.searchModal.pigs[key]) == \"object\") {\n //estamos en el selector simple.\n var infoFilter = $scope.personsInformationGoups.filter(function (el) {\n return el.id == key;\n });\n if (infoFilter.length == 1) {\n if (infoFilter[0].type == \"datetime\") {\n if ($scope.searchModal.pigs[key] != null) pigs += (pigs != \"\" ? \"#\" : \"\") + key + \"=>\" + new Date($scope.searchModal.pigs[key]).toISOString();\n } else if (infoFilter[0].type == \"checkboxSimple\") {\n if ($scope.searchModal.pigs[key].checked != \"\") pigs += (pigs != \"\" ? \"#\" : \"\") + key + \"=>\" + $scope.searchModal.pigs[key].checked;\n } else {\n pigs += (pigs != \"\" ? \"#\" : \"\") + key + \"=>\" + $scope.searchModal.pigs[key];\n }\n }\n } else {\n pigs += (pigs != \"\" ? \"#\" : \"\") + key + \"=>\" + $scope.searchModal.pigs[key];\n }\n }\n }\n options.pigs = pigs;\n\n Restangular.all('EventsGuests/SearchGuestOptions').post(options).then(function (results) {\n var rows_data = new Array();\n var rows = results.rows;\n angular.forEach(rows, function (row) {\n rows_data.push({\n id: row.id,\n name: row.name + \" \" + (isDefinedAndNotNull(row.surname) ? row.surname : \"\") + \" \" + (isDefinedAndNotNull(row.lastname) ? row.lastname : \"\")\n });\n });\n if ($scope.options.limit == 0 || rows_data.length + $scope.options.total <= $scope.options.limit) {\n //Devolvemos el control al principal\n $uibModalInstance.close(rows_data);\n } else {\n $scope.showError = true;\n }\n\n });\n } else {\n //Devolvemos el control al principal\n var rows = $scope.gridGuestsOptions.gridApi.selection.getSelectedRows();\n var rows_data = new Array();\n angular.forEach(rows, function (row) {\n rows_data.push({\n id: row.id,\n name: row.name + \" \" + (isDefinedAndNotNull(row.surname) ? row.surname : \"\") + \" \" + (isDefinedAndNotNull(row.lastname) ? row.lastname : \"\")\n });\n });\n if ($scope.options.limit == 0 || rows_data.length + $scope.options.total <= $scope.options.limit) {\n //Devolvemos el control al principal\n $uibModalInstance.close(rows_data);\n } else {\n $scope.showError = true;\n }\n }\n }\n\n $scope.addNewPerson = function (person_type) {\n let $modalInstance = null;\n if ($rootScope.sizeLg) {\n $modalInstance = $uibModal.open({\n animation: true,\n template: AddNewPersonModalView,\n size: \"xl-lg\",\n controller: \"AddNewPersonModalCtrl\",\n resolve: {\n person_type: function () {\n return person_type;\n },\n }\n });\n } else {\n $modalInstance = $uibModal.open({\n animation: true,\n size: \"xl-lg\",\n template: AddNewPersonModalView,\n controller: \"AddNewPersonModalCtrl\",\n resolve: {\n person_type: function () {\n return person_type;\n },\n }\n });\n }\n };\n\n }])\n\n\n .controller(\"AddNewPersonModalCtrl\", ['LoginService', '$scope', '$uibModalInstance', 'person_type', '$rootScope', function (LoginService, $scope, $uibModalInstance, person_type, $rootScope) {\n // Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"EVENTS_GUESTS_WRITE\");\n $scope.person_type = person_type;\n $scope.callbackClose = function (mode) {\n $uibModalInstance.dismiss(mode);\n };\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n }])\n\n\n .controller(\"ConfigGuestsModalCtrl\", ['generateDocumentService', 'gridService', 'event', 'item', 'LoginService', '$scope', '$uibModalInstance', 'Restangular', 'modalService', '$filter', '$http', '$stateParams', '$q', '$uibModal', '$state', '$rootScope', 'eventService', '$log',\n function (generateDocumentService, gridService, event, item, LoginService, $scope, $uibModalInstance, Restangular, modalService, $filter, $http, $stateParams, $q, $uibModal, $state, $rootScope, eventService, $log) {\n\n // Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"EVENTS_GUESTS_WRITE\");\n $scope.allowReadPersons = LoginService.permissionExist(\"PERSONS_READ\");\n $scope.haveEspecificActs = false;\n $scope.haveEspecificAnnexes = false;\n $scope.eventsProgramsActSelected = [];\n $scope.eventsDocumentTypeSelected = [];\n $scope.hasSomethingToConfig = false;\n $scope.name = item.name;\n $scope.partial = $filter('translate')('events.guests.partial_attendance_uncheck');\n $scope.referrer_person_id = item.referrer_person_id;\n if (item.surname != null)\n $scope.name += ' ' + item.surname;\n if (item.lastname != null)\n $scope.name += ' ' + item.lastname;\n $scope.positionChecked = {\n parking: null\n };\n\n $scope.companionTexts = {\n tab_title: $filter('translate')('events.guests.title_companions'),\n };\n\n function isDefinedAndNotNull(val) {\n\n return angular.isDefined(val) && val !== null;\n\n }\n\n function isDefinedAndNotNullOrEmpty(val) {\n\n return angular.isDefined(val) && val !== null && val !== \"\";\n\n }\n\n $scope.checkPartialAttendance = function () {\n\n if ($scope.eventsConfirmableActs && $scope.confirmation_status_value == \"confirmed\") {\n $scope.guest.partial_attendance = $scope.eventsConfirmableActs.some(act => $scope.eventsProgramsActSelected[act.id] != \"attend\");\n if ($scope.guest.partial_attendance) {\n $scope.partial = $filter('translate')('events.guests.partial_attendance_check');\n $scope.confirmationStatus[1].name = $filter('translate')('events.guests.confirmed') + ' ' + $scope.partial;\n\n } else {\n $scope.partial = $filter('translate')('events.guests.partial_attendance_uncheck');\n $scope.confirmationStatus[1].name = $filter('translate')('events.guests.confirmed') + ' ' + $scope.partial;\n\n }\n };\n }\n\n // Tipo de acreditación del invitado en el evento\n Restangular.all('EventsGuestsAccreditations').getList({event_id: event.id}).then(function (results) {\n $scope.accreditationsList = results;\n $scope.accreditationsList.push({id: null, name: $filter('translate')('events.guests.no_accreditation')})\n });\n\n\n $scope.goToPerson = function () {\n var url = $state.href('persons.edit', {\n id: $scope.guest.person_id,\n person_type: $scope.guest.person_type\n });\n window.open(url, '_blank');\n };\n\n // Tiene algun acto especifico para marcar a los invitados.\n\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + 'EventsProgramsActs/GetEventEspecificActs',\n params: {event_id: event.id}\n }).then(function (results, status, headers, config) {\n $scope.eventsSpecificActs = results.data;\n if ($scope.eventsSpecificActs.length > 0) {\n $scope.haveEspecificActs = true;\n var epag = {\n guest_id: item.id,\n event_id: event.id\n }\n $http({\n method: 'post',\n url: (window as any).CONFIG.api_url + 'EventsGuests/GetActsGuest',\n data: epag\n }).then(function (result, status, headers, config) {\n angular.forEach(result.data.event_acts_ids, function (item) {\n $scope.eventsProgramsActSelected[item] = \"attend\";\n });\n angular.forEach(result.data.event_acts_show_ids, function (item) {\n $scope.eventsProgramsActSelected[item] = \"show\";\n });\n\n });\n }\n });\n\n // Tiene algun acto que requiera una confirmación a parte.\n\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + 'EventsProgramsActs/GetEventConfirmableActs',\n params: {event_id: event.id}\n }).then(function (results, status, headers, config) {\n $scope.eventsConfirmableActs = results.data;\n if ($scope.eventsConfirmableActs.length > 0) {\n $scope.haveConfirmableActs = true;\n var epag = {\n guest_id: item.id,\n event_id: event.id\n }\n\n $http({\n method: 'post',\n url: (window as any).CONFIG.api_url + 'EventsGuests/GetActsGuest',\n data: epag\n }).then(function (result, status, headers, config) {\n angular.forEach(result.data.event_acts_ids, function (item) {\n $scope.eventsProgramsActSelected[item] = \"attend\";\n });\n });\n }\n });\n\n $scope.eventsAnnexesSelected = [];\n Restangular.all('EventsAnnexes').getList({\n event_id: event.id,\n is_explicit_annex: true\n }).then(function (response) {\n $scope.annexes = response;\n angular.forEach($scope.annexes, function (row) {\n row.FK_events_programs_annexes_tl_events_programs_annexes = row.FK_events_programs_annexes_tl_events_programs_annexes.find(element => element.language_id == $rootScope.languageId);\n });\n\n if ($scope.annexes.length > 0) {\n $scope.haveEspecificAnnexes = true;\n var epag = {\n event_guest_id: item.id,\n event_id: event.id\n }\n\n $http({\n method: 'post',\n url: (window as any).CONFIG.api_url + 'EventsGuests/GetAnnexesGuest',\n data: epag\n }).then(function (result, status, headers, config) {\n angular.forEach(result.data.events_annexes_ids, function (item) {\n $scope.eventsAnnexesSelected[item] = \"checked\";\n });\n });\n\n }\n });\n\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + 'EventsProgramsActs/GetConfigMenus',\n params: {event_id: event.id, event_guest_id: item.id}\n }).then(function (results, status, headers, config) {\n $scope.eventsProgramsActs = results.data;\n if ($scope.eventsProgramsActs.length > 0) {\n $scope.hasSomethingToConfig = true;\n }\n\n //Seleccionamos el principal\n angular.forEach($scope.eventsProgramsActs, function (programAct) {\n angular.forEach(programAct.FK_events_programs_acts_menus_events_programs_acts, function (menu) {\n\n if (menu.is_principal) programAct.FK_events_programs_acts_menus_events_programs_acts.selected = menu;\n });\n\n });\n\n //Buscamos si hay alguno con menú especial y lo seleccionamos.\n angular.forEach($scope.eventsProgramsActs, function (programAct) {\n angular.forEach(programAct.FK_events_programs_acts_menus_events_programs_acts, function (menu) {\n angular.forEach(programAct.FK_events_programs_acts_menus_guests_events_programs_acts, function (menu_guest) {\n if (menu_guest.event_guest_id == item.id && menu.event_program_act_id == menu_guest.event_program_act_id && menu_guest.event_program_act_menu_id == menu.id) {\n programAct.FK_events_programs_acts_menus_events_programs_acts.selected = menu;\n }\n });\n });\n });\n $scope.confirmationStatus = [\n {name: $filter('translate')('events.guests.pending'), value: 'pending'},\n {name: $filter('translate')('events.guests.confirmed') + ' ' + $scope.partial, value: 'confirmed'},\n {name: $filter('translate')('events.guests.rejected'), value: 'rejected'},\n {name: $filter('translate')('events.guests.pending_approval'), value: 'pending_approval'},\n {name: $filter('translate')('events.guests.manage_delegate'), value: 'manage_delegate'},\n {name: $filter('translate')('events.guests.delegated'), value: 'delegated'}\n ];\n $scope.sendStatus = [\n {name: $filter('translate')('events.guests.send_status_unsent'), value: 'unsent'},\n {name: $filter('translate')('events.guests.send_status_mail'), value: 'mail'},\n {name: $filter('translate')('events.guests.send_status_print'), value: 'print'},\n {name: $filter('translate')('events.guests.send_status_inscription'), value: 'inscription'}\n ];\n $scope.isCompanionsAllowed = [\n {name: $filter('translate')('events.guests.isCompanionsLikeEvent'), value: null},\n {name: $filter('translate')('events.staff.yes'), value: true},\n {name: $filter('translate')('events.staff.no'), value: false}\n ];\n\n $scope.showContactInfoPhone = false;\n $scope.showContactInfoEmail = false;\n\n //if (item.person_id != null && typeof (item.person_id) !== 'undefined') {\n let options = {event_id: event.id, person_id: item.person_id};\n //} else {\n // options = { event_id: event.id, person_id: item.id };\n //}\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + 'EventsGuests/GetGuestInfoByPerson',\n params: options\n }).then(function (results, status, headers, config) {\n $scope.guest = results.data;\n\n if ($scope.guest.partial_attendance) {\n $scope.partial = $filter('translate')('events.guests.partial_attendance_check');\n $scope.confirmationStatus[1].name = $filter('translate')('events.guests.confirmed') + ' ' + $scope.partial;\n\n } else {\n $scope.partial = $filter('translate')('events.guests.partial_attendance_uncheck');\n }\n ;\n\n $scope.guest.id = item.id;\n\n if ($scope.guest.confirmation_status == 'pending') {\n var statusObject = {name: $filter('translate')('events.guests.pending'), value: 'pending'};\n } else if ($scope.guest.confirmation_status == 'confirmed') {\n var statusObject = {name: $filter('translate')('events.guests.confirmed'), value: 'confirmed'};\n } else if ($scope.guest.confirmation_status == 'rejected') {\n var statusObject = {name: $filter('translate')('events.guests.rejected'), value: 'rejected'};\n } else if ($scope.guest.confirmation_status == 'pending_approval') {\n var statusObject = {\n name: $filter('translate')('events.guests.pending_approval'),\n value: 'pending_approval'\n };\n } else if ($scope.guest.confirmation_status == 'manage_delegate') {\n var statusObject = {\n name: $filter('translate')('events.guests.manage_delegate'),\n value: 'manage_delegate'\n };\n } else {\n var statusObject = {name: $filter('translate')('events.guests.delegated'), value: 'delegated'};\n }\n\n if ($scope.guest.send_status == \"unsent\") {\n var sendStatusObject = {\n name: $filter('translate')('events.guests.send_status_unsent'),\n value: 'unsent'\n };\n } else if ($scope.guest.send_status == 'mail') {\n var sendStatusObject = {\n name: $filter('translate')('events.guests.send_status_mail'),\n value: 'mail'\n };\n } else if ($scope.guest.send_status == 'inscription') {\n var sendStatusObject = {\n name: $filter('translate')('events.guests.send_status_inscription'),\n value: 'inscription'\n };\n } else {\n var sendStatusObject = {\n name: $filter('translate')('events.guests.send_status_print'),\n value: 'print'\n };\n }\n let isCompanionsAllowedObject: any = undefined;\n\n if ($scope.guest.is_companions_allowed) {\n isCompanionsAllowedObject = {\n name: $filter('translate')('events.guests.isCompanionsAllowed'),\n value: true\n };\n } else if ($scope.guest.is_companions_allowed == false) {\n isCompanionsAllowedObject = {\n name: $filter('translate')('events.guests.isCompanionsNotAllowed'),\n value: false\n };\n } else {\n isCompanionsAllowedObject = {\n name: $filter('translate')('events.guests.isCompanionsLikeEvent'),\n value: null\n };\n }\n let accreditation: any = undefined;\n angular.forEach($scope.accreditationsList, function (item) {\n if (item.id == $scope.guest.event_guest_accreditation_id) {\n accreditation = item;\n }\n });\n\n $scope.positionChecked = {\n\n idx: item.event_person_order,\n event_guest_id: item.id,\n prefered_order: \"\",\n checked: null,\n confirmation_status: statusObject,\n send_status: sendStatusObject,\n is_companions_allowed: isCompanionsAllowedObject,\n parking_id: $scope.guest.parking_id,\n zone: $scope.guest.zone,\n companions_zone: $scope.guest.companions_zone,\n max_companions_allowed: $scope.guest.max_companions_allowed,\n num_companions: $scope.guest.num_companions,\n event_guest_accreditation_id: $scope.guest.event_guest_accreditation_id,\n event_guest_accreditation: (accreditation !== undefined ? accreditation : {}),\n send_invitation: $scope.guest.send_invitation,\n allow_parking: $scope.guest.allow_parking,\n max_vehicles_allowed: $scope.guest.max_vehicles_allowed,\n num_vehicles: $scope.guest.num_vehicles,\n\n };\n\n\n $log.debug('$scope.guest')\n $log.debug($scope.guest)\n\n $log.debug('$scope.positionChecked');\n $log.debug($scope.positionChecked);\n\n // Creamos variable para almacenar el estado previo de los acopmañantes \n let previousGuestInfo = $scope.positionChecked.is_companions_allowed;\n\n if (!$scope.$$phase) $scope.$apply();\n\n $scope.confirmation_status_value = statusObject.value;\n\n Restangular.all('EventsParkings').getList({event_id: $stateParams.id}).then(function (parkings) {\n $scope.selectParkings = parkings;\n $scope.selectParkings.push({id: 0, name: $filter('translate')('events.guests.no_parking')})\n if (!$scope.$$phase) $scope.$apply();\n });\n\n Restangular.all('EventsGuests/GetZoneOptions').getList({event_id: $stateParams.id}).then(function (results) {\n $scope.selectZones = _.map(results, function (zone) {\n return {id: zone, name: zone}\n });\n $scope.selectZones.push({id: null, name: $filter('translate')('events.guests.no_zone')})\n if (!$scope.$$phase) $scope.$apply();\n });\n\n $scope.addNewParking = function () {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: AddNewParkingModalView,\n controller: \"addParkingModalCtrl\",\n size: 'lg',\n resolve: {\n options: {\n event_id: $stateParams.id\n }\n }\n });\n\n //Response del modal\n $modalInstance.result.then(function (parking) {\n Restangular.all('EventsParkings').post(parking).then(function (result) {\n if (angular.isDefined(result.id)) {\n $scope.selectParkings.push(result);\n $scope.positionChecked.parking_id = result.id;\n }\n });\n\n if (!$scope.$$phase) $scope.$apply();\n });\n }\n\n $scope.addNewZone = function (type) {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: AddNewZoneModalView,\n size: \"lg\",\n controller: \"addNewZoneModalCtrl\",\n resolve: {\n options: {\n only_one: true\n }\n }\n });\n //Response del modal\n $modalInstance.result.then(function (option) {\n $scope.selectZones.push({id: option.name, name: option.name});\n if (type == 'zone') {\n $scope.positionChecked.zone = option.name;\n } else if (type == 'companions_zone') {\n $scope.positionChecked.companions_zone = option.name;\n }\n\n if (!$scope.$$phase) $scope.$apply();\n });\n }\n\n if ($scope.guest != null) {\n if (isDefinedAndNotNull($scope.guest.principalPhone)) $scope.showContactInfoPhone = true;\n if (isDefinedAndNotNull($scope.guest.principalEmail)) $scope.showContactInfoEmail = true;\n $scope.positionChecked.prefered_order = item.event_person_order; //Siempre tienen una posición\n\n // Seleccionar los cargos position_id\n if (item.person_position_id != 0) {\n\n // Esto lo mira desde la BD\n angular.forEach($scope.guest.persons_positions, function (pp) {\n if (pp.id == item.person_position_id) {\n pp.checked = true;\n $scope.positionChecked.checked = pp.id;\n } else {\n pp.checked = false;\n }\n });\n }\n }\n\n $scope.gridCompanion = {\n enablePaginationControls: false,\n paginationPageSize: 2,\n paginationPageSizes: [2],\n rowHeight: 45,\n columnDefs: [\n {name: 'id', visible: false, exporterSuppressExport: true},\n {\n name: 'name', displayName: 'Nombre',\n cellTemplate: '
{{row.entity.name}}
{{row.entity.position}}
',\n },\n {\n name: ' ',\n width: 100,\n exporterSuppressExport: true,\n enableSorting: false,\n enableHiding: false,\n enableFiltering: false,\n enableColumnMenu: false,\n cellTemplate: gridService.actionTemplate([\n {\n title: \"Borrar\",\n action: 'ng-click=\"grid.appScope.deleteCompanion(row.entity.id);\"',\n cssIconClass: \"fa fa-remove\"\n }\n ], {cssClass: \"pull-right\"})\n },\n ]\n };\n var rows_data = new Array();\n if (isDefinedAndNotNullOrEmpty($scope.guest.persons1)) {\n\n angular.forEach($scope.guest.persons1, function (row) {\n rows_data.push({\n id: row.id,\n name: row.name + \" \" + (isDefinedAndNotNull(row.surname) ? row.surname : \"\") + \" \" + (isDefinedAndNotNull(row.lastname) ? row.lastname : \"\"),\n position: isDefinedAndNotNull(row.position) ? row.position : \"\"\n });\n });\n\n $scope.gridCompanion.data = rows_data;\n\n } else {\n $scope.gridCompanion.data = [];\n }\n\n checkCompanion($scope.positionChecked);\n\n $scope.checkStatus = function (status) {\n\n if (angular.isDefined(status)) {\n\n // Sacamos el modal si tenemos acompañantes nominativos y pasamos a un estado que no los permita. El booleano de acompañantes en eventos tiene el nombre mal puesto, cuando está puesto a true no los permite\n /*\n\n if (($scope.confirmation_status_value == \"delegated\" || $scope.gridCompanion.data.length > 0) && (status.is_companions_allowed.value == false || (status.is_companions_allowed.value == null && event.is_companions_allowed == true))) {\n\n modalService.confirm({\n title: $filter('translate')('events.guests.delete_delegated_title'),\n message: $filter('translate')('events.guests.delete_delegated') + \"?\",\n onAccept: function () {\n\n // Si aceptas actualizamos el último estado almacenado \n previousGuestInfo = $scope.positionChecked.is_companions_allowed;\n\n Restangular.all('EventsGuests').customPOST({}, \"DeleteRelatedGuests\", {guest_id: status.event_guest_id}).then(function (result) {\n $scope.gridCompanion.data = [];\n $scope.saveGuestInfo();\n }, function (response) {\n $log.error(\"Error with status code\", response.status);\n });\n },\n onCancel: function () {\n status.is_companions_allowed = previousGuestInfo;\n }\n })\n }\n\n */\n\n if (status.num_companions > 0 || $scope.positionChecked.is_companions_allowed ==false) {\n modalService.confirm({\n title: $filter('translate')('events.guests.delete_delegated_title'),\n message: $filter('translate')('events.guests.delete_delegated') + \"?\",\n onAccept: function () {\n Restangular.all('EventsGuests').customPOST({}, \"DeleteRelatedGuests\", { guest_id: status.event_guest_id }).then(function (result) {\n $scope.gridCompanion.data = [];\n $scope.positionChecked.max_companions_allowed = 0;\n $scope.positionChecked.num_companions = 0;\n $scope.positionChecked.is_companions_allowed.value = null;\n $scope.companion = false;\n $scope.companionDelegateText = false;\n $scope.companionText = false;\n $scope.saveGuestInfo();\n }, function (response) {\n $log.error(\"Error with status code\", response.status);\n });\n }\n });\n\n } else {\n previousGuestInfo = $scope.positionChecked.is_companions_allowed;\n $scope.confirmation_status_value = status.confirmation_status.value;\n checkCompanion(status);\n if ($scope.confirmation_status_value == \"confirmed\") {\n\n $scope.eventsConfirmableActs.forEach(function (act) {\n $scope.eventsProgramsActSelected[act.id] = \"attend\";\n });\n $scope.checkPartialAttendance();\n\n } else {\n $scope.partial = $filter('translate')('events.guests.partial_attendance_uncheck');\n $scope.confirmationStatus[1].name = $filter('translate')('events.guests.confirmed') + ' ' + $scope.partial;\n }\n\n }\n }\n }\n\n $scope.changeAccreditation = function (accreditation) {\n $scope.positionChecked.event_guest_accreditation = accreditation;\n }\n\n $scope.addCompanion = function () {\n\n let $modalInstance = $uibModal.open({\n animation: true,\n template: SearchGuestsModalView,\n size: \"lg\",\n controller: \"SearchGuestsModalCtrl\",\n resolve: {\n options: function () {\n return {\n companion: true,\n total: $scope.gridCompanion.data.length,\n limit: $scope.positionChecked.max_companions_allowed\n };\n }\n }\n });\n\n //Response del modal\n $modalInstance.result.then(function (data) {\n angular.forEach(data, function (item) {\n $scope.gridCompanion.data.push(item); //añadimos los buscados\n });\n if (!$scope.$$phase) $scope.$apply();\n }, function () {\n\n console.info('Modal dismissed at: ' + new Date());\n\n if (!$scope.$$phase) $scope.$apply();\n });\n };\n\n $scope.deleteCompanion = function (id) {\n angular.forEach($scope.gridCompanion.data, function (guest, idx) {\n if (guest.id == id) {\n $scope.gridCompanion.data.splice(idx, 1);\n }\n });\n }\n });\n });\n\n var checkCompanion = function (guest) {\n if (guest.is_companions_allowed.value == null && !event.is_companions_allowed) {\n $scope.positionChecked.max_companions_allowed = event.default_companions_limit;\n } else if (guest.is_companions_allowed.value) {\n if(guest.max_companions_allowed>=0){\n $scope.positionChecked.max_companions_allowed = guest.max_companions_allowed;\n }else{\n $scope.positionChecked.max_companions_allowed = 1;\n }\n }\n\n $scope.companionTexts.tab_title = $filter('translate')('events.guests.title_companions');\n\n if (guest.confirmation_status.value == 'delegated') {\n $scope.companionTexts.tab_title = $filter('translate')('events.guests.delegated_person');\n\n $scope.positionChecked.max_companions_allowed = 1;\n $scope.companion = true;\n $scope.companionDelegateText = true;\n $scope.companionText = false;\n\n } else if (guest.confirmation_status.value == 'confirmed' && (guest.is_companions_allowed.value || (guest.is_companions_allowed.value == null && !event.is_companions_allowed))) {\n\n $scope.companion = true;\n $scope.companionText = true;\n $scope.companionDelegateText = false;\n\n } else {\n\n $scope.companion = false;\n $scope.companionDelegateText = false;\n $scope.companionText = false;\n\n }\n $scope.showCompanionList = true;\n }\n\n $scope.modalSendMail = function (mail_to, all) {\n\n if (angular.isDefined(all)) {\n var personIds = [];\n angular.forEach($scope.filteredInvitedGuests, function (guest) {\n if (angular.isDefined(guest.value) && guest.value != \"\") { //Sólo se envia email a los seleccionados.\n personIds.push(guest.person_id);\n }\n });\n var options = {\n persons_ids: personIds\n };\n if (personIds.length > 0) {\n /* Eliminado a la espera de saber a que direcciones de las del invitado se pretende enviar el eamil este... yo puedo\n * dejarlo tal cual, mandarle el event_guests_ids y que sea lo que dios quiera, pero no sabrá el usuario si se ha enviao o no el email.\n *var params = {\n entity_type: \"events\",\n entity_type_id: $stateParams.id,\n event_guests_ids: guestsIds,\n mail_account_id: event.mail_account_id,\n mail_account_reply: event.reply_to,\n documents: { for_event_guest: true }\n };\n notificationService.notificationMail({\n params: params,\n onAccept: function (data) {\n toastr.success($filter('translate')('notifications.sending_mail_success'));\n }\n });*/\n /* $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + 'EventsGuests/getEmailsFromGuests',\n params: options\n }).then(function (results, status, headers, config) {\n mail_to = results.data.emails;\n if (event.bcc == null) event.bcc = \"\";\n if (mail_to != \"\") {\n modalService.mail({\n title: $filter('translate')('events.work_team.send_mail'),\n cco: mail_to + \",\" + event.bcc,\n module: \"guests/email\",\n code: $stateParams.id + \"\",\n onAccept: function () {\n toastr.success($filter('translate')('events.work_team.email_sent_success'));\n if (!results.data.success) {\n //No se ha podido enviar a todos los correos porque no existe uno público.\n modalService.message({\n title: \"Error\",\n message: results.data.message,\n onAccept: function () { }\n });\n }\n \n },\n onCancel: function (response) {\n $scope.errorMessage = response.message;\n }\n });\n } else {\n modalService.message({\n title: \"Error\",\n message: $filter('translate')('events.guests.send_mail_not_have_public_email_to'),\n onAccept: function () { }\n });\n }\n });*/\n }\n } else {\n /* modalService.mail({\n title: $filter('translate')('events.work_team.send_mail'),\n to: mail_to,\n module: \"guests/email\",\n code: $stateParams.id + \"\",\n onAccept: function () {\n toastr.success($filter('translate')('events.work_team.email_sent_success'));\n },\n onCancel: function (response) {\n $scope.errorMessage = response.message;\n }\n });*/\n }\n }\n $scope.saveGuestInfo = function () {\n\n var error = \"\";\n\n // Validación de vehículos\n\n if ($scope.positionChecked.allow_parking == true && $scope.positionChecked.max_vehicles_allowed < 1) {\n error = $filter('translate')('events.min_vehicles_limit_exception_message');\n }\n\n if ($scope.positionChecked.allow_parking == true && ($scope.positionChecked.max_vehicles_allowed < $scope.positionChecked.num_vehicles)) {\n error = $filter('translate')('events.guests.max_vehicles_limit_exception_message');\n }\n\n // Si no permitimos parking cambiamos el número de vehículos a 0 \n if ($scope.positionChecked.allow_parking == false) {\n $scope.positionChecked.max_vehicles_allowed = 0;\n }\n\n\n if ($scope.positionChecked.is_companions_allowed == true && $scope.positionChecked.max_companions_allowed < 1) {\n error = $filter('translate')('events.min_companions_limit_exception_message');\n }\n\n // Validaciones de acompañantes.\n if ($scope.positionChecked.confirmation_status != \"delegated\" && ($scope.gridCompanion.data.length > $scope.positionChecked.num_companions || $scope.positionChecked.num_companions == 0)) $scope.positionChecked.num_companions = $scope.gridCompanion.data.length;\n if ($scope.positionChecked.max_companions_allowed < $scope.positionChecked.num_companions) {\n error = \"No se puede tener más acompañantes que los que se permite en el evento.\";\n }\n\n // Seleccionamos los actos a los que invitado esta invitado.\n if (error !== \"\") {\n modalService.message({\n title: $filter('translate')('events.guests.title_modal_not_order'),\n message: error,\n onAccept: function () {\n }\n });\n } else {\n\n // Si no permitimos invitados, asignamos el número de acompañantes a 0\n\n if ($scope.positionChecked.is_companions_allowed.value == false) {\n $scope.positionChecked.max_companions_allowed = 0;\n }\n\n let positionId: any = \"\";\n if (isDefinedAndNotNullOrEmpty($scope.positionChecked.checked)) {\n positionId = $scope.positionChecked.checked;\n }\n\n if (!isDefinedAndNotNullOrEmpty($scope.positionChecked.prefered_order)) {\n modalService.message({\n title: $filter('translate')('events.guests.title_modal_not_order'),\n message: $filter('translate')('events.guests.message_modal_not_order'),\n onAccept: function () {\n }\n });\n } else {\n var row = $scope.gridCompanion.data;\n var ids = new Array();\n angular.forEach(row, function (row) {\n ids.push(row.id);\n });\n\n var totalNumCompanions = 0;\n if ($scope.gridCompanion.data.length > 0 && Number($scope.positionChecked.num_companions) == $scope.gridCompanion.data.length) {\n totalNumCompanions = $scope.positionChecked.num_companions;\n } else {\n if ($scope.positionChecked.num_companions == 0) {\n totalNumCompanions = $scope.gridCompanion.data.length;\n } else {\n totalNumCompanions = $scope.positionChecked.num_companions;\n }\n }\n\n $scope.checkPartialAttendance();\n\n var options = {\n event_id: event.id,\n eventGuestsNewOrder: $scope.positionChecked.prefered_order,\n event_guest_id: $scope.positionChecked.event_guest_id,\n status: $scope.positionChecked.confirmation_status.value,\n person_position_id: positionId,\n eventGuestsReferred: ids,\n send_status: $scope.positionChecked.send_status.value,\n is_companions_allowed: $scope.positionChecked.is_companions_allowed.value,\n parking: $scope.positionChecked.parking,\n parking_id: $scope.positionChecked.parking_id,\n zone: $scope.positionChecked.zone,\n companions_zone: $scope.positionChecked.companions_zone,\n max_companions_allowed: $scope.positionChecked.max_companions_allowed,\n num_companions: totalNumCompanions,\n event_guest_accreditation_id: (angular.isDefined($scope.positionChecked.event_guest_accreditation) && $scope.positionChecked.event_guest_accreditation != null ? $scope.positionChecked.event_guest_accreditation.id : null),\n send_invitation: $scope.positionChecked.send_invitation,\n partial_attendance: $scope.guest.partial_attendance,\n allow_parking: $scope.positionChecked.allow_parking,\n max_vehicles_allowed: $scope.positionChecked.max_vehicles_allowed,\n };\n\n\n // Comprobamos si va a asisitir solo a algunos actos para asignale una confirmación parcial\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + 'EventsGuests/SaveEventGuest',\n params: options\n }).then(function (results, status, headers, config) {\n let event_acts_ids = [];\n let event_acts_show_ids = [];\n angular.forEach($scope.eventsProgramsActSelected, function (item, idx) {\n if (item == \"attend\") event_acts_ids.push(idx);\n if (item == \"show\") event_acts_show_ids.push(idx);\n });\n\n // if (event_acts_ids.length > 0 || event_acts_show_ids.length > 0) {\n var epag = {\n event_acts_ids: event_acts_ids,\n event_acts_show_ids: event_acts_show_ids, \n guest_id: item.id,\n event_id: event.id\n }\n\n // Guardamos los actos\n\n $http({\n\n method: 'post',\n url: (window as any).CONFIG.api_url + 'EventsGuests/SetActsGuest',\n data: epag,\n\n }).then(function (resultsImage, status, headers, config) {\n\n });\n\n //}\n\n let events_annexes_ids = [];\n angular.forEach($scope.eventsAnnexesSelected, function (item, idx) {\n if (item == \"checked\") {\n events_annexes_ids.push(idx);\n }\n });\n\n var annexes = {\n event_guest_id: item.id,\n event_id: event.id,\n events_annexes_ids: events_annexes_ids\n }\n\n // Guardamos los tipos de documentos\n $http({\n method: 'post',\n url: (window as any).CONFIG.api_url + 'EventsGuests/SetAnnexesGuest',\n data: annexes,\n }).then(function (resultsImage, status, headers, config) {\n\n });\n\n $uibModalInstance.close(); //cerramos la ventanica\n var programActs = [];\n\n angular.forEach($scope.eventsProgramsActs, function (programAct) {\n var menus = [];\n if (programAct.FK_events_programs_acts_menus_events_programs_acts.selected != null) {\n menus.push(programAct.id);\n menus.push(programAct.FK_events_programs_acts_menus_events_programs_acts.selected.id);\n menus.push(item.id);\n var isPrincipal = (programAct.FK_events_programs_acts_menus_events_programs_acts.selected.is_principal ? 1 : 0);\n menus.push(isPrincipal)\n programActs.push(menus);\n }\n });\n\n $http({\n method: 'post',\n url: (window as any).CONFIG.api_url + 'EventsProgramsActs/SaveConfigMenus',\n params: {event_id: event.id},\n data: programActs\n }).then(function (results, status, headers, config) {\n $uibModalInstance.dismiss('cancel');\n });\n\n //Guardamos las notas.\n //if ($scope.gridOptionsGuestsNotes.data.length > 0) {\n\n Restangular.all(\"EventsGuestsNotes\").customPOST($scope.gridOptionsGuestsNotes.data, \"SaveGuestNotes\", {event_guest_id: $scope.positionChecked.event_guest_id}).then(function (results) {\n });\n\n //}\n });\n }\n }\n };\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n $scope.gridOptionsGuestsNotes = {\n pdfTitle: $filter('translate')('events.guests.guests_notes'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n enableSorting: true,\n paginationPageSizes: [5, 15, 30],\n paginationPageSize: 5,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n {name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true},\n {\n name: 'created_at',\n displayName: $filter('translate')('events.guests.created_at'),\n maxWidth: 125,\n minWidth: 80,\n type: 'date',\n cellFilter: 'toLocalDate | date:\\'dd/MM/yyyy\\'',\n customFormatFn: function (value) {\n if (value != null) {\n var fecha = new Date(value);\n return $filter('date')(fecha, 'dd/MM/yyyy');\n }\n return \"\";\n },\n enableFiltering: false,\n enableColumnMenu: false\n },\n {\n name: 'name_created',\n displayName: $filter('translate')('events.guests.name_created_note'),\n visible: true,\n enableHiding: false,\n exporterSuppressExport: false,\n enableFiltering: false\n },\n {\n name: 'notes',\n displayName: $filter('translate')('events.guests.guests_notes'),\n enableFiltering: false,\n enableHiding: false,\n enableColumnMenu: false,\n cellTemplate: '',\n },\n {\n name: ' ',\n width: 200,\n exporterSuppressExport: true,\n enableSorting: false,\n enableHiding: false,\n enableFiltering: false,\n enableColumnMenu: false,\n cellTemplate: gridService.actionTemplate([\n {\n title: $filter('translate')('events.button_edit'),\n action: 'ng-click=\"grid.appScope.addEventGuestNotes(row.entity)\"',\n cssIconClass: \"fa fa-edit\"\n },\n {\n title: $filter('translate')('events.button_delete'),\n action: 'ng-click=\"grid.appScope.deleteEventGuestNotes(row.entity);\" ',\n cssIconClass: \"fa fa-remove\"\n }\n ], {cssClass: \"pull-right\"})\n },\n ],\n getData: function (options) {\n\n var deferred = $q.defer();\n options.event_guest_id = item.id;\n Restangular.all('EventsGuestsNotes').getList(options).then(function (result) {\n var data = result;\n data.totalRows = result.totalRows;\n $scope.totalRows = result.totalRows;\n deferred.resolve(data);\n })\n return deferred.promise;\n\n }\n };\n\n $scope.addEventGuestNotes = function (egnotes) {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: GuestNotesModalView,\n controller: \"GuestNotesModalCtrl\",\n size: 'md',\n resolve: {\n event_guest_notes: function () {\n return egnotes\n },\n event_guest_id: function () {\n return item.id;\n }\n }\n });\n\n //Retorno de los datos desde el modal.\n $modalInstance.result.then(function (resultModal) {\n\n if ((angular.isUndefined(resultModal.id) || resultModal.id == null) && resultModal.is_new) $scope.gridOptionsGuestsNotes.data.push(resultModal);\n if (typeof $scope.refetchEvents == 'function') $scope.refetchEvents();\n\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n // $scope.identity = {};\n });\n };\n\n //Delete menu desde el listado\n $scope.deleteEventGuestNotes = function (egnotes) {\n modalService.confirm({\n title: $filter('translate')('events.guests.button_delete_notes_title'),\n message: $filter('translate')('events.guests.delete_message_notes_message') + \"?\",\n onAccept: function () {\n $scope.gridOptionsGuestsNotes.data.splice($scope.gridOptionsGuestsNotes.data.indexOf(egnotes), 1);\n }\n });\n };\n\n $scope.gridOptionNotifications = {\n pdfTitle: $filter('translate')('notifications.pdf_title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n paginationPageSizes: [10, 20, 30],\n paginationPageSize: 10,\n enableFiltering: false,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n {name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true},\n {\n name: 'date',\n displayName: $filter('translate')('notifications.subject'),\n enableFiltering: true,\n enableHiding: false,\n enableColumnMenu: false,\n cellTemplate: '
{{ row.entity.FK_notifications_to_notifications_emails.subject }}
',\n },\n {\n name: 'subject',\n displayName: $filter('translate')('notifications.date'),\n enableFiltering: true,\n enableHiding: false,\n enableColumnMenu: false,\n cellTemplate: '
{{ row.entity.FK_notifications_to_notifications_emails.date | toLocalDate | date: \"dd/MM/yyyy HH:mm\" }}
',\n },\n {\n name: ' ',\n width: 150,\n exporterSuppressExport: true,\n enableSorting: false,\n enableHiding: false,\n enableFiltering: false,\n enableColumnMenu: false,\n cellTemplate: gridService.actionTemplate([\n {\n title: $filter('translate')('notifications.button_view'),\n action: 'ng-click=\"grid.appScope.goToEditNotification(row.entity)\"',\n cssIconClass: \"fa fa-eye\"\n },\n ], {cssClass: \"pull-right\"})\n },\n ],\n getData: function (options) {\n return Restangular.all('EventsGuests/' + item.id + '/notifications').getList();\n }\n };\n $scope.goToEditNotification = function (rowEntity) {\n $uibModalInstance.dismiss('cancel');\n $state.go(\"notifications.edit\", {notificationId: rowEntity.notification_email_id});\n };\n\n $scope.gridOptionsGuestsZones = {\n pdfTitle: $filter('translate')('spaces.title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n paginationPageSizes: [10, 20, 30],\n paginationPageSize: 10,\n enableFiltering: false,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n {name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true},\n {\n name: 'space',\n displayName: $filter('translate')('events.guests.space'),\n minWidth: 400,\n enableFiltering: true,\n enableHiding: false,\n enableColumnMenu: false,\n cellTemplate: '
{{ row.entity.FK_events_guests_zones_events_spaces_zones.FK_events_spaces_zones_events_spaces.name }}
',\n },\n {\n name: 'zone',\n displayName: $filter('translate')('events.guests.zone'),\n enableFiltering: true,\n enableHiding: false,\n enableColumnMenu: false,\n cellTemplate: '
{{ row.entity.FK_events_guests_zones_events_spaces_zones.name }}
',\n },\n {\n name: 'prefered_position',\n width: 100,\n displayName: $filter('translate')('events.guests.prefered_position'),\n enableFiltering: true,\n enableHiding: false,\n enableColumnMenu: false,\n cellTemplate: '
{{ row.entity.prefered_position }}
',\n },\n {\n name: 'row',\n width: 100,\n\n displayName: $filter('translate')('events.guests.row'),\n enableFiltering: true,\n enableHiding: false,\n enableColumnMenu: false,\n cellTemplate: '
{{ row.entity.file }}
',\n },\n {\n name: 'seat',\n width: 100,\n\n displayName: $filter('translate')('events.guests.seat'),\n enableFiltering: true,\n enableHiding: false,\n enableColumnMenu: false,\n cellTemplate: '
{{ row.entity.position }}
',\n },\n {\n name: ' ',\n width: 200,\n exporterSuppressExport: true,\n enableSorting: false,\n enableHiding: false,\n enableFiltering: false,\n enableColumnMenu: false,\n cellTemplate: gridService.actionTemplate([\n {\n title: $filter('translate')('events.button_edit'),\n action: 'ng-click=\"grid.appScope.addEventGuestSpaceZone(row.entity)\"',\n cssIconClass: \"fa fa-edit\"\n },\n {\n title: $filter('translate')('events.button_delete'),\n action: 'ng-click=\"grid.appScope.deleteEventGuestSpaceZone(row.entity);\" ',\n cssIconClass: \"fa fa-remove\"\n }\n ], {cssClass: \"pull-right\"})\n },\n ],\n getData: function (options) {\n return Restangular.all('EventsSpaceGuests/' + item.id + '/zones').getList();\n }\n };\n \n $scope.deleteEventGuestSpaceZone = function (egzone) {\n modalService.confirm({\n title: $filter('translate')('events.guests.delete_event_guest_space_zone_title'),\n message: $filter('translate')('events.guests.delete_event_guest_space_zone_message'),\n onAccept: function () {\n $scope.gridOptionsGuestsZones.data.splice($scope.gridOptionsGuestsZones.data.indexOf(egzone), 1);\n Restangular.one('EventsSpaceGuests/' + item.id + '/zones', egzone.id).remove().then(function (result) {\n });\n }\n });\n };\n\n $scope.addEventGuestSpaceZone = async function (egzone) {\n\n let spaceAssignedIds = $scope.gridOptionsGuestsZones.data\n .map(space => space.FK_events_guests_zones_events_spaces_zones.event_space_id);\n\n let spaces = await eventService.getSpaces(event.id);\n\n // $log.debug(spaces);\n // Deshabilitamos los espacios que ya tiene asignados el invitado\n spaces.forEach(function(space) {\n if (spaceAssignedIds.includes(space.id)) space.disabled = true;\n\n });\n\n $log.debug(spaces);\n\n let $modalInstance = $uibModal.open({\n animation: true,\n template: GuestSpaceZonesModalView,\n controller: \"GuestSpaceZonesModalCtrl\",\n size: 'md',\n resolve: {\n event_guest_zone: function () {\n return egzone\n },\n event_guest_id: function () {\n return item.id;\n },\n spaces: function () {\n return spaces;\n }\n }\n });\n\n //Retorno de los datos desde el modal.\n $modalInstance.result.then(function (resultModal) {\n\n if ((angular.isUndefined(resultModal.id) || resultModal.id == null) && resultModal.is_new) {\n\n $scope.gridOptionsGuestsZones.data.push(resultModal);\n\n let eventGuestZone = eventService.addEventGuestSpaceZone(event.id, resultModal.spaceSelected.id,\n resultModal.event_guest_zone.id, item.id).$object;\n\n $scope.gridOptionsGuestsZones.data.push(eventGuestZone);\n\n } else {\n\n let eventGuestZone = eventService.modifyEventGuestSpaceZone(event.id, resultModal.spaceSelected.id,\n resultModal.event_guest_zone.id, item.id).$object;\n $scope.gridOptionsGuestsZones.data.splice($scope.gridOptionsGuestsZones.data.indexOf(egzone), 1);\n\n $scope.gridOptionsGuestsZones.data.push(eventGuestZone);\n\n }\n\n // if (typeof $scope.refetchEvents == 'function') $scope.refetchEvents();\n\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n // $scope.identity = {};\n });\n };\n\n $scope.gridOptionVehicles = {\n pdfTitle: $filter('translate')('vehicles.pdf_title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n paginationPageSizes: [10, 20, 30],\n paginationPageSize: 10,\n enableFiltering: false,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n {name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true},\n {\n name: 'car_manufacturer',\n displayName: $filter('translate')('events.guests.guest_vehicle_manufacturer'),\n enableFiltering: true,\n enableHiding: false,\n enableColumnMenu: false,\n },\n {\n name: 'car_model',\n displayName: $filter('translate')('events.guests.guest_vehicle_model'),\n enableFiltering: true,\n enableHiding: false,\n enableColumnMenu: false,\n },\n {\n name: 'car_color',\n displayName: $filter('translate')('events.guests.guest_vehicle_color'),\n enableFiltering: true,\n enableHiding: false,\n enableColumnMenu: false,\n },\n {\n name: 'car_plate',\n displayName: $filter('translate')('events.guests.guest_vehicle_plate'),\n enableFiltering: true,\n enableHiding: false,\n enableColumnMenu: false,\n },\n {\n name: 'driver_name',\n displayName: $filter('translate')('events.guests.guest_vehicle_driver_name'),\n enableFiltering: true,\n enableHiding: false,\n enableColumnMenu: false,\n },\n {\n name: 'driver_identification_number',\n displayName: $filter('translate')('events.guests.guest_vehicle_driver_identification'),\n enableFiltering: true,\n enableHiding: false,\n enableColumnMenu: false,\n },\n {\n name: ' ',\n width: 150,\n exporterSuppressExport: true,\n enableSorting: false,\n enableHiding: false,\n enableFiltering: false,\n enableColumnMenu: false,\n cellTemplate: gridService.actionTemplate([\n {\n title: $filter('translate')('general.button_edit'),\n action: 'ng-click=\"grid.appScope.addEventGuestVehicle(row.entity, true)\"; ng-if=\"grid.appScope.allowWrite\"',\n cssIconClass: \"fa fa-edit\"\n },\n {\n title: $filter('translate')('general.button_delete'),\n action: 'ng-click=\"grid.appScope.deleteEventGuestVehicle(row.entity);\" ng-if=\"grid.appScope.allowWrite\"',\n cssIconClass: \"fa fa-remove\"\n }\n ], {cssClass: \"pull-right\"})\n },\n ],\n getData: function (options) {\n\n return Restangular.all('EventsGuestsVehicles').getList({event_guest_id: item.id}); // TODO\n }\n };\n\n $scope.deleteEventGuestVehicle = function (egVehicle) {\n\n modalService.confirm({\n title: $filter('translate')('events.guests.guest_vehicle_delete'),\n message: $filter('translate')('events.guests.guest_vehicle_delete_message'),\n onAccept: function () {\n // Lo sacamos del grid\n egVehicle.remove().then(function (result) {\n $scope.gridOptionVehicles.loadData(false);\n // No sé si hacerlo así\n $scope.positionChecked.num_vehicles = result;\n })\n\n }, function(response) {\n alert(\"Error al borrar\")\n }\n });\n }\n $scope.addEventGuestVehicle = function (egVehicle, is_edit = false) {\n\n $log.debug(`$scope.positionChecked.num_vehicles = ${$scope.positionChecked.num_vehicles} && $scope.positionChecked.max_vehicles_allowed = ${$scope.positionChecked.max_vehicles_allowed}`);\n\n // Comprobamos si hemos llegado al límite\n if ($scope.positionChecked.num_vehicles >= $scope.positionChecked.max_vehicles_allowed && !is_edit) {\n\n return modalService.message({\n title: $filter('translate')('events.guests.max_vehicles_reached'), //\"Acción no compatible con todos los elementos\",\n message: $filter('translate')('events.guests.max_vehicles_reached_message'), //\"Esta acción requiere que el invitado tenga una coincidencia en la aplicación. Solo se ha aplicado a los invitados pertinentes.\",//$filter('translate')('events.image_size_limit') + \"
\" + limit_image_width + \"X\" + limit_image_height,\n onAccept: function () { }\n });\n\n };\n\n let $modalInstance = $uibModal.open({\n animation: true,\n template: GuestVehiclesModalView,\n controller: \"GuestVehiclesModalCtrl\",\n size: 'md',\n resolve: {\n event_guest_vehicle: function () {\n return egVehicle\n },\n event_guest_id: function () {\n return item.id;\n }\n }\n });\n\n //Retorno de los datos desde el modal.\n $modalInstance.result.then(function (resultModal) {\n\n $log.debug('resultModal :' + resultModal)\n $scope.gridOptionVehicles.loadData(false);\n $scope.positionChecked.num_vehicles = resultModal;\n if (typeof $scope.refetchEvents == 'function') $scope.refetchEvents();\n\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n });\n }\n\n }])\n\n .controller(\"AssignIdentifierModalCtrl\", ['$scope', '$uibModalInstance', 'event_guest', 'Restangular', '$http', 'modalService', '$filter', '$rootScope', function ($scope, $uibModalInstance, event_guest, Restangular, $http, modalService, $filter, $rootScope) {\n //Comprobamos si tiene permiso escritura\n\n $scope.event_guest = event_guest;\n if (event_guest.FK_events_guests_identifiers != null) $scope.event_guest.identifier = event_guest.FK_events_guests_identifiers.value;\n //$scope.event_guest.identifier = \"\";\n\n Restangular.all(\"IdentifiersTypes\").getList().then(function (identifiers_types) {\n $scope.identifiers_types = identifiers_types;\n $scope.event_guest.identifier_type = identifiers_types[0];\n });\n\n $scope.keyPressed = function (keyEvent) {\n if (keyEvent.which === 13)\n $scope.saveIdentifier($scope.event_guest.identifier);\n }\n $scope.saveIdentifier = function (identifier) {\n\n let data = {\n value: identifier,\n identifier_type_id: $scope.event_guest.identifier_type.id,\n forceSaved: false,\n person_id: $scope.event_guest.person_id,\n event_id: $scope.event_guest.event_id\n }\n\n $uibModalInstance.close(data);\n\n };\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n }]);\n","angular.module(\"events\")\n\n .controller(\"GuestNotesModalCtrl\", ['LoginService', '$scope', '$uibModalInstance', 'event_guest_notes', 'event_guest_id', function (LoginService, $scope, $uibModalInstance, event_guest_notes, event_guest_id) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = true;\n\n if (angular.isUndefined(event_guest_notes)) {\n $scope.guestNotes = {};\n $scope.guestNotes.is_new = true;\n $scope.guestNotes.id = null;\n $scope.guestNotes.name_created = LoginService.get(\"userName\");\n } else {\n $scope.guestNotes = event_guest_notes;\n $scope.guestNotes.is_new = false;\n }\n /*\n * Lo quito para no tener que tratar con html en el listado... es un textarea normal y corriente.\n var font_size = (window as any).CONFIG_TINYMCE[\"no_company_id\"].font_size;\n var font_family = (window as any).CONFIG_TINYMCE[\"no_company_id\"].font_family;\n if (typeof ((window as any).CONFIG_TINYMCE[\"company_id_\" + LoginService.get(\"companyId\")]) !== 'undefined') {\n if (typeof ((window as any).CONFIG_TINYMCE[\"company_id_\" + LoginService.get(\"companyId\")].font_size) !== 'undefined') {\n font_size = (window as any).CONFIG_TINYMCE[\"company_id_\" + LoginService.get(\"companyId\")].font_size;\n }\n if (typeof ((window as any).CONFIG_TINYMCE[\"company_id_\" + LoginService.get(\"companyId\")].font_family) !== 'undefined') {\n font_family = (window as any).CONFIG_TINYMCE[\"company_id_\" + LoginService.get(\"companyId\")].font_family;\n }\n }\n $scope.tinymceDescriptionOptions = {\n resize: true,\n forced_root_block: 'div',\n //min_height: 60,\n //height: 60,\n schema: \"html5\",\n formats: {\n bold: { inline: 'b' },\n underline: { inline: 'u' },\n italic: { inline: 'i' },\n alignleft: { selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div', attributes: { align: \"left\" } },\n aligncenter: { selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div', attributes: { align: \"center\" } },\n alignright: { selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div', attributes: { align: \"right\" } },\n alignjustify: { selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div', attributes: { align: \"justify\" } },\n },\n invalid_elements: 'strong,em',\n fontsize_formats: \"8px 10px 12px 14px 15px 16px 18px 20px 22px 24px 25px 28px 30px 36px \",\n font_formats: 'Arial=Arial;Cambria=Cambria;Courier New=Courier New;Segoe Script=Segoe Script;Tahoma=Tahoma;Verdana=Verdana',\n body_class: 'custom_tinymce_content',\n language: $translate.use().toLowerCase(), //Hay que customizarlo dependiendo del idioma...\n plugins: 'textcolor paste',\n toolbar: \"undo redo | fontsizeselect bold underline italic | forecolor fontselect | alignleft aligncenter alignright alignjustify\",\n menubar: false,\n forced_root_block_attrs: {\n 'style': 'font-family: ' + font_family + '; font-size: ' + font_size\n }\n }*/\n $scope.saveGuestNotes = function () {\n if (angular.isUndefined($scope.guestNotes.event_guest_id)) {\n $scope.guestNotes.event_guest_id = event_guest_id;\n }\n if ($scope.guestNotes.id == null) {\n $scope.guestNotes.created_at = new Date();\n }\n\n $uibModalInstance.close($scope.guestNotes);\n }\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n }])","angular.module(\"events\")\n\n .controller(\"GuestSpaceZonesModalCtrl\", ['LoginService', '$scope', '$uibModalInstance', 'event_guest_zone', 'event_guest_id', 'spaces', '$log',\n function (LoginService, $scope, $uibModalInstance, event_guest_zone, event_guest_id, spaces, $log) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = true;\n\n $scope.spaces = spaces;\n\n $scope.data = {\n spaceSelected: null,\n FK_events_guests_zones_events_spaces_zones: null,\n };\n \n if (angular.isUndefined(event_guest_zone)) {\n $scope.data.event_guest_zone = {};\n $scope.data.is_new = true;\n $scope.data.id = null;\n } else {\n\n $scope.data.id = event_guest_zone.id;\n\n // buscamos en el array de espacios el espacio seleccionado en la zona\n\n angular.forEach($scope.spaces, function (space) {\n\n if (space.id === event_guest_zone.FK_events_guests_zones_events_spaces_zones.event_space_id) {\n $scope.data.spaceSelected = space;\n angular.forEach(space.FK_events_spaces_zones_events_spaces, function (zone) {\n if (zone.id === event_guest_zone.event_zone_id) {\n $scope.data.event_guest_zone = zone;\n }\n });\n }\n\n });\n\n $scope.data.is_new = false;\n\n }\n\n $scope.clearZone = function () {\n\n $log.debug(\"He entrado aquí\");\n $scope.data.event_guest_zone = null;\n };\n\n $scope.saveGuestSpaceZones = function () {\n $uibModalInstance.close($scope.data);\n };\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n }])","angular.module(\"events\")\n\n .controller(\"EventsGuestsImportCtrl\", ['event', 'LoginService', '$rootScope', '$scope', 'Restangular', 'gridService', 'modalService', '$uibModal', '$filter', '$translate', '$stateParams', '$state',\n function (event, LoginService, $rootScope, $scope, Restangular, gridService, modalService, $uibModal, $filter, $translate, $stateParams, $state) {\n\n $scope.people = $stateParams.people;\n $scope.event_id = $stateParams.id;\n $scope.menu_item_id = $stateParams.menu_item_id;\n\n }]);","angular.module(\"events\")\n\n\n .controller(\"SearchGroupModalCtrl\", ['$sce', 'preselect', 'event_id', 'listGroupsIds', 'listPositionsIds', 'LoginService', '$scope', '$uibModalInstance', 'Restangular', 'modalService', '$filter', '$http', '$stateParams', '$q', '$uibModal', 'treeService', 'is_filter', '$rootScope', '$log',\n function ($sce, preselect, event_id, listGroupsIds, listPositionsIds, LoginService, $scope, $uibModalInstance, Restangular, modalService, $filter, $http, $stateParams, $q, $uibModal, treeService, is_filter, $rootScope, $log) {\n \n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"EVENTS_GUESTS_WRITE\");\n $scope.space = \"      \";\n $scope.is_filter = is_filter;\n //var listGroupsIds = listGroupsIds;\n let listGroups: any = {};\n\n $scope.getvalueArray = function (item) {\n let result = [];\n for (var i = 0; i < item; i++) {\n result.push(i);\n }\n return result;\n }\n\n if (preselect) { // Para buscador\n if (!is_filter) {\n // Este es el caso de añadir grupos masivamente. Tienen que estar preselecionado pero no es un filtro.\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + 'EventsGuests/GetGroupsAndSelected',\n params: { event_id: event_id }\n }).then(function (results, status, headers, config) {\n listGroups = treeService.groups(results.data.rows, null);\n $scope.groups = listGroups;\n // ListGroupsIds = _.map(listGroups, function (item) { return item.id; });\n //Seleccionamos los grupos que ya están añadidos. \n angular.forEach(listGroups, function (itemGroup) {\n itemGroup.notice = 0;\n\n // Comprobamos si tiene alguna posicion seleccionada.\n let seleccionar = false;\n angular.forEach(itemGroup.FK_positions_groups, function (position) {\n if (position.selected) seleccionar = true;\n });\n\n var total = 0;\n if (itemGroup.totalInGroup != itemGroup.totalLeft) {\n // Si no están marcados todos los miembros del grupo, no marco su casilla. \n total = itemGroup.totalInGroup - itemGroup.totalLeft;\n itemGroup.notice = total;\n } else if (itemGroup.totalInGroup > 0) {\n // Si están invitados todos los miembros del grupo, marco la casilla.\n itemGroup.checked = true;\n itemGroup.forceChecked = false;\n }\n if (seleccionar) {\n itemGroup.checked = true;\n itemGroup.forceChecked = true;\n }\n });\n });\n } else {\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + 'EventsGuests/GetGroupsAndSelectedFilter',\n params: { event_id: event_id }\n }).then(function (results, status, headers, config) {\n listGroups = treeService.groups(results.data.rows, null);\n $scope.groups = listGroups;\n\n if (typeof (listGroupsIds) !== 'undefined' && listGroupsIds !== null && listGroupsIds.length !== 0) {\n // Si esto existe, hay que preseleccionarlos. \n angular.forEach(listGroups, function (itemGroup) {\n if (listGroupsIds.indexOf(itemGroup.id) > -1) {\n itemGroup.checked = true;\n itemGroup.forceChecked = true;\n if (typeof (listPositionsIds) !== 'undefined' && listPositionsIds !== null && listPositionsIds.length !== 0) {\n angular.forEach(itemGroup.FK_positions_groups, function (position) {\n if (listPositionsIds.indexOf(position.id) > -1) position.selected = true;\n });\n }\n }\n\n // Comprobamos si tiene alguna posicion seleccionada.\n\n let seleccionar = false;\n angular.forEach(itemGroup.FK_positions_groups, function (position) {\n if (position.selected) seleccionar = true;\n });\n\n var total = 0;\n if (itemGroup.totalInGroup != itemGroup.totalLeft) {\n\n // Si no están marcados todos los miembros del grupo, no marco su casilla. \n total = itemGroup.totalInGroup - itemGroup.totalLeft;\n itemGroup.notice = total;\n } else if (itemGroup.totalInGroup > 0) {\n\n // Si están invitados todos los miembros del grupo, marco la casilla.\n itemGroup.checked = true;\n itemGroup.forceChecked = false;\n }\n if (seleccionar) {\n itemGroup.checked = true;\n itemGroup.forceChecked = true;\n }\n });\n }\n });\n }\n } else { //Para filtros\n if (is_filter) {\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + 'EventsGuests/GetGroupsAndSelectedFilter',\n params: { event_id: event_id }\n }).then(function (results, status, headers, config) {\n listGroups = treeService.groups(results.data.rows, null);\n $scope.groups = listGroups;\n\n });\n\n } else {\n var options = { forceGetPosition: true };\n Restangular.all('Groups').getList(options).then(function (results) {\n var data = treeService.groups(results, null);\n $scope.groups = data;\n\n // Seleccionamos los grupos que ya están añadidos.\n // Habria que borrarlo pero así no aparece el texto....\n angular.forEach(data, function (item) {\n var index = (listGroupsIds != null && typeof (listGroupsIds) !== 'undefined' ? listGroupsIds.indexOf(item.id) : -1);\n\n if (index > -1) {\n item.checked = true;\n item.forceChecked = true;\n // Seleccionamos los cargos\n if (typeof (listPositionsIds) !== 'undefined' && listPositionsIds !== null && listPositionsIds.length !== 0) {\n angular.forEach(item.FK_positions_groups, function (position) {\n if (listPositionsIds.indexOf(position.id) > -1) position.selected = true;\n });\n }\n }\n item.notice = 0;\n\n // Obtiene el numero total de ellos... podría hacerlo sumando los del array?\n angular.forEach(listGroups, function (itemGroup) {\n var total = 0;\n if (itemGroup.id == item.id) {\n if (itemGroup.totalInGroup != itemGroup.totalLeft) {\n total = itemGroup.totalInGroup - itemGroup.totalLeft;\n item.notice = total;\n item.totalInGroup = itemGroup.totalInGroup;\n }\n }\n });\n });\n });\n }\n }\n\n $scope.forceChecked = function (id) {\n angular.forEach($scope.groups, function (child) {\n if (child.id == id) {\n child.forceChecked = true;\n child.show = child.checked = true;\n }\n })\n }\n\n $scope.showPositions = function (groupId) {\n var options = { group_id: groupId };\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + '/Groups/GetGroupsPositions',\n params: options\n }).then(function (results, status, headers, config) {\n var positionsFromRole = results.data.rows[0].FK_positions_groups; \n }); \n }\n\n /* Selecciona y deselecciona a todos los hijos*/\n\n $scope.toggleCheckTree = function (item) {\n angular.forEach($scope.groups, function (child) {\n if (child.id === item.id) {\n //Todos los que sean el mismo grupo se modifican. Así si está en ma´s de un sitio no hay problemas.\n child.checked = item.checked;\n child.forceChecked = item.checked;\n if (child.checked) child.show = true;\n }\n angular.forEach(child.FK_groups_groups_groups1, function (group_group) {\n if (group_group.parent_group_id == item.id) {\n child.checked = item.checked;\n if (child.checked) child.show = true;\n child.forceChecked = item.checked;\n $scope.toggleCheckTree(child);\n } else {\n item.forceChecked = item.checked;\n }\n });\n\n // TODO: si es seleccionado, seleccionamos a todos los cargos que componen el grupo\n if (item.checked) {\n if (child.id == item.id) {\n angular.forEach(child.FK_positions_groups, function (position) {\n position.selected = true;\n });\n }\n } else {\n if (child.id == item.id) {\n angular.forEach(child.FK_positions_groups, function (position) {\n position.selected = false;\n });\n }\n }\n });\n }\n $scope.toggleShowTree = function (item, applyToSons = false, forcedState = false ) {\n $log.debug('item')\n $log.debug(item)\n if (applyToSons) {\n var show = forcedState;\n } else {\n var show = item.show = !item.show\n }\n\n if (item.show == false && item.checked == true) {\n item.checked = false;\n }\n angular.forEach($scope.groups, function (child) {\n if (child.id === item.id) {\n // Todos los que sean el mismo grupo se modifican. Así si está en ma´s de un sitio no hay problemas.\n child.show = show\n }\n angular.forEach(child.FK_groups_groups_groups1, function (group_group) {\n if (group_group.parent_group_id == item.id) {\n child.show = show;\n $scope.toggleShowTree(child, true, show);\n } \n });\n });\n }\n\n\n $scope.toggleCheckPosition = function (item) {\n angular.forEach($scope.groups, function (group) {\n // Recorremos todos los grupos y sus cargos para seleccionar o deseleccionar todos los que son los mismos.\n if (group.id == item.group_id) {\n angular.forEach(group.FK_positions_groups, function (position) {\n if (position.id == item.id) position.selected = item.selected;\n });\n }\n });\n }\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n $scope.addGroups = function () {\n\n // 1) que está seleccionado.\n var listIdsPositions = [];\n var checkedGroupsIdsToSend = [];\n\n angular.forEach($scope.groups, function (item) {\n\n angular.forEach(item.FK_positions_groups, function (posi) {\n if (posi.selected) {\n if (checkedGroupsIdsToSend.indexOf(item.id) < 0) checkedGroupsIdsToSend.push(item.id);\n if (listIdsPositions.indexOf(posi.id) < 0) listIdsPositions.push(posi.id);\n }\n });\n\n /*\n if (item.checked) {\n if (checkedGroupsIdsToSend.indexOf(item.id) < 0) checkedGroupsIdsToSend.push(item.id);\n angular.forEach(item.FK_positions_groups, function (posi) {\n if (posi.selected)\n if (listIdsPositions.indexOf(posi.id) < 0) listIdsPositions.push(posi.id);\n });\n } else {\n //esactivamos sus posiciones\n angular.forEach(item.FK_positions_groups, function (posi) {\n posi.selected = false;\n });\n }\n */\n\n });\n $uibModalInstance.close({ groups: $scope.groups, ids: checkedGroupsIdsToSend, listPositions: listIdsPositions });\n }\n\n\n }])\n\n\n\n ;","import HistoricMailsModalInfoView from \"./historic_mails-modal_info.html\";\n\nimport _ from 'lodash';\n\n\nangular.module(\"events\")\n .controller(\"EventsHistoricMailsListCtrl\", ['event', '$rootScope', '$scope', 'Restangular', 'gridService', 'modalService', '$uibModal', '$filter', '$translate', '$stateParams', '$state', 'LoginService',\n function (event, $rootScope, $scope, Restangular, gridService, modalService, $uibModal, $filter, $translate, $stateParams, $state, LoginService) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"EVENTS_HISTORIC_WRITE\");\n if(!Array.isArray($scope.$parent.menusItems)) {\n $state.go(\"events.edit\", { id: $stateParams.id });\n } else {\n let results = $scope.$parent.menusItems.filter(m => m.id === parseInt($stateParams.menu_item_id, 10));\n if(results.length > 0) {\n $scope.allowWrite &&= results[0].editable;\n } else {\n $scope.allowWrite = false;\n }\n }\n $scope.event = event;\n\n $rootScope.breadcrumb = [\n { title: $filter('translate')('events.title'), url: \"events.list\" },\n { title: $scope.event.name, url: \"events.edit({ id: \" + $scope.event.id + \" })\" },\n { title: $filter('translate')('events.historic_mails.historic_mails') }\n ];\n\n $rootScope.title = $scope.event.name + \" - \" + $filter('translate')('events.historic_mails.historic_mails');\n\n\n /**\n * Selector de módulo\n */\n var guestTabSelect = [\n {\n name: $filter('translate')('events.historic_mails.programs'), value: \"guests/program\"\n }, {\n name: $filter('translate')('events.historic_mails.guests'), value: \"guests/invitations\"\n }\n ];\n\n var emailTabSelect = [\n {\n name: $filter('translate')('events.historic_mails.work_team'), value: \"work_team/email\"\n },\n {\n name: $filter('translate')('events.historic_mails.staff_email'), value: \"staff/email\"\n },\n {\n name: $filter('translate')('events.historic_mails.guests'), value: \"guests/email\"\n }\n ];\n\n var notificationTabSelect = [{\n name: $filter('translate')('events.historic_mails.event'), value: \"event/notify\"\n },\n {\n name: $filter('translate')('events.historic_mails.task'), value: \"task/notify\"\n },\n {\n name: $filter('translate')('events.historic_mails.program_acts'), value: \"program_acts/notify\"\n },\n {\n name: $filter('translate')('events.historic_mails.material'), value: \"material/notify\"\n },\n {\n name: $filter('translate')('events.historic_mails.staff_notify'), value: \"staff/notify\"\n }\n ];\n\n var inscriptionsTabSelect = [\n {\n name: $filter('translate')('events.historic_mails.inscriptions_enrolled'), value: \"inscriptions/enrolled\"\n }, {\n name: $filter('translate')('events.historic_mails.inscriptions_confirmation'), value: \"inscriptions/confirmation\"\n },{\n name: $filter('translate')('events.historic_mails.inscriptions_rejected'), value: \"inscriptions/rejected\"\n }\n ];\n\n $scope.selectModules = guestTabSelect;\n\n\n $scope.search = { module: \"guests/invitations\" };\n\n var actualTab = 0;\n\n $scope.changeTab = function (tab) {\n if (actualTab != tab) {\n if (tab == 0) {\n $scope.selectModules = guestTabSelect;\n } else if (tab == 1) {\n $scope.selectModules = emailTabSelect;\n } else if (tab == 2) {\n $scope.selectModules = notificationTabSelect;\n }\n else {\n $scope.selectModules = inscriptionsTabSelect;\n }\n $scope.search.module = undefined;\n actualTab = tab;\n }\n }\n\n $scope.gridOptionHistoricMails = {\n pdfTitle: $filter('translate')('events.historic_mails.historic_mails'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n enableSorting: true,\n paginationPageSizes: [20, 50, 100],\n paginationPageSize: 20,\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n {\n name: 'mail_date', field: 'mail_date', displayName: $filter('translate')('events.historic_mails.mail_date'),\n enableFiltering: false, enableHiding: true, cellFilter: 'toLocalDate | date:\\'dd/MM/yyyy HH:mm\\''\n },\n { name: 'subject', field: 'subject', displayName: $filter('translate')('events.historic_mails.subject'), enableFiltering: true, enableSorting: false, enableHiding: true },\n { name: 'to', field: 'to', displayName: $filter('translate')('events.historic_mails.to'), enableFiltering: true, enableSorting: false, enableHiding: true\n },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: \"\", action: 'ng-click=\"grid.appScope.infoModal(row.entity.id)\"', cssIconClass: \"fa fa-info margin-left-5\"\n },\n { title: \"\", action: 'ui-sref=\"{{row.entity.link}}\" ng-if=\"row.entity.link != null\"', cssIconClass: \"fa fa-link\" },\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n angular.forEach($scope.search, function (value, key) {\n options[key] = value;\n });\n options.event_id = $stateParams.id;\n return Restangular.all('HistoricMails').getList(options);\n }\n };\n\n $scope.makeSearch = function () {\n $scope.gridOptionHistoricMails.loadData(false);\n }\n\n /**\n * Abre el modal con la información del mail.\n */\n $scope.infoModal = function (id) {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: HistoricMailsModalInfoView,\n size: \"lg\",\n controller: \"HistoricMailModalCtrl\",\n resolve: {\n options: function () {\n return { id: id, type: actualTab };\n }\n }\n });\n //Response del modal\n $modalInstance.result.then(function () {\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n if (!$scope.$$phase) $scope.$apply();\n });\n }\n\n\n }])\n\n.controller(\"HistoricMailModalCtrl\", ['$scope', '$uibModalInstance', 'Restangular', 'options', function ($scope, $uibModalInstance, Restangular, options) {\n\n $scope.mail = {};\n $scope.downloadUrl = [];\n $scope.showAttachments = options.type == 1;\n\n Restangular.one(\"HistoricMails\", options.id).get().then(function (mail) {\n $scope.mail = mail;\n _.each($scope.mail.FK_historic_mails_attachments_historic_mails, function (attachment) {\n attachment.downloadUrl = (window as any).CONFIG.api_url + 'HistoricMails/getFile?uid=' + attachment.uid + '&filename=' + attachment.name\n });\n });\n\n $scope.downloadFile = function (attachment) {\n window.open(attachment.downloadUrl, '_blank', '');\n }\n\n $scope.downloadFiles = function () {\n _.each($scope.mail.FK_historic_mails_attachments_historic_mails, function (attachment) {\n window.open(attachment.downloadUrl, '_blank', '');\n });\n }\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n}])\n\n;\n","angular.module(\"events\")\n .controller(\"EventsIndicatorsListCtrl\", ['event', 'LoginService', '$rootScope', '$scope', 'Restangular', 'gridService', 'modalService', '$uibModal', '$filter', '$translate', '$stateParams', '$state', 'treeService',\n function (event, LoginService, $rootScope, $scope, Restangular, gridService, modalService, $uibModal, $filter, $translate, $stateParams, $state, treeService) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"EVENTS_INDICATOR_WRITE\") ;\n if(!Array.isArray($scope.$parent.menusItems)) {\n $state.go(\"events.edit\", { id: $stateParams.id });\n } else {\n let results = $scope.$parent.menusItems.filter(m => m.id === parseInt($stateParams.menu_item_id, 10));\n if(results.length > 0) {\n $scope.allowWrite &&= results[0].editable;\n } else {\n $scope.allowWrite = false;\n }\n }\n\n $rootScope.title = $filter('translate')('events.title') + \" - \" + $filter('translate')('events.indicators_types.indicators_types');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('events.title'), url: \"events.list\" },\n { title: $filter('translate')('events.title'), url: \"events.list\" },\n { title: $filter('translate')('events.indicators_types.indicators_types') }\n ];\n\n $scope.event_indicator = {};\n $scope.eventIndicators = [];\n // $scope.eventIndicatorsIds = [];\n $scope.search = {};\n\n $scope.event = event;\n $rootScope.breadcrumb = [\n { title: $filter('translate')('events.title'), url: \"events.list\" },\n { title: $scope.event.name, url: \"events.edit({ id: \" + $scope.event.id + \" })\" },\n { title: $filter('translate')('events.indicators_types.indicators_types') }\n ];\n $rootScope.title = $scope.event.name + \" - \" + $filter('translate')('events.indicators_types.indicators_types');\n\n Restangular.all('EventsStaff').getList({ event_id: $scope.event.id }).then(function (staffList) {\n $scope.selectStaff = [];\n angular.forEach(staffList, function (eventStaff, idx) {\n var aux = eventStaff.FK_events_staff_staff.name;\n if (eventStaff.FK_events_staff_staff.surname != null) aux += \" \" + eventStaff.FK_events_staff_staff.surname;\n if (eventStaff.FK_events_staff_staff.lastname != null) aux += \" \" + eventStaff.FK_events_staff_staff.lastname;\n $scope.selectStaff.push({\n name: aux,\n id: eventStaff.FK_events_staff_staff.id\n });\n });\n $scope.selectStaff.unshift({\n name: $filter('translate')('events.indicators_types.no_person'),\n id: null\n });\n });\n\n Restangular.all('IndicatorsTypes').getList().then(function (indicatorsTypes) {\n $scope.selectIndicatorsTypes = indicatorsTypes;\n });\n\n $scope.loadIndicators = function () {\n Restangular.all('EventsIndicators').getList({ event_id: $stateParams.id }).then(function (results) {\n $scope.eventIndicators = results;\n var data = treeService.indicators($scope.eventIndicators);\n $scope.gridOptionEventIndicators.data = data;\n /* angular.forEach($scope.eventIndicators, function (eventIndicator, idx) {\n $scope.eventIndicatorsIds.push(eventIndicator.indicators_types.id);\n });*/\n });\n }\n $scope.loadIndicators();\n /* $scope.filterIndicators = function (value) {\n if (angular.isDefined($scope.eventIndicatorsIds) && $scope.eventIndicatorsIds.indexOf(value.id) == -1) {\n return true;\n } else {\n return false;\n }\n }*/\n\n $scope.gridOptionEventIndicators = {\n enablePaginationControls: false,\n showTreeExpandNoChildren: true,\n columnDefs: [\n { name: 'FK_events_indicators_indicators_types.id', visible: false, exporterSuppressExport: true },\n { name: 'name', field: 'FK_events_indicators_staff.name', displayName: $filter('translate')('events.indicators_types.person') },\n { name: 'indicator_name', field: 'FK_events_indicators_indicators_types.name', displayName: $filter('translate')('events.indicators_types.indicator') },\n { name: 'value', displayName: $filter('translate')('events.indicators_types.value') },\n {\n name: 'date', displayName: $filter('translate')('events.indicators_types.date'), width: 200,\n type: 'date', cellFilter: 'toLocalDate | date:\\'dd/MM/yyyy\\''\n },\n {\n name: ' ', width: 100, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('events.indicators_types.delete'), action: 'ng-show=\"row.entity.date\" ng-click=\"grid.appScope.deleteEventIndicator(row.entity.FK_events_indicators_indicators_types.id);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ]\n };\n\n\n $scope.addEventIndicator = function () {\n // var index = $scope.eventIndicatorsIds.indexOf($scope.event_indicator.FK_events_indicators_indicators_types.id);\n // if (index == -1) {\n // $scope.eventIndicatorsIds.push($scope.event_indicator.FK_events_indicators_indicators_types.id);\n let eventIndicator: any = {};\n eventIndicator.event_id = $stateParams.id;\n eventIndicator.staff_id = $scope.event_indicator.FK_events_indicators_staff.id;\n eventIndicator.value = $scope.event_indicator.value;\n\n\n eventIndicator.FK_events_indicators_staff = $scope.event_indicator.FK_events_indicators_staff;\n eventIndicator.date = $scope.event_indicator.date;\n eventIndicator.FK_events_indicators_indicators_types = $scope.event_indicator.FK_events_indicators_indicators_types;\n eventIndicator.indicator_type_id = $scope.event_indicator.FK_events_indicators_indicators_types.id;\n $scope.eventIndicators.push(eventIndicator);\n var data = treeService.indicators($scope.eventIndicators);\n $scope.gridOptionEventIndicators.data = data;\n\n // }\n\n $scope.event_indicator.FK_events_indicators_indicators_types = \"\";\n $scope.event_indicator.value = \"\";\n $scope.event_indicator.staff = \"\";\n $scope.event_indicator.date = \"\";\n };\n\n $scope.deleteEventIndicator = function (id) {\n angular.forEach($scope.eventIndicators, function (eventIndicator, idx) {\n if (eventIndicator.indicator_type_id == id) {\n $scope.eventIndicators.splice(idx, 1);\n // $scope.eventIndicatorsIds.splice(idx, 1);\n var data = treeService.indicators($scope.eventIndicators);\n $scope.gridOptionEventIndicators.data = data;\n }\n });\n }\n\n $scope.saveEventIndicator = function () {\n $scope.eventIndicatorContainer = {};\n $scope.eventIndicatorContainer.event_id = $stateParams.id;\n $scope.eventIndicatorContainer.events_indicators = $scope.eventIndicators;\n Restangular.all('EventsIndicators').post($scope.eventIndicatorContainer).then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('events.edit_success'));\n $scope.loadIndicators();\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n }])\n\n;\n","import AddLocationEventModalView from \"./addLocationEventModal.html\";\n\nangular.module(\"events\")\n .controller(\"LocationsEventsListCtrl\", ['event','LoginService', '$rootScope', '$scope', 'Restangular', 'gridService', 'modalService', '$uibModal', '$filter', '$translate', '$stateParams', '$state', '$http', '$window', 'uiGridConstants', 'eventService', '$log',\n function (event, LoginService, $rootScope, $scope, Restangular, gridService, modalService, $uibModal, $filter, $translate, $stateParams, $state, $http, $window, uiGridConstants, eventService, $log) {\n\n if(!Array.isArray($scope.$parent.menusItems)) {\n $state.go(\"events.edit\", { id: $stateParams.id });\n } else {\n let results = $scope.$parent.menusItems.filter(m => m.id === parseInt($stateParams.menu_item_id, 10));\n if(results.length > 0) {\n $scope.allowWrite &&= results[0].editable;\n $scope.allowMaterialRead &&= results[0].visible;\n } else {\n $scope.allowWrite = false;\n $scope.allowMaterialRead = false;\n }\n }\n $rootScope.title = $filter('translate')('locations_reservations.locations') + \" - \" + $filter('translate')('events.locations');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('events.title'), url: \"events.list\" },\n { title: $filter('translate')('events.title'), url: \"events.list\" },\n { title: $filter('translate')('locations_reservations.locations') }\n ];\n $scope.classSize = \"col-lg-12 col-md-12\";\n\n $scope.event = event;\n\n $rootScope.breadcrumb = [\n { title: $filter('translate')('events.title'), url: \"events.list\" },\n { title: $scope.event.name, url: \"events.edit({ id: \" + $scope.event.id + \" })\" },\n { title: $filter('translate')('locations_reservations.locations') }\n ];\n $rootScope.title = $scope.event.name + \" - \" + $filter('translate')('locations_reservations.locations');\n\n $scope.gridOptionLocations = {\n pdfTitle: $filter('translate')('events.locations.pdf_title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n //gridMenuShowHideColumns: false,\n enableSorting: true,\n paginationPageSizes: [20, 50, 100],\n paginationPageSize: 20,\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n { name: 'name', field: 'name', displayName: $filter('translate')('locations.name'), enableFiltering: true, enableHiding: false },\n {\n name: 'is_external', field: 'is_external', displayName: $filter('translate')('locations.external'),\n filter: gridService.yesNoFilter('is_external'), width: 100, enableFiltering: true,\n cellTemplate: gridService.yesNoTemplate('is_external')\n },\n {\n name: 'is_private', field: 'is_private', displayName: $filter('translate')('locations.is_private'),\n filter: gridService.yesNoFilter('is_private'), width: 100, enableFiltering: true,\n cellTemplate: gridService.yesNoTemplate('is_private')\n },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('general.button_delete'), action: 'ng-click=\"grid.appScope.deleteDialog(row.entity.event_location_id, row.entity.name);\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n\n ],\n getData: function (options) {\n options.event_id = $stateParams.id;\n return Restangular.all('eventsLocations').getList(options);\n }\n };\n\n $scope.event = event;\n\n $scope.deleteDialog = function (id, name) {\n $scope.id = id;\n modalService.confirm({\n title: $filter('translate')('locations.button_delete'),\n message: $filter('translate')('locations.delete_message') + \" \" + name + \"?\",\n onAccept: function () {\n Restangular.one('EventsLocations', id).remove().then(function () {\n toastr.success($filter('translate')('events.locations.delete_success'));\n $scope.gridOptionLocations.loadData(false);\n\n }, function (response) {\n $log.error(\"Error with status code\", response.status);\n });\n }\n });\n };\n\n $scope.assignLocation = function (e) {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: AddLocationEventModalView,\n controller: \"AssignModalCtrl\",\n size: 'md',\n resolve: {\n event: function () {\n return $scope.event;\n }\n }\n });\n\n //Retorno de los datos desde el moda l.\n $modalInstance.result.then(function () {\n $scope.gridOptionLocations.loadData(false);\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n });\n };\n\n\n }])\n\n .controller(\"AssignModalCtrl\", ['LoginService', '$scope', '$uibModalInstance', 'Restangular', 'modalService', '$filter', '$http', '$stateParams', '$q', 'event', function (LoginService, $scope, $uibModalInstance, Restangular, modalService, $filter, $http, $stateParams, $q, event) {\n\n $scope.selectLocations = [];\n $scope.locations = {};\n\n Restangular.all('Locations').getList().then(function (locations) {\n $scope.selectLocations = locations;\n });\n\n\n $scope.saveLocation = function () {\n \n $scope.locations.event_id = event.id;\n Restangular.all('EventsLocations').customPOST($scope.locations, \"SaveLocation\", {}).then(function (result) {\n $uibModalInstance.close(result.id);\n });\n\n }\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n}])\n\n\n\n\n ;\n","angular.module(\"events\")\n .controller(\"EventMailAccountCtrl\", ['event','$rootScope', '$scope', 'Restangular', 'gridService', 'modalService', '$uibModal', '$filter', '$translate', '$stateParams', '$state', 'LoginService', '$log',\n function (event, $rootScope, $scope, Restangular, gridService, modalService, $uibModal, $filter, $translate, $stateParams, $state, LoginService, $log) {\n $log.debug(\"EventMailAccountCtrl\");\n $scope.isCorrectReplyTo = true;\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"EVENTS_MAIL_ACCOUNT_WRITE\");\n if(!Array.isArray($scope.$parent.menusItems)) {\n $state.go(\"events.edit\", { id: $stateParams.id });\n } else {\n let results = $scope.$parent.menusItems.filter(m => m.id === parseInt($stateParams.menu_item_id, 10));\n if(results.length > 0) {\n $scope.allowWrite &&= results[0].editable;\n } else {\n $scope.allowWrite = false;\n }\n }\n $scope.event = event;\n $scope.event.mail_list_bcc_array = [];\n $scope.event.mail_list_reply_array = [];\n\n if ($scope.event.reply_to != null) $scope.event.mail_list_reply_array = $scope.event.reply_to.split(\",\");\n if ($scope.event.bcc != null) $scope.event.mail_list_bcc_array = $scope.event.bcc.split(\",\");\n\n $scope.radio = { value: null };\n\n $rootScope.breadcrumb = [\n { title: $filter('translate')('events.title'), url: \"events.list\" },\n { title: $scope.event.name, url: \"events.edit({ id: \" + $scope.event.id + \" })\" },\n { title: $filter('translate')('events.mail_account.mail_account') }\n ];\n $rootScope.title = $scope.event.name + \" - \" + $filter('translate')('events.mail_account.mail_account');\n\n Restangular.all('MailAccounts').getList().then(function (mailsAccounts) {\n $scope.mailsAccounts = mailsAccounts;\n });\n\n if ($scope.event.mail_account_id != null) {\n if ($scope.event.FK_events_mail_accounts.email === $scope.event.bcc) $scope.radio.value = \"from\";\n else if ($scope.event.bcc == null || $scope.event.bcc == \"\") $scope.radio.value = \"no_bcc\";\n else $scope.radio.value = \"other_bcc\";\n } else {\n $scope.radio.value = \"no_bcc\";\n }\n\n $scope.$watch('radio.value', function (value) {\n switch (value) {\n case \"from\":\n $scope.event.bcc = $scope.event.FK_events_mail_accounts.email;\n $scope.event.mail_list_bcc_array = [];\n break;\n case \"no_bcc\":\n $scope.event.bcc = \"\";\n $scope.event.mail_list_bcc_array = [];\n break;\n case \"other_bcc\":\n break;\n }\n });\n\n $scope.save = function () {\n $scope.event.mail_account_id = $scope.event.FK_events_mail_accounts.id;\n\n if ($scope.event.mail_list_reply_array.length > 1) {\n $scope.isCorrectReplyTo = false;\n } else {\n $scope.isCorrectReplyTo = true;\n\n if ($scope.event.mail_list_reply_array != null && $scope.event.mail_list_reply_array.length > 0) { $scope.event.reply_to = $scope.event.mail_list_reply_array.join(\",\") } else { $scope.event.reply_to = null };\n if ($scope.event.mail_list_bcc_array != null && $scope.event.mail_list_bcc_array.length > 0) { $scope.event.bcc = $scope.event.mail_list_bcc_array.join(\",\") } else { $scope.event.bcc = null };\n $scope.event.put().then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('events.edit_success'));\n }\n });\n }\n\n };\n $scope.changeMailAccount = function (row) {\n Restangular.one('MailAccounts', row).get().then(function (result) {\n if (result.reply_to != null) {\n $scope.event.mail_list_reply_array = result.reply_to.split(\",\");\n } else {\n $scope.event.mail_list_reply_array = [];\n }\n \n });\n\n };\n\n }])\n\n;\n","import HistoricMailsModalView from \"../common/historicMails.html\";\nimport SearchMaterialsModalView from \"./searchMaterialsModal.html\";\nimport AddNewMaterialModalView from \"./addNewMaterialModal.html\";\n\n\n\nangular.module(\"materials\")\n .controller(\"EventsMaterialsListCtrl\", ['event','LoginService', '$rootScope', '$scope', 'Restangular', 'gridService', 'modalService', '$uibModal', '$filter', '$translate', '$stateParams', '$state', '$http', '$window', 'uiGridConstants', 'eventService', '$log',\n function (event, LoginService, $rootScope, $scope, Restangular, gridService, modalService, $uibModal, $filter, $translate, $stateParams, $state, $http, $window, uiGridConstants, eventService, $log)\n {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"EVENTS_MATERIALS_WRITE\");\n $scope.allowMaterialRead = LoginService.permissionExist(\"MATERIAL_READ\");\n $scope.errorUnits = false;\n $scope.existsQuantity = false;\n $scope.loadWharesouseRows = function () {\n Restangular.all('Warehouses').getList({ entity_type: \"materials\", entity_id: $stateParams.id }).then(function (warehouses) {\n $scope.selectWarehouses = warehouses;\n // $scope.gridWarehouse.warehouse_id = $scope.selectWarehouses[0].id;\n });\n }\n\n $scope.loadWharesouseRows();\n\n\n if(!Array.isArray($scope.$parent.menusItems)) {\n $state.go(\"events.edit\", { id: $stateParams.id });\n } else {\n let results = $scope.$parent.menusItems.filter(m => m.id === parseInt($stateParams.menu_item_id, 10));\n if(results.length > 0) {\n $scope.allowWrite &&= results[0].editable;\n $scope.allowMaterialRead &&= results[0].visible;\n } else {\n $scope.allowWrite = false;\n $scope.allowMaterialRead = false;\n }\n }\n\n $rootScope.title = $filter('translate')('events.title') + \" - \" + $filter('translate')('events.materials.materials');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('events.title'), url: \"events.list\" },\n { title: $filter('translate')('events.title'), url: \"events.list\" },\n { title: $filter('translate')('events.materials.materials') }\n ];\n $scope.classSize = \"col-lg-12 col-md-12\";\n\n function isDefinedAndNotNull(val) {\n return angular.isDefined(val) && val !== null\n }\n function isDefinedAndNotNullOrEmpty(val) {\n return angular.isDefined(val) && val !== null && val !== \"\"\n }\n\n $scope.event = event;\n $rootScope.breadcrumb = [\n { title: $filter('translate')('events.title'), url: \"events.list\" },\n { title: $scope.event.name, url: \"events.edit({ id: \" + $scope.event.id + \" })\" },\n { title: $filter('translate')('events.materials.materials') }\n ];\n $rootScope.title = $scope.event.name + \" - \" + $filter('translate')('events.materials.materials');\n\n $scope.ConfirmationStatusOptions = [{ value: 'pending', label: $filter('translate')('events.materials.pending') },\n { value: 'returned', label: $filter('translate')('events.materials.returned') }];\n\n $scope.is_template = $stateParams.is_template == 'true';\n\n if (!$scope.is_template) { //No es template\n $scope.gridOptionEventMaterials = {\n pdfTitle: $filter('translate')('events.materials.pdf_title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n //gridMenuShowHideColumns: false,\n enableSorting: true,\n paginationPageSizes: [20, 50, 100],\n paginationPageSize: 20,\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n {\n name: 'confirmation_status', field: 'confirmation_status', displayName: $filter('translate')('events.materials.confirmation_status'),\n enableFiltering: true, cellTemplate: \"
\" +\n \"\" + $filter('translate')('events.materials.pending') + \"\" +\n \"\" + $filter('translate')('events.materials.returned') + \"\" +\n \"
\", width: 90, filter: { selectOptions: $scope.ConfirmationStatusOptions, type: uiGridConstants.filter.SELECT },\n },\n { name: 'type', field: 'FK_events_materials_materials.FK_materials_materials_types.name', displayName: $filter('translate')('materials.materials_types'), enableFiltering: true, enableHiding: false },\n { name: 'name', field: 'FK_events_materials_materials.name', displayName: $filter('translate')('events.materials.name'), enableFiltering: true, enableHiding: false },\n { name: 'quantity', displayName: $filter('translate')('materials.qty'), enableFiltering: true, enableHiding: false },\n {\n name: 'is_external', field: 'FK_events_materials_materials.is_external', displayName: $filter('translate')('events.materials.is_external'),\n filter: gridService.yesNoFilter('materialsFK_events_materials_materials.is_external'), width: 100, enableFiltering: true,\n cellTemplate: gridService.yesNoTemplate('FK_events_materials_materials.is_external')\n },\n //{ name: 'provider_name', field: 'FK_events_materials_materials.provider_name', displayName: $filter('translate')('events.materials.provider_name'), enableFiltering: true },\n {\n name: ' ', width: 50, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false,\n cellTemplate: \"
\" +\n \"\" +\n \"\" +\n \"\" +\n \"
\"\n },\n ],\n getData: function (options) {\n options.event_id = $stateParams.id;\n return Restangular.all('eventsMaterials').getList(options);\n }\n };\n } else { //Es template\n $scope.gridOptionEventMaterials = {\n pdfTitle: $filter('translate')('events.materials.pdf_title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n //gridMenuShowHideColumns: false,\n enableSorting: true,\n paginationPageSizes: [20, 50, 100],\n paginationPageSize: 20,\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n { name: 'type', field: 'FK_events_materials_materials.materials_types.name', displayName: $filter('translate')('materials.materials_types'), enableFiltering: true, enableHiding: false },\n { name: 'name', field: 'FK_events_materials_materials.name', displayName: $filter('translate')('events.materials.name'), enableFiltering: true, enableHiding: false },\n {\n name: 'is_external', field: 'FK_events_materials_materials.is_external', displayName: $filter('translate')('events.materials.is_external'),\n filter: gridService.yesNoFilter('FK_events_materials_materials.is_external'), width: 100, enableFiltering: true,\n cellTemplate: gridService.yesNoTemplate('FK_events_materials_materials.is_external')\n },\n //{ name: 'provider_name', field: 'FK_events_materials_materials.provider_name', displayName: $filter('translate')('events.materials.provider_name'), enableFiltering: true },\n {\n name: ' ', width: 50, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false,\n cellTemplate: \"
\" +\n \"\" +\n \"
\"\n },\n ],\n getData: function (options) {\n options.event_id = $stateParams.id;\n return Restangular.all('eventsMaterials').getList(options);\n }\n };\n }\n\n $scope.editEventMaterial = function (id) {\n Restangular.one('EventsMaterials', id).get().then(function (eventMaterial) {\n $scope.eventMaterial = eventMaterial;\n (eventMaterial.quantity > 0) ? $scope.existsQuantity = true : $scope.existsQuantity = false;\n if ($scope.eventMaterial.date_from != null)\n $scope.eventMaterial.date_from = new Date($scope.eventMaterial.date_from);\n if ($scope.eventMaterial.date_to != null)\n $scope.eventMaterial.date_to = new Date($scope.eventMaterial.date_to);\n if (eventMaterial.FK_events_materials_materials.qty == null)\n eventMaterial.FK_events_materials_materials.quantity = 1;\n\n Restangular.all('BudgetGroups').getList().then(function (budgetGroups) {\n $scope.selectBudgetGroups = budgetGroups;\n var budgetGroupNull = {\n id: null,\n name: $filter('translate')('events.materials.no_budget_group')\n }\n $scope.selectBudgetGroups.unshift(budgetGroupNull);\n\n });\n });\n\n $scope.classSize = \"col-lg-8 col-md-8\";\n if ($window.pageYOffset > 200 && $rootScope.sizeLg) {\n $scope.styleMargin = $window.pageYOffset - 100;\n }\n }\n\n $scope.EventMaterialHistoricMail = function (id) {\n let options: any = {}\n options.module = \"material/notify\";\n options.code = id + \"\";\n options.event_id = event.id;\n\n let $modalInstance = $uibModal.open({\n animation: true,\n template: HistoricMailsModalView,\n size: \"lg\",\n controller: \"historicMailsModalCtrl\",\n backdrop: 'static',\n keyboard: false,\n resolve: {\n options: function () {\n return options;\n },\n }\n });\n //Response del modal\n $modalInstance.result.then(function (data) {\n }, function () {\n if (!$scope.$$phase) $scope.$apply();\n });\n }\n\n /*\n * Si lleva el parámetro abro el elemento\n */\n if (angular.isDefined($stateParams.materialId) && $stateParams.materialId != null && $stateParams.materialId != \"\")\n $scope.editEventMaterial($stateParams.materialId)\n\n $scope.closeMaterialInfo = function () {\n $scope.classSize = \"col-lg-12 col-md-12\";\n $scope.eventMaterial = null;\n }\n\n $scope.saveMaterialInfo = function () {\n Restangular.all('Warehouses').customGET(\"GetTotalStockInWarehouse\", { warehouse_id: $scope.eventMaterial.warehouse_id, product_id: $scope.eventMaterial.material_id, type: \"materials\" }).then(function (res) {\n $scope.totalStock = res;\n\n if (parseInt($scope.eventMaterial.quantity) > $scope.totalStock) {\n $scope.errorUnits = true;\n }\n else {\n $scope.errorUnits = false;\n }\n\n if ($scope.existsQuantity) {\n modalService.message({\n title: \"Error\",\n message: \"No es posible editar, elimine y cree denuevo el material.\",\n onAccept: function () {\n $scope.errorUnits = false;\n }\n });\n } else {\n if (!$scope.errorUnits) {\n $scope.eventMaterial.put().then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('events.materials.edit_success'));\n $scope.classSize = \"col-lg-12 col-md-12\";\n $scope.eventMaterial = null;\n if (!$scope.is_template) $scope.$parent.loadInfo($stateParams.id);\n $scope.gridOptionEventMaterials.gridApi.core.raise.itemChanged($scope);\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n }\n });\n }\n\n $scope.deleteDialog = function (id, name) {\n $scope.id = id;\n modalService.confirm({\n title: $filter('translate')('events.materials.button_delete'),\n message: $filter('translate')('events.materials.delete_message') + \" \" + name + \"?\",\n onAccept: function () {\n let send_notifications = false;\n if (angular.isDefined($scope.eventMaterial) && $scope.eventMaterial != null && $scope.eventMaterial.send_notifications != null) {\n send_notifications = $scope.eventMaterial.send_notifications;\n }\n Restangular.one('EventsMaterials', id).remove({ send_notifications: send_notifications }).then(function (response) {\n $scope.gridOptionEventMaterials.gridApi.core.raise.itemChanged($scope);\n\n if (!response.success) {\n modalService.message({\n title: $filter('translate')('events.materials.button_delete'),\n message: response.message\n })\n }\n\n if (!$scope.is_template) $scope.$parent.loadInfo($stateParams.id);\n $scope.closeMaterialInfo();\n }, function (response) {\n $log.error(\"Error with status code\", response.status);\n });\n }\n });\n\n };\n\n $scope.searchMasiveDialog = function () {\n\n let $modalInstance = $uibModal.open({\n animation: true,\n template: SearchMaterialsModalView,\n size: \"lg\",\n controller: \"SearchMaterialsModalCtrl\"\n });\n //Response del modal\n $modalInstance.result.then(function (data) {\n $scope.gridOptionEventMaterials.gridApi.core.raise.itemChanged($scope);\n if (!$scope.is_template) $scope.$parent.loadInfo($stateParams.id);\n if (!$scope.$$phase) $scope.$apply();\n }, function () {\n if (!$scope.$$phase) $scope.$apply();\n });\n\n }; //addPersonsPositionDialog\n\n }\n ])\n .controller(\"SearchMaterialsModalCtrl\", ['$scope', '$uibModalInstance', 'Restangular', 'modalService', '$filter', '$http', '$stateParams', '$q', 'gridService', '$uibModal', function ($scope, $uibModalInstance, Restangular, modalService, $filter, $http, $stateParams, $q, gridService, $uibModal) {\n\n $scope.showResults = false;\n $scope.search = {};\n\n //Custom function. return null values instead of undefined\n function isDefinedAndNotNull(val) {\n return angular.isDefined(val) && val !== null\n }\n\n Restangular.all('Providers').getList().then(function (providers) {\n $scope.selectProviders = providers;\n });\n\n Restangular.all('MaterialsTypes').getList().then(function (materials_types) {\n $scope.selectTypes = materials_types;\n });\n\n $scope.searchMaterialOptions = function () {\n $scope.showResults = true;\n\n if (angular.isDefined($scope.gridMaterialsOptions)) {\n $scope.gridMaterialsOptions.loadData(false);\n } else {\n $scope.gridMaterialsOptions = {\n exporterMenuCsv: false,\n enableGridMenu: true,\n enableHiding: false,\n enableSelectionBatchEvent: false,//para obtener los seleccionados\n //gridMenuShowHideColumns: false,\n paginationPageSizes: [5, 10, 25],\n paginationPageSize: 5,\n onRegisterApi: function (gridApi) {\n $scope.gridMaterialsOptions.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableFiltering: false, enableHiding: false, exporterSuppressExport: true },\n { name: 'type', field: 'FK_materials_materials_types.name', displayName: $filter('translate')('materials.materials_types'), enableFiltering: false },\n { name: 'name', displayName: $filter('translate')('materials.name'), enableFiltering: false, enableHiding: false },\n { name: 'FK_materials_providers.name', displayName: $filter('translate')('materials.provider_name'), enableFiltering: false },\n {\n name: 'is_external', displayName: $filter('translate')('events.materials.is_external'), width: 100,\n enableFiltering: false, enableHiding: false, cellTemplate: gridService.yesNoTemplate('is_external')\n }\n ],\n getData: function (options) {\n var deferred = $q.defer();\n options.event_id = $stateParams.id;\n options.material_type_id = $scope.search.material_type_id;\n options.name = $scope.search.name;\n options.provider_id = $scope.search.provider_id;\n if (isDefinedAndNotNull($scope.search.is_external) && $scope.search.is_external != \"\") {\n options.is_external = $scope.search.is_external == 1 ? true : false;\n if (!options.is_external) options.provider_id = null;\n }\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + 'EventsMaterials/SearchMaterialsOptions',\n params: options\n }).then(function (results, status, headers, config) {\n var data = results.data.rows;\n data.totalRows = results.data.totalRows;\n $scope.totalRows = results.data.totalRows;\n deferred.resolve(data);\n });\n return deferred.promise;\n }\n }; //End gridoptions\n }\n }\n\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n $scope.addMaterial = function () {\n //Devolvemos el control al principal\n var rows = $scope.gridMaterialsOptions.gridApi.selection.getSelectedRows();\n var ids = new Array();\n angular.forEach(rows, function (row) {\n ids.push(row.id);\n });\n if (ids.length > 0) {\n var materialOptions = { event_id: $stateParams.id, eventMaterials: ids };\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + 'EventsMaterials/AddMaterialToEvent',\n params: materialOptions\n\n }).then(function (results, status, headers, config) {\n //Devolvemos el control al principal\n $uibModalInstance.close();\n });\n }\n\n };\n\n $scope.addNewMaterial = function (is_external) {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: AddNewMaterialModalView,\n size: \"lg\",\n controller: \"AddNewMaterialModalCtrl\",\n resolve: {\n is_external: function () {\n return is_external;\n },\n }\n });\n }\n\n\n }])\n\n.controller(\"AddNewMaterialModalCtrl\", ['$scope', '$uibModalInstance','is_external', function ($scope, $uibModalInstance, is_external) {\n\n $scope.is_external = is_external;\n\n $scope.callbackClose = function (mode) {\n $uibModalInstance.dismiss(mode);\n };\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n}]);\n","import AddNewParkingModalView from \"./addNewParkingModal.html\";\n\n\nangular.module(\"events\")\n .controller(\"EventsParkingsListCtrl\", ['event', 'LoginService', '$rootScope', '$scope', 'Restangular', 'gridService', 'modalService', '$uibModal', '$filter', '$translate', '$stateParams', '$state', '$http', '$window', 'uiGridConstants', 'eventService','generateDocumentService',\n function (event, LoginService, $rootScope, $scope, Restangular, gridService, modalService, $uibModal, $filter, $translate, $stateParams, $state, $http, $window, uiGridConstants, eventService, generateDocumentService) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"EVENTS_PARKINGS_WRITE\") ;\n if(!Array.isArray($scope.$parent.menusItems)) {\n $state.go(\"events.edit\", { id: $stateParams.id });\n } else {\n let results = $scope.$parent.menusItems.filter(m => m.id === parseInt($stateParams.menu_item_id, 10));\n if(results.length > 0) {\n $scope.allowWrite &&= results[0].editable;\n } else {\n $scope.allowWrite = false;\n }\n }\n\n $rootScope.title = $filter('translate')('events.title') + \" - \" + $filter('translate')('events.parkings.parkings');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('events.title'), url: \"events.list\" },\n { title: $filter('translate')('events.title'), url: \"events.list\" },\n { title: $filter('translate')('events.parkings.parkings') }\n ];\n\n $scope.event = event;\n\n $rootScope.breadcrumb = [\n { title: $filter('translate')('events.title'), url: \"events.list\" },\n { title: $scope.event.name, url: \"events.edit({ id: \" + $scope.event.id + \" })\" },\n { title: $filter('translate')('events.parkings.parkings') }\n ];\n $rootScope.title = $scope.event.name + \" - \" + $filter('translate')('events.parkings.parkings');\n\n $scope.gridOptionEventParkings = {\n pdfTitle: $filter('translate')('events.parkings.pdf_title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n //gridMenuShowHideColumns: false,\n rowTemplate: '
',\n enableSorting: true,\n paginationPageSizes: [20, 50, 100],\n paginationPageSize: 20,\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n { name: 'name', field: 'name', displayName: $filter('translate')('events.parkings.name'), enableFiltering: true, enableHiding: false },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('calendars.print'), action: 'ng-click=\"grid.appScope.print(row.entity.id)\"', cssIconClass: \"fa fa-file\" },\n { title: $filter('translate')('events.parkings.button_edit'), action: 'ng-click=\"grid.appScope.editParking(row.entity.id)\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('events.parkings.button_delete'), action: 'ng-click=\"grid.appScope.deleteDialog(row.entity.id,row.entity.name);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n options.event_id = $stateParams.id;\n return Restangular.all('EventsParkings').getList(options);\n }\n };\n\n $scope.editParking = function (id) {\n var options = {\n event_id: $scope.event.id,\n parking_id: id\n };\n let $modalInstance = $uibModal.open({\n animation: true,\n template: AddNewParkingModalView,\n controller: \"addParkingModalCtrl\",\n size: 'lg',\n resolve: {\n\n options: function () {\n return options;\n }\n }\n\n });\n\n //Retorno de los datos desde el modal.\n $modalInstance.result.then(function (parking) {\n if (angular.isDefined(id)) {\n parking.put().then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('events.parkings.edit_success'));\n }\n $scope.gridOptionEventParkings.loadData(false);\n });\n } else {\n Restangular.all('EventsParkings').post(parking).then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('events.parkings.create_success'));\n }\n $scope.gridOptionEventParkings.loadData(false);\n });\n }\n\n });\n }\n\n $scope.deleteDialog = function (id, name) {\n $scope.id = id;\n modalService.confirm({\n title: $filter('translate')('events.parkings.button_delete'),\n message: $filter('translate')('events.parkings.delete_message') + \" \" + name + \"?\",\n onAccept: function () {\n Restangular.one('EventsParkings', id).remove().then(function () {\n $scope.gridOptionEventParkings.gridApi.core.raise.itemChanged($scope);\n toastr.success($filter('translate')('events.parkings.delete_success'));\n });\n }\n });\n\n };\n\n $scope.print = function (parkingId) {\n var params = {\n entity_type: \"events\",\n entity_type_id: $stateParams.id,\n event_guests_id: 0,\n documents: {\n codes: [\"GUEST_PARKING\"]\n }\n };\n generateDocumentService.documentNew({\n params: params,\n onAccept: function (data) {\n angular.forEach(data, function (item) {\n $http({\n method: 'post',\n url: (window as any).CONFIG.api_url + 'documentgenerator/Generate',\n params: { document_id: item.document_id, event_id: params.entity_type_id, parking_id: parkingId, outputType: 'pdf' }\n\n }).then(function (result, status, headers, config) {\n var url = (window as any).CONFIG.api_url + 'documentgenerator/download/' + result.data;\n window.open(url, '_blank');\n });\n })\n\n }\n });\n }\n\n }])\n\n.controller(\"addParkingModalCtrl\", ['options', '$scope', '$uibModalInstance', 'LoginService', 'Restangular', function (options, $scope, $uibModalInstance, LoginService, Restangular) {\n $scope.allowWrite = LoginService.permissionExist(\"EVENTS_PARKINGS_WRITE\");\n\n $scope.parking = {\n id: options.parking_id,\n event_id: options.event_id,\n FK_events_parkings_images: {}\n };\n\n if (angular.isDefined(options.parking_id)) {\n Restangular.one('EventsParkings', options.parking_id).get().then(function (parking) {\n $scope.parking = parking;\n if (angular.isUndefined($scope.parking.FK_events_parkings_images) || $scope.parking.FK_events_parkings_images == null)\n $scope.parking.FK_events_parkings_images = {};\n });\n }\n\n $scope.addFile = function (flowFile) {\n var fileReader = new FileReader();\n fileReader.onload = function (event) {\n var uri = event.target.result;\n $scope.$apply(function () {\n $scope.parking.image = uri;\n $scope.parking.FK_events_parkings_images.image = uri;\n });\n };\n fileReader.readAsDataURL(flowFile.file);\n };\n\n $scope.saveParking = function () {\n $uibModalInstance.close($scope.parking);\n };\n\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n}])\n;\n","import Chart from \"chart.js\";\n\nimport tinymce from \"tinymce\";\nimport ProgramActModalView from \"./programActModal.html\";\nimport ProgramActMonitoringModalView from \"./programActMonitoringModal.html\";\nimport AddRestaurantModalView from \"./addRestaurantModal.html\";\nimport ProgramActMenuModalView from \"./programActMenuModal.html\";\nimport ProgramActReservationModalView from \"./programActReservationModal.html\";\nimport ProgramActUserModalView from \"./programActUserModal.html\";\nimport HistoricMailsModalView from \"../common/historicMails.html\";\n\nangular.module(\"events\")\n\n .controller(\"EventsProgramsActsListCtrl\", ['LoginService', '$rootScope', '$scope', 'Restangular', 'gridService', 'modalService', '$uibModal', '$filter', '$translate', '$stateParams', '$state', 'generateDocumentService', '$http', 'Upload', 'datasetsService', 'notificationService', '$log',\n function (LoginService, $rootScope, $scope, Restangular, gridService, modalService, $uibModal, $filter, $translate, $stateParams, $state, generateDocumentService, $http, Upload, datasetsService, notificationService, $log) {\n\n $scope.programChangesNotSaved = false;\n $scope.eventChangesNotSaved = false;\n\n $scope.setProgramChangesNotSaved = function () {\n $scope.programChangesNotSaved = true;\n };\n\n $scope.setEventChangesNotSaved = function () {\n $scope.eventChangesNotSaved = true;\n };\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"EVENTS_PROGRAM_ACT_WRITE\");\n if (!Array.isArray($scope.$parent.menusItems)) {\n $state.go(\"events.edit\", { id: $stateParams.id });\n } else {\n let results = $scope.$parent.menusItems.filter(m => m.id === parseInt($stateParams.menu_item_id, 10));\n if (results.length > 0) {\n $scope.allowWrite &&= results[0].editable;\n } else {\n $scope.allowWrite = false;\n }\n }\n Restangular.all(\"DocumentsTypes\").customGET(\"GetId\", { code: \"PROGRAM_ACTS\" }).then(function (result) {\n $scope.documentTypeId = result;\n });\n $scope.loadProgramInfo = false;\n //Solo se carga todo esto si estamos en tasks, así evitamos que lo incluyan los calendarios.\n if ($state.current.name == 'events.edit.programs_acts') {\n\n Restangular.one('Events', $stateParams.id).get().then(function (results) {\n\n $scope.event = results;\n\n if ($scope.event.program_mail_list != null) $scope.event.program_mail_list_array = $scope.event.program_mail_list.split(\",\");\n console.log($scope.event.program_mail_list_array);\n\n //$scope.showFile = false;\n $rootScope.breadcrumb = [\n { title: $filter('translate')('events.title'), url: \"events.list\" },\n { title: $scope.event.name, url: \"events.edit({ id: \" + $scope.event.id + \" })\" },\n { title: $filter('translate')('events.programs_acts.programs_acts') }\n ];\n $rootScope.title = $scope.event.name + \" - \" + $filter('translate')('events.programs_acts.programs_acts');\n\n });\n\n $scope.loadProgramsActs = function () {\n Restangular.all('EventsProgramsActs').getList({ event_id: $stateParams.id }).then(function (result) {\n $scope.eventsProgramsActs = result;\n let lastDate = \"\";\n $scope.eventsProgramsActsByDate = [];\n angular.forEach($scope.eventsProgramsActs, function (eventProgramAct) {\n let programDate = new Date(eventProgramAct.date).getFullYear() + \"/\" + new Date(eventProgramAct.date).getMonth() + \"/\" + new Date(eventProgramAct.date).getDate();\n let programActs = [];\n angular.forEach($scope.eventsProgramsActs, function (act) {\n let actDate = new Date(act.date).getFullYear() + \"/\" + new Date(act.date).getMonth() + \"/\" + new Date(act.date).getDate();\n if (programDate == actDate) {\n programActs.push(act);\n }\n });\n if (programDate != lastDate) {\n let program = {\n date: eventProgramAct.date,\n acts: programActs\n }\n $scope.eventsProgramsActsByDate.push(program);\n }\n\n lastDate = programDate;\n });\n\n //Images del programa\n var eventProgramActIds = [];\n angular.forEach(result, function (dataR) {\n if (eventProgramActIds.indexOf(dataR.id) < 0) {\n eventProgramActIds.push(dataR.id);\n }\n });\n //Obtenemos sus imágenes\n if (eventProgramActIds.length > 0) {\n $http({\n method: 'post',\n url: (window as any).CONFIG.api_url + 'EventsProgramsActs/ImagesSmall',\n params: { ids: eventProgramActIds }\n }).then(function (resultsImage, status, headers, config) {\n angular.forEach($scope.eventsProgramsActs, function (eventProgramAct) {\n for (var i = 0; i < resultsImage.data.length; i++) {\n if (eventProgramAct.id == resultsImage.data[i].event_program_act_id) {\n eventProgramAct.image_small = resultsImage.data[i].image_small;\n break;\n }\n }\n });\n });\n }\n\n });\n\n Restangular.all('EventProgram').getList({ event_id: $stateParams.id }).then(function (eventProgram) {\n if (eventProgram.length > 0) {\n $scope.eventProgramInformation = eventProgram[0];\n $scope.showFile = $scope.eventProgramInformation.filename != null;\n $scope.eventProgramInformation.image = eventProgram[0].FK_events_programs_images != null ? eventProgram[0].FK_events_programs_images.image : null;\n } else {\n $scope.eventProgramInformation = {};\n $scope.eventProgramInformation.event_id = $stateParams.id;\n }\n });\n }\n\n $scope.loadProgramsActs();\n\n }\n\n $scope.programAct = {};\n $scope.eventProgramInformation = {};\n\n $scope.classSize = \"col-lg-12 col-md-12\";\n function isDefinedAndNotNull(val) {\n return angular.isDefined(val) && val !== null\n }\n Restangular.one('Companies', $scope.company_id).get().then(function (results) {\n $scope.company = results;\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n\n $scope.addEventProgramAct = function (id, event_program_act_date) {\n if (angular.isUndefined(event_program_act_date)) event_program_act_date = \"\";\n let $modalInstance = $uibModal.open({\n animation: true,\n template: ProgramActModalView,\n controller: \"ProgramActModalCtrl\",\n size: 'lg',\n resolve: {\n\n event_program_act_id: function () {\n return id;\n },\n event: function () {\n return $scope.event;\n },\n event_program_act_date: function () {\n return event_program_act_date;\n },\n company: function () {\n return $scope.company;\n },\n\n }\n\n });\n\n // Retorno de los datos desde el modal.\n\n $modalInstance.result.then(function (resultModal) {\n if ($state.current.name == 'events.edit.programs_acts') $scope.loadProgramsActs();\n if (typeof $scope.refetchEvents == 'function') $scope.refetchEvents();\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n // $scope.identity = {};\n });\n\n };\n\n /*\n * Si lleva el parámetro abro el elemento\n */\n\n if (angular.isDefined($stateParams.programActId) && $stateParams.programActId != null && $stateParams.programActId != \"\")\n $scope.addEventProgramAct($stateParams.programActId)\n\n // Modal de monitorización del acto\n\n $scope.seeActMonitoring = function (id) {\n\n let $modalInstance = $uibModal.open({\n animation: true,\n template: ProgramActMonitoringModalView,\n controller: \"ProgramActMonitoringModalCtrl\",\n size: 'lg',\n resolve: {\n event_program_act_id: function () {\n return id;\n },\n event: function () {\n return $scope.event;\n },\n company: function () {\n return $scope.company;\n },\n }\n });\n\n };\n\n //Delete desde el listado\n $scope.checkDeleteEventProgramAct = function (id, title) {\n $scope.id = id;\n $scope.title = title;\n modalService.confirm({\n title: $filter('translate')('events.programs_acts.button_delete'),\n message: $filter('translate')('events.programs_acts.delete_message') + \" \" + $scope.title + \"?\",\n onAccept: function () {\n Restangular.one('EventsProgramsActs', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('events.programs_acts.deleted_success'));\n if ($state.current.name == 'events.edit.programs_acts') $scope.loadProgramsActs();\n }, function (response) {\n $log.error(\"Error with status code\", response.status);\n alert(\"Error al borrar\")\n });\n }\n });\n\n };\n $scope.specificActChange = function () {\n $scope.eventsGuestsEspecificAct = [];\n Restangular.all('EventsProgramsActs').customGET(\"GetGuestsAct\", { event_id: $scope.id }).then(function (result) {\n angular.forEach(result, function (act) {\n var style = \"\";\n let nameComplete = act.name + \" \" + act.surname;\n if (act.type == \"show\") {\n style = \"color: #CDCDCD;font-style: italic;\";\n }\n $scope.eventsGuestsEspecificAct.push({ event_program_act_id: act.event_program_act_id, nameComplete: nameComplete, style: style });\n });\n })\n }\n\n $scope.printDialog = function (code, type_document, type_result, id) {\n var params = {\n entity_type: \"events\",\n entity_type_id: $stateParams.id,\n documents: { codes: [code] }\n };\n generateDocumentService.documentNew({\n params: params,\n onAccept: function (data) {\n angular.forEach(data, function (item) {\n $http({\n method: 'post',\n url: (window as any).CONFIG.api_url + 'documentgenerator/Generate',\n params: { document_id: item.document_id, event_id: params.entity_type_id, outputType: 'pdf' }\n }).then(function (result, status, headers, config) {\n var url = (window as any).CONFIG.api_url + 'documentgenerator/download/' + result.data;\n window.open(url, '_blank');\n });\n })\n }\n });\n }\n\n $scope.uploadFiles = function ($file) {\n $scope.file = $file;\n $scope.hasChanged = true;\n $scope.eventProgramInformation.filename = $scope.file.name;\n $scope.setProgramChangesNotSaved();\n }\n $scope.uploadFile = function (id, message) {\n\n if ($scope.hasChanged) {\n $scope.showProgressBar = true;\n $scope.file.upload = Upload.upload({\n url: (window as any).CONFIG.api_url + \"EventProgram/uploadFile\",\n data: { file: $scope.file, id: id },\n });\n\n $scope.file.upload.then(function (response) {\n $log.debug(response.data);\n toastr.success(message);\n $scope.hasChanged = false;\n $scope.file = undefined;\n $scope.eventProgramInformation.file_uid = response.data.Uid;\n }, function (response) {\n if (response.status > 0) {\n let errorMsg = response.status + ': ' + response.data;\n toastr.error(\"Ha ocurrido un error: \" + errorMsg);\n }\n }, function (evt) {\n // Math.min is to fix IE which reports 200% sometimes\n //$scope.file.progress = Math.min(100, parseInt(100.0 * evt.loaded / evt.total)); // Ralentiza MUCHO la subida\n });\n } else {\n\n toastr.success(message);\n }\n }\n\n $scope.showFilePanel = function () {\n $scope.showFile = true;\n }\n\n $scope.deleteFile = function () {\n $scope.eventProgramInformation.filename = null;\n $scope.showFile = false;\n // $scope.saveEventProgram();\n $scope.setProgramChangesNotSaved();\n }\n\n $scope.downloadFile = function () {\n window.open((window as any).CONFIG.api_url + 'EventProgram/getFile?uid=' + $scope.eventProgramInformation.file_uid + '&filename=' + $scope.eventProgramInformation.filename, '_blank', '');\n }\n $scope.saveEventProgram = function () {\n if (angular.isDefined($scope.eventProgramInformation.id)) {\n if ($scope.event.program_mail_list_array.length > 0) {\n $scope.eventProgramInformation.program_mail_list = $scope.event.program_mail_list_array.join(', ');\n } else {\n $scope.eventProgramInformation.program_mail_list = null;\n };\n\n $scope.eventProgramInformation.put().then(function (result) {\n if (typeof (result.id) != \"undefined\") {\n $scope.uploadFile(result.id, $filter('translate')('events.programs_acts.edit_success'));\n $scope.eventProgramInformation.file_uid = result.file_uid;\n }\n $scope.programChangesNotSaved = false;\n });\n } else {\n Restangular.all('EventProgram').post($scope.eventProgramInformation).then(function (result) {\n if (typeof (result.id) != \"undefined\") {\n var image = $scope.eventProgramInformation.image;\n $scope.eventProgramInformation = result;\n $scope.eventProgramInformation.image = image;\n $scope.saveEventProgram();\n }\n });\n\n }\n }\n\n $scope.changeLoadProgramInfo = function () {\n $scope.loadProgramInfo = true;\n }\n\n // Prevent bootstrap dialog from blocking focusin\n $(document).on('focusin', function (e) {\n if ($(e.target).closest(\".mce-window\").length) {\n e.stopImmediatePropagation();\n }\n });\n\n $scope.addImage = function (flowFile) {\n Restangular.all(\"FilesTypesWhitelist\").customGET(\"GetTotalSizeAllowed\", { entity: \"programs\" }).then(function (result) {\n\n if (result.filter(e => e.type === flowFile.file.type).length <= 0) {\n var typeAllowed = result.map(o => o.type).join(', ');\n modalService.message({\n title: \"Error\",\n message: $filter('translate')('general.type_file_not_allowed') + \"
\" + typeAllowed,\n onAccept: function () { }\n });\n } else {\n var maxSizeAllowed = result.find(e => e.type === flowFile.file.type).maxsize;\n var fileReader = new FileReader();\n fileReader.onload = function (event) {\n if (!event.target) return;\n var image = new Image();\n image.src = event.target.result as string;\n\n image.onload = function () {\n var sizeFileMB = flowFile.size / 1024;\n if (sizeFileMB > 0) {\n //Comprobamos que no pase del tamaño limite de imagen\n if (sizeFileMB > maxSizeAllowed) {\n modalService.message({\n title: \"Error\",\n message: $filter('translate')('general.image_size_limit') + \"
\" + maxSizeAllowed + \" Kb\",\n onAccept: function () { }\n });\n } else {\n $scope.program_image = image.src;\n $scope.eventProgramInformation.image = image.src;\n // $scope.saveEventProgram();\n $scope.programChangesNotSaved = true;\n $scope.$apply();\n }\n } else {\n $scope.program_image = image.src;\n $scope.eventProgramInformation.image = image.src;\n // $scope.saveEventProgram();\n $scope.programChangesNotSaved = true;\n $scope.$apply();\n }\n };\n };\n fileReader.readAsDataURL(flowFile.file);\n\n }\n\n });\n\n\n /*\n if (flowFile.file.type === \"application/pdf\") {\n modalService.message({\n title: \"Error\",\n message: $filter('translate')('events.programs_acts_pdf_not_valid_as_image'),\n onAccept: function () { }\n });\n } else {\n var fileReader = new FileReader();\n fileReader.onload = function (event) {\n var image = new Image();\n image.src = event.target.result;\n\n image.onload = function () {\n if (limit_image_height != 0 && limit_image_width != 0) {\n //Comprobamos que no pase del tamaño limite de imagen\n if (this.width > limit_image_width || this.height > limit_image_height) {\n modalService.message({\n title: \"Error\",\n message: $filter('translate')('events.image_size_limit') + \"
\" + limit_image_width + \"X\" + limit_image_height,\n onAccept: function () { }\n });\n } else {\n $scope.program_image = this.src;\n $scope.eventProgramInformation.image = this.src;\n $scope.saveEventProgram();\n }\n } else {\n $scope.program_image = this.src;\n $scope.eventProgramInformation.image = this.src;\n $scope.saveEventProgram();\n }\n };\n };\n fileReader.readAsDataURL(flowFile.file);\n }*/\n\n };\n\n $scope.sendProgramDialog = function () {\n\n var params = {\n entity_type: 'program',\n entity_type_id: $scope.event.id,\n addresses: $scope.event.program_mail_list,\n mail_account_id: null,\n mail_account_reply: null,\n app_enabled: $scope.app_enabled,\n documents: { for_event_guest: false }\n };\n\n notificationService.notificationMail({\n params: params,\n onAccept: function (data) {\n toastr.success($filter('translate')('notifications.sending_mail_success'));\n }\n });\n\n };\n\n $scope.deleteImage = function () {\n $scope.eventProgramInformation.image = null;\n $scope.setProgramChangesNotSaved();\n // $scope.saveEventProgram();\n }\n\n $scope.saveEvent = function () {\n\n if ($scope.event.program_mail_list_array.length > 0) {\n $scope.event.program_mail_list = $scope.event.program_mail_list_array.join(', ');\n } else {\n $scope.event.program_mail_list = null;\n $scope.event.program_mail_list_array = [];\n };\n\n $scope.event.put().then(function (result) {\n if (angular.isDefined(result.id)) {\n $scope.eventChangesNotSaved = false;\n toastr.success($filter('translate')('events.edit_success'));\n } else {\n $scope.errorMessage = result.message;\n }\n });\n\n };\n\n $scope.saveEventAndProgram = function () {\n $scope.saveEventProgram();\n $scope.saveEvent();\n }\n\n $scope.restoreDefaultProgramMails = function () {\n Restangular.all('Events').customGET(\"GetDefaultProgramMailList\").then(function (result) {\n\n $scope.event.program_mail_list_array = result.split(',');\n $scope.setEventChangesNotSaved();\n\n })\n }\n\n \n }])\n\n\n .controller(\"ProgramActModalCtrl\", ['$timeout', 'generateDocumentService', 'LoginService', '$scope', '$uibModalInstance', 'Restangular', 'modalService', '$filter', '$http', '$stateParams', '$q', 'event_program_act_id', 'event_program_act_date', 'event', 'company', 'uiSliderConfig', '$translate', 'gridService', '$uibModal', '$log',\n function ($timeout, generateDocumentService, LoginService, $scope, $uibModalInstance, Restangular, modalService, $filter, $http, $stateParams, $q, event_program_act_id, event_program_act_date, event, company, uiSliderConfig, $translate, gridService, $uibModal, $log) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"EVENTS_PROGRAM_ACT_WRITE\");\n $scope.allowReadUsers = LoginService.permissionExist(\"EVENTS_PROGRAM_ACT_USER_READ\") || LoginService.permissionExist(\"EVENTS_PROGRAM_ACT_USER_WRITE\");\n $scope.allowWriteUsers = LoginService.permissionExist(\"EVENTS_PROGRAM_ACT_USER_WRITE\");\n $scope.is_template = $stateParams.is_template == 'true';\n\n $scope.company = company;\n $scope.eventProgramAct = {};\n $scope.selectedTemplateModel = { add_images: false, template: \"template_one_column\" };\n $scope.template_options = [{ value: \"template_one_column\", name: $filter('translate')('events.programs_acts.one_column') }, { value: \"template_two_column\", name: $filter('translate')('events.programs_acts.two_column') }, { value: \"template_three_column\", name: $filter('translate')('events.programs_acts.three_column') }];\n $scope.files = [];\n\n $scope.eventProgramAct.translatable_program_acts = event.translatable_program_acts;\n\n if (angular.isUndefined(event_program_act_id) || event_program_act_id == \"\") {\n\n $scope.eventProgramAct.event_id = event.id;\n\n if (event_program_act_date != \"\") {\n $scope.eventProgramAct.date = new Date(event_program_act_date);\n } else {\n $scope.eventProgramAct.date = new Date(event.date_from);\n }\n }\n else {\n Restangular.one('EventsProgramsActs', event_program_act_id).get().then(function (results) {\n $scope.eventProgramAct = results;\n $scope.eventProgramAct.date = new Date($scope.eventProgramAct.date);\n $scope.eventProgramAct.translatable_program_acts = event.translatable_program_acts;\n //Image lateral del programa\n var eventProgramActIds = [];\n if ($scope.eventProgramAct.image_id != null) eventProgramActIds.push($scope.eventProgramAct.id);\n\n //Obtenemos su imagen lateral\n if (eventProgramActIds.length > 0) {\n $http({\n method: 'post',\n url: (window as any).CONFIG.api_url + 'EventsProgramsActs/ImagesSmall',\n params: { ids: eventProgramActIds, fullImg: true }\n }).then(function (resultsImage, status, headers, config) {\n $scope.eventProgramAct.FK_events_programs_acts_images = resultsImage.data[0];\n });\n }\n\n if ($scope.eventProgramAct.template_images != \"\" && $scope.eventProgramAct.template_images != null) {\n $scope.selectedTemplateModel.add_images = true;\n $scope.selectedTemplateModel.template = $scope.eventProgramAct.template_images;\n $http({\n method: 'post',\n url: (window as any).CONFIG.api_url + 'EventsProgramsActs/GetImagesTemplate',\n params: { event_program_act_id: event_program_act_id, fullImg: true }\n }).then(function (resultsImage, status, headers, config) {\n $scope.files = resultsImage.data;\n });\n }\n\n });\n }\n\n $scope.addRestaurant = function () {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: AddRestaurantModalView,\n controller: \"AddRestaurantModalCtrl\",\n size: 'lg'\n });\n $modalInstance.result.then(function (restaurant) {\n Restangular.all('Restaurants').getList().then(function (results) {\n $scope.selectRestaurants = results;\n if (restaurant!=null) $scope.programAct.restaurant_id = restaurant.id;\n });\n }, function () {\n });\n };\n\n //Select del formato del acto\n\n $scope.gridOptionsActMenus = {\n pdfTitle: $filter('translate')('events.program_acts.menus_title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n enableSorting: true,\n paginationPageSizes: [5, 15, 30],\n paginationPageSize: 5,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n { name: 'name', displayName: $filter('translate')('events.programs_acts.menu_name'), enableFiltering: true, enableHiding: false, enableColumnMenu: false },\n {\n name: 'is_principal', field: 'is_principal', displayName: $filter('translate')('events.programs_acts.menu_is_principal'),\n width: 100, enableFiltering: true,\n cellTemplate: gridService.yesNoTemplate('is_principal')\n },\n {\n name: ' ', width: 200, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('calendars.print'), action: 'ng-click=\"grid.appScope.printProgramActMenu(row.entity)\"', cssIconClass: \"fa fa-file\" },\n { title: $filter('translate')('events.button_edit'), action: 'ng-click=\"grid.appScope.addEventProgramActMenu(row.entity)\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('events.button_delete'), action: 'ng-click=\"grid.appScope.deleteEventProgramActMenu(row.entity);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n var deferred = $q.defer();\n options.event_program_act_id = event_program_act_id;\n Restangular.all('EventsProgramsActsMenus').getList(options).then(function (result) {\n var data = result;\n data.totalRows = result.totalRows;\n $scope.totalRows = result.totalRows;\n deferred.resolve(data);\n })\n\n return deferred.promise;\n\n }\n };\n\n $scope.gridGuestAct = {\n pdfTitle: $filter('translate')('events.program_acts.guest_explicit_act'),\n exporterMenuCsv: true,\n exporterOlderExcelCompatibility: true,\n enableGridMenu: true,\n enableSorting: false,\n paginationPageSizes: [5, 15, 30],\n paginationPageSize: 5,\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n exporterFieldCallback: function (grid, row, col, value) {\n if (col.name == \"surname\") {\n return row.entity.surname + \" \" + (row.entity.lastname != null ? row.entity.lastname : \"\") + \", \" + row.entity.name;\n }\n return value;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n {\n name: 'surname', displayName: $filter('translate')('events.programs_acts.users_name'), enableFiltering: false, enableHiding: false, enableColumnMenu: false,\n cellTemplate: '
{{row.entity.surname}} {{row.entity.lastname}}, {{row.entity.name}}
',\n },\n ],\n getData: function (options) {\n var deferred = $q.defer();\n if (angular.isDefined(event_program_act_id) && event_program_act_id !== null && event_program_act_id != \"\") {\n $log.debug(event_program_act_id);\n options.event_program_act_id = event_program_act_id;\n Restangular.all('EventsProgramsActs').customGET(\"GetGuestsAct\", { event_program_act_id: event_program_act_id }).then(function (result) {\n var data = result;\n data.totalRows = result.totalRows;\n $scope.totalRows = result.totalRows;\n deferred.resolve(data);\n })\n } else {\n let data: any = [];\n data.totalRows = 0;\n deferred.resolve(data);\n }\n return deferred.promise;\n }\n };\n\n if ($scope.allowReadUsers ) {\n $scope.gridOptionsActUsers = {\n pdfTitle: $filter('translate')('events.program_acts.users_title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n enableSorting: true,\n paginationPageSizes: [5, 15, 30],\n paginationPageSize: 5,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n { name: 'FK_events_programs_acts_users_users.name', displayName: $filter('translate')('events.programs_acts.users_name'), enableFiltering: true, enableHiding: false, enableColumnMenu: false },\n {\n name: ' ', width: 200, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('events.button_edit'), action: 'ng-click=\"grid.appScope.addEventProgramActUser(row.entity)\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('events.button_delete'), action: 'ng-click=\"grid.appScope.deleteEventProgramActUser(row.entity);\" ng-if=\"grid.appScope.allowWriteUsers\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n var deferred = $q.defer();\n options.event_program_act_id = event_program_act_id;\n Restangular.all('EventsProgramsActsUsers').getList(options).then(function (result) {\n var data = result;\n data.totalRows = result.totalRows;\n $scope.totalRows = result.totalRows;\n deferred.resolve(data);\n })\n return deferred.promise;\n }\n };\n\n $scope.gridOptionsActReservations = {\n pdfTitle: $filter('translate')('events.program_acts.reservations_title'),\n exporterMenuCsv: false,\n enableGridMenu: true,\n enableSorting: true,\n paginationPageSizes: [5, 15, 30],\n paginationPageSize: 5,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n }, // FK_locations_reservations_locations\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n { name: 'FK_locations_reservations_locations.name', displayName: $filter('translate')('events.location'), enableFiltering: true, enableHiding: false, enableColumnMenu: false },\n { name: 'date_from', displayName: $filter('translate')('events.date_from'), cellFilter: 'toLocalDate | date:\\'dd/MM/yyyy HH:mm\\'', enableFiltering: true, enableHiding: false, enableColumnMenu: false },\n { name: 'date_to', displayName: $filter('translate')('events.date_to'), cellFilter: 'toLocalDate | date:\\'dd/MM/yyyy HH:mm\\'', enableFiltering: true, enableHiding: false, enableColumnMenu: false },\n {\n name: ' ', width: 200, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('events.button_edit'), action: 'ng-click=\"grid.appScope.addEventProgramActReservation(row.entity)\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('events.button_delete'), action: 'ng-click=\"grid.appScope.deleteEventProgramActReservation(row.entity);\" ng-if=\"grid.appScope.allowWriteUsers\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n var deferred = $q.defer();\n options.event_program_act_id = event_program_act_id;\n Restangular.all('LocationsReservations').getList(options).then(function (result) {\n var data = result;\n data.totalRows = result.totalRows;\n $scope.totalRows = result.totalRows;\n deferred.resolve(data);\n })\n return deferred.promise;\n }\n };\n }\n\n Restangular.all('EventsProgramsActsTypes').getList().then(function (results) {\n $scope.selectProgramsActsTypes = results;\n if (angular.isUndefined($scope.eventProgramAct.FK_events_programs_acts_events_programs_acts_types) || $scope.eventProgramAct.FK_events_programs_acts_events_programs_acts_types == null) $scope.eventProgramAct.FK_events_programs_acts_events_programs_acts_types = results[0];\n });\n\n Restangular.all('Restaurants').getList().then(function (results) {\n $scope.selectRestaurants = results;\n });\n\n var color = (window as any).CONFIG_TINYMCE[\"no_company_id\"].font_color_description;\n var font_size = (window as any).CONFIG_TINYMCE[\"no_company_id\"].font_size;\n var font_family = (window as any).CONFIG_TINYMCE[\"no_company_id\"].font_family;\n $log.debug ((window as any).CONFIG_TINYMCE[\"company_id_\" + LoginService.get(\"companyId\")]);\n if (typeof ((window as any).CONFIG_TINYMCE[\"company_id_\" + LoginService.get(\"companyId\")]) !== 'undefined') {\n if (typeof ((window as any).CONFIG_TINYMCE[\"company_id_\" + LoginService.get(\"companyId\")].font_color_description) !== 'undefined') {\n color = (window as any).CONFIG_TINYMCE[\"company_id_\" + LoginService.get(\"companyId\")].font_color_description;\n }\n if (typeof ((window as any).CONFIG_TINYMCE[\"company_id_\" + LoginService.get(\"companyId\")].font_size) !== 'undefined') {\n font_size = (window as any).CONFIG_TINYMCE[\"company_id_\" + LoginService.get(\"companyId\")].font_size;\n }\n if (typeof ((window as any).CONFIG_TINYMCE[\"company_id_\" + LoginService.get(\"companyId\")].font_family) !== 'undefined') {\n font_family = (window as any).CONFIG_TINYMCE[\"company_id_\" + LoginService.get(\"companyId\")].font_family;\n }\n }\n\n $scope.tinymceDescriptionOptions = {\n resize: true,\n forced_root_block: 'p',\n //min_height: 60,\n //height: 60,\n schema: \"html5\",\n formats: {\n bold: { inline: 'b' },\n underline: { inline: 'u' },\n italic: { inline: 'i' },\n alignleft: { selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div', attributes: { align: \"left\" } },\n aligncenter: { selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div', attributes: { align: \"center\" } },\n alignright: { selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div', attributes: { align: \"right\" } },\n alignjustify: { selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div', attributes: { align: \"justify\" } },\n },\n invalid_elements: 'strong,em',\n fontsize_formats: \"8pt 10pt 12pt 14pt 15pt 16pt 18pt 20pt 22pt 24pt 25pt 28pt 30pt 36pt \",\n body_class: 'custom_tinymce_content',\n language: $translate.use().toLowerCase(), //Hay que customizarlo dependiendo del idioma...\n plugins: 'textcolor paste link lists advlist',\n toolbar: \"undo redo | fontsizeselect bold underline italic | forecolor | link | numlist bullist\",\n menubar: false,\n paste_remove_styles: true, paste_remove_styles_if_webkit: true, paste_strip_class_attributes: true, paste_auto_cleanup_on_paste: true\n };\n\n $scope.tinymceTitleOptions = {\n resize: true,\n forced_root_block: 'p',\n //min_height: 100,\n //height: 100,\n schema: \"html5\",\n relative_urls: false,\n remove_script_host: true,\n formats: {\n bold: { inline: 'b' },\n underline: { inline: 'u' },\n italic: { inline: 'i' },\n alignleft: { selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div', attributes: { align: \"left\" } },\n aligncenter: { selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div', attributes: { align: \"center\" } },\n alignright: { selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div', attributes: { align: \"right\" } },\n alignjustify: { selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div', attributes: { align: \"justify\" } },\n\n },\n invalid_elements: 'strong,em',\n fontsize_formats: \"8pt 10pt 12pt 14pt 15pt 16pt 18pt 20pt 22pt 24pt 25pt 28pt 30pt 36pt \",\n body_class: 'custom_tinymce_content',\n language: $translate.use().toLowerCase(), //Hay que customizarlo dependiendo del idioma...\n // language_url: \"Scripts/tinymce/langs/es.js\",\n plugins: 'textcolor paste link lists advlist',\n toolbar: \"undo redo | fontsizeselect bold underline italic | forecolor | link | numlist bullist\",\n menubar: false,\n paste_remove_styles: true, paste_remove_styles_if_webkit: true, paste_strip_class_attributes: true, paste_auto_cleanup_on_paste: true\n };\n\n /* Foto lateral */\n $scope.addImage = function (flowFile) {\n\n Restangular.all(\"FilesTypesWhitelist\").customGET(\"GetTotalSizeAllowed\", { entity: \"programs\" }).then(function (result) {\n\n if (result.filter(e => e.type === flowFile.file.type).length <= 0) {\n var typeAllowed = result.map(o => o.type).join(', ');\n modalService.message({\n title: \"Error\",\n message: $filter('translate')('general.type_file_not_allowed') + \"
\" + typeAllowed,\n onAccept: function () { }\n });\n } else {\n var maxSizeAllowed = result.find(e => e.type === flowFile.file.type).maxsize;\n var fileReader = new FileReader();\n fileReader.onload = function (event) {\n var image = new Image();\n if (event.target && event.target.result) {\n image.src = event.target.result as string;\n }\n\n image.onload = function () {\n var sizeFileMB = flowFile.file.size / 1024;\n if (sizeFileMB > 0) {\n //Comprobamos que no pase del tamaño limite de imagen\n if (sizeFileMB > maxSizeAllowed) {\n modalService.message({\n title: \"Error\",\n message: $filter('translate')('general.image_size_limit') + \"
\" + maxSizeAllowed + \" Kb\",\n onAccept: function () { }\n });\n } else {\n $scope.eventProgramAct.photo = image.src;\n if (angular.isUndefined($scope.eventProgramAct.FK_events_programs_acts_images) || $scope.eventProgramAct.FK_events_programs_acts_images == null) { $scope.eventProgramAct.FK_events_programs_acts_images = {}; }\n $scope.eventProgramAct.FK_events_programs_acts_images.image = image.src;\n if (!$scope.$$phase) $scope.$apply()\n\n }\n } else {\n $scope.eventProgramAct.photo = image.src;\n if (angular.isUndefined($scope.eventProgramAct.FK_events_programs_acts_images) || $scope.eventProgramAct.FK_events_programs_acts_images == null) { $scope.eventProgramAct.FK_events_programs_acts_images = {}; }\n $scope.eventProgramAct.FK_events_programs_acts_images.image = image.src;\n if (!$scope.$$phase) $scope.$apply()\n }\n };\n };\n\n fileReader.readAsDataURL(flowFile.file);\n\n }\n });\n };\n\n $scope.saveEventProgramAct = function () {\n\n $scope.eventProgramAct.event_program_act_type_id = $scope.eventProgramAct.FK_events_programs_acts_events_programs_acts_types.id;\n $scope.eventProgramAct.FK_events_programs_acts_menus_events_programs_acts = (typeof ($scope.gridOptionsActMenus) !== 'undefined' ? $scope.gridOptionsActMenus.data : null);\n $scope.eventProgramAct.FK_events_programs_acts_users_events_programs_acts = (typeof ($scope.gridOptionsActUsers) !== 'undefined' ? $scope.gridOptionsActUsers.data : null);\n $scope.eventProgramAct.FK_locations_reservations_event_program_act = (typeof ($scope.gridOptionsActReservations) !== 'undefined' ? $scope.gridOptionsActReservations.data : null);\n \n var save = true;\n if (angular.isDefined($scope.eventProgramAct.FK_events_programs_acts_menus_events_programs_acts) && $scope.eventProgramAct.FK_events_programs_acts_menus_events_programs_acts != null && $scope.eventProgramAct.FK_events_programs_acts_menus_events_programs_acts.length > 0) {\n var principal = 0;\n angular.forEach($scope.eventProgramAct.FK_events_programs_acts_menus_events_programs_acts, function (menu) {\n if (menu.is_principal) {\n principal++;\n }\n })\n if (principal == 0 || principal > 1) save = false;\n }\n\n if (save) {\n //comprobamos si todas las imagenes estan borradas, para quitarle el template_images que utiliza\n let deleteTemplate = true;\n if ($scope.files.length != 0) angular.forEach($scope.files, function (item) { if (!item.is_deleted) deleteTemplate = false; });\n if (deleteTemplate) $scope.selectedTemplateModel.template = null;\n\n $scope.eventProgramAct.template_images = $scope.selectedTemplateModel.template;\n if (angular.isDefined($scope.eventProgramAct.id)) {\n $scope.eventProgramAct.put().then(function (result) {\n if (typeof (result.id) != \"undefined\") {\n if ($scope.files.length > 0) {\n $scope.saveImages(result.id);\n }\n $uibModalInstance.close();\n toastr.success($filter('translate')('events.programs_acts.edit_success'));\n } else {\n $scope.errorMessage = result.message;\n }\n });\n } else {\n Restangular.all('eventsProgramsActs').post($scope.eventProgramAct).then(function (result) {\n if (typeof (result.id) != \"undefined\") {\n if ($scope.files.length > 0) {\n $scope.saveImages(result.id);\n }\n $uibModalInstance.close();\n toastr.success($filter('translate')('events.programs_acts.add_success'));\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n\n } else {\n if (principal == 0) {\n modalService.message({\n title: \"Error\",\n message: $filter('translate')('events.programs_acts.principal_info_message'),\n onAccept: function () { }\n\n });\n } else {\n modalService.message({\n title: \"Error\",\n message: $filter('translate')('events.programs_acts.unique_principal_info_message'),\n onAccept: function () { }\n\n });\n }\n }\n }\n\n //Delete desde el popup\n $scope.checkDeleteEventProgramAct = function () {\n modalService.confirm({\n title: $filter('translate')('events.programs_acts.button_delete'),\n message: $filter('translate')('events.programs_acts.delete_message') + \" \" + $scope.eventProgramAct.title + \"?\",\n onAccept: function () {\n Restangular.one('EventsProgramsActs', event_program_act_id).remove({ send_notifications: $scope.eventProgramAct.send_notifications }).then(function () {\n // $scope.eventProgramAct.remove().then(function () {\n $uibModalInstance.close();\n });\n }\n });\n };\n\n $scope.addEventProgramActMenu = function (menu) {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: ProgramActMenuModalView,\n controller: \"ProgramActMenuModalCtrl\",\n size: 'lg',\n resolve: {\n\n event_program_act_menu: function () { return menu; },\n event_program_act_id: function () { return event_program_act_id; }\n }\n });\n\n //Retorno de los datos desde el modal.\n $modalInstance.result.then(function (resultModal) {\n if ((angular.isUndefined(resultModal.id) || resultModal.id == null) && resultModal.is_new) $scope.gridOptionsActMenus.data.push(resultModal);\n if (typeof $scope.refetchEvents == 'function') $scope.refetchEvents();\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n // $scope.identity = {};\n });\n\n };\n\n //Delete menu desde el listado\n $scope.deleteEventProgramActMenu = function (menu) {\n modalService.confirm({\n title: $filter('translate')('events.programs_acts.button_delete'),\n message: $filter('translate')('events.programs_acts.menu_delete_message') + \" \" + menu.name + \"?\",\n onAccept: function () {\n $scope.gridOptionsActMenus.data.splice($scope.gridOptionsActMenus.data.indexOf(menu), 1);\n }\n });\n };\n \n $scope.addEventProgramActReservation = function(reservation) {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: ProgramActReservationModalView,\n controller: \"ProgramActReservationModalCtrl\",\n size: 'md',\n resolve: {\n event_program_act_reservation: function () {\n return reservation;\n },\n event_program_act: function () {\n return $scope.eventProgramAct;\n }\n }\n });\n\n // Retorno de los datos desde el modal.\n $modalInstance.result.then(function (resultModal) {\n $log.debug(resultModal);\n if ((angular.isUndefined(resultModal.id) || resultModal.id == null) && resultModal.is_new) $scope.gridOptionsActReservations.data.push(resultModal);\n if (typeof $scope.refetchEvents == 'function') $scope.refetchEvents();\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n // $scope.identity = {};\n }); \n }\n\n $scope.deleteEventProgramActReservation = function(reservation) {\n $log.debug(reservation);\n }\n\n /* users */\n $scope.addEventProgramActUser = function (user) {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: ProgramActUserModalView,\n controller: \"ProgramActUserModalCtrl\",\n size: 'md',\n resolve: {\n event_program_act_user: function () {\n return user;\n },\n event_program_act_id: function () {\n return event_program_act_id;\n }\n }\n });\n\n //Retorno de los datos desde el modal.\n $modalInstance.result.then(function (resultModal) {\n if ((angular.isUndefined(resultModal.id) || resultModal.id == null) && resultModal.is_new) $scope.gridOptionsActUsers.data.push(resultModal);\n if (typeof $scope.refetchEvents == 'function') $scope.refetchEvents();\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n // $scope.identity = {};\n });\n };\n\n //Delete menu desde el listado\n $scope.deleteEventProgramActUser = function (user) {\n modalService.confirm({\n title: $filter('translate')('events.programs_acts.button_delete'),\n message: $filter('translate')('events.programs_acts.user_delete_message') + \" \" + user.FK_events_programs_acts_users_users.name + \"?\",\n onAccept: function () {\n $scope.gridOptionsActUsers.data.splice($scope.gridOptionsActUsers.data.indexOf(user), 1);\n }\n });\n };\n\n $scope.printProgramActMenu = function (menu) {\n var params = {\n entity_type: \"events\",\n entity_type_id: $stateParams.id,\n documents: { codes: \"EVENT_MENU\" } };\n generateDocumentService.documentNew({\n params: params,\n onAccept: function (data) {\n angular.forEach(data, function (item) {\n $http({\n method: 'post',\n url: (window as any).CONFIG.api_url + 'documentgenerator/Generate',\n params: { document_id: item.document_id, event_id: params.entity_type_id, program_menu_id: menu.id, outputType: 'pdf' }\n }).then(function (result, status, headers, config) {\n var url = (window as any).CONFIG.api_url + 'documentgenerator/download/' + result.data;\n window.open(url, '_blank');\n });\n })\n }\n });\n }\n\n $scope.showHistory = function (id) {\n let options: any = {}\n options.module = \"program_acts/notify\";\n options.code = id + \"\";\n options.event_id = $stateParams.id;\n\n\n let $modalInstance = $uibModal.open({\n animation: true,\n template: HistoricMailsModalView,\n size: \"lg\",\n controller: \"historicMailsModalCtrl\",\n backdrop: 'static',\n keyboard: false,\n resolve: {\n options: function () {\n return options;\n },\n }\n });\n\n //Response del modal\n $modalInstance.result.then(function (data) {\n }, function () {\n if (!$scope.$$phase) $scope.$apply();\n });\n }\n\n $scope.addImages = function (files, errFiles) {\n\n if (errFiles.length > 0) {\n $log.debug(\"Ha ocurrido un error con las imágenes: \")\n $log.debug(errFiles);\n } else {\n Restangular.all(\"FilesTypesWhitelist\").customGET(\"GetTotalSizeAllowed\", { entity: \"programs\" }).then(function (result) {\n angular.forEach(files, function (file, idx) {\n if (result.filter(e => e.type === file.type).length <= 0) {\n var typeAllowed = result.map(o => o.type).join(', ');\n modalService.message({\n title: \"Error\",\n message: $filter('translate')('general.type_file_not_allowed') + \"
\" + typeAllowed,\n onAccept: function () { }\n });\n } else {\n var maxSizeAllowed = result.find(e => e.type === file.type).maxsize;\n var fileReader = new FileReader();\n fileReader.onload = function (event) {\n if (!event.target) return;\n var image = new Image();\n image.src = event.target.result as string;\n\n image.onload = function () {\n var sizeFileMB = file.size / 1024;\n if (sizeFileMB > 0) {\n //Comprobamos que no pase del tamaño limite de imagen\n if (sizeFileMB > maxSizeAllowed) {\n modalService.message({\n title: \"Error\",\n message: $filter('translate')('general.image_size_limit') + \"
\" + maxSizeAllowed + \" Kb\",\n onAccept: function () { }\n });\n } else {\n file.is_deleted = false;\n $scope.files.push(file);\n file.orden = idx;\n file.image = image.src;\n if (!$scope.$$phase) $scope.$apply()\n }\n } else {\n file.is_deleted = false;\n $scope.files.push(file);\n file.orden = idx;\n file.image = image.src;\n if (!$scope.$$phase) $scope.$apply()\n }\n };\n };\n fileReader.readAsDataURL(file);\n }\n });\n });\n }\n };\n\n $scope.removeFile = function (file) {\n modalService.confirm({\n title: \"Borrar documento\",\n message: \"¿Está usted seguro de querer borrar \" + file.filename + \"?\",\n onAccept: function () {\n angular.forEach($scope.files, function (item) {\n if (file.image == item.image) {\n item.is_deleted = true;\n }\n });\n }\n });\n }\n\n $scope.saveImages = function (eventProgramActId) {\n angular.forEach($scope.files, function (item) {\n var epag = {\n order: item.order,\n event_program_act_id: eventProgramActId,\n image_id: item.image_id,\n image: item.image,\n is_lateral: item.is_lateral,\n is_deleted: item.is_deleted\n }\n $http({\n method: 'post',\n url: (window as any).CONFIG.api_url + 'EventsProgramsActs/SaveImagesTemplate',\n data: epag\n }).then(function (result, status, headers, config) { });\n });\n }\n\n $scope.onCancel = function () {\n tinymce.remove();\n $uibModalInstance.dismiss('cancel');\n };\n\n }])\n\n\n .controller(\"ProgramActMenuModalCtrl\", ['generateDocumentService', 'LoginService', '$scope', '$uibModalInstance', 'Restangular', 'modalService', '$filter', '$http', '$stateParams', '$q', 'event_program_act_menu', 'event_program_act_id', '$translate', \n function (generateDocumentService, LoginService, $scope, $uibModalInstance, Restangular, modalService, $filter, $http, $stateParams, $q, event_program_act_menu, event_program_act_id, $translate) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"EVENTS_PROGRAM_ACT_WRITE\");\n\n if (angular.isUndefined(event_program_act_menu)) {\n $scope.eventProgramActMenu = {};\n $scope.eventProgramActMenu.is_new = true;\n $scope.eventProgramActMenu.id = null;\n } else {\n $scope.eventProgramActMenu = event_program_act_menu;\n $scope.eventProgramActMenu.is_new = false;\n $scope.eventProgramActMenu.title = \"\";\n }\n\n $scope.tinymceTitleOptions = {\n resize: true,\n forced_root_block: false,\n min_height: 100,\n height: 100,\n body_class: 'custom_tinymce_content',\n language: $translate.use().toLowerCase(), //Hay que customizarlo dependiendo del idioma...\n plugins: 'textcolor paste ',\n toolbar: \"undo redo fontsizeselect bold italic underline forecolor alignleft aligncenter alignright \",\n font_formats: 'Tahoma=Tahoma;Arial=arial,helvetica,sans-serif;Courier New=courier new,courier,monospace;',\n fontsize_formats: \"8px 10px 12px 14px 15px 16px 18px 20px 22px 24px 25px 28px 30px 36px \",\n content_style: \".mce-content-body {font-size:14px;font-family:Tahoma;}\",\n paste_remove_styles: true, paste_remove_styles_if_webkit: true, paste_strip_class_attributes: true, paste_auto_cleanup_on_paste: true,\n menubar: false\n }\n\n $scope.gridGuestMenu = {\n pdfTitle: $filter('translate')('events.program_acts.menu_guests') + \" \" + $scope.eventProgramActMenu.title,\n exporterPdfOrientation: 'portrait',\n exporterMenuCsv: true,\n enableGridMenu: true,\n enableSorting: true,\n paginationPageSizes: [10, 50, 100],\n paginationPageSize: 10,\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n { name: 'name', displayName: $filter('translate')('events.programs_acts.guest_name'), enableFiltering: true, enableHiding: false, enableColumnMenu: false },\n { name: 'surname', displayName: $filter('translate')('events.programs_acts.guest_surname'), enableFiltering: true, enableHiding: false, enableColumnMenu: false },\n { name: 'lastname', displayName: $filter('translate')('events.programs_acts.guest_lastname'), enableFiltering: true, enableHiding: false, enableColumnMenu: false }\n ],\n getData: function (options) {\n var deferred = $q.defer();\n\n if (typeof (event_program_act_id) == 'undefined') event_program_act_id = null;\n options.event_program_act_id = event_program_act_id;\n options.event_id = $stateParams.id;\n options.event_program_act_menu_id = $scope.eventProgramActMenu.id;\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + 'EventsProgramsActsMenus/GetGuestFromMenu',\n params: options\n }).then(function (results, status, headers, config) {\n var data = results.data;\n deferred.resolve(data);\n });\n\n return deferred.promise;\n\n }\n };\n\n $scope.saveEventProgramActMenu = function () {\n if (angular.isUndefined($scope.eventProgramActMenu.event_program_act_id)) {\n $scope.eventProgramActMenu.event_program_act_id = event_program_act_id;\n }\n $uibModalInstance.close($scope.eventProgramActMenu);\n }\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n }])\n\n .controller(\"ProgramActUserModalCtrl\", ['LoginService', '$scope', '$uibModalInstance', 'Restangular', 'modalService', '$filter', '$http', '$stateParams', '$q', 'event_program_act_user', 'event_program_act_id', '$translate', '$log',\n function ( LoginService, $scope, $uibModalInstance, Restangular, modalService, $filter, $http, $stateParams, $q, event_program_act_user, event_program_act_id, $translate, $log) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"EVENTS_PROGRAM_ACT_USER_WRITE\");\n\n Restangular.all('Users').getList().then(function (results) {\n $scope.selectUsers = results;\n });\n\n\n if (angular.isUndefined(event_program_act_user)) {\n $scope.eventProgramActUser = {};\n $scope.eventProgramActUser.is_new = true;\n $scope.eventProgramActUser.id = null;\n $scope.eventProgramActUser.name_user = \"\";\n } else {\n $scope.eventProgramActUser = event_program_act_user;\n $scope.eventProgramActUser.is_new = false;\n //$scope.eventProgramActUser.name_user = \"\";\n }\n\n var font_size = (window as any).CONFIG_TINYMCE[\"no_company_id\"].font_size;\n var font_family = (window as any).CONFIG_TINYMCE[\"no_company_id\"].font_family;\n if (typeof ((window as any).CONFIG_TINYMCE[\"company_id_\" + LoginService.get(\"companyId\")]) !== 'undefined') {\n if (typeof ((window as any).CONFIG_TINYMCE[\"company_id_\" + LoginService.get(\"companyId\")].font_size) !== 'undefined') {\n font_size = (window as any).CONFIG_TINYMCE[\"company_id_\" + LoginService.get(\"companyId\")].font_size;\n }\n if (typeof ((window as any).CONFIG_TINYMCE[\"company_id_\" + LoginService.get(\"companyId\")].font_family) !== 'undefined') {\n font_family = (window as any).CONFIG_TINYMCE[\"company_id_\" + LoginService.get(\"companyId\")].font_family;\n }\n }\n\n $scope.tinymceDescriptionOptions = {\n resize: true,\n //forced_root_block: 'div',\n //min_height: 60,\n //height: 60,\n schema: \"html5\",\n formats: {\n bold: { inline: 'b' },\n underline: { inline: 'u' },\n italic: { inline: 'i' },\n alignleft: { selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div', attributes: { align: \"left\" } },\n aligncenter: { selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div', attributes: { align: \"center\" } },\n alignright: { selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div', attributes: { align: \"right\" } },\n alignjustify: { selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div', attributes: { align: \"justify\" } },\n },\n invalid_elements: 'strong,em',\n fontsize_formats: \"8px 10px 12px 14px 15px 16px 18px 20px 22px 24px 25px 28px 30px 36px \",\n font_formats: 'Arial=Arial;Cambria=Cambria;Courier New=Courier New;Sans Serif=sans-serif;Segoe Script=Segoe Script;Tahoma=Tahoma;Verdana=Verdana',\n body_class: 'custom_tinymce_content',\n language: $translate.use().toLowerCase(), //Hay que customizarlo dependiendo del idioma...\n /*plugins: 'textcolor paste lists lists advlist nonbreaking preview',\n toolbar: \"undo redo | fullscreen | fontsizeselect bold underline italic | numlist bullist | forecolor | alignleft aligncenter alignright alignjustify nonbreaking | paste pastetext | preview\",*/\n plugins: 'textcolor paste link',\n toolbar: \"undo redo | fontsizeselect bold underline italic | forecolor | link\",\n menubar: false,\n setup: function (ed) {\n ed.on('init', function () {\n this.execCommand(\"fontName\", false, \"sans-serif\");\n this.execCommand(\"fontSize\", false, \"10pt\");\n });\n },\n }\n $scope.saveEventProgramActUser = function () {\n if (angular.isUndefined($scope.eventProgramActUser.event_program_act_id)) {\n $scope.eventProgramActUser.event_program_act_id = event_program_act_id;\n }\n if ($scope.eventProgramActUser.user_id != null) {\n angular.forEach($scope.selectUsers, function (item) {\n if (item.id == $scope.eventProgramActUser.user_id) $scope.eventProgramActUser.FK_events_programs_acts_users_users = { name: item.name };\n });\n }\n $log.debug($scope.eventProgramActUser);\n\n $uibModalInstance.close($scope.eventProgramActUser);\n }\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n }])\n .controller(\"ProgramActReservationModalCtrl\", ['LoginService', '$scope', '$uibModalInstance', 'Restangular', 'modalService', '$filter', '$http', '$stateParams', '$q', 'event_program_act_reservation', 'event_program_act', '$translate', '$log',\n function ( LoginService, $scope, $uibModalInstance, Restangular, modalService, $filter, $http, $stateParams, $q, event_program_act_reservation, event_program_act, $translate, $log) {\n \n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"EVENTS_PROGRAM_ACT_USER_WRITE\");\n\n $scope.getLocationsSearch = function (val) {\n if (val == null) {\n val = '';\n } else {\n val = val.replace(/[:.?*+^$[\\\\(){|]/, \"\");\n }\n let ret = [];\n\n ret = Restangular.all('search/locations/' + val).getList().then(function (searchTerms) {\n return searchTerms;\n });\n return ret;\n };\n\n $scope.locationSelected = function ($item, $model, $label) {\n $scope.isLocationSelected = true;\n/* Restangular.all('Locations/' + $item.id + '/CheckAvailability').customGETLIST(\"\",\n { date_from: $scope.event.date_from, date_to: $scope.event.date_to})\n .then(function (results) {\n if(angular.isArray(results) && results.length > 0) {\n $scope.locationAvailable = false;\n $scope.event.reserve = false;\n } else {\n $scope.locationAvailable = true;\n }\n });*/\n $scope.search.position_min_length = 0;\n $scope.eventProgramActReservation.location_id = $item.id;\n/* Restangular.one('Locations', $item.id).get().then(function (results) {\n if (results.name !== undefined && results.length > 0) {\n $scope.search.locations = [];\n angular.forEach(results, function (row) {\n $scope.search.locations.push({\n id: row.id, // Este es el position_id de cara a luego usarlo para buscar el correo\n term: row.name\n });\n });\n\n }\n });*/\n }\n\n if (angular.isUndefined(event_program_act_reservation)) {\n $scope.eventProgramActReservation = {};\n $scope.eventProgramActReservation.is_new = true;\n $scope.eventProgramActReservation.id = null;\n $scope.eventProgramActReservation.date_from = event_program_act.date;\n $scope.eventProgramActReservation.date_to = new Date(event_program_act.date.getTime() + event_program_act.duration*60000);\n $scope.eventProgramActReservation.event_program_act_id = event_program_act.id; \n $scope.eventProgramActReservation.status = \"confirmed\";\n } else {\n $scope.eventProgramActReservation = event_program_act_reservation;\n $scope.eventProgramActReservation.is_new = false;\n //$scope.eventProgramActUser.name_user = \"\";\n }\n \n $scope.saveEventProgramActReservation = function () {\n $log.debug($scope.eventProgramActReservation);\n /* if (angular.isUndefined($scope.eventProgramActUser.event_program_act_id)) {\n $scope.eventProgramActUser.event_program_act_id = event_program_act_id;\n }\n if ($scope.eventProgramActUser.user_id != null) {\n angular.forEach($scope.selectUsers, function (item) {\n if (item.id == $scope.eventProgramActUser.user_id) $scope.eventProgramActUser.FK_events_programs_acts_users_users = { name: item.name };\n });\n }\n $log.debug($scope.eventProgramActUser);*/\n\n $uibModalInstance.close($scope.eventProgramActReservation);\n }\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n }])\n\n .controller(\"AddRestaurantModalCtrl\", ['LoginService', '$scope', '$uibModalInstance', function (LoginService, $scope, $uibModalInstance) {\n $scope.allowWrite = LoginService.permissionExist(\"RESTAURANTS_WRITE\");\n $scope.callbackClose = function (restaurant) {\n $uibModalInstance.close(restaurant);\n };\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n }])\n\n .controller(\"ProgramActMonitoringModalCtrl\", ['$timeout', 'LoginService', '$scope', '$uibModalInstance', 'Restangular', 'modalService', '$filter', '$http', '$stateParams', 'event_program_act_id', 'event', 'company', '$uibModal', '$interval', 'filterFilter', 'datasetsService', '$log',\n function ($timeout, LoginService, $scope, $uibModalInstance, Restangular, modalService, $filter, $http, $stateParams, event_program_act_id, event, company, $uibModal, $interval, filterFilter, datasetsService, $log) {\n\n // Comprobamos si tiene permiso escritura\n $scope.company = company;\n $scope.eventProgramAct = {};\n $scope.files = [];\n\n $scope.eventProgramAct.translatable_program_acts = event.translatable_program_acts;\n\n // Monitorización propiamente dicha \n\n $scope.totalRow = 0;\n $scope.invitedGuestNotInYet = 0;\n $scope.filterGuestsIn = 0;\n $scope.filterGuestsRejected = 0;\n $scope.totalGuestNotInYet = 0;\n $scope.totalGuestIn = 0;\n\n var barOptions = {\n scaleBeginAtZero: true,\n scaleShowGridLines: true,\n scaleGridLineColor: \"rgba(0,0,0,.05)\",\n scaleGridLineWidth: 1,\n barShowStroke: true,\n barValueSpacing: 5,\n barDatasetSpacing: 0,\n responsive: true,\n maintainAspectRatio: false,\n scaleOverride: true,\n scaleSteps: 10,\n scaleStartValue: 0,\n scales: {\n xAxes: [{\n stacked: true,\n gridLines: {\n color: \"rgba(0, 0, 0, 0)\",\n }\n }],\n yAxes: [{\n stacked: true,\n gridLines: {\n color: \"rgba(0, 0, 0, 0)\",\n },\n ticks: {\n min: 0,\n beginAtZero: true,\n callback: function (value, index, values) {\n if (Math.floor(value) === value) {\n return value;\n };\n }\n },\n \n }]\n }\n };\n\n $scope.getGuestFilters = function (guests, type) {\n if (type == 'notin') {\n var res = filterFilter(guests, { confirmation_status: 'confirmed' });\n return filterFilter(res, { check_in_date: null }).length;\n } else if (type == 'in') {\n var res = filterFilter(guests, { confirmation_status: 'confirmed' });\n return filterFilter(res, { check_in_date: '!!' }).length;\n //return filterFilter(guests, { confirmation_status: 'confirmed' } && { check_in_date: '!!' }).length; NO SE PONE ASI PORWUE NO LE GUSTA MAS DE UN FILTRO.\n } else {\n var res = filterFilter(guests, { confirmation_status: '!confirmed' });\n return filterFilter(res, { check_in_date: '!!' }).length;\n //return filterFilter(guests, { confirmation_status: '!confirmed' } && { check_in_date: '!!' }).length; NO SE PONE ASI PORWUE NO LE GUSTA MAS DE UN FILTRO.\n }\n }\n $scope.getSerieColor = function (i) {\n var colors = [\n \"#ff7f27\",\n \"rgba(151,187,205,1)\",\n \"rgba(220,220,220,1)\",\n \"rgba(247,70,74,1)\",\n \"rgba(70,191,189,1)\",\n \"rgba(253,180,92,1)\",\n \"rgba(148,159,177,1)\",\n \"rgba(77,83,96,1)\"\n ];\n if (i >= colors.length) i = 0;\n return colors[i];\n };\n\n\n $scope.loadChart = function () {\n\n Restangular.all('EventsProgramsActs').customGET(\"GetGuestsAct\", { event_program_act_id: event_program_act_id }).then(function (results) {\n\n\n let searchedData = `${$scope.dateSearch.getDate()}/${$scope.dateSearch.getMonth()}/${$scope.dateSearch.getFullYear()}`;\n\n let dataResults = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n\n\n //Filtramos los invitados que han accedido al evento\n\n let data = results.filter(r => r.check_in_date);\n\n // Les añadimos los datos relevantes \n\n data.forEach(d => {\n let date = new Date(d.check_in_date);\n d.hour = date.getUTCHours();\n d.date = `${date.getUTCDate()}/${date.getUTCMonth()}/${date.getUTCFullYear()}`;\n });\n\n\n // Aplicamos el filtro de fecha\n let filteredData = data.filter(d => d.date == searchedData);\n\n $log.debug(`this is filteredData`)\n\n $log.debug(filteredData)\n\n // Rellenamos los datos de la gráfica\n\n filteredData.forEach(d => {\n dataResults[d.hour] = dataResults[d.hour] + 1;\n\n });\n\n var barData = {\n labels: [\"0h\", \"1h\", \"2h\", \"3h\", \"4h\", \"5h\", \"6h\", \"7h\", \"8h\", \"9h\", \"10h\", \"11h\", \"12h\", \"13h\", \"14h\", \"15h\", \"16h\", \"17h\", \"18h\", \"19h\", \"20h\", \"21h\", \"22h\", \"23h\"],\n datasets: [{\n label: \"Número de asistentes\",\n data: dataResults,\n backgroundColor: `#23c6c8`\n }] \n };\n\n $log.debug('this is barOptions');\n\n $log.debug(barOptions);\n\n const canvas = document.getElementById(\"barChart\") as HTMLCanvasElement;\n const ctx = canvas.getContext(\"2d\");\n if ($scope.myNewChart != null) {\n $scope.myNewChart.destroy();\n }\n //@ts-ignore\n $scope.myNewChart = new Chart(ctx, {\n type: \"bar\",\n data: barData,\n options: barOptions\n });\n });\n }\n\n $scope.dateSearch = new Date();\n $scope.loadChart();\n\n $scope.loadGuests = function () {\n\n Restangular.all('EventsProgramsActs').customGET(\"GetGuestsAct\", { event_program_act_id: event_program_act_id }).then(function (results) {\n\n results.forEach(function(guest){\n\n if (guest.check_in_date != null) {\n guest.check_in_dat = new Date(guest.check_in_date).toLocaleDateString(\"es-Es\")\n }\n })\n\n $scope.invitedGuests = results;\n\n $log.debug($scope.invitedGuests);\n $scope.invitedGuestNotInYet = $scope.getGuestFilters($scope.invitedGuests, 'notin');\n $scope.filterGuestsIn = $scope.getGuestFilters($scope.invitedGuests, 'in');\n $scope.filterGuestsRejected = $scope.getGuestFilters($scope.invitedGuests, 'rejected');\n $scope.totalGuestNotInYet = ($scope.invitedGuestNotInYet / ($scope.invitedGuestNotInYet + $scope.filterGuestsIn) * 100);\n $scope.totalGuestIn = ($scope.filterGuestsIn / ($scope.invitedGuestNotInYet + $scope.filterGuestsIn) * 100);\n\n });\n }\n\n $scope.loadGuests();\n let intervalLoadInfoDashboard = $interval(function () { $scope.loadGuests(); $scope.loadChart(); }, (window as any).CONFIG.time_check_changes_guests);\n\n $scope.changeAssistance = function (id, route) {\n $log.debug(`id = ${id}`);\n $log.debug(`route ${route}`)\n modalService.confirm({\n title: $filter('translate')('events.guests.warning'),\n message: $filter('translate')('events.resume.change_confirm'),\n onAccept: function () {\n Restangular.all(\"EventsResume\").customGET(route, { id: id }).then(function () {\n toastr.success($filter('translate')('events.resume.modified_successful'));\n $scope.loadGuests(); $scope.loadChart();\n });\n }\n });\n };\n \n $scope.export = function () {\n let options = {\n filters: {\n ACT_ID: event_program_act_id,\n }\n };\n\n datasetsService.exportByType(\"act_resume\", options);\n };\n\n\n //Cuando salga del events, se destruirá el intervalo.\n $scope.$on(\"$destroy\", function () {\n $log.debug(\"Entra en el destroy del dashboard\");\n if (angular.isDefined(intervalLoadInfoDashboard)) {\n $interval.cancel(intervalLoadInfoDashboard);\n intervalLoadInfoDashboard = undefined;\n }\n });\n \n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n\n }])\n\n\n.filter('unsafe',['$sce', function ($sce) { return $sce.trustAsHtml; }]);\n\n\n;\n","angular.module(\"events\")\n .controller(\"pushNotificationsEventEditCtrl\", ['$uibModal', '$rootScope', '$scope', '$http', '$stateParams', 'Restangular', '$state', 'modalService', '$filter', 'gridService', '$log',\n function ($uibModal, $rootScope, $scope, $http, $stateParams, Restangular, $state, modalService, $filter, gridService, $log) {\n\n $rootScope.title = $filter('translate')('push_notifications.title');\n $log.debug($stateParams.notificationId);\n $scope.showData = 'showInfo';\n\n $scope.sent = 0;\n $scope.sending = 0;\n $scope.error = 0;\n $scope.eventId = null;\n\n if (typeof ($stateParams.id) !== 'undefined') {\n $scope.eventId = $stateParams.id;\n }\n\n if (angular.isUndefined($stateParams.notificationId) || $stateParams.notificationId == \"\") {\n $scope.company = {\n name: '',\n created_at: new Date()\n };\n }\n\n $rootScope.breadcrumb = [\n { title: $filter('translate')('events.title'), url: \"events.list\" },\n { title: $scope.event.name, url: \"events.edit({ id: \" + $scope.event.id + \" })\" },\n { title: $filter('translate')('push_notifications.title'), url: \"events.edit.push_notifications({ id: \" + $scope.event.id + \" })\" },\n { title: $filter('translate')('push_notifications.view') }\n ];\n\n\n //Filtro por el estado de la petición \n\n let status_filter = \"none\";\n\n $scope.filterSent = function () {\n status_filter = \"sent\";\n $log.debug(status_filter);\n $scope.gridOptions.loadData();\n };\n\n $scope.filterPending = function () {\n status_filter = \"pending\";\n $log.debug(status_filter);\n $scope.gridOptions.loadData();\n };\n $scope.filterError = function () {\n status_filter = \"error\";\n $log.debug(status_filter);\n $scope.gridOptions.loadData();\n };\n $scope.filterNone = function () {\n status_filter = \"none\";\n $log.debug(status_filter);\n $scope.gridOptions.loadData();\n };\n\n\n\n $scope.gridOptions = {\n pdfTitle: $filter('translate')('push_notifications.users_title'),\n exporterMenuCsv: true,\n gridMenuShowHideColumns: false,\n paginationPageSizes: [15, 30, 45],\n paginationPageSize: 15,\n // rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n\n columnDefs: [\n { name: 'FK_users_notifications_users.name', displayName: $filter('translate')('general.name'), enableFiltering: true, enableHiding: false },\n {\n name: 'status', displayName: $filter('translate')('user_notifications.status'), enableFiltering: true, enableHiding: false, enableColumnMenu: false,\n cellTemplate: '
{{row.entity.status_name}}
',\n },\n ],\n getData: function (options) {\n\n $scope.sent = 0;\n $scope.sending = 0;\n $scope.error = 0;\n\n return Restangular.one('PushNotifications/One', $stateParams.notificationId).get().then(function (result) {\n $scope.notification = result;\n let data = result.FK_users_notifications_notifications;\n\n data.forEach(user => {\n switch (user.status) {\n case \"sent\":\n user.label = \" label-primary\";\n user.status_name = $filter('translate')('notifications.sent');\n $scope.sent++;\n break;\n case \"pending\":\n user.label = \" label-default\";\n user.status_name = $filter('translate')('notifications.sending');\n $scope.sending++;\n break;\n case \"error\":\n user.label = \" label-danger\";\n user.status_name = $filter('translate')('notifications.sent_error');\n $scope.error++;\n break;\n }\n })\n\n switch (status_filter) {\n\n case \"sent\":\n data = data.filter((user) => user.status == \"sent\")\n break;\n case \"pending\":\n data = data.filter((user) => user.status == \"pending\")\n break;\n case \"error\":\n data = data.filter((user) => user.status == \"error\")\n break;\n\n };\n\n return data;\n\n\n });\n }\n }\n\n\n\n\n\n $scope.cancel = function () {\n $state.go(\"events.edit.push_notifications\", { id: $scope.event.id });\n }\n }])\n\n\n ;","angular.module(\"events\")\n .controller(\"pushNotificationsEventListCtrl\", ['$scope', 'Restangular', 'gridService', 'modalService', '$filter', '$state', '$stateParams', '$rootScope', '$log',\n function ($scope, Restangular, gridService, modalService, $filter, $state, $stateParams, $rootScope, $log) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = true // LoginService.permissionExist(\"MAILINGS_WRITE\");\n let filter = false;\n $scope.notificationFilter = {};\n\n $scope.id = $stateParams.id\n $log.debug($scope.id)\n\n $rootScope.breadcrumb = [\n { title: $filter('translate')('events.title'), url: \"events.list\" },\n { title: $scope.event.name, url: \"events.edit({ id: \" + $scope.event.id + \" })\" },\n { title: $filter('translate')('push_notifications.title') }\n ];\n\n $log.debug($stateParams);\n\n $scope.gridOptions = {\n pdfTitle: $filter('translate')('push_notifications.title'),\n exporterMenuCsv: true,\n gridMenuShowHideColumns: false,\n paginationPageSizes: [15, 30, 45],\n paginationPageSize: 15,\n // rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n\n columnDefs: [\n\n {\n name: 'created_at', displayName: $filter('translate')('user_notifications.date'), type: 'date', cellFilter: 'toLocalDate | date:\\'dd/MM/yyyy HH:mm\\'',\n customFormatFn: function (value) {\n if (value !== null) {\n var fecha = new Date(value);\n return $filter('date')(fecha, 'dd/MM/yyyy');\n }\n return \"\";\n },\n enableColumnMenu: false, enableFiltering: true, enableHiding: false\n },\n { name: 'event_name', displayName: $filter('translate')('user_notifications.event_name'), enableFiltering: true, enableHiding: false },\n { name: 'title', displayName: $filter('translate')('general.title'), enableFiltering: true, enableHiding: false },\n { name: 'FK_un_users_notifications_types.name', displayName: $filter('translate')('user_notifications.type'), enableFiltering: true, enableHiding: false },\n {\n name: 'is_urgent', displayName: $filter('translate')('user_notifications.priority'), enableFiltering: true, enableHiding: false, enableColumnMenu: false,\n cellTemplate: '
{{row.entity.is_urgent == true? \"Urgente\" : \"\" }}
'\n },\n {\n name: 'status', displayName: $filter('translate')('user_notifications.status'), enableFiltering: true, enableHiding: false, enableColumnMenu: false,\n cellTemplate: '
' +\n '{{row.entity.sent}}
' +\n '{{row.entity.pending}}
' +\n '{{row.entity.error}}
'\n\n },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('notifications.button_view'), action: 'ui-sref=\"events.edit.push_notifications.edit({notificationId:row.entity.id})\"', cssIconClass: \"fa fa-eye\" },\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n options.event_id = $scope.id;\n\n if (filter) {\n\n options.title = $scope.notificationFilter.title;\n options.type = $scope.notificationFilter.type;\n options.event_name = $scope.notificationFilter.event_name;\n\n };\n\n return Restangular.all('PushNotifications/List').getList(options).then(function (result) {\n\n //Contamos el estado de cada comunicación con respecto a cada usuario\n let list = result;\n list.forEach(l => {\n l.sent = 0;\n l.pending = 0;\n l.error = 0;\n l.FK_users_notifications_notifications.forEach(user => {\n switch (user.status) {\n case \"sent\":\n l.sent++;\n break;\n case \"pending\":\n l.pending++;\n break;\n case \"error\":\n l.error++;\n break;\n }\n })\n $log.debug(l)\n })\n return list;\n })\n\n\n }\n\n };\n\n $scope.search = function () {\n filter = true;\n $scope.gridOptions.loadData();\n }\n\n $scope.deleteDialog = function (id, name) {\n $scope.id = id;\n $scope.name = name;\n modalService.confirm({\n title: $filter('translate')('push_notifications.delete'),\n message: $filter('translate')('push_notifications.delete_message') + \" \" + $scope.name + \"?\",\n onAccept: function () {\n Restangular.one('PushNotifications/List', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('push_notifications.remove_success'));\n $scope.gridOptions.data =\n $scope.gridOptions.data.filter(function (el) { return el.id != $scope.id; });\n }, function (response) {\n $log.error(\"Error with status code\", response.status);\n });\n\n }\n });\n\n };\n\n }])\n\n ;","import { Chart } from \"chart.js/auto\";\n\n// Registrar todos los componentes necesarios, incluidas las escalas\n\nangular.module(\"events\")\n\n .controller('EventsResumeListCtrl', ['event', 'gridService', '$rootScope', '$scope', '$filter', 'LoginService', 'Restangular', '$stateParams', 'treeService', '$interval', '$http', 'filterFilter', 'modalService', '$timeout', 'datasetsService', '$log',\n function (event, gridService, $rootScope, $scope, $filter, LoginService, Restangular, $stateParams, treeService, $interval, $http, filterFilter, modalService, $timeout, datasetsService, $log) {\n\n $scope.totalRow = 0;\n $scope.invitedGuestNotInYet = 0;\n $scope.filterGuestsIn = 0;\n $scope.filterGuestsRejected = 0;\n $scope.totalGuestNotInYet = 0;\n $scope.totalGuestIn = 0;\n\n let barOptions = {\n scaleBeginAtZero: true,\n scaleShowGridLines: true,\n scaleGridLineColor: \"rgba(0,0,0,.05)\",\n scaleGridLineWidth: 1,\n barShowStroke: true,\n barValueSpacing: 5,\n barDatasetSpacing: 0,\n scaleOverride: true,\n scaleSteps: 10,\n scaleStartValue: 0,\n responsive: true,\n maintainAspectRatio: false,\n scales: {\n x: {\n stacked: true,\n grid: {\n color: \"rgba(0, 0, 0, 0)\",\n }\n },\n y: {\n min: 0,\n stacked: true,\n grid: {\n color: \"rgba(0, 0, 0, 0)\",\n },\n ticks: {\n beginAtZero: true,\n callback: function (value) {\n if (Math.floor(value) === value) {\n return value;\n };\n }\n },\n }\n }\n };\n\n function isDefinedAndNotNull(val) {\n return angular.isDefined(val) && val !== null\n }\n function isDefinedAndNotNullOrEmpty(val) {\n return angular.isDefined(val) && val !== null && val !== \"\"\n }\n\n $rootScope.title = $filter('translate')('events.resume.monitoring');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('events.title'), url: \"events.list\" },\n { title: $filter('translate')('events.title'), url: \"events.list\" },\n { title: $filter('translate')('events.resume.monitoring') }\n ];\n\n $rootScope.is_template = event.is_template;\n $scope.event = event;\n $scope.event.date_from = new Date($scope.event.date_from);\n $scope.event.date_to = new Date($scope.event.date_to);\n $scope.searchOptions = { date: $scope.event.date_from };\n \n // Sacar el listado de actos del evento \n let mainEvent = { plain_text_name: $filter('translate')('events.main_event'), isMainEvent: true, id: 0 };\n $scope.selectedAct = mainEvent;\n\n $scope.loadActList = function () {\n\n let params = { allow_access_control: true, event_id: event.id, parse_text: true }\n Restangular.all('EventsProgramsActs/GetEventConfirmableActs').getList(params).then(function (results) {\n\n $scope.actList = results;\n $scope.actList.push(mainEvent); \n\n $log.debug('loadActList results...')\n $log.debug($scope.actList);\n\n $scope.loadChart(); // Hay que al intervalo\n\n });\n\n }\n\n $scope.loadActList();\n\n $scope.setOptionsDate = function () {\n const isMainEvent = $scope.selectedAct.isMainEvent; \n if (isMainEvent) {\n $scope.searchOptions.date = $scope.event.date_from;\n } else {\n if ($scope.selectedAct.date) $scope.searchOptions.date = new Date($scope.selectedAct.date);\n }\n }\n\n $rootScope.breadcrumb = [\n { title: $filter('translate')('events.title'), url: \"events.list\" },\n { title: $scope.event.name, url: \"events.edit({ id: \" + $scope.event.id + \" })\" },\n { title: $filter('translate')('events.resume.monitoring') }\n ];\n\n $scope.getGuestFilters = function (guests, type) {\n if (type == 'notin') {\n var res = filterFilter(guests, { confirmation_status: 'confirmed' });\n return filterFilter(res, { check_in_date: null }).length;\n } else if (type == 'in') {\n var res = filterFilter(guests, { confirmation_status: 'confirmed' });\n return filterFilter(res, { check_in_date: '!!' }).length;\n //return filterFilter(guests, { confirmation_status: 'confirmed' } && { check_in_date: '!!' }).length; NO SE PONE ASI PORWUE NO LE GUSTA MAS DE UN FILTRO.\n } else {\n var res = filterFilter(guests, { confirmation_status: '!confirmed' });\n return filterFilter(res, { check_in_date: '!!' }).length;\n //return filterFilter(guests, { confirmation_status: '!confirmed' } && { check_in_date: '!!' }).length; NO SE PONE ASI PORWUE NO LE GUSTA MAS DE UN FILTRO.\n }\n }\n\n $scope.getSerieColor = function (i) {\n\n var colors = [\n\n \"#ff7f27\",\n \"rgba(151,187,205,1)\",\n \"rgba(220,220,220,1)\",\n \"rgba(247,70,74,1)\",\n \"rgba(70,191,189,1)\",\n \"rgba(253,180,92,1)\",\n \"rgba(148,159,177,1)\",\n \"rgba(77,83,96,1)\"\n\n ];\n\n if (i >= colors.length) i = 0;\n return colors[i];\n\n };\n\n // Restangular.all('EventsProgramsActs').customGET(\"GetGuestsAct\", { event_program_act_id: event_program_act_id }).then(function (results) { });\n\n $scope.loadChart = function () {\n\n let params;\n let endpoint;\n const isMainEvent = $scope.selectedAct.isMainEvent; \n\n if (isMainEvent) {\n\n params = {\n event_id: $stateParams.id,\n date: $scope.searchOptions.date\n }\n\n endpoint = 'Events/getActualEventInfo/';\n\n } else {\n\n params = {\n event_program_act_id: $scope.selectedAct.id\n }\n\n endpoint = 'EventsProgramsActs/GetGuestsAct/';\n\n }\n\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + endpoint,\n params: params\n }).then(function (response, status, headers, config) {\n\n let results = response.data.rows ? response.data.rows : response.data;\n \n /// let searchDate = isMainEvent ? new Date($scope.searchOptions.date) : new Date($scope.selectedAct.date);\n\n let searchDate = new Date($scope.searchOptions.date);\n\n let parsedDate = `${searchDate.getDate()}/${searchDate.getMonth() + 1}/${searchDate.getFullYear()}`;\n\n let dataResults = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n\n //Filtramos los invitados que han accedido al evento\n\n let data = results.filter(r => r.check_in_date);\n\n // Les añadimos los datos relevantes \n\n data.forEach(d => {\n let date = new Date(d.check_in_date);\n d.hour = date.getHours(); //date.getUTCHours(); // No sé por qué representamos en UTC\n d.date = `${date.getDate()}/${date.getMonth() + 1 }/${date.getFullYear()}`; // `${date.getUTCDate()}/${date.getUTCMonth()}/${date.getUTCFullYear()}`;\n });\n\n // Aplicamos el filtro de fecha\n let filteredData = data.filter(d => d.date == parsedDate);\n\n // Rellenamos los datos de la gráfica\n filteredData.forEach(d => {\n dataResults[d.hour] = dataResults[d.hour] + 1;\n });\n\n var barData = {\n labels: [\"0h\", \"1h\", \"2h\", \"3h\", \"4h\", \"5h\", \"6h\", \"7h\", \"8h\", \"9h\", \"10h\", \"11h\", \"12h\", \"13h\", \"14h\", \"15h\", \"16h\", \"17h\", \"18h\", \"19h\", \"20h\", \"21h\", \"22h\", \"23h\"],\n datasets: [{\n label: \"Número de asistentes\",\n data: dataResults,\n backgroundColor: `#23c6c8`\n }]\n };\n\n if ($scope.myNewChart != null) {\n\n $scope.myNewChart.destroy();\n\n }\n\n const canvas = document.getElementById(\"barChart\") as HTMLCanvasElement;\n const ctx = canvas.getContext(\"2d\");\n\n $scope.myNewChart = new Chart(ctx, {\n type: \"bar\",\n data: barData,\n options: barOptions\n });\n\n });\n\n };\n\n $scope.loadGuests = function () {\n\n let params;\n let endpoint;\n const isMainEvent = $scope.selectedAct.isMainEvent;\n\n if (isMainEvent) {\n\n params = {\n event_id: $stateParams.id,\n date: $scope.searchOptions.date, \n }\n\n endpoint = 'Events/getActualEventInfo/';\n\n } else {\n\n params = {\n event_program_act_id: $scope.selectedAct.id\n }\n\n endpoint = 'EventsProgramsActs/GetGuestsAct/';\n\n }\n\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + endpoint,\n params: params\n }).then(function (results, status, headers, config) {\n\n $scope.invitedGuests = results.data.rows ? results.data.rows : results.data;\n\n $scope.totalRow = results.data.totalRow;\n $scope.invitedGuestNotInYet = $scope.getGuestFilters($scope.invitedGuests, 'notin');\n $scope.filterGuestsIn = $scope.getGuestFilters($scope.invitedGuests, 'in');\n $scope.filterGuestsRejected = $scope.getGuestFilters($scope.invitedGuests, 'rejected');\n $scope.totalGuestNotInYet = ($scope.invitedGuestNotInYet / ($scope.invitedGuestNotInYet + $scope.filterGuestsIn) * 100);\n $scope.totalGuestIn = ($scope.filterGuestsIn / ($scope.invitedGuestNotInYet + $scope.filterGuestsIn) * 100);\n\n });\n }\n\n $scope.loadGuests();\n\n let intervalLoadInfoDashboard = $interval(function () { $scope.loadGuests(); $scope.loadChart(); }, (window as any).CONFIG.time_check_changes_guests);\n\n const changeAssistance = function (item, route) {\n\n Restangular.all(\"EventsResume\").customGET(\"CheckCompanions\", { event_id: $stateParams.id, events_guests_ids: [item.person_id] }).then(function (has_companions) {\n\n const isMainEvent = $scope.selectedAct.isMainEvent; \n\n let container;\n\n if (isMainEvent) {\n\n container = {\n event_id: $stateParams.id,\n list: [item.person_id],\n check_companions: has_companions,\n overrideDate: item.check_in_date != null ? item.check_in_date : $scope.searchOptions.date,\n };\n\n } else {\n\n container = {\n id: item.id,\n overrideDate: $scope.searchOptions.date,\n check_companions: has_companions,\n }\n\n route += \"Acts\";\n\n }\n\n if (has_companions) {\n modalService.confirm({\n title: $filter('translate')('events.guests.warning'),\n message: $filter('translate')('events.resume.has_companions'),\n onAccept: function () {\n change(container, route);\n },\n onCancel: function () {\n container.check_companions = false;\n change(container, route);\n }\n });\n } else {\n change(container, route);\n }\n });\n\n }\n\n var change = function (container, route) {\n const isMainEvent = $scope.selectedAct.isMainEvent; \n $timeout(function () {\n modalService.confirm({\n title: $filter('translate')('events.guests.warning'),\n message: $filter('translate')('events.resume.change_confirm'),\n onAccept: function () {\n\n $log.debug('Container : ...');\n $log.debug(container);\n\n Restangular.all(\"EventsResume/\" + route).post(container).then(function () {\n\n toastr.success($filter('translate')('events.resume.modified_successful'));\n $scope.loadGuests(); $scope.loadChart();\n\n });\n\n }\n });\n });\n }\n\n $scope.modifyStatus = function (item, route) {\n\n changeAssistance(item, route);\n\n }\n\n $scope.export = function () {\n\n const isMainEvent = $scope.selectedAct.isMainEvent;\n\n if (isMainEvent) {\n\n let options = {\n filters: {\n EVENT_ID: $stateParams.id,\n EXPORT_TYPE: \"RESUME\",\n }\n };\n\n datasetsService.exportByType(\"event_resume\", options);\n\n } else {\n \n let options = {\n filters: {\n ACT_ID: $scope.selectedAct.id,\n }\n }\n\n datasetsService.exportByType(\"act_resume\", options);\n\n }\n\n };\n\n //Cuando salga del events, se destruirá el intervalo.\n $scope.$on(\"$destroy\", function () {\n // $log.debug(\"Entra en el destroy del dashboard\");\n if (angular.isDefined(intervalLoadInfoDashboard)) {\n $interval.cancel(intervalLoadInfoDashboard);\n intervalLoadInfoDashboard = undefined;\n }\n });\n\n }])\n\n;","import { fabric } from \"fabric\";\n\nimport _ from 'lodash';\n\nimport moment from \"moment\";\n\nimport ConfigGuestModalView from \"../guests/configGuestModal.html\";\nimport SearchGroupModalView from \"../guests/searchGroupModal.html\";\nimport PlaceNotAvailableActionModalView from \"./spaces-place-not-available-action.html\";\nimport SetFirstPositionModalView from \"./spaces-set-first-position.html\";\nimport FreePlaceActionModalView from \"./spaces-free-place-action.html\";\nimport SpaceItemTableModalView from \"./spaces-item-table.html\";\nimport SpaceItemZoneModalView from \"./spaces-item-zone.html\";\nimport SpaceItemVehicleModalView from \"./spaces-item-vehicle.html\";\nimport SpaceGuestGridTemplateView from \"./cell-template-guest.html\";\nimport SpacePlaceGridTemplateView from \"./cell-template-place.html\";\n\nvar CONFIG_TABLE = {\n CARTESIAN_4: [1, 4, 2, 3],\n CARTESIAN_5: [1, 5, 4, 2, 3],\n CARTESIAN_6: [1, 5, 4, 2, 6, 3],\n CARTESIAN_7: [1, 5, 8, 4, 2, 6, 7, 3],\n CARTESIAN_8: [1, 5, 8, 4, 2, 6, 7, 3],\n CARTESIAN_9: [1, 5, 8, 4, 2, 6, 9, 7, 3],\n CARTESIAN_10: [1, 5, 9, 8, 4, 2, 6, 10, 7, 3],\n CARTESIAN_11: [1, 5, 9, 8, 4, 2, 6, 10, 11, 7, 3],\n CARTESIAN_12: [1, 5, 9, 12, 8, 4, 2, 6, 10, 11, 7, 3],\n CARTESIAN_13: [1, 5, 9, 12, 8, 4, 2, 6, 10, 13, 11, 7, 3],\n CARTESIAN_14: [1, 5, 9, 14, 12, 8, 4, 2, 6, 10, 13, 11, 7, 3],\n CLOCK_4: [1, 4, 2, 3],\n CLOCK_5: [1, 4, 5, 2, 3],\n CLOCK_6: [1, 4, 5, 2, 6, 3],\n CLOCK_7: [1, 4, 5, 2, 6, 7, 3],\n CLOCK_8: [1, 4, 8, 5, 2, 6, 7, 3],\n CLOCK_9: [1, 4, 8, 9, 5, 2, 6, 7, 3],\n CLOCK_10: [1, 4, 8, 9, 5, 2, 6, 7, 10, 3],\n CLOCK_11: [1, 4, 8, 9, 5, 2, 6, 7, 10, 11, 3],\n CLOCK_12: [1, 4, 8, 12, 9, 5, 2, 6, 10, 11, 7, 3],\n CLOCK_13: [1, 4, 8, 12, 13, 9, 5, 2, 6, 10, 11, 7, 3],\n CLOCK_14: [1, 4, 8, 12, 13, 9, 5, 2, 6, 10, 14, 11, 7, 3],\n}\nvar CONFIG_TABLE_FRENCH = {\n CARTESIAN_4: [3, 1, 4, 2],\n CARTESIAN_5: [3, 1, 5, 2, 4],\n CARTESIAN_6: [3, 1, 5, 6, 2, 4],\n CARTESIAN_7: [7, 3, 1, 5, 4, 2, 6],\n CARTESIAN_8: [7, 3, 1, 5, 8, 4, 2, 6],\n CARTESIAN_9: [7, 3, 1, 5, 9, 8, 4, 2, 6],\n CARTESIAN_10: [7, 3, 1, 5, 9, 8, 4, 2, 6 ,10],\n CARTESIAN_11: [11, 7, 3, 1, 5, 9, 8, 4, 2, 6, 10],\n CARTESIAN_12: [11, 7, 3, 1, 5, 9, 12, 8, 4, 2, 6, 10],\n CARTESIAN_13: [11, 7, 3, 1, 5, 9, 13, 10, 6, 2, 4, 8, 12],\n CARTESIAN_14: [11, 7, 3, 1, 5, 9, 13, 12, 8, 4, 2, 6, 10, 14],\n CLOCK_4: [3, 1, 4, 2],\n CLOCK_5: [3, 1, 4, 5, 2],\n CLOCK_6: [3, 1, 4, 5, 2, 6],\n CLOCK_7: [7, 3, 1, 4, 5, 2, 6],\n CLOCK_8: [7, 3, 1, 4, 8, 5, 2, 6],\n CLOCK_9: [7, 3, 1, 4, 8, 9, 5, 2, 6],\n CLOCK_10: [7, 3, 1, 4, 8, 9, 5, 2, 6, 10],\n CLOCK_11: [11, 7, 3, 1, 4, 8, 9, 5, 2, 6, 10],\n CLOCK_12: [11, 7, 3, 1, 4, 8, 12, 9, 5, 2, 6, 10],\n CLOCK_13: [11, 7, 3, 1, 4, 8, 12, 13, 9, 5, 2, 6, 10],\n CLOCK_14: [11, 7, 3, 1, 4, 8, 12, 13, 9, 5, 2, 6, 10, 14],\n}\n\nangular.module(\"events\")\n\n .directive(\"ngInject\", ['$parse', '$interpolate', '$controller', '$compile', function ($parse, $interpolate, $controller, $compile) {\n return {\n terminal: true,\n transclude: true,\n priority: 510,\n link: function (scope, element, attrs, ctrls, transclude) {\n\n if (!attrs.ngController) {\n element.removeAttr(\"ng-inject\");\n $compile(element)(scope);\n return;\n }\n\n const controllerName = attrs.ngController;\n\n const newScope = scope.$new(false);\n\n const locals = $parse(attrs.ngInject)(scope);\n locals.$scope = newScope;\n\n const controller = $controller(controllerName, locals);\n element.data(\"ngControllerController\", controller);\n\n element.removeAttr(\"ng-inject\").removeAttr(\"ng-controller\");\n $compile(element)(newScope);\n transclude(newScope, function (clone) {\n element.append(clone);\n });\n // restore to hide tracks\n element.attr(\"ng-controller\", controllerName);\n }\n };\n }])\n\n .controller(\"EventsSpacesEditCtrl\", \n ['$q', '$http', 'modalService', '$rootScope', '$scope', 'Restangular', '$uibModal', '$filter', '$translate', '$stateParams', '$state', '$timeout', 'LoginService', '$uibModalInstance', 'id', 'configuration', 'name', 'SpacesService', 'eventService', '$log',\n function ($q, $http, modalService, $rootScope, $scope, Restangular, $uibModal, $filter, $translate, $stateParams, $state, $timeout, LoginService, $uibModalInstance, id, configuration, name, SpacesService, eventService, $log) {\n $log = $log.getInstance('EventsSpacesEditCtrl');\n $scope.is_template = $stateParams.is_template == 'true';\n $scope.showGuestList = true;\n\n //guardamos todos los invitados del evento para poder filtrarlos localmente\n let allEventGuest = [];\n\n //calculamos alto disponible para canvas\n const availableHeight = window.innerHeight - 240;\n $scope.canvas_height = availableHeight + \"px\";\n \n $scope.spaceCanvasFullWidth = false;\n\n let guestsInfo = [];\n\n let inSpaceEvents = true;\n\n if ($state.current.name === \"spaces.list\") {\n $scope.showGuestList = false;\n //$scope.canvas_height = \"800px\";??\n inSpaceEvents = false;\n $scope.isDashboard = false;\n }\n else if ($state.current.name === \"events.edit.spaces\")\n {\n $scope.isDashboard = false; \n }\n else if ($state.current.name === \"dashboard_space.show\") {\n $scope.isDashboard = true;\n }\n\n $scope.zone_color = \"#f8d48a\";\n $scope.place_color_free = \"#e9e9e9\";\n $scope.place_color_occuped = \"#cccccc\";\n\n Restangular.all('Configurations').getList({ code: \"SPACE_ZONE_BACKGROUND_COLOR\"}).then(function (configuration) {\n if(Array.isArray(configuration) && configuration.length > 0) {\n $scope.zone_color = configuration[0].value;\n } \n });\n\n Restangular.all('Configurations').getList({ code: \"SPACE_PLACE_FREE_COLOR\"}).then(function (configuration) {\n if(Array.isArray(configuration) && configuration.length > 0) {\n $scope.place_color_free = configuration[0].value;\n }\n });\n\n Restangular.all('Configurations').getList({ code: \"SPACE_PLACE_OCCUPPIED_COLOR\"}).then(function (configuration) {\n if(Array.isArray(configuration) && configuration.length > 0) {\n $scope.place_color_occuped = configuration[0].value;\n }\n });\n \n $scope.spaceClass = \"col-lg-12\";\n $scope.guestsClass = \"col-lg-12\";\n $scope.selectedRows = [];\n $scope.search = {\n name_surnames: \"\",\n not_allocated: null,\n groups: null,\n _sortBy: \"prefered\",\n position_name: \"\",\n confirmed: false\n };\n $scope.spaceOptions = function (options) {\n $scope.isDashboard = options.isDashboard;\n $scope.spaceClass = options.spaceClass;\n $scope.guestsClass = options.guestsClass;\n $rootScope.islogged = false;\n\n };\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"EVENTS_SPACE_WRITE\");\n const eventId = $stateParams.id;\n $scope.spaceDTO = {\n id: id,\n name: name,\n width: 2000,\n height: 1000,\n useFullname: true,\n usePosition: false\n };\n $scope.space = {\n zoom: 1,\n items: []\n };\n $scope.canvas = null;\n\n\n loadGridEventSpaceGuest();\n\n const Direction = {\n LEFT: 0,\n UP: 1,\n RIGHT: 2,\n DOWN: 3\n };\n \n $scope.gridLines = [];\n $scope.gridGroup = null;\n\n function addGrid() {\n $log.debug('addGrid');\n if ($scope.gridGroup) return;\n let gridsize = 5;\n let gridoption = {\n stroke: \"#666666\",\n strokeWidth: 1,\n objectCaching: false\n// strokeDashArray: [5, 5]\n };\n for (let x = 1; x < ($scope.spaceDTO.width); x += 50) {\n $scope.gridLines.push(new fabric.Line([x, 0, x, $scope.spaceDTO.height], gridoption));\n }\n for (let x = 1; x < ($scope.spaceDTO.height); x += 50) {\n $scope.gridLines.push(new fabric.Line([0, x, $scope.spaceDTO.width, x], gridoption));\n }\n $scope.gridGroup = new fabric.Group($scope.gridLines, {\n selectable: false,\n evented: false,\n objectCaching: false\n })\n $scope.gridGroup.addWithUpdate();\n $scope.canvas.add($scope.gridGroup);\n $scope.canvas.sendToBack($scope.gridGroup);\n }\n\n function removeGrid() {\n $scope.gridGroup && $scope.canvas.remove($scope.gridGroup);\n $scope.gridLines = [];\n $scope.gridGroup = null;\n }\n\n $scope.setCanvasWidth = function() {\n resizeCanvas(true);\n }\n \n $scope.setCanvasHeight = function() {\n resizeCanvas(true);\n }\n \n function moveSelected(direction, rotate = false) {\n let activeObject = $scope.canvas.getActiveObject();\n if (activeObject) {\n switch (direction) {\n case Direction.LEFT:\n if(rotate) {\n activeObject.angle -= $scope.angleStep;\n } else {\n activeObject.left -= $scope.step;\n }\n break;\n case Direction.UP:\n activeObject.top -= $scope.step;\n break;\n case Direction.RIGHT:\n if(rotate) {\n activeObject.angle += $scope.angleStep;\n } else {\n activeObject.left += $scope.step;\n }\n break;\n case Direction.DOWN:\n activeObject.top += $scope.step;\n break;\n }\n activeObject.setCoords();\n $scope.canvas.renderAll();\n } else {\n $log.debug('no object selected');\n }\n }\n\n $scope.init = function () {\n $scope.canvas = new fabric.Canvas('spaceCanvas');\n \n $scope.canvas.preserveObjectStacking = true;\n (window as any)._canvas = $scope.canvas;\n\n // Listen to double click event on canvas element\n $($scope.canvas.upperCanvasEl).dblclick(function (e, self) {\n const target = $scope.canvas.findTarget(e);\n if (target) {\n $scope.onObjectDblClick(target);\n } else {\n //dblclick fuera de objeto\n }\n });\n\n $scope.canvas.on('mouse:over', $scope.onMouseOver);\n\n $scope.canvas.on('mouse:wheel', function(opt) {\n const delta = opt.e.deltaY;\n let zoom = $scope.canvas.getZoom();\n zoom *= 0.999 ** delta;\n if (zoom > 20) zoom = 20;\n if (zoom < 0.01) zoom = 0.01;\n $scope.canvas.zoomToPoint({ x: opt.e.offsetX, y: opt.e.offsetY }, zoom);\n $scope.space.zoom = $scope.canvas.getZoom();\n opt.e.preventDefault();\n opt.e.stopPropagation();\n });\n\n $scope.canvas.on('mouse:down', function(opt) {\n let evt = opt.e;\n if (evt.altKey === true) {\n this.isDragging = true;\n this.selection = false;\n this.lastPosX = evt.clientX;\n this.lastPosY = evt.clientY;\n }\n });\n\n $scope.canvas.on('mouse:move', function(opt) {\n if (this.isDragging) {\n const e = opt.e;\n const vpt = this.viewportTransform;\n vpt[4] += e.clientX - this.lastPosX;\n vpt[5] += e.clientY - this.lastPosY;\n this.requestRenderAll();\n this.lastPosX = e.clientX;\n this.lastPosY = e.clientY;\n }\n });\n $scope.canvas.on('mouse:up', function(opt) {\n // on mouse up we want to recalculate new interaction\n // for all objects, so we call setViewportTransform\n this.setViewportTransform(this.viewportTransform);\n this.isDragging = false;\n this.selection = true;\n });\n\n/* $scope.canvas.on('object:moving', function(options) {\n let grid = 50;\n $log.debug(options.target.left);\n $log.debug(options.target.top);\n if (Math.round(options.target.left / grid * 4) % 4 == 0 &&\n Math.round(options.target.top / grid * 4) % 4 == 0) {\n options.target.set({\n left: Math.round(options.target.left / grid) * grid,\n top: Math.round(options.target.top / grid) * grid\n }).setCoords();\n }\n });*/\n\n fabric.util.addListener(document.body, 'keydown', function (options) {\n let key = options.which || options.keyCode; // key detection\n if (key === 37) { // handle Left key\n moveSelected(Direction.LEFT, options.altKey);\n } else if (key === 38) { // handle Up key\n moveSelected(Direction.UP);\n } else if (key === 39) { // handle Right key\n moveSelected(Direction.RIGHT, options.altKey);\n } else if (key === 40) { // handle Down key\n moveSelected(Direction.DOWN);\n }\n });\n \n $scope.step = 5;\n $scope.angleStep = 5;\n\n initFabricControls();\n \n $scope.canvas.calcOffset();\n };\n \n function initFabricControls() {\n let deleteImg = document.createElement('img');\n deleteImg.src = 'assets/img/spaces/icons/delete.svg';\n\n let sendBackImg = document.createElement('img');\n sendBackImg.src = 'assets/img/spaces/icons/arrow-down-double.svg';\n\n let sendFrontImg = document.createElement('img');\n sendFrontImg.src = 'assets/img/spaces/icons/arrow-up-double.svg';\n\n let goUpImg = document.createElement('img');\n goUpImg.src = 'assets/img/spaces/icons/arrow-up.svg';\n\n let goDownImg = document.createElement('img');\n goDownImg.src = 'assets/img/spaces/icons/arrow-down.svg';\n\n fabric.Object.prototype.controls.deleteControl = new fabric.Control({\n x: 0.5,\n y: -0.5,\n offsetY: 136,\n offsetX: 16,\n cursorStyle: 'pointer',\n mouseUpHandler: deleteObject,\n render: renderIcon(deleteImg),\n cornerSize: 24\n });\n\n fabric.Object.prototype.controls.sendToFrontControl = new fabric.Control({\n x: 0.5,\n y: -0.5,\n offsetY: 8,\n offsetX: 16,\n cursorStyle: 'pointer',\n mouseUpHandler: sendToFrontObject,\n render: renderIcon(sendFrontImg),\n cornerSize: 24\n });\n\n fabric.Object.prototype.controls.goUpControl = new fabric.Control({\n x: 0.5,\n y: -0.5,\n offsetY: 40,\n offsetX: 16,\n cursorStyle: 'pointer',\n mouseUpHandler: goUpObject,\n render: renderIcon(goUpImg),\n cornerSize: 24\n });\n\n fabric.Object.prototype.controls.goDownControl = new fabric.Control({\n x: 0.5,\n y: -0.5,\n offsetY: 72,\n offsetX: 16,\n cursorStyle: 'pointer',\n mouseUpHandler: goDownObject,\n render: renderIcon(goDownImg),\n cornerSize: 24\n });\n\n fabric.Object.prototype.controls.sendToBackControl = new fabric.Control({\n x: 0.5,\n y: -0.5,\n offsetY: 104,\n offsetX: 16,\n cursorStyle: 'pointer',\n mouseUpHandler: sendToBackObject,\n render: renderIcon(sendBackImg),\n cornerSize: 24\n }); \n }\n\n function deleteObject(eventData, transform) {\n $scope.deleteObject(transform.target);\n }\n\n function sendToBackObject(eventData, transform) {\n $scope.sendToBack(transform.target);\n }\n\n function goDownObject(eventData, transform) {\n $scope.canvas.sendBackwards(transform.target);\n }\n\n function goUpObject(eventData, transform) {\n $scope.canvas.bringForward(transform.target, true);\n }\n\n function sendToFrontObject(eventData, transform) {\n $scope.canvas.bringToFront(transform.target);\n }\n \n function renderIcon(icon) {\n return function renderIcon(ctx, left, top, styleOverride, fabricObject) {\n const size = this.cornerSize;\n ctx.save();\n ctx.translate(left, top);\n ctx.rotate(fabric.util.degreesToRadians(fabricObject.angle));\n ctx.drawImage(icon, -size/2, -size/2, size, size);\n ctx.restore();\n }\n }\n\n function removeBox() {\n\n //quitamos el box\n $scope.canvas._objects.forEach(function (obj) {\n if(obj.localType == 'box') {\n $scope.canvas.remove(obj);\n }\n });\n\n\n if($scope.gridShown) {\n removeGrid();\n }\n }\n \n function addBox() {\n\n //si hay un box de antes, lo quitamos\n removeBox();\n\n if($scope.gridShown) {\n addGrid();\n }\n\n /*let lines = [];\n // Top line\n lines.push(new fabric.Line([0, 0, $scope.spaceDTO.width, 0], { strokeWidth: 4, stroke: '#000000' }));\n\n // Left line\n lines.push(new fabric.Line([0, 0, 0, $scope.spaceDTO.height ], { strokeWidth: 4, stroke: '#000000' }));\n\n // Right line\n lines.push(new fabric.Line([$scope.spaceDTO.width, 0, $scope.spaceDTO.width, $scope.spaceDTO.height], { strokeWidth: 4, stroke: '#000000' }));\n\n // Bottom line\n lines.push(new fabric.Line([0, $scope.spaceDTO.height, $scope.spaceDTO.width, $scope.spaceDTO.height], { strokeWidth: 4, stroke: '#000000' }));*/\n\n let w = parseInt($scope.spaceDTO.width);\n let h = parseInt($scope.spaceDTO.height);\n\n let rect = new fabric.Rect({\n left: 0,\n top: 0,\n width: w,\n height: h,\n fill: '',\n stroke: '#000000',\n strokeWidth: 4\n });\n \n let box = new fabric.Group([rect], {\n localType: 'box',\n selectable: false,\n evented: false,\n objectCaching: false,\n draggable: false\n })\n $scope.canvas.add(box);\n $scope.canvas.sendBackwards(box);\n }\n \n function resizeCanvas(clean = false) {\n if (clean) {\n removeBox();\n }\n \n if($scope.spaceDTO.width == undefined) {\n $scope.spaceDTO.width = 2000;\n }\n if($scope.spaceDTO.height == undefined) {\n $scope.spaceDTO.height = 1000;\n }\n// $scope.canvas.setWidth($scope.spaceDTO.width);\n// $scope.canvas.setHeight($scope.spaceDTO.height);\n $scope.canvas.calcOffset();\n \n if(clean) {\n addBox();\n }\n }\n\n $scope.drawSpace = function (clean) {\n $timeout(function () {\n $scope.canvas.clear();\n angular.forEach($scope.space.items, function (item) {\n let skip = false;\n\n //si es un box viejo lo omitimos\n if(item.type == 'group' && item._objects?.length==4 && item._objects[0].type=='line' && item._objects[0].strokeWidth == 4) skip = true;\n\n if (!skip) (window as any)._canvas.add(item);\n\n });\n resizeCanvas(true);\n }, 200);\n\n };\n\n $scope.keepaliveInterval = null;\n $scope.keepalive = function () {\n if ($scope.spaceDTO.id != null && $scope.spaceDTO.event_id != null) {\n Restangular.one('eventsspaces/' + $scope.spaceDTO.event_id + \"/edit/\" + $scope.spaceDTO.id + \"/keepalive\").get().then(function (results) {\n });\n }\n $scope.keepaliveInterval = setTimeout(function () {\n $scope.keepalive();\n }, 20 * 1000);\n };\n\n $scope.$on(\"$destroy\", function () {\n if ($scope.keepaliveInterval!=null) clearTimeout($scope.keepaliveInterval);\n });\n\n //cargamos espacio\n $timeout(function () {\n $scope.init();\n if (id !== null && typeof (id) !== \"undefined\") {\n let apiPath = 'eventsspaces/' + eventId + \"/edit/\";\n //si es plantilla cargamos de plantillas\n if (!$scope.showGuestList) apiPath = 'spaces/';\n Restangular.one(apiPath, id).get().then(function (results) {\n $scope.spaceDTO = results;\n\n if ($scope.showGuestList) {\n //comprobamos si lo esta editando otro usuario\n if ($scope.spaceDTO.last_edit_date != null) {\n const diff = moment().diff($scope.spaceDTO.last_edit_date, \"seconds\");\n if (diff < 30 && ($scope.spaceDTO.modified_by + \"\") != localStorage.getItem(\"userId\")) {\n modalService.message({\n title: $filter('translate')('events.spaces.error_only_one_user_title'),\n message: $filter('translate')('events.spaces.error_only_one_user'),\n onAccept: function () { }\n });\n $uibModalInstance.dismiss('cancel');\n return;\n }\n }\n\n //registramos keepalive\n $scope.keepalive();\n }\n\n $scope.spaceDTO.configuration = JSON.parse($scope.spaceDTO.configuration);\n $scope.space = $scope.spaceDTO.configuration;\n $scope.canvas.setZoom($scope.space.zoom);\n if($scope.space.viewportTransform!=null) $scope.canvas.setViewportTransform($scope.space.viewportTransform);\n $scope.space.items = [];\n $scope.canvas.loadFromJSON($scope.space.canvas, function () {\n }, function (o, object) {\n $scope.space.items.push(object);\n });\n $scope.drawSpace(true);\n }, function (error) {\n $log.error(error);\n let errorMessage = \"Error desconocido\";\n if (error.data?.ExceptionMessage != null) errorMessage = error.data.ExceptionMessage;\n toastr.error(errorMessage);\n });\n \n } else {\n $scope.spaceDTO.event_id = $stateParams.id;\n\n //Miramos si viene del template:\n if (configuration != \"\") {\n $scope.spaceDTO.configuration = JSON.parse(configuration);\n $scope.space = $scope.spaceDTO.configuration;\n $scope.canvas.setZoom($scope.space.zoom);\n $scope.space.items = [];\n $scope.canvas.loadFromJSON($scope.space.canvas, function () {\n }, function (o, object) {\n $scope.space.items.push(object);\n });\n $scope.drawSpace(true);\n } else {\n resizeCanvas();\n $scope.space = {\n zoom: 1,\n items: []\n };\n }\n }\n }, 2000);\n \n //menu contextual de spacio\n $scope.contextMenuOptions = [\n {\n text: 'Añadir zona',\n click: function ($itemScope, $event, modelValue, text, $li) {\n $scope.createZone(null, $event.offsetX, $event.offsetY);\n }\n },\n {\n text: 'Añadir mesa',\n click: function ($itemScope, $event, modelValue, text, $li) {\n $scope.createTable(null, $event.offsetX, $event.offsetY);\n }\n },\n {\n text: 'Añadir vehículo',\n click: function ($itemScope, $event, modelValue, text, $li) {\n $scope.createVehicle(null, $event.offsetX, $event.offsetY);\n }\n },\n null,\n {\n text: 'Enviar al fondo',\n click: function ($itemScope, $event, modelValue, text, $li) {\n if ($scope.canvas.getActiveObject() != null) $scope.sendToBack($scope.canvas.getActiveObject());\n $scope.canvas.discardActiveObject();\n }\n }, //separador\n {\n text: 'Eliminar elemento seleccionado',\n click: function ($itemScope, $event, modelValue, text, $li) {\n if ($scope.canvas.getActiveObject() != null) $scope.deleteObject($scope.canvas.getActiveObject());\n $scope.canvas.discardActiveObject();\n }\n }\n ];\n\n $scope.blinkPlaceIterations = 14;\n $scope.blinkPlace = function (place, color_guest) {\n //enceder rojo, normal cada 500ms\n if (place.fill == \"red\") {\n //place.setFill($scope.place_color_occuped);\n place.set('fill', color_guest);\n } else {\n place.set('fill', \"red\");\n }\n if (typeof place.blinkIterationNumber == \"undefined\" || place.blinkIterationNumber == 0) place.blinkIterationNumber = 0;\n place.blinkIterationNumber++;\n if ($scope.blinkPlaceIterations > place.blinkIterationNumber) {\n $timeout(function () { $scope.blinkPlace(place, color_guest); }, 350);\n } else {\n place.blinkIterationNumber = 0;\n }\n //renderizar\n $scope.canvas.renderAll();\n };\n\n $scope.blink = function (eventGuest) {\n const event_guest_id = eventGuest.id;\n const objs = $scope.canvas.getObjects();\n for (let i = 0; i < objs.length; i++) {\n const obj = objs[i];\n\n if (typeof obj.guests != \"undefined\") {\n //buscar si esta dentro el invitado\n for (let j = 0; j < obj.guests.length; j++) {\n const guest = obj.guests[j];\n if (guest.event_guest_id == event_guest_id) {\n //buscar el asiento\n for (let n = 0; n < obj._objects.length; n++) {\n const place = obj._objects[n];\n if (typeof place.options != \"undefined\") {\n if (place.options.zone_prefered == guest.prefered) {\n place.blinkIterationNumber = 0;\n $scope.blinkPlace(place, guest.color_guest);\n break;\n }\n }\n }\n break;\n }\n }\n }\n\n }\n };\n\n //lista de invitados\n\n\n $scope.confirmationStatus = {\n pending: $filter('translate')('events.guests.pending'), \n confirmed: $filter('translate')('events.guests.confirmed'), \n rejected: $filter('translate')('events.guests.rejected'), \n pending_approval: $filter('translate')('events.guests.pending_approval'), \n manage_delegate: $filter('translate')('events.guests.manage_delegate'), \n delegated: $filter('translate')('events.guests.delegated') \n\n }\n\n\n\n const callbackFunctionSortGuests = function (a, b) {\n const sortBy = $scope.search._sortBy;\n if (sortBy === \"prefered\") {\n return a.zone_prefered - b.zone_prefered;\n } else if (sortBy === \"name\") {\n return a.FK_events_guests_persons.fullname.localeCompare(b.FK_events_guests_persons.fullname);\n } else if (sortBy === \"position\") {\n const aPosition = a.FK_events_guests_persons_positions?.FK_persons_positions_positions?.FK_positions_tl_positions[0]?.male_description || \"\";\n const bPosition = b.FK_events_guests_persons_positions?.FK_persons_positions_positions?.FK_positions_tl_positions[0]?.male_description || \"\";\n return aPosition.localeCompare(bPosition);\n }\n // Agrega más condiciones de ordenación según sea necesario\n return 0;\n }\n\n function getFiteredGuests() {\n const localFilteredResults = allEventGuest.filter(function (guest) {\n let ret = true;\n if (ret && $scope.search.name_surnames != \"\") ret = guest.FK_events_guests_persons?.fullname?.toLowerCase().includes($scope.search.name_surnames.toLowerCase());\n if (ret && $scope.search.position_name != \"\") {\n if (guest.FK_events_guests_persons_positions?.FK_persons_positions_positions?.FK_positions_tl_positions.length > 0) {\n let position = guest.FK_events_guests_persons_positions?.FK_persons_positions_positions?.FK_positions_tl_positions[0];\n ret = position.male_description?.toLowerCase().includes($scope.search.position_name.toLowerCase()) || position.female_description?.toLowerCase().includes($scope.search.position_name.toLowerCase());\n } else {\n ret = false;\n }\n }\n if (ret && $scope.search.confirmed == true) ret = guest.confirmation_status == \"confirmed\";\n if (ret && $scope.search.not_allocated == true) ret = guest.zone_prefered == null;\n if (ret && $scope.search.groups != null && $scope.search.groups.length > 0) {\n let anyGroup = false;\n //recorremos grupos\n for (let i = 0; i < $scope.search.groups.length; i++) {\n let group_id = $scope.search.groups[i];\n if (group_id == guest.FK_events_guests_persons_positions?.FK_persons_positions_positions?.FK_positions_groups?.id) {\n anyGroup = true;\n break;\n }\n }\n ret = anyGroup;\n }\n if (ret && $scope.search.positions != null && $scope.search.positions.length > 0) {\n let anyPosition = false;\n //recorremos grupos\n for (let i = 0; i < $scope.search.positions.length; i++) {\n let position_id = $scope.search.positions[i];\n if (position_id == guest.FK_events_guests_persons_positions?.FK_persons_positions_positions?.id) {\n anyPosition = true;\n break;\n }\n }\n ret = anyPosition;\n }\n\n //if(ret && $scope.search.positions != null && $scope.search.positions.length > 0) ret = $scope.search.positions.includes(guest.position_id);\n\n return ret;\n });\n\n // Hacemos el short de los invitados\n localFilteredResults.sort(callbackFunctionSortGuests);\n\n return localFilteredResults;\n\n }\n\n\n\n\n function loadGridEventSpaceGuest() {\n if ($scope.showGuestList) {\n\n $log.info('loadGridEventSpaceGuest');\n $log.debug('id: ' + id);\n $log.debug('event_id: ' + $stateParams.id);\n // $scope.zones = eventService.getSpaceZones($stateParams.id, id).$object;\n\n $scope.gridEventSpaceGuest = {\n rowHeight:50,\n pdfTitle: $filter('translate')('events.spaces.guests_title'),\n exporterMenuCsv: false,\n enableGridMenu: true,\n enableSorting: false,\n paginationPageSizes: [50, 100, 150],\n enableSelectionBatchEvent: true,//para obtener los seleccionados\n paginationPageSize: 50,\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n this.gridApi.core.on.rowsRendered($scope, callbackFunctionItemChange);\n this.gridApi.selection.on.rowSelectionChanged($scope, callbackFunctionRowSelected);\n this.gridApi.selection.on.rowSelectionChangedBatch($scope, callbackFunctionRowSelected);\n this.gridApi.edit.on.afterCellEdit($scope, function(rowEntity, colDef, newValue, oldValue) {\n if(colDef.name === 'zone_prefered') {\n $scope.freePlace(rowEntity);\n guestsInfo = [];\n rowEntity.name = getFullSeatName(rowEntity);\n guestsInfo.push(rowEntity);\n if(!checkBusyPlacesAndAssign(newValue, 1)) {\n rowEntity[colDef.name] = oldValue;\n checkBusyPlacesAndAssign(oldValue, 1);\n guestsInfo = [];\n }\n }\n $scope.canvas.renderAll();\n $scope.$apply();\n });\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true, allowCellFocus: false },\n {\n enableCellEdit: false,\n allowCellFocus : false,\n name: 'name',\n displayName: $filter('translate')('events.spaces.guest_name'),\n enableFiltering: false,\n enableHiding: false,\n cellTemplate: SpaceGuestGridTemplateView,\n\n //C: \\Users\\guill\\Source\\repos\\stela\\Stela.Frontend\\src\\app\\events\\spaces\n\n },\n {\n name: 'zone_prefered',\n field: 'zone_prefered',\n displayName: $filter('translate')('events.spaces.prefered_position'),\n enableFiltering: false,\n width: 80,\n cellTemplate: '
{{ COL_FIELD }}
'\n },\n {\n enableCellEdit: false,\n allowCellFocus : false,\n name: 'seat',\n displayName: $filter('translate')('events.spaces.guest_zone'),\n enableFiltering: false,\n width: 150,\n cellTemplate: SpacePlaceGridTemplateView \n },\n { name: 'zone_id', visible: false, enableHiding: false, exporterSuppressExport: true, allowCellFocus: false },\n ],\n getData: function (options) {\n const deferred = $q.defer();\n\n $log.debug('getting data')\n\n //quitados filtros porque se aplican debajo en local\n options.event_id = $stateParams.id;\n //options.name_surnames = $scope.search.name_surnames;\n options._sortBy = $scope.search._sortBy;\n //options.allocated = ($scope.search.not_allocated == true ? false : null);\n options.groups_ids = $scope.search.groups;\n options.positions_ids = $scope.search.positions;\n //options.position_name = $scope.search.position_name;\n options.event_space_id = id ?? -1;\n //options.confirmed = $scope.search.confirmed;\n if(options._page==null) options._page = 1;\n let _page = options._page-1;\n let _pageSize = options._pageSize;\n delete options._page;\n delete options._pageSize;\n if ($scope.isDashboard) options.allocated = true;\n\n //subimos scroll arriba\n $(\"#divGuestsTable\").animate({ scrollTop: 0 }, 300);\n\n if(allEventGuest.length == 0) {\n //los pedimos al servidor\n Restangular.all('EventsSpaceGuests').getList(options).then(function (results) {\n allEventGuest = results;\n let localFilteredResults = getFiteredGuests();\n\n //devolvemos solo la pagina\n localFilteredResults = localFilteredResults.slice(_page * _pageSize, (_page + 1) * _pageSize);\n \n deferred.resolve(localFilteredResults);\n });\n }else{\n //trabajmos en los cargados localmente\n var localFilteredResults = getFiteredGuests();\n\n //devolvemos solo la pagina\n localFilteredResults = localFilteredResults.slice(_page * _pageSize, (_page + 1) * _pageSize);\n \n deferred.resolve(localFilteredResults);\n }\n\n return deferred.promise;\n }\n };\n }\n\n }\n \n $scope.getPrincipalName = function (guest) {\n let principalName = '';\n let principalGuest = allEventGuest.find(m=>m.person_id == guest.referrer_person_id);\n if(principalGuest != null){\n principalName = principalGuest.FK_events_guests_persons.surname;\n if(principalGuest.FK_events_guests_persons.lastname) principalName += \" \" + principalGuest.FK_events_guests_persons.lastname;\n principalName += \", \" + principalGuest.FK_events_guests_persons.name;\n }\n return principalName;\n };\n\n $scope.configDialog = function (item) {\n let $modalInstance = null;\n if ($rootScope.sizeLg) {\n $modalInstance = $uibModal.open({\n animation: true,\n template: ConfigGuestModalView,\n size: \"lg\",\n controller: \"ConfigGuestsModalCtrl\",\n resolve: {\n item: function () {\n return item;\n },\n event: function () {\n return $scope.event;\n }\n }\n });\n } else {\n $modalInstance = $uibModal.open({\n animation: true,\n template: ConfigGuestModalView,\n controller: \"ConfigGuestsModalCtrl\",\n resolve: {\n item: function () {\n return item;\n },\n event: function () {\n return $scope.event;\n }\n }\n });\n }\n\n //Response del modal\n $modalInstance.result.then(function (data) {\n $scope.loadGuest();\n if (!$scope.$$phase) $scope.$apply();\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n if (!$scope.$$phase) $scope.$apply();\n });\n \n }\n\n //Funcion que se al seleccionar algo en el grid.\n let callbackFunctionRowSelected = function (row, evt) {\n let addAll = row.length > 1;\n if (!addAll) {\n\n //if (row.length == 1) row = row[0];//a veces llega como un array otras como un objeto. No funciona si se pone la linea porque entonces no se puede seleccionar solo a uno.\n if (typeof row.entity != \"undefined\") {\n let nameToShow = getFullSeatName(row.entity);\n let prefered = 99999999;\n if (row.entity.FK_events_guests_persons_positions && row.entity.FK_events_guests_persons_positions.FK_persons_positions_positions != null) {\n prefered = row.entity.FK_events_guests_persons_positions.position_order != null ? row.entity.FK_events_guests_persons_positions.position_order : row.entity.FK_events_guests_persons_positions.FK_persons_positions_positions.position_order;\n }\n const newRow = {id: row.entity.id, name: nameToShow, color: row.entity.color, prefered: prefered};\n const index = $scope.selectedRows.map(function (e) {\n return e.id;\n }).indexOf(newRow.id);\n if (row.isSelected) {\n if (index < 0) $scope.selectedRows.push(newRow);\n } else {\n if (index > -1) $scope.selectedRows.splice(index, 1);\n }\n }\n } else {\n if (row[0].isSelected) {\n //se ha seleccionado todo.\n let options: any = {};\n options.event_id = $stateParams.id;\n options.name_surnames = $scope.search.name_surnames;\n options._sortBy = $scope.search._sortBy;\n options.allocated = ($scope.search.not_allocated == true ? false : null);\n options.groups_ids = $scope.search.groups;\n options.positions_ids = $scope.search.positions;\n options.event_space_id = id;\n if ($scope.isDashboard) options.allocated = true;\n options.position_name = $scope.search.position_name;//falta\n options.confirmed = $scope.search.confirmed;//falta\n\n //Tenemos que recorrer lo diseñado para actualizar los datos del grid correctamente. \n Restangular.all('EventsSpaceGuests').getList(options).then(function (results) {\n $scope.selectedRows = [];\n angular.forEach(results, function (rowResult) {\n let nameToShow = getFullSeatName(rowResult);\n $scope.selectedRows.push({ id: rowResult.id, name: nameToShow, color: rowResult.color });\n });\n });\n } else {\n $scope.selectedRows = [];\n }\n \n }\n }\n\n let callbackFunctionItemChange = function () {\n\n $timeout(function () { $scope.$emit('guests-loaded'); }, 250);//lo pongo así porque sino falla la primera vez\n\n }\n\n //Se lanza una vez cargados los invitados.\n $scope.$on(\"guests-loaded\", function () {\n\n $log.debug('Entramos en guests-loaded como unos salvajes')\n\n for (const row of allEventGuest) {\n //const row = allEventGuest[i];\n for (const zone of $scope.space.items) {\n // const zone = $scope.space.items[aux];\n if (zone.type == \"group\" && typeof zone.guests != \"undefined\") {\n for (const guest of zone.guests) {\n //const guest = zone.guests[k];\n if (guest.event_guest_id == row.id) {\n for (const obj of zone._objects) {\n // const obj = zone._objects[j];\n\n /*if (obj.options != null && obj.options.zone_file == guest.file && obj.options.zone_position == guest.position && obj.options.zone_prefered == guest.prefered) {\n\n row.zone = obj.options.zone;\n row.zone_type = obj.options.zone_type;\n row.zone_file = obj.options.zone_file;\n row.zone_position = obj.options.zone_position;\n row.zone_prefered = obj.options.zone_prefered;\n row.locked = obj.options.locked;\n row.droppable = obj.options.droppable;\n if (!$scope.$$phase) $scope.$apply();\n $log.debug(\"Entra: \", obj.options.zone_file, obj.options.zone_position, obj.options.zone_prefered);\n break;\n }*/\n }\n }\n }\n }\n };\n\n for (const selected of $scope.selectedRows) {\n // let selected = $scope.selectedRows[select];\n if (row.id == selected.id) {\n $scope.gridEventSpaceGuest.gridApi.selection.toggleRowSelection(row);\n break;\n }\n };\n };\n\n });\n\n $scope.loadGuest = function () {\n\n $scope.gridEventSpaceGuest.gridApi.core.raise.itemChanged($scope);\n //$timeout(function () { $scope.$broadcast(\"guests-loaded\"); }, 500);//Esta puesto gridApi.core.on.rowsRendered($scope, callbackFunctionItemChange);\n\n }\n\n $scope.clearList = function () {\n\n modalService.confirm({\n title: $filter('translate')('general.delete'),\n message: $filter('translate')('general.delete_message') + \" \" + $filter('translate')('events_guests_zones.list_message') + \"?\",\n onAccept: function () {\n Restangular.all('EventsSpaceGuests/clearGuests').getList({ event_space_id: $scope.spaceDTO.id }).then(function (results) {\n toastr.success($filter('translate')('events_guests_zones.delete_success'));\n $uibModalInstance.close($scope.val);\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n });\n\n }\n\n $scope.changeOrder = function (order) {\n $scope.search._sortBy = order;\n };\n\n $scope.filterGroups = function () {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: SearchGroupModalView,\n size: \"lg\",\n controller: \"SearchGroupModalCtrl\",\n resolve: {\n preselect: function () {\n return true;\n },\n event_id: function () {\n return $stateParams.id;\n },\n is_filter: function () {\n return true;\n },\n listGroupsIds: function () {\n return $scope.search.groups;\n },\n listPositionsIds: function () {\n return $scope.search.positions;\n }\n }\n });\n //Response del modal\n $modalInstance.result.then(function (groups) {\n $scope.search.hasFilteredGroups = groups.ids.length > 0;\n $scope.search.groups_names = groups.ids.length + \" \" + $filter('translate')('guest.groups') + \". \" + groups.listPositions.length + \" \" + $filter('translate')('guest.position');\n /*$scope.search.groups_names = _.chain(groups.groups)\n .filter(function (group) { return _.some(groups.ids, function (id) { return id == group.id; }); })\n .reduce(function (memo, group) { return memo + group.name + \"\\n\"; }, \"\")\n .value();*/\n $scope.search.groups = groups.ids;\n $scope.search.positions = groups.listPositions;\n\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n if (!$scope.$$phase) $scope.$apply();\n });\n };\n\n $scope.unfilterGroups = function () {\n $scope.search.groups = [];\n $scope.search.positions = [];\n $scope.search.hasFilteredGroups = false;\n }\n \n function assignPositions(firstPlace, placeIncrement) {\n //asignar posiciones\n angular.forEach(guestsInfo.sort(function (a, b) { return parseInt(a.prefered) < parseInt(b.prefered) ? -1: 1 }), function (guest) {\n findPosition(guest.id, guest.name, firstPlace, guest.color, placeIncrement);\n firstPlace += placeIncrement;\n });\n\n //renderizar\n $scope.canvas.renderAll();\n }\n \n let checkBusyPlacesAndAssign = function(firstPositionNumber, firstPositionIncrementation) {\n let added = true;\n let busyPlaces = SpacesService.arePlacesFree(firstPositionNumber, firstPositionIncrementation, guestsInfo.length, $scope.space.items);\n let options = {\n busyPlaces: busyPlaces.toString()\n }\n if (busyPlaces.length > 0) {\n let $modalInstanceAction = $uibModal.open({\n animation: true,\n template: PlaceNotAvailableActionModalView,\n size: \"lg\",\n scope: $scope,\n resolve: {\n options: function(){ return options; }\n },\n controller: ['$uibModalInstance', 'options', function ($uibModalInstance, options) {\n $scope.options = options;\n\n $scope.moveGuests = function () {\n $uibModalInstance.close('move');\n };\n $scope.replaceGuests = function () {\n $uibModalInstance.close('replace');\n };\n $scope.cancel = function () {\n $uibModalInstance.dismiss('cancel');\n added = false;\n };\n }]\n });\n //Response del modal\n $modalInstanceAction.result.then(function(result) {\n if(result === \"move\") {\n assignPositions(firstPositionNumber, firstPositionIncrementation);\n }\n });\n } else {\n assignPositions(firstPositionNumber, firstPositionIncrementation);\n }\n return added;\n }\n\n $scope.setPositions = function () {\n\n let loadData = function () {\n if (guestsInfo.length > 0) {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: SetFirstPositionModalView,\n size: \"sm\",\n scope: $scope,\n controller: ['$uibModalInstance', function ($uibModalInstance) {\n\n $scope.val = { firstPositionNumber: 1, firstPositionIncrementation: 1 };\n $scope.ok = function () {\n $uibModalInstance.close($scope.val);\n };\n $scope.cancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n }]\n });\n //Response del modal\n $modalInstance.result.then(function (result) {\n let firstPositionNumber = result.firstPositionNumber;\n let firstPositionIncrementation = result.firstPositionIncrementation;\n\n\n checkBusyPlacesAndAssign(firstPositionNumber, firstPositionIncrementation);\n\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n if (!$scope.$$phase) $scope.$apply();\n });\n\n } else {\n\n modalService.message({\n title: $filter('translate')('events.spaces.select_guests_title_error'),\n message: $filter('translate')('events.spaces.select_guests_message_error'),\n onAccept: function () { }\n });\n }\n };\n\n //como hemos quitado paginador, los cogemos del grid\n /*const addAll = $scope.gridEventSpaceGuest.gridApi.selection.getSelectAllState();\n if (addAll) {\n options = {};\n options.event_id = $stateParams.id;\n options.name_surnames = $scope.search.name_surnames;\n options._sortBy = $scope.search._sortBy;\n options.allocated = ($scope.search.not_allocated == true ? false : null);\n options.groups_ids = $scope.search.groups;\n options.positions_ids = $scope.search.positions;\n options.event_space_id = id;\n if ($scope.isDashboard) options.allocated = true;\n options.position_name = $scope.search.position_name;\n options.confirmed = $scope.search.confirmed;\n\n //Tenemos que recorrer lo diseñado para actualizar los datos del grid correctamente. \n Restangular.all('EventsSpaceGuests').getList(options).then(function (results) {\n guestsInfo = [];\n\n angular.forEach(results, function (row) {\n guestsInfo.push({ id: row.id, name: getFullSeatName(row), color: row.color });\n });\n\n $log.debug(guestsInfo);\n \n loadData();\n });\n\n\n } else {*/\n /* var rows = $scope.gridEventSpaceGuest.gridApi.selection.getSelectedRows();\n $log.debug($scope.gridEventSpaceGuest.gridApi.grid.selection.selectedCount);\n $log.debug(rows);\n var guestsInfo = new Array();\n angular.forEach(rows, function (row) {\n guestsInfo.push({ id: row.id, name: row.FK_events_guests_persons.surname, color: row.color });\n });*/\n guestsInfo = $scope.selectedRows;\n loadData();\n //}\n\n\n\n //quitamos la seleccion\n $scope.gridEventSpaceGuest.gridApi.selection.clearSelectedRows();\n $scope.selectedRows = [];\n };\n\n $scope.clean = function () {\n $scope.search = {\n name_surnames: \"\",\n not_allocated: null,\n groups: null,\n _sortBy: \"prefered\",\n position_name: \"\",\n confirmed: false\n };\n $scope.loadGuest();\n }\n\n $scope.describeZone = function (entity) {\n let ret = \"\";\n if (entity.zone_file !== \"\" && entity.zone_file != null || entity.zone_position != null) {\n if (entity.zone_type === \"table\") {\n ret += \"Asiento \" + entity.zone_position;\n } else if (entity.zone_type === \"zone\") {\n ret += \"Fila \" + entity.zone_file + \" - Asiento \" + entity.zone_position;\n } else if (entity.zone_type === \"vehicle\") {\n ret += \"Fila \" + entity.zone_file + \" - Asiento \" + entity.zone_position;\n }\n } else {\n ret += \"(Sin acomodar)\";\n }\n return ret;\n };\n\n $scope.askForFreePlace = function(entity){\n let options = {\n move: false\n };\n let $modalInstanceAction = $uibModal.open({\n animation: true,\n template: FreePlaceActionModalView,\n size: \"md\",\n scope: $scope,\n resolve: {\n options: function(){ return options; }\n },\n controller: ['$uibModalInstance', 'options', function ($uibModalInstance, options) {\n $scope.freePlaceModalOptions = options;\n $scope.freePlaceModalOk = function () {\n $uibModalInstance.close($scope.freePlaceModalOptions.move);\n };\n $scope.freePlaceModalCancel = function () {\n $uibModalInstance.dismiss('cancel');\n let added = false;\n };\n }]\n });\n //Response del modal\n $modalInstanceAction.result.then(function(move) {\n $scope.freePlace(entity, move);\n });\n }\n\n let moveGuest = function (entity, currentPosition, newPosition) {\n $log.debug(\"moveGuest\", entity, currentPosition, newPosition);\n let zones = $scope.space.items.filter(m=>m.type==\"group\" && m.options!=null);\n\n\n //limpiamos posicion actual\n $scope.freePlace(entity, false);\n /*for( let i = 0 ; i < zones.length ; i++){\n let zone = zones[i];\n let currentPlace = zone._objects.find(m=>m.options?.zone_prefered==currentPosition);\n if(currentPlace != null){\n $log.debug(\"moveGuest -> currentPosition\", currentPlace);\n break;\n }\n }*/\n\n //buscamos posicion nueva y la asignamos\n for(let i = 0 ; i < zones.length ; i++){\n let zone = zones[i];\n let newPlace = zone._objects.find(m=>m.options?.zone_prefered==newPosition);\n if(newPlace != null){\n $log.debug(\"moveGuest -> newPosition\", newPlace);\n\n //asignamos posicion nueva\n let fullPlaceText = getFullSeatName(entity);\n $scope.addGuestToObject(zone, \n newPlace.options.zone_file, \n newPlace.options.zone_position, \n newPlace.options.zone_prefered, \n newPlace.options.locked,\n entity.id, //guestId, \n fullPlaceText, //guestName, \n entity.color, //guestColor, \n 1 //positionIncrementation\n );\n\n //asignamos nuevos datos de posicion\n entity.zone = newPlace.options.zone;\n entity.zone_type = newPlace.options.zone_type;\n entity.zone_file = newPlace.options.zone_file;\n entity.zone_position = newPlace.options.zone_position;\n entity.zone_prefered = newPlace.options.zone_prefered;\n entity.locked = newPlace.options.locked;\n\n break;\n }\n }\n\n }\n\n $scope.freePlace = function (entity, move) {\n let deletePrefered = 0;\n let previousGuest = null;\n let guestsToMove = [];\n let previousPrefered = 0;\n \n //buscamos si plazas para quitarlo\n for (let j = 0; j < $scope.canvas._objects.length; j++) {\n const zone = $scope.canvas._objects[j];\n const finalGuests = new Array();\n if (typeof zone.guests != \"undefined\") {\n let guests = zone.guests.sort(function (a, b) { return parseInt(a.prefered) < parseInt(b.prefered) ? -1 : 1;});\n for (let i = 0; i < guests.length; i++) {\n const guest = guests[i];\n if (guest.event_guest_id != entity.id) {\n finalGuests.push(guest);\n } else {\n deletePrefered = parseInt(guest.prefered);\n previousGuest = guest;\n previousPrefered = parseInt(guest.prefered);\n //marcamos plaza como libre\n for (let p = 0; p < zone._objects.length; p++) {\n const place = zone._objects[p];\n if (typeof place.options != \"undefined\") {\n if (place.options.zone_file == guest.file && place.options.zone_position == guest.position) {\n place.fill = $scope.place_color_free;\n //Eliminamos el texto\n zone.forEachObject(function (objFind) {\n //Buscamos el texto por ID para eliminarlo y poner el nuevo.\n //hacemos que no borre si no tiene id, porque se estaba cargando todos los sitios\n if (objFind.options && objFind.options.id == place.options.zone_prefered && typeof objFind.options.id!=\"undefined\") {\n zone.set('active', true);\n zone.remove(objFind);\n }\n });\n }\n }\n }\n }\n }\n }\n zone.guests = finalGuests;\n }\n\n //si hay que mover siguientes plazas, reasignamos posiciones hasta el siguiente hueco\n if(move){\n guestsInfo = [];\n //buscamos plazas contiguas\n let nextPosition = parseInt(entity.zone_prefered) + 1;\n while(true){\n //busacmos si hay invitado en la plaza\n //let nextGuest = $scope.gridEventSpaceGuest.data.find(m=>m.zone_prefered==nextPosition);\n let nextGuest = allEventGuest.find(m=>m.zone_prefered==nextPosition);\n $log.debug(nextPosition, nextGuest);\n if(nextGuest!=null){\n guestsInfo.push(nextGuest);\n }else{\n break;\n }\n if(nextPosition>5000) break;\n nextPosition++;\n }\n angular.forEach(guestsInfo.sort(function (a, b) { return parseInt(a.prefered) < parseInt(b.prefered) ? -1: 1 }), function (guest) {\n //lo echamos una laza para atras\n moveGuest(guest, guest.zone_prefered, guest.zone_prefered-1);\n });\n //assignPositions(entity.zone_prefered, -1);\n guestsInfo = [];\n }\n\n //limpiamos datos de zona\n entity.zone = \"\";\n entity.zone_type = \"\";\n entity.zone_file = \"\";\n entity.zone_position = \"\";\n entity.zone_prefered = \"\";\n entity.locked = false;\n \n //renderizar\n $scope.canvas.renderAll();\n if (!$scope.$$phase) $scope.$apply();\n };\n\n $scope.draggedObject = null;\n\n (window as any).allowDrop = function (event) {\n event.preventDefault();\n };\n\n\n (window as any).drag = function (ev) {\n ev.dataTransfer.setData(\"text\", ev.target.id);\n };\n\n\n (window as any).dragEnd = function (event) {\n $scope.draggedObject = event.target;\n $scope.overTarget = null;\n };\n\n \n $scope.onObjectDblClick = function (target) {\n if (target.localType === \"zone\") {\n $scope.createZone(target, target.options.left, target.options.top);\n } else if (target.localType === \"table\") {\n $scope.createTable(target, target.options.left, target.options.top);\n } else if (target.localType === \"vehicle\") {\n $scope.createVehicle(target, target.options.left, target.options.top);\n }\n };\n \n function getFullSeatName(row) {\n let name = \"\";\n if(row != undefined) {\n if($scope.spaceDTO.useFullname) {\n name = row.FK_events_guests_persons.fullnameNormalized;\n }\n if($scope.spaceDTO.usePosition) {\n if (row.FK_events_guests_persons_positions != undefined && row.FK_events_guests_persons_positions.FK_persons_positions_positions != undefined) {\n\n let position = \"\";\n let posObj = row.FK_events_guests_persons_positions.FK_persons_positions_positions;\n\n if (posObj.FK_positions_tl_positions.length > 0) {\n let translation = posObj.FK_positions_tl_positions[0];\n if (row.FK_events_guests_persons.gender == 'F') {\n position = translation.female_short_description != null ? translation.female_short_description : translation.female_description;\n } else if (row.FK_events_guests_persons.gender == 'M') {\n position = translation.male_short_description != null ? translation.male_short_description : translation.male_description;\n } else{\n position = translation.name;\n }\n if (position == \"\" || position == null) {\n position = translation.name;\n }\n }\n if($scope.spaceDTO.useFullname) {\n name += \"\\n\";\n }\n name += position;\n }\n }\n }\n return name; \n }\n\n $scope.onMouseOver = function (e) {\n //buscamos objeto dentro del grupo\n if ($scope.draggedObject == null) return;\n\n //falta ver como traladar posicion a rotacion\n\n const zoneObj = e.target;\n let positionObj = null;\n if (e.target.type === \"group\") {\n const group = e.target;\n const x = e.e.offsetX - group.left - (group.width / 2);\n const y = e.e.offsetY - group.top - (group.height / 2);\n for (var i = 0; i < e.target._objects.length; i++) {\n const obj = e.target._objects[i];\n if (obj.options != null && obj.options.droppable) {\n if (x >= obj.left && x <= (obj.left + obj.width) && y >= obj.top && y <= (obj.top + obj.height)) {\n positionObj = obj;\n break;\n }\n }\n }\n }\n\n if (positionObj == null || (positionObj != null && !positionObj.options != null && !positionObj.options.droppable)) return;\n\n for (const row of allEventGuest) {\n if (row.id == $($scope.draggedObject).attr(\"row-id\")) {\n const nameToShow = getFullSeatName(row);\n\n $scope.addGuestToObject(zoneObj, positionObj.options.zone_file, positionObj.options.zone_position, positionObj.options.zone_prefered, positionObj.options.locked, row.id, nameToShow, row.color, 1);\n\n //registrar info de zon\n row.zone = positionObj.options.zone;\n row.zone_type = positionObj.options.zone_type;\n row.zone_file = positionObj.options.zone_file;\n row.zone_position = positionObj.options.zone_position;\n row.zone_prefered = positionObj.options.zone_prefered;\n row.locked = positionObj.options.locked;\n\n if (!$scope.$$phase) $scope.$apply();\n break;\n }\n }\n $scope.draggedObject = null;\n };\n\n $scope.isDown = false;\n $scope.startPosition = { x: 0, y: 0 };\n $scope.polygonMode = true;\n $scope.activeShape = false;\n $scope.activeLine = undefined;\n $scope.pointArray = [];\n $scope.lineArray = [];\n $scope.spaceImages = null;\n $scope.showImageSelector = false;\n \n $scope.drawLine = function() {\n if(!$scope.canvas.isDrawingMode) return;\n $scope.removeEvents();\n $scope.canvas.on('mouse:down', function(o) {\n $scope.isDown = true;\n let pointer = $scope.canvas.getPointer(o.e);\n let points = [pointer.x, pointer.y, pointer.x, pointer.y];\n $scope.line = new fabric.Line(points, {\n localType: 'line',\n guid: $scope.guid(),\n strokeWidth: 3,\n fill: $scope.fillColor,\n stroke: $scope.strokeColor,\n originX: 'center',\n originY: 'center'\n });\n $scope.canvas.add($scope.line);\n });\n $scope.canvas.on('mouse:move', function(o) {\n if (!$scope.isDown) return;\n let pointer = $scope.canvas.getPointer(o.e);\n $scope.line.set({\n x2: pointer.x,\n y2: pointer.y\n });\n $scope.canvas.renderAll();\n });\n $scope.canvas.on('mouse:up', function(o) {\n $scope.isDown = false;\n $scope.space.items.push($scope.line);\n }); \n }\n \n $scope.drawRectangle = function(transparent) {\n if(!$scope.canvas.isDrawingMode) return;\n $scope.removeEvents();\n\n $scope.canvas.on('mouse:down', function(o) {\n $scope.isDown = true;\n let pointer = $scope.canvas.getPointer(o.e);\n $scope.startPosition = { x: pointer.x, y: pointer.y};\n $scope.rect = new fabric.Rect({\n localType: 'rectangle',\n guid: $scope.guid(),\n left: $scope.startPosition.x,\n top: $scope.startPosition.y,\n originX: 'left',\n originY: 'top',\n width: pointer.x - $scope.startPosition.x,\n height: pointer.y - $scope.startPosition.y,\n angle: 0,\n fill: transparent?'rgba(0,0,0,0)':$scope.fillColor,\n stroke: $scope.strokeColor,\n strokeWidth: 3,\n transparentCorners: false\n });\n $scope.canvas.add($scope.rect);\n });\n \n $scope.canvas.on('mouse:move', function(o) {\n if (!$scope.isDown) return;\n let pointer = $scope.canvas.getPointer(o.e);\n\n if ($scope.startPosition.x > pointer.x) {\n $scope.rect.set({\n left: Math.abs(pointer.x)\n });\n }\n if ($scope.startPosition.y > pointer.y) {\n $scope.rect.set({\n top: Math.abs(pointer.y)\n });\n }\n\n $scope.rect.set({\n width: Math.abs($scope.startPosition.x - pointer.x),\n height: Math.abs($scope.startPosition.y - pointer.y)\n });\n\n $scope.canvas.renderAll();\n });\n\n $scope.canvas.on('mouse:up', function(o) {\n $scope.isDown = false;\n $scope.rect.set({\n originX: 'center',\n originY: 'center', \n left: $scope.rect.left + $scope.rect.width / 2,\n top: $scope.rect.top + $scope.rect.height / 2\n });\n $scope.space.items.push($scope.rect);\n }); \n }\n\n $scope.drawCircle = function (transparent) {\n if(!$scope.canvas.isDrawingMode) return;\n $scope.removeEvents();\n $scope.canvas.on('mouse:down', function(o) {\n $scope.isDown = true;\n let pointer = $scope.canvas.getPointer(o.e);\n $scope.startPosition = { x: pointer.x, y: pointer.y};\n $scope.circle = new fabric.Circle({\n localType: 'circle',\n guid: $scope.guid(),\n left: pointer.x,\n top: pointer.y,\n radius: 1,\n strokeWidth: 3,\n stroke: $scope.strokeColor,\n fill: transparent?'rgba(0,0,0,0)':$scope.fillColor,\n originX: 'center',\n originY: 'center'\n });\n $scope.canvas.add($scope.circle);\n });\n\n $scope.canvas.on('mouse:move', function(o) {\n if (!$scope.isDown) return;\n let pointer = $scope.canvas.getPointer(o.e);\n $scope.circle.set({\n radius: Math.abs($scope.startPosition.x - pointer.x)\n });\n $scope.canvas.renderAll();\n });\n\n $scope.canvas.on('mouse:up', function(o) {\n $scope.space.items.push($scope.circle);\n $scope.isDown = false;\n });\n }\n\n $scope.drawPolygon = function (transparent) {\n if(!$scope.canvas.isDrawingMode) return;\n $scope.removeEvents();\n $scope.canvas.on('mouse:down', function(o) {\n $scope.polygonMode = true;\n if(o.target && o.target.id === $scope.pointArray[0].id){\n $scope.generatePolygon(transparent);\n }\n if($scope.polygonMode){\n $scope.addPointToPolygon(o);\n } \n });\n\n $scope.canvas.on('mouse:up', function (options) {\n\n });\n \n $scope.canvas.on('mouse:move', function (options) {\n if($scope.activeLine && $scope.activeLine.class === \"line\"){\n let pointer = $scope.canvas.getPointer(options.e);\n $scope.activeLine.set({ x2: pointer.x, y2: pointer.y });\n\n let points = $scope.activeShape.get(\"points\");\n $scope.pointArray[$scope.pointArray.length] = {\n x:pointer.x,\n y:pointer.y\n }\n $scope.activeShape.set({\n points: points\n });\n $scope.canvas.renderAll();\n }\n $scope.canvas.renderAll();\n });\n }\n\n $scope.addPointToPolygon = function(options) {\n const crypto = window.crypto || (window as any).msCrypto;\n let array = new Uint32Array(1);\n let random = crypto.getRandomValues(array); // Compliant for security-sensitive use cases\n\n let id = new Date().getTime() + random[0];\n let circle = new fabric.Circle({\n radius: 5,\n fill: '#ffffff',\n stroke: '#333333',\n strokeWidth: 0.5,\n left: (options.e.layerX/$scope.canvas.getZoom()),\n top: (options.e.layerY/$scope.canvas.getZoom()),\n selectable: false,\n hasBorders: false,\n hasControls: false,\n originX:'center',\n originY:'center',\n id:id\n });\n if($scope.pointArray.length === 0){\n circle.set({\n fill:'red'\n })\n }\n let points = [(options.e.layerX/$scope.canvas.getZoom()),(options.e.layerY/$scope.canvas.getZoom()),(options.e.layerX/$scope.canvas.getZoom()),(options.e.layerY/$scope.canvas.getZoom())];\n let line = new fabric.Line(points, {\n strokeWidth: 2,\n fill: '#999999',\n stroke: '#999999',\n class:'line',\n originX:'center',\n originY:'center',\n selectable: false,\n hasBorders: false,\n hasControls: false,\n evented: false\n });\n if($scope.activeShape){\n let pos = $scope.canvas.getPointer(options.e);\n let points = $scope.activeShape.get(\"points\");\n points.push({\n x: pos.x,\n y: pos.y\n });\n let polygon = new fabric.Polygon(points,{\n stroke:'#333333',\n strokeWidth:1,\n fill: '#cccccc',\n opacity: 0.1,\n selectable: false,\n hasBorders: false,\n hasControls: false,\n evented: false\n });\n $scope.canvas.remove($scope.activeShape);\n $scope.canvas.add(polygon);\n $scope.activeShape = polygon;\n $scope.canvas.renderAll();\n }\n else{\n let polyPoint = [{x:(options.e.layerX/$scope.canvas.getZoom()),y:(options.e.layerY/$scope.canvas.getZoom())}];\n let polygon = new fabric.Polygon(polyPoint,{\n stroke:'#333333',\n strokeWidth:1,\n fill: '#cccccc',\n opacity: 0.1,\n selectable: false,\n hasBorders: false,\n hasControls: false,\n evented: false\n });\n $scope.activeShape = polygon;\n $scope.canvas.add(polygon);\n }\n $scope.activeLine = line;\n\n $scope.pointArray.push(circle);\n $scope.lineArray.push(line);\n \n $scope.canvas.add(line);\n $scope.canvas.add(circle);\n $scope.canvas.selection = false;\n }\n \n $scope.generatePolygon = function(transparent){\n let points = [];\n $.each($scope.pointArray,function(index, point){\n if(point.left !== undefined) {\n points.push({\n x: point.left,\n y: point.top\n });\n }\n $scope.canvas.remove(point);\n });\n $.each($scope.lineArray,function(index, line){\n $scope.canvas.remove(line);\n });\n $scope.canvas.remove($scope.activeShape);\n $scope.canvas.remove($scope.activeLine);\n let polygon = new fabric.Polygon(points,{\n localType: 'polygon',\n guid: $scope.guid(),\n stroke:'#333333',\n strokeWidth:2,\n fill: transparent?'rgba(0,0,0,0)':$scope.fillColor,\n opacity: 1,\n hasBorders: false,\n hasControls: false\n });\n $scope.canvas.add(polygon);\n\n $scope.activeLine = null;\n $scope.activeShape = null;\n $scope.polygonMode = false;\n $scope.pointArray = [];\n $scope.lineArray = [];\n $scope.canvas.selection = true;\n }\n\n $scope.drawText = function() {\n if($scope.canvas.isDrawingMode) return;\n $scope.removeEvents();\n $scope.canvas.on('mouse:down', function(o) {\n $scope.isDown = true;\n let pointer = $scope.canvas.getPointer(o.e);\n $scope.text = new fabric.IText('Texto', {\n localType: 'text',\n guid: $scope.guid(),\n left: pointer.x,\n top: pointer.y,\n stroke: $scope.strokeColor,\n fill: $scope.fillColor,\n originX: 'center',\n originY: 'center'\n });\n $scope.canvas.add($scope.text);\n });\n\n $scope.canvas.on('mouse:up', function(o) {\n $scope.isDown = false;\n $scope.space.items.push($scope.text);\n $scope.selectTool('selector');\n });\n }\n \n $scope.selectImage = function(uid) {\n $scope.selectedImage = uid;\n }\n\n $scope.drawImage = function() {\n if($scope.canvas.isDrawingMode) return;\n $scope.showImageSelector = true;\n if($scope.spaceImages == null) {\n Restangular.all('Files/spaceAssets').getList().then(function (spaceFiles) {\n $scope.spaceImages = [];\n spaceFiles.forEach(function(file) {\n $scope.spaceImages[$scope.spaceImages.length] = {\n uid: file.uid,\n url: (window as any).CONFIG.api_url + 'files/' + file.uid + '/download'\n };\n });\n });\n }\n $scope.removeEvents();\n $scope.canvas.on('mouse:down', function(o) {\n $scope.isDown = true;\n let pointer = $scope.canvas.getPointer(o.e);\n\n// $scope.createImage(null, 'plant-01', pointer.x, pointer.y);\n $scope.createImage(null, $scope.selectedImage, pointer.x, pointer.y);\n\n });\n\n $scope.canvas.on('mouse:up', function(o) {\n $scope.isDown = false;\n $scope.showImageSelector = false;\n $scope.selectTool('selector');\n });\n }\n\n\n $scope.removeEvents = function () {\n $scope.canvas.off('mouse:down');\n $scope.canvas.off('mouse:move');\n $scope.canvas.off('mouse:up');\n\n $scope.canvas.on('mouse:down', function(opt) {\n let evt = opt.e;\n if (evt.altKey === true) {\n this.isDragging = true;\n this.selection = false;\n this.lastPosX = evt.clientX;\n this.lastPosY = evt.clientY;\n }\n });\n\n $scope.canvas.on('mouse:move', function(opt) {\n if (this.isDragging) {\n const e = opt.e;\n const vpt = this.viewportTransform;\n vpt[4] += e.clientX - this.lastPosX;\n vpt[5] += e.clientY - this.lastPosY;\n this.requestRenderAll();\n this.lastPosX = e.clientX;\n this.lastPosY = e.clientY;\n }\n });\n $scope.canvas.on('mouse:up', function(opt) {\n // on mouse up we want to recalculate new interaction\n // for all objects, so we call setViewportTransform\n this.setViewportTransform(this.viewportTransform);\n this.isDragging = false;\n this.selection = true;\n });\n\n }\n\n $scope.getPositionGuest = function (positionNumber) {\n for (let aux = 0; aux < $scope.space.items.length; aux++) {\n const zone = $scope.space.items[aux];\n if (zone.type == \"group\") {\n for (let j = 0; j < zone._objects.length; j++) {\n if (typeof zone.guests == \"undefined\") zone.guests = new Array();\n for (let z = 0; z < zone.guests.length; z++) {\n if (zone.guests[z].prefered == positionNumber) {\n return zone.guests[z];\n }\n }\n }\n }\n }\n return null;\n };\n\n //Recorremos todos los espacios en busca de la posicion indicada\n function findPosition(guestId, guestName, positionNumber, guestColor, positionIncrementation) {\n $log.debug(\"findPosition -> START\", guestId, guestName, positionNumber, guestColor, positionIncrementation);\n let foundObj = null;\n for (let aux = 0; aux < $scope.space.items.length; aux++) {\n const zone = $scope.space.items[aux];\n if (zone.type == \"group\" && zone.options != null) {\n $log.debug(\"findPosition -> zone\", zone.options?.name);\n for (let j = 0; j < zone._objects.length; j++) {\n const obj = zone._objects[j];\n if (obj.options != null) {\n $log.debug(\" - findPosition -> check seat\", zone.options?.name, obj.options.zone_prefered, obj.options);\n if (obj.options.zone_prefered == positionNumber) {\n\n foundObj = obj;\n\n $log.debug(\" - ****findPosition -> FOUND seat!\", positionNumber, obj.options.zone_prefered, obj.options, obj);\n if (typeof obj.options.locked === 'undefined') obj.options.locked = false;\n\n //añadir invitado a object e zone\n $log.debug(\"addGuestToObject\");\n $scope.addGuestToObject(zone, obj.options.zone_file, obj.options.zone_position, obj.options.zone_prefered, obj.options.locked, guestId, guestName, guestColor, positionIncrementation);\n for (const row of allEventGuest) {\n if (row.id == guestId) {\n //registrar info de zon\n row.zone = obj.options.zone;\n row.zone_type = obj.options.zone_type;\n row.zone_file = obj.options.zone_file;\n row.zone_position = obj.options.zone_position;\n row.zone_prefered = obj.options.zone_prefered;\n row.locked = obj.options.locked;\n if (!$scope.$$phase) $scope.$apply();\n }\n }\n //salimos del bucle\n break;\n }\n }\n }\n $log.debug(\"findPosition -> zone end!\");\n if(foundObj!=null) break;\n }\n }\n $log.debug(\"findPosition -> END\", guestId, guestName, positionNumber, guestColor, positionIncrementation);\n }\n\n $scope.getAllSeatedGuests = function () {\n const seatedGuests = [];\n for (const zone of $scope.canvas._objects) {\n if (zone.guests) {\n zone.guests.forEach(function (guest) {\n seatedGuests.push(guest);\n });\n }\n }\n return seatedGuests;\n }\n\n /* Buscamos si está en otra plaza para borralo, y una vez realizado esto, lo movemos a la indicada y empujamos\n * los que están debajo.\n */\n $scope.addGuestToObject = function (zone, file, position, prefered, locked, event_guest_id, name_guest, color_guest, positionIncrementation) {\n //$log.debug(\"addGuestToObject\", zone, file, position, prefered, locked, event_guest_id, name_guest, color_guest, positionIncrementation);\n if (name_guest == null) name_guest = \"\";\n let preferedAux = prefered;\n if (typeof zone.guests == \"undefined\") {\n zone.guests = new Array();\n }\n\n //calculamos angulo de rotacion de la zona\n let angle = 0;\n if(zone.options?.positions_header=='up') angle = 180;\n\n //buscamos si esta en otra plazas para quitarlo\n for (let j = 0; j < $scope.canvas._objects.length; j++) {\n const zoneAux = $scope.canvas._objects[j];\n const finalGuests = new Array();\n if (typeof zoneAux.guests != \"undefined\") {\n for (var i = 0; i < zoneAux.guests.length; i++) {\n var guest = zoneAux.guests[i]; //para \n\n if (guest.event_guest_id != event_guest_id) {\n finalGuests.push(guest);\n } else {\n if (guest.file != file || guest.position != position) {\n //marcamos plaza como libre\n for (let p = 0; p < zoneAux._objects.length; p++) {\n var place = zoneAux._objects[p];\n if (typeof place.options != \"undefined\") {\n if (place.options.zone_file == guest.file && place.options.zone_position == guest.position) {\n place.fill = $scope.place_color_free;\n zoneAux.forEachObject(function (objFind) {\n //Buscamos el texto por ID para eliminarlo y poner el nuevo.\n let preferedValue = place.options.zone_prefered + \"\";\n if (objFind.options && objFind.options.id === preferedValue) {\n zoneAux.set('active', true);\n zoneAux.remove(objFind);\n }\n });\n }\n }\n }\n } else {\n finalGuests.push(guest);\n }\n }\n }\n }\n zoneAux.guests = finalGuests;\n }\n\n //marcamos plaza como ocupada\n for (var i = 0; i < zone._objects.length; i++) {\n var place = zone._objects[i];\n if (typeof place.options != \"undefined\") {\n prefered = prefered + \"\";\n if (place.options.zone_file == file && place.options.zone_position == position && place.options.zone_prefered == prefered) {\n //buscamos si ya existe alguien en esa zona.\n if (place.fill != $scope.place_color_free) {\n angular.forEach(zone.guests, function (guest) {\n if (guest.prefered == prefered) {\n //Ya hay alguien, borramos su nombre y lo movemos uno abajo.\n zone.forEachObject(function (objFind) {\n //Buscamos el texto por ID para eliminarlo y poner el nuevo.\n if (objFind.options && objFind.options.id === prefered) {\n zone.set('active', true);\n zone.remove(objFind);\n }\n });\n findPosition(guest.event_guest_id, guest.name_guest, parseInt(preferedAux) + parseInt(positionIncrementation), guest.color_guest, positionIncrementation);\n }\n });\n }\n\n if (color_guest == null) color_guest = $scope.place_color_occuped;\n //añadimos guest a posicion\n zone.guests.push({\n event_guest_id: event_guest_id,\n file: file,\n position: position,\n prefered: prefered + \"\",\n locked: locked,\n name_guest: name_guest,\n color_guest: color_guest\n });\n\n //actualizamos space.items\n let foundGuest = null;\n for(const item of $scope.space.items) {\n if(item.type==\"group\" && item.guests!=null){\n for(let nGuest = 0; nGuest < item.guests.length; nGuest++){\n let guest = item.guests[nGuest];\n if(guest.event_guest_id == event_guest_id){\n guest.prefered = prefered + \"\";\n foundGuest = guest;\n break;\n }\n }\n if(foundGuest!=null) break;\n }\n }\n\n //Marcamos el espacio como ocupado\n place.fill = color_guest;\n place.customSvgClass = \"guestNameRect\";\n //place.setFill($scope.place_color_occuped);\n\n //Añadimos el nombre de la persona\n zone.add(new fabric.Textbox(name_guest, {\n id: prefered,\n left: place.left + (place.width/2),\n top: place.top + (place.height/2),\n width: place.width,\n height: place.height,\n fontSize: 7,\n fontFamily: 'Arial',\n textAlign: 'center',\n breakWords: true,\n lineHeight: 1,\n originX: \"center\",\n originY: \"center\",\n options: { id: prefered },\n customSvgClass: \"guestName\",\n //fontWeight: 'bold',\n angle: -angle,\n fill: invertColor(color_guest)// para el color de contraste!!!!!!!!!\n }));\n\n //debug objetos zona\n /*$log.debug(zone);\n angular.forEach(zone._objects, function (obj) {\n $log.debug(obj.type, obj.options?.id, obj);\n });*/\n\n \n }\n }\n }\n\n //renderizar\n $scope.canvas.renderAll();\n if (!$scope.$$phase) $scope.$apply();\n\n };\n\n $scope.sendToBack = function (target) {\n $scope.canvas.sendToBack(target);\n };\n\n $scope.deleteObject = function (target) {\n \n //borrar objeto\n $scope.space.items.splice($scope.space.items.indexOf(target), 1);\n $scope.drawSpace(false);\n //RECORREMOS A LOS INVITADOS PARA ACTUALIZAR SI ESTA PUESTO EN EL QUE SE HA BORRADO.\n \n if($scope.gridEventSpaceGuest !== undefined) {\n for (const row of allEventGuest) {\n if (target.guests != null) {\n for (let k = 0; k < target.guests.length; k++) {\n const guest = target.guests[k];\n if (guest.event_guest_id == row.id) {\n row.zone = \"\";\n row.zone_position = \"\";\n row.zone_prefered = \"\";\n if (!$scope.$$phase) $scope.$apply();\n break;\n }\n }\n }\n }\n }\n\n// $scope.loadGuest();\n };\n\n $scope.guid = function () {\n const crypto = window.crypto || (window as any).msCrypto;\n return crypto.randomUUID();\n };\n\n let customBigCanvasAndZoom = function (width, height, zoomin) {\n //TODO: LAURA SE HA QUEDADO A MEDIAS!!!!!!!!!!!!!!!!!!!!!\n //hacemos mas grande todo\n $scope.canvas.setWidth(width);\n $scope.canvas.setHeight(height);\n $scope.canvas.setZoom(1);\n $scope.canvas.setZoom($scope.canvas.getZoom() * zoomin);\n\n //$scope.canvas.renderAll();\n\n const delta = new fabric.Point(0, 0);\n $scope.canvas.relativePan(delta);\n\n };\n \n fabric.Group.prototype._toSVG = (function(_toSVG){\n return function(){\n let svg = _toSVG.call(this);\n if(this.options) {\n svg[2] = \" options=\\\"\" + JSON.stringify(this.options)\n .replaceAll(\"\\\"\", \"'\") + \"\\\">\";\n }\n if((this.localType === \"zone\" || this.localType === \"table\") && svg[0].indexOf(\"localType\") === -1) {\n svg[0] += \" localType=\\\"\" + this.localType + \"\\\" \"\n + \" guid=\\\"\" + this.guid + \"\\\" \";\n }\n return svg;\n }\n })(fabric.Group.prototype._toSVG);\n\n fabric.Textbox.prototype._toSVG = (function(_toSVG){\n return function(){\n let svg = _toSVG.call(this);\n if(this.options && svg[1].indexOf(\"prefered_position\") === -1) {\n svg[1] += \" prefered_position=\\\"\" + this.options.id + \"\\\" \";\n }\n if(this.customSvgClass && svg[1].indexOf(\"class\") === -1) {\n svg[1] += \" class=\\\"\" + this.customSvgClass + \"\\\" \";\n }\n\n return svg;\n }\n })(fabric.Textbox.prototype._toSVG);\n\n fabric.Rect.prototype._toSVG = (function(_toSVG){\n return function(){\n let svg = _toSVG.call(this);\n if (this.options && svg[0].indexOf(\"prefered_position\") === -1) {\n svg[0] += \" prefered_position=\\\"\" + this.options.zone_prefered + \"\\\" \";\n }\n if (this.customSvgClass && svg[0].indexOf(\"class\") === -1) {\n svg[0] += \" class=\\\"\" + this.customSvgClass + \"\\\" \";\n }\n return svg;\n }\n })(fabric.Rect.prototype._toSVG);\n\n fabric.Circle.prototype._toSVG = (function(_toSVG){\n return function(){\n let svg = _toSVG.call(this);\n if (this.options && svg[0].indexOf(\"prefered_position\") === -1) {\n svg[0] += \" prefered_position=\\\"\" + this.options.zone_prefered + \"\\\" \";\n }\n if(this.customSvgClass && svg[0].indexOf(\"class\") === -1) {\n svg[0] += \" class=\\\"\" + this.customSvgClass + \"\\\" \";\n }\n\n return svg;\n }\n })(fabric.Circle.prototype._toSVG);\n\n $scope.saveSpace = function (continueOpen) {\n\n findZonePositions();\n\n $scope.space.canvas = $scope.canvas.toJSON(['options', 'lockMovementX', 'lockMovementY', 'localType', 'guid', 'custom', 'guests', 'customSvgClass']);\n let tmp = $scope.space.items;\n delete $scope.space.items;\n $scope.space.canvas.objects = $scope.space.canvas.objects.reduce(function (pre, curr) { if (curr.type !== \"path\") pre.push(curr); return pre;}, []);\n\n //guardamos viewportTransform para restaurarlo al abrir de nuevo\n $scope.space.viewportTransform = $scope.canvas.viewportTransform;\n\n //comprobar que tengan nombre las zonas\n let errorZoneName = false;\n angular.forEach($scope.space.canvas.objects, function (object) {\n if (object.localType == \"zone\" && (object.options == null || object.options.name == null || object.options.name == '')) {\n errorZoneName = true;\n }\n });\n if (errorZoneName) {\n var errorMessage = $filter('translate')('events.spaces.error_zone_name_required');\n toastr.error(errorMessage);\n return;\n }\n \n removeBox();\n\n $scope.spaceDTO.configuration = JSON.stringify($scope.space);\n\n //$log.debug($scope.space);\n\n $scope.canvas.discardActiveObject();\n $scope.canvas.renderAll();\n if (!$scope.$$phase) $scope.$apply();\n\n $scope.spaceDTO.svg = $scope.canvas.toSVG({\n width: $scope.spaceDTO.width,\n height: $scope.spaceDTO.height,\n viewBox: {\n x: 0,\n y: 0,\n width: $scope.spaceDTO.width,\n height: $scope.spaceDTO.height\n }\n });\n\n if ($scope.spaceDTO.id > 0) {\n if (inSpaceEvents) {\n Restangular.all('EventsSpaces').customPUT($scope.spaceDTO, \"/\" + $scope.spaceDTO.id).then(function (result) {\n // $scope.zones = eventService.getSpaceZones($stateParams.id, id).$object;\n if(continueOpen === 1) {\n addBox();\n }\n\n $scope.space.items = tmp;\n if (typeof (result.id) != \"undefined\") {\n toastr.success($filter('translate')('events.spaces.edit_success'));\n if (angular.isDefined($scope.gridOptionsSpaces)) $scope.gridOptionsSpaces.loadData();\n if (continueOpen == 0) $uibModalInstance.close($scope.options);\n } else {\n $scope.errorMessage = result.message;\n }\n }, function (error) {\n $log.error(error);\n let errorMessage = \"Error desconocido\";\n if (error.data?.ExceptionMessage != null) errorMessage = error.data.ExceptionMessage;\n toastr.error(errorMessage);\n });\n } else {\n Restangular.all('Spaces').customPUT($scope.spaceDTO, \"/\" + $scope.spaceDTO.id).then(function (result) {\n // $scope.zones = eventService.getSpaceZones($stateParams.id, id).$object;\n if(continueOpen === 1) {\n addBox();\n }\n\n $scope.space.items = tmp;\n if (typeof (result.id) != \"undefined\") {\n toastr.success($filter('translate')('events.spaces.edit_success'));\n if (angular.isDefined($scope.gridOptionsSpaces)) $scope.gridOptionsSpaces.loadData();\n if (continueOpen == 0) $uibModalInstance.close($scope.options);\n } else {\n $scope.errorMessage = result.message;\n }\n }, function (error) {\n $log.error(error);\n let errorMessage = \"Error desconocido\";\n if (error.data?.ExceptionMessage != null) errorMessage = error.data.ExceptionMessage;\n toastr.error(errorMessage);\n });\n }\n } else {\n if (inSpaceEvents) {\n Restangular.all('EventsSpaces').post($scope.spaceDTO).then(function (result) {\n // $scope.zones = eventService.getSpaceZones($stateParams.id, id).$object;\n if(continueOpen === 1) {\n addBox();\n }\n\n $scope.space.items = tmp;\n if (typeof (result.id) !== \"undefined\") {\n $scope.spaceDTO = result;\n toastr.success($filter('translate')('events.spaces.add_success'));\n if (angular.isDefined($scope.gridOptionsSpaces)) $scope.gridOptionsSpaces.loadData();\n if (continueOpen == 0) $uibModalInstance.close($scope.options);\n } else {\n $scope.errorMessage = result.message;\n }\n if (!$scope.$$phase) $scope.$apply();\n }, function (error) {\n $log.error(error);\n let errorMessage = \"Error desconocido\";\n if (error.data?.ExceptionMessage != null) errorMessage = error.data.ExceptionMessage;\n toastr.error(errorMessage);\n });\n } else {\n Restangular.all('Spaces').post($scope.spaceDTO).then(function (result) {\n // $scope.zones = eventService.getSpaceZones($stateParams.id, id).$object;\n if(continueOpen === 1) {\n addBox();\n }\n\n $scope.space.items = tmp;\n if (typeof (result.id) !== \"undefined\") {\n $scope.spaceDTO = result;\n toastr.success($filter('translate')('events.spaces.add_success'));\n if (angular.isDefined($scope.gridOptionsSpaces)) $scope.gridOptionsSpaces.loadData();\n if (continueOpen == 0) $uibModalInstance.close($scope.options);\n } else {\n $scope.errorMessage = result.message;\n }\n }, function (error) {\n $log.error(error);\n let errorMessage = \"Error desconocido\";\n if (error.data?.ExceptionMessage != null) errorMessage = error.data.ExceptionMessage;\n toastr.error(errorMessage);\n });\n if (!$scope.$$phase) $scope.$apply();\n\n }\n }\n //$scope.resetZoom();\n\n };\n\n $scope.cancelMain = function () {\n $uibModalInstance.dismiss('cancel');\n if (angular.isDefined($scope.gridOptionsSpaces)) $scope.gridOptionsSpaces.loadData();\n };\n\n $scope.resetZoom = function () {\n $scope.canvas.setZoom(1);\n $scope.space.zoom = $scope.canvas.getZoom();\n };\n $scope.zoomIn = function () {\n $scope.canvas.setZoom($scope.canvas.getZoom() * 1.1);\n $scope.space.zoom = $scope.canvas.getZoom();\n $scope.canvas.renderAll();\n };\n $scope.zoomOut = function () {\n $scope.canvas.setZoom($scope.canvas.getZoom() / 1.1);\n $scope.space.zoom = $scope.canvas.getZoom();\n $scope.canvas.renderAll();\n };\n\n $scope.deltaUnits = 30;\n $scope.goRight = function () {\n let delta = new fabric.Point($scope.deltaUnits, 0);\n $scope.canvas.relativePan(delta);\n };\n $scope.goLeft = function () {\n let delta = new fabric.Point(-$scope.deltaUnits, 0);\n $scope.canvas.relativePan(delta);\n };\n $scope.goDown = function () {\n let delta = new fabric.Point(0, $scope.deltaUnits);\n $scope.canvas.relativePan(delta);\n };\n $scope.goUp = function () {\n let delta = new fabric.Point(0, -$scope.deltaUnits);\n $scope.canvas.relativePan(delta);\n };\n\n $scope.dataURLtoBlob = function (dataurl) {\n const arr = dataurl.split(','), mime = dataurl.split(',')[0].split(':')[1].split(';')[0],\n bstr = atob(arr[1]);\n let n = bstr.length;\n const u8arr = new Uint8Array(n);\n while (n--) {\n u8arr[n] = bstr.charCodeAt(n);\n }\n return new Blob([u8arr], { type: mime });\n };\n \n $scope.switchFullScreenCanvas = function () {\n $scope.spaceCanvasFullWidth = !$scope.spaceCanvasFullWidth;\n $scope.canvas.renderAll();\n if (!$scope.$$phase) $scope.$apply();\n };\n\n $scope.downloadImage = function () {\n\n $log.debug('$scope.canvas');\n $log.debug($scope.canvas);\n\n //$scope.canvas.deactivateAll().renderAll();\n\n $scope.canvas.renderAll();\n\n const a = document.createElement('a');\n a.download = $scope.spaceDTO.name + \".jpeg\";\n const blob = $scope.dataURLtoBlob($scope.canvas.toDataURL('image/jpeg', 1.0));\n const objurl = URL.createObjectURL(blob);\n a.href = objurl;\n a.click();\n\n //lo quitamos\n $(a).remove();\n\n };\n\n //añadimos mesa\n $scope.createTable = function (item, click_x, click_y) {\n\n const modalInstance = $uibModal.open({\n template: SpaceItemTableModalView,\n controller: \"SpaceTableCtrl\",\n //size: \"sm\",\n scope: $scope,\n resolve: {\n item: function () {\n return item;\n }\n }\n });\n\n modalInstance.result.then(function (options) {\n\n const placeWidth = 70;//20;\n const placeHeight = 70;// 20;\n const placeMargin = 8;//5;\n\n let places = [];\n if (typeof options.name === 'undefined') options.name = \"\";\n\n\n let angle = 0;\n if (options.positions_header == \"up\") {\n angle = 90;\n } else if (options.positions_header == \"down\") {\n angle = -90;\n } else if (options.positions_header == \"right\") {\n angle = 180;\n }\n\n\n //creamos plazas\n if (options.type == \"round\") {\n\n //creamos base de zona\n let angleCircle = 0;\n var step = (2 * Math.PI) / options.places;\n var radius = options.places * 12;\n\n let backgroundColor = typeof options.color !== \"undefined\" ? options.color : $scope.zone_color;\n\n var tableRect = new fabric.Circle({\n /*left: -placeMargin,\n top: -((placeHeight + placeMargin) * (nRows - 1) + placeMargin),*/\n left: 0,\n top: 0,\n radius: radius,\n fill: backgroundColor,\n strokeWidth: 1,\n strokeColor: 'black'\n });\n places.push(tableRect);\n\n //ponemos denominacion\n if (options.name != \"\") {\n var fontSize = 14;\n var placeText = new fabric.Textbox(\"\" + options.name, {\n left: radius,\n top: radius - fontSize / 2,\n width: radius * 2,\n height: fontSize,\n fontSize: fontSize,\n textAlign: 'center',\n originX: \"center\",\n originY: \"center\",\n angle: -angle\n });\n places.push(placeText);\n }\n\n var placeNumber = 1;\n //obtenemos el array cartesiano de la mesa.\n var arrayPositions = [];\n var auxArrayPositions = [];\n var nPlaceTotalPrefered = options.firstPlaceNumberPrefered;\n //Definimos el array ordenado.\n for (var nRow = 0; nRow < options.places; nRow++) {\n auxArrayPositions.push({ placeNumber: placeNumber, prefered: nPlaceTotalPrefered });\n placeNumber++;\n nPlaceTotalPrefered++;\n }\n let indexof = 0;\n let configurationTables: any = [];\n\n if (options.system_table == \"cartesian\") {\n configurationTables = CONFIG_TABLE[\"CARTESIAN_\" + options.places];\n\n arrayPositions = [configurationTables.length];\n for (var nRow = 0; nRow < configurationTables.length; nRow++) {\n //Recorremos para organizar las preferencias\n indexof = _.findIndex(auxArrayPositions, { placeNumber: configurationTables[nRow] });\n arrayPositions[nRow] = { placeNumber: configurationTables[nRow], prefered: auxArrayPositions[indexof].prefered };\n }\n\n } else if (options.system_table == \"clock\") {\n configurationTables = CONFIG_TABLE[\"CLOCK_\" + options.places];\n\n arrayPositions = [configurationTables.length];\n for (var nRow = 0; nRow < configurationTables.length; nRow++) {\n //Recorremos para organizar las preferencias\n indexof = _.findIndex(auxArrayPositions, { placeNumber: configurationTables[nRow] });\n arrayPositions[nRow] = { placeNumber: configurationTables[nRow], prefered: auxArrayPositions[indexof].prefered };\n }\n } else {\n //Si es normal, el array es el mismo.\n arrayPositions = auxArrayPositions;\n }\n \n\n //for (var nRow = 0; nRow < options.places; nRow++) {\n for (var nRow = 0; nRow < arrayPositions.length; nRow++) {\n //$log.debug(placeNumber, angleCircle, step, angleCircle * 180 / Math.PI);\n\n const diffRadius = 20;\n const outherRadius = radius + diffRadius;\n var x = Math.round(outherRadius * Math.cos(angleCircle)) - placeWidth / 2 + outherRadius - diffRadius;\n var y = Math.round(outherRadius * Math.sin(angleCircle)) - placeHeight / 2 + outherRadius - diffRadius;\n\n placeNumber = arrayPositions[nRow].placeNumber;\n nPlaceTotalPrefered = arrayPositions[nRow].prefered;\n if (isNaN(nPlaceTotalPrefered)) nPlaceTotalPrefered = \"\";\n\n const placeRect = new fabric.Circle({\n left: x,\n top: y,\n //width: placeWidth,\n //height: placeHeight,\n radius: placeWidth / 2,\n fill: $scope.place_color_free,\n //angle: angle * 180 / Math.PI,\n options: {\n droppable: true,\n zone: options.name || \"\",\n zone_type: \"table\",\n zone_file: 1,\n zone_position: placeNumber,\n zone_prefered: nPlaceTotalPrefered + \"\",\n locked: false\n },\n customSvgClass: \"guestNameRect\"\n });\n places.push(placeRect);\n\n fontSize = 10;\n var left = x + (placeWidth / 5);\n var top = y + (placeHeight / 5);\n \n if (angle == 180) {\n top = y + placeHeight - (placeWidth / 5);\n left = x + placeWidth - (placeHeight / 5);\n\n } else if (angle == 90) {\n top = y + placeHeight;\n } else if (angle == -90) {\n left = x + placeWidth;\n }\n \n var placeText = new fabric.Textbox(\"\" + placeNumber, {\n //backgroundColor: '#FFFFFF',\n left: left - 3,\n top: top - 3,\n width: placeWidth,\n height: placeHeight,\n fontSize: fontSize,\n textAlign: 'center',\n originX: \"center\",\n originY: \"center\",\n angle: -angle,\n customSvgClass: \"seatNumber\"\n });\n places.push(placeText);\n\n //texto de precedencia\n if (typeof (nPlaceTotalPrefered) !== 'undefined' && nPlaceTotalPrefered != \"\") {\n var left = x + (placeWidth / 2);\n var top = y;\n if (angle == 180) {\n top = y + (placeHeight);\n } else if (angle == 90) {\n left = x;\n top = y + (placeHeight / 2);\n } else if (angle == -90) {\n top = y + (placeHeight / 2);\n left = x + placeWidth;\n }\n var placeText = new fabric.Textbox(nPlaceTotalPrefered + \"\", {\n left: left,\n top: top - 2,\n width: placeWidth,\n height: placeHeight,\n fontSize: 14,\n textAlign: 'center',\n fontWeight: 'bold',\n originX: \"center\",\n originY: \"center\",\n angle: -angle,\n customSvgClass: \"preferred\"\n });\n places.push(placeText);\n //nPlaceTotalPrefered += (options.onlyPairNone ? 2 : 1);\n }\n\n angleCircle += step;\n //placeNumber++;\n }\n\n } else if (options.type == \"rect\") {\n\n\n let backgroundColor = typeof options.color !== \"undefined\" ? options.color : $scope.zone_color;\n\n if (options.system_table == \"single_head\") {\n var width = Math.ceil((options.places - 1) / 2) * (placeWidth + placeMargin);\n }\n if (options.type_presidency_table == \"english\" && options.system_table != \"single_head\") {\n //Tiene los dos laterales\n var width = Math.ceil((options.places - 2) / 2) * (placeWidth + placeMargin);\n }\n\n if (options.type_presidency_table == \"french\" && options.system_table != \"single_head\") {\n if (options.head_table == \"no_head\") {\n var width = Math.ceil((options.places) / 2) * (placeWidth + placeMargin);\n } else {\n if (options.places % 2 == 0) {\n var width = Math.ceil((options.places - 2) / 2) * (placeWidth + placeMargin);\n } else {\n var width = Math.ceil((options.places - 1) / 2) * (placeWidth + placeMargin);\n }\n \n }\n }\n\n let height = (options.places_left > options.places_right ? options.places_left : options.places_right) * (placeHeight + placeMargin);\n\n\n //aseguramos minimo 1 palza ancho\n if (width == 0) width = (placeWidth + placeMargin * 2);\n if (height == 0) height = (placeHeight + placeMargin * 2);\n\n width += placeMargin;\n height += placeMargin;\n \n\n //creamos base de zona\n var step = (2 * Math.PI) / options.places;\n var radius = 50;\n var tableRect = new fabric.Rect({\n left: 0,\n top: 0,\n width: width,\n height: height,\n fill: backgroundColor,\n strokeWidth: 1,\n strokeColor: '#444444',\n });\n places.push(tableRect);\n\n //ponemos denominacion\n let angleText = (angle == 180 ? angle : 0);\n if (options.name != \"\") {\n var fontSize = 12;\n var placeText = new fabric.Textbox(\"\" + options.name, {\n left: (width/2),\n top: (height - fontSize) / 2,\n originX: \"center\" ,\n originY: \"center\" ,\n width: width,\n height: height,\n fontSize: fontSize,\n textAlign: 'center',\n angle: angleText\n });\n places.push(placeText);\n }\n \n var placeNumber = 1;\n //obtenemos el array cartesiano de la mesa.\n var arrayPositions = [];\n var auxArrayPositions = [];\n var nPlaceTotalPrefered = options.firstPlaceNumberPrefered;\n\n //Definimos el array ordenado.\n for (var nRow = 0; nRow < options.places; nRow++) {\n auxArrayPositions.push({ placeNumber: placeNumber, prefered: nPlaceTotalPrefered });\n placeNumber++;\n nPlaceTotalPrefered++;\n }\n\n\n /*************************************************************************************************\n * DEFINIMOS EL ARRAY CON LO DATOS\n *************************************************************************************************/\n let configurationTables: any = [];\n if (options.system_table == \"cartesian\") {\n if (options.type_presidency_table == \"english\") {\n configurationTables = CONFIG_TABLE[\"CARTESIAN_\" + options.places];\n } else {\n configurationTables = CONFIG_TABLE_FRENCH[\"CARTESIAN_\" + options.places];\n }\n\n arrayPositions = [configurationTables.length];\n for (var nRow = 0; nRow < configurationTables.length; nRow++) {\n //Recorremos para organizar las preferencias\n let indexof = _.findIndex(auxArrayPositions, { placeNumber: configurationTables[nRow] });\n arrayPositions[nRow] = { placeNumber: configurationTables[nRow], prefered: auxArrayPositions[indexof].prefered };\n }\n\n } else if (options.system_table == \"clock\") {\n if (options.type_presidency_table == \"english\") {\n configurationTables = CONFIG_TABLE[\"CLOCK_\" + options.places];\n } else {\n configurationTables = CONFIG_TABLE_FRENCH[\"CLOCK_\" + options.places];\n }\n\n arrayPositions = [configurationTables.length];\n for (var nRow = 0; nRow < configurationTables.length; nRow++) {\n //Recorremos para organizar las preferencias\n let indexof = _.findIndex(auxArrayPositions, { placeNumber: configurationTables[nRow] });\n arrayPositions[nRow] = { placeNumber: configurationTables[nRow], prefered: auxArrayPositions[indexof].prefered };\n }\n } else {\n //Si es normal, el array es el mismo.\n arrayPositions = auxArrayPositions;\n }\n\n /*************************************************************************************************\n * CABECERA UNICA\n *************************************************************************************************/\n if (options.system_table == \"single_head\") {\n\n let places_left = [];\n let places_bottom = [];\n let places_top = [];\n var x = -1 * (placeWidth + placeMargin);\n var y = 1;\n places_left.push(arrayPositions[0]);\n\n for (var i = 1; i < options.places; i = i + 2) {\n if (i < options.places) places_bottom.push(arrayPositions[i]);\n }\n for (var i = 2; i < options.places; i = i + 2) {\n if (i < options.places) places_top.push(arrayPositions[i]);\n }\n \n places = defineTable(-1 * (placeWidth + placeMargin), 1, false, true, places, places_left, placeWidth, placeHeight, placeMargin, options, angle);//left \n places = defineTable(1, -1 * (placeHeight + placeMargin), true, false, places, places_top, placeWidth, placeHeight, placeMargin, options, angle);//top \n places = defineTable(1, height + placeMargin, true, false, places, places_bottom, placeWidth, placeHeight, placeMargin, options, angle);//bottom\n \n }\n\n /*************************************************************************************************\n * INGLESA\n *************************************************************************************************/\n\n if (options.type_presidency_table == \"english\" && options.system_table != \"single_head\") {\n //en la inglesa siempre tienen cabecera. \n var posiSecond = _.findIndex(arrayPositions, { placeNumber: 2 });\n\n //left\n let places_left = [];\n var x = -1 * (placeWidth + placeMargin);\n var y = 1; //(nRow * (placeHeight + placeMargin)) + placeMargin;\n places_left.push(arrayPositions[0]);\n places = defineTable(x, y, false, true, places, places_left, placeWidth, placeHeight, placeMargin, options, angle);\n\n //top\n let places_top = [];\n var x = 1;// (nRow * (placeWidth + placeMargin)) + placeMargin;\n var y = -1 * (placeHeight + placeMargin);\n for (var i = 1; i < posiSecond; i++) {\n if (i < options.places) places_top.push(arrayPositions[i]);\n }\n places = defineTable(x, y, true, false, places, places_top, placeWidth, placeHeight, placeMargin, options, angle);\n\n //right\n let places_right = [];\n var x = width + placeMargin;\n var y = 1;//(nRow * (placeHeight + placeMargin)) + placeMargin;\n places_right.push(arrayPositions[posiSecond]);\n places = defineTable(x, y, false, true, places, places_right, placeWidth, placeHeight, placeMargin, options, angle);\n\n //bottom\n let places_bottom = [];\n var x = 1;// (nRow * (placeWidth + placeMargin)) + placeMargin;\n var y = height + placeMargin;\n for (var i = arrayPositions.length - 1; i > posiSecond; i--) {\n if (i < options.places) places_bottom.push(arrayPositions[i]);\n }\n places = defineTable(x, y, true, false, places, places_bottom, placeWidth, placeHeight, placeMargin, options, angle);\n\n\n }\n\n /*************************************************************************************************\n * FRANCESA\n *************************************************************************************************/\n if (options.type_presidency_table == \"french\" && options.system_table != \"single_head\") {\n if (options.head_table == \"no_head\") {\n\n //top\n let places_top = [];\n var x = 1;\n var y = -1 * (placeHeight + placeMargin);\n let maxI = Math.ceil(arrayPositions.length / 2);\n if (options.places % 2 == 0) {\n maxI = Math.ceil(arrayPositions.length / 2);\n }\n\n for (var i = 0; i < maxI; i++) {\n places_top.push(arrayPositions[i]);\n }\n places = defineTable(x, y, true, false, places, places_top, placeWidth, placeHeight, placeMargin, options, angle);\n\n //bottom\n let places_bottom = [];\n var x = 1;// (nRow * (placeWidth + placeMargin)) + placeMargin;\n var y = height + placeMargin;\n for (var i = arrayPositions.length - 1; i > Math.ceil(arrayPositions.length / 2) - 1; i--) {\n places_bottom.push(arrayPositions[i]);\n }\n places = defineTable(x, y, true, false, places, places_bottom, placeWidth, placeHeight, placeMargin, options, angle);\n\n } else {\n\n if (options.places % 2 == 0) {\n var posiSecond = Number(options.places) / 2;\n } else {\n var posiSecond = (Number(options.places)+1) / 2;\n }\n\n //left\n let places_left = [];\n var x = -1 * (placeWidth + placeMargin);\n var y = 1; //(nRow * (placeHeight + placeMargin)) + placeMargin;\n places_left.push(arrayPositions[0]);\n places = defineTable(x, y, false, true, places, places_left, placeWidth, placeHeight, placeMargin, options, angle);\n\n //top\n let places_top = [];\n var x = 1;// (nRow * (placeWidth + placeMargin)) + placeMargin;\n var y = -1 * (placeHeight + placeMargin);\n for (var i = 1; i < posiSecond; i++) {\n if (_.findIndex(places_top, { placeNumber: arrayPositions[i].placeNumber }) == -1) {\n if (i < options.places) places_top.push(arrayPositions[i]);\n }\n }\n places = defineTable(x, y, true, false, places, places_top, placeWidth, placeHeight, placeMargin, options, angle);\n\n //right\n if (options.places % 2 == 0) {\n //es par, por lo tanto, habrá en izquierda y en derecha\n\n let places_right = [];\n var x = width + placeMargin;\n var y = 1;//(nRow * (placeHeight + placeMargin)) + placeMargin;\n places_right.push(arrayPositions[posiSecond]);\n places = defineTable(x, y, false, true, places, places_right, placeWidth, placeHeight, placeMargin, options, angle);\n } \n \n //bottom\n let places_bottom: any = [];\n if (options.places % 2 == 0) posiSecond = posiSecond + 1; //ya que ponemos el right\n var x = 1;// (nRow * (placeWidth + placeMargin)) + placeMargin;\n var y = height + placeMargin;\n\n for (var i = arrayPositions.length - 1; i > posiSecond - 1; i--) {\n if (_.findIndex(places_bottom, { placeNumber: arrayPositions[i].placeNumber }) === -1) {\n places_bottom.push(arrayPositions[i]);\n } \n }\n places = defineTable(x, y, true, false, places, places_bottom, placeWidth, placeHeight, placeMargin, options, angle);\n\n }\n }\n }\n\n const zone = new fabric.Group(places, {\n localType: \"table\",\n guid: $scope.guid(),\n left: click_x,\n top: click_y,\n lockScalingX: true,\n lockScalingY: true,\n strokeWidth: 0,\n padding: 0,\n angle: angle,\n originX: \"center\",\n originY: \"center\",\n options: options,\n subTargetCheck: true\n });\n\n if (item != null) {\n zone.left = item.left;\n zone.top = item.top;\n //zone.setAngle(item.getAngle()); //ya está controlado el angulo\n $scope.space.items[$scope.space.items.indexOf(item)] = zone;\n } else {\n $scope.space.items.push(zone);\n }\n\n $scope.drawSpace(false);\n\n //asignamos invitados ubicados antes de edición de zona\n if(item!=null) $scope.reasignGuestToZone(item.guests, zone);\n\n }, function () {\n //dimissed\n });\n };\n \n var defineTable = function (x, y, fixedValuex, fixedValuey, places, values, placeWidth, placeHeight, placeMargin, options, angle) {\n for (let nRow = 0; nRow < values.length; nRow++) {\n const fixedValue = (nRow * (placeHeight + placeMargin)) + placeMargin;\n if (fixedValuex) {\n x = fixedValue;\n } \n if (fixedValuey) {\n y = fixedValue;\n }\n\n const placeRect = new fabric.Rect({\n left: x,\n top: y,\n width: placeWidth,\n height: placeHeight,\n fill: $scope.place_color_free,\n options: {\n droppable: true,\n zone: options.name || \"\",\n zone_type: \"table\",\n zone_file: 1,\n zone_position: values[nRow].placeNumber,\n zone_prefered: values[nRow].prefered,\n locked: false\n }\n });\n places.push(placeRect);\n\n var left = x + 1;\n var top = y + 1;\n if (angle == 90) {\n top = top + placeWidth;\n } else if (angle == -90) {\n left = x + placeWidth;\n } else if (angle == 180) {\n top = top + placeHeight;\n left = left + placeWidth;\n }\n var placeText = new fabric.Textbox(\"\" + values[nRow].placeNumber, {\n left: left,\n top: top,\n width: placeWidth,\n height: placeHeight,\n fontSize: 7,\n originX: \"center\",\n originY: \"center\",\n textAlign: 'center',\n angle: -angle,\n customSvgClass: \"preferred\"\n });\n places.push(placeText);\n\n var left = x + (placeWidth / 2);\n var top = y;\n\n if (angle == 90) {\n left = x;\n top = y+(placeHeight / 2);\n } else if (angle == -90) {\n left = x + placeWidth;\n top = y + (placeHeight / 2);\n } else if (angle == 180) {\n top = y + placeHeight;\n }\n\n //texto de precedencia\n if (typeof (values[nRow].prefered) !== 'undefined') {\n var placeText = new fabric.Textbox(values[nRow].prefered + \"\", {\n left: left,\n top: top ,\n width: placeWidth,\n height: placeHeight,\n fontSize: 12,\n textAlign: 'center',\n fontWeight: 'bold',\n originX: \"center\",\n originY: \"center\",\n angle: -angle,\n customSvgClass: \"preferred\"\n });\n places.push(placeText);\n }\n }\n return places;\n }\n\n //generamos invitados en zona\n $scope.reasignGuestToZone = function (guests, zone) {\n angular.forEach(guests, function (guest) {\n //asignamos posicion\n $scope.addGuestToObject(zone, guest.file, guest.position, guest.prefered, guest.locked, guest.event_guest_id, guest.name_guest, guest.color_guest, guest.position);\n\n });\n };\n\n\n //añadimos objeto\n $scope.createImage = function (item, image, click_x, click_y) {\n // var url = '/assets/img/spaces/' + image + '.png';\n let url = (window as any).CONFIG.api_url + 'files/' + image + '/download';\n fabric.Image.fromURL(url, function (oImg) {\n //canvas.add(oImg);\n oImg.localType = \"image\";\n oImg.guid = $scope.guid();\n oImg.lockScalingX = false;\n oImg.lockScalingY = false;\n oImg.left = click_x;\n oImg.top = click_y;\n oImg.originX = \"center\";\n oImg.originY = \"center\";\n oImg.options = {\n url: url,\n uid: image\n };\n\n if (item != null) {\n oImg.left = item.left;\n oImg.top = item.top;\n $scope.space.items[$scope.space.items.indexOf(item)] = oImg;\n } else {\n $scope.space.items.push(oImg);\n }\n\n $scope.drawSpace(false);\n });\n\n };\n\n //añadimos zona\n $scope.createZone = function (item, click_x, click_y) {\n $scope.modalOpened = true;\n\n const modalInstance = $uibModal.open({\n template: SpaceItemZoneModalView,\n controller: \"SpaceItemCtrl\",\n scope: $scope,\n //size: \"sm\",\n resolve: {\n item: function () {\n return item;\n }\n }\n });\n\n modalInstance.result.then(function (options) {\n\n let angle = 0;\n if (options.positions_header == \"up\") {\n angle = 180;\n } else if (options.positions_header == \"left\") {\n angle = 90;\n } else if (options.positions_header == \"right\") {\n angle = -90;\n }\n\n const nRows = options.rows;\n const nPlaces = options.places;\n const placeWidth = 70; //20;\n const placeMargin = 8; // 5;\n const placeHeight = 70;//20;\n\n let backgroundColor = typeof options.color !== \"undefined\" ? options.color : $scope.zone_color;\n\n const places = [];\n\n //creamos base de zona\n if (options.placesDirection2 == \"up\") {\n var placeRect = new fabric.Rect({\n left: -placeMargin,\n top: -((placeHeight + placeMargin) * (nRows - 1) + placeMargin),\n width: ((placeWidth + placeMargin) * nPlaces) + placeMargin,\n height: ((placeHeight + placeMargin) * nRows) + placeMargin,\n fill: backgroundColor\n });\n } else {\n var placeRect = new fabric.Rect({\n left: -placeMargin,\n top: -placeMargin,\n width: ((placeWidth + placeMargin) * nPlaces) + placeMargin,\n height: ((placeHeight + placeMargin) * nRows) + placeMargin,\n fill: backgroundColor\n });\n }\n \n if (options.placesDirection == \"left\") {\n placeRect.left = -((placeWidth + placeMargin) * (nPlaces - 1)) - placeMargin;\n }\n places.push(placeRect);\n\n //generamos filas \n var nPlaceTotal = options.firstPlaceNumber;\n let nPlaceTotalPrefered = options.firstPlaceNumberPrefered;\n\n for (let nRow = 0; nRow < nRows; nRow++) {\n let left = 0;\n if (options.placesDirection2 == \"up\") {\n var top = -(placeHeight + placeMargin) * nRow;\n } else {\n var top = (placeHeight + placeMargin) * nRow;\n }\n\n if (options.resetPlaceNumberByRow) {\n nPlaceTotal = options.firstPlaceNumber;\n }\n\n //ponemos numero de fila a la izquierda o derecha\n let rowNumber = \"\" + (parseInt(options.firstRowNumber) + nRow);\n if (options.rowsNumberLikeChars) {\n rowNumber = String.fromCharCode(65 + (parseInt(options.firstRowNumber) + nRow));\n }\n var placeText = new fabric.Text(rowNumber, {\n left: left + (options.placesDirection == \"left\" ? placeWidth+5 : -(placeMargin / 2)-5),\n top: top + (placeHeight / 2) - 5,\n width: placeWidth,\n height: placeHeight,\n fontSize: 10,\n textAlign: 'center',\n angle: -angle,\n originX: \"center\",\n originY: \"center\",\n customSvgClass: \"rowNumber\"\n });\n places.push(placeText);\n\n let centerArray: any = null;\n if (options.placesDirection == \"center\") {\n //Construimos el array centrado y lo pinta como si la direccion fuese right\n centerArray = [nPlaces];\n let pos = Math.floor(nPlaces / 2);\n let count = 1;\n var nPlaceTotal = options.firstPlaceNumber;\n //construyo el array\n for (let i = 0; i < nPlaces; i++) {\n centerArray[pos] = { column: nPlaceTotal, prefered: nPlaceTotalPrefered };\n //si es impar\n if (nPlaces % 2 == 0) {\n if (i % 2 == 0) {\n pos = pos - count;\n } else {\n pos = pos + count;\n }\n } else {\n //Es par, va al reves\n if (i % 2 == 0) {\n pos = pos + count;\n } else {\n pos = pos - count;\n }\n }\n count++;\n nPlaceTotalPrefered += (options.onlyPairNone ? 2 : 1);\n nPlaceTotal += (options.onlyPairNone ? 2 : 1);\n }\n }\n //pintamos asientos\n for (let nPlace = 0; nPlace < nPlaces; nPlace++) {\n left = (options.placesDirection == \"left\" ? -1 : 1) * (placeWidth + placeMargin) * nPlace;\n //asiento\n var placeRect = new fabric.Rect({\n left: left,\n top: top,\n width: placeWidth,\n height: placeHeight,\n fill: $scope.place_color_free,\n options: {\n droppable: true,\n zone: options.name || \"\",\n zone_type: \"zone\",\n zone_file: rowNumber,\n zone_position: (options.placesDirection != \"center\" ? \"\" + nPlaceTotal : \"\" + centerArray[nPlace].column),\n zone_prefered: (options.placesDirection != \"center\" ? nPlaceTotalPrefered : centerArray[nPlace].prefered),\n locked: false\n }\n });\n placeRect.on('mousedown', function(e) {\n $log.debug(e.target);\n });\n places.push(placeRect);\n\n var leftText = left + (placeMargin / 2);\n var topText = top + (placeMargin - 2);\n //texto de asiento\n var placeText = new fabric.Textbox((options.placesDirection != \"center\" ? \"\" + nPlaceTotal : \"\" + centerArray[nPlace].column), {\n //backgroundColor: '#FFFFFF',\n left: leftText,\n top: topText,\n /*width: placeWidth,\n height: placeHeight,*/\n fontSize: 7,\n textAlign: 'left',\n angle: -angle,\n originX: \"center\",\n originY: \"center\",\n customSvgClass: \"seatNumber\"\n });\n places.push(placeText);\n\n //texto de precedencia\n if (typeof (nPlaceTotalPrefered) !== 'undefined') {\n var leftText = left + (placeWidth / 2);\n var topText = top - (placeMargin/2);\n if (angle == 90) {\n leftText = left;\n topText = top + (placeHeight / 2);\n } else if (angle == -90) {\n leftText = left + placeWidth;\n topText = top + (placeHeight / 2);\n } else if (angle == 180) {\n topText = top + placeHeight;\n }\n\n var placeText = new fabric.Textbox((options.placesDirection != \"center\" ? \"\" + nPlaceTotalPrefered : \"\" + centerArray[nPlace].prefered), {\n left: leftText,\n top: topText ,\n width: placeWidth,\n height: placeHeight,\n fontSize: 12,\n textAlign: 'center',\n fontWeight: 'bold',\n angle: -angle,\n originX: \"center\",\n originY: \"center\",\n customSvgClass: \"preferred\"\n });\n places.push(placeText);\n if (options.placesDirection != \"center\") { nPlaceTotalPrefered += (options.onlyPairNone ? 2 : 1); }\n }\n if (options.placesDirection != \"center\") { nPlaceTotal += (options.onlyPairNone ? 2 : 1); }\n }\n \n }\n\n const zone = new fabric.Group(places, {\n localType: \"zone\",\n guid: $scope.guid(),\n left: click_x,\n top: click_y,\n lockScalingX: true,\n lockScalingY: true,\n strokeWidth: 0,\n padding: 0,\n angle: angle,\n originX: \"center\",\n originY: \"center\",\n options: options,\n subTargetCheck: true\n });\n\n if (item != null) {\n zone.left = item.left;\n zone.top = item.top;\n //zone.setAngle(item.getAngle());\n\n $scope.space.items[$scope.space.items.indexOf(item)] = zone;\n } else {\n $scope.space.items.push(zone);\n }\n\n\n $scope.drawSpace(false);\n\n if(item != null) {\n //asignamos invitados ubicados antes de edición de zona\n $scope.reasignGuestToZone(item.guests, zone);\n }\n\n }, function () {\n //dimissed\n $scope.modalOpened = false;\n });\n };\n\n //añadimos coche\n $scope.createVehicle = function (item, click_x, click_y) {\n $scope.modalOpened = true;\n\n //if (item == null) item = { rows: 2, places: 2 };\n\n const modalInstance = $uibModal.open({\n template: SpaceItemVehicleModalView,\n controller: \"SpaceItemCtrl\",\n scope: $scope,\n //size: \"sm\",\n resolve: {\n item: function () {\n return item;\n }\n }\n });\n\n modalInstance.result.then(function (options) {\n\n const nRows = options.rows;\n const nPlaces = options.places;\n let nPlaceTotalPrefered = options.firstPlaceNumberPrefered;\n\n const placeWidth = 50;// 20;\n const placeMargin = 10;//5;\n const placeHeight = 50;// 20;\n\n const places = [];\n\n //creamos dibujo de vehiculo\n var placeRect = new fabric.Rect({\n left: -placeMargin - 45,\n top: -((placeHeight + placeMargin) * (nPlaces - 1) + placeMargin) - placeMargin,\n width: ((placeWidth + placeMargin) * nRows) + placeMargin + 90,\n height: ((placeHeight + placeMargin) * nPlaces) + 3 * placeMargin,\n fill: \"#e9e9e9\"\n });\n places.push(placeRect);\n const ligthRadius = 4;\n var placeRect = new fabric.Circle({\n radius: ligthRadius,\n left: -placeMargin - 45 - ligthRadius,\n top: -((placeHeight + placeMargin) * (nPlaces - 1) + placeMargin) - placeMargin + 10,\n fill: \"#444444\"\n });\n places.push(placeRect);\n var placeRect = new fabric.Circle({\n radius: ligthRadius,\n left: -placeMargin - 45 - ligthRadius,\n top: placeHeight - 10,\n fill: \"#444444\"\n });\n places.push(placeRect);\n\n //nombre de vehiculo\n if (options.name != \"\") {\n var placeText = new fabric.Textbox(options.name, {\n left: -placeMargin - 45,\n top: -((placeHeight + placeMargin) * (nPlaces - 1) + placeMargin) - placeMargin - placeHeight,\n width: ((placeWidth + placeMargin) * nRows) + placeMargin + 90,\n height: placeHeight,\n fontSize: 10,\n textAlign: 'center'\n });\n places.push(placeText);\n }\n\n //creamos base de zona de asientos\n var placeRect = new fabric.Rect({\n left: -placeMargin,\n top: -((placeHeight + placeMargin) * (nPlaces - 1) + placeMargin),\n width: ((placeWidth + placeMargin) * nRows) + placeMargin,\n height: ((placeHeight + placeMargin) * nPlaces) + placeMargin,\n fill: $scope.zone_color\n });\n places.push(placeRect);\n\n //generamos filas\n var nPlaceTotal = options.firstPlaceNumber;\n for (let nRow = 0; nRow < nRows; nRow++) {\n\n //var left = 0;\n var top = 0;\n //var top = -(placeHeight + placeMargin) * nRow;\n\n const left = (placeWidth + placeMargin) * nRow;\n\n //ponemos numero de fila a la izquierda o derecha\n const rowNumber = \"\" + (parseInt(options.firstRowNumber) + nRow);\n\n //pintamos asientos\n let nPlaceTotal: any = 1;\n for (let nPlace = 0; nPlace < nPlaces; nPlace++) {\n const placeNumber = \"\" + nPlaceTotal;\n const placeNumberPrefered = \"\" + nPlaceTotalPrefered;\n\n var top = -(placeHeight + placeMargin) * nPlace;\n\n //asiento\n var placeRect = new fabric.Rect({\n left: left,\n top: top,\n width: placeWidth,\n height: placeHeight,\n fill: $scope.place_color_free,\n options: {\n droppable: true,\n zone: options.name || \"\",\n zone_type: \"zone\",\n zone_file: rowNumber,\n zone_position: placeNumber,\n zone_prefered: nPlaceTotalPrefered,\n locked: false\n }\n });\n places.push(placeRect);\n\n //texto de asiento\n var placeText = new fabric.Textbox(placeNumber, {\n //backgroundColor: '#FFFFFF',\n left: left,\n top: top + 4,\n width: placeWidth,\n height: placeHeight,\n fontSize: 10,\n textAlign: 'center',\n customSvgClass: \"seatNumber\"\n });\n places.push(placeText);\n\n //texto de precedencia\n if (typeof (nPlaceTotalPrefered) !== 'undefined') {\n var placeText = new fabric.Textbox(placeNumberPrefered, {\n left: left,\n top: top - (placeMargin),\n width: placeWidth,\n height: placeHeight,\n fontSize: 12,\n textAlign: 'center',\n fontWeight: 'bold',\n customSvgClass: \"preferred\"\n });\n places.push(placeText);\n nPlaceTotalPrefered += (options.onlyPairNone ? 2 : 1);\n }\n nPlaceTotal += (options.onlyPairNone ? 2 : 1);\n }\n }\n const zone = new fabric.Group(places, {\n localType: \"vehicle\",\n guid: $scope.guid(),\n left: click_x,\n top: click_y,\n lockScalingX: true,\n lockScalingY: true,\n strokeWidth: 0,\n padding: 0,\n options: options,\n subTargetCheck: true\n });\n\n if (item != null) {\n zone.left = item.left;\n zone.top = item.top;\n //zone.setAngle(item.getAngle());\n $scope.space.items[$scope.space.items.indexOf(item)] = zone;\n } else {\n $scope.space.items.push(zone);\n }\n $scope.drawSpace(false);\n\n if(item != null) {\n //asignamos invitados ubicados antes de edición de zona\n $scope.reasignGuestToZone(item.guests, zone);\n }\n }, function () {\n //dimissed\n $scope.modalOpened = false;\n });\n };\n\n $scope.selectedTool = \"selector\";\n $scope.fillColor = \"#000000\";\n $scope.strokeColor = \"#000000\";\n $scope.transparent = false;\n $scope.gridShown = false;\n \n $scope.showGrid = function () {\n if(!$scope.gridShown) {\n addGrid();\n } else {\n removeGrid();\n }\n $scope.gridShown = !$scope.gridShown;\n };\n \n $scope.groupObjects = function () {\n if (!$scope.canvas.getActiveObject()) {\n return;\n }\n if ($scope.canvas.getActiveObject().type !== 'activeSelection') {\n return;\n }\n $scope.canvas.getActiveObject().toGroup();\n $scope.canvas.requestRenderAll(); \n };\n\n $scope.ungroupObjects = function () {\n if (!$scope.canvas.getActiveObject()) {\n return;\n }\n if ($scope.canvas.getActiveObject().type !== 'group') {\n return;\n }\n $scope.canvas.getActiveObject().toActiveSelection();\n $scope.canvas.requestRenderAll();\n };\n\n $scope.selectTool = function(tool, transparent) {\n $scope.transparent = transparent;\n $scope.selectedTool = tool;\n $scope.canvas.isDrawingMode = tool !== \"selector\" && tool !== \"text\" && tool !== \"image\";\n $scope.canvas.freeDrawingBrush.color = 'transparent';\n if(tool === \"rectangle\") {\n $scope.drawRectangle(transparent);\n } else if(tool === \"line\") {\n $scope.drawLine();\n } else if(tool === \"circle\") {\n $scope.drawCircle(transparent);\n } else if(tool === \"polygon\") {\n $scope.drawPolygon(transparent);\n } else if(tool === \"text\") {\n $scope.drawText();\n } else if(tool === \"image\") {\n $scope.drawImage();\n } else if(tool === \"selector\") {\n $scope.removeEvents();\n }\n }\n \n $scope.changeNames = function () {\n let objects = $scope.canvas.getObjects();\n for (let i = 0; i < objects.length; i++) {\n let object = objects[i];\n if(object.type === \"group\") {\n changeNamesGroup(object);\n }\n }\n $scope.canvas.renderAll();\n }\n \n let findZonePositions = function () {\n let objects = $scope.canvas.getObjects();\n for (let i = 0; i < objects.length; i++) {\n let object = objects[i];\n if(object.type === \"group\") {\n findZonePositionsRec(object);\n }\n }\n }\n \n let findZonePositionsRec = function (group) {\n if (group.type === \"group\" && (group.localType === \"zone\" || group.localType === \"table\")) {\n let margin = 20;\n group.options.x = Math.round(group.left - (group.width/2) - margin);\n group.options.y = Math.round(group.top - (group.height/2) - margin);\n group.options.width = Math.round(group.width + margin * 2);\n group.options.height = Math.round(group.height + margin * 2);\n }\n for (let i = 0; i < group._objects.length; i++) {\n let object = group._objects[i];\n if(object.type === \"group\") {\n findZonePositionsRec(object);\n }\n }\n }\n \n \n let getPlaceName = function (placeNumber) {\n // Search $scope.gridEventSpaceGuest.data for a place which has the same zone_prefered as placeNumber\n // And return Full Seat Name\n for (let place of allEventGuest) {\n if (place.zone_prefered == placeNumber) {\n return getFullSeatName(place);\n }\n }\n }\n \n let changeNamesGroup = function (group, guests = null) {\n if(guests == null && group.guests !== undefined) {\n guests = group.guests;\n }\n for (let i = 0; i < group._objects.length; i ++) {\n let object = group._objects[i];\n if(object.type == \"group\") {\n changeNamesGroup(object, guests);\n } else if(object.type === \"textbox\" && object.options !== undefined) {\n if(!$scope.spaceDTO.useFullname && !$scope.spaceDTO.usePosition) {\n object.set({text: object.options.id, fontSize: 18, objectCaching: false});\n } else {\n let name = getPlaceName(object.options.id);\n $log.debug(\"Pongo nombre a \" + name + \" en \" + object.options.id);\n if(name !== undefined) {\n object.set({text: name, fontSize: 7, objectCaching: false});\n }\n }\n }\n }\n }\n\n function padZero(str, len) {\n len = len || 2;\n const zeros = new Array(len).join('0');\n return (zeros + str).slice(-len);\n }\n \n function invertColor(hex) {\n let color = \"#000000\";\n if (hex != null && hex !== 'undefined' && hex != \"\") {\n if (hex.indexOf('#') === 0) {\n hex = hex.slice(1);\n }\n // convert 3-digit hex to 6-digits.\n if (hex.length === 3) {\n hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];\n }\n if (hex.length !== 6) {\n throw new Error('Invalid HEX color.');\n }\n const r = parseInt(hex.slice(0, 2), 16),\n g = parseInt(hex.slice(2, 4), 16),\n b = parseInt(hex.slice(4, 6), 16);\n\n color = (r * 0.299 + g * 0.587 + b * 0.114) > 186\n ? '#000000'\n : '#FFFFFF';\n }\n return color;\n }\n \n $scope.invertColor = function (hex) {\n return invertColor(hex);\n }\n }])\n\n .controller(\"SpaceItemCtrl\", ['$scope', '$uibModalInstance', 'item', function ($scope, $uibModalInstance, item) {\n $scope.item = item;\n if (item != null) {\n $scope.options = item.options;\n } else {\n $scope.options = {\n rows: 1,\n places: 5,\n firstRowNumber: 1,\n firstPlaceNumber: 1,\n placesDirection: \"right\",\n placesDirection2: \"down\",\n onlyPairNone: false,\n resetPlaceNumberByRow: true,\n positions_header: \"down\",\n color: $scope.zone_color\n };\n }\n $scope.ok = function () {\n $uibModalInstance.close($scope.options);\n };\n $scope.cancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n $scope.delete = function () {\n $scope.deleteObject($scope.item);\n $uibModalInstance.dismiss('deleted');\n };\n }])\n\n .controller(\"SpaceTableCtrl\", ['$scope', '$uibModalInstance', 'item', function ($scope, $uibModalInstance, item) {\n $scope.item = item;\n\n if (item != null) {\n $scope.options = item.options;\n } else {\n $scope.options = {\n rows: 1,\n places: \"8\",\n places_left: 0,\n places_top: 6,\n places_right: 0,\n places_bottom: 6,\n type: \"round\",\n system_table: \"cartesian\",\n head_table: \"no_head\",\n type_presidency_table: \"french\",\n positions_header: \"left\"\n };\n }\n $scope.ok = function () {\n $uibModalInstance.close($scope.options);\n };\n $scope.cancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n $scope.delete = function () {\n $scope.deleteObject($scope.item);\n $uibModalInstance.dismiss('deleted');\n };\n }])\n\n ;","import SpacesExportOptionsModalView from \"./spaces-export-options.html\";\nimport SpacesEditModalView from \"./spaces-edit.html\";\nimport TemplateSpaceModalView from \"./templateModal.html\";\n\nangular.module(\"events\")\n\n .controller(\"EventsSpacesListCtrl\", ['$location', 'clipboard', 'event', '$rootScope', '$scope', '$http', '$interval', '$q', 'i18nService', 'Restangular', 'gridService', 'modalService', '$uibModal', '$filter', '$translate', 'generateDocumentService', '$log',\n function ($location, clipboard, event, $rootScope, $scope, $http, $interval, $q, i18nService, Restangular, gridService, modalService, $uibModal, $filter, $translate, generateDocumentService, $log) {\n $log = $log.getInstance(\"EventsSpacesListCtrl\");\n \n $scope.event = event; \n \n $rootScope.title = $filter('translate')('spaces.title');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('spaces.title') + \" / \" + event.name }\n ];\n\n $scope.gridOptionsSpaces = {\n pdfTitle: \"Espacios\",\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n enableSorting: true, \n paginationPageSizes: [20, 40, 60],\n paginationPageSize: 20,\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n { name: 'name', displayName: $filter('translate')('spaces.name'), enableFiltering: true, enableHiding: false },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('spaces.button_export'), action: 'ng-click=\"grid.appScope.showExportSpaceToExcel(row.entity.id)\"', cssIconClass: \"fas fa-file-excel\" },\n { title: $filter('translate')('spaces.button_preview'), action: 'ng-click=\"grid.appScope.openImage(row.entity.id)\"', cssIconClass: \"fa fa-image\" },\n { title: $filter('translate')('inscriptions_forms.copy_url'), action: 'ng-click=\"grid.appScope.copyToClipboard(row.entity.id)\"', cssIconClass: \"fa fa-link\" },\n { title: $filter('translate')('spaces.button_print_full_space'), action: 'ng-click=\"grid.appScope.printDialog(\\'SPACE_FULL_PLAN\\',row.entity.id)\"', cssIconClass: \"fa fa-file\" },\n { title: $filter('translate')('spaces.button_print_space'), action: 'ng-click=\"grid.appScope.printDialog(\\'SPACE_GUESTS\\',row.entity.id)\"', cssIconClass: \"fa fa-file\" },\n { title: $filter('translate')('spaces.button_print'), action: 'ng-click=\"grid.appScope.printDialog(\\'GUEST_LOCATION\\',row.entity.id)\"', cssIconClass: \"fa fa-building-o\" },\n { title: $filter('translate')('spaces.button_edit'), action: 'ng-click=\"grid.appScope.editSpace(row.entity.id)\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('spaces.button_delete'), action: 'ng-click=\"grid.appScope.deleteDialog(row.entity.id,row.entity.name);\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n options.event_id = $scope.event.id;\n return Restangular.all('EventsSpaces').getList(options);\n }\n };\n\n $scope.copyToClipboard = function (uid) {\n clipboard.copyText($location.host() + '/#/dashboard_space/show/' + $scope.event.id + '/' + uid);\n };\n\n $scope.openImage = function (uid) {\n window.open('/api/eventsspaces/' + uid + '/image', '_blank');\n };\n\n $scope.showExportSpaceToExcel = function (id) {\n const modalInstance = $uibModal.open({\n template: SpacesExportOptionsModalView,\n controller: ['$scope', '$uibModalInstance', function($scope, $uibModalInstance){\n $scope.options = {\n single_sheet: false\n };\n $scope.ok = function(){\n $uibModalInstance.close($scope.options);\n }\n $scope.cancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n }],\n scope: $scope\n });\n modalInstance.result.then(function (options) {\n $log.log(options);\n $scope.exportSpaceToExcel(id, options.single_sheet);\n }, function () {\n //dimissed\n });\n }\n\n $scope.exportSpaceToExcel = function (id, single_sheet) {\n window.open('/api/eventsspaces/' + id + '/excel?single_sheet=' + (single_sheet?\"true\":\"false\"), '_blank');\n };\n\n $scope.editSpace = function (id) {\n $log.debug(\"Open\", id);\n if (id != null) {\n const modalInstance = $uibModal.open({\n template: SpacesEditModalView,\n controller: \"EventsSpacesEditCtrl\",\n size: \"fullscreen\",\n scope: $scope,\n backdrop: 'static',\n resolve: {\n id: function () {\n return id;\n },\n configuration: function () {\n return \"\";\n },\n name: function () {\n return \"\";\n }\n }\n });\n\n modalInstance.result.then(function (options) {\n $log.log(options);\n }, function () {\n //dimissed\n });\n } else {\n //TEMPLATE\n let $modalInstanceTemplate = $uibModal.open({\n animation: true,\n template: TemplateSpaceModalView,\n size: \"md\",\n controller: \"TemplateSpaceModalCtrl\"\n });\n //Response del modal\n $modalInstanceTemplate.result.then(function (idTemplate) {\n if (idTemplate != null) {\n Restangular.one('Spaces', idTemplate).get().then(function (results) {\n $log.debug(results);\n var modalInstance = $uibModal.open({\n template: SpacesEditModalView,\n controller: \"EventsSpacesEditCtrl\",\n size: \"fullscreen\",\n scope: $scope,\n backdrop: 'static',\n resolve: {\n id: function () {\n return null;\n },\n configuration: function () {\n return results.configuration;\n },\n name: function () {\n return results.name;\n }\n }\n });\n\n modalInstance.result.then(function (options) {\n }, function () {\n //dimissed\n });\n });\n } else {\n var modalInstance = $uibModal.open({\n template: SpacesEditModalView,\n controller: \"EventsSpacesEditCtrl\",\n size: \"fullscreen\",\n scope: $scope,\n backdrop: 'static',\n resolve: {\n id: function () {\n return null;\n },\n configuration: function () {\n return \"\";\n },\n name: function () {\n return \"\";\n }\n }\n });\n\n modalInstance.result.then(function (options) {\n }, function () {\n //dimissed\n });\n }\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n });\n }\n };\n\n $scope.deleteDialog = function (id, name) {\n modalService.confirm({\n title: $filter('translate')('spaces.delete'),\n message: $filter('translate')('spaces.delete_message')+\" \" + name + \"?\",\n onAccept: function () {\n Restangular.one('EventsSpaces', id).remove().then(function () {\n toastr.success($filter('translate')('spaces.delete_success'));\n $scope.gridOptionsSpaces.gridApi.core.raise.itemDeleted($scope);\n \n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n });\n\n };\n /**\n * CODE: codigo del documents_types\n * TYPE_DOCUMENT: pdf/html\n * TYPE_RESULT: list/single si es list, no tendra id, si es single, es que sólo se va a pintar un resultado, por lo tanto hay que poner el id de lo que se quiere mostrar.\n **/\n $scope.printDialog = function (code, event_space_id) {\n var params = {\n entity_type: \"events\",\n entity_type_id: $scope.event.id,\n documents: { codes: [code] }\n };\n $log.debug(params);\n generateDocumentService.documentNew({\n params: params,\n onAccept: function (data) {\n angular.forEach(data, function (item) {\n //url = (window as any).CONFIG.api_url + 'documentgenerator/' + item.document_url_method + '/' + item.document_id + '/' + params.entity_type_id + \"/\" + event_space_id + '/pdf';\n //window.open(url, '_blank');\n $http({\n method: 'post',\n url: (window as any).CONFIG.api_url + 'documentgenerator/Generate',\n params: { document_id: item.document_id, event_id: params.entity_type_id, event_space_id: event_space_id, outputType: 'pdf' }\n\n }).then(function (result, status, headers, config) {\n var url = (window as any).CONFIG.api_url + 'documentgenerator/download/' + result.data;\n window.open(url, '_blank');\n });\n })\n\n }\n }); \n }\n \n }])\n\n .controller(\"TemplateSpaceModalCtrl\", ['$scope', '$uibModalInstance', 'Restangular', '$log', function ($scope, $uibModalInstance, Restangular, $log) {\n\n let options = {}; \n Restangular.all('Spaces').getList(options).then(function (response) {\n $scope.templates = response;\n })\n \n\n $scope.createFromTemplate = function (id) {\n $log.debug(id);\n $uibModalInstance.close(id);\n };\n $scope.cancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n $scope.delete = function () {\n $scope.deleteObject($scope.item);\n $uibModalInstance.dismiss('deleted');\n };\n }])\n;","import HistoricMailsModalView from \"../common/historicMails.html\";\nimport SearchStaffModalView from \"./searchStaffModal.html\";\nimport AddNewStaffModalView from \"./addNewStaffModal.html\";\n\nimport _ from 'lodash';\n\n\nangular.module(\"events\")\n .controller(\"EventsStaffListCtrl\", ['event', 'LoginService', '$rootScope', '$scope', 'Restangular', 'gridService', 'modalService', '$uibModal', '$filter', 'notificationService', '$stateParams', '$state', '$http', '$window', 'uiGridConstants', 'eventService', '$log',\n function (event, LoginService, $rootScope, $scope, Restangular, gridService, modalService, $uibModal, $filter, notificationService, $stateParams, $state, $http, $window, uiGridConstants, eventService, $log) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"EVENTS_STAFF_WRITE\");\n $scope.allowReadUser = LoginService.permissionExist(\"USERS_READ\");\n if(!Array.isArray($scope.$parent.menusItems)) {\n $state.go(\"events.edit\", { id: $stateParams.id });\n } else {\n let results = $scope.$parent.menusItems.filter(m => m.id === parseInt($stateParams.menu_item_id, 10));\n if(results.length > 0) {\n $scope.allowWrite &&= results[0].editable;\n } else {\n $scope.allowWrite = false;\n }\n }\n $rootScope.title = $filter('translate')('events.title') + \" - \" + $filter('translate')('events.staff.staff');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('events.title'), url: \"events.list\" },\n { title: $filter('translate')('events.title'), url: \"events.list\" },\n { title: $filter('translate')('events.staff.staff') }\n ];\n $scope.classSize = \"col-lg-12 col-md-12\";\n\n function isDefinedAndNotNull(val) {\n return angular.isDefined(val) && val !== null\n }\n function isDefinedAndNotNullOrEmpty(val) {\n return angular.isDefined(val) && val !== null && val !== \"\"\n }\n\n $scope.event = event;\n $rootScope.breadcrumb = [\n { title: $filter('translate')('events.title'), url: \"events.list\" },\n { title: $scope.event.name, url: \"events.edit({ id: \" + $scope.event.id + \" })\" },\n { title: $filter('translate')('events.staff.staff') }\n ];\n $rootScope.title = $scope.event.name + \" - \" + $filter('translate')('events.staff.staff');\n\n $scope.ConfirmationStatusOptions = [{ value: 'pending', label: $filter('translate')('events.staff.pending') },\n { value: 'confirmed', label: $filter('translate')('events.staff.confirmed') }];\n\n $scope.is_template = $stateParams.is_template === 'true';\n if (!$scope.is_template) { //No es template\n $scope.gridOptionEventStaff = {\n pdfTitle: $filter('translate')('events.staff.pdf_title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n //gridMenuShowHideColumns: false,\n enableSorting: true,\n paginationPageSizes: [20, 50, 100],\n paginationPageSize: 20,\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n {\n name: 'confirmation_status', field: 'confirmation_status', displayName: $filter('translate')('events.staff.confirmation_status'),\n enableFiltering: true, cellTemplate: \"
\" +\n \"\" + $filter('translate')('events.staff.pending') + \"\" +\n \"\" + $filter('translate')('events.staff.confirmed') + \"\" +\n \"
\", width: 90, filter: { selectOptions: $scope.ConfirmationStatusOptions, type: uiGridConstants.filter.SELECT },\n },\n {\n name: 'puesto', field: 'FK_events_staff_staff.FK_staff_staff_positions.name', displayName: $filter('translate')('staff.staff_position'), enableFiltering: true, enableHiding: false,\n cellTemplate: '
' +\n '{{grid.getCellValue(row, col)}}' +\n '
'\n },\n {\n name: 'name', field: 'FK_events_staff_staff.name', displayName: $filter('translate')('events.staff.name'), enableFiltering: true, enableHiding: false,\n cellTemplate: '
' +\n '{{grid.getCellValue(row, col)}}' +\n '
'\n },\n {\n name: 'surname', field: 'FK_events_staff_staff.surname', displayName: $filter('translate')('events.staff.surname'), enableFiltering: true,\n cellTemplate: '
' +\n '{{grid.getCellValue(row, col)}}' +\n '
'\n },\n {\n name: 'lastname', field: 'FK_events_staff_staff.lastname', displayName: $filter('translate')('events.staff.lastname'), enableFiltering: true,\n cellTemplate: '
' +\n '{{grid.getCellValue(row, col)}}' +\n '
'\n },\n {\n name: 'is_external', field: 'FK_events_staff_staff.is_external', displayName: $filter('translate')('events.staff.is_external'),\n filter: gridService.yesNoFilter('FK_events_staff_staff.is_external'), width: 100, enableFiltering: true,\n cellTemplate: gridService.yesNoTemplate('FK_events_staff_staff.is_external')\n },\n { name: 'provider_name', field: 'FK_events_staff_staff.provider_name', displayName: $filter('translate')('events.staff.provider_name'), enableFiltering: true },\n {\n name: ' ', width: 50, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false,\n cellTemplate: \"
\" +\n \"\" +\n \"\" +\n \"\" +\n \"
\"\n },\n ],\n getData: function (options) {\n options.event_id = $stateParams.id;\n return Restangular.all('eventsStaff').getList(options);\n }\n };\n } else { //Es template\n $scope.gridOptionEventStaff = {\n pdfTitle: $filter('translate')('events.staff.pdf_title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n //gridMenuShowHideColumns: false,\n enableSorting: true,\n paginationPageSizes: [20, 50, 100],\n paginationPageSize: 20,\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n {\n name: 'puesto', field: 'FK_events_staff_staff.FK_staff_staff_positions.name', displayName: $filter('translate')('staff.staff_position'), enableFiltering: true, enableHiding: false,\n cellTemplate: '
' +\n '{{grid.getCellValue(row, col)}}' +\n '
'\n },\n {\n name: 'name', field: 'FK_events_staff_staff.name', displayName: $filter('translate')('events.staff.name'), enableFiltering: true, enableHiding: false,\n cellTemplate: '
' +\n '{{grid.getCellValue(row, col)}}' +\n '
'\n },\n {\n name: 'surname', field: 'FK_events_staff_staff.surname', displayName: $filter('translate')('events.staff.surname'), enableFiltering: true,\n cellTemplate: '
' +\n '{{grid.getCellValue(row, col)}}' +\n '
'\n },\n {\n name: 'lastname', field: 'FK_events_staff_staff.lastname', displayName: $filter('translate')('events.staff.lastname'), enableFiltering: true,\n cellTemplate: '
' +\n '{{grid.getCellValue(row, col)}}' +\n '
'\n },\n {\n name: 'is_external', field: 'FK_events_staff_staff.is_external', displayName: $filter('translate')('events.staff.is_external'),\n filter: gridService.yesNoFilter('FK_events_staff_staff.is_external'), width: 100, enableFiltering: true,\n cellTemplate: gridService.yesNoTemplate('FK_events_staff_staff.is_external')\n },\n { name: 'provider_name', field: 'FK_events_staff_staff.provider_name', displayName: $filter('translate')('events.staff.provider_name'), enableFiltering: true },\n {\n name: ' ', width: 50, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false,\n cellTemplate: \"
\" +\n \"\" +\n \"\" +\n \"
\"\n },\n ],\n getData: function (options) {\n options.event_id = $stateParams.id;\n return Restangular.all('eventsStaff').getList(options);\n }\n };\n }\n\n $scope.editEventStaff = function (id) {\n Restangular.one('EventsStaff', id).get().then(function (eventStaff) {\n $scope.eventStaff = eventStaff;\n if ($scope.eventStaff.date_from != null)\n $scope.eventStaff.date_from = new Date($scope.eventStaff.date_from);\n if ($scope.eventStaff.date_to != null)\n $scope.eventStaff.date_to = new Date($scope.eventStaff.date_to);\n Restangular.all('BudgetGroups').getList().then(function (budgetGroups) {\n $scope.selectBudgetGroups = budgetGroups;\n var budgetGroupNull = {\n id: null,\n name: $filter('translate')('events.staff.no_budget_group')\n }\n $scope.selectBudgetGroups.unshift(budgetGroupNull);\n\n });\n });\n\n $scope.classSize = \"col-lg-8 col-md-8\";\n if ($window.pageYOffset > 200 && $rootScope.sizeLg) {\n $scope.styleMargin = $window.pageYOffset - 100;\n }\n }\n $scope.EventStaffHistoricMail = function (id, mail) {\n let options: any = {}\n options.module = \"staff/email\";\n options.code = id + \"\";\n options.event_id = event.id;\n options.to = mail;\n\n let $modalInstance = $uibModal.open({\n animation: true,\n template: HistoricMailsModalView,\n size: \"lg\",\n controller: \"historicMailsModalCtrl\",\n backdrop: 'static',\n\n keyboard: false,\n resolve: {\n options: function () {\n return options;\n },\n }\n });\n //Response del modal\n $modalInstance.result.then(function (data) {\n }, function () {\n if (!$scope.$$phase) $scope.$apply();\n });\n }\n\n /*\n * Si lleva el parámetro abro el elemento\n */\n if (angular.isDefined($stateParams.staffId) && $stateParams.staffId != null && $stateParams.staffId != \"\")\n $scope.editEventStaff($stateParams.staffId)\n\n $scope.closeStaffInfo = function () {\n $scope.classSize = \"col-lg-12 col-md-12\";\n $scope.eventStaff = null;\n }\n\n $scope.saveStaffInfo = function () {\n $scope.eventStaff.put().then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('events.staff.edit_success'));\n $scope.classSize = \"col-lg-12 col-md-12\";\n $scope.eventStaff = null;\n if (!$scope.is_template) $scope.$parent.loadInfo($stateParams.id);\n $scope.gridOptionEventStaff.gridApi.core.raise.itemChanged($scope);\n } else {\n $scope.errorMessage = result.message;\n }\n });\n };\n\n $scope.deleteDialog = function (id, name, surname) {\n $scope.id = id;\n let allName = name;\n if (isDefinedAndNotNull(surname))\n allName += \" \" + surname;\n modalService.confirm({\n title: $filter('translate')('events.staff.button_delete'),\n message: $filter('translate')('events.staff.delete_message') + \" \" + allName + \"?\",\n onAccept: function () {\n let send_notifications = false;\n if (angular.isDefined($scope.eventStaff) && $scope.eventStaff != null && $scope.eventStaff.send_notifications != null) {\n send_notifications = $scope.eventStaff.send_notifications;\n }\n Restangular.one('EventsStaff', id).remove({ send_notifications: send_notifications }).then(function () {\n $scope.gridOptionEventStaff.gridApi.core.raise.itemChanged($scope);\n toastr.success($filter('translate')('events.staff.delete_success'));\n $scope.closeStaffInfo();\n if (!$scope.is_template) $scope.$parent.loadInfo($stateParams.id);\n }, function (response) {\n $log.error(\"Error with status code\", response.status);\n });\n }\n });\n\n };\n\n $scope.searchMasiveDialog = function () {\n\n let $modalInstance = $uibModal.open({\n animation: true,\n template: SearchStaffModalView,\n size: \"lg\",\n controller: \"SearchStaffModalCtrl\"\n });\n //Response del modal\n $modalInstance.result.then(function (data) {\n $scope.gridOptionEventStaff.gridApi.core.raise.itemChanged($scope);\n if (!$scope.is_template) $scope.$parent.loadInfo($stateParams.id);\n if (!$scope.$$phase) $scope.$apply();\n\n }, function () {\n if (!$scope.$$phase) $scope.$apply();\n });\n\n }; //addPersonsPositionDialog\n\n\n /***********************************\n *** Enviar correo masivo\n ***********************************/\n $scope.modalSendMail = function () {\n\n var rows = $scope.gridOptionEventStaff.gridApi.selection.getSelectedRows();\n\n var eventStaffIds = _.chain(rows)\n .map(function (staff) { return staff.id; })\n .value();\n if (eventStaffIds.length > 0) {\n var params = {\n entity_type: \"events\",\n entity_type_id: $stateParams.id,\n event_staffs_ids: eventStaffIds,\n mail_account_id: event.mail_account_id,\n mail_account_reply: event.reply_to,\n documents: { for_event_staff: true }\n };\n notificationService.notificationMail({\n params: params,\n onAccept: function (data) {\n toastr.success($filter('translate')('notifications.sending_mail_success'));\n }\n });\n } else {\n modalService.message({\n title: \"Error\",\n message: $filter('translate')('events.staff.select_persons'),\n onAccept: function () { }\n });\n\n }\n }\n }])\n\n\n .controller(\"SearchStaffModalCtrl\", ['$scope', '$uibModalInstance', 'Restangular', 'modalService', '$filter', '$http', '$stateParams', '$q', 'gridService', '$uibModal', function ($scope, $uibModalInstance, Restangular, modalService, $filter, $http, $stateParams, $q, gridService, $uibModal) {\n\n $scope.showResults = false;\n $scope.search = {};\n\n //Custom function. return null values instead of undefined\n function isDefinedAndNotNull(val) {\n return angular.isDefined(val) && val !== null\n }\n\n Restangular.all('StaffPositions').getList().then(function (staff_positions) {\n\n $scope.selectPositions = staff_positions;\n });\n\n\n $scope.searchStaffOptions = function () {\n $scope.gridStaffOptionsSelected = [];\n $scope.showResults = true;\n\n if (angular.isDefined($scope.gridStaffOptions)) {\n $scope.gridStaffOptionsSelected = [];\n $scope.gridStaffOptions.loadData(false);\n } else {\n $scope.gridStaffOptions = {\n exporterMenuCsv: false,\n enableGridMenu: true,\n enableHiding: false,\n enableSelectionBatchEvent: false,//para obtener los seleccionados\n //gridMenuShowHideColumns: false,\n paginationPageSizes: [5, 10, 25],\n paginationPageSize: 5,\n onRegisterApi: function (gridApi) {\n $scope.gridStaffOptions.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableFiltering: false, enableHiding: false },\n { name: 'puesto', field: 'FK_staff_staff_positions.name', displayName: $filter('translate')('staff.staff_position'), enableFiltering: true },\n { name: 'name', displayName: $filter('translate')('staff.name'), enableFiltering: false, enableHiding: false },\n { name: 'surname', displayName: $filter('translate')('staff.surname'), enableFiltering: false },\n { name: 'lastname', displayName: $filter('translate')('staff.lastname'), enableFiltering: false },\n { name: 'provider_name', displayName: $filter('translate')('staff.provider_name'), enableFiltering: false },\n {\n name: 'is_external', displayName: $filter('translate')('events.staff.is_external'), width: 100,\n enableFiltering: false, enableHiding: false, cellTemplate: gridService.yesNoTemplate('is_external')\n }\n ],\n getData: function (options) {\n var deferred = $q.defer();\n options.event_id = $stateParams.id;\n options.staff_position_id = $scope.search.staff_position_id;\n options.name = $scope.search.name;\n options.surname = $scope.search.surname;\n options.provider_name = $scope.search.provider_name;\n if (isDefinedAndNotNull($scope.search.is_external) && $scope.search.is_external != \"\") {\n options.is_external = $scope.search.is_external == 1 ? true : false;\n if (!options.is_external) options.provider_name = null;\n }\n\n options.lastname = $scope.search.lastname;\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + 'EventsStaff/SearchStaffOptions',\n params: options\n\n }).then(function (results, status, headers, config) {\n var data = results.data.rows;\n data.totalRows = results.data.totalRows;\n $scope.totalRows = results.data.totalRows;\n deferred.resolve(data);\n });\n return deferred.promise;\n }\n }; //End gridoptions\n }\n }\n\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n $scope.addStaff = function () {\n //Devolvemos el control al principal\n var rows = $scope.gridStaffOptions.gridApi.selection.getSelectedRows();\n var ids = new Array();\n angular.forEach(rows, function (row) {\n ids.push(row.id);\n });\n if (ids.length > 0) {\n var staffOptions = { event_id: $stateParams.id, eventStaff: ids };\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + 'EventsStaff/AddStaffToEvent',\n params: staffOptions\n\n }).then(function (results, status, headers, config) {\n //Devolvemos el control al principal\n $uibModalInstance.close();\n });\n }\n\n };\n\n $scope.addNewStaff = function (is_external) {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: AddNewStaffModalView,\n size: \"lg\",\n controller: \"AddNewStaffModalCtrl\",\n resolve: {\n\n is_external: function () {\n return is_external;\n },\n }\n });\n }\n\n\n }])\n\n.controller(\"AddNewStaffModalCtrl\", ['$scope', '$uibModalInstance', 'is_external', function ($scope, $uibModalInstance, is_external) {\n\n $scope.is_external = is_external;\n\n $scope.callbackClose = function (mode) {\n $uibModalInstance.dismiss(mode);\n };\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n}])\n;\n","import toastr from \"toastr\";\n\nimport moment from \"moment\";\n\nimport _ from 'lodash';\n\nimport TaskModalView from \"./taskModal.html\";\nimport SelectEventModalView from \"./selectEventModal.html\";\nimport HistoricMailsModalView from \"../common/historicMails.html\";\n\nangular.module(\"events\")\n\n\n .filter('formatTaskUsers', function () {\n return function (taskUser) {\n var ret = \"\";\n ret += \"\" + taskUser.FK_events_tasks_users_users.name + \"\";\n if (taskUser.FK_events_tasks_users_users.mail != null) ret += \"
Enviar correo\";\n return ret;\n };\n })\n\n .controller(\"EventsTasksListCtrl\", ['LoginService', '$rootScope', '$scope', 'Restangular', 'gridService', 'modalService', '$uibModal', '$filter', '$translate', '$stateParams', '$state', 'uiGridConstants', '$timeout', '$q', '$http', 'uiGridTreeViewConstants', 'treeService', '$sce', '$location', '$window', '$log',\n function (LoginService, $rootScope, $scope, Restangular, gridService, modalService, $uibModal, $filter, $translate, $stateParams, $state, uiGridConstants, $timeout, $q, $http, uiGridTreeViewConstants, treeService, $sce, $location, $window, $log) {\n\n // Comprobamos si han venido a través de la url externa\n let task_id = $location.$$search.task_id;\n\n $log.debug(task_id);\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"EVENTS_TASKS_WRITE\");\n\n if (!Array.isArray($scope.$parent.menusItems)) {\n\n $state.go(\"events.edit\", { id: $stateParams.id });\n\n } else {\n let results = $scope.$parent.menusItems.filter(m => m.id === parseInt($stateParams.menu_item_id, 10));\n if (results.length > 0) {\n $scope.allowWrite &&= results[0].editable;\n } else {\n $scope.allowWrite = false;\n }\n }\n\n $scope.gantt_data = [];\n $scope.diagramView = false;\n\n $scope.showDiagram = function (val) {\n $scope.diagramView = val;\n }\n\n $scope.headersFormats = {\n 'year': 'YYYY',\n month: 'MM / YYYY',\n day: 'D',\n };\n\n //Solo se carga todo esto si estamos en tasks, así evitamos que lo incluyan los calendarios.\n if ($state.current.name == 'events.edit.tasks') {\n Restangular.one('Events', $stateParams.id).get().then(function (results) {\n $scope.event = results;\n $rootScope.breadcrumb = [\n { title: $filter('translate')('events.title'), url: \"events.list\" },\n { title: $scope.event.name, url: \"events.edit({ id: \" + $scope.event.id + \" })\" },\n { title: $filter('translate')('events.tasks.tasks') }\n ];\n $rootScope.title = $scope.event.name + \" - \" + $filter('translate')('events.tasks.tasks');\n });\n\n $scope.task = {};\n $scope.getToday = new Date();\n $scope.currentDate = \"line\";\n $scope.viewScale = \"day\";\n $scope.classSize = \"col-lg-12 col-md-12\";\n\n let isDefinedAndNotNull = function (val: any) {\n return angular.isDefined(val) && val !== null;\n }\n\n $scope.statusOptions = [];\n Restangular.all('TasksStatus').getList({ entity_type: \"events\" }).then(function (results) {\n angular.forEach(results, function (statusOption) {\n $scope.statusOptions.push({\n value: statusOption.id,\n label: statusOption.name\n });\n });\n\n });\n\n var initialized = false;\n\n $scope.pdfMaker = function () {\n //$('html, body').scrollTop(0);\n\n var container = angular.element('#gantt-container');\n\n $(\"#gantt-container #gantt-to-export .gantt-row-label\").css(\"font-size\", \"25px\").css(\"height\", \"50\").css(\"color\", \"#000000\");\n $(\"#gantt-container #gantt-to-export .gantt-row-height\").css(\"font-size\", \"24px\").css(\"height\", \"50\").css(\"color\", \"#000000\");\n $(\"#gantt-container #gantt-to-export .gantt-task .gantt-task-content > span > font\").hide()\n $(\"#gantt-container #gantt-to-export .gantt-header-row\").css(\"font-size\", \"25px\").css(\"height\", \"50\").css(\"color\", \"#000000\");\n $(\"#gantt-container #gantt-to-export .gantt-tree-handle-button\").hide();//ocultamos el desplegable.\n\n var widthShow = angular.element(\"#gantt-to-export .gantt-side\").width() + $(\"#gantt-container-shown .gantt-scrollable\")[0].scrollWidth;\n $log.debug(widthShow);\n widthShow = widthShow + 1000;\n $log.debug(widthShow);\n\n\n $(\"#gantt-container #gantt-to-export\").css(\"width\", widthShow); //Le pongo el tamaño de lo que se visualiza!!\n container.show();\n\n $log.debug(\"height: \" + angular.element('#gantt-container #gantt-to-export').height());\n\n // @ts-ignore\n html2canvas(document.querySelector(\"#gantt-to-export\")).then(canvas => {\n var data = canvas.toDataURL(\"image/png\", 1.0);\n var docDefinition = {\n pageSize: {\n width: widthShow + 500,\n height: angular.element('#gantt-to-export').height() + 1000//height\n },\n content: [{\n image: data,\n width: widthShow + 200\n }]\n };\n // @ts-ignore\n pdfMake.createPdf(docDefinition).download(\"gantt.pdf\");\n container.hide();\n\n });\n }\n\n $scope.is_template = $stateParams.is_template == 'true';\n $scope.gridOptionsEventTasks = {\n pdfTitle: function () { return $scope.event.name + \" - \" + $filter('translate')('events.tasks.pdf_title'); },\n exporterMenuCsv: true,\n enableGridMenu: true,\n showTreeExpandNoChildren: false,\n enableSorting: true,\n paginationPageSizes: [100, 200, 300],\n paginationPageSize: 100,\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n exporterFieldCallback: function (grid, row, col, value) {\n var valueReturned = \"\";\n if (col.name == 'users') {\n if (angular.isDefined(row.entity.FK_events_tasks_users_events_tasks) && row.entity.FK_events_tasks_users_events_tasks.length > 0) {\n row.entity.FK_events_tasks_users_events_tasks.forEach(function (item) {\n if (valueReturned != \"\" && item.FK_events_tasks_users_users.name != \"\") valueReturned += \", \";\n valueReturned += item.FK_events_tasks_users_users.name;\n });\n }\n return valueReturned;\n } else if (col.name == \"title\") {\n if (!row.entity.is_group) {\n return \"-- \" + value;\n } else {\n return value;\n }\n } else if (col.name == \"task_status_name\" && !row.entity.is_group) {\n\n if (angular.isDefined(row.entity.FK_events_tasks_tasks_status)) {\n if (row.entity.FK_events_tasks_tasks_status.code == \"COMPLETED\") {\n return $filter('translate')('events.tasks.completed');\n } else if (row.entity.FK_events_tasks_tasks_status.code == \"CANCELED\") {\n return $filter('translate')('events.tasks.canceled');\n } else if (row.entity.FK_events_tasks_tasks_status.code == \"IN_PROGRESS\") {\n return $filter('translate')('events.tasks.work_progress') + \" \" + row.entity.work_progress + \"%\";\n\n } else if (row.entity.FK_events_tasks_tasks_status.code == \"PENDING\") {\n\n return $filter('translate')('events.tasks.pending');\n } else {\n return \"\";\n }\n }\n return value;\n } else {\n return value\n }\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n {\n name: 'title', displayName: $filter('translate')('events.tasks.title_field'), enableFiltering: true, enableHiding: false, enableColumnMenu: false,\n minWidth: 150,\n cellTemplate: '',\n },\n {\n name: 'users', enableSorting: false, displayName: $filter('translate')('events.tasks.persons'), enableFiltering: true, enableColumnMenu: false,\n //cellTemplate: '
',\n cellTemplate: '
',\n maxWidth: 120, enableHiding: !$scope.is_template, visible: !$scope.is_template\n },\n { name: 'color', displayName: $filter('translate')('general.color'), enableFiltering: false, cellTemplate: gridService.colorTemplate(\"color\"), maxWidth: 50 },\n {\n name: 'date_from', displayName: $filter('translate')('events.date_from'), enableFiltering: false,\n cellTemplate: '
{{row.entity.date_from | toLocalDate | date:\"dd/MM/yy\"}}
' +\n '
{{row.entity.date_from | toLocalDate | date:\"dd/MM/yy HH:mm\"}}
',\n maxWidth: 105, minWidth: 75, enableHiding: !$scope.is_template, visible: !$scope.is_template,\n customFormatFn: function (value) {\n if (value != null) {\n var fecha = new Date(value);\n if (fecha.getHours() != 0) {\n return $filter('date')(fecha, 'dd/MM/yy HH:mm');\n } else {\n return $filter('date')(fecha, 'dd/MM/yy');\n }\n\n }\n return \"\";\n },\n },\n {\n name: 'date_to', displayName: $filter('translate')('events.date_to'), enableFiltering: false,\n cellTemplate: '
{{ row.entity.date_to | toLocalDate | date:\"dd/MM/yy\"}}
' +\n '
{{ row.entity.date_to | toLocalDate | date:\"dd/MM/yy HH:mm\"}}
',\n maxWidth: 105, minWidth: 75, enableHiding: !$scope.is_template, visible: !$scope.is_template,\n customFormatFn: function (value) {\n if (value != null) {\n var fecha = new Date(value);\n if (fecha.getHours() != 0) {\n return $filter('date')(fecha, 'dd/MM/yy HH:mm');\n } else {\n return $filter('date')(fecha, 'dd/MM/yy');\n }\n }\n return \"\";\n },\n enableColumnMenu: false\n },\n {\n name: 'task_status_name', enableFiltering: true, filter: { selectOptions: $scope.statusOptions, type: uiGridConstants.filter.SELECT },\n displayName: $filter('translate')('events.tasks.task_status'), cellTemplate: '' +\n '' +\n '' +\n '
' +\n '
' +\n '
',\n width: 40, enableHiding: !$scope.is_template, visible: !$scope.is_template,\n enableColumnMenu: false\n },\n {\n name: ' ', width: 40, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionIconTemplate([\n { title: \"\", action: ' ng-click=\"grid.appScope.duplicateEventTask(row.entity.id)\" ng-if=\"grid.appScope.allowWrite && row.entity.id != null && row.entity.is_group\" style=\"padding: 1px 0px\"', cssIconClass: \"fa fa-copy\" },\n { title: \"\", action: ' ng-click=\"grid.appScope.addEventTask(row.entity.id)\" ng-if=\"grid.appScope.allowWrite && row.entity.id != null\" style=\"padding: 1px 0px\"', cssIconClass: \"fa fa-edit\" },\n { title: \"\", action: 'ng-click=\"grid.appScope.deleteDialog(row.entity.id,row.entity.title);\" ng-if=\"grid.appScope.allowWrite && row.entity.id != null\" style=\"padding: 1px 0px\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n var deferred = $q.defer();\n\n options.dateFrom1 = $scope.dateFrom1;\n options.dateFrom2 = $scope.dateFrom2;\n options.dateTo1 = $scope.dateTo1;\n options.dateTo2 = $scope.dateTo2;\n options.event_id = $stateParams.id;\n Restangular.all('EventsTasks').getList(options).then(function (result) {\n let userIds = new Array();\n $scope.gantt_data = [];\n var no_group = {\n id: null,\n title: $filter('translate')('events.tasks.without_group'),\n event_task_id: null,\n is_group: true\n };\n\n _.every(result, function (event_task) {\n //Creamos el grupo \"Sin grupo si alguien no tiene grupo y no ha sido creado\"\n if (!event_task.is_group && event_task.event_task_id == null) {\n result.unshift(no_group);\n return false;\n }\n\n return true;\n });\n\n //GANT\n if (!$scope.is_template) {\n angular.forEach(result, function (event_task) {\n\n if (event_task.is_group) {\n $scope.gantt_data.push({\n name: event_task.title,\n color: \"#bab9b5\",//\"#ecba52\",\n height: \"2em\"\n });\n if(event_task.color != null) $scope.gantt_data[$scope.gantt_data.length - 1].color = event_task.color;\n if (event_task.id != null) {\n angular.forEach(result, function (event_task_2) {\n\n if (!event_task_2.is_group && (event_task_2.event_task_id == event_task.id) && event_task_2.date_from != null) {\n addToGantt(event_task, event_task_2);\n }\n });\n }\n\n } else if (event_task.event_task_id == null && event_task.date_from != null) {\n addToGantt(no_group, event_task);\n }\n });\n }\n var treeEventTasks = [];\n var data = treeService.eventTasksTree(result, null, treeEventTasks);\n var contParents = 0;\n angular.forEach(data, function (eventTask) {\n if (eventTask.is_group) {\n contParents = contParents + 1;\n }\n });\n data.totalRows = contParents;\n\n $timeout(function () {\n $scope.gridOptionsEventTasks.gridApi.treeBase.expandAllRows();\n //initialized = true;\n }, 1500);\n deferred.resolve(data);\n });\n return deferred.promise;\n\n }\n };\n\n\n var addToGantt = function (event_task, event_task_2) {\n $log.debug(event_task_2)\n if (event_task_2.date_to == null || typeof event_task_2.date_to == \"undefined\") event_task_2.date_to = moment(event_task_2.date_from).add(1, 'days');\n var contentTooltip = \"\";\n contentTooltip += \"\" + event_task_2.title + \"
\"\n contentTooltip += \"Desde: \" + moment(event_task_2.date_from).format(\"DD/MM/YYYY HH:mm\") + \"
\";\n contentTooltip += \"Hasta: \" + moment(event_task_2.date_to).format(\"DD/MM/YYYY HH:mm\") + \"
\"\n contentTooltip += \"Personas: \";\n angular.forEach(event_task_2.FK_events_tasks_users_events_tasks, function (user) {\n contentTooltip += user.FK_events_tasks_users_users.name + \", \";\n });\n contentTooltip = contentTooltip.slice(0, -2);\n\n var color = \"\";\n if (event_task_2.FK_events_tasks_tasks_status.code == 'CANCELED') color = \"#ed5565\";\n if (event_task_2.FK_events_tasks_tasks_status.code == 'COMPLETED') color = \"#1ab394\";\n if (event_task_2.FK_events_tasks_tasks_status.code == 'PENDING' || event_task_2.FK_events_tasks_tasks_status.code == 'IN_PROGRESS') color = \"#f8ac59\";\n\n if(event_task_2.color != null) color = event_task_2.color;\n \n $scope.gantt_data.push({\n name: event_task_2.title,\n parent: event_task.title,\n tasks: [{\n task_id: event_task_2.id,\n name: event_task_2.title,\n color: color,\n progress: (event_task_2.FK_events_tasks_tasks_status.code == 'IN_PROGRESS') ? event_task_2.work_progress : \"\",\n content: \"\" + event_task_2.title + \"\",\n contentTooltip: $sce.trustAsHtml(contentTooltip),\n from: moment(event_task_2.date_from),\n to: moment(event_task_2.date_to)\n }]\n });\n }\n\n //API gantt\n $scope.registerApi = function (api) {\n $log.debug(\"registerApi\");\n $scope.api = api;\n api.directives.on.new($scope, function (dName, dScope, dElement, dAttrs, dController) {\n if (dName === 'ganttTask') {\n dElement.bind('click', function (event) {\n $log.debug(\"entra aqui en task-list.js linea324\");\n $scope.addEventTask(dScope.task.model.task_id);\n\n });\n }\n });\n };\n\n }//solo si estamos en el current.name de tasklist.\n\n $scope.addEventTask = function (id) {\n\n let $modalInstance = $uibModal.open({\n animation: true,\n template: TaskModalView,\n controller: \"EventTaskModalCtrl\",\n size: 'lg',\n resolve: {\n event_task_id: function () {\n return id;\n },\n event_id: function () {\n return $stateParams.id;\n },\n type: function () {\n return \"task\";\n }\n }\n\n });\n\n //Retorno de los datos desde el modal.\n $modalInstance.result.then(function (resultModal) {\n if ($state.current.name == 'events.edit.tasks') {\n if (angular.isDefined($scope.gridOptionsEventTasks.gridApi)) {\n $scope.gridOptionsEventTasks.gridApi.core.raise.itemChanged($scope);\n $scope.gridOptionsEventTasks.gridApi.treeBase.expandAllRows();\n }\n if (!$scope.is_template) $scope.$parent.loadInfo($stateParams.id);\n }\n\n if (typeof $scope.refetchEvents == 'function') $scope.refetchEvents();\n\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n // $scope.identity = {};\n });\n\n };\n\n \n if (task_id != null) {\n $scope.addEventTask(task_id);\n }\n \n \n\n $scope.duplicateEventTask = function (id) {\n\n let $modalInstance = $uibModal.open({\n animation: true,\n template: SelectEventModalView,\n controller: \"EventSelectModalCtrl\",\n size: 'lg'\n });\n\n $modalInstance.result.then(function (event) {\n Restangular.all('EventsTaks').customPOST({}, \"DuplicateTask\", { id: id, event_id: event.event.id }).then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('events.tasks.create_success'));\n $scope.gridOptionsEventTasks.loadData();\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n // $scope.identity = {};\n });\n\n }\n\n /*\n * Si lleva el parámetro abro el elemento\n */\n if (angular.isDefined($stateParams.taskId) && $stateParams.taskId != null && $stateParams.taskId != \"\")\n $scope.addEventTask($stateParams.taskId)\n\n\n $scope.addEventTaskGroup = function (id) {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: TaskModalView,\n controller: \"EventTaskModalCtrl\",\n size: 'lg',\n resolve: {\n event_task_id: function () {\n return id;\n },\n event_id: function () {\n return $stateParams.id;\n },\n type: function () {\n return \"group\";\n }\n }\n\n });\n\n //Retorno de los datos desde el modal.\n $modalInstance.result.then(function (resultModal) {\n if (angular.isDefined($scope.gridOptionsEventTasks.gridApi)) {\n $scope.gridOptionsEventTasks.gridApi.core.raise.itemChanged($scope);\n $scope.gridOptionsEventTasks.gridApi.treeBase.expandAllRows();\n }\n if (typeof $scope.refetchEvents == 'function') $scope.refetchEvents();\n if (!$scope.is_template) $scope.$parent.loadInfo($stateParams.id);\n\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n // $scope.identity = {};\n });\n\n };\n\n\n //Delete desde el listado\n $scope.deleteDialog = function (id, title) {\n\n modalService.confirm({\n title: $filter('translate')('events.tasks.button_delete'),\n message: $filter('translate')('events.tasks.delete_message') + \" \" + title + \"?\",\n onAccept: function () {\n Restangular.one('EventsTasks', id).remove().then(function () {\n toastr.success($filter('translate')('events.tasks.deleted_success'));\n if (angular.isDefined($scope.gridOptionsEventTasks.gridApi)) {\n $scope.gridOptionsEventTasks.gridApi.core.raise.itemChanged($scope);\n $scope.gridOptionsEventTasks.gridApi.treeBase.expandAllRows();\n // $scope.gridOptionsEventTasks.loadData();\n\n }\n if (!$scope.is_template) $scope.$parent.loadInfo($stateParams.id);\n }, function (response) {\n $log.error(\"Error with status code\", response.status);\n alert(\"Error al borrar\")\n });\n }\n });\n\n };\n\n }])\n\n.controller(\"EventTaskModalCtrl\", ['LoginService', '$scope', '$uibModalInstance', 'Restangular', 'modalService', '$filter', '$http', '$stateParams', '$q', 'event_task_id', 'event_id', 'type', 'uiSliderConfig', '$uibModal', '$log',\n function (LoginService, $scope, $uibModalInstance, Restangular, modalService, $filter, $http, $stateParams, $q, event_task_id, event_id, type, uiSliderConfig, $uibModal, $log) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"EVENTS_TASKS_WRITE\");\n $scope.send_notifications = false;\n $scope.eventTask = {};\n $scope.selectedUsersIdS = [];\n $scope.type = type;\n $scope.selectEventTaskGroups = [];\n $scope.borderRight = {\"border-right\":\"none\"};\n $scope.widthGanttContainer = \"10000px\"; //var widthShow = angular.element(\"#gantt-container-shown .gantt-side\").width() + angular.element('#gantt-container-shown .gantt-scrollable-header').width();\n\n let changedFields = [];\n\n\n $scope.GanttContainerStyle = {\n \"width\": \"4000px\"\n }\n\n $scope.is_template = $stateParams.is_template == 'true';\n\n if (angular.isUndefined(event_task_id)) {\n $scope.eventTask.event_id = event_id;\n $scope.eventTask.all_day = true;\n if (!$scope.is_template) {\n $scope.eventTask.work_progress = 0;\n }\n $scope.eventTask.event_task_id = 0;\n\n Restangular.all('Users').getList().then(function (results) {\n $scope.selectUsers = results;\n });\n\n if ($scope.type == \"task\") {\n let params = {\n event_id: event_id,\n is_group: true\n }\n $log.debug(params)\n Restangular.all('EventsTasks').getList(params).then(function (results) {\n $scope.selectEventTaskGroups = results;\n var withoutGroup = {\n id: 0,\n title: $filter('translate')('events.tasks.without_group'),\n is_group: true\n };\n $scope.selectEventTaskGroups.unshift(withoutGroup);\n if (!$scope.$$phase) $scope.$apply();\n });\n }\n }\n else {\n Restangular.one('EventsTasks', event_task_id).get().then(function (results) {\n $scope.eventTask = results;\n\n if ($scope.eventTask.event_task_id == null) $scope.eventTask.event_task_id = 0;\n\n if ($scope.type == \"task\") {\n let params = {\n event_id: $scope.eventTask.event_id,\n is_group: true\n }\n $log.debug(params)\n Restangular.all('EventsTasks').getList(params).then(function (results) {\n $scope.selectEventTaskGroups = results;\n var withoutGroup = {\n id: 0,\n title: $filter('translate')('events.tasks.without_group'),\n is_group: true\n };\n $scope.selectEventTaskGroups.unshift(withoutGroup);\n if (!$scope.$$phase) $scope.$apply();\n });\n }\n\n if (!$scope.eventTask.is_group) {\n $scope.type = \"task\";\n $scope.newActivity = \"\";\n $scope.borderRight = { \"border-right\": \"1px solid #e7eaec\" };\n Restangular.all('EventsTasksActivities').getList({ event_task_id: $scope.eventTask.id }).then(function (activities) {\n $scope.activities = activities;\n })\n } else {\n $scope.type = \"group\";\n }\n if (!$scope.is_template) {\n if ($scope.eventTask.date_from != null) {\n $scope.eventTask.date_from = new Date($scope.eventTask.date_from);\n }\n if ($scope.eventTask.date_to != null) {\n $scope.eventTask.date_to = new Date($scope.eventTask.date_to);\n }\n angular.forEach($scope.eventTask.FK_events_tasks_users_events_tasks, function (taskUser) {\n $scope.selectedUsersIdS.push(taskUser.FK_events_tasks_users_users.id);\n });\n Restangular.all('Users').getList().then(function (results) {\n $scope.selectUsers = results;\n $scope.eventTask.selected_users = [];\n angular.forEach($scope.selectUsers, function (user) {\n if ($scope.selectedUsersIdS.indexOf(user.id) != -1) {\n $scope.eventTask.selected_users.push(user);\n }\n });\n });\n }\n });\n }\n\n $scope.slider = {\n options: {\n min: 0,\n max: 100,\n range: 'min',\n }\n }\n\n $scope.setPrice = function (price) {\n $scope.price = price;\n }\n\n Restangular.all('TasksTypes').getList({ entity_type: \"events\" }).then(function (results) {\n $scope.selectTaskTypes = results;\n });\n\n Restangular.all('TasksStatus').getList({ entity_type: \"events\" }).then(function (results) {\n $scope.selectTaskStatus = results;\n if (angular.isUndefined($scope.eventTask.id)) {\n $scope.eventTask.FK_events_tasks_tasks_status = $scope.selectTaskStatus[0];\n }\n });\n\n $scope.AddChangedField = function (field) {\n $log.debug(\"Entramos en AddChangedField:\")\n let fieldName = $filter('translate')(field)\n if (!changedFields.includes(fieldName)) {\n changedFields.push(fieldName)\n\n }\n };\n\n $scope.saveEventTask = function () {\n\n // PROBATINA Comprobar que se actualizan los valores \n $log.debug($scope.eventTask);\n $log.debug(\"probamos filtro\")\n $log.debug($filter('translate')('events.tasks.without_group'));\n //\n\n if ($scope.eventTask.event_task_id == 0) $scope.eventTask.event_task_id = null;\n $scope.eventTask.FK_events_tasks_users_events_tasks = [];\n if ($scope.type == \"group\") {\n $scope.eventTask.is_group = 1;\n } else {\n $scope.eventTask.task_type_id = $scope.eventTask.FK_events_tasks_tasks_types.id;\n $scope.eventTask.task_status_id = $scope.eventTask.FK_events_tasks_tasks_status.id;\n angular.forEach($scope.eventTask.selected_users, function (user) {\n $scope.eventTask.FK_events_tasks_users_events_tasks.push({\n event_task_id: $scope.eventTask.id,\n user_id: user.id\n })\n })\n }\n if ($scope.eventTask.date_from > $scope.eventTask.date_to && $scope.eventTask.date_to != null && typeof ($scope.eventTask.date_to) !== \"undefined\") {\n let hour = $scope.eventTask.date_to.getHours();\n let minutes = $scope.eventTask.date_to.getMinutes();\n $log.debug(hour + \" \" + minutes);\n\n $scope.eventTask.date_to = angular.copy($scope.eventTask.date_from);\n $scope.eventTask.date_to.setHours(hour);\n $scope.eventTask.date_to.setMinutes(minutes);\n }\n\n $log.debug($scope.eventTask);\n\n if (angular.isDefined($scope.eventTask.id)) {\n $scope.eventTask.put().then(function (result) {\n if (angular.isDefined(result.id)) {\n $uibModalInstance.close();\n toastr.success($filter('translate')('events.tasks.edit_success'));\n // if ($scope.send_notifications) sendNotification($scope.eventTask.id);\n }\n });\n } else {\n Restangular.all('eventsTasks').post($scope.eventTask).then(function (result) {\n if (angular.isDefined(result.id)) {\n $uibModalInstance.close();\n toastr.success($filter('translate')('events.tasks.add_success'));\n // if ($scope.send_notifications) sendNotification(result.id);\n\n }\n });\n }\n }\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n //Delete desde el popup\n $scope.checkDeleteEventTask = function () {\n modalService.confirm({\n title: $filter('translate')('events.tasks.button_delete'),\n message: $filter('translate')('events.tasks.delete_message') + \" \" + $scope.eventTask.title + \"?\",\n onAccept: function () {\n Restangular.one('EventsTasks', $scope.eventTask.id).remove({send_notifications : $scope.eventTask.send_notifications}).then(function () {\n //$scope.eventTask.remove().then(function () {\n $uibModalInstance.close();\n if (typeof $scope.refetchEvents == 'function') $scope.refetchEvents();\n // if ($scope.send_notifications) sendNotification($scope.eventTask.id);\n });\n }\n });\n };\n\n // Gestión de actividades sobre una tarea\n $scope.addActivity = function (newActivity) {\n\n $scope.activity = {\n title: newActivity,\n event_task_id: $scope.eventTask.id\n }\n Restangular.all('EventsTasksActivities').post($scope.activity).then(function (result) {\n $scope.activities = result;\n delete $scope.newActivity;\n });\n }\n\n $scope.deleteActivity = function (id) {\n Restangular.one('EventsTasksActivities', id).remove().then(function (result) {\n $scope.activities = result;\n });\n }\n\n $scope.showHistory = function (id) {\n let options: any = {}\n options.module = \"task/notify\";\n options.code = id + \"\";\n options.event_id = $stateParams.id;\n\n\n let $modalInstance = $uibModal.open({\n animation: true,\n template: HistoricMailsModalView,\n size: \"lg\",\n controller: \"historicMailsModalCtrl\",\n backdrop: 'static',\n keyboard: false,\n resolve: {\n options: function () {\n return options;\n },\n }\n });\n }\n\n}])\n\n.controller(\"EventSelectModalCtrl\", ['LoginService', '$scope', '$uibModalInstance', 'Restangular', 'modalService', '$filter', '$http', '$stateParams', '$q', 'uiSliderConfig', '$uibModal', function (LoginService, $scope, $uibModalInstance, Restangular, modalService, $filter, $http, $stateParams, $q, event_task_id, event_id, type, uiSliderConfig, $uibModal) {\n\n $scope.selectEvents = [];\n $scope.event = {};\n\n Restangular.all('Events/AllEvents').getList({}).then(function (results) {\n $scope.selectEvents = results;\n });\n\n $scope.saveSelectEvent = function () {\n $uibModalInstance.close($scope.event);\n }\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n}]);\n\n;\n","angular.module(\"events\")\n .controller(\"EventsWorkTeamListCtrl\", ['$http', 'event', '$rootScope', '$scope', 'Restangular', 'notificationService', 'modalService', '$uibModal', '$filter', '$translate', '$stateParams', '$state', 'LoginService', '$log',\n function ($http, event, $rootScope, $scope, Restangular, notificationService, modalService, $uibModal, $filter, $translate, $stateParams, $state, LoginService, $log) {\n\n $log.debug($stateParams.edit);\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"EVENTS_WORK_TEAM_WRITE\");\n $scope.allowReadUsers = LoginService.permissionExist(\"USERS_READ\");\n if(!Array.isArray($scope.$parent.menusItems)) {\n $state.go(\"events.edit\", { id: $stateParams.id });\n } else {\n let results = $scope.$parent.menusItems.filter(m => m.id === parseInt($stateParams.menu_item_id, 10));\n if(results.length > 0) {\n $scope.allowWrite &&= results[0].editable;\n } else {\n $scope.allowWrite = false;\n }\n }\n $scope.is_template = $stateParams.is_template == 'true';\n var eventUsersIds = [];\n $scope.work_team = {};\n $scope.addresses = [];\n $scope.search = {};\n $scope.classSize = \"col-lg-12 col-md-12\";\n function isDefinedAndNotNull(val) {\n return angular.isDefined(val) && val !== null\n }\n\n $rootScope.title = event.name + \" - \" +$filter('translate')('events.work_team.work_team');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('events.title'), url: \"events.list\" },\n { title: event.name, url: \"events.edit({ id: \" + event.id + \" })\" },\n { title: $filter('translate')('events.work_team.work_team') }\n ];\n\n $scope.loadData = function () {\n Restangular.all('EventsUsers').getList({ event_id: $stateParams.id }).then(function (results) {\n $scope.eventUsers = results;\n var direcciones = \"\";\n\n angular.forEach($scope.eventUsers, function (eventUser) {\n if (eventUser.FK_events_users_users.mail != null) {\n $scope.addresses.push(eventUser.FK_events_users_users.mail);\n }\n if (eventUsersIds.indexOf(eventUser.user_id) < 0) {\n eventUsersIds.push(eventUser.user_id);\n }\n });\n\n if (eventUsersIds.length > 0) {\n $http({\n method: 'post',\n url: (window as any).CONFIG.api_url + 'Users/ImagesSmall',\n params: { ids: eventUsersIds }\n }).then(function (resultsImg, status, headers, config) {\n angular.forEach(results, function (event_user) {\n\n for (var i = 0; i < resultsImg.data.length; i++) {\n if (event_user.user_id == resultsImg.data[i].user_id) {\n if (angular.isDefined(event_user.FK_events_users_users)) {\n event_user.FK_events_users_users.FK_users_images = {};\n event_user.FK_events_users_users.FK_users_images.image = resultsImg.data[i].image_small;\n }\n break;\n }\n }\n });\n });\n }\n });\n }\n\n $scope.loadData();\n\n Restangular.all('Users').getList().then(function (users) {\n $scope.selectUsers = users;\n });\n\n $scope.searchFilter = function (value) {\n\n var index = $.inArray(value.FK_events_users_users.mail, $scope.addresses);\n if (value.FK_events_users_users.mail != null && index > -1) {\n $scope.addresses.splice(index, 1);\n }\n if (angular.isUndefined($scope.search.value) ||\n value.FK_events_users_users.name.toLowerCase().indexOf($scope.search.value.toLowerCase()) > -1 ||\n value.FK_events_users_events_users_profiles.name.toLowerCase().indexOf($scope.search.value.toLowerCase()) > -1) {\n if (value.FK_events_users_users.mail != null) $scope.addresses.push(value.FK_events_users_users.mail);\n return true;\n } else {\n return false;\n }\n }\n\n $scope.filterUsers = function (value) {\n if (angular.isDefined(eventUsersIds) && eventUsersIds.indexOf(value.id) == -1) {\n return true;\n } else {\n return false;\n }\n }\n\n\n Restangular.all('EventsUsersProfiles').getList().then(function (profiles) {\n $scope.selectProfiles = profiles;\n });\n\n $scope.addEventUser = function (frmWorkTeam) {\n\n var index = eventUsersIds.indexOf($scope.work_team.user.id);\n if (index == -1) {\n\n eventUsersIds.push($scope.work_team.user.id);\n let eventUser: any = {};\n eventUser.event_id = $stateParams.id;\n eventUser.FK_events_users_users = $scope.work_team.user;\n eventUser.user_id = $scope.work_team.user.id;\n\n eventUser.FK_events_users_events_users_profiles = $scope.work_team.profile;\n eventUser.event_user_profile_id = $scope.work_team.profile.id\n $scope.eventUsers.push(eventUser);\n }\n\n $scope.work_team.user = \"\";\n $scope.work_team.profile = \"\";\n\n\n };\n\n $scope.deleteEventUser = function (id,mail) {\n\n angular.forEach($scope.eventUsers, function (eventUser, idx) {\n if (eventUser.user_id == id) {\n $scope.eventUsers.splice(idx, 1);\n }\n })\n\n var index = eventUsersIds.indexOf(id);\n eventUsersIds.splice(index, 1);\n index = $.inArray(mail, $scope.addresses);\n if (mail != null && index > -1) {\n $scope.addresses.splice(index, 1);\n }\n }\n\n $scope.saveEventUser = function () {\n $scope.eventUserContainer = {};\n $scope.work_team;\n $scope.eventUserContainer.event_id = $stateParams.id;\n if ($scope.eventUsers.totalRows == 0) {\n $scope.eventUsers.push({\n user_id: $scope.work_team.user.id,\n event_id: $stateParams.id,\n event_user_profile_id: $scope.work_team.profile.id\n })\n }\n $scope.eventUserContainer.events_users = $scope.eventUsers;\n Restangular.all('EventsUsers').post($scope.eventUserContainer).then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('events.edit_success'));\n if ($scope.is_template) $state.go(\"events.list\", { is_template: true });\n $scope.loadData();\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n\n $scope.modalSendMail = function (mail_to) {\n var params = {\n entity_type: \"events\",\n entity_type_id: $stateParams.id,\n users_ids: [mail_to],\n mail_account_id: event.mail_account_id,\n mail_account_reply: event.reply_to,\n documents: { for_event_staff: true }\n };\n notificationService.notificationMail({\n params: params,\n onAccept: function (data) {\n toastr.success($filter('translate')('notifications.sending_mail_success'));\n }\n });\n }\n\n\n $scope.sendNotifications = function () {\n\n if (eventUsersIds.length == 0) {\n modalService.message({\n title: \"Error\",\n message: $filter('translate')('events.guests.select_persons'),\n onAccept: function () { }\n });\n } else {\n if (event.mail_account_id == null || event.mail_account_id == 0) {\n modalService.message({\n title: \"Error\",\n message: $filter('translate')('events.select_mail_from_address'),\n onAccept: function () { }\n });\n } else {\n var params = {\n entity_type: \"events\",\n entity_type_id: $stateParams.id,\n users_ids: eventUsersIds,\n mail_account_id: event.mail_account_id,\n mail_account_reply: event.reply_to,\n documents: { for_event_staff: true }\n };\n notificationService.notificationMail({\n params: params,\n onAccept: function (data) {\n toastr.success($filter('translate')('notifications.sending_mail_success'));\n }\n });\n }\n }\n\n }\n\n\n }])\n\n;\n","import './events_types';\nimport './events_types-list';\nimport './events_types-edit'; ","import IconPicker from '../../scripts/iconpicker-1.5.0.js';\n\nangular.module(\"events_types\")\n\n .controller(\"EventsTypesEditCtrl\", ['LoginService', '$scope', '$rootScope', '$state', '$stateParams', 'Restangular', 'gridService', '$filter', '$translate', 'modalService', '$uibModal',\n function (LoginService, $scope, $rootScope, $state, $stateParams, Restangular, gridService, $filter, $translate, modalService, $uibModal) {\n \n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"EVENTS_TYPES_WRITE\");\n $rootScope.title = $filter('translate')('events_types.title');\n\n $scope.event_type = {};\n\n if (angular.isUndefined($stateParams.id) || $stateParams.id == \"\") {\n \n $rootScope.breadcrumb = [\n { title: $filter('translate')('events_types.title'), url: \"events_types.list\" },\n { title: $filter('translate')('events_types.title_add') },\n ];\n \n } else {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('events_types.title'), url: \"events_types.list\" },\n { title: $filter('translate')('events_types.title_edit') },\n ];\n\n Restangular.one('EventsTypes', $stateParams.id).get().then(function (result) {\n \n $scope.event_type = result; \n });\n }\n\n IconPicker.Init({\n // Required: You have to set the path of IconPicker JSON file to \"jsonUrl\" option. e.g. '/content/plugins/IconPicker/dist/iconpicker-1.5.0.json'\n jsonUrl: '/assets/iconpicker-1.5.0.json',\n // Optional: Change the buttons or search placeholder text according to the language.\n searchPlaceholder: 'Search Icon',\n showAllButton: 'Show All',\n cancelButton: 'Cancel',\n noResultsFound: 'No results found.', // v1.5.0 and the next versions\n borderRadius: '20px', // v1.5.0 and the next versions\n });\n\n IconPicker.Run('#GetIconPicker', function () {\n // ng-bind no funciona para asignar el icono porque no detecta el cambio que hacemos con el IconPicker, así que hay que hacerlo a pelo.\n let icon = document.querySelector(\"#IconPreview\").getAttribute(\"class\");\n icon = icon.substring(icon.indexOf('-') + 1);\n $scope.event_type.icon = icon;\n\n });\n\n \n $scope.saveEventUserProfile = function () { \n if (angular.isDefined($scope.event_type.id)) {\n $scope.event_type.put().then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('events_types.edit_success')); \n $state.go(\"events_types.list\");\n } else {\n $scope.errorMessage = result.message;\n }\n });\n } else {\n Restangular.all('EventsTypes').post($scope.event_type).then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('events_types.save_success'));\n $state.go(\"events_types.list\");\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n }\n\n $scope.checkDelete = function () {\n modalService.confirm({\n title: $filter('translate')('events_types.button_delete'),\n message: $filter('translate')('events_types.delete_message') + \" \" + $scope.event_type.name + \"?\",\n onAccept: function () {\n $scope.event_type.remove().then(function () {\n toastr.success($filter('translate')('events_types.deleted_success'));\n $state.go(\"events_types.list\");\n });\n }\n });\n }; \n\n}])\n\n;\n\n","angular.module(\"events_types\")\n\n .controller(\"EventsTypesListCtrl\", ['LoginService', '$rootScope', '$scope', '$http', '$interval', '$q', 'i18nService', 'Restangular', 'gridService', 'modalService', '$uibModal', '$filter', '$translate','$state',\n function (LoginService, $rootScope, $scope, $http, $interval, $q, i18nService, Restangular, gridService, modalService, $uibModal, $filter, $translate, $state) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"EVENTS_TYPES_WRITE\");\n\n $rootScope.title = $filter('translate')('events_types.title');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('events_types.title') }\n ];\n\n $scope.gridOptions = {\n pdfTitle: $filter('translate')('events_types.pdf_title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n enableSorting: true, \n paginationPageSizes: [20, 40, 60],\n paginationPageSize: 20,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n { name: 'name', displayName: $filter('translate')('events_types.name'), enableFiltering: true, enableHiding: false },\n {\n name: 'icon', displayName: $filter('translate')('cms.icon'), cellTemplate: '
'+\n '' +\n '
', width: 80, enableFiltering: false, enableHiding: false\n },\n { name: 'color', displayName: $filter('translate')('general.color'), enableFiltering: false, cellTemplate: gridService.colorTemplate(\"color\"), maxWidth: 50 },\n {\n name: 'is_parent', displayName: $filter('translate')('event_type.is_parent'), width: 100, enableFiltering: true, enableHiding: false, visible: true,\n cellTemplate: `
`,\n },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('events_types.button_edit'), action: 'ui-sref=\"events_types.edit({id:row.entity.id})\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('events_types.button_delete'), action: 'ng-click=\"grid.appScope.deleteDialog(row.entity.id,row.entity.name);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) { \n return Restangular.all('EventsTypes').getList(options);\n }\n };\n\n $scope.goToEdit = function (rowEntity) {\n $state.go(\"events_types.edit\", { id: rowEntity.id });\n }\n\n\n $scope.deleteDialog = function (id, name) {\n $scope.id = id;\n $scope.name = name;\n modalService.confirm({\n title: $filter('translate')('events_types.button_delete'),\n message: $filter('translate')('events_types.delete_message') + \" \" + $scope.name + \"?\",\n onAccept: function () {\n Restangular.one('EventsTypes', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('events_types.deleted_success'));\n $scope.gridOptions.gridApi.core.raise.itemDeleted($scope);\n \n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n });\n\n };\n \n }])\n\n;","import BreadcrumbView from \"../common/breadcrumb/breadcrumb.html\";\nimport EventsTypesListView from \"./events_types-list.html\";\nimport EventsTypesEditView from \"./events_types-edit.html\";\n\n\nangular.module(\"events_types\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('events_types', {\n url: \"/events_types\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n })\n\n .state('events_types.list', {\n url: \"/list\",\n controller: \"EventsTypesListCtrl\",\n template: EventsTypesListView,\n requiredPermission: [\"EVENTS_TYPES_READ\"]\n }) \n .state('events_types.edit', {\n url: \"/edit/:id\",\n controller: \"EventsTypesEditCtrl\",\n template: EventsTypesEditView,\n requiredPermission: [\"EVENTS_TYPES_READ\"]\n })\n }])\n;","import './events_users_profiles';\nimport './events_users_profiles-list';\nimport './events_users_profiles-edit'; ","angular.module(\"events_users_profiles\")\n\n .controller(\"EventsUsersProfilesEditCtrl\", ['LoginService', '$scope', '$rootScope', '$state', '$stateParams', 'Restangular', 'gridService', '$filter', '$translate', 'modalService', '$q', 'treeService', '$timeout', '$uibModal', function (LoginService, $scope, $rootScope, $state, $stateParams, Restangular, gridService, $filter, $translate, modalService, $q, treeService, $timeout, $uibModal) {\n \n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"EVENTS_USERS_PROFILES_WRITE\");\n $rootScope.title = $filter('translate')('events_users_profiles.title');\n\n $scope.event_user_profile = {};\n $scope.menusItems = []\n $scope.view = [];\n $scope.edit = [];\n\n if (angular.isUndefined($stateParams.id) || $stateParams.id == \"\") {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('events_users_profiles.title'), url: \"events_users_profiles.list\" },\n { title: $filter('translate')('events_users_profiles.title_add') },\n ];\n } else {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('events_users_profiles.title'), url: \"events_users_profiles.list\" },\n { title: $filter('translate')('events_users_profiles.title_edit') },\n ];\n\n Restangular.one('EventsUsersProfiles', $stateParams.id).get().then(function (result) {\n $scope.event_user_profile = result;\n });\n }\n\n $scope.loadMenu = function () {\n //Cargar los nodos del menú de eventos\n Restangular.all('Menus').getList({ code: 'EVENT_MENU' }).then(function (results) {\n $scope.menu = results;\n var options = { menu_id: $scope.menu[0].id, _sortBy: \"position\", _sortDirection: \"asc\" };\n Restangular.all('MenusItems').getList(options).then(function (results) {\n var menusItems = [];\n menusItems = treeService.menuTree(results, null, menusItems);\n //$scope.menusItems = [];\n var idxParent;\n angular.forEach(menusItems, function (menuItem, idx) {\n if (menuItem.parent_menu_item_id == null) {\n menuItem.childs = [];\n $scope.menusItems.push(menuItem);\n idxParent = $scope.menusItems.length - 1;\n } else {\n if (angular.isDefined(idxParent)) {\n $scope.menusItems[idxParent].childs.push(menuItem);\n }\n }\n });\n $scope.$emit(\"loadPermissions\", {});\n });\n });\n };\n $scope.loadMenu();\n\n $scope.$on(\"loadPermissions\", function () {\n $scope.loadPermissions();\n });\n\n $scope.loadPermissions = function () {\n $scope.permissions = $scope.event_user_profile.FK_events_users_profiles_menus_items_permissions_events_users_profiles;\n var viewsFilter = $scope.permissions.filter(function (el) { return el.permission == 'view'; });\n angular.forEach(viewsFilter, function (prm) {\n angular.forEach($scope.menusItems, function (itm) {\n if (prm.menu_item_id === itm.id) {\n $scope.view[itm.id] = \"true\";\n }\n });\n });\n var editsFilter = $scope.permissions.filter(function (el) { return el.permission == 'edit'; });\n angular.forEach(editsFilter, function (prm) {\n angular.forEach($scope.menusItems, function (itm) {\n if (prm.menu_item_id === itm.id) {\n $scope.edit[itm.id] = \"true\";\n }\n });\n });\n };\n\n $scope.saveEventUserProfile = function () {\n var viewItems = [];\n var editItems = [];\n for (var v = 0; v < $scope.view.length; v++) {\n if (angular.isDefined($scope.view[v]) && $scope.view[v] === \"true\") {\n viewItems.push(v);\n }\n }\n for (var e = 0; e < $scope.edit.length; e++) {\n if (angular.isDefined($scope.edit[e]) && $scope.edit[e] === \"true\") {\n editItems.push(e);\n }\n }\n\n if (angular.isDefined($scope.event_user_profile.id)) {\n $scope.event_user_profile.put().then(function (result) {\n if (angular.isDefined(result.id)) {\n Restangular.all('EventsUsersProfiles').customPOST({}, \"UpdateProfilePermissions\", { profile_id: result.id, view_permissions: viewItems.toString(), edit_permissions: editItems.toString() }).then(function (result) {\n toastr.success($filter('translate')('events_users_profiles.edit_success'));\n $state.go(\"events_users_profiles.list\");\n });\n } else {\n $scope.errorMessage = result.message;\n }\n });\n } else {\n Restangular.all('EventsUsersProfiles').post($scope.event_user_profile).then(function (result) {\n if (angular.isDefined(result.id)) {\n Restangular.all('EventsUsersProfiles').customPOST({}, \"UpdateProfilePermissions\", { profile_id: result.id, view_permissions: viewItems.toString(), edit_permissions: editItems.toString() }).then(function (result) {\n toastr.success($filter('translate')('events_users_profiles.save_success'));\n $state.go(\"events_users_profiles.list\");\n });\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n };\n\n $scope.checkDelete = function () {\n modalService.confirm({\n title: $filter('translate')('events_users_profiles.button_delete'),\n message: $filter('translate')('events_users_profiles.delete_message') + \" \" + $scope.event_user_profile.name + \"?\",\n onAccept: function () {\n $scope.event_user_profile.remove().then(function () {\n toastr.success($filter('translate')('events_users_profiles.deleted_success'));\n $state.go(\"events_users_profiles.list\");\n });\n }\n });\n };\n \n}])\n\n;\n\n","angular.module(\"events_users_profiles\")\n\n .controller(\"EventsUsersProfilesListCtrl\", ['LoginService', '$rootScope', '$scope', '$http', '$interval', '$q', 'i18nService', 'Restangular', 'gridService', 'modalService', '$uibModal', '$filter', '$translate','$state',\n function (LoginService, $rootScope, $scope, $http, $interval, $q, i18nService, Restangular, gridService, modalService, $uibModal, $filter, $translate, $state) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"EVENTS_USERS_PROFILES_WRITE\");\n\n $rootScope.title = $filter('translate')('events_users_profiles.title');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('events_users_profiles.title') }\n ];\n\n $scope.gridOptionsEventsUsersProfiles = {\n pdfTitle: $filter('translate')('events_users_profiles.pdf_title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n enableSorting: true, \n paginationPageSizes: [20, 40, 60],\n paginationPageSize: 20,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n { name: 'name', displayName: $filter('translate')('events_users_profiles.name'), enableFiltering: true, enableHiding: false },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('events_users_profiles.button_edit'), action: 'ui-sref=\"events_users_profiles.edit({id:row.entity.id})\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('events_users_profiles.button_delete'), action: 'ng-click=\"grid.appScope.deleteDialog(row.entity.id,row.entity.name);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) { \n return Restangular.all('EventsUsersProfiles').getList(options);\n }\n };\n\n $scope.goToEdit = function (rowEntity) {\n $state.go(\"events_users_profiles.edit\", { id: rowEntity.id });\n }\n\n\n $scope.deleteDialog = function (id, name) {\n $scope.id = id;\n $scope.name = name;\n modalService.confirm({\n title: $filter('translate')('events_users_profiles.button_delete'),\n message: $filter('translate')('events_users_profiles.delete_message') + \" \" + $scope.name + \"?\",\n onAccept: function () {\n Restangular.one('EventsUsersProfiles', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('events_users_profiles.deleted_success'));\n $scope.gridOptionsEventsUsersProfiles.gridApi.core.raise.itemDeleted($scope);\n \n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n });\n\n };\n \n }])\n\n;","import BreadcrumbView from \"../common/breadcrumb/breadcrumb.html\";\nimport EventsUsersProfilesListView from \"./events_users_profiles-list.html\";\nimport EventsUsersProfilesEditView from \"./events_users_profiles-edit.html\";\n\n\nangular.module(\"events_users_profiles\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('events_users_profiles', {\n url: \"/events_users_profiles\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n })\n\n .state('events_users_profiles.list', {\n url: \"/list\",\n controller: \"EventsUsersProfilesListCtrl\",\n template: EventsUsersProfilesListView,\n requiredPermission: [\"EVENTS_USERS_PROFILES_READ\"]\n }) \n .state('events_users_profiles.edit', {\n url: \"/edit/:id\",\n controller: \"EventsUsersProfilesEditCtrl\",\n template: EventsUsersProfilesEditView,\n requiredPermission: [\"EVENTS_USERS_PROFILES_READ\"]\n })\n }])\n;","import { Component } from '@angular/core';\nimport { AuthService } from '../../../../core/services/auth.service';\nimport {Inject} from '@angular/core';\nimport { LogService } from '../../../../core/services/log.service';\nimport { Button } from 'primeng/button';\n\n@Component({\n selector: 'group-detail',\n template: `\n
\n `\n})\nexport class GroupDetailComponent {\n\n isAllowed: boolean = false;\n\n constructor(@Inject(AuthService) private authService: AuthService,\n @Inject(LogService) private log: LogService) { }\n\n ngOnInit() {\n this.isAllowed = this.authService.permissionExist('GROUPS_READ') ?? false;\n }\n\n onClick() {\n this.log.debug('Click');\n }\n\n }","import {NgModule} from '@angular/core';\nimport {GroupDetailComponent} from './components/groups/group-detail.component';\nimport { SharedModule } from '../../shared/shared.module';\n\n@NgModule({\n imports: [\n SharedModule,\n ],\n declarations: [\n GroupDetailComponent\n ],\n exports: [\n GroupDetailComponent\n ]\n})\nexport class PeopleModule {\n constructor() { }\n}","import './files_types';\nimport './files_types-list';\nimport './files_types-edit'; ","angular.module(\"files_types\")\n\n .controller(\"FilesTypesEditCtrl\", ['LoginService', '$scope', '$rootScope', '$state', '$stateParams', 'Restangular', 'gridService', '$filter', '$translate', 'modalService', '$uibModal',\n function (LoginService, $scope, $rootScope, $state, $stateParams, Restangular, gridService, $filter, $translate, modalService, $uibModal) {\n \n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"FILES_TYPES_WRITE\");\n $rootScope.title = $filter('translate')('files_types.title');\n\n $scope.file_type = {};\n\n $scope.selectMimetypes= [{ id: 'image/png', name: 'image/png' },\n { id: 'image/jpeg', name: 'image/jpeg' },\n { id: 'text/plain', name: 'text/plain' },\n { id: 'application/pdf', name: 'application/pdf' },\n { id: 'application/msword', name: 'application/msword' },\n { id: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', name: 'application/officedocument' }\n ]\n\n if (angular.isUndefined($stateParams.id) || $stateParams.id == \"\") {\n \n $rootScope.breadcrumb = [\n { title: $filter('translate')('files_types.title'), url: \"files_types.list\" },\n { title: $filter('translate')('files_types.title_add') },\n ];\n \n } else {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('files_types.title'), url: \"files_types.list\" },\n { title: $filter('translate')('files_types.title_edit') },\n ];\n\n Restangular.one('FilesTypes', $stateParams.id).get().then(function (result) {\n \n $scope.file_type = result; \n });\n } \n \n $scope.save = function () { \n if (angular.isDefined($scope.file_type.id)) {\n $scope.file_type.put().then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('general.edit_success')); \n $state.go(\"files_types.list\");\n } else {\n $scope.errorMessage = result.message;\n }\n });\n } else {\n Restangular.all('FilesTypes').post($scope.file_type).then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('general.edit_success'));\n $state.go(\"files_types.list\");\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n }\n\n $scope.checkDelete = function () {\n modalService.confirm({\n title: $filter('translate')('events_types.button_delete'),\n message: $filter('translate')('events_types.delete_message') + \" \" + $scope.event_type.name + \"?\",\n onAccept: function () {\n $scope.event_type.remove().then(function () {\n toastr.success($filter('translate')('general.deleted_success'));\n $state.go(\"files_types.list\");\n });\n }\n });\n }; \n\n}])\n\n;\n\n","angular.module(\"files_types\")\n\n .controller(\"FilesTypesListCtrl\", ['LoginService', '$rootScope', '$scope', '$http', '$interval', '$q', 'i18nService', 'Restangular', 'gridService', 'modalService', '$uibModal', '$filter', '$translate','$state',\n function (LoginService, $rootScope, $scope, $http, $interval, $q, i18nService, Restangular, gridService, modalService, $uibModal, $filter, $translate, $state) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"EVENTS_TYPES_WRITE\");\n\n $rootScope.title = $filter('translate')('files_types.title');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('files_types.title') }\n ];\n\n $scope.gridOptions = {\n pdfTitle: $filter('translate')('files_types.pdf_title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n enableSorting: true, \n paginationPageSizes: [20, 40, 60],\n paginationPageSize: 20,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n { name: 'description', displayName: $filter('translate')('files_types.description'), enableFiltering: true, enableHiding: false },\n { name: 'mimetype', displayName: $filter('translate')('files_types.mimetype'), enableFiltering: true, enableHiding: false },\n { name: 'maxsize', displayName: $filter('translate')('files_types.maxsize'), enableFiltering: true, enableHiding: false },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('general.edit'), action: 'ui-sref=\"files_types.edit({id:row.entity.id})\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('general.delete'), action: 'ng-click=\"grid.appScope.deleteDialog(row.entity.id,row.entity.description);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) { \n return Restangular.all('FilesTypes').getList(options);\n }\n };\n\n $scope.goToEdit = function (rowEntity) {\n $state.go(\"files_types.edit\", { id: rowEntity.id });\n }\n\n\n $scope.deleteDialog = function (id, name) {\n $scope.id = id;\n $scope.name = name;\n modalService.confirm({\n title: $filter('translate')('general.delete'),\n message: $filter('translate')('general.delete_message') + \" \" + $scope.name + \"?\",\n onAccept: function () {\n Restangular.one('FilesTypes', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('general.delete_success'));\n $scope.gridOptions.gridApi.core.raise.itemDeleted($scope);\n \n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n });\n\n };\n \n }])\n\n;","import BreadcrumbView from \"../common/breadcrumb/breadcrumb.html\";\nimport FilesTypesListView from \"./files_types-list.html\";\nimport FilesTypesEditView from \"./files_types-edit.html\";\n\n\nangular.module(\"files_types\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('files_types', {\n url: \"/files_types\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n })\n\n .state('files_types.list', {\n url: \"/list\",\n controller: \"FilesTypesListCtrl\",\n template: FilesTypesListView,\n requiredPermission: [\"EVENTS_TYPES_READ\"]\n }) \n .state('files_types.edit', {\n url: \"/edit/:id\",\n controller: \"FilesTypesEditCtrl\",\n template: FilesTypesEditView,\n requiredPermission: [\"EVENTS_TYPES_READ\"]\n })\n }])\n;","import './files_types_whitelist';\nimport './files_types_whitelist-list';\nimport './files_types_whitelist-edit'; ","angular.module(\"files_types_whitelist\")\n\n .controller(\"FilesTypesWhitelistEditCtrl\", ['LoginService', '$scope', '$rootScope', '$state', '$stateParams', 'Restangular', 'gridService', '$filter', '$translate', 'modalService', '$uibModal',\n function (LoginService, $scope, $rootScope, $state, $stateParams, Restangular, gridService, $filter, $translate, modalService, $uibModal) {\n \n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"EVENTS_TYPES_WRITE\");\n $rootScope.title = $filter('translate')('files_types_whitelist.title');\n\n $scope.type_whitelist = {};\n\n $scope.selectEntities = [{ id: 'events', name: $filter('translate')('files_types_whitelist.events_files')},\n { id: 'programs', name: $filter('translate')('files_types_whitelist.events_programs')},\n { id: 'events_programs_annexes', name: $filter('translate')('files_types_whitelist.events_annexes')},\n { id: 'general', name: $filter('translate')('files_types_whitelist.general') },\n { id: 'correspondence', name: $filter('translate')('files_types_whitelist.correspondence') },\n { id: 'restaurants', name: $filter('translate')('files_types_whitelist.restaurants') },\n { id: 'staff', name: $filter('translate')('files_types_whitelist.staff') },\n { id: 'documents_config', name: $filter('translate')('files_types_whitelist.documents_config') },\n { id: 'persons', name: $filter('translate')('files_types_whitelist.persons') }\n ];\n\n Restangular.all('FilesTypes').getList().then(function (result) {\n $scope.selectFilesTypes = result;\n });\n\n if (angular.isUndefined($stateParams.id) || $stateParams.id == \"\") {\n \n $rootScope.breadcrumb = [\n { title: $filter('translate')('files_types_whitelist.title'), url: \"files_types_whitelist.list\" },\n { title: $filter('translate')('files_types.title_add') },\n ];\n \n } else {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('files_types_whitelist.title'), url: \"files_types_whitelist.list\" },\n { title: $filter('translate')('files_types.title_edit') },\n ];\n\n Restangular.one('FilesTypesWhitelist', $stateParams.id).get().then(function (result) {\n $scope.type_whitelist = result;\n });\n } \n \n $scope.save = function () { \n if (angular.isDefined($scope.type_whitelist.id)) {\n $scope.type_whitelist.put().then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('general.edit_success')); \n $state.go(\"files_types_whitelist.list\");\n } else {\n $scope.errorMessage = result.message;\n }\n });\n } else {\n Restangular.all('FilesTypesWhitelist').post($scope.type_whitelist).then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('general.save_success'));\n $state.go(\"files_types_whitelist.list\");\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n }\n\n $scope.checkDelete = function () {\n modalService.confirm({\n title: $filter('translate')('general.button_delete'),\n message: $filter('translate')('general.delete_message') + \" \" + $scope.event_type.name + \"?\",\n onAccept: function () {\n $scope.type_whitelist.remove().then(function () {\n toastr.success($filter('translate')('general.deleted_success'));\n $state.go(\"files_types_whitelist.list\");\n });\n }\n });\n }; \n\n }])\n\n;\n\n","angular.module(\"files_types_whitelist\")\n\n .controller(\"FilesTypesWhitelistListCtrl\", ['LoginService', '$rootScope', '$scope', '$http', '$interval', '$q', 'i18nService', 'Restangular', 'gridService', 'modalService', '$uibModal', '$filter', '$translate','$state',\n function (LoginService, $rootScope, $scope, $http, $interval, $q, i18nService, Restangular, gridService, modalService, $uibModal, $filter, $translate, $state) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"EVENTS_TYPES_WRITE\");\n\n $rootScope.title = $filter('translate')('files_types_whitelist.title');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('files_types_whitelist.title') }\n ];\n\n $scope.search = {\n entity_type: \"\"\n };\n\n $scope.gridOptions = {\n pdfTitle: $filter('translate')('files_types_whitelist.pdf_title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n enableSorting: true, \n paginationPageSizes: [20, 40, 60],\n paginationPageSize: 20,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n { name: 'FK_files_types_whitelist_files_types.description', displayName: $filter('translate')('files_types.description'), enableFiltering: true, enableHiding: false },\n { name: 'maxsize', displayName: $filter('translate')('files_types.maxsize'), enableFiltering: true, enableHiding: false },\n { name: 'entity_type', displayName: $filter('translate')('files_types.entity'), enableFiltering: true, enableHiding: false },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('general.edit'), action: 'ui-sref=\"files_types_whitelist.edit({id:row.entity.id})\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('general.delete'), action: 'ng-click=\"grid.appScope.deleteDialog(row.entity.id,row.entity.FK_files_types_whitelist_files_types.description);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n options.entity_type = $scope.search.entity;\n return Restangular.all('FilesTypesWhitelist').getList(options);\n }\n };\n\n $scope.goToEdit = function (rowEntity) {\n $state.go(\"files_types_whitelist.edit\", { id: rowEntity.id });\n }\n\n\n $scope.searchEntity = function () {\n if (angular.isDefined($scope.gridOptions.loadData)) {\n $scope.gridOptions.loadData(false);\n }\n }\n\n $scope.deleteDialog = function (id, name) {\n $scope.id = id;\n $scope.name = name;\n modalService.confirm({\n title: $filter('translate')('general.delete'),\n message: $filter('translate')('general.delete_message') + \" \" + $scope.name + \"?\",\n onAccept: function () {\n Restangular.one('FilesTypesWhitelist', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('general.delete_success'));\n $scope.gridOptions.gridApi.core.raise.itemDeleted($scope);\n \n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n });\n\n };\n \n }])\n\n;","import BreadcrumbView from \"../common/breadcrumb/breadcrumb.html\";\nimport FilesTypesWhitelistListView from \"./files_types_whitelist-list.html\";\nimport FilesTypesWhitelistEditView from \"./files_types_whitelist-edit.html\";\n\n\nangular.module(\"files_types_whitelist\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('files_types_whitelist', {\n url: \"/files_types_whitelist\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n })\n\n .state('files_types_whitelist.list', {\n url: \"/list\",\n controller: \"FilesTypesWhitelistListCtrl\",\n template: FilesTypesWhitelistListView,\n requiredPermission: [\"EVENTS_TYPES_READ\"]\n }) \n .state('files_types_whitelist.edit', {\n url: \"/edit/:id\",\n controller: \"FilesTypesWhitelistEditCtrl\",\n template: FilesTypesWhitelistEditView,\n requiredPermission: [\"EVENTS_TYPES_READ\"]\n })\n }])\n;","import './folders';\nimport './folders-list';\nimport './folders-edit'; \nimport './folders-service';\nimport './files-edit';\n","angular.module(\"folders\")\n\n .controller(\"FilesEditModalCtrl\", ['fileId', 'parentFolderId', 'entity_type', 'entity_type_id', 'is_public', '$scope', '$uibModalInstance', '$uibModal', 'Restangular', '$filter', 'modalService', 'Upload', '$log',\n function (fileId, parentFolderId, entity_type, entity_type_id, is_public, $scope, $uibModalInstance, $uibModal, Restangular, $filter, modalService, Upload, $log) {\n\n $scope.allowWrite = true; //LoginService.permissionExist(\"BUDGET_GROUPS_WRITE\");\n\n\n if (typeof (fileId) !== \"undefined\" && fileId != null) {\n Restangular.one('Files', fileId).get().then(function (results) {\n $scope.file = results;\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n } else {\n $scope.file = { parent_folder_id: parentFolderId, entity_type: entity_type, entity_type_id: entity_type_id, is_public: is_public};\n }\n\n /*\n $scope.uploadFiles = function ($file) {\n $log.debug(\"uploadFiles!!!!!!!!!!!!!!!!\");\n $log.debug($file);\n $scope.errorMsg = undefined;\n $scope.file = $file;\n }\n */\n\n $scope.namesFiles = \"\";\n $scope.submit = function () {\n\n $scope.namesFiles = \"\";\n angular.forEach($scope.files, function (file) {\n $scope.namesFiles += file.name + \", \";\n });\n }\n\n $scope.save = function () {\n if (!angular.isUndefined($scope.file.id)) {\n $scope.file.put().then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('files.edit_success'));\n $uibModalInstance.close();\n } else {\n $scope.errorMessage = result.message;\n }\n });\n } else {\n\n angular.forEach($scope.files, function (file) {\n Restangular.all(\"FilesTypesWhitelist\").customGET(\"GetTotalSizeAllowed\", { entity: $scope.file.entity_type }).then(function (result) {\n\n if (result.filter(e => e.type === file.type).length <= 0 && file.type !=\"\") {\n var typeAllowed = result.map(o => o.type).join(', ');\n if (typeof ($scope.event) !== \"undefined\") {\n $scope.event.changesNotSaved = false;\n }\n modalService.message({\n title: \"Error\",\n message: $filter('translate')('general.type_file_not_allowed') + \"
\" + typeAllowed,\n onAccept: function () { }\n });\n } else {\n var maxSizeAllowed = 0;\n if (file.type == null || file.type == \"\") {\n maxSizeAllowed = 10240;\n } else {\n maxSizeAllowed = result.find(e => e.type === file.type).maxsize;\n }\n\n var sizeFileMB = file.size / 1024;\n if (sizeFileMB > 0) {\n //Comprobamos que no pase del tamaño limite de imagen\n if (sizeFileMB > maxSizeAllowed) {\n if (typeof ($scope.event) !== \"undefined\") {\n $scope.event.changesNotSaved = false;\n }\n modalService.message({\n title: \"Error\",\n message: $filter('translate')('general.image_size_limit') + \"
\" + maxSizeAllowed + \" Kb\",\n onAccept: function () { }\n });\n } else {\n file.upload = Upload.upload({\n url: (window as any).CONFIG.api_url + \"Files/uploadFile\",\n data: { file: file, name: $scope.file.name, folder_id: (parentFolderId == null ? null : parentFolderId), entity_type: entity_type, entity_type_id: entity_type_id, is_public: is_public },\n });\n\n file.upload.then(function (response) {\n \n if (response.status == 200) {\n $uibModalInstance.close();\n } else {\n $log.debug(\"Ha ocurrido un error...\");\n }\n }, function (response) { //error\n $scope.errorMsg = response.data;\n });\n }\n }\n }\n })\n });\n \n }\n }\n \n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n $scope.checkDelete = function () {\n modalService.confirm({\n title: $filter('translate')('files.title_delete'),\n message: $filter('translate')('files.delete_message') + \" \" + $scope.file.name + \"?\",\n onAccept: function () {\n $scope.file.remove().then(function () {\n toastr.success($filter('translate')('files.delete_success'));\n $uibModalInstance.close();\n });\n }\n });\n };\n\n }])\n\n\n;","angular.module(\"folders\")\n\n .controller(\"FoldersEditModalCtrl\", ['folderId', 'parentFolderId', 'entity_type', 'entity_type_id', 'is_public', '$scope', '$uibModalInstance', '$uibModal', 'Restangular', '$filter', 'modalService', function (folderId, parentFolderId, entity_type, entity_type_id, is_public, $scope, $uibModalInstance, $uibModal, Restangular, $filter, modalService) {\n\n $scope.allowWrite = true; //LoginService.permissionExist(\"BUDGET_GROUPS_WRITE\");\n if (typeof (folderId) !== \"undefined\" && folderId != null) {\n Restangular.one('Folders', folderId).get().then(function (results) {\n $scope.folder = results;\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n } else {\n $scope.folder = { parent_folder_id: parentFolderId, entity_type: entity_type, entity_type_id: entity_type_id, is_public: is_public };\n }\n\n $scope.save = function () {\n if (!angular.isUndefined($scope.folder.id)) {\n $scope.folder.put().then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('restaurants.edit_success'));\n $uibModalInstance.close();\n } else {\n $scope.errorMessage = result.message;\n }\n });\n } else {\n Restangular.all('Folders').post($scope.folder).then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('folders.create_success'));\n $uibModalInstance.close();\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n }\n \n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n $scope.checkDelete = function () {\n modalService.confirm({\n title: $filter('translate')('folders.button_delete'),\n message: $filter('translate')('folders.delete_message') + \" \" + $scope.folder.name + \"?\",\n onAccept: function () {\n $scope.folder.remove().then(function () {\n toastr.success($filter('translate')('folders.delete_success'));\n $uibModalInstance.close();\n });\n }\n });\n };\n\n }])\n\n\n;","import FoldersDocumentTypeModalView from \"./foldersDocumentTypeModal.html\";\nimport FoldersTagsModalView from \"./foldersTagsModal.html\";\nimport TagsModalView from \"../tags/TagsModal.html\";\nimport FoldersEditModalView from \"./folders-edit.html\";\nimport FilesEditModalView from \"./files-edit.html\";\n\n\nangular.module(\"folders\")\n\n .controller('FoldersListCtrl', ['entity_type', 'entity_type_id','is_public', 'foldersService', '$stateParams', '$rootScope', '$scope', 'Restangular', 'modalService', '$filter', 'LoginService', '$uibModal', 'clipboard', 'generateDocumentService', '$http', '$log',\n function (entity_type, entity_type_id, is_public, foldersService, $stateParams, $rootScope, $scope, Restangular, modalService, $filter, LoginService, $uibModal, clipboard, generateDocumentService, $http, $log) {\n\n $scope.currentFolderId = null;\n let options: any = {};\n let fullFolderFiles: any = null;\n\n $scope.tagsInFilter = [];\n\n if ($stateParams.id && typeof ($stateParams.id) !== 'undefined') {\n if (entity_type == \"events\") {\n Restangular.one('Events', $stateParams.id).get().then(function (results) {\n //event = results;\n $rootScope.breadcrumb = [\n { title: $filter('translate')('events.title'), url: \"events.list\" },\n { title: results.name, url: \"events.edit({ id: \" + results.id + \" })\" },\n { title: $filter('translate')('folders.list') }\n ];\n $rootScope.title = results.name + \" - \" + $filter('translate')('folders.list');\n });\n }\n if (entity_type == \"persons\") {\n Restangular.one('Persons', $stateParams.id).get().then(function (results) {\n // event = results;\n $rootScope.breadcrumb = [\n { title: $filter('translate')('events.title'), url: \"events.list\" },\n { title: results.name, url: \"person.edit({ id: \" + results.id + \", person_type: \" + $stateParams.person_type +\" })\" },\n { title: $filter('translate')('folders.list') }\n ];\n $rootScope.title = results.name + \" - \" + $filter('translate')('folders.list');\n });\n }\n } else {\n $rootScope.title = $filter('translate')('folders.title');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('folders.list') }\n ];\n } \n\n $scope.breadcrumb = function (folderId) {\n options = { id: folderId, entity_type: entity_type, entity_type_id: entity_type_id };\n $scope.currentFolderId = folderId;\n Restangular.all(\"Folders\").customGET(\"FoldersBreadcrumb\", options).then(function (results) {\n $scope.breadcrumbs = results;\n });\n };\n $scope.breadcrumb($scope.currentFolderId);\n\n $scope.loadData = function (folderId) {\n options = { folder_id: folderId, entity_type: entity_type, entity_type_id: entity_type_id, is_public: is_public };\n $scope.currentFolderId = folderId;\n Restangular.all(\"Folders\").getList(options).then(function (results) {\n fullFolderFiles = results;\n $scope.foldersFiles = results;\n $scope.breadcrumb($scope.currentFolderId);//recargamos el breadcrumb\n //Cargamos los tags\n Restangular.all('Tags').getList({ entity_type: \"documents\" }).then(function (tags) {\n $scope.selectTags = tags;\n // Mostramos solo los tags que hay en los archivos para el filtro\n $scope.tagList = filterUsedTags(tags, results);\n });\n });\n };\n $scope.loadData($scope.currentFolderId);\n\n // To do \n $scope.setDocumentType = function (folderfile) {\n $scope.$modalInstance = $uibModal.open({\n animation: true,\n template: FoldersDocumentTypeModalView,\n size: \"md\",\n controller: \"FoldersDocumentTypeCtrl\",\n scope: $scope,\n resolve: {\n folderfile: function () {\n return folderfile;\n },\n }\n });\n };\n\n // Gestión de tags \n $scope.manageTags = function (folder) {\n $scope.$modalInstance = $uibModal.open({\n animation: true,\n template: FoldersTagsModalView,\n size: \"md\",\n controller: \"FoldersTagsModalCtrl\",\n scope: $scope,\n resolve: {\n folder: function () {\n return folder;\n },\n }\n });\n }\n\n $scope.createNewTag = function () {\n $scope.$modalInstance = $uibModal.open({\n animation: true,\n template: TagsModalView,\n size: \"ld\",\n controller: \"tagsEditCtrl\",\n scope: $scope,\n resolve: {\n is_modal: function () {\n return true;\n },\n entity_type: function () {\n return \"documents\";\n },\n entity_id: function () {\n return null;\n }\n }\n });\n }\n\n $scope.filterByTags = function () {\n let tagsInFilterIds = $scope.tagsInFilter.map(t => t.id);\n $log.debug(tagsInFilterIds);\n $scope.foldersFiles = fullFolderFiles.filter((file) => tagsInFilterIds.every(t => file.tags.map(m => m.tag_id).includes(t))\n || (file.subFolderTagsIds && tagsInFilterIds.every(t => file.subFolderTagsIds.concat(file.tags.map(m => m.tag_id)).includes(t))));\n \n };\n\n $scope.addTagToFilter = function (tag) {\n if (!$scope.tagsInFilter.map(t => t.id).includes(tag.id))\n $scope.tagsInFilter.push(tag);\n\n $scope.filterByTags();\n };\n\n $scope.removeTagFromFilter = function (tag) {\n let index = $scope.tagsInFilter.indexOf(tag);\n $scope.tagsInFilter.splice(index, 1);\n $scope.filterByTags();\n };\n\n\n\n $scope.editAdd = function (type, id) {\n if (type == 'folder') {\n $scope.$modalInstance = $uibModal.open({\n animation: true,\n template: FoldersEditModalView,\n size: \"md\",\n controller: \"FoldersEditModalCtrl\",\n scope: $scope,\n resolve: {\n folderId: function () {\n return id;\n },\n parentFolderId: function () {\n return $scope.currentFolderId;\n },\n entity_type: function () {\n return entity_type\n },\n entity_type_id: function () {\n return entity_type_id\n },\n is_public: function () {\n return is_public\n }\n }\n });\n } else {\n $scope.$modalInstance = $uibModal.open({\n animation: true,\n template: FilesEditModalView,\n size: \"md\",\n controller: \"FilesEditModalCtrl\",\n scope: $scope,\n resolve: {\n fileId: function () {\n return id;\n },\n parentFolderId: function () {\n return $scope.currentFolderId;\n },\n entity_type: function () {\n return entity_type\n },\n entity_type_id: function () {\n return entity_type_id\n },\n is_public: function () {\n return is_public\n }\n }\n });\n }\n\n //Response del modal\n $scope.$modalInstance.result.then(function (data) {\n $scope.loadData($scope.currentFolderId);\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n if (!$scope.$$phase) $scope.$apply();\n }); \n };\n\n $scope.delete = function (type, id, name) {\n if (type == \"folder\") {\n modalService.confirm({\n title: $filter('translate')('folders.title_delete'),\n message: $filter('translate')('folders.delete_message') + \" \" + name + \"?\",\n onAccept: function () {\n Restangular.one('Folders', id).remove().then(function () {\n toastr.success($filter('translate')('folders.delete_success'));\n $scope.loadData($scope.currentFolderId);\n });\n }\n });\n } else {\n modalService.confirm({\n title: $filter('translate')('files.title_delete'),\n message: $filter('translate')('files.delete_message') + \" \" + name + \"?\",\n onAccept: function () {\n Restangular.one('Files', id).remove().then(function () {\n toastr.success($filter('translate')('files.delete_success'));\n $scope.loadData($scope.currentFolderId);\n });\n }\n });\n }\n };\n\n $scope.downloadAll = function () {\n alert(\"downloadAll \" + $scope.currentFolderId);\n };\n\n $scope.copyToClipboard = function (uid) {\n if (!clipboard.supported) {\n alert(\"/api/files/\" + uid + \"/download\");\n } else {\n clipboard.copyText(location.protocol + \"//\" + location.host + \"/api/files/\" + uid + \"/download\");\n }\n };\n\n $scope.openFile = function (uid) {\n window.open(\"/api/files/\" + uid + \"/download\", '_blank');\n };\n\n $scope.onCancel = function () {\n //$uibModalInstance.dismiss('cancel');\n foldersService.onClose();\n };\n\n $scope.changeIsGuestOnly = function (folderFile) {\n // Actualizamos el objeto Local \n folderFile.guest_only == false ? folderFile.guest_only = true : folderFile.guest_only = false;\n // Actualizamos la BBDD\n let type;\n folderFile.is_folder ? type = 'Folders' : type = 'Files';\n Restangular.one(`${type}`, folderFile.id).get().then(function (result) {\n result.guest_only = folderFile.guest_only;\n result.put();\n })\n };\n\n $scope.printDialog = function (code, type_document, type_result, id) {\n var params = {\n id: $scope.currentFolderId,\n entity_type: entity_type,\n entity_type_id: entity_type_id,\n documents: { codes: [code] }\n };\n generateDocumentService.documentNew({\n params: params,\n onAccept: function (data) {\n angular.forEach(data, function (item) {\n //url = (window as any).CONFIG.api_url + 'documentgenerator/' + item.document_url_method + '/' + item.document_id + '/' + params.id + '/' + params.entity_type + '/' + params.entity_type_id + '/pdf';\n //$log.debug(url);\n //window.open(url, '_blank');\n $http({\n method: 'post',\n url: (window as any).CONFIG.api_url + 'documentgenerator/Generate',\n params: { document_id: item.document_id, outputType: 'pdf' }\n }).then(function (result, status, headers, config) {\n var url = (window as any).CONFIG.api_url + 'documentgenerator/download/' + result.data;\n window.open(url, '_blank');\n });\n })\n }\n });\n };\n\n // Funciones auxiliares \n let filterUsedTags = function (tagList, folderList) {\n let availableTags = [];\n folderList.forEach(function (f) {\n let folderTags = f.tags.map(t => t.tag_id);\n if(folderTags!=null) availableTags = mergeWithoutDuplicates(availableTags, folderTags);\n let subfolderTags = f.subFolderTagsIds;\n if(subfolderTags) availableTags = mergeWithoutDuplicates(availableTags, subfolderTags);\n });\n return tagList.filter((f) => availableTags.includes(f.id))\n };\n\n let mergeWithoutDuplicates = function (array1, array2) {\n if (!array1 || array1.length < 1) return array2;\n if (!array2 || array2.length < 1) return array1;\n return array1.concat(array2.filter((item) => array1.indexOf(item) < 0))\n };\n\n }])\n\n .controller('FoldersTagsModalCtrl', ['folder', '$scope', 'Restangular',\n function (folder, $scope, Restangular) {\n\n $scope.managedFolder = {};\n $scope.managedFolder = folder;\n $scope.tagToAdd = {};\n\n $scope.addTagToFolder = function (tag) {\n $scope.tagToAdd.selected = null;\n\n if (!folder.tags.map(t => t.tag_id).includes(tag.id)) {\n let entity_type = folder.is_folder ? 'folder' : 'file';\n let tagEntity: any = { tag_id: tag.id, entity_type: entity_type, entity_id: folder.id, color: tag.color, title: tag.title, description: tag.description, icon: tag.icon };\n Restangular.all('Folders/addTag').post(tagEntity).then(function (id) {\n tagEntity.id = id;\n $scope.managedFolder.tags.push(tagEntity);\n $scope.loadData($scope.currentFolderId);\n });\n }\n };\n\n $scope.removeTagFromFolder = function (tag) {\n let index = $scope.managedFolder.tags.indexOf(tag);\n Restangular.all('Folders/removeTag').post(tag).then(function () {\n $scope.managedFolder.tags.splice(index, 1)\n $scope.loadData($scope.currentFolderId);\n });\n };\n\n $scope.onCancel = function () {\n $scope.$modalInstance.dismiss('cancel');\n };\n\n }])\n\n .controller('FoldersDocumentTypeCtrl', ['folderfile', '$scope', 'Restangular',\n function (folderfile, $scope, Restangular) {\n\n\n $scope.managedFolder = folderfile;\n // Cargamos los tipos de documentos para poder asignarlos al archivo\n if (!$scope.selectDocumentTypes) {\n Restangular.all('DocumentsTypes').getList().then(function (result) {\n $scope.selectDocumentTypes = result;\n });\n }\n\n Restangular.one('Files', folderfile.id).get().then(function (result) {\n $scope.managedFile = result;\n });\n\n $scope.onCancel = function () {\n $scope.$modalInstance.dismiss('cancel');\n $scope.managedFile = {};\n $scope.managedFolder = {};\n };\n\n $scope.onAccept = function () {\n Restangular.all(\"Files\").customGET(\"changeDocumentType\", { fileId: $scope.managedFile.id, documentTypeId: $scope.managedFile.DocumentTypeId }).then(function (res) {\n $scope.managedFile = {};\n $scope.managedFolder = {};\n $scope.$modalInstance.close();\n });\n }\n }])\n;","import FoldersModalView from \"./folders-modal.html\";\n\nangular.module(\"folders\")\n .factory(\"foldersService\", ['$injector', function ($injector) {\n var instance = null;\n function remove() {\n instance = null;\n }\n var service = {\n folders: function (entity_type, entity_type_id, is_public) {\n if (instance != null) return;\n var $uibModal = $injector.get(\"$uibModal\");\n instance = $uibModal.open({\n animation: true,\n template: FoldersModalView,\n controller: 'FoldersListCtrl',\n size: 'lg',\n resolve: {\n entity_type: function () { return entity_type; },\n entity_type_id: function () { return entity_type_id; },\n is_public: function () { return is_public; }\n }\n });\n instance.result.then(function (result) {\n remove();\n }, function () {\n remove();\n })\n },\n onClose: function () {\n instance.close();\n }\n };\n return service;\n }])\n\n .directive('foldersfilesDirective', [function() {\n 'use strict';\n return {\n restrict: 'E',\n scope: {\n to: \"=\",\n }, \n replace: true,\n controller: 'FoldersListCtrl',\n /*link: function (scope, elem, attrs) {\n if (!attrs.entitytype) {\n throw \"Tiene que tener 'entitytype'\";\n }\n $log.debug(attrs);\n },*/\n resolve: function (attrs) {\n return {\n entitytype: function () { return attrs.entity_type; },\n entitytypeid: function () { return attrs.entity_type_id; }\n }\n },\n template: FoldersModalView,\n };\n}]);\n ;","import BreadcrumbView from \"../common/breadcrumb/breadcrumb.html\";\nimport FoldersListView from \"./folders-list.html\";\n\n\nangular.module(\"folders\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('folders', {\n url: \"/folders\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n })\n .state('folders.list', {\n url: \"/list/:entity_type/:entity_type_id/:is_public\",\n controller: \"FoldersListCtrl\",\n template: FoldersListView,\n cache: false,\n resolve: {\n entity_type: ['$stateParams', function ($stateParams) {\n if (angular.isDefined($stateParams.entity_type) && $stateParams.entity_type != \"\") {\n return $stateParams.entity_type;\n }\n return null;\n }],\n entity_type_id: ['$stateParams', function ($stateParams) {\n if (angular.isDefined($stateParams.entity_type_id) && $stateParams.entity_type_id != \"\") {\n return $stateParams.entity_type_id;\n }\n return null;\n }],\n is_public: ['$stateParams', function ($stateParams) {\n if (angular.isDefined($stateParams.is_public) && $stateParams.is_public != \"\") {\n return $stateParams.is_public;\n }\n return false;\n }]\n },\n data: { pageTitle: 'Carpetas' },\n //requiredPermission: [\"FILES_READ\"]\n })\n ;\n }])\n;","import './gifts';\nimport './gifts-list';\nimport './gifts-edit';\nimport './persons_gifts/persons_gifts'; \nimport './persons_gifts/persons_gifts-list'; \nimport './persons_gifts/persons_gifts-edit'; ","import AddQuantityModalView from \"./addQuantityModal.html\";\n\n\nangular.module(\"gifts\")\n\n .controller(\"GiftsEditCtrl\", ['LoginService', '$scope', '$rootScope', '$state', '$timeout', '$sce', '$stateParams', 'Restangular', 'gridService', '$filter', '$translate', 'modalService', '$uibModal',\n function (LoginService, $scope, $rootScope, $state, $timeout, $sce, $stateParams, Restangular, gridService, $filter, $translate, modalService, $uibModal) {\n\n $scope.changesNotSaved = false;\n $scope.errorUnits = false;\n let quantityAdd = 0;\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"GIFTS_WRITE\");\n\n $rootScope.title = $filter('translate')('gifts.title');\n\n $scope.gridWarehouse = { warehouse_id: 1, entity_type: 'gifts' };\n\n var trusted = {};\n $scope.getPopoverContent = function (html) {\n return trusted[html] || (trusted[html] = $sce.trustAsHtml(html));\n };\n\n $scope.loadWharesouseRows = function () {\n Restangular.all('Warehouses').getList({ entity_type: \"gifts\", entity_id: $stateParams.id }).then(function (warehouses) {\n $scope.selectWarehouses = warehouses;\n $scope.gridWarehouse.warehouse_id = $scope.selectWarehouses[0].id;\n });\n }\n\n $scope.loadWharesouseRows();\n\n Restangular.all('Providers').getList().then(function (providers) {\n $scope.selectProviders = providers;\n });\n\n\n $scope.gift = {};\n\n if (angular.isUndefined($stateParams.id) || $stateParams.id == \"\") {\n\n $rootScope.breadcrumb = [\n { title: $filter('translate')('gifts.title'), url: \"gifts.list\" },\n { title: $filter('translate')('gifts.title_add') },\n ];\n\n } else {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('gifts.title'), url: \"gifts.list\" },\n { title: $filter('translate')('gifts.title_edit') },\n ];\n\n Restangular.one('Gifts', $stateParams.id).get().then(function (result) {\n $scope.gift = result;\n });\n }\n\n $scope.checkDelete = function () {\n modalService.confirm({\n title: $filter('translate')('gifts.button_delete'),\n message: $filter('translate')('gifts.delete_message') + \" \" + $scope.gift.name + \"?\",\n onAccept: function () {\n $scope.gift.remove().then(function () {\n toastr.success($filter('translate')('gifts.delete_success'));\n $state.go(\"gifts.list\");\n });\n }\n });\n };\n\n $scope.allowViewPersonGifts = LoginService.permissionExist(\"PERSONS_GIFTS_READ\"); //Solo se mostrara si tiene permiso para ver los regalos a las personas\n\n $scope.loadGrid = function () {\n if (angular.isDefined($scope.gridOptionMovementsGifts)) {\n $scope.gridOptionMovementsGifts.loadData(false);\n } else {\n $scope.gridOptionMovementsGifts = {\n enableSorting: true,\n paginationPageSizes: [20, 40, 60],\n paginationPageSize: 20,\n\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n { name: 'created_at', displayName: $filter('translate')('movement.date'), cellFilter: 'toUniversalDateCreatedAtHack | date:\\'dd/MM/yyyy HH:mm\\'', enableColumnMenu: false },\n { name: 'provider_name', field: 'provider_name', displayName: $filter('translate')('gifts.provider'), enableHiding: false },\n { name: 'destination_name', field: 'destination_name', displayName: $filter('translate')('movement.destination'), enableHiding: false },\n {\n name: 'direction', field: 'direction', displayName: $filter('translate')('movement.direction'), enableHiding: false,\n cellTemplate: '
 Saliente
 Entrante
'\n\n },\n { name: 'warehouse_name', field: 'warehouse_name', displayName: $filter('translate')('gifts.warehouse'), enableHiding: false },\n { name: 'quantity', field: 'quantity', displayName: $filter('translate')('movement.quantity'), enableHiding: false , width: 100},\n { name: 'final_quantity', field: 'final_quantity', displayName: $filter('translate')('movement.final_quantity'), enableHiding: false, width: 150 },\n {\n name: 'notes', field: 'notes', displayName: $filter('translate')('general.notes'), enableHiding: false, width: 300,\n cellTemplate: '',\n },\n ],\n getData: function (options) {\n options.warehouse_id = $scope.gridWarehouse.warehouse_id;\n options.entity_type = $scope.gridWarehouse.entity_type;\n options.entity_id = $stateParams.id;\n return Restangular.all('WarehousesMovements').getList(options);\n }\n };\n }\n }\n\n $scope.loadGrid();\n\n $scope.changeTab = function (warehouse_id) {\n $scope.gridWarehouse.warehouse_id = warehouse_id;\n $scope.loadGrid();\n }\n\n $scope.saveGift = function () {\n if (angular.isUndefined($stateParams.id) || $stateParams.id == \"\") {\n Restangular.all('Gifts').post($scope.gift).then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('gifts.save_success'));\n $scope.gift = result;\n $stateParams.id = result.id;\n } else {\n $scope.errorMessage = result.message;\n }\n });\n } else {\n $scope.gift.put().then(function (result) {\n toastr.success($filter('translate')('materials.edit_success'));\n });\n }\n }\n\n\n $scope.selectImage = function () {\n $(\"#frmImage\").trigger(\"click\");\n $(\"#frmImage\").change(function () {\n const fileInput = document.querySelector('#frmImage') as HTMLInputElement;\n const file = fileInput?.files?.[0];\n if (file) {\n const fileReader = new FileReader();\n fileReader.onload = function (event) {\n const uri = (event.target as FileReader).result;\n if (angular.isUndefined($scope.gift.FK_gifts_images) || $scope.gift.FK_gifts_images == null) $scope.gift.FK_gifts_images = {};\n $scope.gift.FK_gifts_images.image = uri;\n $scope.gift.photo = uri;\n $scope.gift.image_id = null; //??\n if (!$scope.$$phase) $scope.$apply();\n };\n fileReader.readAsDataURL(file);\n } else {\n //preview.src = \"\";\n $scope.removeImage();\n }\n });\n };\n\n $scope.getImage = function () {\n if ($scope.gift.FK_gifts_images != null && $scope.gift.FK_gifts_images.image != null) {\n return $scope.gift.FK_gifts_images.image;\n } else if ($scope.gift.image_id != null) {\n return \"/api/Image/GetImageBmp?id=\" + $scope.gift.image_id + \"&maxW=150&maxH2=150\";\n } else {\n return \"assets/img/no-image.png\";\n }\n };\n\n $scope.removeImage = function ($event) {\n $scope.gift.image_id = null;\n if ($scope.gift.FK_gifts_images != null) $scope.gift.FK_gifts_images.image = null;\n $event.preventDefault();\n $event.stopPropagation();\n };\n\n $scope.checkChanges = function () {\n $scope.changesNotSaved = true;\n }\n\n $scope.addQuantities = function () {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: AddQuantityModalView,\n size: \"sm\",\n controller: \"AddQuantitiesGiftsModalCrl\",\n resolve: {\n giftId: function () { return $stateParams.id }\n }\n });\n\n // Response del modal\n $modalInstance.result.then(function (movement) {\n Restangular.all('WarehousesMovements').post(movement).then(function (res) {\n toastr.success($filter('translate')('materials.edit_success'));\n Restangular.one('Gifts', $stateParams.id).get().then(function (result) {\n $scope.gift = result;\n $timeout(function () {\n $scope.loadWharesouseRows();\n $scope.loadGrid();\n }, 200);\n });\n });\n }, function () { });\n }\n }])\n .controller(\"AddQuantitiesGiftsModalCrl\", ['$scope', '$uibModalInstance', 'Restangular', 'modalService', '$filter', '$http', '$stateParams', '$q', 'giftId', function ($scope, $uibModalInstance, Restangular, modalService, $filter, $http, $stateParams, $q, giftId) {\n\n $scope.movement = { wharehouse_id: null, quantity: 0 };\n $scope.selectWarehouses = [];\n Restangular.all('Warehouses').getList().then(function (warehouses) {\n $scope.selectWarehouses = warehouses;\n });\n\n $scope.onSave = function () {\n Restangular.all('Warehouses').customGET(\"GetTotalStockInWarehouse\", { warehouse_id: $scope.movement.warehouse_id, product_id: giftId, type: \"gifts\" }).then(function (res) {\n $scope.totalStock = res;\n //Comprobamos con los numeros negativos que no pongan menos cantidad de la que hay\n if ($scope.movement.quantity < 0) {\n if (parseInt($scope.movement.quantity) < $scope.totalStock * -1) {\n $scope.errorUnits = true;\n }\n else\n $scope.errorUnits = false;\n }\n\n if (!$scope.errorUnits) {\n let movement = {\n gift_id: giftId,\n warehouse_id: $scope.movement.warehouse_id,\n direction: $scope.movement.quantity > 0 ? 'IN' : 'OUT',\n quantity: $scope.movement.quantity,\n notes: $scope.movement.notes\n }\n $uibModalInstance.close(movement);\n }\n });\n }\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n\n }])\n\n;\n\n","angular.module(\"gifts\")\n\n .controller(\"GiftsListCtrl\", ['LoginService','$state', '$rootScope', '$scope', 'Restangular', 'gridService', 'modalService', '$uibModal', '$filter', '$translate', 'datasetsService',\n function (LoginService, $state, $rootScope, $scope, Restangular, gridService, modalService, $uibModal, $filter, $translate, datasetsService) {\n\n $scope.giftsFilter = {};\n let filter = false;\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"GIFTS_WRITE\");\n\n Restangular.all('Providers').getList().then(function (providers) {\n $scope.selectProviders = providers;\n });\n\n\n $rootScope.title = $filter('translate')('gifts.title');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('gifts.title') }\n ];\n\n $scope.gridOptionsGifts = {\n pdfTitle: $filter('translate')('gifts.pdf_title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n enableSorting: true,\n paginationPageSizes: [20, 40, 60],\n paginationPageSize: 20,\n exporterSuppressColumns: [\"image_id\"], //porque con url en vez de la imagen en base64 no se puede generar\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n {\n field: 'image_id',\n enableSorting: false,\n width: 60,\n enableFiltering: false,\n displayName: $filter('translate')('political_affiliations.logo'),\n cellTemplate: \"
\"\n },\n { name: 'name', displayName: $filter('translate')('gifts.name'), enableFiltering: true, enableHiding: false },\n\n {\n name: 'quantity_total', displayName: $filter('translate')('gifts.quantity'), enableFiltering: false, enableHiding: false, enableSorting: false,\n\n },\n { name: 'FK_gifts_provider.name', displayName: $filter('translate')('gifts.provider_name'), enableFiltering: true, enableHiding: false },\n { name: 'notes', displayName: $filter('translate')('gifts.notes'), enableFiltering: true, enableHiding: false },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('gifts.button_edit'), action: 'ui-sref=\"gifts.edit({id:row.entity.id})\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('gifts.button_delete'), action: 'ng-click=\"grid.appScope.deleteDialog(row.entity.id,row.entity.name);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n if (filter) {\n options.name = $scope.giftsFilter.name;\n options.provider_id = $scope.giftsFilter.provider_id;\n }\n\n return Restangular.all('Gifts').getList(options);\n }\n };\n\n $scope.goToEdit = function (rowEntity) {\n $state.go(\"gifts.edit\", { id: rowEntity.id });\n }\n\n\n $scope.deleteDialog = function (id, name) {\n $scope.id = id;\n $scope.name = name;\n modalService.confirm({\n title: $filter('translate')('gifts.button_delete'),\n message: $filter('translate')('gifts.delete_message') + \" \" + $scope.name + \"?\",\n onAccept: function () {\n Restangular.one('Gifts', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('gifts.delete_success'));\n $scope.gridOptionsGifts.gridApi.core.raise.itemDeleted($scope);\n\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n });\n\n };\n\n $scope.export = function () {\n var options = {\n filters: {\n }\n };\n \n datasetsService.exportByType(\"gifts\", options);\n };\n\n\n $scope.searchGifts = function () {\n if (angular.isDefined($scope.gridOptionsGifts.loadData)) {\n filter = true;\n $scope.gridOptionsGifts.loadData(false);\n }\n }\n\n\n }])\n\n ;","import BreadcrumbView from \"../common/breadcrumb/breadcrumb.html\";\nimport GiftsListView from \"./gifts-list.html\";\nimport GiftsEditView from \"./gifts-edit.html\";\n\n\nangular.module(\"gifts\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('gifts', {\n url: \"/gifts\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n })\n\n .state('gifts.list', {\n url: \"/list\",\n controller: \"GiftsListCtrl\", \n template: GiftsListView,\n data: { pageTitle: 'Almacén de regalos' },\n requiredPermission: [\"GIFTS_READ\"]\n }) \n .state('gifts.edit', {\n url: \"/edit/:id\",\n controller: \"GiftsEditCtrl\",\n template: GiftsEditView,\n data: { pageTitle: 'Almacén de regalos' },\n requiredPermission: [\"GIFTS_READ\"]\n })\n }])\n;","import $ from \"jquery\";\n\nangular.module(\"persons_gifts\")\n\n .controller(\"PersonsGiftsEditCtrl\", ['LoginService', '$scope', '$rootScope', '$state', '$stateParams', 'Restangular', 'gridService', '$filter', '$translate', 'modalService', '$uibModal', '$log',\n function (LoginService, $scope, $rootScope, $state, $stateParams, Restangular, gridService, $filter, $translate, modalService, $uibModal, $log) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"PERSONS_GIFTS_WRITE\");\n if ($stateParams.in_out == 'IN') {\n $rootScope.title = $filter('translate')('persons_gifts.in_gifts');\n } else {\n $rootScope.title = $filter('translate')('persons_gifts.out_gifts');\n }\n $scope.viewNotAcceptGiftsLabel = false;\n\n Restangular.all('Warehouses').getList({ entity_type: \"gifts\", entity_id: $stateParams.id }).then(function (warehouses) {\n $scope.selectWarehouses = warehouses;\n });\n\n\n $scope.person_gift = {\n gift_id: \"\",\n event_id: \"\",\n full: false,\n costReadOnly: false,\n show_in_reports: true,\n in_out: $stateParams.in_out,\n not_accept_gifts: false,\n from_person_id: -1,\n to_person_id: -1\n };\n\n $scope.is_IN = $stateParams.in_out == 'IN';\n\n $scope.gift_id = 0;\n $scope.selectedGift = \"\";\n if (angular.isUndefined($stateParams.id) || $stateParams.id == \"\") {\n\n $rootScope.breadcrumb = [\n { title: $filter('translate')('persons_gifts.title'), url: \"persons_gifts.list\" },\n { title: $filter('translate')('persons_gifts.title_add') },\n ];\n\n } else {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('persons_gifts.title'), url: \"persons_gifts.list\" },\n { title: $filter('translate')('persons_gifts.title_edit') },\n ];\n\n Restangular.one('PersonsGifts', $stateParams.id).get().then(function (result) {\n \n $scope.person_gift = result;\n $log.debug($scope.person_gift);\n if ($scope.person_gift.from_person_id != null) {\n Restangular.all(\"Persons\").customGET(\"GetOnlyPersonSimple\", { person_id: $scope.person_gift.from_person_id }).then(function (results) {\n $scope.search.from_person = {\n id: results.id,\n term: results.name + ' ' + results.surname + (results.lastname != null ? ' ' + results.lastname : '')\n };\n if ($scope.person_gift.from_position_id != null) {\n Restangular.all(\"Positions\").customGET(\"GetOnlyPositionSimple\", { position_id: $scope.person_gift.from_position_id }).then(function (res) {\n $scope.search.from_position = {\n id: res.id,\n term: res.FK_positions_tl_positions[0].name\n };\n });\n }\n });\n }\n if ($scope.person_gift.to_person_id != null) {\n Restangular.all(\"Persons\").customGET(\"GetOnlyPersonSimple\", { person_id: $scope.person_gift.to_person_id }).then(function (results) {\n $scope.search.to_person = {\n id: results.id,\n term: results.name + ' ' + results.surname + (results.lastname != null ? ' ' + results.lastname : '')\n };\n if ($scope.person_gift.from_position_id != null) {\n Restangular.all(\"Positions\").customGET(\"GetOnlyPositionSimple\", { position_id: $scope.person_gift.to_position_id }).then(function (res) {\n $scope.search.to_position = {\n id: res.id,\n term: res.FK_positions_tl_positions[0].name\n };\n });\n }\n });\n }\n\n if ($scope.person_gift.from_person_id == null) $scope.person_gift.from_person_id = -1;\n if ($scope.person_gift.to_person_id == null) $scope.person_gift.to_person_id = -1;\n $scope.selectedGift = result.FK_persons_gifts_gifts;\n $scope.person_gift.costReadOnly = result.gift_id != null && result.FK_persons_gifts_gifts.cost != null;\n if ($scope.person_gift.costReadOnly)\n $scope.person_gift.cost = result.FK_persons_gifts_gifts.cost;\n $scope.person_gift.gift_date = new Date($scope.person_gift.gift_date);\n $scope.gift_id = $scope.person_gift.gift_id;\n $scope.initialQuantity = $scope.person_gift.quantity;\n \n if ($scope.person_gift.not_accept_gifts) {\n $scope.viewNotAcceptGiftsLabel = true;\n } else {\n $scope.viewNotAcceptGiftsLabel = false;\n }\n\n });\n }\n\n Restangular.all('Gifts').getList().then(function (gifts) {\n $scope.SelectGifts = gifts;\n $scope.SelectGifts.unshift({\n id: null,\n name: $filter('translate')('persons_gifts.another_gift')\n });\n });\n\n var options = {\n searchName: \"\",\n is_template: false\n };\n Restangular.all('Events/AllEvents').getList(options).then(function (events) {\n $scope.SelectEvents = events;\n $scope.SelectEvents.unshift({\n id: null,\n name: $filter('translate')('persons_gifts.no_event')\n });\n });\n\n $scope.checkQuantity = function () {\n if ($scope.person_gift.gift_id != null && $scope.person_gift.gift_id != \"\") {\n Restangular.all('Warehouses').customGET(\"GetTotalStockInWarehouse\", { warehouse_id: $scope.person_gift.warehouse_id, product_id: $scope.person_gift.gift_id, type: \"gifts\" }).then(function (res) {\n $scope.totalStock = res;\n\n if ($scope.totalStock < parseInt($scope.person_gift.quantity)) {\n $scope.person_gift.full = true;\n }\n else\n $scope.person_gift.full = false;\n\n });\n }\n }\n\n $scope.selectGift = function (gift) {\n $scope.selectedGift = gift;\n $scope.person_gift.costReadOnly = gift.id != null && gift.cost != null;\n if (gift.cost != null)\n $scope.person_gift.cost = gift.cost;\n $scope.checkQuantity()\n \n }\n /* Mensaje de que no acepta regalos.*/\n $scope.selectPerson = function (person) { \n if (person.selected.not_accept_gifts) {\n $scope.viewNotAcceptGiftsLabel = true;\n } else {\n $scope.viewNotAcceptGiftsLabel = false;\n }\n }\n\n $scope.changeWarehouse = function (warehouse_id) {\n $scope.person_gift.warehouse_id = warehouse_id;\n }\n $scope.savePersonGift = function () { \n if ($scope.search.from_person != null) $scope.person_gift.from_person_id = $scope.search.from_person.id;\n if ($scope.search.to_person != null) $scope.person_gift.to_person_id = $scope.search.to_person.id;\n if ($scope.search.from_position != null) $scope.person_gift.from_position_id = $scope.search.from_position.id;\n if ($scope.search.to_position != null) $scope.person_gift.to_position_id = $scope.search.to_position.id;\n\n if (angular.isUndefined($stateParams.id) || $stateParams.id == \"\") {\n Restangular.all('PersonsGifts').post($scope.person_gift).then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('persons_gifts.save_success'));\n $state.go(\"persons_gifts.list\");\n } else {\n $scope.errorMessage = result.message;\n }\n });\n } else {\n $scope.person_gift.put().then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('persons_gifts.edit_success'));\n $state.go(\"persons_gifts.list\");\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n }\n\n $scope.checkDelete = function () {\n var nameGift = $scope.person_gift.name != null ? $scope.person_gift.name : $scope.person_gift.FK_persons_gifts_gifts.name;\n modalService.confirm({\n title: $filter('translate')('persons_gifts.button_delete'),\n message: $filter('translate')('persons_gifts.delete_message') + \" \" + nameGift + \"?\",\n onAccept: function () {\n $scope.person_gift.remove().then(function () {\n toastr.success($filter('translate')('persons_gifts.delete_success'));\n $state.go(\"persons_gifts.list\");\n });\n }\n });\n };\n\n\n $scope.selectImage = function () {\n $(\"#frmImage\").trigger(\"click\");\n $(\"#frmImage\").change(function () {\n var file = document.querySelector('#frmImage');\n /*if (file) {\n var fileReader = new FileReader();\n fileReader.onload = function (event) {\n var uri = event.target.result;\n if (angular.isUndefined($scope.person_gift.FK_persons_gifts_images) || $scope.person_gift.FK_persons_gifts_images == null) $scope.person_gift.FK_persons_gifts_images = {};\n $scope.person_gift.FK_persons_gifts_images.image = uri;\n $scope.person_gift.photo = uri;\n $scope.person_gift.image_id = null; //??\n if (!$scope.$$phase) $scope.$apply();\n };\n fileReader.readAsDataURL(file);\n } else {\n $log.debug(\"entra en el preview.src y no casca?\");\n //preview.src = \"\";\n }*/\n });\n };\n\n $scope.getImage = function () {\n if ($scope.person_gift.FK_persons_gifts_images != null && $scope.person_gift.FK_persons_gifts_images.image != null) {\n return $scope.person_gift.FK_persons_gifts_images.image;\n } else if ($scope.person_gift.image_id != null) {\n return \"/api/Image/GetImageBmp?id=\" + $scope.person_gift.image_id + \"&maxW=150&maxH2=150\";\n } else {\n return \"assets/img/no-image.png\";\n }\n };\n\n $scope.removeImage = function ($event) {\n $scope.person_gift.image_id = null;\n $scope.person_gift.photo = null;\n if ($scope.person_gift.FK_persons_gifts_images != null) $scope.person_gift.FK_persons_gifts_images.image = null;\n if (typeof ($event) !== \"undefined\") {\n $event.preventDefault();\n $event.stopPropagation();\n }\n };\n\n $scope.search = {\n \"from_person\": null,\n \"from_position\": null,\n \"to_person\": null,\n \"to_position\": null,\n positions: [],\n persons: [],\n person_min_length: 3,\n position_min_length: 3\n };\n\n $scope.getPersonsSearch = function (val) {\n if (val == null) {\n val = '';\n }\n let ret = [];\n ret = Restangular.all('search/person/' + val).getList().then(function (searchTerms) {\n return searchTerms;\n });\n\n return ret;\n };\n\n $scope.personFromSelected = function ($item, $model, $label) {\n let today = new Date();\n $scope.search.position_min_length = 0;\n Restangular.all(\"Persons\").customGET(\"GetPositionsFromPerson\", { person_id: $item.id }).then(function (results) {\n if (results.FK_persons_positions_persons != undefined && results.FK_persons_positions_persons.length > 0) {\n $scope.search.positions = [];\n angular.forEach(results.FK_persons_positions_persons, function (row) {\n if (row.to_date >= today || row.to_date == null) {\n $scope.search.from_position = null;\n $scope.search.positions.push({\n id: row.FK_persons_positions_positions.id, // Este es el position_id de cara a luego usarlo para buscar el correo\n term: row.FK_persons_positions_positions.name\n });\n }\n });\n\n }\n });\n };\n $scope.personToSelected = function ($item, $model, $label) {\n let today = new Date();\n $scope.search.position_min_length = 0;\n Restangular.all(\"Persons\").customGET(\"GetPositionsFromPerson\", { person_id: $item.id }).then(function (results) {\n if (results.FK_persons_positions_persons != undefined && results.FK_persons_positions_persons.length > 0) {\n $scope.search.positions = [];\n angular.forEach(results.FK_persons_positions_persons, function (row) {\n if (row.to_date >= today || row.to_date == null) {\n $scope.search.to_position = null;\n $scope.search.positions.push({\n id: row.FK_persons_positions_positions.id, // Este es el position_id de cara a luego usarlo para buscar el correo\n term: row.FK_persons_positions_positions.name\n });\n }\n });\n\n }\n });\n };\n\n $scope.getPositionsSearch = function (val) {\n if (val == null) {\n val = '';\n }\n let ret = [];\n if ($scope.search.from_person != null && $scope.search.from_person.id !== undefined) {\n angular.forEach($scope.search.positions, function (row) {\n if (row.term.includes(val)) {\n ret.push(row);\n }\n });\n } else {\n ret = Restangular.all('search/position/' + val).getList().then(function (searchTerms) {\n return searchTerms;\n });\n }\n return ret;\n };\n\n\n }])\n;\n\n","angular.module(\"persons_gifts\")\n\n .controller(\"PersonsGiftsListCtrl\", ['LoginService', '$rootScope', '$scope', 'Restangular', 'gridService', 'modalService', '$uibModal', '$filter', '$translate','$state', 'datasetsService', '$log',\n function (LoginService, $rootScope, $scope, Restangular, gridService, modalService, $uibModal, $filter, $translate, $state, datasetsService, $log) {\n \n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"PERSONS_GIFTS_WRITE\");\n\n $rootScope.title = $filter('translate')('persons_gifts.title');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('persons_gifts.title') }\n ];\n\n $scope.person_gift = { in_out: 'OUT' };\n\n $scope.gridOptionsPersonsGiftsIn = {\n pdfTitle: $filter('translate')('persons_gifts.in_gifts'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n enableSorting: true, \n paginationPageSizes: [20, 40, 60],\n paginationPageSize: 20,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n exporterFieldCallback: function (grid, row, col, value) {\n if (col.name == \"from_name\") {\n if (row.entity.from_person_id != null) {\n return row.entity.FK_persons_gifts_persons1.surname + \" \" + (row.entity.FK_persons_gifts_persons1.lastname != null ? row.entity.FK_persons_gifts_persons1.lastname : \"\") + \", \" + row.entity.FK_persons_gifts_persons1.name;\n } else {\n return row.entity.from_name;\n }\n }\n if (col.name == \"to_name\") {\n if (row.entity.to_person_id != null) {\n return row.entity.FK_persons_gifts_persons.surname + \" \" + (row.entity.FK_persons_gifts_persons.lastname != null ? row.entity.FK_persons_gifts_persons.lastname : \"\") + \", \" + row.entity.FK_persons_gifts_persons.name;\n } else {\n return row.entity.to_name;\n }\n }\n\n return value;\n },\n\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n {\n name: 'gift_date', width: 100, displayName: $filter('translate')('persons_gifts.gift_date'), cellFilter: 'toLocalDate | date:\\'dd/MM/yyyy\\'',\n filterHeaderTemplate: '
' + \n $filter('translate')('persons_gifts.date_from') + '' +\n $filter('translate')('persons_gifts.date_to') + '' +\n '
',\n enableFiltering: true, enableColumnMenu: false,\n customFormatFn: function (value) {\n var fecha = new Date(value);\n return $filter('date')(fecha, 'dd/MM/yyyy');\n },\n },\n {\n name: 'from_name', field: 'from_name', displayName: $filter('translate')('persons_gifts.from_name'), enableFiltering: true, enableHiding: false,\n cellTemplate: '
{{row.entity.FK_persons_gifts_persons1.surname}} {{row.entity.FK_persons_gifts_persons1.lastname}}, {{row.entity.FK_persons_gifts_persons1.name}}
{{row.entity.from_name}}
',\n },\n {\n name: 'to_name', field: 'to_name',\n displayName: $filter('translate')('persons_gifts.person_to'), enableFiltering: true, enableHiding: false,\n cellTemplate: '
{{row.entity.FK_persons_gifts_persons.surname}} {{row.entity.FK_persons_gifts_persons.lastname}}, {{row.entity.FK_persons_gifts_persons.name}}
{{row.entity.to_name}}
',\n },\n // { name: 'person_lastname', field: 'FK_persons_gifts_persons.lastname', displayName: $filter('translate')('persons_gifts.person_lastname'), enableFiltering: true, enableHiding: false },\n { name: 'event_name', field: 'FK_persons_gifts_events.name', displayName: $filter('translate')('persons_gifts.event'), enableFiltering: true, enableHiding: false },\n { name: 'gift_name', field: 'name', displayName: $filter('translate')('persons_gifts.gift'), enableFiltering: true, enableHiding: false },\n { name: 'quantity', width: 80, displayName: $filter('translate')('persons_gifts.quantity'), enableFiltering: true, enableHiding: false },\n { name: 'notes', displayName: $filter('translate')('persons_gifts.notes'), enableFiltering: true, enableHiding: false },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('persons_gifts.button_edit'), action: 'ui-sref=\"persons_gifts.edit({in_out:grid.appScope.person_gift.in_out, id:row.entity.id})\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('persons_gifts.button_delete'), action: 'ng-click=\"grid.appScope.deleteInDialog(row.entity.id,row.entity.FK_persons_gifts_persons.name, row.entity.FK_persons_gifts_persons.surname);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n options.in_out = 'IN';\n options.gift_date_from = $scope.person_gift.dateFrom; \n options.gift_date_to = $scope.person_gift.dateTo;\n return Restangular.all('PersonsGifts').getList(options);\n }\n };\n\n $scope.goToEdit = function (rowEntity) {\n $state.go(\"persons_gifts.edit\", { in_out: $scope.person_gift.in_out, id: rowEntity.id });\n }\n\n $scope.deleteInDialog = function (id, name, surname) {\n $scope.id = id;\n modalService.confirm({\n title: $filter('translate')('persons_gifts.button_delete'),\n message: $filter('translate')('persons_gifts.delete_message') + \" \" + name +\" \"+ surname+\"?\",\n onAccept: function () {\n Restangular.one('PersonsGifts', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('persons_gifts.delete_success'));\n $scope.gridOptionsPersonsGiftsIn.gridApi.core.raise.itemDeleted($scope);\n \n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n });\n\n };\n \n $scope.gridOptionsPersonsGiftsOut = {\n pdfTitle: $filter('translate')('persons_gifts.out_gifts'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n enableSorting: true,\n paginationPageSizes: [20, 40, 60],\n paginationPageSize: 20,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n exporterFieldCallback: function (grid, row, col, value) {\n if (col.name == \"from_name\") {\n if (row.entity.from_person_id != null) {\n return row.entity.FK_persons_gifts_persons1.surname + \" \" + (row.entity.FK_persons_gifts_persons1.lastname != null ? row.entity.FK_persons_gifts_persons1.lastname : \"\") + \", \" + row.entity.FK_persons_gifts_persons1.name;\n } else {\n return row.entity.from_name;\n }\n }\n if (col.name == \"to_name\") {\n if (row.entity.to_person_id != null) {\n return row.entity.FK_persons_gifts_persons.surname + \" \" + (row.entity.FK_persons_gifts_persons.lastname != null ? row.entity.FK_persons_gifts_persons.lastname : \"\") + \", \" + row.entity.FK_persons_gifts_persons.name;\n } else {\n return row.entity.to_name;\n }\n }\n\n return value;\n },\n\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n {\n name: 'gift_date',width: 100, displayName: $filter('translate')('persons_gifts.gift_date'), cellFilter: 'toLocalDate | date:\\'dd/MM/yyyy\\'',\n filterHeaderTemplate: '
' +\n $filter('translate')('persons_gifts.date_from') + '' +\n $filter('translate')('persons_gifts.date_to') + '' +\n '
',\n enableFiltering: true, enableColumnMenu: false,\n customFormatFn: function (value) {\n var fecha = new Date(value);\n return $filter('date')(fecha, 'dd/MM/yyyy');\n },\n },\n {\n name: 'from_name', field: 'from_name', displayName: $filter('translate')('persons_gifts.from_name'), enableFiltering: true, enableHiding: false,\n cellTemplate: '
{{row.entity.FK_persons_gifts_persons1.surname}} {{row.entity.FK_persons_gifts_persons1.lastname}}, {{row.entity.FK_persons_gifts_persons1.name}}
{{row.entity.from_name}}
',\n },\n {\n name: 'to_name', field: 'to_name',\n displayName: $filter('translate')('persons_gifts.person_to'), enableFiltering: true, enableHiding: false,\n cellTemplate: '
{{row.entity.FK_persons_gifts_persons.surname}} {{row.entity.FK_persons_gifts_persons.lastname}}, {{row.entity.FK_persons_gifts_persons.name}}
{{row.entity.to_name}}
',\n },\n //{ name: 'person_name', field: 'FK_persons_gifts_persons.name', displayName: $filter('translate')('persons_gifts.person_name'), enableFiltering: true, enableHiding: false },\n //{ name: 'person_surname', field: 'FK_persons_gifts_persons.surname', displayName: $filter('translate')('persons_gifts.person_surname'), enableFiltering: true, enableHiding: false },\n // { name: 'person_lastname', field: 'FK_persons_gifts_persons.lastname', displayName: $filter('translate')('persons_gifts.person_lastname'), enableFiltering: true, enableHiding: false },\n { name: 'event_name', field: 'FK_persons_gifts_events.name', displayName: $filter('translate')('persons_gifts.event'), enableFiltering: true, enableHiding: false },\n { name: 'gift_name', field: 'name', displayName: $filter('translate')('persons_gifts.gift'), enableFiltering: true, enableHiding: false },\n { name: 'quantity', width: 80, displayName: $filter('translate')('persons_gifts.quantity'), enableFiltering: true, enableHiding: false },\n { name: 'notes', displayName: $filter('translate')('persons_gifts.notes'), enableFiltering: true, enableHiding: false },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('persons_gifts.button_edit'), action: 'ui-sref=\"persons_gifts.edit({in_out:grid.appScope.person_gift.in_out, id:row.entity.id})\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('persons_gifts.button_delete'), action: 'ng-click=\"grid.appScope.deleteOutDialog(row.entity.id,row.entity.FK_persons_gifts_persons.name);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n options.in_out = 'OUT';\n options.gift_date_from = $scope.dateFrom;\n options.gift_date_to = $scope.dateTo;\n return Restangular.all('PersonsGifts').getList(options);\n }\n };\n\n\n\n $scope.deleteOutDialog = function (id, name) { \n $scope.id = id;\n $log.debug(name);\n modalService.confirm({\n title: $filter('translate')('persons_gifts.button_delete'),\n message: $filter('translate')('persons_gifts.delete_message') + \" \" + name + \"?\",\n onAccept: function () {\n Restangular.one('PersonsGifts', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('persons_gifts.delete_success'));\n $scope.gridOptionsPersonsGiftsOut.gridApi.core.raise.itemDeleted($scope);\n\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n });\n\n };\n\n $scope.export = function () {\n var options = {\n filters: {\n IN_OUT: $scope.person_gift.in_out\n }\n };\n\n datasetsService.exportByType(\"persons_gifts\", options);\n };\n \n }])\n\n;","import BreadcrumbView from \"../../common/breadcrumb/breadcrumb.html\";\nimport PersonsGiftsListView from \"./persons_gifts-list.html\";\nimport PersonsGiftsEditView from \"./persons_gifts-edit.html\";\n\n\nangular.module(\"persons_gifts\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('persons_gifts', {\n url: \"/persons_gifts\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n })\n\n .state('persons_gifts.list', {\n url: \"/list\",\n controller: \"PersonsGiftsListCtrl\",\n template: PersonsGiftsListView,\n data: { pageTitle: 'Regalos' },\n requiredPermission: [\"PERSONS_GIFTS_READ\"]\n }) \n .state('persons_gifts.edit', {\n url: \"/edit/:in_out/:id\",\n controller: \"PersonsGiftsEditCtrl\",\n template: PersonsGiftsEditView,\n data: { pageTitle: 'Regalos' },\n requiredPermission: [\"PERSONS_GIFTS_READ\"]\n })\n }])\n;","angular.module(\"groups\")\n\n .controller(\"EndPositionAndAddNewPositionModalCtrl\", ['endPosition', 'treeService', 'LoginService', '$scope', '$uibModalInstance', 'Restangular', 'modalService', '$filter', '$http', '$stateParams', '$q', '$uibModal', '$rootScope', '$log',\n function (endPosition, treeService, LoginService, $scope, $uibModalInstance, Restangular, modalService, $filter, $http, $stateParams, $q, $uibModal, $rootScope, $log) {\n\n $scope.showError = false;\n $scope.allowWrite = true;\n\n $scope.persons = {\n to_date: (endPosition == true ? new Date() : null),\n from_date: new Date(),\n position_treatment_id: null,\n person_treatment_id: null\n };\n $scope.endPosition = endPosition;\n\n let loadGroups = function (reload) {\n if (angular.isDefined($scope.personGroups) && !reload) return;\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + '/Groups/GetGroupsPositions'\n }).then(function (results, status, headers, config) {\n var data = treeService.groups(results.data.rows, null);\n $scope.personGroups = data;\n });\n };\n\n loadGroups(false);\n\n let loadPersonsTreatments = function (reload) {\n if (angular.isDefined($scope.personTreatments) && !reload) return;\n Restangular.all('PersonsTreatments').getList().then(function (treatments) {\n $scope.personTreatments = treatments;\n $scope.persons.person_treatment_id = treatments.filter(function (item) {\n return item.person_default === true;\n })[0].id;\n $scope.persons.position_treatment_id = treatments.filter(function (item) {\n return item.position_default === true;\n })[0].id;\n\n });\n };\n loadPersonsTreatments(false);\n\n //cargamos cargos en grupo\n $scope.getPositions = function (group_id) {\n var positions = [];\n if (angular.isDefined($scope.personGroups)) {\n var group = $filter('filter')($scope.personGroups, { id: group_id }, true)[0];\n if (group != null) positions = group.FK_positions_groups;\n }\n return positions;\n };\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n $scope.save = function () {\n \n if ($scope.persons.to_date != null) $scope.persons.to_date.setHours(0, 0, 0, 0);\n if ($scope.persons.from_date != null) $scope.persons.from_date.setHours(0, 0, 0, 0);\n $log.debug($scope.persons)\n $uibModalInstance.close($scope.persons);\n }\n\n}])\n\n ;","import './groups';\nimport './groups-list';\nimport './groups-edit';\nimport './attended_events-modal';\nimport './extend_positions-modal';\nimport './EndPositionAndAddNewPosition';\nimport './import/fullGroup-import'; ","angular.module(\"groups\")\n\n .controller(\"AttendedEventsPositionsModalCtrl\", ['LoginService', '$scope', '$uibModalInstance', 'Restangular', 'modalService', '$filter', 'position_id', 'group_id', '$http', 'treeService', '$uibModal', 'gridService', '$q', '$interval', '$timeout', 'uiGridConstants', function (LoginService, $scope, $uibModalInstance, Restangular, modalService, $filter, position_id, group_id, $http, treeService, $uibModal, gridService, $q, $interval, $timeout, uiGridConstants) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"GROUPS_WRITE\");\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n var position = (position_id != null ? true : false);\n\n var columnDefs = [];\n if (position) {\n columnDefs.push({ name: 'id', visible: false, exporterSuppressExport: true },\n {\n name: 'date', field: 'FK_events_guests_events.date_from', displayName: $filter('translate')('persons.date'),\n type: 'date', cellFilter: 'toLocalDate | date:\\'dd/MM/yyyy\\'', enableColumnMenu: false, enableFiltering: false, width: 100,\n customFormatFn: function (value) {\n if (value != null) {\n var fecha = new Date(value);\n return $filter('date')(fecha, 'dd/MM/yyyy');\n }\n return \"\";\n },\n },\n { name: 'event_name', field: 'FK_events_guests_events.name', displayName: $filter('translate')('persons.event_name'), enableColumnMenu: false, enableFiltering: true, enableHiding: false },\n {\n name: 'name', field: 'FK_events_guests_persons.name', displayName: $filter('translate')('persons.name'), enableColumnMenu: false, enableFiltering: false, enableHiding: false,\n cellTemplate: '
{{row.entity.FK_events_guests_persons.name}} {{row.entity.FK_events_guests_persons.surname}}
'\n },\n {\n name: 'confirmation_status', displayName: $filter('translate')('events.guests.status'), enableColumnMenu: false, enableFiltering: false, enableHiding: false, width: 100,\n cellTemplate: '
{{\\'events.guests.pending\\' | translate}}
' +\n '
{{\\'events.guests.confirmed\\' | translate}}
' +\n '
{{\\'events.guests.delegated\\' | translate}}
' +\n '
{{\\'events.guests.rejected\\' | translate}}
',\n customFormatFn: function (value) {\n if (value != null) {\n return $filter('translate')('events.guests.' + value);\n }\n return \"\";\n },\n });\n } else {\n columnDefs.push({ name: 'id', visible: false, exporterSuppressExport: true },\n {\n name: 'date', field: 'FK_events_guests_events.date_from', displayName: $filter('translate')('persons.date'),\n type: 'date', cellFilter: 'toLocalDate | date:\\'dd/MM/yyyy\\'', enableColumnMenu: false, enableFiltering: false, width: 100,\n customFormatFn: function (value) {\n if (value != null) {\n var fecha = new Date(value);\n return $filter('date')(fecha, 'dd/MM/yyyy');\n }\n return \"\";\n },\n },\n { name: 'event_name', field: 'FK_events_guests_events.name', displayName: $filter('translate')('persons.event_name'), enableColumnMenu: false, enableFiltering: true, enableHiding: false },\n { name: 'FK_events_guests_positions.FK_positions_tl_positions.name', field: 'FK_events_guests_positions.FK_positions_tl_positions[0].name', displayName: $filter('translate')('persons.event_name'), enableColumnMenu: false, enableFiltering: false, enableHiding: false },\n { name: 'total_guests', field: 'total_guests', displayName: $filter('translate')('events.guests.guests'), enableColumnMenu: false, enableFiltering: false, enableHiding: false }\n );\n }\n\n\n\n /* GRIDS */\n $scope.gridAttendedEvents = {\n pdfTitle: $filter('translate')('persons.attended_events'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n paginationPageSizes: [10, 20, 30],\n paginationPageSize: 10,\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: columnDefs,\n getData: function (options) {\n if (position) {\n options.position_id = position_id;\n return Restangular.all('Positions/AttendedEvents').getList(options);\n } else {\n options.group_id = group_id;\n return Restangular.all('Groups/AttendedEvents').getList(options);\n }\n }\n };\n\n\n}])\n;","import ExtendPositionsInstructionsModalView from \"./ExtendPositionsInstructionsModal.html\";\n\n\nangular.module(\"groups\")\n\n .controller(\"ExtendPositionsModalCtrl\", ['LoginService', '$scope', '$uibModalInstance', 'Restangular', 'modalService', '$filter', 'group_id', '$http', 'treeService', '$uibModal', 'gridService', '$q', '$interval', '$timeout', 'uiGridConstants', '$log',\n function (LoginService, $scope, $uibModalInstance, Restangular, modalService, $filter, group_id, $http, treeService, $uibModal, gridService, $q, $interval, $timeout, uiGridConstants, $log) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"GROUPS_WRITE\");\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n $scope.selectedRows = [];\n $scope.origin_group = group_id;\n $scope.destiny_group = 0;\n\n $scope.getGroupsSearch = function (val) {\n return Restangular.all('search/group/' + val).getList().then(function (searchTerms) {\n return searchTerms;\n });\n };\n\n $scope.groupSelected = function ($item, $model, $label) {\n $scope.destiny_group = $item.id;\n };\n\n $scope.saveExtendPosition = function (item) {\n let ids = [];\n $scope.gridOptionsPersonPosition.gridApi.selection.getSelectedRows().forEach(elm => ids.push(elm.id));\n var params = { new_group_name: item.name, origin_group_id: $scope.origin_group, destiny_group_id: $scope.destiny_group, group_date: item.date, person_positions: ids.toString() };\n Restangular.all('Groups').customPOST({}, \"ExtendPositions\", params).then(function (result) {\n $uibModalInstance.close(result);\n });\n };\n\n // Modal con las instrucciones \n $scope.gridOptionsPersonPosition = {\n pdfTitle: $filter('translate')('persons.addresses'),\n enablePaginationControls: true,\n paginationPageSizes: [5, 10, 15],\n paginationPageSize: 10,\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n this.gridApi.core.on.rowsRendered($scope, callbackFunctionItemChange);\n this.gridApi.selection.on.rowSelectionChanged($scope, callbackFunctionRowSelected);\n this.gridApi.selection.on.rowSelectionChangedBatch($scope, callbackFunctionRowSelected);\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n { name: 'person_name', field: 'FK_persons_positions_persons.fullname', displayName: $filter('translate')('persons.name'), enableFiltering: true },\n { name: 'position_name', field: 'FK_persons_positions_positions.FK_positions_tl_positions[0].name', displayName: $filter('translate')('positions.name'), enableFiltering: true },\n ],\n getData: function (options) {\n var deferred = $q.defer();\n options.group_id = $scope.origin_group;\n Restangular.all('PersonsPositions').customGET(\"GetPersonsPositionsByGroup\", options).then(function (results) {\n if (results) {\n var data = results.rows;\n data.totalRows = results.totalRows;\n $scope.totalRows = results.totalRows;\n deferred.resolve(data);\n }\n })\n\n return deferred.promise;\n }\n };\n\n let callbackFunctionRowSelected = function (row, evt) {\n let addAll = row.length > 1;\n if (!addAll) {\n //buscamos si ya existe la persona añadida\n var index = $scope.selectedRows.map(function (e) { return e; }).indexOf(row.entity.id);\n if (index < 0) {\n if (row.isSelected) {\n $scope.selectedRows.push(row.entity.id);\n } else {\n $scope.selectedRows.splice(index, 1);\n }\n } else {\n if (!row.isSelected) $scope.selectedRows.splice(index, 1);\n }\n } else {\n if (row[0].isSelected) {\n //se ha seleccionado todo.\n $scope.selectedRows = [];\n for (let i = 0; i < $scope.gridOptionsPersonPosition.gridApi.grid.options.totalItems; i++) { $scope.selectedRows.push(i); };\n } else {\n $scope.selectedRows = [];\n }\n }\n $log.debug($scope.selectedRows);\n }\n\n let callbackFunctionItemChange = function () {\n $timeout(function () {\n for (var i = 0; i < $scope.gridOptionsPersonPosition.data.length; i++) {\n var row = $scope.gridOptionsPersonPosition.data[i];\n for (var select = 0; select < $scope.selectedRows.length; select++) {\n let selected = $scope.selectedRows[select];\n if (row.id == selected) {\n $scope.gridOptionsPersonPosition.gridApi.selection.toggleRowSelection(row);\n break\n }\n };\n }\n }, 350);\n }\n\n $scope.openInstructions = function () {\n let modalInstance = $uibModal.open({\n template: ExtendPositionsInstructionsModalView,\n controller: \"ExtendPositionsInstructionsModalCtrl\",\n size: \"lg\",\n scope: $scope,\n resolve: function () {\n\n }\n });\n\n };\n\n }])\n .controller(\"ExtendPositionsInstructionsModalCtrl\", ['$scope', '$uibModal', '$uibModalInstance', function ($scope, $uibModal, $uibModalInstance) {\n\n $scope.onClose = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n }])\n;","import GroupsDeleteModalView from \"./GroupsDeleteModal.html\";\nimport PositionModalView from \"./PositionModal.html\";\nimport GroupGroupModalView from \"./GroupGroupModal.html\";\nimport HistoricModalView from \"./HistoricModal.html\";\nimport GroupContactModalView from \"./GroupContactModal.html\";\nimport GroupAddressModalView from \"./GroupAddressModal.html\";\nimport ExtendPositionsModalView from \"./ExtendPositionsModal.html\";\nimport AttendedEventsModalView from \"./AttendedEventsModal.html\";\nimport InstitutionEditModalView from \"../institutions/InstitutionEditModal.html\";\nimport PositionMailModalView from \"./PositionMailModal.html\";\nimport PositionAddressModalView from \"./PositionAddressModal.html\";\nimport PositionContactModalView from \"./PositionContactModal.html\";\nimport EndPositionAndAddNewPositionView from \"./EndPositionAndAddNewPosition.html\";\nimport SearchPersonsModalView from \"./searchPersonsModal.html\";\nimport SearchGroupModalView from \"../events/guests/searchGroupModal.html\";\n\n\n\nimport toastr from 'toastr';\n\n\nangular.module(\"groups\")\n\n .controller(\"GroupsEditCtrl\", ['LoginService', '$scope', '$rootScope', '$controller', '$state', '$stateParams', 'Restangular', '$uibModal', 'modalService', '$compile', 'gridService', '$filter', '$translate', 'treeService', '$q', '$http', 'uiGridConstants', '$timeout','datasetsService', '$log',\n function (LoginService, $scope, $rootScope, $controller, $state, $stateParams, Restangular, $uibModal, modalService, $compile, gridService, $filter, $translate, treeService, $q, $http, uiGridConstants, $timeout, datasetsService, $log) {\n \n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"GROUPS_WRITE\");\n $scope.allowDeleteDescendants = LoginService.permissionExist(\"GROUPS_DESCENDANTS_DELETE\");\n\n $rootScope.title = $filter('translate')('groups.title');\n\n $scope.group_id = $stateParams.id;\n $scope.buttonCancel = true;\n $scope.changesNotSaved = false;\n\n $scope.group = {\n FK_groups_groups_groups1: []\n };\n\n $scope.search = {};\n $scope.showPositions = true;\n $scope.hasSearched = false;\n\n $scope.prepareTitle = function () {\n Restangular.all('Groups').customGET(\"GetGroupRoute\", { group_id: $scope.group_id }).then(function (results) {\n if (results) {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('groups.title'), url: \"groups.list\" },\n ];\n angular.forEach(results, function (data) {\n $rootScope.breadcrumb.push({ title: data.fullname, url: \"groups.edit({ id: \" + data.id + \" })\" });\n }); \n }\n });\n };\n\n $scope.groupOptions = function (getGroupId, fromView, callbackClose) {\n if (angular.isDefined(getGroupId) && getGroupId != null) {\n $scope.group_id = getGroupId();\n $scope.fromView = fromView;\n } else {\n $scope.group_id = \"\";\n }\n $scope.callbackClose = callbackClose;\n $scope.buttonCancel = false;\n $scope.comeFromPersons = true;\n $scope.configure();\n };\n\n $scope.configure = function () {\n if (angular.isUndefined($scope.group_id) || $scope.group_id == \"\") {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('groups.title'), url: \"groups.list\" },\n { title: $filter('translate')('groups.add') }\n ];\n $scope.group.FK_positions_groups = [];\n $scope.group.FK_groups_groups_groups1 = [];\n $scope.group.FK_groups_contacts_groups = [];\n $scope.group.FK_groups_addresses_groups = [];\n // Si creamos un grupo nuevo, le pasamos el group_type\n $scope.group.group_type = $stateParams.group_type;\n\n // LOGS\n $log.debug($scope.group.group_type);\n } else {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('groups.title'), url: \"groups.list\" },\n { title: $filter('translate')('groups.title_edit') },\n ];\n Restangular.one('Groups', $scope.group_id).get().then(function (results) {\n $scope.group = results;\n $scope.gridListPosition.data = $scope.group.FK_positions_groups;\n $scope.gridGroupContactInfo.data = $scope.group.FK_groups_contacts_groups;\n $scope.gridGroupAddresses.data = $scope.group.FK_groups_addresses_groups;\n if ($scope.group.parent_group_id != null) $scope.group.parent_group_id = parseInt($scope.group.parent_group_id);\n else $scope.group.parent_group_id = undefined;\n $scope.gridDesciendeDeOptions.loadData(false);\n if (!$scope.$$phase) $scope.$apply();\n\n // Si es un grupo interno no lo dejamos modificar\n if ($scope.group.blocked == true) $scope.allowWrite = false;\n $scope.prepareTitle();\n });\n }\n $scope.changePositionsVisibility = function (showPosition) {\n $scope.showPositions = showPosition;\n if (showPosition && (angular.isUndefined($scope.group_id) || $scope.group_id === \"\")) {\n $scope.showPositions = false;\n }\n };\n\n /* \n Eliminado, ahora se hace una malla de grupos.\n * var options = {}\n options.group_id = $scope.group_id;\n Restangular.all('Groups').getList(options).then(function (results) {\n $scope.selectParentGroup = treeService.groups(results, null);\n var itemNull = {\n id: null,\n name: $filter('translate')('groups.no_desciende_de_nadie'),\n color: \"#cecece\"\n }\n $scope.selectParentGroup.unshift(itemNull);\n if (!$scope.$$phase) $scope.$apply();\n });\n */\n\n $scope.setColorParent = function (color) {\n $scope.group.color = color;\n };\n\n $scope.export = function () {\n var options = {\n recursiveElementId: $scope.group_id\n };\n datasetsService.exportByType(\"positions\", options);\n };\n\n $scope.gridListPosition = {\n pdfTitle: $filter('translate')('persons.addresses'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n enablePaginationControls: false,\n paginationPageSize: 200,\n paginationPageSizes: [200],\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n {\n name: 'name', displayName: $filter('translate')('groups.name'), enableFiltering: true, enableHiding: false, enableColumnMenu: false, cellTemplate: \"
\" + \"{{row.entity.name}}\" +\n \" \" + \"
\" },\n {\n name: ' ', width: 250, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: \"Histórico\", action: 'ng-click=\"grid.appScope.personsPositionHistoric(row.entity.id, row.entity.name);\" ng-if=\"row.entity.id\"', cssIconClass: \"fa fa-history\" },\n { title: \"Editar\", action: ' ng-click=\"grid.appScope.addPositions(row.entity.id, row.entity);\"', cssIconClass: \"fa fa-edit\" },\n { title: \"Borrar\", action: 'ng-click=\"grid.appScope.deletePositionDialog(row.entity.id,row.entity.name, row.entity);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ]\n };\n\n /* GRIDS */\n\n $scope.gridGroupContactInfo = {\n pdfTitle: $filter('translate')('persons.contact_data'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n enablePaginationControls: false,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n $timeout(function () {\n gridApi.grid.sortColumn(gridApi.grid.columns[3], uiGridConstants.ASC);\n // gridApi.grid.sortColumn(gridApi.grid.columns[1], uiGridConstants.ASC,true);\n gridApi.grid.notifyDataChange(uiGridConstants.dataChange.ALL);\n });\n },\n columnDefs: [\n { name: 'id', visible: false, exporterSuppressExport: true },\n { name: 'FK_groups_contacts_groups_contacts_types.name', displayName: $filter('translate')('persons.contact_type') },\n { name: 'FK_groups_contacts_groups_contacts_types.order', displayName: $filter('translate')('persons.contact_type'), visible: false },\n { name: 'value', displayName: $filter('translate')('persons.value'), enableColumnMenu: false, enableFiltering: false, enableHiding: false },\n { name: 'notes', displayName: $filter('translate')('persons.notes'), enableColumnMenu: false, enableFiltering: false, visible: true },\n {\n name: ' ', width: 100, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionIconTemplate([\n { title: \"\", action: 'ng-click=\"grid.appScope.addGroupContactDialog(row.entity)\"', cssIconClass: \"fa fa-edit\" },\n { title: \"\", action: 'ng-click=\"grid.appScope.deleteGroupContactInfo(row.entity);\" ng-if=\"grid.appScope.allowWrite\" ', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n }\n ]\n };\n\n $scope.gridGroupAddresses = {\n pdfTitle: $filter('translate')('persons.addresses'),\n exporterMenuCsv: true,\n rowHeight: 45,\n enableGridMenu: true,\n enablePaginationControls: false,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, exporterSuppressExport: true },\n { name: 'FK_groups_addresses_groups_addresses_scopes.name', displayName: $filter('translate')('persons.contact_scope'), width: 150 },\n {\n name: 'address_line_1', displayName: $filter('translate')('persons.address_line_1'),\n cellTemplate: '
{{row.entity.address_line_1}}
{{row.entity.postal_code}}, {{row.entity.city}}
'\n\n },\n { name: 'notes', displayName: $filter('translate')('persons.notes') },\n /*{ name: 'address_line_2', displayName: $filter('translate')('persons.address_line_2'), enableColumnMenu: false, enableFiltering: false, visible: false },\n { name: 'postal_code', displayName: $filter('translate')('persons.postal_code'), enableColumnMenu: false, enableFiltering: false },\n { name: 'city', displayName: $filter('translate')('persons.city'), enableColumnMenu: false, enableFiltering: false },\n { name: 'state', displayName: $filter('translate')('persons.state'), enableColumnMenu: false, enableFiltering: false, enableHiding: false },\n { name: 'FK_groups_addresses_countries.name', displayName: $filter('translate')('persons.countries'), visible: false },*/\n {\n name: ' ', width: 100, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionIconTemplate([\n { title: \"\", action: 'ng-click=\"grid.appScope.addGroupAddressDialog(row.entity)\"', cssIconClass: \"fa fa-edit\" },\n { title: \"\", action: 'ng-click=\"grid.appScope.deleteGroupAddress(row.entity);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n }\n ]\n };\n };\n\n $scope.gridDesciendeDeOptions = {\n pdfTitle: $filter('translate')('groups.desciende_de'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n showTreeExpandNoChildren: false,\n paginationPageSizes: [50, 200, 500],\n paginationPageSize: 50,\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n exporterFieldCallback: function (grid, row, col, value) {\n if (col.name === 'customName') {\n return row.entity.customNamePDF;\n } else {\n return value;\n }\n\n },\n columnDefs: [\n { name: 'id', visible: false, exporterSuppressExport: true },\n {\n name: 'customName', displayName: $filter('translate')('groups.name'), enableFiltering: false,\n enableHiding: false, cellTemplate: '
'\n\n },\n {\n name: 'is_parent', displayName: $filter('translate')('groups.is_parent'), enableFiltering: false, width: 100,\n enableHiding: false, enableColumnMenu: false, cellTemplate: \"
\" +\n \" \" +\n \"
-
\",\n }\n ],\n getData: function (options) {\n var deferred = $q.defer();\n options.group_id = $stateParams.id;\n options.customName = $scope.search.name;\n options.parent_list = _.map($scope.group.FK_groups_groups_groups1, function (relation) { return relation.parent_group_id; });\n Restangular.all('GroupsGroups').getList(options).then(function (results) {\n var filledList = _.map(results, function (group) {\n group.is_parent = _.filter($scope.group.FK_groups_groups_groups1, function (relation) {\n return relation.parent_group_id == group.id;\n }).length > 0;\n return group;\n });\n\n var data = treeService.groups(filledList, null);\n data.totalRows = results.totalRows;\n deferred.resolve(data);\n }, function (response) {\n deferred.reject(response);\n });\n return deferred.promise;\n }\n };\n\n if ($state.is(\"groups.edit\")) $scope.configure();\n \n /* GROUP */\n $scope.save = function (frmGroups) {\n\n if (angular.isDefined($scope.parent_group_id)) $scope.parent_group_id = $scope.parent_group_id.id;\n if ($scope.parent_group_id === 0) $scope.parent_group_id = null;\n if (angular.isUndefined($scope.group_id) || $scope.group_id === \"\") {\n if (angular.isUndefined($scope.group_id) || $scope.group_id === \"\") {\n $scope.group.FK_groups_groups_groups1 = _.map($scope.group.FK_groups_groups_groups1, function (group) { group.child_group_id = 0; group.id = 0; return group; });\n }\n\n Restangular.all('Groups').post($scope.group).then(function (result) {\n if (typeof (result.id) != \"undefined\") {\n $scope.showPositions = true;\n $scope.group = result;\n $scope.group_id = result.id;\n toastr.success($filter('translate')('groups.create_success'));\n if (!angular.isUndefined($scope.comeFromPersons)) {\n $scope.callbackClose('cancel', result);\n } /*else {\n $state.go(\"groups.list\");\n }*/\n }\n });\n } else {\n $scope.group.put().then(function (result) {\n if (typeof (result.id) != \"undefined\") {\n toastr.success($filter('translate')('groups.edit_success'));\n if (angular.isUndefined($scope.comeFromPersons)) {\n $state.go(\"groups.list\");\n } else {\n $scope.callbackClose('cancel', result);\n }\n }\n });\n }\n\n };\n\n $scope.checkDelete = function () {\n\n let $modalInstance = $uibModal.open({\n animation: true,\n template: GroupsDeleteModalView,\n size: \"sm\",\n controller: \"GroupsDeleteModalCtrl\",\n scope: $scope\n });\n\n /*\n modalService.confirm({\n title: $filter('translate')('groups.delete'),\n message: $filter('translate')('groups.delete_message')+\" \" + $scope.group.name + \"?\",\n onAccept: function () {\n $scope.group.remove().then(function () {\n toastr.success($filter('translate')('groups.delete_ok'));\n $state.go(\"groups.list\");\n }, function (error) {\n toastr.error(error.data.ExceptionMessage);\n }\n );\n }\n });\n */\n };\n \n /* POSITION */\n $scope.addPositions = function (id, position) {\n var editedIdx = 0;\n if ($scope.gridListPosition.data != null) editedIdx = $scope.gridListPosition.data.indexOf(position);\n \n if (angular.isUndefined(id)) id = \"\";\n if (angular.isUndefined(position)) {\n position = { isNew: true };\n position.group_id = $scope.group.id;\n position.position_type = $scope.group.group_type;\n position.FK_positions_tl_positions = [];\n position.FK_positions_contacts_positions = [];\n position.FK_positions_addresses_positions = [];\n }\n\n let $modalInstance = $uibModal.open({\n animation: true,\n template: PositionModalView,\n controller: \"PositionModalCtrl\",\n size: 'lg',\n resolve: {\n position: function () {\n return position;\n }, position_list: function () {\n return $scope.gridListPosition.data;\n }, group: function () {\n return null;\n }, fromView: function () {\n return $scope.fromView;\n }\n }\n\n });\n\n //Retorno de los datos desde el modal.\n $modalInstance.result.then(function (resultModal) {\n // Con esta línea forzamos el refresh cuando creas un cargo, de otro modo no aparece en la lista.\n $scope.configure();\n\n // SE duplican los cargos porque se guardan ya desde la ficha. Hacemos una recarga del grupo y se apaña\n \n/* var resultvalue = resultModal.edited;\n \n var position = {\n id: resultvalue.id,\n group_id: $scope.group.id,\n FK_positions_tl_positions: resultvalue.FK_positions_tl_positions,\n FK_positions_contacts_positions: resultvalue.FK_positions_contacts_positions,\n FK_positions_addresses_positions: resultvalue.FK_positions_addresses_positions,\n notes: resultvalue.notes,\n institution: resultvalue.institution,\n position_order: resultvalue.position_order,\n program_emails: resultvalue.program_emails,\n invitation_emails: resultvalue.invitation_emails\n };\n angular.forEach(resultvalue.FK_positions_tl_positions, function (item) {\n if (angular.isDefined($scope.group.language_id)) {\n if (item.language_id == $scope.group.language_id) position.name = item.name;\n } else {\n if (item.language_id == $rootScope.languageId) position.name = item.name;\n }\n }); \n if (resultvalue.isNew) {\n $scope.group.FK_positions_groups.push(position);\n $scope.gridListPosition.data = $scope.group.FK_positions_groups;\n } else {\n $scope.gridListPosition.data[editedIdx] = position; \n }\n\n if (!$scope.$$phase) $scope.$apply();*/\n\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n $scope.configure();\n // $scope.identity = {};\n });\n\n };\n\n //Delete desde el listado\n $scope.deletePositionDialog = function (id, name, position) {\n modalService.confirm({\n title: $filter('translate')('positions.delete'),\n message: $filter('translate')('positions.delete_message') + \" \" + name + \"?\",\n onAccept: function () {\n if (typeof (id) != 'undefined') {\n Restangular.one('Positions', id).remove().then(function () {\n toastr.success($filter('translate')('positions.delete_ok'));\n $scope.gridListPosition.data.splice($scope.gridListPosition.data.indexOf(position), 1);\n });\n } else {\n $scope.gridListPosition.data = $scope.gridListPosition.data.filter(function (el) { return el.id != $scope.id; });\n var editedIdx = $scope.gridListPosition.data.indexOf(position);\n $scope.group.FK_positions_groups.splice(editedIdx, 1);\n\n }\n }\n });\n\n };\n\n /* DESCIENDE DE */\n /* Función llamada al hacer click */\n $scope.check = function (group) {\n $scope.changesNotSaved = true;\n if (group.is_parent) {\n $scope.group.FK_groups_groups_groups1.push({\n parent_group_id: group.id,\n child_group_id: $stateParams.id\n });\n }\n else {\n $scope.group.FK_groups_groups_groups1 = _.filter($scope.group.FK_groups_groups_groups1, function (relation) { return relation.parent_group_id != group.id; });\n $scope.gridDesciendeDeOptions.loadData(false);\n }\n }\n\n $scope.modifyParents = function () {\n $log.debug(\"1\");\n let $modalInstance = $uibModal.open({\n animation: true,\n template: GroupGroupModalView,\n controller: \"GroupGroupModalCtrl\",\n size: 'lg',\n resolve: {\n parent_list: function () {\n return $scope.group.FK_groups_groups_groups1;\n },\n allow_select_multple: function () {\n return false;\n },\n show_color: function () {\n return true;\n },\n group_type: function () {\n return $scope.group.group_type != null ? $scope.group.group_type : \"civil\";\n }\n\n }\n\n });\n\n //Retorno de los datos desde el modal.\n $modalInstance.result.then(function (data) {\n var group_list = data.parents_clone;\n var apply_parent_color = data.apply_parent_color;\n $scope.changesNotSaved = true;\n if (apply_parent_color && group_list.length == 1) {\n $scope.group.color = group_list[0].color; \n }\n $scope.group.FK_groups_groups_groups1 = group_list;\n \n $scope.gridDesciendeDeOptions.loadData(false);\n\n if (!$scope.$$phase) $scope.$apply();\n\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n // $scope.identity = {};\n });\n\n };\n\n //Al añadir nuevo grupo descendiente de otro, añadimos ya el descendiente en el tab\n $scope.addDescendsFrom = function (data) {\n var group_list = data;\n var apply_parent_color = data.apply_parent_color;\n\n if (apply_parent_color && group_list.length == 1) {\n $scope.group.color = group_list[0].color;\n }\n $scope.group.FK_groups_groups_groups1 = group_list;\n\n if (!$scope.$$phase) $scope.$apply();\n }\n\n if ($stateParams.descendsFrom != null) {\n $scope.descendsFrom = $stateParams.descendsFrom;\n $scope.parents_clone = [{ parent_group_id: $scope.descendsFrom, color: \"#cccccc\" }];\n $scope.addDescendsFrom($scope.parents_clone);\n }\n\n /* HISTORIC */\n $scope.personsPositionHistoric = function (id, name) {\n let $modalInstance = $uibModal.open({\n animation: true,\n size: 'lg',\n template: HistoricModalView,\n controller: \"HistoricModalCtrl\",\n resolve: {\n position_id: function () {\n return id;\n }, \n name_position: function () {\n return name;\n }\n } \n });\n\n $modalInstance.result.then(function (data) {\n $scope.configure();\n }, function () {\n $scope.configure();\n });\n };\n\n $scope.deleteGroupContactInfo = function (groupContactInfo) {\n var editedIdx = $scope.gridGroupContactInfo.data.indexOf(groupContactInfo);\n $scope.group.FK_groups_contacts_groups.splice(editedIdx, 1);\n };\n\n $scope.deleteGroupAddress = function (entity) {\n var editedIdx = $scope.gridGroupAddresses.data.indexOf(entity);\n $scope.group.FK_groups_addresses_groups.splice(editedIdx, 1);\n };\n\n //Dialogos\n\n $scope.addGroupContactDialog = function (groupContactInfo) {\n var editedIdx = 0;\n if ($scope.gridGroupContactInfo.data !== null) editedIdx = $scope.gridGroupContactInfo.data.indexOf(groupContactInfo);\n\n if (angular.isUndefined(groupContactInfo)) groupContactInfo = { isNew: true };\n\n let $modalInstance = $uibModal.open({\n animation: true,\n template: GroupContactModalView,\n controller: \"GroupContactModalCtrl\",\n resolve: {\n groupContactInfo: function () {\n return groupContactInfo;\n }\n }\n });\n //Response del modal\n $modalInstance.result.then(function (data) {\n\n var groupContactValue = data.edited;\n\n if (angular.isUndefined(groupContactValue.notes)) groupContactValue.notes = \"\";\n\n if (angular.isDefined(groupContactValue.value) && groupContactValue.value != \"\" && groupContactValue.value != null) {\n if (!angular.isUndefined(groupContactValue.FK_groups_contacts_groups_contacts_scopes) && groupContactValue.FK_groups_contacts_groups_contacts_scopes != null &&\n !angular.isUndefined(groupContactValue.FK_groups_contacts_groups_contacts_types.selected) && groupContactValue.FK_groups_contacts_groups_contacts_types.selected != null) {\n\n var groups_contacts = {\n FK_groups_contacts_groups_contacts_scopes: angular.copy(groupContactValue.FK_groups_contacts_groups_contacts_scopes),\n group_contact_scope_id: groupContactValue.FK_groups_contacts_groups_contacts_scopes.id,\n FK_groups_contacts_groups_contacts_types: angular.copy(groupContactValue.FK_groups_contacts_groups_contacts_types.selected),\n group_contact_type_id: groupContactValue.FK_groups_contacts_groups_contacts_types.selected.id,\n group_id: $scope.group.id,\n value: groupContactValue.value,\n notes: groupContactValue.notes\n };\n\n if (groupContactValue.isNew) {\n $log.debug($scope.group);\n $scope.group.FK_groups_contacts_groups.push(groups_contacts);\n $scope.gridGroupContactInfo.data = $scope.group.FK_groups_contacts_groups;\n } else {\n $scope.gridGroupContactInfo.data[editedIdx] = groups_contacts;\n }\n\n if (!$scope.$$phase) $scope.$apply();\n\n }\n\n }\n\n }, function () {\n\n console.info('Modal dismissed at: ' + new Date());\n if (!$scope.$$phase) $scope.$apply();\n\n });\n\n }; //addGroupsContactDialog\n\n $scope.addGroupAddressDialog = function (groupAddress) {\n\n var editedIdx = 0;\n\n if ($scope.gridGroupAddresses.data != null) editedIdx = $scope.gridGroupAddresses.data.indexOf(groupAddress);\n\n if (angular.isUndefined(groupAddress)) groupAddress = { isNew: true };\n\n let $modalInstance = $uibModal.open({\n animation: true,\n template: GroupAddressModalView,\n controller: \"GroupAddressModalCtrl\",\n resolve: {\n groupAddress: function () {\n return groupAddress;\n }\n }\n });\n\n //Response del modal\n $modalInstance.result.then(function (data) {\n\n var groupAddressValue = data.edited;\n if (angular.isUndefined(groupAddressValue.state)) groupAddressValue.state = \"\";\n if (angular.isUndefined(groupAddressValue.postal_code)) groupAddressValue.postal_code = \"\";\n if (angular.isUndefined(groupAddressValue.address_line_2)) groupAddressValue.address_line_2 = \"\";\n if (angular.isUndefined(groupAddressValue.notes)) groupAddressValue.notes = \"\";\n\n if ((angular.isDefined(groupAddressValue.address_line_1) && groupAddressValue.address_line_1 != \"\" && groupAddressValue.address_line_1 != null) &&\n (angular.isDefined(groupAddressValue.city) && groupAddressValue.city != \"\" && groupAddressValue.city != null)) {\n if (!angular.isUndefined(groupAddressValue.FK_groups_addresses_groups_addresses_scopes) && groupAddressValue.FK_groups_addresses_groups_addresses_scopes != null &&\n !angular.isUndefined(groupAddressValue.FK_groups_addresses_countries.selected) && groupAddressValue.FK_groups_addresses_countries.selected != null) {\n\n var groups_contacts = {\n FK_groups_addresses_groups_addresses_scopes: angular.copy(groupAddressValue.FK_groups_addresses_groups_addresses_scopes),\n group_address_scope_id: groupAddressValue.FK_groups_addresses_groups_addresses_scopes.id,\n FK_groups_addresses_countries: angular.copy(groupAddressValue.FK_groups_addresses_countries.selected),\n country_id: groupAddressValue.FK_groups_addresses_countries.selected.id,\n group_id: $scope.group.id,\n address_line_1: groupAddressValue.address_line_1,\n city: groupAddressValue.city,\n state: groupAddressValue.state,\n postal_code: groupAddressValue.postal_code,\n address_line_2: groupAddressValue.address_line_2,\n notes: groupAddressValue.notes\n };\n if (groupAddressValue.isNew) {\n $scope.group.FK_groups_addresses_groups.push(groups_contacts);\n $scope.gridGroupAddresses.data = $scope.group.FK_groups_addresses_groups;\n } else {\n $scope.gridGroupAddresses.data[editedIdx] = groups_contacts;\n }\n\n if (!$scope.$$phase) $scope.$apply();\n }\n }\n }, function () {\n\n console.info('Modal dismissed at: ' + new Date());\n if (!$scope.$$phase) $scope.$apply();\n\n });\n\n };\n\n // addGroupsAddressDialog\n\n $scope.openExtendPositions = function () {\n\n let $modalInstance = $uibModal.open({\n animation: true,\n template: ExtendPositionsModalView,\n controller: \"ExtendPositionsModalCtrl\",\n resolve: {\n group_id: function () {\n return $scope.group_id;\n }\n },\n size: 'x-lg'\n });\n\n $modalInstance.result.then(function (result) {\n if (result) {\n toastr.success($filter('translate')('groups.positions_extended_success'));\n $scope.configure();\n } else {\n toastr.error($filter('translate')('groups.positions_extended_error'))\n }\n }, function () {\n\n console.info('Modal dismissed at: ' + new Date());\n\n });\n };\n\n $scope.openAttendedEvents = function () {\n\n let $modalInstance = $uibModal.open({\n animation: true,\n template: AttendedEventsModalView,\n controller: \"AttendedEventsPositionsModalCtrl\",\n resolve: {\n position_id: function () {\n return null;\n },\n group_id: function () {\n return $scope.group_id;\n }\n },\n size: 'x-lg'\n });\n\n $modalInstance.result.then(function () {\n\n }, function () {\n\n console.info('Modal dismissed at: ' + new Date());\n\n });\n };\n\n $scope.applyColorToSubgroups = function () {\n modalService.confirm({\n title: $filter('translate')('groups.warning'),\n message: $filter('translate')('groups.color_subgroups_question'),\n onAccept: function () {\n Restangular.all('Groups').customGET(\"ApplyColorToSubgroups\", { group_id: $scope.group.id, color: $scope.group.color }).then(function (result) {\n if (result) {\n toastr.success($filter('translate')('groups.color_applied_correctly'));\n } else {\n toastr.error($filter('translate')('groups.color_applied_error'))\n }\n }); \n /*$scope.budget_group.remove().then(function () {\n toastr.success($filter('translate')('budget_groups.remove_success'));\n $state.go(\"budget_groups.list\");\n });*/\n }\n });\n\n }\n\n}])\n .controller(\"PositionModalCtrl\", ['$q', 'LoginService', '$scope', '$uibModalInstance', 'Restangular', 'position', 'position_list', 'group', 'modalService', '$filter', 'gridService', '$uibModal', 'uiGridConstants', '$timeout', 'fromView', '$rootScope', '$log',\n function ($q, LoginService, $scope, $uibModalInstance, Restangular, position, position_list, group, modalService, $filter, gridService, $uibModal, uiGridConstants, $timeout, fromView, $rootScope, $log) {\n \n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"GROUPS_WRITE\");\n\n $scope.position = (!angular.isUndefined(position) ? angular.copy(position) : {});\n //$scope.search = {};\n // if (!angular.isUndefined(position))\n // $scope.search.institution = $scope.position.institution; \n\n $scope.reloadPositionsEmails = function () {\n Restangular.all('PositionsMails').getList({ position_id: position.id }).then(function (results) {\n $scope.positionsMails = results;\n });\n\n }\n\n $scope.reloadPositionsEmails();\n\n $scope.loadPersonsTreatments = function (reload) {\n return Restangular.all('PersonsTreatments').getList().then(function (treatments) {\n $scope.positionTreatments = treatments;\n const positionDefault = $scope.positionTreatments.filter(pt => { return pt.position_default });\n if ($scope.position.position_treatment_id == null || $scope.position.position_treatment_id == 0) {\n $scope.position.position_treatment_id = positionDefault[0].id;\n }\n \n });\n };\n\n $scope.loadPersonsTreatments(false);\n\n var position_list = position_list != null ? position_list : [];\n\n $scope.positionOrigin = (!angular.isUndefined(position) ? position : {});\n\n $log.debug($scope.position);\n\n // Búsqueda de instituciones\n\n $scope.getInstitutionsSearch = function (val) {\n\n if (val == null) {\n val = '';\n } else {\n val = val.replace(/[:.?*+^$[\\\\(){|]/, \"\");\n }\n\n let ret = [];\n\n ret = Restangular.all('search/institutions/' + val).getList().then(function (searchTerms) {\n return searchTerms;\n });\n\n return ret;\n\n };\n\n $scope.clearInstitution = function () {\n\n if ($scope.position.institution_id != null)\n $scope.position.institution_id = null;\n\n };\n\n $scope.institutionSelected = function ($item) {\n\n $item.id != 0 ? $scope.position.institution_id = $item.id : $scope.position.institution_id = null;\n $scope.position.institution = $scope.position.institution.term;\n $log.debug($scope.position);\n\n };\n\n // Fin \n\n // Edición de instituciones \n $scope.editInstitution = function (id) {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: InstitutionEditModalView,\n size: \"lg\",\n controller: \"institutionsEditCtrl\",\n scope: $scope,\n resolve: {\n id_from_modal: function () {\n return id;\n }\n } \n });\n };\n\n // Importación desde instituciones\n\n /*\n $scope.importFromInstitution = function () {\n Restangular.one('Institutions', $scope.position.institution_id).get().then(function (result) {\n $modalInstance = $uibModal.open({\n animation: true,\n template: 'app/institutions/InstitutionPreviewModal.html',\n controller: \"InstitutionPreviewModalCtrl\",\n resolve: {\n institutionMails: function () {\n return result.mails;\n },\n institutionAddresses: function () {\n return result.addresses;\n },\n institutionContacts: function () {\n return result.contacts;\n },\n },\n scope: $scope,\n size: 'lg'\n });\n });\n };\n */\n\n // Comprobamos si la empresa tiene marcado la opción de el artículo 10 para mostrar las opciones en consecuencia\n\n $scope.article10 = false;\n\n Restangular.one('Companies', $rootScope.company_id).get().then(function (results) {\n if (results.article_10 == true) { $scope.article10 = true; }\n if (results.article_12 == true) { $scope.article12 = true; }\n\n\n }),\n\n //Delete desde el popup\n $scope.checkDeletePosition = function () {\n modalService.confirm({\n title: $filter('translate')('positions.delete'),\n message: $filter('translate')('positions.delete_message')+\" \"+ $scope.position.name + \"?\",\n onAccept: function () {\n Restangular.one('Positions', $scope.position.id).remove().then(function () {\n toastr.success($filter('translate')('positions.delete_ok'));\n $uibModalInstance.close({ deleted: $scope.position, origin: $scope.positionOrigin});\n });\n }\n });\n };\n\n // Ver histórico\n $scope.viewHistoric = function () {\n let $modalInstance = $uibModal.open({\n animation: true,\n size: 'lg',\n template: HistoricModalView,\n controller: \"HistoricModalCtrl\",\n resolve: {\n position_id: function () {\n return $scope.position.id;\n },\n name_position: function () {\n return $scope.position.name;\n }\n }\n }); \n };\n \n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n\n $scope.checkSavePosition = function () {\n\n if ($scope.position.shared_by > 1) {\n\n modalService.confirm({\n title: $filter('translate')('groups.position_shared_by_title'),\n message: $filter('translate')('groups.position_shared_by_message') + \". \" + `(${$scope.position.shared_by})` + \" \" + $filter('translate')('groups.position_shared_by_confirmation_warning'),\n onAccept: function () {\n $scope.savePosition();\n },\n }, 'md');\n\n } else {\n\n $scope.savePosition();\n\n }\n }\n\n $scope.savePosition = function () {\n\n $log.debug(\"savePosition\", $scope.position);\n\n var exists = false;\n if ($scope.position.isNew) {\n exists = _.some(position_list, function (position) {\n return _.some(position.FK_positions_tl_positions, function (tl) {\n return _.some($scope.position.FK_positions_tl_positions, function (scope_tl) {\n return angular.isDefined(scope_tl.name) && scope_tl.name != \"\" && angular.isDefined(tl.name) && tl.name != \"\"\n && tl.name == scope_tl.name && tl.language_id == scope_tl.language_id;\n });\n });\n });\n }\n if (exists) {\n\n modalService.confirm({\n title: $filter('translate')('positions.delete'),\n message: $filter('translate')('groups.repeated_position'),\n onAccept: function () {\n $uibModalInstance.close({ edited: $scope.position, origin: $scope.positionOrigin });\n }\n });\n\n } else {\n\n if (fromView == 'Persons' || angular.isUndefined(fromView)) {\n if ($scope.positionsMails.length > 0) {\n $scope.position.FK_positions_mails_positions = $scope.positionsMails;\n }\n Restangular.all('Positions').post($scope.position).then(function (result) {\n // Devolvemos el control al principal\n $uibModalInstance.close({ edited: $scope.position, origin: $scope.positionOrigin });\n });\n } else {\n if ($scope.positionsMails.length > 0) {\n $scope.position.FK_positions_mails_positions = $scope.positionsMails;\n }\n\n $uibModalInstance.close({ edited: $scope.position, origin: $scope.positionOrigin });\n }\n \n }\n\n };\n\n // savePosition\n\n $timeout(function () {\n $scope.gridPositionAddresses.data = $scope.position.FK_positions_addresses_positions;\n $scope.gridPositionContactInfo.data = $scope.position.FK_positions_contacts_positions;\n /*$scope.gridPositionContactInfo.gridApi.grid.notifyDataChange(uiGridConstants.dataChange.ALL);*/\n });\n\n /* GRIDS */\n $scope.gridPositionContactInfo = {\n pdfTitle: $filter('translate')('persons.contact_data'),\n exporterMenuCsv: true,\n enableGridMenu: false,\n enablePaginationControls: false,\n enableFiltering: false,\n minRowsToShow:4,\n /* paginationPageSizes: [1],\n paginationPageSize: 1,*/\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n $timeout(function () {\n gridApi.grid.sortColumn(gridApi.grid.columns[3], uiGridConstants.ASC);\n // gridApi.grid.sortColumn(gridApi.grid.columns[1], uiGridConstants.ASC,true);\n gridApi.grid.notifyDataChange(uiGridConstants.dataChange.ALL);\n });\n },\n columnDefs: [\n { name: 'id', visible: false, enableColumnMenu: false, enableHiding: false, exporterSuppressExport: true },\n { name: 'FK_positions_contacts_positions_contacts_types.name', displayName: $filter('translate')('persons.contact_type'), enableHiding: false, enableColumnMenu: false },\n { name: 'FK_positions_contacts_positions_contacts_types.order', displayName: '', enableColumnMenu: false, enableHiding: false, visible: false },\n { name: 'value', displayName: $filter('translate')('persons.value'), enableColumnMenu: false, enableFiltering: false, enableHiding: false },\n { name: 'notes', displayName: $filter('translate')('persons.notes'), enableColumnMenu: false, enableFiltering: false, enableHiding: false, visible: false },\n {\n name: ' ', width: 100, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionIconTemplate([\n { title: \"\", action: 'ng-click=\"grid.appScope.addPositionsContactDialog(row.entity)\"', cssIconClass: \"fa fa-edit\" },\n { title: \"\", action: 'ng-click=\"grid.appScope.deletePositionContactInfo(row.entity);\" ng-if=\"grid.appScope.allowWrite\" ', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n }\n ]\n }\n\n $scope.gridPositionAddresses = {\n pdfTitle: $filter('translate')('persons.addresses'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n enablePaginationControls: false,\n rowHeight: 45,\n minRowsToShow: 3,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, exporterSuppressExport: true },\n { name: 'address_line_1', displayName: $filter('translate')('persons.address_line_1'), enableColumnMenu: false, enableFiltering: false, enableHiding: false,\n cellTemplate: '
{{row.entity.address_line_1}}
{{row.entity.postal_code}}, {{row.entity.city}}
',\n },\n { name: 'state', displayName: $filter('translate')('persons.contact_state'), width: 150 },\n { name: 'city', displayName: $filter('translate')('persons.contact_city'), width: 150 },\n /*{ name: 'address_line_2', displayName: $filter('translate')('persons.address_line_2'), enableColumnMenu: false, enableFiltering: false, visible: false },\n { name: 'postal_code', displayName: $filter('translate')('persons.postal_code'), enableColumnMenu: false, enableFiltering: false },\n { name: 'city', displayName: $filter('translate')('persons.city'), enableColumnMenu: false, enableFiltering: false },\n { name: 'state', displayName: $filter('translate')('persons.state'), enableColumnMenu: false, enableFiltering: false, enableHiding: false },*/\n { name: 'notes', displayName: $filter('translate')('persons.notes'), visible: true },\n {\n name: ' ', width: 100, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionIconTemplate([\n { title: \"\", action: 'ng-click=\"grid.appScope.addPositionsAddressDialog(row.entity)\"', cssIconClass: \"fa fa-edit\" },\n { title: \"\", action: 'ng-click=\"$event.stopPropagation();grid.appScope.deletePositionAddress(row.entity);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n }\n ]\n } \n\n $scope.addEmailsPositions = function (position) {\n\n let $modalInstance = $uibModal.open({\n animation: true,\n template: PositionMailModalView,\n controller: \"PositionMailModalCtrl\",\n resolve: {\n position: function () {\n return position;\n },\n position_email: function () {\n return {use_for_invitation: true, use_for_program: true, use_for_others: true};\n }\n\n }\n });\n //Response del modal\n $modalInstance.result.then(function (data) {\n if (!angular.isUndefined(data)) {\n $scope.positionsMails.push(data.edited);\n } else {\n $scope.reloadPositionsEmails();\n }\n });\n\n };\n\n $scope.editPostionMail = function (mail) {\n\n let $modalInstance = $uibModal.open({\n animation: true,\n template: PositionMailModalView,\n controller: \"PositionMailModalCtrl\",\n resolve: {\n position: function () {\n return position;\n },\n position_email: function () {\n return mail;\n }\n }\n });\n\n //Response del modal\n $modalInstance.result.then(function (data) {\n $scope.reloadPositionsEmails();\n });\n };\n\n\n $scope.addPositionsAddressDialog = function (positionAddress) {\n var editedIdx = 0;\n if ($scope.gridPositionAddresses.data != null) editedIdx = $scope.gridPositionAddresses.data.indexOf(positionAddress);\n\n if (angular.isUndefined(positionAddress)) positionAddress = { isNew: true };\n\n let $modalInstance = $uibModal.open({\n animation: true,\n template: PositionAddressModalView,\n controller: \"PositionAddressModalCtrl\",\n resolve: {\n positionAddress: function () {\n return positionAddress;\n }\n }\n });\n //Response del modal\n $modalInstance.result.then(function (data) {\n var positionAddressValue = data.edited;\n if (angular.isUndefined(positionAddressValue.state)) positionAddressValue.state = \"\";\n if (angular.isUndefined(positionAddressValue.postal_code)) positionAddressValue.postal_code = \"\";\n if (angular.isUndefined(positionAddressValue.address_line_2)) positionAddressValue.address_line_2 = \"\";\n if (angular.isUndefined(positionAddressValue.notes)) positionAddressValue.notes = \"\";\n\n if ((angular.isDefined(positionAddressValue.address_line_1) && positionAddressValue.address_line_1 != \"\" && positionAddressValue.address_line_1 != null) &&\n (angular.isDefined(positionAddressValue.city) && positionAddressValue.city != \"\" && positionAddressValue.city != null)) {\n if (!angular.isUndefined(positionAddressValue.FK_positions_addresses_positions_addresses_scopes) && positionAddressValue.FK_positions_addresses_positions_addresses_scopes !== null &&\n !angular.isUndefined(positionAddressValue.FK_positions_addresses_countries.selected) && positionAddressValue.FK_positions_addresses_countries.selected !== null) {\n\n var positions_contacts = {\n FK_positions_addresses_positions_addresses_scopes: angular.copy(positionAddressValue.FK_positions_addresses_positions_addresses_scopes),\n position_address_scope_id: positionAddressValue.FK_positions_addresses_positions_addresses_scopes.id,\n FK_positions_addresses_countries: angular.copy(positionAddressValue.FK_positions_addresses_countries.selected),\n country_id: positionAddressValue.FK_positions_addresses_countries.selected.id,\n position_id: $scope.position.id,\n address_line_1: positionAddressValue.address_line_1,\n city: positionAddressValue.city,\n state: positionAddressValue.state,\n postal_code: positionAddressValue.postal_code,\n address_line_2: positionAddressValue.address_line_2,\n notes: positionAddressValue.notes\n };\n if (positionAddressValue.isNew) {\n $scope.position.FK_positions_addresses_positions.push(positions_contacts);\n $scope.gridPositionAddresses.data = $scope.position.FK_positions_addresses_positions;\n } else {\n $scope.gridPositionAddresses.data[editedIdx] = positions_contacts;\n }\n\n if (!$scope.$$phase) $scope.$apply();\n }\n\n }\n\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n if (!$scope.$$phase) $scope.$apply();\n });\n\n };\n\n $scope.addPositionsContactDialog = function (positionContactInfo) {\n var editedIdx = 0;\n if ($scope.gridPositionContactInfo.data != null) editedIdx = $scope.gridPositionContactInfo.data.indexOf(positionContactInfo);\n\n if (angular.isUndefined(positionContactInfo)) positionContactInfo = { isNew: true };\n\n let $modalInstance = $uibModal.open({\n animation: true,\n template: PositionContactModalView,\n controller: \"PositionContactModalCtrl\",\n resolve: {\n positionContactInfo: function () {\n return positionContactInfo;\n }\n }\n });\n //Response del modal\n $modalInstance.result.then(function (data) {\n\n var positionContactValue = data.edited;\n\n if (angular.isUndefined(positionContactValue.notes)) positionContactValue.notes = \"\";\n\n if (angular.isDefined(positionContactValue.value) && positionContactValue.value !== \"\" && positionContactValue.value !== null) {\n if (!angular.isUndefined(positionContactValue.FK_positions_contacts_positions_contacts_scopes) && positionContactValue.FK_positions_contacts_positions_contacts_scopes !== null &&\n !angular.isUndefined(positionContactValue.FK_positions_contacts_positions_contacts_types.selected) && positionContactValue.FK_positions_contacts_positions_contacts_types.selected !== null) {\n var positions_contacts = {\n FK_positions_contacts_positions_contacts_scopes: angular.copy(positionContactValue.FK_positions_contacts_positions_contacts_scopes),\n position_contact_scope_id: positionContactValue.FK_positions_contacts_positions_contacts_scopes.id,\n FK_positions_contacts_positions_contacts_types: angular.copy(positionContactValue.FK_positions_contacts_positions_contacts_types.selected),\n position_contact_type_id: positionContactValue.FK_positions_contacts_positions_contacts_types.selected.id,\n position_id: $scope.position.id,\n value: positionContactValue.value,\n notes: positionContactValue.notes\n };\n\n if (positionContactValue.isNew) {\n $scope.position.FK_positions_contacts_positions.push(positions_contacts);\n $scope.gridPositionContactInfo.data = $scope.position.FK_positions_contacts_positions;\n } else {\n $scope.gridPositionContactInfo.data[editedIdx] = positions_contacts;\n }\n\n if (!$scope.$$phase) $scope.$apply();\n\n }\n\n }\n\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n if (!$scope.$$phase) $scope.$apply();\n });\n\n };\n\n $scope.deletePositionContactInfo = function (positionContactInfo) {\n var editedIdx = $scope.gridPositionContactInfo.data.indexOf(positionContactInfo);\n $scope.position.FK_positions_contacts_positions.splice(editedIdx, 1);\n }\n\n $scope.deletePositionAddress = function (entity) {\n var editedIdx = $scope.gridPositionAddresses.data.indexOf(entity);\n $scope.position.FK_positions_addresses_positions.splice(editedIdx, 1);\n }\n\n $scope.openAttendedEvents = function () {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: AttendedEventsModalView,\n controller: \"AttendedEventsPositionsModalCtrl\",\n resolve: {\n position_id: function () {\n return $scope.position.id;\n },\n group_id: function () {\n return null;\n }\n },\n size: 'x-lg'\n });\n\n $modalInstance.result.then(function () {\n\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n });\n }\n\n $scope.duplicatePosition = function () { \n let $modalInstance = $uibModal.open({\n animation: true,\n template: GroupGroupModalView,\n controller: \"GroupGroupModalCtrl\",\n size: 'lg',\n resolve: {\n parent_list: function () {\n return [];\n },\n allow_select_multple: function () {\n return true;\n },\n show_color: function () {\n return false;\n },\n group_type: function () {\n return $scope.position.position_type != null ? $scope.position.position_type : \"civil\";\n }\n }\n\n });\n\n $modalInstance.result.then(function (data) {\n\n let group_list = data.parents_clone;\n\n var groupsIds = [];\n\n angular.forEach(group_list, function (item) {\n groupsIds.push(item.parent_group_id);\n });\n\n Restangular.all('Positions').customGET(\"DuplicatePositionInGroups\", { position_id: $scope.position.id, groupsIds: groupsIds }).then(function (result) {\n if (result) {\n toastr.success($filter('translate')('position.duplicate_success'));\n } else {\n toastr.error($filter('translate')('position.duplicate_error'))\n }\n });\n\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n // $scope.identity = {};\n });\n }\n\n $('#ibox_contact .ibox-content').slideUp();\n $('#ibox_addresses .ibox-content').slideUp();\n //$('#ibox_contact .ibox-tools a.collapse-link i').toggleClass('fa-chevron-up').toggleClass('fa-chevron-down');\n //$('#ibox_addresses .ibox-tools a.collapse-link i').toggleClass('fa-chevron-up').toggleClass('fa-chevron-down');\n}])\n\n.controller(\"HistoricModalCtrl\", ['$uibModal', 'LoginService', '$scope', '$uibModalInstance', 'Restangular', 'position_id', 'name_position', 'modalService', '$filter', 'gridService', '$timeout', '$log',\n function ($uibModal, LoginService, $scope, $uibModalInstance, Restangular, position_id, name_position, modalService, $filter, gridService, $timeout, $log) {\n \n $scope.allowReadPersons = LoginService.permissionExist(\"PERSONS_READ\");\n $scope.personPosition = {};\n $scope.name_position = name_position;\n\n $scope.only_authorities = false; \n\n $scope.parsePersonType = function (person_type) {\n $log.debug(person_type);\n let result = \"\";\n\n if (person_type == \"authority\") {\n\n result = $filter('translate')('persons.title');\n\n } if (person_type === \"anonymous\") {\n\n result = $filter('translate')('persons.title_anonymous');\n\n } else if (person_type === \"imported\") {\n\n result = $filter('translate')('persons.title_imported');\n\n } else if (person_type === \"enrolled\") {\n\n result = $filter('translate')('inscriptions_forms.inscripted');\n\n }\n\n return result;\n };\n\n $scope.gridPersonsHistoric = {\n pdfTitle: $filter('translate')('persons_positions.historic_title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n paginationPageSizes: [10, 20, 30],\n paginationPageSize: 10,\n enableHiding: false,\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n this.gridApi.core.on.rowsRendered($scope, callbackFunctionItemChange);\n this.gridApi.selection.on.rowSelectionChanged($scope, callbackFunctionRowSelected);\n this.gridApi.selection.on.rowSelectionChangedBatch($scope, callbackFunctionRowSelected);\n },\n columnDefs: [\n { name: 'id', visible: false, exporterSuppressExport: true, enableFiltering: false },\n {\n field: 'FK_persons_positions_persons.FK_persons_images.image_small',\n customFormatFn: function (value) {\n if (value != null && typeof (value) !== \"undefined\") {\n var img = {\n image: value,\n width: 30\n };\n return img;\n } else {\n return \"\";\n }\n },\n displayName: '', cellTemplate: \"\", width: 50,\n enableFiltering: false, enableSorting: false\n },\n { name: 'name', field: 'FK_persons_positions_persons.name', displayName: $filter('translate')('persons.name'), enableFiltering: true },\n { name: 'surname', field: 'FK_persons_positions_persons.surname', displayName: $filter('translate')('persons.surname'), enableFiltering: true },\n { name: 'lastname', field: 'FK_persons_positions_persons.lastname', displayName: $filter('translate')('persons.lastname'), enableFiltering: true },\n {\n name: 'person_type', field: 'FK_persons_positions_persons.person_type', displayName: $filter('translate')('persons.type'), enableFiltering: true,\n cellTemplate: '
{{grid.appScope.parsePersonType(row.entity.FK_persons_positions_persons.person_type)}}
'\n }\n ,\n {\n name: 'from_date', displayName: $filter('translate')('persons_positions.from_date'), type: 'date', cellFilter: 'date:\\'dd/MM/yyyy\\'',\n filterHeaderTemplate: '
' +\n '' +\n '
'\n },\n {\n name: 'to_date', displayName: $filter('translate')('persons_positions.to_date'), type: 'date', cellFilter: 'date:\\'dd/MM/yyyy\\'',\n filterHeaderTemplate: '
' +\n '' +\n '
'\n },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('persons_positions.see_file'), action: 'target=\"_blank\" ng-if=\"!row.entity.is_deleted\" ui-sref=\"persons.edit({person_type:row.entity.FK_persons_positions_persons.person_type ,id:row.entity.FK_persons_positions_persons.id})\" ng-click=\"grid.appScope.onCancel();\" ng-if=\"grid.appScope.allowReadPersons\" ', cssIconClass: \"fa fa-file\" },\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n $scope.selectedRows = [];\n if (!!$scope.personPosition.fromDate) options.from_date = $scope.personPosition.fromDate;\n if (!!$scope.personPosition.toDate) options.to_date = $scope.personPosition.toDate;\n options.position_id = position_id;\n\n if ($scope.only_authorities == true) {\n options.person_type = \"authority\"; //Solo se muestran los que son de tipo autoridad.\n }\n\n return Restangular.all('PersonsPositions').getList(options); //TODO: traer las imágenes ahora, no en la misma peticion. (hacerlo como en persons-list.js)\n }\n };\n\n let callbackFunctionRowSelected = function (row, evt) {\n let addAll = row.length > 1;\n if (!addAll) {\n //buscamos si ya existe la persona añadida\n var index = $scope.selectedRows.map(function (e) { return e.id; }).indexOf(row.entity.id);\n if (index < 0) {\n if (row.isSelected) {\n $scope.selectedRows.push({ id: row.entity.id, positionId: [row.entity.positionId] });\n } else {\n $scope.selectedRows.splice(index, 1);\n }\n } else {\n //ya existe, si is seleccionado, lo añadimos y sino lo borramos.\n if (row.isSelected) {\n $scope.selectedRows.map(function (e) { if (e.id == row.entity.id) e.positionId.push(row.entity.positionId) });\n } else {\n for (let i = 0; i < $scope.selectedRows.length; i++) {\n if ($scope.selectedRows[i].id == row.entity.id) {\n\n //var indexPosition = $scope.selectedRows[i].positionId.map(function (e) { return e.positionId; }).indexOf(row.entity.positionId);\n var indexPosition = $scope.selectedRows[i].positionId.indexOf(row.entity.positionId);\n var lengthOfPositions = $scope.selectedRows[i].positionId.map(function (e) { return e.positionId; }).length;\n $log.debug(row.entity.positionId + \" \" + indexPosition);\n }\n }\n $scope.selectedRows.map(function (e) { if (e.id == row.entity.id) e.positionId.splice(indexPosition, 1) });\n if (lengthOfPositions == 1) {\n //eliminamos a la persona\n var index = $scope.selectedRows.map(function (e) { return e.id; }).indexOf(row.entity.id);\n $scope.selectedRows.splice(index, 1);\n }\n }\n }\n } else {\n if (row[0].isSelected) {\n //se ha seleccionado todo.\n $scope.selectedRows = [];\n for (let i = 0; i < $scope.gridPersonsHistoric.gridApi.grid.options.totalItems; i++) { $scope.selectedRows.push(i); };\n } else {\n $scope.selectedRows = [];\n }\n }\n }\n\n let callbackFunctionItemChange = function () {\n $timeout(function () {\n for (var i = 0; i < $scope.gridPersonsHistoric.data.length; i++) {\n var row = $scope.gridPersonsHistoric.data[i];\n for (var select = 0; select < $scope.selectedRows.length; select++) {\n let selected = $scope.selectedRows[select];\n if (row.id == selected.id) {\n $scope.gridPersonsHistoric.gridApi.selection.toggleRowSelection(row);\n break\n }\n };\n }\n }, 350);//lo pongo así porque sino falla la primera vez\n }\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n $scope.selectedPersonsToEndPosition = function () {\n var addAll = $scope.gridPersonsHistoric.gridApi.selection.getSelectAllState();\n if (addAll) {\n let options: any = {};\n if (!!$scope.personPosition.fromDate) options.from_date = $scope.personPosition.fromDate;\n if (!!$scope.personPosition.toDate) options.to_date = $scope.personPosition.toDate;\n options.position_id = position_id;\n options.person_type = \"authority\"; //Solo se muestran los que son de tipo autoridad.\n Restangular.all('PersonsPositions').getList(options).then(function (results) {\n var ids = [];\n angular.forEach(results, function (row) {\n ids.push(row.id);\n });\n if (ids.length > 0) {\n $log.debug(ids);\n let $modalInstance = $uibModal.open({\n animation: true,\n template: EndPositionAndAddNewPositionView,\n controller: \"EndPositionAndAddNewPositionModalCtrl\",\n size: 'md',\n resolve: {\n endPosition: true\n }\n });\n\n $modalInstance.result.then(function (info) {\n info.position_prev_id = position_id;\n info.listPersonsIds = ids;\n Restangular.all('PersonsPositions').customPOST(info, \"EndPositions\", {}).then(function (result) {\n toastr.success($filter('translate')('persons_positions.end_position_success'));\n $scope.gridPersonsHistoric.loadData(false);\n });\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n });\n } else {\n modalService.message({\n title: \"Error\",\n message: $filter('translate')('persons_positions.select_persons'),\n onAccept: function () { }\n });\n }\n });\n\n } else {\n var rows = $scope.gridPersonsHistoric.gridApi.selection.getSelectedRows();\n var ids = [];\n angular.forEach(rows, function (row) {\n ids.push(row.id);\n });\n if (ids.length > 0) {\n $log.debug(ids);\n let $modalInstance = $uibModal.open({\n animation: true,\n template: EndPositionAndAddNewPositionView,\n controller: \"EndPositionAndAddNewPositionModalCtrl\",\n size: 'md',\n resolve: {\n endPosition: true\n }\n });\n $modalInstance.result.then(function (info) {\n info.position_prev_id = position_id;\n info.listPersonsIds = ids;\n Restangular.all('PersonsPositions').customPOST(info, \"EndPositions\", {}).then(function (result) {\n toastr.success($filter('translate')('persons_positions.end_position_success'));\n $scope.gridPersonsHistoric.loadData(false);\n });\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n });\n } else {\n modalService.message({\n title: \"Error\",\n message: $filter('translate')('persons_positions.select_persons'),\n onAccept: function () { }\n });\n }\n }\n \n };\n\n $scope.addPersonsToPosition = function () {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: SearchPersonsModalView,\n size: \"lg\",\n controller: \"SearchPersonsModalCtrl\",\n scope: $scope,\n resolve: {\n options: function () {\n return {};\n }\n }\n });\n //Response del modal\n $modalInstance.result.then(function (data) {\n if (data.length > 0) {\n let $modalInstance2 = $uibModal.open({\n animation: true,\n template: EndPositionAndAddNewPositionView,\n controller: \"EndPositionAndAddNewPositionModalCtrl\",\n size: 'md',\n resolve: {\n endPosition: false\n }\n });\n $modalInstance2.result.then(function (info) {\n $log.debug(info);\n info.position_prev_id = position_id;\n info.listPersonsIds = data;\n Restangular.all('PersonsPositions').customPOST(info, \"AddPositions\", {}).then(function (result) {\n toastr.success($filter('translate')('persons_positions.end_position_success'));\n $scope.gridPersonsHistoric.loadData(false);\n });\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n });\n }\n if (!$scope.$$phase) $scope.$apply();\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n if (!$scope.$$phase) $scope.$apply();\n });\n };\n\n}])\n\n.controller(\"GroupContactModalCtrl\", ['LoginService', '$scope', '$uibModalInstance', 'Restangular', 'modalService', '$filter', 'groupContactInfo', function (LoginService, $scope, $uibModalInstance, Restangular, modalService, $filter, groupContactInfo) {\n\n $scope.allowWrite = LoginService.permissionExist(\"GROUPS_WRITE\");\n $scope.groupContactModal = (!angular.isUndefined(groupContactInfo) ? angular.copy(groupContactInfo) : {});\n $scope.groupContactOrigin = (!angular.isUndefined(groupContactInfo) ? groupContactInfo : {});\n\n //Groups_contacts_scopes y tl\n Restangular.all('GroupsContactsScopes').getList().then(function (groupsContactsScopes) {\n\n $scope.groupsContactsScopes = groupsContactsScopes\n //Seleccionamos el correspondiente.\n if ($scope.groupContactModal != null && angular.isUndefined($scope.groupContactModal.group_contact_scope_id)) {\n $scope.groupsContactsScopes.forEach(function (pcs) {\n if (pcs.code === \"PUBLIC\") $scope.groupContactModal.group_contact_scope_id = pcs.id;\n });\n }\n });\n\n Restangular.all('GroupsContactsTypes').getList().then(function (groupsContactsTypes) {\n\n $scope.groupsContactsTypes = groupsContactsTypes;\n //Seleccionamos el correspondiente.\n if ($scope.groupContactModal != null) {\n $scope.groupsContactsTypes.forEach(function (pct) {\n if (pct.id === $scope.groupContactModal.group_contact_type_id) $scope.groupContactModal.FK_groups_contacts_groups_contacts_types.selected = pct;\n });\n }\n });\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n $scope.saveGroupContact = function () {\n //Devolvemos el control al principal\n $scope.groupContactModal.FK_groups_contacts_groups_contacts_scopes = _.find($scope.groupsContactsScopes, function (scope) { return scope.id == $scope.groupContactModal.group_contact_scope_id; });\n\n $uibModalInstance.close({ edited: $scope.groupContactModal, origin: $scope.groupContactOrigin });\n\n };//save\n\n\n}])\n\n.controller(\"GroupAddressModalCtrl\", ['LoginService', '$scope', '$uibModalInstance', 'Restangular', 'modalService', '$filter', 'groupAddress', function (LoginService, $scope, $uibModalInstance, Restangular, modalService, $filter, groupAddress) {\n\n $scope.allowWrite = LoginService.permissionExist(\"GROUPS_WRITE\");\n $scope.groupAddressModal = (!angular.isUndefined(groupAddress) ? angular.copy(groupAddress) : {});\n $scope.groupAddressOrigin = (!angular.isUndefined(groupAddress) ? groupAddress : {});\n\n //Groups_contacts_scopes y tl\n Restangular.all('GroupsAddressScopes').getList().then(function (groupsAddressessScopes) {\n\n $scope.groupsAddressessScopes = groupsAddressessScopes;\n //Seleccionamos el correspondiente.\n if ($scope.groupAddressModal !== null && angular.isUndefined($scope.groupAddressModal.group_address_scope_id)) {\n $scope.groupsAddressessScopes.forEach(function (pcs) {\n if (pcs.code === \"PUBLIC\") $scope.groupAddressModal.group_address_scope_id = pcs.id;\n });\n }\n });\n\n Restangular.all('Countries').getList().then(function (countries) {\n\n $scope.countries = countries;\n //Seleccionamos el correspondiente.\n\n if ($scope.groupAddressModal !== null) {\n $scope.countries.forEach(function (pct) {\n if (pct.id == $scope.groupAddressModal.country_id) $scope.groupAddressModal.FK_groups_addresses_countries.selected = pct;\n });\n }\n\n });\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n $scope.saveGroupAddress = function () {\n // Devolvemos el control al principal\n $scope.groupAddressModal.FK_groups_addresses_groups_addresses_scopes = _.find($scope.groupsAddressessScopes, function (scope) { return scope.id == $scope.groupAddressModal.group_address_scope_id; });\n\n $uibModalInstance.close({ edited: $scope.groupAddressModal, origin: $scope.groupAddressOrigin });\n\n };\n\n // saveGroupAddress\n\n\n}])\n\n .controller(\"PositionMailModalCtrl\", ['LoginService', '$scope', '$uibModalInstance', 'Restangular', 'modalService', '$filter', 'position','position_email', function (LoginService, $scope, $uibModalInstance, Restangular, modalService, $filter, position, position_email) {\n\n $scope.allowWrite = LoginService.permissionExist(\"GROUPS_WRITE\");\n\n if (position_email != null) {\n $scope.position_mail = position_email;\n }\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n $scope.savePositionMail = function () {\n\n if ($scope.position_mail.id != null) {\n $scope.position_mail.put().then(function (result) {\n $uibModalInstance.close();\n });\n } else {\n $scope.position_mail.position_id = position.id;\n if (!angular.isUndefined(position.id)) {\n Restangular.all('PositionsMails').post($scope.position_mail).then(function (result) {\n $uibModalInstance.close();\n })\n } else {\n $uibModalInstance.close({ edited: $scope.position_mail });\n }\n }\n };\n\n $scope.deletePositionMail = function () {\n Restangular.one('PositionsMails', position_email.id).remove().then(function () {\n $uibModalInstance.close();\n });\n }\n\n }])\n\n.controller(\"PositionAddressModalCtrl\", ['LoginService', '$scope', '$uibModalInstance', 'Restangular', 'modalService', '$filter', 'positionAddress', function (LoginService, $scope, $uibModalInstance, Restangular, modalService, $filter, positionAddress) {\n\n $scope.allowWrite = LoginService.permissionExist(\"GROUPS_WRITE\");\n $scope.positionAddressModal = (!angular.isUndefined(positionAddress) ? angular.copy(positionAddress) : {});\n $scope.positionAddressOrigin = (!angular.isUndefined(positionAddress) ? positionAddress : {});\n\n //Positions_contacts_scopes y tl\n Restangular.all('PositionsAddressScopes').getList().then(function (positionsAddressessScopes) {\n\n $scope.positionsAddressessScopes = positionsAddressessScopes;\n //Seleccionamos el correspondiente.\n\n if ($scope.positionAddressModal !== null && angular.isUndefined($scope.positionAddressModal.position_address_scope_id)) {\n $scope.positionsAddressessScopes.forEach(function (pcs) {\n if (pcs.code === \"PUBLIC\") $scope.positionAddressModal.position_address_scope_id = pcs.id;\n });\n }\n\n });\n\n Restangular.all('Countries').getList().then(function (countries) {\n\n $scope.countries = countries;\n //Seleccionamos el correspondiente.\n if ($scope.positionAddressModal != null) {\n $scope.positionAddressModal.FK_positions_addresses_countries = { selected: null };\n $scope.countries.forEach(function (pct) {\n if (pct.id == $scope.positionAddressModal.country_id) $scope.positionAddressModal.FK_positions_addresses_countries.selected = pct;\n });\n }\n\n });\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n $scope.savePositionAddress = function () {\n\n // Devolvemos el control al principal\n\n $scope.positionAddressModal.FK_positions_addresses_positions_addresses_scopes = _.find($scope.positionsAddressessScopes, function (scope) { return scope.id == $scope.positionAddressModal.position_address_scope_id; });\n\n $uibModalInstance.close({ edited: $scope.positionAddressModal, origin: $scope.positionAddressOrigin });\n\n };\n\n // savePositionAddress\n\n\n}])\n\n.controller(\"PositionContactModalCtrl\", ['LoginService', '$scope', '$uibModalInstance', 'Restangular', 'modalService', '$filter', 'positionContactInfo', '$log',\n function (LoginService, $scope, $uibModalInstance, Restangular, modalService, $filter, positionContactInfo, $log) {\n\n $scope.allowWrite = LoginService.permissionExist(\"GROUPS_WRITE\");\n $scope.positionContactModal = (!angular.isUndefined(positionContactInfo) ? angular.copy(positionContactInfo) : {});\n $scope.positionContactOrigin = (!angular.isUndefined(positionContactInfo) ? positionContactInfo : {});\n\n $log.debug(positionContactInfo);\n\n //Positions_contacts_scopes y tl\n Restangular.all('PositionsContactsScopes').getList().then(function (positionsContactsScopes) {\n\n $scope.positionsContactsScopes = positionsContactsScopes;\n //Seleccionamos el correspondiente.\n if ($scope.positionContactModal !== null && angular.isUndefined($scope.positionContactModal.position_contact_scope_id)) {\n $scope.positionsContactsScopes.forEach(function (pcs) {\n if (pcs.code === \"PUBLIC\") $scope.positionContactModal.position_contact_scope_id = pcs.id;\n });\n }\n });\n\n Restangular.all('PositionsContactsTypes').getList().then(function (positionsContactsTypes) {\n\n $scope.positionsContactsTypes = positionsContactsTypes;\n //Seleccionamos el correspondiente.\n if ($scope.positionContactModal != null) {\n $scope.positionsContactsTypes.forEach(function (pct) {\n if (pct.id == $scope.positionContactModal.position_contact_type_id) $scope.positionContactModal.FK_positions_contacts_positions_contacts_types.selected = pct;\n });\n }\n });\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n $scope.savePositionContact = function () {\n //Devolvemos el control al principal\n $scope.positionContactModal.FK_positions_contacts_positions_contacts_scopes = _.find($scope.positionsContactsScopes, function (scope) { return scope.id == $scope.positionContactModal.position_contact_scope_id; });\n\n $uibModalInstance.close({ edited: $scope.positionContactModal, origin: $scope.positionContactOrigin });\n\n };//save\n\n\n}])\n\n.controller(\"GroupGroupModalCtrl\", ['$q', 'LoginService', '$scope', '$uibModalInstance', 'Restangular', 'parent_list','allow_select_multple', '$filter', '$timeout', '$stateParams', 'treeService','show_color', 'group_type', '$log',\n function ($q, LoginService, $scope, $uibModalInstance, Restangular, parent_list, allow_select_multple, $filter, $timeout, $stateParams, treeService, show_color, group_type, $log) {\n\n $log.debug(`group_type = ${group_type}`);\n\n $scope.allowWrite = LoginService.permissionExist(\"GROUPS_WRITE\");\n\n $scope.newParents = parent_list;\n \n $scope.newParentsClone = angular.copy(parent_list);\n $log.debug($scope.newParentsClone);\n\n $scope.show_color = show_color;\n\n\n $scope.search = {};\n\n $scope.gridDesciendeDeBuscadorOptions = {\n pdfTitle: $filter('translate')('groups.desciende_de'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n showTreeExpandNoChildren: false,\n paginationPageSizes: [50, 200, 500],\n paginationPageSize: 50,\n enableSelectAll: false,\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n exporterFieldCallback: function (grid, row, col, value) {\n if (col.name == 'customName') {\n return row.entity.customNamePDF;\n } else {\n return value;\n }\n\n },\n columnDefs: [\n { name: 'id', visible: false, exporterSuppressExport: true },\n {\n name: 'customName', displayName: $filter('translate')('groups.name'), enableFiltering: false,\n enableHiding: false, cellTemplate: '
'\n\n },\n {\n visible: allow_select_multple, name: 'is_parent', displayName: $filter('translate')('groups.is_parent'), enableFiltering: false, width: 100,\n enableHiding: false, enableColumnMenu: false, cellTemplate: \"
\" +\n \"
\",\n }, {\n visible: (allow_select_multple ? false : true), name: 'is_parent2', displayName: $filter('translate')('groups.is_parent'), enableFiltering: false, width: 100,\n enableHiding: false, enableColumnMenu: false, cellTemplate: \"
\" +\n \"
\",\n }\n ],\n getData: function (options) {\n var deferred = $q.defer();\n options.group_id = $stateParams.id;\n options.customName = $scope.search.name;\n options.group_type = group_type;\n\n\n Restangular.all('Groups').getList(options).then(function (results) {\n var filledList = _.map(results, function (group) {\n group.is_parent = _.filter($scope.newParentsClone, function (relation) {\n return relation.parent_group_id == group.id;\n }).length > 0;\n return group;\n });\n var data = treeService.groups(filledList, null);\n data.totalRows = results.totalRows;\n deferred.resolve(data);\n }, function (response) {\n deferred.reject(response);\n });\n return deferred.promise;\n }\n };\n\n $scope.searchGroups = function () {\n if ($scope.hasSearched) {\n $scope.gridDesciendeDeBuscadorOptions.loadData(false);\n }\n $scope.hasSearched = true;\n\n };\n\n /*\n * Función llamada al hacer click\n */\n $scope.check = function (group) {\n\n if (group.is_parent) {\n $scope.newParentsClone.push({\n parent_group_id: group.id,\n child_group_id: $stateParams.id,\n color: group.color\n });\n }\n else {\n $scope.newParentsClone = _.filter($scope.newParentsClone, function (relation) { return relation.parent_group_id != group.id; });\n }\n if ($scope.newParentsClone.length > 1) $scope.search.apply_parent_color = false;\n\n };\n\n /*\n * Función llamada al hacer click cuando es un radio button.\n */\n $scope.checkSingle = function (group) {\n $scope.newParentsClone = [];\n $log.debug(group);\n $log.debug($scope.newParentsClone);\n $scope.newParentsClone.push({\n parent_group_id: group.id\n });\n };\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n $scope.saveGroupsGroups = function () {\n //Devolvemos el control al principal\n \n $uibModalInstance.close({ parents_clone: $scope.newParentsClone, apply_parent_color: $scope.search.apply_parent_color });\n\n };//savePositionAddress\n\n /*\n * Ponemos foco en el buscador\n */\n $timeout(function () {\n angular.element(\"#name\").focus();\n\n }, 100);\n}])\n\n.controller(\"SearchPersonsModalCtrl\", ['gridService', '$timeout', 'LoginService', '$scope', '$uibModalInstance', 'Restangular', 'modalService', '$filter', '$http', '$stateParams', '$q', '$uibModal', 'options', '$rootScope', '$log',\n function (gridService, $timeout, LoginService, $scope, $uibModalInstance, Restangular, modalService, $filter, $http, $stateParams, $q, $uibModal, options, $rootScope, $log) {\n\n $scope.showError = false;\n $scope.selectedRows = [];\n $scope.options = options;\n $scope.showResults = false;\n $scope.personPositionModal = {};\n $scope.personPositionOrigin = {};\n $scope.personPositionModal.persons_groups = {};\n $scope.personPositionModal.FK_positions_groups = null;\n $scope.eventFilter = {\n name: \"\",\n surname: \"\",\n lastname: \"\",\n position: \"\",\n state: \"\",\n listPositionsIds: [],\n is_inactive: false\n };\n\n\n\n $scope.parsePersonType = function (person_type) {\n\n $log.debug(person_type);\n var result = \"\";\n\n if (person_type == \"authority\") {\n\n result = $filter('translate')('persons.title');\n\n } if (person_type === \"anonymous\") {\n\n result = $filter('translate')('persons.title_anonymous');\n\n } else if (person_type === \"imported\") {\n\n result = $filter('translate')('persons.title_imported');\n\n } else if (person_type === \"enrolled\") {\n\n result = $filter('translate')('inscriptions_forms.inscripted');\n\n }\n\n return result;\n };\n\n if ($scope.personPositionModal.position_order == 0) $scope.personPositionModal.position_order = null;\n \n //cargamos los grupos de información\n var optionsPIG = { entity_type: \"persons\" };\n Restangular.all('InformationsGroups').getList(optionsPIG).then(function (personsInformationGroups) {\n $scope.personsInformationGroups = personsInformationGroups.filter(m => m.use_in_search == true);\n $scope.personsInformationGroups.forEach(function (pig) {\n if (pig.configuration != \"\") pig.configuration = JSON.parse(pig.configuration);\n });\n\n $scope.checkboxSimpleOptions = [\n { option: null, label: $filter('translate')('informations.all'), checked: true },\n { option: true, label: $filter('translate')('events.staff.yes'), checked: false },\n { option: false, label: $filter('translate')('events.staff.no'), checked: false }\n ];\n });\n //Custom function. return null values instead of undefined\n function isDefinedAndNotNull(val) {\n return angular.isDefined(val) && val !== null;\n };\n\n $scope.searchPersons = function () {\n $scope.selectedRows = [];\n $scope.showResults = true;\n if (angular.isDefined($scope.gridPersonsOptions)) {\n $scope.gridPersonsOptions.loadData(false);\n } else {\n $scope.gridPersonsOptions = {\n exporterMenuCsv: false,\n enableFiltering: false,\n enableGridMenu: true,\n paginationPageSizes: [20, 40, 60],\n pdfTitle: $rootScope.title,\n paginationPageSize: 20,\n exporterOlderExcelCompatibility: true,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n this.gridApi.core.on.rowsRendered($scope, callbackFunctionItemChange);\n this.gridApi.selection.on.rowSelectionChanged($scope, callbackFunctionRowSelected);\n this.gridApi.selection.on.rowSelectionChangedBatch($scope, callbackFunctionRowSelected);\n },\n columnDefs: [\n { name: 'id', visible: false, exporterSuppressExport: true, width: 80 },\n { name: 'id_ext', visible: false, exporterSuppressExport: true, width: 80 },\n {\n name: 'is_active', displayName: \" \", visible: true, exporterSuppressExport: true, width: 30, enableHiding: false,\n cellTemplate: \"
\" +\n \"\" +\n \"\" +\n \"
\"\n },\n {\n field: 'image_id',\n enableSorting: false,\n visible: $stateParams.person_type != 'anonymous',\n width: 50,\n enableFiltering: false,\n customFormatFn: function (value) {\n if (value != null) {\n var img = {\n image: value,\n width: 30\n };\n return img;\n } else {\n return \"\";\n }\n },\n displayName: $filter('translate')('persons_reports.photo'),\n cellTemplate: \"
\"\n },\n { name: 'name', displayName: $filter('translate')('persons.name'), enableFiltering: true, enableHiding: false, minWidth: 80, maxWidth: 150 },\n { name: 'surname', displayName: $filter('translate')('persons.surname'), enableFiltering: true, enableHiding: true, minWidth: 80, maxWidth: 150 },\n { name: 'lastname', displayName: $filter('translate')('persons.lastname'), enableFiltering: true, enableHiding: true, minWidth: 60, maxWidth: 150 },\n {\n name: 'person_type', displayName: $filter('translate')('persons.type'), enableFiltering: true,\n cellTemplate: '
{{grid.appScope.parsePersonType(row.entity.person_type)}}
'\n },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('persons.edit'), action: 'ng-if=\"row.entity.is_active || row.entity.person_type==\\'anonymous\\' || row.entity.person_type==\\'imported\\'\" ui-sref=\"persons.edit({person_type: row.entity.person_type, id:row.entity.id})\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('persons.edit'), action: 'ng-if=\"!row.entity.is_active\" ui-sref=\"persons.edit({person_type: \\'inactive\\', id:row.entity.id})\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('persons.button_delete'), action: 'ng-click=\"grid.appScope.DeleteDialog(row.entity.id,row.entity.name, row.entity.surname);\" ng-if=\"grid.appScope.allowWrite && (grid.appScope.allowDelete || (grid.appScope.allowDiscard && (grid.appScope.person_type==\\'anonymous\\' || grid.appScope.person_type==\\'imported\\' )))\" ', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n\n // options.person_type = $scope.person_type;\n\n options.is_active = true;\n\n if ($scope.eventFilter.name != \"\") options.name = $scope.eventFilter.name;\n if ($scope.eventFilter.surname != \"\") options.surname = $scope.eventFilter.surname;\n if ($scope.eventFilter.lastname != \"\") options.lastname = $scope.eventFilter.lastname;\n if ($scope.eventFilter.position != \"\") options.position_name = $scope.eventFilter.position;\n if ($scope.eventFilter.state != \"\") options.state = $scope.eventFilter.state;\n if ($scope.eventFilter.listPositionsIds.length > 0) options.listPositionsIds = $scope.eventFilter.listPositionsIds;\n\n var pigs = \"\";\n for (var key in $scope.eventFilter.pigs) {\n if (typeof $scope.eventFilter.pigs[key] != \"undefined\" && $scope.eventFilter.pigs[key] != \"\") {\n if (typeof ($scope.eventFilter.pigs[key]) == \"object\") {\n //estamos en el selector simple.\n // pigs += (pigs != \"\" ? \"#\" : \"\") + key + \"=>\" + $scope.eventFilter.pigs[key].checked;\n var infoFilter = $scope.personsInformationGroups.filter(function (el) { return el.id == key; });\n if (infoFilter.length == 1) {\n if (infoFilter[0].type == \"datetime\") {\n if ($scope.eventFilter.pigs[key] != null) pigs += (pigs != \"\" ? \"#\" : \"\") + key + \"=>\" + new Date($scope.eventFilter.pigs[key]).toISOString();\n } else if (infoFilter[0].type == \"checkboxSimple\") {\n if ($scope.eventFilter.pigs[key].checked != \"\") pigs += (pigs != \"\" ? \"#\" : \"\") + key + \"=>\" + $scope.eventFilter.pigs[key].checked;\n } else {\n pigs += (pigs != \"\" ? \"#\" : \"\") + key + \"=>\" + $scope.eventFilter.pigs[key];\n }\n }\n } else {\n pigs += (pigs != \"\" ? \"#\" : \"\") + key + \"=>\" + $scope.eventFilter.pigs[key];\n }\n }\n }\n options.pigs = pigs;\n\n var deferred = $q.defer();\n\n Restangular.all('Persons/GetAllPersonsFiltered').post(options).then(function (results) {\n\n var data = results.rows;\n var personsIds = [];\n\n angular.forEach(data, function (dataR) {\n if (personsIds.indexOf(dataR.id) < 0) {\n personsIds.push(dataR.id);\n }\n });\n\n //Obtenemos sus imágenes\n if (personsIds.length > 0 && options._pageSize != null) { //para que no casque si quieren imprimir todo...\n $http({\n method: 'post',\n url: (window as any).CONFIG.api_url + 'Persons/ImagesSmall',\n params: { ids: personsIds }\n }).then(function (resultsImage, status, headers, config) {\n angular.forEach(data, function (person) {\n for (var i = 0; i < resultsImage.data.length; i++) {\n if (person.id == resultsImage.data[i].person_id) {\n person.image_small = resultsImage.data[i].image_small;\n break;\n }\n }\n });\n });\n }\n\n data.totalRows = results.totalRows;\n $scope.totalRows = results.totalRows;\n $scope.persons = data;\n deferred.resolve(data);\n });\n return deferred.promise;\n }\n };\n }\n };\n\n let callbackFunctionRowSelected = function (row, evt) {\n let addAll = row.length > 1;\n\n if (!addAll) {\n //buscamos si ya existe la persona añadida\n var index = $scope.selectedRows.map(function (e) { return e.id; }).indexOf(row.entity.id);\n if (index < 0) {\n if (row.isSelected) {\n $scope.selectedRows.push({ id: row.entity.id, positionId: [row.entity.positionId] });\n } else {\n $scope.selectedRows.splice(index, 1);\n }\n } else {\n //ya existe, si is seleccionado, lo añadimos y sino lo borramos.\n if (row.isSelected) {\n $scope.selectedRows.map(function (e) { if (e.id == row.entity.id) e.positionId.push(row.entity.positionId) });\n } else {\n\n for (let i = 0; i < $scope.selectedRows.length; i++) {\n if ($scope.selectedRows[i].id == row.entity.id) {\n\n //var indexPosition = $scope.selectedRows[i].positionId.map(function (e) { return e.positionId; }).indexOf(row.entity.positionId);\n var indexPosition = $scope.selectedRows[i].positionId.indexOf(row.entity.positionId);\n var lengthOfPositions = $scope.selectedRows[i].positionId.map(function (e) { return e.positionId; }).length;\n $log.debug(row.entity.positionId + \" \" + indexPosition);\n }\n }\n\n $scope.selectedRows.map(function (e) { if (e.id == row.entity.id) e.positionId.splice(indexPosition, 1) });\n if (lengthOfPositions == 1) {\n //eliminamos a la persona\n var index = $scope.selectedRows.map(function (e) { return e.id; }).indexOf(row.entity.id);\n $scope.selectedRows.splice(index, 1);\n }\n }\n }\n } else {\n if (row[0].isSelected) {\n // se ha seleccionado todo.\n $scope.selectedRows = [];\n for (let i = 0; i < $scope.gridPersonsOptions.gridApi.grid.options.totalItems; i++) { $scope.selectedRows.push(i); };\n } else {\n $scope.selectedRows = [];\n }\n }\n };\n\n let callbackFunctionItemChange = function () {\n $timeout(function () {\n for (var i = 0; i < $scope.gridPersonsOptions.data.length; i++) {\n var row = $scope.gridPersonsOptions.data[i];\n for (var select = 0; select < $scope.selectedRows.length; select++) {\n let selected = $scope.selectedRows[select];\n if (row.id == selected.id) {\n $scope.gridPersonsOptions.gridApi.selection.toggleRowSelection(row);\n break\n }\n };\n }\n }, 350);\n // lo pongo así porque sino falla la primera vez\n };\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n $scope.addGuests = function (continueOption) {\n\n var addAll = $scope.gridPersonsOptions.gridApi.selection.getSelectAllState();\n var ids = new Array();\n if (addAll) {\n let options: any = {};\n options.person_type = $scope.person_type;\n options.is_active = true;\n\n if ($scope.eventFilter.name != \"\") options.name = $scope.eventFilter.name;\n if ($scope.eventFilter.surname != \"\") options.surname = $scope.eventFilter.surname;\n if ($scope.eventFilter.lastname != \"\") options.lastname = $scope.eventFilter.lastname;\n if ($scope.eventFilter.position != \"\") options.position_name = $scope.eventFilter.position;\n if ($scope.eventFilter.state != \"\") options.state = $scope.eventFilter.state;\n if ($scope.eventFilter.listPositionsIds.length > 0) options.listPositionsIds = $scope.eventFilter.listPositionsIds;\n\n var pigs = \"\";\n for (var key in $scope.eventFilter.pigs) {\n if (typeof $scope.eventFilter.pigs[key] != \"undefined\" && $scope.eventFilter.pigs[key] != \"\") {\n if (typeof ($scope.eventFilter.pigs[key]) == \"object\") {\n //estamos en el selector simple.\n pigs += (pigs != \"\" ? \"#\" : \"\") + key + \"=>\" + $scope.eventFilter.pigs[key].checked;\n } else {\n pigs += (pigs != \"\" ? \"#\" : \"\") + key + \"=>\" + $scope.eventFilter.pigs[key];\n }\n }\n }\n\n options.pigs = pigs;\n\n Restangular.all('Persons/GetAllPersonsFiltered').post(options).then(function (results) {\n var data = results.rows;\n angular.forEach(data, function (dataR) {\n if (ids.indexOf(dataR.id) < 0) {\n //personsIds.push(dataR.id);\n ids.push(dataR.id);\n }\n });\n $uibModalInstance.close(ids);\n });\n } else {\n let selectedRows = $scope.gridPersonsOptions.gridApi.selection.getSelectedRows();;\n angular.forEach(selectedRows, function (row) {\n ids.push(row.id);\n });\n if (ids.length > 0) {\n //if (continueOption == 0) {\n $uibModalInstance.close(ids);\n //} else {\n // if (!$scope.$$phase) $scope.$apply();\n // $scope.$parent.loadGuests();\n //}\n }\n }\n \n };//savePersonPosition\n\n $scope.searchGroup = function () {\n\n let $modalInstance = $uibModal.open({\n animation: true,\n template: SearchGroupModalView,\n size: \"lg\",\n controller: \"SearchGroupModalCtrl\",\n resolve: {\n preselect: function () {\n return false; //para preseleccionar los grupos ya buscados\n },\n event_id: function () {\n return 0;\n },\n is_filter: function () {\n return false;\n },\n listGroupsIds: function () {\n return [];\n },\n listPositionsIds: function () {\n return [];\n }\n }\n });\n //Response del modal\n $modalInstance.result.then(function (groups) {\n if (groups.listPositions.length > 0) {\n $scope.eventFilter.listPositionsIds = groups.listPositions;\n $scope.searchPersons();\n }\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n if (!$scope.$$phase) $scope.$apply();\n });\n };\n\n $scope.clearGroupFilter = function () {\n $scope.eventFilter = {\n name: \"\",\n surname: \"\",\n lastname: \"\",\n position: \"\",\n state: \"\",\n listPositionsIds: []\n };\n\n $scope.searchPersons();\n };\n\n}])\n .controller(\"GroupsDeleteModalCtrl\", ['$scope', '$uibModalInstance', 'Restangular', 'modalService', '$filter', '$http', '$stateParams', '$uibModal', '$rootScope', '$state', function ($scope, $uibModalInstance, Restangular, modalService, $filter, $http, $stateParams, $uibModal, $rootScope, $state) {\n\n $scope.deleteOptions = { deleteDescendants: false };\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n $scope.onAccept = function () {\n $scope.group.remove($scope.deleteOptions).then(function () {\n toastr.success($filter('translate')('groups.delete_ok'));\n $state.go(\"groups.list\");\n }, function (error) {\n toastr.error(error.data.ExceptionMessage);\n }\n );\n };\n\n }]);\n\n","import Encoding from \"encoding-japanese\";\n\nimport toastr from 'toastr';\nimport _ from 'lodash';\n\nimport MapGroupModalView from \"./mapsGroupsModal.html\";\nimport AddNewGroupModalView from \"../persons/addGroupModal.html\";\nimport PositionModalView from \"./PositionModal.html\";\nimport GroupGroupModalView from \"./GroupGroupModal.html\";\n\nangular.module(\"groups\")\n\n .controller(\"GroupsListCtrl\", ['LoginService', '$rootScope', '$scope', '$http', 'generateDocumentService', '$q', 'i18nService', 'Restangular', 'uiGridTreeViewConstants', 'gridService', 'treeService', 'modalService', '$uibModal', '$filter', '$translate', '$state', 'datasetsService', '$log',\n function (LoginService, $rootScope, $scope, $http, generateDocumentService, $q, i18nService, Restangular, uiGridTreeViewConstants, gridService, treeService, modalService, $uibModal, $filter, $translate, $state, datasetsService, $log) {\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"GROUPS_WRITE\");\n $scope.allowImport = LoginService.permissionExist(\"PERSONS_IMPORT\");\n $scope.showNewData = false;\n $scope.search = false;\n $scope.searchValues = { show_empty_positions: true};\n $scope.selected = {};\n $scope.group_type = \"civil\";\n\n $rootScope.title = $filter('translate')('groups.title');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('groups.title') }\n ];\n\n $scope.listPositionsIds = [];\n $scope.listGroupsIds = [];\n\n $scope.showOptions = false;\n // mostrar opciones de seleccionar/deseleccionar todo\n\n // mostrar opciones de seleccionar/deseleccionar todo\n\n // Vamos is hay que mostrar el tab de grupos civiles y militares \n Restangular.one('Companies', $rootScope.company_id).get().then(function (results) {\n $scope.military_groups_enabled = results.military_groups_enabled;\n\n if ($scope.military_groups_enabled) {\n $scope.loadDataNew();\n }\n }); \n \n $scope.gridOptions = {\n pdfTitle: \"Grupos\",\n exporterMenuCsv: true,\n enableGridMenu: true,\n enableSorting: false, \n showTreeExpandNoChildren: false,\n expandAllRows: true,\n paginationPageSizes: [50, 200, 500],\n paginationPageSize: 50,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n exporterFieldCallback: function (grid, row, col, value) {\n if (col.name == 'customName') {\n return row.entity.customNamePDF;\n } else {\n return value;\n }\n },\n\n columnDefs: [\n {\n name: 'customName', displayName: $filter('translate')('groups.name'), enableFiltering: false,\n enableHiding: false, cellTemplate: '
'\n },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('groups.edit'), action: 'ui-sref=\"groups.edit({group_id:row.entity.group_id,id:row.entity.id})\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('groups.delete'), action: 'ng-click=\"grid.appScope.deleteDialog(row.entity.id,row.entity.name);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n options.customName = $scope.searchValues.name;\n var deferred = $q.defer(); \n Restangular.all('Groups').getList(options).then(function (results) {\n var data = treeService.groups(results, null);\n data.totalRows = results.totalRows; \n deferred.resolve(data);\n }, function (response) {\n deferred.reject(response);\n });\n return deferred.promise;\n }\n };\n\n $scope.goToEdit = function (rowEntity) {\n $state.go(\"groups.edit\", { group_id: rowEntity.group_id, id: rowEntity.id });\n }\n\n $scope.goToAdd = function (rowEntity) {\n\n let options: any = {};\n\n if (rowEntity) {\n options.descendsFrom = rowEntity.id\n };\n if ($scope.group_type) {\n options.group_type = $scope.group_type;\n }\n\n $state.go(\"groups.edit\", options);\n }\n \n $scope.deleteDialog = function (id, name) {\n $scope.id = id;\n $scope.name = name;\n modalService.confirm({\n title: $filter('translate')('groups.delete'),\n message: $filter('translate')('groups.delete_message')+\" \" + $scope.name + \"?\",\n onAccept: function () {\n Restangular.one('Groups', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('groups.delete_ok'));\n //$scope.gridOptions.data = $scope.gridOptions.data.filter(function (el) { return el.id != $scope.id; });\n $scope.gridOptions.loadData();\n }, function (response) {\n $log.error(\"Error with status code\", response.status);\n });\n }\n });\n };\n \n $scope.mapGroup = function () {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: MapGroupModalView,\n size: \"x-lg\",\n controller: \"MapGroupModalCtrl\",\n scope: $scope\n });\n };\n\n $scope.export = function () {\n var options = {\n filters: {\n NAME: $scope.searchValues.name,\n TYPE: $scope.group_type != null ? $scope.group_type : \"civil\"\n }\n };\n\n datasetsService.exportByType(\"groups\", options);\n };\n \n $scope.groupsLoaded = [];\n\n $scope.loadDataNew = function (aux, id) {\n\n let options = { id: id, customName: $scope.searchValues.name, show_empty_positions: $scope.searchValues.show_empty_positions, group_type: $scope.group_type};\n \n if (id == null) { \n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + 'Groups/GetGroupsFromId',\n params: options\n }).then(function (results, status, headers, config) {\n $scope.newData = results.data; \n $scope.showNewData = true;\n });\n } else {\n //miramos si ya está descargado, si es así, lo eliminamos del array\n if (aux.FK_groups_groups_groups1 == null) {\n $scope.groupsLoaded[id] = true;\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + 'Groups/GetGroupsFromId',\n params: options\n }).then(function (results, status, headers, config) {\n if (id == null) {\n $scope.newData = results.data;\n } else {\n //buscamos la posición donde ponerlo......\n aux.FK_groups_groups_groups1 = results.data;\n }\n $scope.showNewData = true;\n });\n } else {\n aux.FK_groups_groups_groups1 = null;\n $scope.groupsLoaded[id] = false;\n }\n }\n }\n\n // Cambiamos el tipo de grupo \n $scope.changeGroupType = function (group_type) {\n\n $scope.listPositionsIds = [];\n $scope.listGroupsIds = [];\n\n $scope.group_type = group_type;\n $scope.loadDataNew(null);\n\n }\n\n /* Al cargarse el DOM, la función $scope.changeGroupType (y por tanto la función $scope.loadDataNew) se aplica automáticamente, \n porque está ligada en el atributo selected del uib - tab, que aparece seleccionado por defecto.\n Para que no llamar a lso datos 2 veces, dejo esta llamada comentada */\n // $scope.loadDataNew(null);\n\n $scope.addNewGroup = function (group_id) {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: AddNewGroupModalView,\n controller: \"AddNewGroupModalCtrl\",\n size: \"lg\",\n resolve: {\n group_id: function () {\n return group_id;\n }\n }\n });\n $modalInstance.result.then(function (result) {\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n });\n };\n\n $scope.addPosition = function (group) {\n\n let position: any = { isNew: true };\n position.group_id = group.id;\n position.position_type = group.group_type;\n position.FK_positions_tl_positions = [];\n position.FK_positions_contacts_positions = [];\n position.FK_positions_addresses_positions = [];\n\n let $modalInstance = $uibModal.open({\n animation: true,\n template: PositionModalView,\n controller: \"PositionModalCtrl\",\n size: 'lg',\n resolve: {\n position: function () {\n return position;\n }, position_list: function () {\n return null;\n }, group: function () {\n return group;\n }, fromView: function () {\n return \"Groups\";\n }\n }\n\n });\n $modalInstance.result.then(function (resultModal) {\n var resultvalue = resultModal.edited;\n Restangular.all(\"positions/\").post(resultvalue).then(function (result) {\n //buscamos referencia y añadimos nueva posicion\n group.FK_positions_groups.push(result);\n });\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n });\n }\n\n $scope.editPosition = function (position, group) {\n Restangular.one(\"Positions\", position.id).get().then(function (res) {\n\n let $modalInstance = $uibModal.open({\n animation: true,\n template: PositionModalView,\n controller: \"PositionModalCtrl\",\n size: 'lg',\n resolve: {\n position: function () {\n return res;\n }, position_list: function () {\n return null;\n }, group: function () {\n return null;\n }, fromView: function () {\n return \"Groups\";\n }\n }\n\n });\n $modalInstance.result.then(function (resultModal) {\n\n var resultvalue = resultModal.edited;\n var deletedValue = resultModal.deleted;\n if (typeof deletedValue != \"undefined\") {\n group.FK_positions_groups.splice(deletedValue);\n } else {\n Restangular.all(\"positions/\" + resultvalue.id).customPUT(resultvalue).then(function (result) {\n //buscamos referencia y reemplazamos completa\n var positionRestored = $filter('filter')(group.FK_positions_groups, { id: position.id }, true)[0];\n\n positionRestored.FK_positions_tl_positions[0].name = result.name;\n });\n }\n }, function () {\n });\n })\n \n };\n\n $scope.toggleCheckGroup = function (group, checked) {\n if (checked == true) {\n angular.forEach(group.FK_positions_groups, function (value) {\n if ($scope.listPositionsIds.indexOf(value.id) === -1) {\n $scope.listPositionsIds.push(value.id);\n value.checked = true;\n }\n })\n } else {\n angular.forEach(group.FK_positions_groups, function (value) {\n if ($scope.listPositionsIds.indexOf(value.id) !== -1) {\n $scope.listPositionsIds.splice($scope.listPositionsIds.indexOf(value.id), 1) ; //se elimina del array\n value.checked = false;\n }\n });\n }\n }\n\n $scope.toggleCheckPosition = function (item) {\n if ($scope.listPositionsIds.indexOf(item.id) === -1 && item.checked) {\n $scope.listPositionsIds.push(item.id);\n } else {\n $scope.listPositionsIds.splice($scope.listPositionsIds.indexOf(item.id), 1);\n }\n };\n\n $scope.toggleCheckGroupItself = function (item) {\n if ($scope.listGroupsIds.indexOf(item.id) === -1 && item.checked) {\n $scope.listGroupsIds.push(item.id);\n } else {\n $scope.listGroupsIds.splice($scope.listGroupsIds.indexOf(item.id), 1);\n }\n };\n\n $scope.movePositions = function () {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: GroupGroupModalView,\n controller: \"GroupGroupModalCtrl\",\n size: 'lg',\n resolve: {\n parent_list: function () {\n return [];\n },\n allow_select_multple: function () {\n return false;\n },\n show_color: function () {\n return false;\n },\n group_type: function () {\n return $scope.group_type != null ? $scope.group_type : \"civil\";\n }\n\n }\n });\n\n\n //Retorno de los datos desde el modal.\n $modalInstance.result.then(function (data) {\n var groupId = data.parents_clone;\n \n //movemos las posiciones a ese grupo.\n if (groupId.length > 0) {\n Restangular.all('Positions').customGET(\"MovePositionsToGroup\", { group_id: groupId[0].parent_group_id, positionsIds: $scope.listPositionsIds }).then(function (result) {\n if (result) {\n toastr.success($filter('translate')('position.move_success'));\n $scope.loadDataNew(null);\n $scope.listPositionsIds = [];\n } else {\n toastr.error($filter('translate')('position.move_error'))\n }\n });\n }\n if (!$scope.$$phase) $scope.$apply();\n\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n // $scope.identity = {};\n });\n };\n\n\n $scope.moveGroups = function () {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: GroupGroupModalView,\n controller: \"GroupGroupModalCtrl\",\n size: 'lg',\n resolve: {\n parent_list: function () {\n return [];\n },\n allow_select_multple: function () {\n return false;\n },\n show_color: function () {\n return false;\n },\n group_type: function () {\n return $scope.group_type != null ? $scope.group_type : \"civil\";\n }\n }\n });\n\n\n $modalInstance.result.then(function (data) {\n\n $log.debug('data');\n $log.debug(data);\n\n var groupId = data.parents_clone;\n\n $log.debug(`groupId = ${groupId}`);\n\n //movemos las posiciones a ese grupo.\n if (groupId.length > 0) {\n Restangular.all('Groups').customGET(\"MoveGroupsToGroup\", { group_id: groupId[0].parent_group_id, groupsIds: $scope.listGroupsIds }).then(function (result) {\n if (!result.success) {\n modalService.message({\n title: \"Error\", \n message: result.message,\n onAccept: function () { }\n });\n\n } else {\n toastr.success($filter('translate')('groups.move_success'));\n $scope.loadDataNew(null);\n $scope.listGroupsIds = [];\n }\n });\n }\n if (!$scope.$$phase) $scope.$apply();\n\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n // $scope.identity = {};\n });\n }\n\n $scope.printGroupsAuthoritiesTree = function (group_id) {\n var params = {\n entity_type: \"groups\",\n entity_type_id: null,\n documents: { codes: [\"GROUPS\", \"GROUPS_AUTHORITIES\"] }\n };\n generateDocumentService.documentNew({\n params: params,\n onAccept: function (data) {\n angular.forEach(data, function (item) {\n $http({\n method: 'post',\n url: (window as any).CONFIG.api_url + 'documentgenerator/Generate',\n params: { document_id: item.document_id, group_id: group_id, order: 'prefered', outputType: 'pdf' }\n }).then(function (result, status, headers, config) {\n var url = (window as any).CONFIG.api_url + 'documentgenerator/download/' + result.data;\n window.open(url, '_blank');\n });\n })\n }\n });\n };\n\n // Importación CSV\n\n // Personas\n\n let importCSVConfigured = false;\n let groupImportId = null;\n\n let initImportCSV = function () {\n $(\"#frmCSV\").change(function () {\n let fileInput = document.querySelector('#frmCSV') as HTMLInputElement;\n let file = fileInput?.files?.[0];\n if (file) {\n let reader = new FileReader();\n reader.onload = function (e) {\n const codes = new Uint8Array(e.target?.result as ArrayBuffer);\n const detectedEncoding = Encoding.detect(codes);\n try {\n let unicodeString = Encoding.convert(codes, {\n to: 'unicode',\n from: detectedEncoding,\n type: 'string'\n });\n\n let request = {\n file: btoa(unicodeString),\n person_type: \"anonymous\",\n mime: file.type\n }\n\n Restangular.all('Persons/ImportCSV?group_id=' + groupImportId).post(request).then(function (data) {\n $state.go('groups.import_people', { people: data, group_id: groupImportId});\n });\n } catch (e) {\n // Uncaught RangeError: Maximum call stack size exceeded\n }\n };\n\n reader.readAsArrayBuffer(file);\n\n }\n });\n };\n\n $scope.importCSV = function(group_id) {\n groupImportId = group_id;\n if(!importCSVConfigured) {\n importCSVConfigured = true;\n initImportCSV();\n }\n $(\"#frmCSV\").trigger(\"click\");\n };\n\n // Grupos \n let importGroupCSVConfigured = false;\n\n let initImportGroupCSV = function () {\n $(\"#frmGroupCSV\").change(function () {\n let fileInput = document.querySelector('#frmGroupCSV') as HTMLInputElement;\n let file = fileInput?.files?.[0];\n if (file) {\n let reader = new FileReader();\n reader.onload = function (e) {\n const codes = new Uint8Array(e.target?.result as ArrayBuffer);\n // @ts-ignore\n const detectedEncoding = Encoding.detect(codes);\n try {\n // @ts-ignore\n let unicodeString = Encoding.convert(codes, {\n to: 'unicode',\n from: detectedEncoding,\n type: 'string'\n });\n\n let request = {\n file: btoa(unicodeString),\n person_type: \"anonymous\",\n mime: file.type\n }\n Restangular.all('Groups/ImportCSV').post(request).then(function (data) {\n $state.go('groups.import_group', { groupRows: data });\n });\n } catch (e) {\n // Uncaught RangeError: Maximum call stack size exceeded\n }\n };\n\n reader.readAsArrayBuffer(file);\n }\n });\n };\n\n $scope.importGroupCSV = function () {\n\n if (!importGroupCSVConfigured) {\n importGroupCSVConfigured = true;\n initImportGroupCSV();\n }\n $(\"#frmGroupCSV\").trigger(\"click\");\n };\n\n $scope.printGroupsTree = function () {\n var params = {\n entity_type: \"groups\",\n entity_type_id: null,\n documents: { codes: [\"GROUPS\"] }\n };\n generateDocumentService.documentNew({\n params: params,\n onAccept: function (data) {\n angular.forEach(data, function (item) {\n $http({\n method: 'post',\n url: (window as any).CONFIG.api_url + 'documentgenerator/Generate',\n params: { document_id: item.document_id, group_id: 0, order: 'prefered', outputType: 'pdf' }\n }).then(function (result, status, headers, config) {\n var url = (window as any).CONFIG.api_url + 'documentgenerator/download/' + result.data;\n window.open(url, '_blank');\n });\n })\n }\n });\n };\n\n }])\n\n\n .controller(\"MapGroupModalCtrl\", [ '$scope', '$uibModalInstance', 'Restangular', 'modalService', '$filter', '$http', '$stateParams', '$q', '$uibModal', 'treeService', function ($scope, $uibModalInstance, Restangular, modalService, $filter, $http, $stateParams, $q, $uibModal, treeService) {\n\n $scope.space = \"      \";\n Restangular.all('Groups').getList({group_type : $scope.group_type}).then(function (results) {\n\n var data = treeService.groups(results, null);\n $scope.groups = data;\n });\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n }])\n\n;","import BreadcrumbView from \"../common/breadcrumb/breadcrumb.html\";\nimport GroupsListView from \"./groups-list.html\";\nimport GroupsEditView from \"./groups-edit.html\";\nimport PersonImportView from \"./import/person-import.html\";\nimport FullGroupImportView from \"./import/fullGroup-import.html\";\n\n\nangular.module(\"groups\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('groups', {\n url: \"/groups\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n })\n .state('groups.list', {\n url: \"/list\",\n controller: \"GroupsListCtrl\",\n template: GroupsListView,\n cache: false,\n requiredPermission: [\"GROUPS_READ\"] \n }) \n .state('groups.edit', {\n url: \"/edit/:id\",\n controller: \"GroupsEditCtrl\",\n template: GroupsEditView,\n cache: false,\n params: {\n descendsFrom: null,\n group_type: null,\n },\n requiredPermission: [\"GROUPS_READ\"]\n })\n .state('groups.import_people', {\n url: \"/import_people\",\n controller: \"GroupsImportPeopleCtrl\",\n template: PersonImportView,\n cache: false,\n requiredPermission: [\"GROUPS_READ\"],\n params: {\n people: null,\n group_id: 0\n }\n })\n .state('groups.import_group', {\n url: \"/import_group\",\n controller: \"GroupsImportGroupCtrl\",\n template: FullGroupImportView,\n cache: false,\n requiredPermission: [\"GROUPS_READ\"],\n params: {\n groupRows: null,\n }\n })\n }])\n;","angular.module(\"groups\")\n\n .controller(\"GroupsImportGroupCtrl\", ['$scope', '$stateParams',\n function ($scope, $stateParams) {\n $scope.groupRows = $stateParams.groupRows;\n }]);","import './identifiers';\nimport './identifiers-list';\nimport './identifiers-edit';","angular.module(\"identifiers\")\n\n .controller(\"IdentifiersEditCtrl\", ['$scope', '$rootScope', '$controller', '$state', '$stateParams', 'Restangular', '$uibModal', 'modalService', '$timeout', 'LoginService','$filter', function ($scope, $rootScope, $controller, $state, $stateParams, Restangular, $uibModal, modalService, $timeout, LoginService, $filter) { \n\n $rootScope.title = $filter('translate')('identifiers.title');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('identifiers.title') }\n ];\n\n $scope.identifiers = {};\n\n if (angular.isUndefined($stateParams.id) || $stateParams.id == \"\") { \n\n $rootScope.breadcrumb = [\n { title: $filter('translate')('grupos.list'), url: \"identifiers.list\" },\n { title: $filter('translate')('groups.add') }\n ];\n\n }\n else {\n\n $rootScope.breadcrumb = [\n { title: $filter('translate')('groups.list'), url: \"identifiers.list\" },\n { title: $filter('translate')('groups.edit') }\n ];\n\n Restangular.one('Identifiers', $stateParams.id).get().then(function (results) {\n $scope.identifiers = results; \n });\n\n }\n \n Restangular.all('IdentifiersTypes').getList($scope.options).then(function (identifierTypes) {\n $scope.selectIdentifierTypes = identifierTypes;\n if (identifierTypes.length == 1)\n $scope.identifiers.identifiers_types = identifierTypes[0];\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n\n\n $scope.saveIdentifiers = function (frmIdentifier) {\n $scope.identifiers.identifier_type_id = $scope.identifiers.identifiers_types.id;\n if ($scope.identifiers != null && !angular.isUndefined($scope.identifiers.id)) { \n $scope.identifiers.put().then(function (result) {\n if (!angular.isUndefined(result.id)){\n $state.go(\"identifiers.list\");\n toastr.success($filter('translate')('identifiers.identifier_modified'));\n } else {\n $scope.errorMessage = result.message;\n }\n });\n } else { \n Restangular.all('Identifiers').post($scope.identifiers).then(function (result) {\n if (!angular.isUndefined(result.id)){\n $state.go(\"identifiers.list\");\n toastr.success($filter('translate')('identifiers.identifier_created'));\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n }\n\n $scope.checkDelete = function () {\n modalService.confirm({\n title: $filter('translate')('groups.delete'),\n message: $filter('translate')('identifiers.delete_message') + \" \" + $scope.identifiers.value + \"?\",\n onAccept: function () {\n $scope.identifiers.remove().then(function () {\n $state.go(\"identifiers.list\");\n toastr.success(\"Identidad eliminada\");\n });\n }\n });\n };\n \n }]);","angular.module(\"identifiers\")\n\n .controller(\"IdentifiersListCtrl\", ['$rootScope', '$scope', '$http', '$interval', '$q', 'i18nService', 'Restangular', 'gridService', 'modalService', '$filter', '$state', '$log',\n function ($rootScope, $scope, $http, $interval, $q, i18nService, Restangular, gridService, modalService, $filter, $state, $log) {\n \n $rootScope.title = $filter('translate')('identifiers.title');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('identifiers.title') }\n ];\n\n $scope.gridOptions = {\n exporterMenuCsv: true,\n enableGridMenu: true,\n //gridMenuShowHideColumns: false,\n paginationPageSizes: [20, 40, 60],\n paginationPageSize: 20,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n pdfTitle: $filter('translate')('identifiers.title'),\n columnDefs: [\n { name: 'id', visible: false, exporterSuppressExport: true }, \n { name: 'FK_identifiers_identifiers_types.name', displayName: $filter('translate')('identifiers.type'), enableFiltering: true, enableHiding: false },\n { name: 'value', displayName: $filter('translate')('identifiers.value'), enableFiltering: true, enableHiding: false },\n { name: 'description', displayName: $filter('translate')('identifiers.description'), enableFiltering: true, enableHiding: false },\n {\n name: ' ', width: 150, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, exporterSuppressExport: true, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('groups.edit'), action: 'ui-sref=\"identifiers.edit({id:row.entity.id})\"', cssIconClass: \"fa fa-pencil\" },\n { title: $filter('translate')('groups.delete'), action: 'ng-if=\"row.entity.type!=\\'ALERT\\'\" ng-click=\"grid.appScope.BorrarDialog(row.entity.id,row.entity.value);\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\"})\n }, \n ],\n getData: function (options) {\n return Restangular.all('Identifiers').getList(options);\n }\n\n };\n\n $scope.goToEdit = function (rowEntity) {\n $state.go(\"identifiers.edit\", { id: rowEntity.id });\n }\n\n\n $scope.BorrarDialog = function (id, name) {\n $scope.id = id;\n $scope.name = name;\n modalService.confirm({\n title: $filter('translate')('groups.delete'),\n message: $filter('translate')('identifiers.delete_message')+\" \"+ $scope.name + \"?\",\n onAccept: function () {\n Restangular.one('Identifiers', $scope.id).remove().then(function () {\n $scope.gridOptions.data =\n $scope.gridOptions.data.filter(function (el) { return el.id != $scope.id; });\n toastr.success($filter('translate')('identifiers.delete_success'));\n }, function (response) {\n $log.error(\"Error with status code\", response.status);\n alert(\"Error al borrar\")\n });\n }\n });\n\n };\n }])\n\n;","import BreadcrumbView from \"../common/breadcrumb/breadcrumb.html\";\nimport IdentifiersListView from \"./identifiers-list.html\";\nimport IdentifiersEditView from \"./identifiers-edit.html\";\n\n\nangular.module(\"identifiers\", [])\n\n .config(['$stateProvider' ,function ($stateProvider) {\n $stateProvider\n .state('identifiers', {\n url: \"/identifiers\",\n abstract: true,\n cache: false,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n })\n .state('identifiers.list', {\n url: \"/list\",\n cache: false,\n controller: \"IdentifiersListCtrl\",\n template: IdentifiersListView,\n data: { pageTitle: 'Identificadores' }\n })\n .state('identifiers.edit', {\n url: \"/edit/:id\",\n cache: false,\n controller: \"IdentifiersEditCtrl\",\n template: IdentifiersEditView,\n data: { pageTitle: 'Identificadores' }\n })\n ;\n }])\n;","import './import_documents';\nimport './import_documents-list';\n","import ImportDocumentsModalView from \"./ImportDocumentsModal.html\";\n\n\nangular.module(\"import_documents\")\n\n .controller(\"ImportDocumentsListCtrl\", ['LoginService', '$rootScope', '$scope', 'Restangular', 'gridService', 'modalService', '$uibModal', '$filter', '$translate', '$stateParams', '$state', '$log',\n function (LoginService, $rootScope, $scope, Restangular, gridService, modalService, $uibModal, $filter, $translate, $stateParams, $state, $log) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"IMPORT_DOCUMENT_WRITE\");\n\n $rootScope.title = $filter('translate')('import_documents.title');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('import_documents.title') }\n ];\n\n $scope.gridOptionsImportDocument = {\n pdfTitle: $filter('translate')('import_documents.title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n enableSorting: true,\n paginationPageSizes: [20, 40, 60],\n paginationPageSize: 20,\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n { name: 'name', displayName: $filter('translate')('import_documents.name'), enableFiltering: true, enableHiding: false },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n //{ title: $filter('translate')('import_documents.button_download'), action: 'ng-click=\"grid.appScope.download(row.entity);\"', cssIconClass: \"fa fa-download\" },\n { title: $filter('translate')('import_documents.button_upload'), action: 'ng-click=\"grid.appScope.openModal(row.entity);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-upload\" }\n ], { cssClass: \"pull-right\" })\n }\n\n ],\n getData: function (options) {\n return Restangular.all('ImportDocuments').getList(options);\n }\n };\n\n $scope.download = function (file) {\n $log.debug(\"Eliminado, el documento correcto lo tiene Rodolfo. Si se quiere, revisar el documento en App_Data/import_formats\");\n window.open((window as any).CONFIG.api_url + 'ImportDocuments/getFile?id=' + file.id, '_blank', '');\n }\n\n $scope.openModal = function (file) {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: ImportDocumentsModalView,\n size: \"md\",\n controller: \"ImportDocumentsModalCtrl\",\n resolve: {\n options: function () {\n return { file: file };\n }\n }\n });\n //Response del modal\n $modalInstance.result.then(function (data) {\n }, function () {\n });\n }\n }\n ])\n\n .controller(\"ImportDocumentsModalCtrl\", ['LoginService','options', '$rootScope', '$scope', 'Restangular', 'gridService', 'modalService', '$uibModalInstance', '$filter', '$translate', '$stateParams', '$state', 'Upload', '$log',\n function (LoginService, options, $rootScope, $scope, Restangular, gridService, modalService, $uibModalInstance, $filter, $translate, $stateParams, $state, Upload, $log) {\n\n $scope.import_documents = options.file;\n if ($scope.import_documents.file_name != null)\n $scope.import_documents.file_name = \"\";\n\n $log.debug(\"options: \")\n $log.debug(options);\n\n $log.debug(\"$scope.import_documents: \")\n $log.debug($scope.import_documents)\n\n $scope.file = {};\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"IMPORT_DOCUMENT_WRITE\");\n\n $scope.uploadFiles = function ($file) {\n $scope.errorMsg = undefined;\n $scope.file = $file;\n $scope.import_documents.file_name = $scope.file.name;\n }\n\n var uploadToServer = function () {\n $scope.file.upload = Upload.upload({\n url: (window as any).CONFIG.api_url + \"ImportDocuments/\" + $scope.import_documents.method,\n data: { file: $scope.file, name: $scope.import_documents.file_name, insert: false },\n });\n $scope.file.upload.then(function (response) {\n if (response.data) {\n $log.debug(response.data, response);\n $scope.errorMsg = response.data;\n $scope.isValidated = $scope.errorMsg.length == 0;\n } else {\n $scope.import_documents.file_name = undefined;\n $uibModalInstance.close();\n }\n }, function (response) { //error\n $scope.errorMsg = response.data;\n });\n }\n\n var insertToDataBase = function () {\n $scope.file.upload = Upload.upload({\n url: (window as any).CONFIG.api_url + \"ImportDocuments/\" + $scope.import_documents.method, // + $scope.import_documents.method,\n data: { file: $scope.file, name: $scope.import_documents.file_name, insert: true },\n });\n\n $scope.file.upload.then(function (response) {\n if (response.data) {\n $scope.errorMsg = response.data;\n } else {\n toastr.success($filter('translate')('import_documents.upload_success'));\n $scope.import_documents.file_name = undefined;\n $uibModalInstance.close();\n if ($scope.import_documents.method == 'importFilePersonsGroups') {\n $state.go(\"persons.list\", { person_type: 'imported' }); // A petición de Rodolfo, después de importar personas vamos directamente al l\n }\n }\n }, function (response) { //error\n $scope.errorMsg = response.data;\n });\n }\n\n //Validación del fichero seleccionado\n $scope.onAccept = function () {\n if ($scope.import_documents.file_name != \"\" && $scope.import_documents.file_name != \"undefined\" && $scope.import_documents.file_name != null) {\n uploadToServer();\n }\n };\n\n //Importar los datos del fichero seleccionado\n $scope.onImport = function () {\n if ($scope.import_documents.file_name != \"\" && $scope.import_documents.file_name != \"undefined\" && $scope.import_documents.file_name != null) {\n insertToDataBase();\n }\n };\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n }\n ])\n;","import BreadcrumbView from \"../common/breadcrumb/breadcrumb.html\";\nimport ImportDocumentsListView from \"./import_documents-list.html\";\n\n\nangular.module(\"import_documents\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('import_documents', {\n url: \"/import_documents\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n cache: false,\n })\n .state('import_documents.list', {\n url: \"/list\",\n controller: \"ImportDocumentsListCtrl\",\n template: ImportDocumentsListView,\n data: { pageTitle: 'Importación de datos' },\n cache: false,\n requiredPermission: [\"IMPORT_DOCUMENT_READ\"]\n })\n ;\n\n }])\n;","import './indicators_types';\nimport './indicators_types-list';\nimport './indicators_types-edit'; ","angular.module(\"indicators_types\")\n\n .controller(\"IndicatorsTypesEditCtrl\", ['LoginService', '$rootScope', '$scope', '$http', '$stateParams', 'Restangular', '$state', 'modalService', '$filter', function (LoginService, $rootScope, $scope, $http, $stateParams, Restangular, $state, modalService, $filter) {\n \n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"INDICATORS_TYPES_WRITE\");\n\n $rootScope.title = $filter('translate')('indicators_types.title');\n if (angular.isUndefined($stateParams.id) || $stateParams.id == \"\" ) {\n \n $rootScope.breadcrumb = [\n { title: $filter('translate')('indicators_types.list'), url: \"indicators_types.list\" },\n { title: $filter('translate')('indicators_types.add') }\n ];\n $scope.indicator_type = {\n name: ''\n };\n }\n else {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('indicators_types.list'), url: \"indicators_types.list\" },\n { title: $filter('translate')('indicators_types.edit') }\n ];\n Restangular.one('IndicatorsTypes', $stateParams.id).get().then(function (results) {\n $scope.indicator_type = results;\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n\n\n $scope.saveIndicatorType = function () {\n if (angular.isUndefined($stateParams.id) || $stateParams.id == \"\")\n Restangular.all('IndicatorsTypes').post($scope.indicator_type).then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('indicators_types.create_success'));\n $state.go(\"indicators_types.list\");\n } else {\n $scope.errorMessage = result.message;\n }\n });\n else {\n $scope.indicator_type.put().then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('indicators_types.modify_success'));\n $state.go(\"indicators_types.list\");\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n };\n\n $scope.deleteIndicatorType = function () {\n\n modalService.confirm({\n title: $filter('translate')('indicators_types.delete'),\n message: $filter('translate')('indicators_types.delete_message') + \" \" + $scope.indicator_type.name + \"?\",\n onAccept: function () {\n Restangular.one('IndicatorsTypes', $stateParams.id).remove().then(function () {\n toastr.success($filter('translate')('indicators_types.delete_success'));\n $state.go(\"indicators_types.list\");\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n });\n\n };\n\n }])\n\n;","angular.module(\"indicators_types\")\n\n .controller('IndicatorsTypesListCtrl', ['LoginService', '$rootScope', '$scope', 'Restangular', 'gridService', 'modalService', 'uiGridConstants', '$filter', '$state', function (LoginService, $rootScope, $scope, Restangular, gridService, modalService, uiGridConstants, $filter, $state) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"INDICATORS_TYPES_WRITE\");\n\n $rootScope.title = $filter('translate')('indicators_types.title');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('indicators_types.list') }\n ];\n\n $scope.gridOptionsIndicatorsTypes = {\n pdfTitle: $filter('translate')('indicators_types.pdf_title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n paginationPageSizes: [10, 20, 30],\n paginationPageSize: 10,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n { name: 'name', displayName: $filter('translate')('indicators_types.name'), enableFiltering: true, enableHiding: false, enableColumnMenu: false },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('indicators_types.button_edit'), action: 'ui-sref=\"indicators_types.edit({id:row.entity.id})\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('indicators_types.button_delete'), action: 'ng-click=\"grid.appScope.BorrarDialog(row.entity.id,row.entity.name);\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n return Restangular.all('IndicatorsTypes').getList(options);\n }\n \n };\n\n $scope.goToEdit = function (rowEntity) {\n $state.go(\"indicators_types.edit\", { id: rowEntity.id });\n }\n\n $scope.BorrarDialog = function (id,name) {\n $scope.id = id;\n $scope.name = name;\n modalService.confirm({\n title: $filter('translate')('indicators_types.delete'),\n message: $filter('translate')('indicators_types.delete_message') + \" \" + $scope.name + \"?\",\n onAccept: function () {\n Restangular.one('IndicatorsTypes', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('indicators_types.delete_success'));\n $scope.gridOptionsIndicatorsTypes.gridApi.core.raise.itemDeleted($scope);\n \n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n });\n\n };\n\n\n }])\n\n;","import BreadcrumbView from \"../common/breadcrumb/breadcrumb.html\";\nimport IndicatorsTypesListView from \"./indicators_types-list.html\";\nimport IndicatorsTypesEditView from \"./indicators_types-edit.html\";\n\n\nangular.module(\"indicators_types\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('indicators_types', {\n url: \"/indicators_types\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n })\n .state('indicators_types.list', {\n url: \"/list\",\n controller: \"IndicatorsTypesListCtrl\",\n template: IndicatorsTypesListView,\n data: { pageTitle: 'Indicadores' },\n requiredPermission: [\"INDICATORS_TYPES_READ\"]\n })\n .state('indicators_types.edit', {\n url: \"/edit/:id\",\n controller: \"IndicatorsTypesEditCtrl\",\n template: IndicatorsTypesEditView,\n data: { pageTitle: 'Indicadores' },\n requiredPermission: [\"INDICATORS_TYPES_READ\"]\n })\n ;\n }])\n;","import './informations';\nimport './informations-list';\nimport './informations-edit'; ","angular.module(\"informations\")\n\n .controller(\"InformationsEditCtrl\", ['LoginService', '$scope', '$rootScope', '$state', '$stateParams', 'Restangular', 'gridService', '$filter', '$log', '$translate', 'modalService', '$uibModal','Upload',\n function (LoginService, $scope, $rootScope, $state, $stateParams, Restangular, gridService, $filter, $log, $translate, modalService, $uibModal, Upload) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"INFORMATION_WRITE\");\n\n $scope.information = {\n information_type_id: \"\",\n date: new Date()\n };\n\n Restangular.all('Events/AllEvents').getList(options).then(function (events) {\n $scope.selectEvents = events;\n $scope.selectEvents.unshift({\n id: null,\n name: $filter('translate')('informations.no_event')\n });\n });\n\n $scope.downloadUrl = undefined;\n\n $scope.event = $stateParams.id;\n\n if (angular.isDefined($scope.event) && $scope.event != \"\") $scope.information.event_id = parseInt($stateParams.id);\n $scope.currentState = $state.current.name; \n\n if (angular.isUndefined($stateParams.information_id) || $stateParams.information_id == \"\") {\n if ($scope.currentState == 'informations.edit') {\n $rootScope.breadcrumb = [\n {\n title: $filter('translate')('events.informations'),\n url: \"informations.list\"\n },\n {\n title: $filter('translate')('informations.title_add')\n }\n ];\n $rootScope.title = $filter('translate')('events.informations');\n } else {\n Restangular.one('Events', $stateParams.id).get().then(function (results) {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('events.title'), url: \"events.list\" },\n { title: results.name, url: \"events.edit({ id: \" + $stateParams.id + \" })\" },\n { title: $filter('translate')('events.informations'), url: \"events.edit.informations({ id:\" + $scope.event + \" })\" },\n { title: $filter('translate')('informations.title_add') }\n ];\n $rootScope.title = results.name + \" - \" + $filter('translate')('events.informations');\n });\n }\n\n } else { \n\n $scope.id = $stateParams.information_id;\n \n Restangular.one('Informations', $stateParams.information_id).get().then(function (information) {\n if ($scope.currentState == 'informations.edit') {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('informations.title'), url: \"informations.list\" },\n { title: $filter('translate')('informations.title_edit') },\n ];\n\n $rootScope.title = $filter('translate')('informations.title');\n } else {\n Restangular.one('Events', $stateParams.id).get().then(function (results) {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('events.title'), url: \"events.list\" },\n { title: results.name, url: \"events.edit({ id: \" + $stateParams.id + \" })\" },\n { title: $filter('translate')('informations.title'), url: \"events.edit.informations({ id: \" + $scope.event + \" })\" },\n { title: $filter('translate')('informations.title_edit') }\n ];\n $rootScope.title = results.name + \" - \" + $filter('translate')('informations.title');\n });\n }\n $scope.information = information;\n $scope.information.date = new Date($scope.information.date);\n $scope.downloadUrl = (window as any).CONFIG.api_url + 'Informations/getFile?id=' + $scope.information.id + '&filename=' + $scope.information.file_name\n });\n }\n\n Restangular.all('InformationsTypes').getList().then(function (types) {\n $scope.selectTypes = types;\n });\n\n var options = {\n searchName: \"\",\n is_template: false\n };\n\n $scope.onSelectFile = function (event) {\n if (event.target.files && event.target.files[0]) {\n var reader = new FileReader();\n\n reader.readAsDataURL(event.target.files[0]); // read file as data url\n\n reader.onload = (event) => { // called once readAsDataURL is completed\n $scope.downloadUrl = event.target.result;\n }\n }\n }\n\n $scope.uploadFile = function (id) {\n $scope.showProgressBar = true;\n $scope.file.upload = Upload.upload({\n url: (window as any).CONFIG.api_url + \"Informations/uploadFile\",\n data: { file: $scope.file, name: id }\n });\n\n $scope.file.upload.then(function (response) {\n toastr.success($filter('translate')('informations.save_success'));\n if ($scope.currentState == 'informations.edit') {\n $state.go(\"informations.list\");\n } else {\n $state.go(\"events.edit.informations\", { id: $scope.event });\n }\n }, function (response) {\n if (response.status > 0)\n $scope.errorMsg = response.status + ': ' + response.data;\n }, function (evt) {\n // Math.min is to fix IE which reports 200% sometimes\n //$scope.file.progress = Math.min(100, parseInt(100.0 * evt.loaded / evt.total)); // Ralentiza MUCHO la subida\n });\n };\n\n $scope.regExp = new RegExp(\"(image/*)|(audio/*)|(video/*)\");\n\n $scope.regExpImage = new RegExp(\"(image/*)\");\n $scope.regExpVideo = new RegExp(\"(video/*)\");\n $scope.regExpAudio = new RegExp(\"(audio/*)\");\n\n $scope.downloadFile = function () {\n window.open((window as any).CONFIG.api_url + 'Informations/getFile?id=' + $scope.information.id + '&filename=' + $scope.information.file_name, '_blank', '');\n };\n\n\n $scope.$watch('file', function (newValue, oldValue) {\n if (newValue !== null && typeof (newValue) !== \"undefined\") {\n $scope.information.file_name = newValue.name;\n $scope.information.mimetype = newValue.type === \"\" || newValue.type === null || !angular.isDefined(newValue.type) ? \"application/octet-stream\" : newValue.type;\n $scope['file'] = newValue;\n }else\n $scope['file'] = oldValue;\n });\n\n $scope.saveInformation = function () {\n if (angular.isUndefined($stateParams.information_id) || $stateParams.information_id === \"\") {\n Restangular.all('Informations').post($scope.information).then(function (result) {\n if (angular.isDefined(result.id)) {\n $scope.uploadFile(result.id);\n }\n });\n } else {\n $scope.information.put().then(function (result) {\n if (angular.isDefined(result.id)) {\n if (angular.isDefined($scope.file) && $scope.file !== null) //guardo imagen solo si ha cambiado\n $scope.uploadFile(result.id);\n else {\n toastr.success($filter('translate')('informations.edit_success'));\n if ($scope.currentState === 'informations.edit') {\n $state.go(\"informations.list\");\n } else {\n $state.go(\"events.edit.informations\", { id: $scope.event });\n }\n }\n }\n });\n }\n };\n\n $scope.checkDelete = function () {\n modalService.confirm({\n title: $filter('translate')('informations.button_delete'),\n message: $filter('translate')('informations.delete_message') + \" \" + $scope.information.name + \"?\",\n onAccept: function () {\n $scope.information.remove().then(function () {\n toastr.success($filter('translate')('informations.delete_success'));\n if ($scope.currentState === 'informations.edit') {\n $state.go(\"informations.list\");\n } else {\n $state.go(\"events.edit.informations\", { id: $scope.event });\n }\n });\n }\n });\n };\n\n }])\n;\n\n","import InformationsModalListView from \"./informations-modal_list.html\";\n\nangular.module(\"informations\")\n\n .controller(\"InformationsListCtrl\", ['LoginService', '$rootScope', '$scope', 'Restangular', 'gridService', 'modalService', '$uibModal', '$filter', '$stateParams', '$state',\n function (LoginService, $rootScope, $scope, Restangular, gridService, modalService, $uibModal, $filter, $stateParams, $state) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"INFORMATION_WRITE\");\n $scope.showReturnToEvent = false;\n $scope.currentState = $state.current.name;\n\n\n if ($scope.currentState === 'informations.list') {\n $rootScope.title = $filter('translate')('events.informations');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('events.informations') }\n ];\n } else {\n Restangular.one('Events', $stateParams.id).get().then(function (results) {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('events.title'), url: \"events.list\" },\n { title: results.name, url: \"events.edit({ id: \" + $stateParams.id + \" })\" },\n { title: $filter('translate')('events.informations') }\n ];\n $rootScope.title = results.name + \" - \" + $filter('translate')('events.informations');\n });\n }\n\n\n\n $scope.event = $stateParams.id;\n\n $scope.search = {\n event_id: angular.isDefined($stateParams.id) && $stateParams.id != \"\" ? parseInt($stateParams.id) : undefined\n };\n \n\n $scope.InformationTypesOptions = [];\n\n $scope.showInformations = false;\n\n Restangular.all('Users').getList().then(function (persons) {\n $scope.selectPersons = persons;\n $scope.selectPersons.unshift({\n id: null,\n name: $filter('translate')('informations.all')\n });\n $scope.search.user = $scope.selectPersons[0];\n });\n\n Restangular.all('InformationsTypes').getList().then(function (types) {\n $scope.selectTypes = types;\n\n $scope.selectTypes.unshift({\n id: null,\n name: $filter('translate')('informations.all')\n });\n $scope.search.information_type = $scope.selectTypes[0];\n });\n\n /*Restangular.all('Events').getList({ is_template: false }).then(function (events) {\n $scope.selectEvents = events;\n $scope.selectEvents.unshift({\n id: null,\n name: $filter('translate')('informations.all')\n });\n });*/\n var options = {\n searchName: \"\",\n is_template: false\n };\n Restangular.all('Events/AllEvents').getList(options).then(function (events) {\n $scope.selectEvents = events;\n $scope.selectEvents.unshift({\n id: null,\n name: $filter('translate')('informations.all')\n });\n });\n\n $scope.gridOptionsInformations = {\n pdfTitle: $filter('translate')('informations.title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n enableSorting: true,\n paginationPageSizes: [20, 40, 60],\n paginationPageSize: 20,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n {\n name: 'date', width: 120, displayName: $filter('translate')('informations.date'), cellFilter: 'toLocalDate | date:\\'dd/MM/yyyy HH:mm\\'',\n enableFiltering: false, enableColumnMenu: false,\n customFormatFn: function (value) {\n if (value != null) {\n var fecha = new Date(value);\n return $filter('date')(fecha, 'dd/MM/yyyy HH:mm');\n }\n return \"\";\n },\n },\n { name: 'name', displayName: $filter('translate')('informations.name'), enableFiltering: true, enableHiding: false },\n {\n name: 'information_type', width: 120, field: 'FK_informations_informations_types.name', displayName: $filter('translate')('informations.type'),\n enableFiltering: false\n },\n { name: 'event_name', field: 'FK_informations_events.name', displayName: $filter('translate')('informations.event'), enableFiltering: false, visible: ($scope.event != null ? false : true) },\n { name: 'user_name', field: 'FK_informations_users.name', displayName: $filter('translate')('informations.publisher'), enableFiltering: false },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('informations.button_edit'), action: 'ui-sref=\"informations.edit({information_id:row.entity.id})\" ng-if=\"grid.appScope.allowWrite && grid.appScope.currentState==\\'informations.list\\'\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('informations.button_edit'), action: 'ui-sref=\"events.edit.informations.edit({information_id:row.entity.id, event:grid.appScope.event})\" ng-if=\"grid.appScope.allowWrite && grid.appScope.currentState==\\'events.edit.informations\\'\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('informations.button_delete'), action: 'ng-click=\"$event.stopPropagation();grid.appScope.deleteDialog(row.entity.id,row.entity.name);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n }\n\n ],\n getData: function (options) {\n options.date_from = $scope.search.date_from;\n options.date_to = $scope.search.date_to;\n options.description = $scope.search.description;\n\n if ((angular.isUndefined(options.information_type) || options.information_type == \"\") && angular.isDefined($scope.search.information_type))\n options.information_type_id = $scope.search.information_type.id;\n\n if ((angular.isUndefined(options.event_name) || options.event_name == \"\") && angular.isDefined($scope.search.event_id))\n options.event_id = $scope.search.event_id;\n\n if ((angular.isUndefined(options.user_name) || options.user_name == \"\") && angular.isDefined($scope.search.user))\n options.user_id = $scope.search.user.id;\n return Restangular.all('Informations').getList(options);\n }\n };\n\n $scope.goToEdit = function (rowEntity) {\n if ($scope.currentState == \"informations.list\" && $scope.allowWrite)\n $state.go(\"informations.edit\", { information_id: rowEntity.id });\n else if ($scope.currentState == \"events.edit.informations\" && $scope.allowWrite)\n $state.go(\"events.edit.informations.edit\", { information_id: rowEntity.id, event: $scope.event });\n\n };\n\n\n $scope.deleteDialog = function (id, name) {\n $scope.id = id;\n $scope.name = name;\n modalService.confirm({\n title: $filter('translate')('informations.button_delete'),\n message: $filter('translate')('informations.delete_message') + \" \" + $scope.name + \"?\",\n onAccept: function () {\n Restangular.one('Informations', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('informations.delete_success'));\n $scope.gridOptionsInformations.gridApi.core.raise.itemDeleted($scope);\n\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n });\n\n };\n\n /**\n * Abre un modal que permite añadir varios archivos de golpe.\n */\n $scope.addMultiple = function () {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: InformationsModalListView,\n controller: \"InformationsModalListCtrl\",\n backdrop: 'static',\n keyboard: false,\n resolve: {\n options: function () {\n return {event_id: $stateParams.id};\n }\n }\n });\n\n $modalInstance.result.then(function (success) {\n if (angular.isDefined($scope.gridOptionsInformations)) $scope.gridOptionsInformations.loadData(false);\n });\n };\n\n }])\n\n;","import BreadcrumbView from \"../common/breadcrumb/breadcrumb.html\";\nimport InformationsListView from \"./informations-list.html\";\nimport InformationsEditView from \"./informations-edit.html\";\n\n\nangular.module(\"informations\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('informations', {\n url: \"/informations\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n cache: false,\n })\n .state('informations.list', {\n url: \"/list\",\n controller: \"InformationsListCtrl\",\n template: InformationsListView,\n data: { pageTitle: 'Memoria' },\n cache: false,\n requiredPermission: [\"INFORMATION_READ\"]\n })\n .state('informations.edit', {\n url: \"/edit/:information_id\",\n controller: \"InformationsEditCtrl\",\n template: InformationsEditView,\n data: { pageTitle: 'Memoria' },\n cache: false,\n requiredPermission: [\"INFORMATION_READ\"]\n })\n ;\n }])\n;","import './inscriptions_forms';\nimport './inscriptions_forms-list';\nimport './inscriptions_forms-edit';\nimport './inscriptions_forms-show_inscriptions';","import InscriptionFormFieldModalView from \"./inscriptionFormFieldModal.html\";\n\n\nangular.module(\"inscriptions_forms\")\n\n .controller(\"InscriptionsFormsEditCtrl\", ['event','LoginService', '$scope', '$rootScope', '$controller', '$state', '$stateParams', 'Restangular', '$uibModal', 'modalService', '$compile', 'gridService', '$filter', '$translate', '$q', '$http', '$log',\n function (event, LoginService, $scope, $rootScope, $controller, $state, $stateParams, Restangular, $uibModal, modalService, $compile, gridService, $filter, $translate, $q, $http, $log) {\n\n $scope.inscription_form = {\n FK_inscriptions_forms_fields_inscriptions_forms: [],\n FK_inscriptions_forms_images: {},\n event_id: $stateParams.id\n };\n\n var color = (window as any).CONFIG_TINYMCE[\"no_company_id\"].color;\n var font_size = (window as any).CONFIG_TINYMCE[\"no_company_id\"].font_size;\n var font_family = (window as any).CONFIG_TINYMCE[\"no_company_id\"].font_family;\n if (typeof ((window as any).CONFIG_TINYMCE[\"company_id_\" + LoginService.get(\"companyId\")]) !== 'undefined') {\n if (typeof ((window as any).CONFIG_TINYMCE[\"company_id_\" + LoginService.get(\"companyId\")].font_color_description) !== 'undefined') {\n color = (window as any).CONFIG_TINYMCE[\"company_id_\" + LoginService.get(\"companyId\")].font_color_description;\n }\n if (typeof ((window as any).CONFIG_TINYMCE[\"company_id_\" + LoginService.get(\"companyId\")].font_size) !== 'undefined') {\n font_size = (window as any).CONFIG_TINYMCE[\"company_id_\" + LoginService.get(\"companyId\")].font_size;\n }\n if (typeof ((window as any).CONFIG_TINYMCE[\"company_id_\" + LoginService.get(\"companyId\")].font_family) !== 'undefined') {\n font_family = (window as any).CONFIG_TINYMCE[\"company_id_\" + LoginService.get(\"companyId\")].font_family;\n }\n }\n\n //Info evento.\n $rootScope.title = event.name;\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"INSCRIPTIONS_FORMS_WRITE\");\n $rootScope.title = event.name + \" - \" + $filter('translate')('inscriptions_forms.title');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('events.title'), url: \"events.list\" },\n { title: event.name, url: \"events.edit({ id: \" + event.id + \" })\" },\n { title: $filter('translate')('inscriptions_forms.title'), url: \"events.edit.inscriptions_forms({ event: \" + $stateParams.id + \" })\" },\n ];\n\n Restangular.all('Languages').getList({ use_for_interface: true }).then(function (languages) {\n $scope.languages = languages;\n });\n\n $scope.gridInscriptionsFormsFields = {\n pdfTitle: $filter('translate')('inscriptions_forms.fields'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n enableSorting: true,\n enablePagination: false,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n { name: 'order', width: 40, displayName: $filter('translate')('inscriptions_forms.order'), enableFiltering: false, enableHiding: false },\n { name: 'size', width: 50, displayName: $filter('translate')('inscriptions_forms.size'), enableFiltering: false, enableHiding: true },\n { name: 'name', displayName: $filter('translate')('inscriptions_forms.name'), enableFiltering: true, enableHiding: false },\n { name: 'FK_inscriptions_forms_fields_types_fields.description', displayName: $filter('translate')('inscriptions_forms.type_field'), enableFiltering: true, enableHiding: false },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('inscriptions_forms.button_edit'), action: 'ng-click=\"grid.appScope.addInscriptionFormField(row.entity);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('inscriptions_forms.button_delete'), action: 'ng-click=\"grid.appScope.deleteInscriptionFormField(row.entity);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n }\n ],\n getData: function (options) {\n var deferred = $q.defer();\n if (angular.isDefined($stateParams.inscription_form_id) && $stateParams.inscription_form_id != \"\") {\n\n Restangular.one('InscriptionsForms', $stateParams.inscription_form_id).get().then(function (results) {\n $scope.inscription_form = results;\n //seleccionamos los emails\n $scope.inscription_form.send_email_confirmation = false;\n $scope.inscription_form.send_email_enrolled = false;\n $scope.inscription_form.send_email_rejected = false;\n if ($scope.inscription_form.email_confirmation !== \"\" && $scope.inscription_form.email_confirmation !== null) $scope.inscription_form.send_email_confirmation = true;\n if ($scope.inscription_form.email_enrolled !== \"\" && $scope.inscription_form.email_enrolled !== null) $scope.inscription_form.send_email_enrolled = true;\n if ($scope.inscription_form.email_rejected !== \"\" && $scope.inscription_form.email_rejected !== null) $scope.inscription_form.send_email_rejected = true;\n \n $scope.inscription_form.event_date_init = new Date(results.event_date_init);\n $scope.inscription_form.event_date_end = new Date(results.event_date_end);\n $scope.gridInscriptionsFormsFields.data = $scope.inscription_form.FK_inscriptions_forms_fields_inscriptions_forms;\n var data = $scope.gridInscriptionsFormsFields.data;\n if (angular.isDefined($scope.gridInscriptionsFormsFields.data)) {\n data.totalRows = $scope.gridInscriptionsFormsFields.data.length;\n } else {\n data.totalRows = 0;\n }\n angular.forEach(data, function (aux) {\n if (aux.class === \"col-lg-1 col-md-1 col-sm-1 col-xs-12\") {\n aux.size = \"1/12\";\n } else if (aux.class === \"col-lg-2 col-md-2 col-sm-2 col-xs-12\") {\n aux.size = \"2/12\";\n } else if (aux.class === \"col-lg-3 col-md-3 col-sm-3 col-xs-12\") {\n aux.size = \"3/12\";\n } else if (aux.class === \"col-lg-4 col-md-4 col-sm-4 col-xs-12\") {\n aux.size = \"4/12\";\n } else if (aux.class === \"col-lg-5 col-md-5 col-sm-5 col-xs-12\") {\n aux.size = \"5/12\";\n } else if (aux.class === \"col-lg-6 col-md-6 col-sm-6 col-xs-12\") {\n aux.size = \"6/12\";\n } else if (aux.class === \"col-lg-7 col-md-7 col-sm-7 col-xs-12\") {\n aux.size = \"7/12\";\n } else if (aux.class === \"col-lg-8 col-md-8 col-sm-8 col-xs-12\") {\n aux.size = \"8/12\";\n } else if (aux.class === \"col-lg-9 col-md-9 col-sm-9 col-xs-12\") {\n aux.size = \"9/12\";\n } else if (aux.class === \"col-lg-10 col-md-10 col-sm-10 col-xs-12\") {\n aux.size = \"10/12\";\n } else if (aux.class === \"col-lg-11 col-md-11 col-sm-11 col-xs-12\") {\n aux.size = \"11/12\";\n } else {\n aux.size = \"12/12\";\n }\n });\n deferred.resolve(data);\n });\n }\n return deferred.promise;\n }\n };\n\n $scope.tinymceTitleOptions = {\n resize: true,\n schema: \"html5\",\n relative_urls: false,\n remove_script_host: true,\n formats: {\n bold: { inline: 'b' },\n underline: { inline: 'u' },\n italic: { inline: 'i' },\n alignleft: { selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div', attributes: { align: \"left\" } },\n aligncenter: { selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div', attributes: { align: \"center\" } },\n alignright: { selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div', attributes: { align: \"right\" } },\n alignjustify: { selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div', attributes: { align: \"justify\" } },\n },\n\n invalid_elements: 'strong,em',\n fontsize_formats: \"8px 10px 12px 14px 15px 16px 18px 20px 22px 24px 25px 28px 30px 36px \",\n font_formats: 'Arial=Arial;Cambria=Cambria;Courier New=Courier New;Segoe Script=Segoe Script;Tahoma=Tahoma;Verdana=Verdana',\n body_class: 'custom_tinymce_content',\n forced_root_block: '',\n language: $translate.use().toLowerCase(), //Hay que customizarlo dependiendo del idioma...\n // language_url: \"Scripts/tinymce/langs/es.js\",\n plugins: 'textcolor paste',\n toolbar: \"undo redo | fontsizeselect bold underline italic | forecolor fontselect | alignleft aligncenter alignright alignjustify\",\n menubar: false,\n forced_root_block_attrs: {\n 'style': 'font-family: ' + font_family + '; font-size: ' + font_size\n }\n }; \n\n $scope.save = function (frmInscriptionForm) {\n\n // $log.debug($scope.inscription_form);\n\n if (angular.isDefined($scope.inscription_form.id)) {\n $scope.inscription_form.put().then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('inscriptions_forms.edit_success'));\n $scope.gridInscriptionsFormsFields.loadData(false);\n // $state.go(\"events.edit.inscriptions_forms\", { event: $stateParams.id });\n }\n });\n } else {\n Restangular.all('InscriptionsForms').post($scope.inscription_form).then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('inscriptions_forms.create_success'));\n $state.go(\"events.edit.inscriptions_forms.edit\", { inscription_form_id: result.id });\n $scope.gridInscriptionsFormsFields.loadData(false);\n }\n });\n }\n };\n\n $scope.checkDelete = function () {\n modalService.confirm({\n title: $filter('translate')('inscriptions_forms.button_delete'),\n message: $filter('translate')('inscriptions_forms.delete_message') + \" \" + $scope.inscription_form.event_name + \"?\",\n onAccept: function () {\n $scope.inscription_form.remove().then(function () {\n toastr.success($filter('translate')('inscriptions_forms.delete_success'));\n $state.go(\"events.edit.inscriptions_forms\", { event: $stateParams.id });\n });\n }\n });\n };\n\n $scope.openUrl = function (uid) {\n Restangular.all(\"InscriptionsForms\").customGET(\"CustomGetExternalUrl\").then(function (url) {\n window.open(url + \"/Inscriptions/Index/\" + uid);\n });\n };\n\n $scope.addInscriptionFormField = function (inscriptionFormField) {\n\n var editedIdx = 0;\n\n if ($scope.gridInscriptionsFormsFields.data != null) editedIdx = $scope.gridInscriptionsFormsFields.data.indexOf(inscriptionFormField);\n\n if (angular.isUndefined(inscriptionFormField)) inscriptionFormField = { isNew: true };\n\n let $modalInstance = $uibModal.open({\n animation: true,\n template: InscriptionFormFieldModalView,\n controller: \"InscriptionFormFieldModalCtrl\",\n size: 'lg',\n resolve: {\n inscriptionFormField: function () {\n return inscriptionFormField;\n },\n inscriptionForm: function () {\n return $scope.inscription_form;\n }\n }\n });\n\n $modalInstance.result.then(function (data) {\n\n var inscriptionFormFieldValue = data.edited;\n if (inscriptionFormFieldValue.class == \"col-lg-1 col-md-1 col-sm-1 col-xs-12\") {\n inscriptionFormFieldValue.size = \"1/12\";\n } else if (inscriptionFormFieldValue.class == \"col-lg-2 col-md-2 col-sm-2 col-xs-12\") {\n inscriptionFormFieldValue.size = \"2/12\";\n } else if (inscriptionFormFieldValue.class == \"col-lg-3 col-md-3 col-sm-3 col-xs-12\") {\n inscriptionFormFieldValue.size = \"3/12\";\n } else if (inscriptionFormFieldValue.class == \"col-lg-4 col-md-4 col-sm-4 col-xs-12\") {\n inscriptionFormFieldValue.size = \"4/12\";\n } else if (inscriptionFormFieldValue.class == \"col-lg-5 col-md-5 col-sm-5 col-xs-12\") {\n inscriptionFormFieldValue.size = \"5/12\";\n } else if (inscriptionFormFieldValue.class == \"col-lg-6 col-md-6 col-sm-6 col-xs-12\") {\n inscriptionFormFieldValue.size = \"6/12\";\n } else if (inscriptionFormFieldValue.class == \"col-lg-7 col-md-7 col-sm-7 col-xs-12\") {\n inscriptionFormFieldValue.size = \"7/12\";\n } else if (inscriptionFormFieldValue.class == \"col-lg-8 col-md-8 col-sm-8 col-xs-12\") {\n inscriptionFormFieldValue.size = \"8/12\";\n } else if (inscriptionFormFieldValue.class == \"col-lg-9 col-md-9 col-sm-9 col-xs-12\") {\n inscriptionFormFieldValue.size = \"9/12\";\n } else if (inscriptionFormFieldValue.class == \"col-lg-10 col-md-10 col-sm-10 col-xs-12\") {\n inscriptionFormFieldValue.size = \"10/12\";\n } else if (inscriptionFormFieldValue.class == \"col-lg-11 col-md-11 col-sm-11 col-xs-12\") {\n inscriptionFormFieldValue.size = \"11/12\";\n } else {\n inscriptionFormFieldValue.size = \"12/12\";\n }\n\n var inscription_form_field = {\n\n id: inscriptionFormFieldValue.id,\n inscription_form_id: $scope.inscription_form.id,\n type_field_id: inscriptionFormFieldValue.type_field_id,\n name: inscriptionFormFieldValue.name,\n options: inscriptionFormFieldValue.options,\n order: inscriptionFormFieldValue.order,\n mandatory: inscriptionFormFieldValue.mandatory,\n show_in_list: inscriptionFormFieldValue.show_in_list,\n class: inscriptionFormFieldValue.class,\n size: inscriptionFormFieldValue.size,\n exportable: inscriptionFormFieldValue.exportable,\n options_class: inscriptionFormFieldValue.options_class,\n parent_field_id: inscriptionFormFieldValue.parent_field_id,\n parent_option_id: inscriptionFormFieldValue.parent_option_id,\n \n FK_inscriptions_forms_fields_types_fields: inscriptionFormFieldValue.type_field,\n FK_inscriptions_forms_fields_options_inscriptions_forms_fields: inscriptionFormFieldValue.FK_inscriptions_forms_fields_options_inscriptions_forms_fields\n\n };\n\n $log.debug('inscription_form_field');\n $log.debug(inscription_form_field);\n\n if (inscriptionFormFieldValue.isNew) {\n\n // Actualizamos los ordenes\n angular.forEach($scope.inscription_form.FK_inscriptions_forms_fields_inscriptions_forms, function (item) {\n if (item.order >= inscription_form_field.order) {\n item.order++;\n }\n });\n $scope.inscription_form.FK_inscriptions_forms_fields_inscriptions_forms.push(inscription_form_field);\n $scope.gridInscriptionsFormsFields.data = $scope.inscription_form.FK_inscriptions_forms_fields_inscriptions_forms;\n\n } else {\n angular.forEach($scope.inscription_form.FK_inscriptions_forms_fields_inscriptions_forms, function (item) {\n if (item.id != inscription_form_field.id) {\n $log.debug(item.order, inscription_form_field.order, $scope.gridInscriptionsFormsFields.data[editedIdx].order);\n if (inscription_form_field.order < $scope.gridInscriptionsFormsFields.data[editedIdx].order) {\n if (item.order >= inscription_form_field.order && item.order < $scope.gridInscriptionsFormsFields.data[editedIdx].order) {\n item.order++;\n }\n } else if (inscription_form_field.order > $scope.gridInscriptionsFormsFields.data[editedIdx].order) {\n if (item.order > $scope.gridInscriptionsFormsFields.data[editedIdx].order && item.order <= inscription_form_field.order ) {\n item.order--;\n }\n }\n }\n });\n\n $scope.gridInscriptionsFormsFields.data[editedIdx] = inscription_form_field;\n\n }\n\n if (!$scope.$$phase) $scope.$apply();\n\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n if (!$scope.$$phase) $scope.$apply();\n });\n\n };\n\n $scope.deleteInscriptionFormField = function (inscriptionFormField) {\n var editedIdx = $scope.gridInscriptionsFormsFields.data.indexOf(inscriptionFormField);\n $scope.inscription_form.FK_inscriptions_forms_fields_inscriptions_forms.splice(editedIdx, 1);\n //reordenamos.\n angular.forEach($scope.inscription_form.FK_inscriptions_forms_fields_inscriptions_forms, function (item) {\n if (item.order > inscriptionFormField.order) {\n item.order--;\n }\n });\n };\n\n $scope.addFile = function (flowFile) {\n var fileReader = new FileReader();\n fileReader.onload = function (event) {\n var uri = event.target.result;\n $scope.$apply(function () {\n $scope.inscription_form.icon = uri;\n if (!$rootScope.isDefinedAndNotNull($scope.inscription_form.FK_inscriptions_forms_images)) {\n $scope.inscription_form.FK_inscriptions_forms_images = {};\n }\n $scope.inscription_form.FK_inscriptions_forms_images.image = uri;\n });\n };\n fileReader.readAsDataURL(flowFile.file);\n };\n\n $scope.change = function (emailsToCheck) {\n\n if (emailsToCheck === \"send_email_confirmation\") {\n if (!$scope.inscription_form.send_email_confirmation) {\n $scope.inscription_form.email_confirmation = \"\";\n if (!$scope.$$phase) $scope.$apply();\n }\n } else if (emailsToCheck === \"send_email_enrolled\") {\n if (!$scope.inscription_form.send_email_enrolled) $scope.inscription_form.email_enrolled = \"\"; if (!$scope.$$phase) $scope.$apply();\n } else {\n if (!$scope.inscription_form.send_email_rejected) $scope.inscription_form.email_rejected = \"\"; if (!$scope.$$phase) $scope.$apply();\n }\n };\n\n\n }])\n\n .controller(\"InscriptionFormFieldModalCtrl\", ['$scope', '$uibModalInstance', 'Restangular', 'modalService', '$filter', 'inscriptionFormField', 'inscriptionForm', '$log',\n function ($scope, $uibModalInstance, Restangular, modalService, $filter, inscriptionFormField, inscriptionForm, $log) {\n\n $scope.inscriptionFormFieldModal = (!angular.isUndefined(inscriptionFormField) ? angular.copy(inscriptionFormField) : {});\n $scope.inscriptionFormFieldOrigin = (!angular.isUndefined(inscriptionFormField) ? inscriptionFormField : {});\n\n $scope.showOptions = false;\n\n if (angular.isDefined($scope.inscriptionFormFieldModal.FK_inscriptions_forms_fields_types_fields) && $scope.inscriptionFormFieldModal.FK_inscriptions_forms_fields_types_fields.has_options) $scope.showOptions = true;\n\n // Para campos condicionales\n\n $scope.validParentFields = inscriptionForm.FK_inscriptions_forms_fields_inscriptions_forms.filter(m => (m.FK_inscriptions_forms_fields_options_inscriptions_forms_fields != null && m.FK_inscriptions_forms_fields_options_inscriptions_forms_fields.length > 0));\n\n if (inscriptionFormField.parent_field_id != null) {\n $scope.parentField = inscriptionForm.FK_inscriptions_forms_fields_inscriptions_forms.filter(m => m.id == inscriptionFormField.parent_field_id).pop();\n $scope.validOptions = $scope.parentField.FK_inscriptions_forms_fields_options_inscriptions_forms_fields;\n }\n\n $scope.selectParentField = function (item) {\n\n $log.debug(`before the inscriptionFormField.parent_option_id was ${inscriptionFormField.parent_option_id}`)\n\n $scope.parentField = item;\n\n if (!item) {\n\n $scope.inscriptionFormFieldModal.parent_option_id = null;\n\n } else {\n\n $scope.validOptions = item.FK_inscriptions_forms_fields_options_inscriptions_forms_fields; \n let validOptionsIds = $scope.validOptions.map(m => m.id);\n\n $log.debug('validOptionsIds');\n\n $log.debug(validOptionsIds);\n\n $log.debug(`validOptionsIds.includes(inscriptionFormField.parent_option_id) ? ${validOptionsIds.includes($scope.inscriptionFormFieldModal.parent_option_id)}`);\n\n $log.debug(`inscriptionFormField.parent_option_id = ${$scope.inscriptionFormFieldModal.parent_option_id}`);\n\n if ($scope.validOptions.map(m => m.id).includes($scope.inscriptionFormFieldModal.parent_option_id) == false) {\n\n $scope.inscriptionFormFieldModal.parent_option_id = null;\n\n }\n\n }\n\n } \n\n if ($scope.inscriptionFormFieldModal.parent_option_id) {\n\n $scope.parentField = inscriptionForm.FK_inscriptions_forms_fields_inscriptions_forms.filter(m => m.id == $scope.inscriptionFormFieldModal.parent_option_id).pop();\n $scope.inscriptionFormFieldModal.is_conditional_field = true;\n\n } else {\n\n $scope.parentField = null;\n $scope.inscriptionFormFieldModal.is_conditional_field = false;\n\n }\n\n Restangular.all(\"TypesFields\").getList().then(function (results) {\n $scope.selectTypesFields = results;\n });\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n $scope.saveInscriptionFormField = function () {\n\n if (!$scope.inscriptionFormFieldModal.is_conditional_field) {\n $scope.inscriptionFormFieldModal.parent_field_id = null;\n $scope.inscriptionFormFieldModal.parent_option_id = null;\n }\n\n //Devolvemos el control al principal \n for(var i = 0; i < $scope.selectTypesFields.length; i++) {\n if ($scope.selectTypesFields[i].id == $scope.inscriptionFormFieldModal.type_field_id) {\n $scope.inscriptionFormFieldModal.type_field = $scope.selectTypesFields[i];\n break;\n }\n }\n \n $uibModalInstance.close({ edited: $scope.inscriptionFormFieldModal, origin: $scope.inscriptionFormFieldOrigin });\n\n };\n\n //save\n\n $scope.selectTypeField = function () {\n for (var i = 0; i < $scope.selectTypesFields.length; i++) {\n if ($scope.selectTypesFields[i].id == $scope.inscriptionFormFieldModal.type_field_id) {\n if ($scope.selectTypesFields[i].has_options) {\n $scope.showOptions = true;\n } else {\n $scope.showOptions = false;\n }\n break;\n }\n }\n };\n\n $scope.addNewOption = function () {\n if (typeof ($scope.inscriptionFormFieldModal.FK_inscriptions_forms_fields_options_inscriptions_forms_fields) === \"undefined\") $scope.inscriptionFormFieldModal.FK_inscriptions_forms_fields_options_inscriptions_forms_fields = [];\n $scope.inscriptionFormFieldModal.FK_inscriptions_forms_fields_options_inscriptions_forms_fields.push({\n inscription_form_field_id: $scope.inscriptionFormFieldModal.id\n });\n };\n\n $scope.removeOption = function (index) {\n $scope.inscriptionFormFieldModal.FK_inscriptions_forms_fields_options_inscriptions_forms_fields.splice(index, 1);\n };\n\n}]);","import SelectEventModalView from \"../events/tasks/selectEventModal.html\";\n\n\nangular.module(\"inscriptions_forms\")\n\n .controller(\"InscriptionsFormsListCtrl\", ['event', 'LoginService', '$rootScope', '$scope', '$http', '$interval', '$q', 'i18nService', 'Restangular', 'gridService', 'modalService', '$uibModal', '$filter', '$translate', 'clipboard', '$location', 'uiGridExporterService', '$stateParams', 'datasetsService', function (event, LoginService, $rootScope, $scope, $http, $interval, $q, i18nService, Restangular, gridService, modalService, $uibModal, $filter, $translate, clipboard, $location, uiGridExporterService, $stateParams, datasetsService) {\n\n //Comprobamos si tiene permiso escritura \n\n $scope.allowWrite = LoginService.permissionExist(\"INSCRIPTIONS_FORMS_WRITE\");\n $rootScope.title = $filter('translate')('inscriptions_forms.title');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('inscriptions_forms.title') }\n ];\n var urlPublic = \"\";\n Restangular.all(\"InscriptionsForms\").customGET(\"CustomGetExternalUrl\").then(function (url) {\n urlPublic = url;\n });\n //Info evento.\n $rootScope.breadcrumb = [\n { title: $filter('translate')('events.title'), url: \"events.list\" },\n { title: event.name, url: \"events.edit({ id: \" + event.id + \" })\" },\n { title: $filter('translate')('inscriptions_forms.title') }\n ];\n $rootScope.title = event.name + \" - \" + $filter('translate')('inscriptions_forms.title');\n\n $scope.gridOptionsInscriptionsForms = {\n pdfTitle: $filter('translate')('inscriptions_forms.title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n enableSorting: true,\n paginationPageSizes: [20, 40, 60],\n paginationPageSize: 20,\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n { name: 'event_name', displayName: $filter('translate')('inscriptions_forms.event_name'), enableFiltering: true, enableHiding: false },\n //{ name: 'url', displayName: $filter('translate')('inscriptions_forms.url'), enableFiltering: true, enableHiding: false, cellTemplate: \"{{row.entity.uid}}\"},\n\n {\n name: 'event_date_init', displayName: $filter('translate')('inscriptions_forms.date_init'), width: 150,\n type: 'date', cellFilter: 'toLocalDate | date:\\'dd/MM/yyyy\\'',\n customFormatFn: function (value) {\n if (value != null) {\n var fecha = new Date(value);\n return $filter('date')(fecha, 'dd/MM/yyyy');\n }\n return \"\";\n },\n filterHeaderTemplate: '
' +\n '' +\n '
',\n enableFiltering: true, enableColumnMenu: false\n },\n {\n name: 'event_date_end', displayName: $filter('translate')('inscriptions_forms.date_end'), width: 150,\n type: 'date', cellFilter: 'toLocalDate | date:\\'dd/MM/yyyy\\'',\n customFormatFn: function (value) {\n if (value != null) {\n var fecha = new Date(value);\n return $filter('date')(fecha, 'dd/MM/yyyy');\n }\n return \"\";\n },\n filterHeaderTemplate: '
' +\n '' +\n '
',\n enableFiltering: true, enableColumnMenu: false\n },\n { name: 'active', enableFiltering: true, displayName: $filter('translate')('inscriptions_forms.approval_form'), width: 75, cellTemplate: \"
\" +\n \"\" +\n \"\" +\n \"
\" },\n {\n name: ' ', width: 100, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: \"'\n\n },\n ],\n getData: function (options) {\n options.event_id = event.id;\n return Restangular.all('InscriptionsForms').getList(options)\n }\n };\n\n\n $scope.deleteDialog = function (id, event_name) {\n $scope.id = id;\n $scope.event_name = event_name;\n modalService.confirm({\n title: $filter('translate')('inscriptions_forms.button_delete'),\n message: $filter('translate')('inscriptions_forms.delete_message') + \" \" + $scope.event_name + \"?\",\n onAccept: function () {\n Restangular.one('InscriptionsForms', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('inscriptions_forms.delete_success'));\n $scope.gridOptionsInscriptionsForms.gridApi.core.raise.itemDeleted($scope);\n\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n });\n\n };\n\n $scope.copyToClipboard = function (uid) {\n if (!clipboard.supported) {\n alert(urlPublic + \"/Inscriptions/Index/\" + uid);\n } else {\n clipboard.copyText(urlPublic + \"/Inscriptions/Index/\" + uid);\n }\n };\n\n $scope.exportInscriptions = function (id) {\n\n window.open((window as any).CONFIG.api_url + \"/inscriptions/export/csv?inscription_form_id=\" + id);\n return;\n };\n\n\n $scope.export = function (inscription_form_id) {\n let options = {\n filters: {\n EXPORT_TYPE: \"INSCRIPTION\",\n INSCRIPTION_FORM_ID: inscription_form_id,\n EVENT_ID: $stateParams.id\n },\n INSCRIPTION_EXPORTATION: true,\n };\n datasetsService.exportByType(\"inscriptions\", options);\n };\n\n $scope.duplicate = function (id) {\n\n let $modalInstance = $uibModal.open({\n animation: true,\n template: SelectEventModalView,\n controller: \"EventSelectModalCtrl\",\n size: 'lg'\n });\n\n $modalInstance.result.then(function (event) {\n Restangular.all('InscriptionsForms').customPOST({}, \"DuplicateInscription\", { id: id, event_id: event.event.id }).then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('inscriptions_forms.create_success'));\n $scope.gridOptionsInscriptionsForms.loadData();\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n // $scope.identity = {};\n });\n }\n }])\n\n .controller(\"EventSelectModalCtrl\", ['LoginService', '$scope', '$uibModalInstance', 'Restangular', 'modalService', '$filter', '$http', '$stateParams', '$q', 'uiSliderConfig', '$uibModal', function (LoginService, $scope, $uibModalInstance, Restangular, modalService, $filter, $http, $stateParams, $q, event_task_id, event_id, type, uiSliderConfig, $uibModal) {\n\n $scope.selectEvents = [];\n $scope.event = {};\n\n Restangular.all('Events/AllEvents').getList({}).then(function (results) {\n $scope.selectEvents = results;\n });\n\n $scope.saveSelectEvent = function () {\n $uibModalInstance.close($scope.event);\n }\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n }]);\n\n\n;","import ShowInscriptionModalView from \"./showInscriptionModal.html\";\nimport EditInscriptionModalView from \"./editInscriptionModal.html\";\nimport CapacityDetailModalView from \"./capacityDetailModal.html\";\nimport NewInscriptionModalView from \"./newInscriptionModal.html\";\nimport AssignTagModalView from \"./assignTagModal.html\";\n\nimport _ from 'lodash';\n\n\nangular.module(\"inscriptions_forms\")\n\n .controller(\"InscriptionsFormsShowInscriptionsCtrl\", ['LoginService', '$rootScope', '$scope', '$http', '$interval', '$q', 'i18nService', 'Restangular', 'gridService', 'modalService', '$uibModal', '$filter', '$translate', 'clipboard', '$location', 'uiGridExporterService', '$stateParams', '$state', 'datasetsService', 'generateDocumentService', '$log',\n function (LoginService, $rootScope, $scope, $http, $interval, $q, i18nService, Restangular, gridService, modalService, $uibModal, $filter, $translate, clipboard, $location, uiGridExporterService, $stateParams, $state, datasetsService, generateDocumentService, $log) {\n \n // Comprobamos si tiene permiso escritura\n $scope.myDefs = [];\n $scope.inscriptions_approved = [];\n $scope.showActionsButtons = true;\n \n $scope.allowWrite = LoginService.permissionExist(\"INSCRIPTIONS_FORMS_READ\");\n $scope.duplicate_string = $filter('translate')('inscriptions_forms.duplicate_string').toUpperCase();\n\n // Info evento no podemos utilizar la injection al controlador porque esta en guests.list como un ng-include.\n\n if ($state.current.name == \"events.edit.inscriptions_forms.show_inscriptions\") {\n Restangular.one('Events', $stateParams.id).get().then(function (results) {\n $rootScope.title = results.name + \" - \" + $filter('translate')('inscriptions_forms.title');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('events.title'), url: \"events.list\" },\n { title: results.name , url: \"events.edit({ id: \" + results.id + \" })\" },\n { title: $filter('translate')('inscriptions_forms.title'), url: \"events.edit.inscriptions_forms({ event: \" + $stateParams.id + \" })\" },\n ];\n });\n }\n \n /*\n $rootScope.title = $filter('translate')('inscriptions_forms.title');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('inscriptions_forms.title'), url: \"events.edit.inscriptions_forms({ event: \" + $stateParams.id + \" })\" },\n ];\n */\n \n $scope.event = $stateParams.id;\n if (angular.isDefined($stateParams.inscription_form_id)) {\n Restangular.one('InscriptionsForms', $stateParams.inscription_form_id).get().then(function (results) {\n $scope.inscription_form = results\n if ($scope.inscription_form.is_approval_form) {\n $scope.showActionsButtons = false;\n } else {\n $scope.showActionsButtons = true;\n }\n });\n\n // Obtenemos los contadores de pendientes, aprobados y rechazados\n Restangular.all(\"InscriptionsForms\").customGET(\"CustomGetContInscriptions\", { id: $stateParams.inscription_form_id }).then(function (results) {\n $scope.accepted = results.inscriptions_approved_cont;\n $scope.rejected = results.inscriptions_rejected_cont;\n $scope.pending = results.inscriptions_pending_cont;\n });\n\n Restangular.all('InscriptionsFormsfields').getList({ inscription_form_id: $stateParams.inscription_form_id }).then(function (result) {\n var list_fields = _.filter(result, function (field) { return field.show_in_list; });\n for (let i = 0; i < list_fields.length; i++) {\n// $log.debug(result[i].type_field_id, );\n// if (result[i].type_field_id!=6) {\n $scope.myDefs.push({\n field: \"_\" + list_fields[i].id,\n displayName: list_fields[i].name,\n visible: i > 6 ? false : true,\n name: \"_\" + list_fields[i].id\n });\n// }\n }\n\n $scope.myDefs.push({\n name: 'state',\n displayName: $filter('translate')('inscriptions_forms.state'),\n width: 150,\n exporterSuppressExport: true,\n enableSorting: false,\n enableHiding: false,\n enableFiltering: false,\n enableColumnMenu: false,\n cellTemplate: '
' +\n '
' +\n '
' +\n '
' +\n '
'\n });\n\n $scope.myDefs.push({\n name: ' ',\n width: 370,\n exporterSuppressExport: true,\n enableSorting: false,\n enableHiding: false,\n enableFiltering: false,\n enableColumnMenu: false,\n cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('inscriptions_forms.modify_tag'), action: 'ng-if=\"row.entity.state == 1 && row.entity.person_id != null && row.entity.event_guest.identify_id != null\" ng-click=\"grid.appScope.associate_tag(row.entity);\"', cssIconClass: \"fa fa-wifi\" },\n { title: $filter('translate')('inscriptions_forms.assign_tag'), action: 'ng-if=\"row.entity.state == 1 && row.entity.person_id != null && row.entity.event_guest.identify_id == null\" ng-click=\"grid.appScope.associate_tag(row.entity);\"', cssIconClass: \"fa fa-wifi\" },\n { title: $filter('translate')('inscriptions_forms.show_inscription'), action: 'ng-click=\"grid.appScope.show_inscription(row.entity);\"', cssIconClass: \"fa fa-file\" },\n { title: $filter('translate')('inscriptions_forms.edit_inscription'), action: 'ng-click=\"grid.appScope.edit_inscription(row.entity);\"', cssIconClass: \"fa fa-edit\" },\n\n ], { cssClass: \"pull-right\" })\n });\n });\n\n $scope.gridOptionsInscriptionsForms = {\n pdfTitle: $filter('translate')('inscriptions_forms.title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: true,\n enableSorting: false,\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: $scope.myDefs,\n getData: function (options) {\n var deferred = $q.defer();\n options.inscription_form_id = $stateParams.inscription_form_id;\n options.event_id = $scope.event;\n options.filters = [];\n $scope.options = options;\n\n /*\n options._sortBy = \"state\";\n options._sortDirection = \"asc\";\n */\n\n Restangular.all(\"Inscriptions\").getList(options).then(function (inscriptions_fields) {\n var data = inscriptions_fields;\n $scope.inscriptions = inscriptions_fields;\n data.totalRows = inscriptions_fields.totalRows;\n $scope.totalRows = inscriptions_fields.totalRows;\n\n /*\n \n $scope.filters = [];\n \n //Recogemos filtros\n\n angular.forEach(inscriptions_fields[0].FK_inscriptions_fields_inscriptions, function (inscription_field) {\n if (inscription_field.FK_inscriptions_fields_inscriptions_forms_fields.FK_inscriptions_forms_fields_types_fields.filter) {\n \n $scope.filters.push(inscription_field.FK_inscriptions_fields_inscriptions_forms_fields);\n }\n });\n\n */\n\n //EL CONTADOR ESTA MAL, ESTO DEBERÍA ESTAR PAGINADO, Y EL CONTADOR COMO UNA PETICIÓN A PARTE.\n\n angular.forEach(inscriptions_fields, function (inscription_field) {\n\n if (inscription_field.state) {\n $scope.inscriptions_approved.push(inscription_field);\n }\n\n angular.forEach(inscription_field.FK_inscriptions_fields_inscriptions, function (item) {\n if (item.FK_inscriptions_fields_inscriptions_forms_fields.FK_inscriptions_forms_fields_types_fields.has_options) {\n for (let i = 0; i < item.FK_inscriptions_fields_inscriptions_forms_fields.FK_inscriptions_forms_fields_options_inscriptions_forms_fields.length; i++) {\n if (item.FK_inscriptions_fields_inscriptions_forms_fields.FK_inscriptions_forms_fields_options_inscriptions_forms_fields[i].id == item.value) {\n inscription_field[\"_\" + item.FK_inscriptions_fields_inscriptions_forms_fields.id] = item.FK_inscriptions_fields_inscriptions_forms_fields.FK_inscriptions_forms_fields_options_inscriptions_forms_fields[i].name;\n }\n }\n } else {\n // $log.debug(item.FK_inscriptions_fields_inscriptions_forms_fields.name + \" \" + item.value);\n inscription_field[\"_\" + item.FK_inscriptions_fields_inscriptions_forms_fields.id] = item.value;\n }\n });\n });\n\n $scope.total_inscriptions = $scope.accepted + $scope.pending + $scope.rejected;\n\n data = inscriptions_fields;\n deferred.resolve(data);\n });\n\n return deferred.promise;\n }\n\n };\n\n $scope.updateCapacity = function (id) {\n if (!angular.isUndefined($scope.inscription_form.id)) {\n Restangular.all(\"InscriptionsForms\").customGET(\"CustomSaveInscriptionCapacity\", { id: $stateParams.inscription_form_id, capacity: $scope.inscription_form.capacity });\n\n /*$scope.inscription_form.put().then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('inscriptions_forms.capacity_updated')); \n } else {\n $scope.errorMessage = result.message;\n }\n });*/\n }\n }\n\n $scope.show_inscription = function (inscription) {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: ShowInscriptionModalView,\n controller: \"ShowInscriptionModalCtrl\",\n size: 'lg',\n resolve: {\n inscription: function () {\n return inscription\n },\n inscription_form_id: function () {\n return $stateParams.inscription_form_id\n }\n }\n });\n\n $modalInstance.result.then(function (data) {\n $scope.inscription = data.inscription;\n\n var params = {\n state: $scope.inscription.state,\n inscriptionIds: $scope.inscription.id\n }\n\n if ($scope.inscription.is_deleted) {\n $scope.gridOptionsInscriptionsForms.loadData(false);\n } else {\n if (params.state != null) {\n Restangular.all(\"inscriptions\").customPOST({}, \"change_states\", params).then(function (results) {\n if (results) {\n if (params.state) {\n toastr.success($filter('translate')('inscriptions_forms.inscription_approved'));\n } else {\n toastr.error($filter('translate')('inscriptions_forms.inscription_rejected'));\n }\n $scope.gridOptionsInscriptionsForms.gridApi.core.raise.itemChanged($scope)\n }\n //Obtenemos los contadores de pendientes, aprobados y rechazados\n Restangular.all(\"InscriptionsForms\").customGET(\"CustomGetContInscriptions\", { id: $stateParams.inscription_form_id }).then(function (results) {\n $scope.accepted = results.inscriptions_approved_cont;\n $scope.rejected = results.inscriptions_rejected_cont;\n $scope.pending = results.inscriptions_pending_cont;\n\n });\n });\n } else {\n $scope.inscription.put().then(function (result) {\n $scope.gridOptionsInscriptionsForms.loadData(false);\n })\n\n }\n }\n\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n if (!$scope.$$phase) $scope.$apply();\n });\n }\n\n // TODO \n $scope.edit_inscription = function (inscription) {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: EditInscriptionModalView,\n controller: \"EditInscriptionModalCtrl\",\n size: 'lg',\n resolve: {\n inscription: function () {\n return inscription\n },\n inscription_form_id: function () {\n return $stateParams.inscription_form_id\n }\n }\n });\n\n $modalInstance.result.then(function (data) {\n $scope.inscription = data.inscription;\n\n var params = {\n state: $scope.inscription.state,\n inscriptionIds: $scope.inscription.id\n }\n\n if ($scope.inscription.is_deleted) {\n $scope.gridOptionsInscriptionsForms.loadData(false);\n } else {\n if (params.state != null) {\n Restangular.all(\"inscriptions\").customPOST({}, \"change_states\", params).then(function (results) {\n if (results) {\n if (params.state) {\n toastr.success($filter('translate')('inscriptions_forms.inscription_approved'));\n } else {\n toastr.error($filter('translate')('inscriptions_forms.inscription_rejected'));\n }\n $scope.gridOptionsInscriptionsForms.gridApi.core.raise.itemChanged($scope)\n }\n //Obtenemos los contadores de pendientes, aprobados y rechazados\n Restangular.all(\"InscriptionsForms\").customGET(\"CustomGetContInscriptions\", { id: $stateParams.inscription_form_id }).then(function (results) {\n $scope.accepted = results.inscriptions_approved_cont;\n $scope.rejected = results.inscriptions_rejected_cont;\n $scope.pending = results.inscriptions_pending_cont;\n\n });\n });\n } else {\n $scope.inscription.put().then(function (result) {\n $scope.gridOptionsInscriptionsForms.loadData(false);\n })\n }\n }\n\n // END TODO \n \n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n if (!$scope.$$phase) $scope.$apply();\n });\n }\n $scope.confirmInscriptions = function (state) {\n\n var inscriptionIds = [];\n var duplicate = false;\n angular.forEach($scope.gridOptionsInscriptionsForms.gridApi.selection.getSelectedRows(), function (inscription) {\n if (!inscription.duplicate) {\n inscriptionIds.push(inscription.id);\n\n } else {\n duplicate = true;\n }\n });\n\n var params = {\n state: state,\n inscriptionIds: inscriptionIds\n }\n\n if (inscriptionIds.length > 0) {\n Restangular.all(\"inscriptions\").customPOST({}, \"change_states\", params).then(function (results) {\n if (results) {\n if (state) {\n toastr.success($filter('translate')('inscriptions_forms.inscription_approved'));\n } else {\n toastr.error($filter('translate')('inscriptions_forms.inscription_rejected'));\n }\n $scope.gridOptionsInscriptionsForms.gridApi.core.raise.itemChanged($scope)\n }\n //Obtenemos los contadores de pendientes, aprobados y rechazados\n Restangular.all(\"InscriptionsForms\").customGET(\"CustomGetContInscriptions\", { id: $stateParams.inscription_form_id }).then(function (results) {\n $scope.accepted = results.inscriptions_approved_cont;\n $scope.rejected = results.inscriptions_rejected_cont;\n $scope.pending = results.inscriptions_pending_cont;\n\n });\n // Mandamos mensaje de aviso recordando que no se pueden realizar acciones para duplicados\n if (duplicate) {\n toastr.error($filter('translate')('inscriptions_forms.duplicate_message'));\n }\n }, function (error) {\n $log.error(error);\n var errorMessage = \"Error desconocido\";\n if (error.data?.ExceptionMessage != null) errorMessage = error.data.ExceptionMessage;\n $scope.gridOptionsInscriptionsForms.loadData(false);\n toastr.error(errorMessage);\n });\n\n } else {\n if (duplicate) {\n toastr.error($filter('translate')('inscriptions_forms.duplicate_message'));\n }\n }\n\n\n }\n }\n \n $scope.deleteDialog = function (id, event_name) {\n $scope.id = id;\n $scope.event_name = event_name;\n modalService.confirm({\n title: $filter('translate')('inscriptions_forms.button_delete'),\n message: $filter('translate')('inscriptions_forms.delete_message') + \" \" + $scope.event_name + \"?\",\n onAccept: function () {\n Restangular.one('InscriptionsForms', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('inscriptions_forms.delete_success'));\n $scope.gridOptionsInscriptionsForms.gridApi.core.raise.itemDeleted($scope);\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n });\n\n }; \n $scope.capacityDetails = function (formId) {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: CapacityDetailModalView,\n controller: \"CapacityDetailsModalCtrl\",\n size: 'lg',\n resolve: {\n inscription_form_id: function () {\n return formId\n },\n }\n });\n }\n $scope.newInscription = function (inscription_form_id) {\n\n let $modalInstance = null;\n if (angular.isDefined(inscription_form_id)) {\n Restangular.one('InscriptionsForms', inscription_form_id).get().then(function (results) {\n $scope.inscription_form = results;\n if (!$rootScope.sizeLg) {\n $modalInstance = $uibModal.open({\n animation: true,\n template: NewInscriptionModalView,\n controller: \"NewInscriptionModalCtrl\",\n resolve: {\n inscription_form: function () {\n return $scope.inscription_form\n }\n }\n });\n } else {\n $modalInstance = $uibModal.open({\n animation: true,\n template: NewInscriptionModalView,\n controller: \"NewInscriptionModalCtrl\",\n size: 'x-lg',\n resolve: {\n inscription_form: function () {\n return $scope.inscription_form\n }\n }\n });\n }\n \n $modalInstance.result.then(function (data) {\n\n //if (data.success == false) {\n // $scope.loadGuests();\n\n //} else {\n\n var state = data.success;\n $log.debug(data);\n\n var params = {\n state: state,\n inscriptionIds: data.inscription\n }\n $log.debug(params);\n\n Restangular.all(\"inscriptions\").customPOST({}, \"change_states\", params).then(function (results) {\n $log.debug(results);\n if (results) {\n if (state) {\n toastr.success($filter('translate')('inscriptions_forms.inscription_approved'));\n } else {\n toastr.error($filter('translate')('inscriptions_forms.inscription_rejected'));\n }\n if (angular.isDefined($scope.gridOptionsInscriptionsForms) && angular.isDefined($scope.gridOptionsInscriptionsForms.gridApi)) $scope.gridOptionsInscriptionsForms.gridApi.core.raise.itemChanged($scope)\n }\n //Obtenemos los contadores de pendientes, aprobados y rechazados\n Restangular.all(\"InscriptionsForms\").customGET(\"CustomGetContInscriptions\", { id: inscription_form_id }).then(function (results) {\n $scope.accepted = results.inscriptions_approved_cont;\n $scope.rejected = results.inscriptions_rejected_cont;\n $scope.pending = results.inscriptions_pending_cont;\n\n });\n $scope.loadGuests();\n });\n\n //}\n\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n if (!$scope.$$phase) $scope.$apply();\n });\n });\n } else {\n if ($rootScope.sizeLg) {\n $modalInstance = $uibModal.open({\n animation: true,\n template: NewInscriptionModalView,\n controller: \"NewInscriptionModalCtrl\",\n size: 'x-lg',\n resolve: {\n inscription_form: function () {\n return $scope.inscription_form\n }\n }\n });\n } else {\n $modalInstance = $uibModal.open({\n animation: true,\n template: NewInscriptionModalView,\n controller: \"NewInscriptionModalCtrl\",\n resolve: {\n inscription_form: function () {\n return $scope.inscription_form\n }\n }\n });\n }\n $modalInstance.result.then(function (data) {\n //if (data.success == false) {\n // $scope.loadGuests();\n //} else {\n var state = data.success;\n var params = {\n state: state,\n inscriptionIds: data.inscription\n }\n Restangular.all(\"inscriptions\").customPOST({}, \"change_states\", params).then(function (results) {\n if (results) {\n if (state) {\n toastr.success($filter('translate')('inscriptions_forms.inscription_approved'));\n } else {\n toastr.error($filter('translate')('inscriptions_forms.inscription_rejected'));\n }\n $scope.gridOptionsInscriptionsForms.gridApi.core.raise.itemChanged($scope)\n }\n\n //Obtenemos los contadores de pendientes, aprobados y rechazados\n Restangular.all(\"InscriptionsForms\").customGET(\"CustomGetContInscriptions\", { id: $stateParams.inscription_form_id }).then(function (results) {\n $scope.accepted = results.inscriptions_approved_cont;\n $scope.rejected = results.inscriptions_rejected_cont;\n $scope.pending = results.inscriptions_pending_cont;\n });\n }, function (error) {\n $log.error(error);\n var errorMessage = \"Error desconocido\";\n if (error.data?.ExceptionMessage != null) errorMessage = error.data.ExceptionMessage;\n toastr.error(errorMessage);\n } );\n //}\n\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n if (!$scope.$$phase) $scope.$apply();\n });\n }\n\n };\n\n $scope.associate_tag = function (inscription) { \n\n let $modalInstance = $uibModal.open({\n animation: true,\n template: AssignTagModalView,\n size: \"md\",\n controller: \"AssignTagModalCtrl\",\n resolve: {\n event_guest: function () {\n return inscription.event_guest;\n }\n }\n });\n //Response del modal\n $modalInstance.result.then(function (data) { \n Restangular.all(\"EventsGuests\").customPOST({}, \"CustomSaveIdentifier\", data).then(function (results) {\n if (results != true) {\n modalService.confirm({\n title: $filter('translate')('events.guests.warning'),\n message: $filter('translate')('events.guests.identifier_already_used') + \"?\",\n onAccept: function () {\n data.forceSaved = true;\n Restangular.all(\"EventsGuests\").customPOST({}, \"CustomSaveIdentifier\", data).then(function (results) {\n toastr.success($filter('translate')('events.guests.identifier_saved')); \n setTimeout(function () {\n $scope.gridOptionsInscriptionsForms.loadData(false);\n }, 500)\n });\n\n }\n });\n } else {\n \n $scope.gridOptionsInscriptionsForms.loadData(false);\n if (!$scope.$$phase) $scope.$apply();\n }\n });\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n if (!$scope.$$phase) $scope.$apply();\n });\n }\n\n $scope.export = function () {\n let options = {\n filters: {\n EXPORT_TYPE: \"INSCRIPTION\",\n INSCRIPTION_FORM_ID: $stateParams.inscription_form_id,\n EVENT_ID: $stateParams.id\n }\n };\n datasetsService.exportByType(\"inscriptions\", options);\n };\n\n $scope.exportInscriptions = function (id) {\n window.open((window as any).CONFIG.api_url + \"/inscriptions/export/csv?inscription_form_id=\" + id);\n return;\n };\n\n\n $scope.filterInscriptions = function (filterForm) {\n\n /*$log.debug(filterForm);\n var filters = [];\n\n $('#' + filterForm).find('input').each(function (idx, input) {\n // Do your DOM manipulation here\n filter = {\n id: $(input).attr('id'),\n value: $(input).val()\n }\n\n filterJson = JSON.stringify(filter);\n filters.push(filterJson);\n });\n options = $scope.options;\n options.filters = filters;\n\n Restangular.all(\"Inscriptions\").getList(options).then(function (inscriptions_fields) { \n $log.debug(inscriptions_fields);\n \n });\n \n $log.debug(filters);*/\n }\n\n $scope.printDialog = function (code, type_document, type_result, id) {\n let params = {\n entity_type: \"inscriptions_forms\",\n entity_type_id: $stateParams.inscription_form_id,\n documents: { codes: [code] }\n };\n generateDocumentService.documentNew({\n params: params,\n onAccept: function (data) {\n angular.forEach(data, function (item) {\n $http({\n method: 'post',\n url: (window as any).CONFIG.api_url + 'documentgenerator/Generate',\n params: { document_id: item.document_id, outputType: 'pdf', inscription_form_id: params.entity_type_id }\n }).then(function (result, status, headers, config) {\n let url = (window as any).CONFIG.api_url + 'documentgenerator/download/' + result.data;\n window.open(url, '_blank');\n });\n })\n }\n });\n };\n \n }])\n\n.controller(\"ShowInscriptionModalCtrl\", ['$scope', '$uibModalInstance', 'Restangular', 'modalService', '$filter', 'inscription','inscription_form_id', function ($scope, $uibModalInstance, Restangular, modalService, $filter, inscription, inscription_form_id) {\n\n $scope.inscription = inscription;\n\n Restangular.all(\"InscriptionsForms\").customGET(\"ShowInscription\", { inscription_id: inscription.id, inscription_form_id: inscription_form_id }).then(function (results) { \n $scope.inscription_form_fields = results\n });\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n $scope.downloadFile = function (field) {\n modalService.confirm({\n title: $filter('translate')('inscriptions_forms.download_file'),\n message: $filter('translate')('inscriptions_forms.download_file_message') + field.value + \"?\",\n onAccept: function () {\n var url = (window as any).CONFIG.api_url + field.path + \"/force\";\n window.open(url, '_blank');\n }\n });\n };\n\n $scope.previewImage = function (field) {\n var url = (window as any).CONFIG.api_url + field.path;\n window.open(url, '_blank');\n };\n\n $scope.confirmInscription = function (state) {\n // Devolvemos el control al principal \n $scope.inscription.state = state;\n $uibModalInstance.close({ inscription: $scope.inscription});\n };\n\n $scope.deleteInscription = function () {\n modalService.confirm({\n title: $filter('translate')('inscriptions_forms.button_delete'),\n message: $filter('translate')('inscriptions_forms.delete_message') + \"?\",\n onAccept: function () {\n Restangular.one('InscriptionsForms/DeleteInscription', $scope.inscription.id).remove().then(function () {\n toastr.success($filter('translate')('inscriptions_forms.deleted_success'));\n //$uibModalInstance.dismiss('cancel');\n $scope.inscription.is_deleted = true;\n $uibModalInstance.close({ inscription: $scope.inscription });\n });\n }\n });\n };\n\n}])\n .controller(\"EditInscriptionModalCtrl\", ['$scope', '$uibModalInstance', 'Restangular', 'modalService', '$filter', 'inscription', 'inscription_form_id', '$uibModal', '$log',\n function ($scope, $uibModalInstance, Restangular, modalService, $filter, inscription, inscription_form_id, $uibModal, $log) {\n\n $log.debug(\"EditInscriptionModalCtrl entered\")\n\n // TODO\n $scope.inscription = inscription;\n\n // Sacamos todos los campos que debería tener\n Restangular.one('Inscriptions', inscription.id).get().then(function (result) {\n $scope.inscription = result;\n Restangular.one('InscriptionsForms', inscription_form_id).get().then(function (results) {\n\n $scope.inscription_form = results\n\n let inscription_form_fields = $scope.inscription_form.FK_inscriptions_forms_fields_inscriptions_forms\n\n // Comprobamos si ese campo está ya en la inscripción, si no es así lo añadimos.\n let filledInscriptionFormFieldsIds = $scope.inscription.FK_inscriptions_fields_inscriptions.map(f => f.inscription_form_field_id);\n\n inscription_form_fields.forEach(function (form_field) {\n\n if (!filledInscriptionFormFieldsIds.includes(form_field.id)) {\n\n let new_inscription_field = {\n inscription_form_field_id: form_field.id,\n inscription_id: inscription.id,\n value: \"\",\n FK_inscriptions_fields_inscriptions_forms_fields: form_field\n }\n\n $log.debug('new_inscription_field')\n $log.debug(new_inscription_field)\n\n $scope.inscription.FK_inscriptions_fields_inscriptions.push(new_inscription_field);\n\n }\n })\n\n setUpInscriptionsFields();\n // Fin \n });\n });\n\n // Para hacer que funcionen los select, hay que pasar el value de string a int\n\n let setUpInscriptionsFields = function () {\n\n $scope.inscription.FK_inscriptions_fields_inscriptions.forEach(function (f) {\n\n if (f.FK_inscriptions_fields_inscriptions_forms_fields.FK_inscriptions_forms_fields_types_fields.code == 'select' ||\n f.FK_inscriptions_fields_inscriptions_forms_fields.FK_inscriptions_forms_fields_types_fields.code == 'radio-horizontal' ||\n f.FK_inscriptions_fields_inscriptions_forms_fields.FK_inscriptions_forms_fields_types_fields.code == 'radio-vertical') f.value = parseInt(f.value);\n\n else if (f.FK_inscriptions_fields_inscriptions_forms_fields.FK_inscriptions_forms_fields_types_fields.code == 'checkbox-horizontal' ||\n f.FK_inscriptions_fields_inscriptions_forms_fields.FK_inscriptions_forms_fields_types_fields.code == 'checkbox-vertical') {\n\n if (f.value != null && f.value != \"\") {\n f.valuesArray = f.value.split(',').map(m => parseInt(m));\n }\n else {\n f.valuesArray = [];\n }\n }\n\n // Para campos descendientes\n\n if (f.FK_inscriptions_fields_inscriptions_forms_fields.parent_field_id != null) {\n f.parentField = $scope.inscription.FK_inscriptions_fields_inscriptions.filter(m => m.FK_inscriptions_fields_inscriptions_forms_fields.id == f.FK_inscriptions_fields_inscriptions_forms_fields.parent_field_id).pop();\n $log.debug(\"f condicional\")\n $log.debug(f)\n }\n })\n\n $scope.inscription.FK_inscriptions_fields_inscriptions = $scope.inscription.FK_inscriptions_fields_inscriptions.sort(function (a, b) { return a.FK_inscriptions_fields_inscriptions_forms_fields.order - b.FK_inscriptions_fields_inscriptions_forms_fields.order }); // Los ordenamos tal y como salen en la inscripción\n\n }\n\n $scope.changeValuesArray = function (field, option) {\n\n let index = field.valuesArray.indexOf(option.id);\n\n if (index < 0) {\n field.valuesArray.push(option.id);\n } else {\n field.valuesArray.splice(index, 1);\n }\n }\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n $scope.previewImage = function (relatedFile) {\n\n var url = (window as any).CONFIG.api_url + relatedFile.path;\n window.open(url, '_blank');\n\n };\n\n $scope.downloadFile = function (relatedFile) {\n modalService.confirm({\n title: $filter('translate')('inscriptions_forms.download_file'),\n message: $filter('translate')('inscriptions_forms.download_file_message') + relatedFile.filename + \"?\",\n onAccept: function () {\n var url = (window as any).CONFIG.api_url + relatedFile.path + \"/force\";\n window.open(url, '_blank');\n }\n });\n }\n\n $scope.confirmInscription = function (state) {\n // Devolvemos el control al principal\n $scope.inscription.state = state;\n $uibModalInstance.close({ inscription: $scope.inscription });\n };\n\n $scope.deleteInscription = function () {\n modalService.confirm({\n title: $filter('translate')('inscriptions_forms.button_delete'),\n message: $filter('translate')('inscriptions_forms.delete_message') + \"?\",\n onAccept: function () {\n Restangular.one('InscriptionsForms/DeleteInscription', $scope.inscription.id).remove().then(function () {\n\n toastr.success($filter('translate')('inscriptions_forms.deleted_success'));\n\n //$uibModalInstance.dismiss('cancel');\n $scope.inscription.is_deleted = true;\n $uibModalInstance.close({ inscription: $scope.inscription });\n\n });\n }\n });\n };\n\n $scope.modifyInscription = function () {\n\n $scope.inscription.FK_inscriptions_fields_inscriptions.forEach(function (f) {\n // Campos de opciones múltiples\n if (f.valuesArray) {\n f.value = f.valuesArray.toString();\n }\n // Campos condicionales\n if (f.parentField) {\n if (!(f.parentField.value == f.FK_inscriptions_fields_inscriptions_forms_fields.parent_option_id\n || (f.parentField.valuesArray && f.parentField.valuesArray.includes(f.FK_inscriptions_fields_inscriptions_forms_fields.parent_option_id)))) {\n f.value = null;\n }\n\n }\n });\n\n // Campos condicionales cuya condición ha cambiado\n Restangular.all(\"Inscriptions/ModifyInscription\").customPOST($scope.inscription).then(function (results) {\n if (results) {\n toastr.success($filter('translate')('inscriptions_forms.modify_success'));\n }\n $uibModalInstance.dismiss('cancel');\n });\n };\n\n}])\n.controller(\"CapacityDetailsModalCtrl\", ['$scope', '$uibModalInstance', 'Restangular', 'modalService', '$filter', 'inscription_form_id','$http', function ($scope, $uibModalInstance, Restangular, modalService, $filter, inscription_form_id, $http) {\n \n $scope.fields = [];\n\n Restangular.all(\"InscriptionsForms\").customGET(\"CapacityDetail\", { inscription_form_id: inscription_form_id }).then(function (results) {\n $scope.fields = results;\n });\n\n $scope.saveCapacities = function () {\n\n var capacitiesDetail = [];\n angular.forEach($scope.fields, function (item) {\n capacitiesDetail.push(item);\n });\n\n var params = { \n capacitiesDetail: JSON.stringify($scope.fields)\n }\n\n var data_encoded = JSON.stringify(params);\n\n Restangular.all(\"InscriptionsForms\").customPOST($scope.fields, \"CapacityDetailSave\", {}).then(function (results) {\n if (results) { \n toastr.success($filter('translate')('inscriptions_forms.capacity_updated'));\n }\n $uibModalInstance.dismiss('cancel');\n });\n } \n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n \n}])\n\n.controller(\"NewInscriptionModalCtrl\", ['$scope', '$uibModalInstance', 'Restangular', 'modalService', '$filter', 'inscription_form', '$log',\n function ($scope, $uibModalInstance, Restangular, modalService, $filter, inscription_form, $log) {\n \n $scope.inscription_form = inscription_form;\n $scope.inscription = {};\n $scope.checkSavedTimeout = null;\n var urlPublic = \"\";\n Restangular.all(\"InscriptionsForms\").customGET(\"CustomGetExternalUrl\").then(function (url) {\n urlPublic = url;\n });\n\n setTimeout(function () {\n $(\"#ifForm\").attr(\"src\", urlPublic + \"/Inscriptions/Index/\" + inscription_form.uid + \"?admin=1\");\n }, 1000);\n\n $scope.onCancel = function () {\n clearTimeout($scope.checkSavedTimeout);\n\n $uibModalInstance.close({ inscription: null, success: false }); //asi refresca el listado\n //$uibModalInstance.dismiss('cancel');\n };\n\n $scope.checkFormCompleted = function () {\n var okField = $(\"#ifForm\").contents().find(\"#inscription_completed_id\");\n\n if (okField.length) { \n var id = okField.val();\n $log.debug(id);\n $uibModalInstance.close({ inscription: id, success: true }); \n\n } else {\n $scope.checkSavedTimeout = setTimeout(function () {\n $scope.checkFormCompleted();\n }, 1000);\n }\n };\n\n $scope.saveInscription = function () {\n clearTimeout($scope.checkSavedTimeout);\n $log.debug(\"entra en saveInscription, apartir de aqui no funciona porque no puede acceder a otro dominio...\");\n //$(\"#ifForm\").contents().find(\"#btnInscriptionSend\").trigger('click');\n $(\"#formInscription #btnInscriptionSend\").click();\n\n //$scope.checkFormCompleted();\n };\n\n}])\n\n.controller(\"AssignTagModalCtrl\", ['$scope', '$uibModalInstance', 'event_guest', 'Restangular', '$http', 'modalService', '$filter', function ($scope, $uibModalInstance, event_guest, Restangular, $http, modalService, $filter) {\n //Comprobamos si tiene permiso escritura\n\n $scope.event_guest = event_guest; \n if ($scope.event_guest.identify_id != null) {\n Restangular.one('Identifiers', $scope.event_guest.identify_id).get().then(function (results) { \n $scope.event_guest.identifier = results.value \n });\n }\n \n //if (event_guest.FK_events_guests_identifiers != null) $scope.event_guest.identifier = event_guest.FK_events_guests_identifiers.value;\n //$scope.event_guest.identifier = \"\";\n\n Restangular.all(\"IdentifiersTypes\").getList().then(function (identifiers_types) {\n $scope.identifiers_types = identifiers_types;\n $scope.event_guest.identifier_type = identifiers_types[0];\n });\n\n $scope.keyPressed = function (keyEvent) {\n if (keyEvent.which === 13)\n $scope.saveIdentifier($scope.event_guest.identifier);\n }\n\n $scope.saveIdentifier = function (identifier) {\n\n var data = {\n value: identifier,\n identifier_type_id: $scope.event_guest.identifier_type.id,\n forceSaved: false,\n person_id: $scope.event_guest.person_id,\n event_id: $scope.event_guest.event_id\n } \n\n $uibModalInstance.close(data);\n\n };\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n}]);","angular.module(\"inscriptions_forms\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n\n }])\n;","import './institutions';\nimport './institutions-list';\nimport './institutions-edit';","\nimport InstitutionContactModalView from \"./InstitutionContactModal.html\";\nimport InstitutionAddressModalView from \"./InstitutionAddressModal.html\";\nimport InstitutionMailModalView from \"./InstitutionMailModal.html\";\n\nimport IconPicker from '../../scripts/iconpicker-1.5.0.js';\n\nangular.module(\"institutions\")\n\n .controller(\"institutionsEditCtrl\", ['LoginService', '$scope', '$rootScope', '$controller', '$state', '$stateParams', 'Restangular', '$uibModal', 'modalService', '$compile', 'gridService', '$filter', '$translate', '$timeout', 'uiGridConstants', 'id_from_modal', '$log',\n function (LoginService, $scope, $rootScope, $controller, $state, $stateParams, Restangular, $uibModal, modalService, $compile, gridService, $filter, $translate, $timeout, uiGridConstants, id_from_modal, $log) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"PERSONS_WRITE\");\n\n $scope.institution = { contacts: []};\n //Icon Picker, usamos angular.element para asegurar que el docuemnto se ha cargado antes de iniciar la función\n angular.element(function () {\n $log.debug('page loading completed');\n IconPicker.Init({\n // Required: You have to set the path of IconPicker JSON file to \"jsonUrl\" option. e.g. '/content/plugins/IconPicker/dist/iconpicker-1.5.0.json'\n jsonUrl: '/assets/iconpicker-1.5.0.json',\n // Optional: Change the buttons or search placeholder text according to the language.\n searchPlaceholder: 'Search Icon',\n showAllButton: 'Show All',\n cancelButton: 'Cancel',\n noResultsFound: 'No results found.', // v1.5.0 and the next versions\n borderRadius: '20px', // v1.5.0 and the next versions\n });\n\n IconPicker.Run('#GetIconPicker', function () {\n // ng-bind no funciona para asignar el icono porque no detecta el cambio que hacemos con el IconPicker, así que hay que hacerlo a pelo.\n const iconElement = document.querySelector(\"#IconPreview\");\n if (iconElement) {\n const iconClass = iconElement.getAttribute(\"class\");\n if (iconClass) {\n const icon = iconClass.substring(iconClass.indexOf('-') + 1);\n $scope.institution.icon = icon;\n }\n }\n });\n });\n\n if (id_from_modal == false)\n if (angular.isUndefined($stateParams.id) || $stateParams.id == \"\") {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('institutions.title'), url: `institutions.list`},\n { title: $filter('translate')('general.add') },\n ];\n } else {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('institutions.title'), url: `institutions.list`},\n { title: $filter('translate')('general.edit') },\n ];\n Restangular.one('Institutions', $stateParams.id).get().then(function (result) {\n $scope.institution = result;\n $log.debug($scope.institution)\n });\n }\n\n if (id_from_modal)\n Restangular.one('Institutions', id_from_modal).get().then(function (result) {\n $scope.institution = result;\n $log.debug($scope.institution)\n });\n\n $scope.gridContact = {\n pdfTitle: $filter('translate')('persons.contact_data'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n enableSorting: true,\n paginationPageSizes: [10, 20, 30],\n paginationPageSize: 10,\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n {\n name: 'contacts_types.name', displayName: $filter('translate')('persons.contact_type'),\n },\n {\n name: 'value', displayName: $filter('translate')('persons.value'), enableFiltering: true, enableHiding: false,\n },\n {\n name: 'notes', displayName: $filter('translate')('persons.notes'), enableFiltering: true, enableHiding: false,\n },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('general.edit'), action: 'ng-click =\"grid.appScope.editContact(row.entity)\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('general.delete'), action: 'ng-click=\"grid.appScope.deleteContact(row.entity);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n }\n ],\n getData: function (options) {\n return new Promise(function (resolve, reject) {\n resolve($scope.institution.contacts);\n });\n }\n };\n\n $scope.gridAddress = {\n pdfTitle: $filter('translate')('persons.addresses'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n rowHeight: 45,\n gridMenuShowHideColumns: false,\n enableSorting: true,\n paginationPageSizes: [10, 20, 30],\n paginationPageSize: 10,\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, exporterSuppressExport: true },\n {\n name: 'address_line_1', displayName: $filter('translate')('persons.address_line_1'), enableColumnMenu: false, enableFiltering: false, enableHiding: false,\n cellTemplate: '
{{row.entity.address_line_1}}
{{row.entity.postal_code}}, {{row.entity.city}}
',\n },\n { name: 'state', displayName: $filter('translate')('persons.contact_state'), width: 150 },\n { name: 'city', displayName: $filter('translate')('persons.contact_city'), width: 150 },\n { name: 'notes', displayName: $filter('translate')('persons.notes'), visible: true },\n {\n name: ' ', width: 100, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('general.edit'), action: 'ng-click=\"grid.appScope.editAddress(row.entity)\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('general.delete'), action: 'ng-click=\"$event.stopPropagation();grid.appScope.deleteAddress(row.entity);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n }\n ],\n getData: function (options) {\n return new Promise(function (resolve, reject) {\n resolve($scope.institution.addresses);\n });\n }\n };\n\n $scope.editContact = function (contact) {\n contact ? $scope.newContact = contact : $scope.newContact = {};\n\n $scope.$modalInstance = $uibModal.open({\n animation: true,\n template: InstitutionContactModalView,\n controller: \"InstitutionContactModalCtrl\",\n resolve: {},\n scope: $scope,\n size: 'lg'\n });\n };\n\n $scope.editAddress = function (address) {\n address ? $scope.newAddress = address : $scope.newAddress = {};\n\n $scope.$modalInstance = $uibModal.open({\n animation: true,\n template: InstitutionAddressModalView,\n controller: \"InstitutionAddressModalCtrl\",\n resolve: {},\n scope: $scope,\n size: 'lg'\n });\n };\n\n $scope.editMail = function (mail) {\n\n mail ? $scope.newMail = mail : $scope.newMail = {};\n $log.debug(\"this is the mail\")\n $log.debug(mail);\n\n $scope.$modalInstance = $uibModal.open({\n animation: true,\n template: InstitutionMailModalView,\n controller: \"InstitutionMailModalCtrl\",\n resolve: {},\n scope: $scope,\n size: 'lg'\n\n });\n };\n\n $scope.deleteContact = function (contact) {\n $log.debug(\"item\")\n $log.debug(contact)\n $log.debug(\"array\")\n $log.debug($scope.institution.contacts)\n let index = $scope.institution.contacts.indexOf(contact);\n $log.debug(index)\n\n $scope.institution.contacts.splice(index, 1);\n };\n\n $scope.deleteAddress = function (address) {\n let index = $scope.institution.addresses.indexOf(address)\n $log.debug(index)\n $scope.institution.addresses.splice(index, 1);\n };\n\n\n $scope.deleteMails = function (mail) {\n $log.debug(mail);\n let index = $scope.institution.mails.indexOf(mail)\n $log.debug(index)\n $scope.institution.mails.splice(index, 1);\n };\n\n $scope.save = function () {\n if (!angular.isUndefined($scope.institution.id)) {\n $scope.institution.put().then(function (result) {\n if (typeof (result.id) != \"undefined\") {\n toastr.success($filter('translate')('institutions.modified_success'));\n // $state.go('institutions.list');\n $scope.institution.id = result.id;\n } else {\n $scope.errorMessage = result.message;\n }\n });\n } else {\n Restangular.all('Institutions').post($scope.institution).then(function (result) {\n if (typeof (result.id) != \"undefined\") {\n toastr.success($filter('translate')('institutions.created_success'));\n // $state.go('institutions.list');\n $scope.institution.id = result.id;\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n }\n\n $scope.checkDelete = function () {\n modalService.confirm({\n title: $filter('translate')('general.delete'),\n message: $filter('translate')('institutions.delete_message'),\n onAccept: function () {\n $scope.institution.remove().then(function () {\n toastr.success($filter('translate')('institutions.remove_success'));\n $state.go('institutions.list');\n });\n }\n });\n };\n\n // Gestión de modal \n $scope.onCancelInstitution = function () {\n $scope.$modalInstance.dismiss('cancel');\n };\n\n $scope.onAcceptInstitution = function () {\n $scope.institution.put().then(function (results) {\n if (typeof (results.id) != \"undefined\") {\n toastr.success($filter('translate')('institutions.modified_success'));\n } else\n $scope.errorMessage = results.message;\n })\n $scope.$modalInstance.close();\n }\n\n\n }])\n .controller(\"InstitutionContactModalCtrl\", ['$scope', '$uibModalInstance', 'modalService', '$filter', 'Restangular', '$log',\n function ($scope, $uibModalInstance, modalService, $filter, Restangular, $log) {\n\n Restangular.all('ContactsTypes').getList().then(results => $scope.contactTypesSelect = results )\n\n $scope.ContactTitle = $scope.newContact.id ? ($filter('translate')('general.edit')) : ($filter('translate')('general.add'));\n\n $scope.onCancel = function () {\n $scope.newContact = {};\n $uibModalInstance.dismiss('cancel');\n };\n\n $scope.onSelect = function (typeName) {\n $log.debug(\"dsadsad asda\")\n $scope.newContact.contact_types.name = typeName;\n };\n\n $scope.onAccept = function () {\n $scope.newContact.contact_type_id = $scope.newContact.contacts_types.id;\n if (!$scope.institution.contacts.includes($scope.newContact)) $scope.institution.contacts.push($scope.newContact);\n $scope.gridContact.loadData();\n $scope.newContact = {};\n $uibModalInstance.close();\n };\n\n }])\n .controller(\"InstitutionAddressModalCtrl\", ['$scope', '$uibModalInstance', 'modalService', '$filter', 'Restangular', function ($scope, $uibModalInstance, modalService, $filter, Restangular) {\n\n $scope.addressTitle = $scope.newAddress.id ? ($filter('translate')('general.edit')) : ($filter('translate')('general.add'));\n\n Restangular.all('Countries').getList().then(results => $scope.countryList = results);\n\n $scope.onCancel = function () {\n $scope.newAddress = {};\n $uibModalInstance.dismiss('cancel');\n };\n\n $scope.onAccept = function () {\n if (!$scope.institution.addresses.includes($scope.newAddress)) {\n $scope.institution.addresses.push($scope.newAddress);\n }\n $scope.gridAddress.loadData();\n $scope.newAddress = {};\n $uibModalInstance.close();\n };\n\n }])\n .controller(\"InstitutionMailModalCtrl\", ['$scope', '$uibModalInstance', 'modalService', '$filter', 'Restangular', function ($scope, $uibModalInstance, modalService, $filter, Restangular) {\n\n $scope.mailTitle = $scope.newMail.id ? ($filter('translate')('general.edit')) : ($filter('translate')('general.add'));\n\n $scope.onCancel = function () {\n $scope.newMail = {};\n $uibModalInstance.dismiss('cancel');\n };\n\n $scope.onAccept = function () {\n if (!$scope.institution.mails.includes($scope.newMail)) {\n $scope.institution.mails.push($scope.newMail);\n } \n $scope.newMail = {};\n $uibModalInstance.close();\n };\n\n $scope.onDelete = function () {\n $scope.deleteMails($scope.newMail);\n $scope.newMail = {};\n $uibModalInstance.close();\n }\n }])\n\n /*\n .controller(\"InstitutionPreviewModalCtrl\", ['$scope', '$uibModalInstance', 'modalService', '$filter', 'Restangular', 'institutionMails', 'institutionAddresses', 'institutionContacts','gridService',\n function ($scope, $uibModalInstance, modalService, $filter, Restangular, institutionMails, institutionAddresses, institutionContacts, gridService) {\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n $scope.onImport = function () {\n mailsToImport = $scope.institutionMails.filter(m => m.selected);\n mailsToImport.forEach(function (mail) {\n mail.position_id = $scope.position.id;\n mail.id = 0;\n\n if (!$scope.position.FK_positions_mails_positions.includes(mail))\n Restangular.all('PositionsMails').post(mail);\n });\n\n contactsToImport = institutionContacts.filter(c => c.selected);\n\n contactsToImport.forEach(function (contact) {\n contact.position_id = $scope.position.id;\n contact.position_contact_type_id = contact.contact_type_id;\n contact.FK_positions_contacts_positions_contacts_types = contact.contacts_types;\n contact.position_contact_scope_id = 2;\n contact.id = 0;\n contact.isNew = true;\n if (!$scope.position.FK_positions_contacts_positions.includes(contact))\n $scope.position.FK_positions_contacts_positions.push(contact);\n });\n\n addressesToImport = institutionAddresses.filter(a => a.selected);\n\n addressesToImport.forEach(function (address) {\n address.position_address_scope_id = 2;\n address.position_id = $scope.position.id;\n address.person_position_id = $scope.position.id;\n address.id = 0;\n if (!$scope.position.FK_positions_addresses_positions.includes(address))\n $scope.position.FK_positions_addresses_positions.push(address);\n });\n\n $scope.reloadPositionsEmails();\n toastr.success($filter('translate')('institutions.imported_data_succes'));\n $log.debug($scope.position)\n $uibModalInstance.close();\n };\n\n $scope.onDelete = function () {\n $scope.deleteMails(newMail);\n $scope.newMail = {};\n $uibModalInstance.close();\n }\n\n $scope.institutionMails = institutionMails.map(mail => mail = {...mail, selected: true });\n\n $scope.gridContactPreview = {\n pdfTitle: $filter('translate')('persons.contact_data'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n enableSorting: true,\n paginationPageSizes: [10, 20, 30],\n paginationPageSize: 10,\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n\n },\n columnDefs: [\n {\n name: ' ', width: 50, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate:\n '
'\n },\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n {\n name: 'contacts_types.name', displayName: $filter('translate')('persons.contact_type'),\n },\n {\n name: 'value', displayName: $filter('translate')('persons.value'), enableFiltering: true, enableHiding: false,\n },\n {\n name: 'notes', displayName: $filter('translate')('persons.notes'), enableFiltering: true, enableHiding: false,\n }\n ],\n getData: function (options) {\n return new Promise(function (resolve, reject) {\n resolve(institutionContacts)\n }).then(function (results) {\n results.forEach(r => r.selected = true);\n return results;\n })\n }\n };\n\n $scope.gridAddressPreview = {\n pdfTitle: $filter('translate')('persons.addresses'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n rowHeight: 45,\n gridMenuShowHideColumns: false,\n enableSorting: true,\n paginationPageSizes: [10, 20, 30],\n paginationPageSize: 10,\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n {\n name: ' ', width: 50, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate:\n '
'\n },\n { name: 'id', visible: false, exporterSuppressExport: true },\n {\n name: 'address_line_1', displayName: $filter('translate')('persons.address_line_1'), enableColumnMenu: false, enableFiltering: false, enableHiding: false,\n cellTemplate: '
{{row.entity.address_line_1}}
{{row.entity.postal_code}}, {{row.entity.city}}
',\n },\n { name: 'state', displayName: $filter('translate')('persons.contact_state'), width: 150 },\n { name: 'city', displayName: $filter('translate')('persons.contact_city'), width: 150 },\n { name: 'notes', displayName: $filter('translate')('persons.notes'), visible: true },\n\n ],\n getData: function (options) {\n return new Promise(function (resolve, reject) {\n resolve(institutionAddresses);\n }).then(function (results) {\n results.forEach(r => r.selected = true);\n return results;\n });\n }\n };\n\n\n $scope.deleteContact = function (contact) {\n index = positionContacts.indexOf(contact)\n $log.debug(index)\n\n positionContacts.splice(index, 1);\n };\n\n $scope.deleteAddress = function (address) {\n index = positionAddresses.indexOf(address)\n $log.debug(index)\n positionAddresses.splice(index, 1);\n };\n\n\n $scope.deleteMails = function (mail) {\n index = positionMails.indexOf(mail)\n $log.debug(index)\n\n $scope.institution.mails.splice(index, 1);\n };\n\n }]);\n\n*/","angular.module('institutions')\n\n .controller(\"institutionsListCtrl\", ['LoginService', '$rootScope', '$scope', 'Restangular', 'gridService', 'modalService', '$filter', '$state', '$log',\n function (LoginService, $rootScope, $scope, Restangular, gridService, modalService, $filter, $state, $log) {\n\n $rootScope.title = $filter('translate')('institutions.title');\n $log.debug($filter('translate')('institutions.title'));\n $rootScope.breadcrumb = [\n { title: $filter('translate')('institutions.title') }\n ];\n\n $scope.allowWrite = LoginService.permissionExist(\"PERSONS_WRITE\");\n\n $scope.gridOptions = {\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n enableSorting: true,\n paginationPageSizes: [20, 40, 60],\n paginationPageSize: 20,\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n {\n name: 'icon', displayName: $filter('translate')('cms.icon'), cellTemplate: '
' +\n '' +\n '
', width: 80, enableFiltering: false, enableHiding: false\n },\n { name: 'name', displayName: $filter('translate')('general.name'), enableFiltering: true, enableHiding: false},\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('general.button_edit'), action: 'ui-sref=\"institutions.edit({id:row.entity.id})\"; ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('general.button_delete'), action: 'ng-click=\"grid.appScope.deleteDialog(row.entity.id,row.entity.title);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n $log.debug('Que está pasando')\n return Restangular.all('Institutions').getList(options).then(function (result) {\n return result;\n })\n }\n };\n\n\n $scope.goToEdit = function (rowEntity) {\n $state.go(\"institutions.edit\", { id: rowEntity.id });\n };\n\n\n $scope.deleteDialog = function (id, title) {\n\n modalService.confirm({\n title: $filter('translate')('general.delete'),\n message: $filter('translate')('institutions.delete_message'),\n onAccept: function () {\n Restangular.one('Institutions', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('institutions.deleted_success'));\n $scope.gridOptions.gridApi.core.raise.itemDeleted($scope);\n\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n });\n\n\n }\n }])","import BreadcrumbView from \"../common/breadcrumb/breadcrumb.html\";\nimport InstitutionsListView from \"./institutions-list.html\";\nimport InstitutionsEditView from \"./institutions-edit.html\";\n\n\nangular.module('institutions', [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('institutions', {\n url: \"/institutions\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n })\n\n .state('institutions.list', {\n url: \"/list\",\n controller: \"institutionsListCtrl\",\n template: InstitutionsListView,\n requiredPermission: [\"PERSONS_WRITE\"]\n })\n\n .state('institutions.edit', {\n url: \"/edit/:id\",\n controller: \"institutionsEditCtrl\",\n template: InstitutionsEditView,\n data: { pageTitle: \"Servicio\" },\n resolve: {\n id_from_modal: function () {\n return false;\n },\n },\n requiredPermission: [\"PERSONS_WRITE\"]\n })\n\n }])\n ;","import './languages';\nimport './languages-list'; ","import ResourceTLModalView from \"./resourceTLModal.html\";\n\n\nangular.module(\"languages\")\n\n\n .controller('LanguagesListCtrl', ['LoginService', '$q', '$scope', '$translate', 'Restangular', '$rootScope', '$filter', 'uiGridTreeViewConstants', 'gridService', 'treeService', 'modalService', '$uibModal', function (LoginService, $q, $scope, $translate, Restangular, $rootScope, $filter, uiGridTreeViewConstants, gridService, treeService, modalService, $uibModal) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"RESOURCE_WRITE\");\n\n $scope.languages = [];\n $rootScope.title = $filter('translate')('languages.title');\n\n $scope.search = {\n textSearch: null,\n code: null\n }\n \n $rootScope.breadcrumb = [\n { title: $filter('translate')('languages.title') }\n ];\n\n $scope.language_code_tree = $translate.use();\n $scope.language_id_tree = 1;\n\n $scope.selectedLanguage = {};\n Restangular.all('Languages').getList().then(function (languages) {\n $scope.languages = languages;\n angular.forEach(languages, function (language) {\n if (language.code == $translate.use()) {\n $scope.selectedLanguage.selected = language;\n $scope.language_id_tree = language.id;\n }\n });\n });\n \n $scope.$watch('selectedLanguage.selected', function (newValue, oldValue) {\n if (angular.isDefined(oldValue) && newValue.code != oldValue.code) {\n $scope.language_code_tree = newValue.code;\n $scope.language_id_tree = newValue.id;\n $scope.gridOptions.gridApi.core.raise.itemChanged($scope);\n }\n });\n\n\n //mostramos el grid.\n $scope.gridOptions = {\n pdfTitle: \"Traducciones\",\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n showTreeExpandNoChildren: true,\n enableCellEditOnFocus: $scope.allowWrite,\n paginationPageSizes: [200, 250, 300],\n paginationPageSize: 200,\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n\n //Edición y creación en linea\n if ($scope.allowWrite) {\n this.gridApi.edit.on.afterCellEdit($scope, function (rowEntity, colDef, newValue, oldValue) {\n\n if (angular.isDefined(newValue) && newValue != \"\") {\n if (!angular.isDefined(rowEntity.FK_resources_tl_resources_id)) {\n $scope.translationData = {\n resource_id: rowEntity.id,\n language_id: rowEntity.language_id,\n value: newValue\n }\n Restangular.all('ResourcesTl').post($scope.translationData).then(function (result) {\n if (angular.isDefined(result.id)) {\n rowEntity.FK_resources_tl_resources_id = result.id;\n toastr.success($filter('translate')('languages.create_success'));\n } else {\n toastr.error(\"Ha ocurrido un error, no se ha guardado con éxito.\" + result.message);\n }\n }, function (response) {\n toastr.error(\"Ha ocurrido un error, no se ha guardado con éxito.\" + response.message);\n });\n } else {\n Restangular.one('ResourcesTl', rowEntity.FK_resources_tl_resources_id).get().then(function (results) {\n $scope.resources_tl = results;\n $scope.resources_tl.value = newValue;\n $scope.resources_tl.put().then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('languages.edit_success'));\n } else {\n toastr.error(\"Ha ocurrido un error, no se ha guardado con éxito.\" + result.message);\n }\n });\n }, function (response) {\n toastr.error(\"Ha ocurrido un error, no se ha guardado con éxito.\" + response.message);\n });\n }\n }\n\n $scope.$apply();\n });\n }\n },\n columnDefs: [\n { name: 'module', displayName: $filter('translate')('languages.module'), enableFiltering: true, enableHiding: false, enableColumnMenu: false, enableCellEdit: false, width: '15%' },\n { name: 'code', displayName: $filter('translate')('languages.code'), enableFiltering: true, enableSorting: false, enableHiding: false, enableColumnMenu: false, enableCellEdit: false, width: '15%' },\n { name: 'value', displayName: $filter('translate')('languages.value'), enableFiltering: false, enableSorting: false, enableHiding: false, enableColumnMenu: false, enableCellEdit: true, width: '50%' },\n {\n name: ' ', exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: \"Editar\", action: 'ng-show=\"row.entity.code!=\\'\\'\" ng-click=\"grid.appScope.EditDialog(row.entity.id, row.entity.FK_resources_tl_resources_id, row.entity.language_id, row.entity.code, row.entity.value)\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-edit\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n var deferred = $q.defer();\n options.lang = $scope.language_code_tree;\n options.textSearch = $scope.search.textSearch;\n options.code = $scope.search.code;\n Restangular.all('Resources').getList(options).then(function (results) { \n let array_resources = [];\n var treeLevel = 0;\n var nombreModulo = \"\";\n\n var data = treeService.languageTree(results, $scope.language_id_tree);\n data.totalRows = results.totalRows;\n deferred.resolve(data);\n\n }, function (response) {\n alert(response.message);\n });\n\n return deferred.promise;\n }\n\n };\n\n $scope.searchText = function () {\n $scope.gridOptions.loadData(false);\n }\n\n $scope.clearFilters = function () {\n $scope.search = {\n textSearch: null\n };\n $scope.gridOptions.loadData(false);\n }\n\n $scope.EditDialog = function (id, resources_tl_id, language_id, code, valueToChange) { \n $scope.translate = {\n resource_id: id,\n id: resources_tl_id,\n language_id: language_id,\n code: code,\n value: valueToChange\n }\n let $modalInstance = $uibModal.open({\n animation: true,\n template: ResourceTLModalView,\n controller: \"ResourceModalCtrl\",\n resolve: {\n resources_tl: function () {\n return $scope.translate;\n }\n }\n });\n\n $modalInstance.result.then(function (resultModal) {\n if (angular.isDefined(resultModal.value) && resultModal.value != \"\") {\n\n if (!angular.isDefined(resultModal.id) || resultModal.id == 0) {\n //Creamos\n Restangular.all('ResourcesTl').post(resultModal).then(function (result) {\n if (angular.isDefined(result.id) && result.id != 0) {\n toastr.success($filter('translate')('languages.create_success'));\n $scope.gridOptions.gridApi.core.raise.itemChanged($scope);\n } else {\n toastr.error(\"Ha ocurrido un error, no se ha guardado con éxito.\" + result.message);\n }\n }, function (response) {\n toastr.error(\"Ha ocurrido un error, no se ha guardado con éxito.\" + response);\n });\n } else {\n //Modificamos\n Restangular.one('ResourcesTl', resultModal.id).get().then(function (results) {\n $scope.resources_tl = results;\n $scope.resources_tl.value = resultModal.value;\n $scope.resources_tl.put().then(function (result) {\n if (angular.isDefined(result.id) && result.id != 0) {\n toastr.success($filter('translate')('languages.edit_success'));\n $scope.gridOptions.gridApi.core.raise.itemChanged($scope);\n } else {\n toastr.error(\"Ha ocurrido un error, no se ha guardado con éxito.\" + result.message);\n }\n }, function (response) {\n toastr.error(\"Ha ocurrido un error, no se ha guardado con éxito.\" + response.message);\n });\n });\n }\n }\n \n\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n });\n\n }; //EditDialog\n \n }])\n\n\n\n .controller(\"ResourceModalCtrl\", ['$scope', '$uibModalInstance', 'Restangular', 'modalService', 'resources_tl', function ($scope, $uibModalInstance, Restangular, modalService, resources_tl) {\n \n $scope.resourceTlModal = angular.isDefined(resources_tl) ? resources_tl : {};\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n $scope.saveTranslation = function () {\n //Devolvemos el control al principal\n $uibModalInstance.close($scope.resourceTlModal);\n\n };//saveTranslation\n\n\n }])\n\n\n\n\n\n;","import BreadcrumbView from \"../common/breadcrumb/breadcrumb.html\";\nimport LanguagesListView from \"./languages-list.html\";\n\n\nangular.module(\"languages\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('languages', {\n url: \"/languages\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView\n })\n .state('languages.list', {\n url: \"/list\",\n controller: \"LanguagesListCtrl\",\n template: LanguagesListView,\n data: { pageTitle: 'Traducciones' },\n requiredPermission: [\"RESOURCE_READ\"]\n })\n }])\n\n;\n","import './locations_reservations';\nimport './locations_reservations-list';\nimport './locations_reservations-edit';\nimport './locations_reservations-timeline';\nimport './locations/locations';\nimport './locations/locations-list';\nimport './locations/locations-edit'; ","import AddInformationMarkerModalView from \"./addInformationMarkerModal.html\";\nimport { Loader } from \"@googlemaps/js-api-loader\"\nimport IconPicker from '../../../scripts/iconpicker-1.5.0.js';\nimport $ from \"jquery\";\n\nangular.module(\"locations\")\n\n .controller(\"LocationsEditCtrl\", ['LoginService', '$scope', '$rootScope', '$state', '$stateParams', 'Restangular', 'gridService', '$filter', '$translate', 'modalService', '$uibModal', '$timeout', '$window',\n function (LoginService, $scope, $rootScope, $state, $stateParams, Restangular, gridService, $filter, $translate, modalService, $uibModal, $timeout, $window) {\n const loader = new Loader({\n apiKey: \"AIzaSyBXOP6yX_55SzBTIQi1Yt_Kal5wG2MYHYo\",\n version: \"weekly\"\n });\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"LOCATIONS_READ\");\n\n $rootScope.title = $filter('translate')('locations.title');\n\n $scope.location_id = $stateParams.id;\n\n $scope.locations = {\n color: \"#c1bfbf\"\n };\n \n\n $scope.adictionalMarks = [];\n\n Restangular.all('Locations').getList().then(function (locations) {\n $scope.selectLocations = locations;\n if (!angular.isUndefined($stateParams.id) || $stateParams.id != \"\") {\n var index = $scope.selectLocations.findIndex(x => x.id == $stateParams.id);\n $scope.selectLocations.splice(index, 1);\n }\n });\n\n $scope.select = {};\n\n $scope.select.location_country = null;\n $scope.select.location_region = null;\n $scope.searching = false;\n\n $scope.refresh = {};\n\n $scope.getLocationsSearch = function (val) {\n if (val == null) {\n val = '';\n } else {\n val = val.replace(/[:.?*+^$[\\\\(){|]/, \"\");\n }\n let ret = [];\n ret = Restangular.all('SearchLocation/' + val).getList().then(function (searchTerms) {\n return searchTerms;\n });\n\n return ret;\n };\n\n if (angular.isUndefined($scope.location_id) || $scope.location_id == \"\") {\n\n $rootScope.breadcrumb = [\n { title: $filter('translate')('locations.title'), url: \"locations.list\" },\n { title: $filter('translate')('locations.button_add') },\n ];\n\n } else {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('locations.title'), url: \"locations.list\" },\n { title: $filter('translate')('locations.button_edit') },\n ];\n\n Restangular.one('Locations', $scope.location_id).get().then(function (result) {\n\n $scope.locations = result;\n\n if (result.country_region_city_id != null) {\n Restangular.all('getLocationByCity/' + result.country_region_city_id).getList().then(function (searchTerms) {\n $scope.locations.fullLocation = searchTerms[0].country + \", \" + searchTerms[0].region+\", \"+searchTerms[0].city;\n });\n }\n\n $scope.location_id = $scope.locations.id;\n $scope.adictionalMarks = result.FK_locations_markers_locations_markers;\n\n initMap(result.gps_latitude, result.gps_longitude, null);\n\n });\n\n }\n\n $scope.saveLocations = function () {\n\n if (!angular.isUndefined($stateParams.id) && $stateParams.id != \"\") {\n $scope.locations.put().then(function (result) {\n if (angular.isDefined(result.id)) {\n //$scope.reloadMarkers(null, null);\n } else {\n $scope.errorMessage = result.message;\n }\n });\n } else {\n Restangular.all('Locations').post($scope.locations).then(function (result) {\n if (angular.isDefined(result.id)) {\n var fullLocation = $scope.locations.fullLocation.country + \", \" + $scope.locations.fullLocation.region + \", \" + $scope.locations.fullLocation.city;\n $scope.locations = result;\n $scope.locations.fullLocation = fullLocation;\n $scope.location_id = result.id;\n $stateParams.id = result.id;\n $scope.reloadMarkers(null, null);\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n }\n\n $scope.changedLocation = async function () {\n if (navigator.geolocation) {\n loader.importLibrary(\"geocoding\").then(async ({Geocoder}) => {\n const geocoder = new Geocoder();\n var fullAddress = $scope.locations.name_in_map + \", \" + $scope.locations.fullLocation.city + \", \" + $scope.locations.fullLocation.country;\n $scope.locations.country_region_city_id = $scope.locations.fullLocation.city_id;\n geocoder.geocode({ address: fullAddress }).then(function (data) {\n if (data.results.length > 0) {\n var location = JSON.parse(JSON.stringify(data.results[0].geometry.location.toJSON(), null, 2));\n $scope.locations.gps_latitude = location.lat;\n $scope.locations.gps_longitude = location.lng;\n initMap(location.lat, location.lng, null, data.results[0].formatted_address);\n } else {\n window.alert(\"No results found\");\n }\n });\n });\n };\n }\n\n $scope.deleteMarker = function (id, typeMarker) {\n modalService.confirm({\n title: $filter('translate')('locations.delete_title'),\n message: $filter('translate')('locations.delete_marks')+ \"?\",\n onAccept: function () {\n Restangular.all('Locations/DeleteMark').remove({ id: id, typeMarker: typeMarker }).then(function (result) {\n $scope.reloadMarkers(null,null);\n });\n }\n });\n };\n\n $scope.map;\n $scope.markers = [];\n $scope.markerId = 1;\n $scope.zoom = 16;\n\n //Mapa Google\n function initMap(latitude, longitude, contextMenu, formatted_address = null) {\n if (!angular.isUndefined($scope.location_id) || $scope.location_id != \"\") {\n loader.load().then(async () => {\n const { Map, OverlayView, InfoWindow } = await google.maps.importLibrary(\"maps\") as google.maps.MapsLibrary;\n const { Marker } = await google.maps.importLibrary(\"marker\") as google.maps.MarkerLibrary;\n\n //Map initialization\n var latlng = { lat: latitude, lng: longitude };\n var myOptions = {\n zoom: $scope.zoom,\n center: latlng,\n mapTypeId: google.maps.MapTypeId.ROADMAP\n };\n $scope.map = new Map(document.getElementById(\"map_canvas\"), myOptions);\n $scope.overlay = new OverlayView();\n $scope.overlay.draw = function () { }; // empty function required\n $scope.overlay.setMap($scope.map);\n $scope.element = document.getElementById('map_canvas');\n\n const map = $scope.map;\n const infoWindow = new google.maps.InfoWindow();\n\n if (formatted_address != null) {\n map.setZoom(16);\n map.setCenter(latlng);\n\n const marker = new Marker({\n map,\n position: latlng,\n });\n\n infoWindow.setContent(formatted_address);\n infoWindow.open(map, marker);\n } \n \n \n if (!angular.isUndefined(contextMenu) || contextMenu != null) {\n map.controls[google.maps.ControlPosition.TOP_CENTER].push(contextMenu);\n } else {\n let contextMenu = document.getElementById('contextMenu');\n map.controls[google.maps.ControlPosition.TOP_CENTER].push(contextMenu);\n } \n\n \n $timeout(function () {\n //hideContextMenu();\n angular.forEach($scope.locations.positions, function (position) {\n\n var findDesc = $filter('filter')($scope.locations.FK_locations_markers_locations_markers, { 'gps_latitude': position.lat });\n var description = \"\";\n var svgMarker = {};\n var iconMain = {};\n\n if (findDesc.length > 0) {\n description = findDesc[0].description_marker;\n if (findDesc[0].icon != null) {\n svgMarker = getIconUnicode(\"fas fa-\" + findDesc[0].icon);\n } else {\n svgMarker = \"\";\n }\n \n } else {\n description = $scope.locations.description_marker;\n iconMain = {\n path: \"M-1.547 12l6.563-6.609-1.406-1.406-5.156 5.203-2.063-2.109-1.406 1.406zM0 0q2.906 0 4.945 2.039t2.039 4.945q0 1.453-0.727 3.328t-1.758 3.516-2.039 3.070-1.711 2.273l-0.75 0.797q-0.281-0.328-0.75-0.867t-1.688-2.156-2.133-3.141-1.664-3.445-0.75-3.375q0-2.906 2.039-4.945t4.945-2.039z\",\n fillColor: \"#d69053\",\n fillOpacity: 1,\n strokeWeight: 0,\n rotation: 0,\n scale: 2,\n anchor: new google.maps.Point(0, 20),\n };\n }\n\n const marker = new Marker({\n position,\n map,\n title: description,\n optimized: false,\n icon: (Object.entries(iconMain).length === 0?'':iconMain) as string,\n label: {\n text: (Object.entries(svgMarker).length === 0 ? {} : svgMarker) as string,\n fontFamily: 'FontAwesome',\n }\n });\n\n\n marker.addListener(\"click\", () => {\n infoWindow.close();\n infoWindow.setContent(marker.getTitle());\n infoWindow.open(marker.getMap(), marker);\n });\n\n });\n\n }, 1000);\n\n map.addListener(\"rightclick\", (e) => {\n showContextMenu(e);\n $scope.eventLatLng = e.latLng;\n $scope.zoom = map.getZoom();\n //e.preventDefault();\n });\n\n }); \n }\n }\n\n $scope.reloadMarkers = function (gps_aditinal_latitude, gps_aditional_longitude) {\n Restangular.one('Locations', $scope.location_id).get().then(function (result) {\n $scope.adictionalMarks = result.FK_locations_markers_locations_markers;\n var fullLocation = $scope.locations.fullLocation;\n $scope.locations = result;\n $scope.locations.fullLocation = fullLocation;\n $('#contextMenu').css(\"display\", \"block\");\n let contextMenu = document.getElementById('contextMenu');\n hideContextMenu();\n\n if ($scope.locations.gps_latitude != null) {\n if (gps_aditinal_latitude != null && gps_aditional_longitude != null) {\n initMap(gps_aditinal_latitude, gps_aditional_longitude, contextMenu);\n } else {\n initMap($scope.locations.gps_latitude, $scope.locations.gps_longitude, contextMenu);\n }\n \n } else {\n if (navigator.geolocation) {\n navigator.geolocation.getCurrentPosition(function (position) {\n initMap(position.coords.latitude, position.coords.longitude, contextMenu);\n });\n };\n }\n });\n }\n\n function showContextMenu(event) {\n if (angular.isUndefined($scope.locations.id) || $scope.locations.id == null) {\n modalService.message({\n title: \"Mensaje\",\n message: \"Debe guardar antes los cambios!\",\n onAccept: function () { }\n });\n\n } else {\n angular.element()\n $('#contextMenu').css(\"display\", \"block\");\n $('#contextMenu').css(\"position\", \"absolute\");\n $('#contextMenu').css({\n left: event.pixel.x,\n top: event.pixel.y\n })\n }\n }\n\n $scope.clickMainMarker = function (e) {\n var result = JSON.parse(JSON.stringify(e.toJSON(), null, 2));\n $scope.locations.gps_latitude = result.lat;\n $scope.locations.gps_longitude = result.lng;\n\n $scope.locations.put().then(function (result) {\n if (angular.isDefined(result.id)) {\n $scope.reloadMarkers(null,null);\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n\n $scope.goToCountries = function () {\n var url = $state.href('countries.list', {});\n window.open(url, '_blank');\n }\n\n $scope.clickPopup = function (e) { \n let $modalInstance = $uibModal.open({\n animation: true,\n template: AddInformationMarkerModalView,\n controller: \"LocationMarkerModalCtrl\",\n size: 'md',\n resolve: {\n latLng: function () {\n return e;\n },\n locations: function(){\n return $scope.locations;\n }\n }\n });\n\n //Retorno de los datos desde el moda l.\n $modalInstance.result.then(function (result) {\n if (result.id != 0 && result.id!=null) {\n $scope.location_id = result.id;\n }\n\n $scope.reloadMarkers(result.gps_latitude, result.gps_longitude);\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n });\n\n hideContextMenu();\n }\n\n function hideContextMenu() {\n $('#contextMenu').css(\"display\", \"none\");\n }\n\n function getIconUnicode(iconClass) {\n var tempElement = document.createElement(\"i\");\n tempElement.className = iconClass;\n const iconUnicodeCache = {};\n document.body.appendChild(tempElement);\n var character = window.getComputedStyle(tempElement, ':before').getPropertyValue('content').replaceAll(`\"`, \"\");\n tempElement.remove();\n\n if (character) {\n iconUnicodeCache[iconClass] = character;\n }\n \n return character;\n }\n\n }])\n\n .controller(\"LocationMarkerModalCtrl\", ['LoginService', '$scope', '$uibModalInstance', 'Restangular', 'modalService', '$filter', '$http', '$stateParams', '$q', '$timeout', 'latLng', 'locations', function (LoginService, $scope, $uibModalInstance, Restangular, modalService, $filter, $http, $stateParams, $q, $timeout, latLng, locations) {\n\n $timeout(function () {\n IconPicker.Init({\n // Required: You have to set the path of IconPicker JSON file to \"jsonUrl\" option. e.g. '/content/plugins/IconPicker/dist/iconpicker-1.5.0.json'\n jsonUrl: '/assets/iconpicker-1.5.0.json',\n // Optional: Change the buttons or search placeholder text according to the language.\n searchPlaceholder: 'Search Icon',\n showAllButton: 'Show All',\n cancelButton: 'Cancel',\n noResultsFound: 'No results found.', // v1.5.0 and the next versions\n borderRadius: '20px', // v1.5.0 and the next versions\n });\n\n IconPicker.Run('#GetIconPicker', function () {\n // ng-bind no funciona para asignar el icono porque no detecta el cambio que hacemos con el IconPicker, así que hay que hacerlo a pelo.\n let icon = document.querySelector(\"#IconPreview\").getAttribute(\"class\");\n icon = icon.substring(icon.indexOf('-') + 1);\n $scope.marker.icon = icon;\n\n });\n\n }, 1000),\n\n\n\n //Comprobamos si tiene permiso escritura\n $scope.marker = {\n location_id: null,\n gps_latitude: null,\n gps_longitude: null,\n description_marker: null\n };\n var result = JSON.parse(JSON.stringify(latLng.toJSON(), null, 2));\n $scope.marker.gps_latitude = result.lat;\n $scope.marker.gps_longitude = result.lng;\n $scope.marker.location_id = locations.id;\n\n $scope.saveMarker = function () {\n if (locations.gps_latitude == null && locations.gps_longitude == null) {\n locations.gps_latitude = $scope.marker.gps_latitude;\n locations.gps_longitude = $scope.marker.gps_longitude;\n locations.description_marker = $scope.marker.description_marker;\n locations.put().then(function (result) {\n if (angular.isDefined(result.id)) {\n $uibModalInstance.close(result.id);\n }\n });\n } else {\n Restangular.all('Locations').customPOST($scope.marker, \"SaveLocationsMarkers\", {}).then(function (result) {\n $uibModalInstance.close(result);\n });\n }\n }\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n}]);","angular.module(\"locations\")\n\n .controller(\"LocationsListCtrl\", ['LoginService', 'treeService', '$rootScope', '$scope', '$http', '$interval', '$q', 'i18nService', 'Restangular', 'gridService', 'modalService', '$uibModal', '$filter', '$translate', '$state',\n function (LoginService, treeService, $rootScope, $scope, $http, $interval, $q, i18nService, Restangular, gridService, modalService, $uibModal, $filter, $translate,$state) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"LOCATIONS_READ\");\n\n $rootScope.title = $filter('translate')('locations.title');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('locations.title') }\n ];\n\n\n $scope.gridOptionsGroupLocations = {\n pdfTitle: $filter('translate')('materials_types.pdf_title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n expandAllRows: true,\n gridMenuShowHideColumns: false,\n enableSorting: true,\n paginationPageSizes: [60, 80, 100],\n paginationPageSize: 60,\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n { name: 'name', displayName: $filter('translate')('materials_types.name'), enableFiltering: true, enableHiding: false },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('materials_types.button_edit'), action: 'ng-click=\"grid.appScope.goToEdit(row.entity);\" ng-if=\"grid.appScope.allowWrite && row.entity.id != null\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('materials_types.button_delete'), action: 'ng-click=\"grid.appScope.deleteDialog(row.entity.id,row.entity.name);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n var deferred = $q.defer();\n\n Restangular.all('Locations').getList(options).then(function (result) {\n\n result.unshift({\n id: null,\n name: null\n });\n var treeLocations = [];\n var data = treeService.locationsTree(result, null, treeLocations);\n\n deferred.resolve(data);\n });\n return deferred.promise;\n }\n };\n\n $scope.goToEdit = function (rowEntity) {\n $state.go(\"locations.edit\", { id: rowEntity.id });\n }\n\n $scope.deleteDialog = function (id, name) {\n $scope.id = id;\n $scope.name = name;\n modalService.confirm({\n title: $filter('translate')('locations.button_delete'),\n message: $filter('translate')('locations.delete_message') + \" \" + $scope.name + \"?\",\n onAccept: function () {\n Restangular.one('Locations', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('locations.deleted_success'));\n $scope.gridOptionsGroupLocations.gridApi.core.raise.itemDeleted($scope);\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n });\n\n };\n\n }])\n\n;","import BreadcrumbView from \"../../common/breadcrumb/breadcrumb.html\";\nimport LocationsListView from \"./locations-list.html\";\nimport LocationsEditView from \"./locations-edit.html\";\n\nangular.module(\"locations\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('locations', {\n url: \"/locations\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n })\n\n .state('locations.list', {\n url: \"/list\",\n controller: \"LocationsListCtrl\",\n template: LocationsListView,\n requiredPermission: [\"LOCATIONS_WRITE\"]\n })\n .state('locations.edit', {\n url: \"/edit/:id\",\n controller: \"LocationsEditCtrl\",\n template: LocationsEditView,\n requiredPermission: [\"LOCATIONS_WRITE\"]\n })\n }])\n;","import angular from \"angular\";\nimport toastr from 'toastr';\n\nangular.module(\"locations_reservations\")\n\n .controller(\"LocationsReservationsEditCtrl\", ['LoginService', '$scope', '$rootScope', '$controller', '$state', '$stateParams', 'Restangular', '$uibModal', 'modalService', '$compile', 'gridService', '$filter', '$translate', '$q', '$http', '$log',\n function (LoginService, $scope, $rootScope, $controller, $state, $stateParams, Restangular, $uibModal, modalService, $compile, gridService, $filter, $translate, $q, $http, $log) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"LOCATION_RESERVATION_WRITE\");\n\n $rootScope.title = $filter('translate')('locations_reservations.title');\n\n\n Restangular.all('Locations').getList().then(function (locations) {\n $scope.selectLocations = locations;\n });\n\n Restangular.all('Persons/AllPersons').getList().then(function (persons) {\n $scope.selectPersons = persons;\n });\n\n Restangular.all('Users').getList({ withoutImages: true }).then(function (users) {\n $scope.selectUsers = users;\n //Valor por defecto Responsable_id, si es nuevo evento\n if (angular.isUndefined($stateParams.id) || $stateParams.id == \"\") {\n var defaultUserFilter = users.filter(function (u) { return u.id == parseInt(localStorage.getItem(\"userId\")); });\n if (defaultUserFilter != null && defaultUserFilter.length > 0) {\n $scope.location_reservation.requested_id = defaultUserFilter[0].id;\n }\n }\n });\n\n\n //Cargamos datos del evento, si procede. \n\n\n let getEventData = function (eventId) {\n\n Restangular.one('Events', eventId).get().then(function (event) {\n\n var options = { entity_type: \"events\", inheritable: true };\n\n $scope.event = event;\n\n $log.debug('Fucking event')\n $log.debug($scope.event)\n $scope.event.pigs = [];\n if ($scope.event.information_groups_values == null) {\n $scope.event.information_groups_values = [];\n }\n Restangular.all('InformationsGroups').getList(options).then(function (informationGroups) {\n\n $scope.informationGroups = informationGroups;\n $scope.informationGroups.forEach(function (pig) {\n if (pig.configuration != \"\") pig.configuration = JSON.parse(pig.configuration);\n });\n $scope.checkboxSimpleOptions = [\n { option: null, label: $filter('translate')('informations.all'), checked: true },\n { option: true, label: $filter('translate')('events.staff.yes'), checked: false },\n { option: false, label: $filter('translate')('events.staff.no'), checked: false }\n ];\n\n $log.debug(\"like the feeling cant hodl us\")\n $log.debug($scope.event.information_groups_values)\n\n // Lo recorremos para pintarlos correctamente.\n angular.forEach($scope.event.information_groups_values, function (pig) {\n var infoFilter = $scope.informationGroups.filter(function (el) { return el.id == pig.information_group_id; });\n if (infoFilter.length>0) {\n if (infoFilter[0].type == \"checkboxSimple\") {\n $scope.event.pigs[pig.information_group_id] = pig.value; //(pig.value == \"true\" || pig.value == true ? true : false);\n } if (infoFilter[0].type == \"datetime\") {\n $scope.event.pigs[pig.information_group_id] = new Date(pig.value);\n } else {\n $scope.event.pigs[pig.information_group_id] = pig.value;\n }\n }\n });\n\n $log.debug(\"Event pigs\")\n $log.debug($scope.event.pigs)\n\n $log.debug(\"$scope.informationGroups\");\n $log.debug($scope.informationGroups);\n\n });\n\n });\n };\n\n \n\n // Information groups heredables \n\n $scope.selectStatus = [{\n code: 'pending', name: $filter('translate')('locations_reservations.status_pending')\n },{\n code: 'confirmed', name: $filter('translate')('locations_reservations.status_confirmed')\n },{\n code: 'cancelled', name: $filter('translate')('locations_reservations.status_cancelled')\n },{\n code: 'rejected', name: $filter('translate')('locations_reservations.status_rejected')\n }];\n \n\n if (angular.isUndefined($stateParams.id) || $stateParams.id == \"\") {\n \n $rootScope.breadcrumb = [\n { title: $filter('translate')('locations_reservations.title'), url: \"locations_reservations.list\" },\n { title: $filter('translate')('locations_reservations.title_add') }\n ];\n $scope.location_reservation = {};\n $scope.location_reservation.status = $scope.selectStatus[0];\n $scope.location_reservation.FK_locations_reservations_persons_locations_reservations = [];\n } else {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('locations_reservations.title'), url: \"locations_reservations.list\" },\n { title: $filter('translate')('locations_reservations.button_edit'), url: \"locations_reservations.edit({ id: \" + $stateParams.id + \" })\" },\n ];\n\n Restangular.one('LocationsReservations', $stateParams.id).get().then(function (results) {\n $scope.location_reservation = results;\n $scope.location_reservation.date_from = new Date($scope.location_reservation.date_from);\n $scope.location_reservation.date_to = new Date($scope.location_reservation.date_to);\n\n if ($scope.location_reservation.event_id) {\n getEventData($scope.location_reservation.event_id);\n }\n angular.forEach($scope.selectStatus, function (status) {\n if ($scope.location_reservation.status == status.code) $scope.location_reservation.status = status;\n })\n }); \n }\n\n \n $scope.save = function (frmLocationReservation) {\n $scope.location_reservation.status = $scope.location_reservation.status.code;\n if (!angular.isUndefined($scope.location_reservation.id)) {\n $scope.location_reservation.put().then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('locations_reservations.edit_success'));\n $state.go(\"locations_reservations.list\");\n } else {\n $scope.errorMessage = result.message;\n }\n });\n } else {\n Restangular.all('LocationsReservations').post($scope.location_reservation).then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('locations_reservations.create_success'));\n $state.go(\"locations_reservations.list\");\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n }\n\n $scope.checkDelete = function () {\n $log.debug($scope.location_reservation);\n modalService.confirm({\n title: $filter('translate')('locations_reservations.button_delete'),\n message: $filter('translate')('locations_reservations.delete_message') + \" \" + $scope.location_reservation.FK_locations_reservations_locations.name + \"?\",\n onAccept: function () {\n $scope.location_reservation.remove().then(function () {\n toastr.success($filter('translate')('locations_reservations.delete_success'));\n $state.go(\"locations_reservations.list\");\n });\n }\n });\n };\n\n}])\n\n.controller(\"LocationReservationPersonModalCtrl\", ['$scope', '$uibModalInstance', 'Restangular', 'modalService', '$filter', 'locationReservationPerson','personsGrid', function ($scope, $uibModalInstance, Restangular, modalService, $filter, locationReservationPerson, personsGrid) {\n \n $scope.locationReservationPersonModal = (!angular.isUndefined(locationReservationPerson) ? angular.copy(locationReservationPerson) : {});\n $scope.locationReservationPersonOrigin = (!angular.isUndefined(locationReservationPerson) ? locationReservationPerson : {}); \n\n if ($scope.locationReservationPersonModal.person_id != null || angular.isUndefined($scope.locationReservationPersonModal.id)) {\n $scope.locationReservationPersonModal.unregistered_person = false;\n } else {\n $scope.locationReservationPersonModal.unregistered_person = true;\n }\n \n $scope.options = {\n searchName: \"\",\n };\n\n Restangular.all('Persons/AllPersons').getList($scope.options).then(function (persons) {\n\n $scope.selectPersons = persons;\n let idxPerson = 0;\n if ($scope.locationReservationPersonModal != null) {\n $scope.selectPersons.forEach(function (person) {\n for (var i = 0; i < personsGrid.length; i++) { \n if (person.id == personsGrid[i].person_id) {\n $scope.selectPersons.splice(idxPerson, 1);\n break;\n }\n }\n if (person.id == $scope.locationReservationPersonModal.person_id) $scope.locationReservationPersonModal.person = person;\n idxPerson++;\n });\n }\n });\n \n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n $scope.saveLocationReservationPerson = function () { \n //Devolvemos el control al principal \n $uibModalInstance.close({ edited: $scope.locationReservationPersonModal, origin: $scope.locationReservationPersonOrigin });\n\n };//save\n\n\n}])\n\n;\n\n","angular.module(\"locations_reservations\")\n\n .controller(\"LocationsReservationsListCtrl\", ['LoginService', 'datasetsService', '$rootScope', '$scope', '$http', '$interval', '$q', 'i18nService', 'Restangular', 'gridService', 'modalService', '$uibModal', '$filter', '$translate', 'uiGridConstants', '$state',\n function (LoginService, datasetsService, $rootScope, $scope, $http, $interval, $q, i18nService, Restangular, gridService, modalService, $uibModal, $filter, $translate, uiGridConstants, $state) {\n \n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"LOCATION_RESERVATION_WRITE\");\n\n $rootScope.title = $filter('translate')('locations_reservations.title'); \n $rootScope.breadcrumb = [\n { title: $filter('translate')('locations_reservations.title') }\n ];\n\n $scope.search = { location_id: null, dateFrom1: null, dateTo1: null };\n $scope.dateLocationsReservations = {};\n\n Restangular.all('Locations').getList().then(function (results) {\n $scope.locations = results;\n });\n\n\n $scope.statusOptions = [{\n value: 'pending', label: $filter('translate')('locations_reservations.status_pending')\n },{\n value: 'confirmed', label: $filter('translate')('locations_reservations.status_confirmed')\n },{\n value: 'cancelled', label: $filter('translate')('locations_reservations.status_cancelled')\n },{\n value: 'rejected', label: $filter('translate')('locations_reservations.status_rejected')\n }];\n\n $scope.gridOptionsLocationsReservations = {\n pdfTitle: $filter('translate')('locations_reservations.title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n enableSorting: true, \n paginationPageSizes: [20, 40, 60],\n paginationPageSize: 20,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n exporterFieldCallback: function (grid, row, col, value) {\n if (col.name == 'person_name') {\n return row.entity.FK_locations_reservations_persons.name != null ? row.entity.FK_locations_reservations_persons.name : \"\" + \" \" +\n row.entity.FK_locations_reservations_persons.surname != null ? row.entity.FK_locations_reservations_persons.surname : \"\" + \" \" +\n row.entity.FK_locations_reservations_persons.lastname!= null ? row.entity.FK_locations_reservations_persons.lastname: \"\";\n }else{\n if (col.name == 'status'){\n switch(row.entity.status){\n case 'confirmed': \n return $filter('translate')('locations_reservations.status_confirmed');\n break;\n case 'cancelled':\n return $filter('translate')('locations_reservations.status_cancelled');\n break;\n case 'rejected':\n return $filter('translate')('locations_reservations.status_rejected');\n break;\n case 'pending':\n return $filter('translate')('locations_reservations.status_pending');\n break;\n } \n }else {\n return value\n }\n }\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n { name: 'name', field: 'name', displayName: $filter('translate')('locations_reservations.name'), enableFiltering: true, enableHiding: false, width: 190 }, \n { name: 'location_name', field: 'FK_locations_reservations_locations.name', displayName: $filter('translate')('locations_reservations.location'), enableFiltering: true, enableHiding: false, width: 200 },\n {\n name: 'date_from', displayName: $filter('translate')('locations_reservations.date_from'), type: 'date', width: 120, cellFilter: 'date:\\'dd/MM/yyyy HH:mm\\'',\n filterHeaderTemplate: '
' +\n 'Desde ' +\n 'Hasta ' +\n '
',\n enableFiltering: true, enableColumnMenu: false\n },\n {\n name: 'date_to', displayName: $filter('translate')('locations_reservations.date_to'), type: 'date', width: 120, cellFilter: 'date:\\'dd/MM/yyyy HH:mm\\'',\n filterHeaderTemplate: '
' +\n 'Desde ' +\n 'Hasta ' +\n '
',\n enableFiltering: true, enableColumnMenu: false\n },\n {\n name: 'reserved_by', field:'reserved_by', displayName: $filter('translate')('locations_reservations.reserved_by'), enableFiltering: true, enableHiding: false,\n \n },\n {\n name: 'requested_by', displayName: $filter('translate')('locations_reservations.requested_by'), enableFiltering: true, enableHiding: false, cellTemplate: '
{{row.entity.FK_locations_reservations_requested_by.name}}
',\n\n },\n {\n name: 'total_guests', field: 'total_guests', displayName: $filter('translate')('locations_reservations.total_guests'), enableFiltering: true, enableHiding: false,width: 75,\n\n },\n {\n name: 'materials', displayName: $filter('translate')('locations_reservations.recursos'), enableFiltering: true, enableHiding: false, \n cellTemplate:'
{{row.entity.materials}}
',\n },\n\n {\n name: 'status', enableFiltering: true, filter: { selectOptions: $scope.statusOptions, type: uiGridConstants.filter.SELECT }, width: 100,\n displayName: $filter('translate')('locations_reservations.status'), cellTemplate: '
' +\n '
' +\n '
' +\n '
',\n enableColumnMenu: false, \n },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('locations_reservations.button_edit'), action: 'ui-sref=\"locations_reservations.edit({id:row.entity.id})\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('locations_reservations.button_delete'), action: 'ng-click=\"grid.appScope.deleteDialog(row.entity.id,row.entity.FK_locations_reservations_locations.name);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n options.location_id = $scope.search.location_id;\n options.dateFrom1 = $scope.search.date_from;\n options.dateTo2 = $scope.search.date_to;\n\n return Restangular.all('LocationsReservations').getList(options) \n }\n };\n\n $scope.loadData = function () {\n $scope.gridOptionsLocationsReservations.loadData(false);\n }\n\n $scope.clearForm = function () {\n $scope.search = { location_id: null, date_from: null, date_to: null };\n $scope.gridOptionsLocationsReservations.loadData(false);\n }\n\n $scope.goToEdit = function (rowEntity) {\n $state.go(\"locations_reservations.edit\", { id: rowEntity.id });\n }\n\n $scope.deleteDialog = function (id, location_name) {\n $scope.id = id;\n $scope.location_name = location_name; \n modalService.confirm({\n title: $filter('translate')('locations_reservations.button_delete'),\n message: $filter('translate')('locations_reservations.delete_message') + \" \" + $scope.location_name + \"?\",\n onAccept: function () {\n Restangular.one('LocationsReservations', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('locations_reservations.delete_success'));\n $scope.gridOptionsLocationsReservations.gridApi.core.raise.itemDeleted($scope); \n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n });\n };\n\n\n $scope.export = function () {\n var options = {\n filters: {\n EXPORT_TYPE: \"LOCATION\",\n LOCATION: $scope.search.location_id,\n DATE_FROM: $scope.search.date_from,\n DATE_TO: $scope.search.date_to\n }\n };\n\n datasetsService.exportByType(\"reservation\", options);\n };\n\n \n }])\n\n;","import html2canvas from \"html2canvas\";\nimport pdfMake from \"pdfmake\";\n\nimport moment from \"moment\";\nimport NewReservationModalView from \"../common/calendar/newReservationModal.html\";\n\nangular.module(\"locations_reservations\")\n\n .controller(\"LocationsReservationsTimelineCtrl\", ['$timeout', 'ConfigurationsGantt', '$http', 'LoginService', '$scope', '$rootScope', '$controller', '$state', '$stateParams', 'Restangular', '$uibModal', 'modalService', '$compile', '$filter', '$translate','$sce',\n function ($timeout, ConfigurationsGantt, $http, LoginService, $scope, $rootScope, $controller, $state, $stateParams, Restangular, $uibModal, modalService, $compile, $filter, $translate, $sce) {\n $scope.gantt_data = [];\n $scope.filter = {};\n $scope.filter.date_from = new Date(new Date().setHours(0, 0, 0, 0));\n $scope.filter.date_to = new Date(new Date().setHours(23, 59, 59, 59));\n $scope.filter.date_to.setDate($scope.filter.date_from.getDate() + 4);\n $scope.configurationGant = null;\n $scope.timeFrames = {};\n var start = null;\n var end = null;\n\n /* config.value);\n end = ConfigurationsGantt.filter(function (config) {\n return config.code == \"TIMELINE_END_TIME_DAY_WORK\";\n }).map((config) => config.value);*/\n start = ConfigurationsGantt.filter(function (config) {\n return config.code == \"TIMELINE_START_TIME_DAY_WORK\";\n }).map(function (config) { return config.value; });\n end = ConfigurationsGantt.filter(function (config) {\n return config.code == \"TIMELINE_END_TIME_DAY_WORK\";\n }).map(function (config) { return config.value; });\n\n if (ConfigurationsGantt != null && start != null && end != null) {\n \n $scope.timeFrames = {\n day: {\n start: moment(start[0], 'HH:mm'),\n end: moment(end[0], 'HH:mm'),\n working: true, // This is a working period\n default: true // It will be used for each day\n },\n closed: {\n magnet: false, // This will disable magnet snapping\n working: false // We don't work when it's closed\n }\n };\n } \n\n //API gantt\n $scope.registerApi = function (api) {\n $scope.api = api;\n api.directives.on.new($scope, function (dName, dScope, dElement, dAttrs, dController) {\n if (dName === 'ganttTask') {\n dElement.bind('click', function (event) {\n //$scope.addEventTask(dScope.task.model.task_id);\n $scope.newLocationReservation(dScope.task.model.task_id, dScope.task.model.from, dScope.task.model.to, dScope.task.model.location_id);\n\n });\n }\n \n })\n api.tasks.on.add($scope, function (task) {\n task.model.location_id = task.row.model.id;\n })\n api.tasks.on.change($scope, function (task) {\n $scope.newLocationReservation(null, task.model.from, task.model.to, task.model.location_id);\n });\n \n };\n $scope.drawTaskFactory = function () {\n var newTask = {\n id: 51981981989185,\n name: 'New Task'\n // Other properties\n }\n return newTask;\n }\n\n $scope.ganttOptions = {\n headers: [\"day\", \"hour\", \"minute\"],\n viewScale: \"30 minutes\",\n expandToFit: true,\n allowSideResizing: false,\n minWidth: 800,\n columnWidth: 20,\n timeFrames: $scope.timeFrames,\n timeFramesNonWorkingMode: \"cropped\",\n headersFormats: {\n day: 'D',\n hour: 'H',\n minute: 'mm'\n }\n }\n\n let loadData = function () {\n \n $scope.gantt_data = [];\n var options = { date_from: $scope.filter.date_from, date_to: $scope.filter.date_to};\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + 'Locations/LocationAndReservations',\n params: options\n }).then(function (results, status, headers, config) {\n var i = 0;\n angular.forEach(results.data, function (location) {\n $scope.gantt_data.push({\n id: location.id,\n name: location.name,\n height: \"2em\",\n tasks: []\n });\n if (location.FK_locations_reservations_locations != null) {\n angular.forEach(location.FK_locations_reservations_locations, function (reservation) {\n addToGantt($scope.gantt_data[i], reservation);\n });\n }\n i++;\n });\n }); \n }\n\n let addToGantt = function (location, reservation) {\n if (reservation.date_to == null || typeof reservation.date_to == \"undefined\") reservation.date_to = moment(reservation.date_from).add(1, 'days');\n var contentTooltip = \"\";\n contentTooltip += \"\" + reservation.notes + \"
\"\n contentTooltip += \"Desde: \" + moment(reservation.date_from).format(\"DD/MM/YYYY HH:mm\") + \"
\";\n contentTooltip += \"Hasta: \" + moment(reservation.date_to).format(\"DD/MM/YYYY HH:mm\") + \"
\";\n \n if (reservation.status == 'pending') contentTooltip += \"\" + $filter('translate')('locations_reservations.status_pending') + \"
\";\n if (reservation.status == 'cancelled') contentTooltip += \"\" + $filter('translate')('locations_reservations.status_cancelled') + \"
\";\n if (reservation.status == 'rejected') contentTooltip += \"\" + $filter('translate')('locations_reservations.status_rejected') + \"
\";\n if (reservation.status == 'confirmed') contentTooltip += \"\" + $filter('translate')('locations_reservations.status_confirmed') + \"
\";\n contentTooltip = contentTooltip.slice(0, -2);\n\n var color = \"\";\n if (reservation.status == 'cancelled' || reservation.status == 'rejected') color = \"#ed5565\";\n if (reservation.status == 'confirmed') color = \"#1ab394\";\n if (reservation.status == 'pending' ) color = \"#f8ac59\";\n\n location.tasks.push({\n location_id: location.id, \n task_id: reservation.id,\n name: reservation.notes,\n color: color,\n content: \"\" + reservation.notes + \"\",\n contentTooltip: $sce.trustAsHtml(contentTooltip),\n from: moment(reservation.date_from),\n to: moment(reservation.date_to)\n });\n }\n\n loadData();\n\n $scope.changeDate = function () {\n loadData();\n }\n\n $scope.newLocationReservation = function (id, startDate, endDate, location_id) {\n $('.popover').hide();\n let $modalInstance = $uibModal.open({\n animation: true,\n template: NewReservationModalView,\n controller: \"NewReservationModalCtrl\",\n size: 'lg',\n resolve: {\n id: function () {\n return id;\n },\n startDate: function () {\n return startDate;\n }, endDate: function () {\n return endDate;\n },\n location_id: function () {\n return location_id;\n }\n }\n });\n\n $modalInstance.result.then(function () {\n $scope.api.data.clear();\n $scope.api.columns.clear();\n $scope.api.columns.refresh();\n $scope.api.rows.refresh();\n\n loadData();\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n if (!$scope.$$phase) $scope.$apply();\n });\n\n }\n\n $scope.pdfMaker = function () {\n var container = angular.element('#gantt-container');\n\n container.show();\n\n var results = document.getElementById('gantt-to-export');\n\n var width = angular.element('#gantt-to-export .gantt-side').width() + angular.element('#gantt-to-export .gantt-scrollable-header').width();\n var width2 = angular.element('#gantt-to-export').width()\n\n html2canvas(document.querySelector(\"#gantt-to-export\"), {\n width: width2,\n height: 4000, }).then(\n canvas => {\n var data = canvas.toDataURL(\"image/png\", 1.0);\n $(\".modal\").css(\"height\", \"\");\n var docDefinition = {\n pageSize: {\n width: canvas.width,\n height: canvas.height + 200\n },\n content: [{\n image: data,\n width: canvas.width\n }]\n };\n\n //@ts-ignore\n pdfMake.createPdf(docDefinition).download(\"gantt.pdf\");\n container.hide();\n\n });\n }\n\n}])\n\n;\n\n","import BreadcrumbView from \"../common/breadcrumb/breadcrumb.html\";\nimport LocationsReservationsListView from \"./locations_reservations-list.html\";\nimport LocationsReservationsEditView from \"./locations_reservations-edit.html\";\nimport LocationsReservationsTimelineView from \"./locations_reservations-timeline.html\";\n\n\nangular.module(\"locations_reservations\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('locations_reservations', {\n url: \"/locations_reservations\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n })\n\n .state('locations_reservations.list', {\n url: \"/list\",\n controller: \"LocationsReservationsListCtrl\",\n template: LocationsReservationsListView,\n requiredPermission: [\"LOCATION_RESERVATION_READ\"]\n }) \n .state('locations_reservations.edit', {\n url: \"/edit/:id\",\n controller: \"LocationsReservationsEditCtrl\",\n template: LocationsReservationsEditView,\n requiredPermission: [\"LOCATION_RESERVATION_READ\"]\n }) \n\n .state('locations_reservations.timeline', {\n url: \"/timeline\",\n controller: \"LocationsReservationsTimelineCtrl\",\n template: LocationsReservationsTimelineView,\n requiredPermission: [\"LOCATION_RESERVATION_READ\"],\n resolve: {\n ConfigurationsGantt: ['Restangular', function (Restangular) {\n return Restangular.all('Configurations').getList({ code: \"\", group_name: \"GANTT\" });\n }]\n }\n })\n }])\n;","import LoginView from \"./login.html\";\nimport EditPasswordModalView from \"../users/editPasswordModal.html\";\nimport ForgottenPswModalView from \"./forgottenPswModal.html\";\n\n\nangular.module(\"login\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('login', {\n url: \"/login\",\n views: {\n 'loginContent': {\n template: LoginView,\n controller: 'LoginCtrl'\n }\n }\n })\n ;\n }])\n\n .controller('LoginCtrl', ['$translate', '$scope', 'LoginService', '$rootScope', '$uibModal', '$http', '$state', 'modalService', 'Restangular', '$stateParams', '$location', '$httpParamSerializer', '$timeout', '$log', '$window', '$document', function ($translate, $scope, LoginService, $rootScope, $uibModal, $http, $state, modalService, Restangular, $stateParams, $location, $httpParamSerializer, $timeout, $log, $window, $document) {\n function transformUrlEncoded(data) {\n return $httpParamSerializer(data);\n }\n \n $scope.onKeyPress = function (keyEvent) {\n if (keyEvent.which === 13) $scope.doLogin();\n }\n\n $rootScope.loginProcess = false;\n\n let url = $location.absUrl();\n let code = null;\n let urlParts = url.split('?');\n\n if(urlParts.length > 1) {\n $log.debug(urlParts[1]);\n let paramParts = urlParts[1].split('&');\n\n for(let i = 0; i < paramParts.length; i ++) {\n if(paramParts[i].indexOf('code=') > -1) {\n code = paramParts[i].substring(5);\n }\n }\n }\n\n /*Restangular.all('AuthenticationProcesses/Enabled').getList().then(function (data) {\n $log.debug(data);\n if(data.length > 0) {\n $state.go(\"auth-process-init\");\n } else {*/\n $scope.disableLocalLogin = false;\n Restangular.one('Auth/localusers/status').get().then(function (data) {\n $scope.disableLocalLogin = data === true;\n });\n \n $scope.enableWebauthn = false;\n Restangular.one('Auth/WebAuthn/status').get().then(function (data) {\n $scope.enableWebauthn = data === true;\n });\n /*\n Restangular.all('Auth/Services').getList().then(function (services) {\n // Add to scope only services with openid configuration URL\n $scope.services = services.filter(s => s.openid_configuration != null);\n });\n \n }\n });*/\n \n\n if (code != null && !LoginService.isLoggedIn()) {\n let service = JSON.parse(localStorage.getItem(\"authService\"));\n let openid = JSON.parse(service.openid_configuration);\n \n let payload: any = {\n 'client_id': service.client_id,\n 'code': code,\n 'grant_type': 'authorization_code',\n 'redirect_uri': service.callback_url,\n 'code_verifier': service.codeVerifier,\n };\n\n let url = openid.token_endpoint;\n let headers = { 'Content-Type': 'application/x-www-form-urlencoded' };\n let transformRequest = transformUrlEncoded;\n\n if(service.client_secret != null) {\n payload.client_secret = encodeURIComponent(service.client_secret);\n }\n\n if(openid.token_endpoint.indexOf('auth0') > -1) {\n $log.debug(\"añado la audiencia\");\n payload.audience = service.audience;\n } else if(openid.token_endpoint.indexOf('google') > -1) {\n url = \"/api/mobile/auth/oauth/token\";\n payload.uri = openid.token_endpoint;\n headers = { 'Content-Type': 'application/json' };\n transformRequest = null;\n payload.code = decodeURIComponent(code);\n payload = JSON.stringify(payload);\n } else if(service.proxy_token_request === true) {\n url = \"/api/auth/oauth/token\";\n payload.uri = openid.token_endpoint;\n headers = { 'Content-Type': 'application/json' };\n transformRequest = null;\n payload.code = decodeURIComponent(code);\n payload = JSON.stringify(payload);\n }\n \n $http({\n method: \"post\",\n url: url,\n transformRequest: transformRequest,\n headers: headers,\n data: payload\n }).then(function (response) {\n let data = response.data;\n if(typeof(data) === \"string\") {\n data = JSON.parse(data);\n }\n $log.debug(data);\n \n let access_token = data.access_token;\n \n let parts = access_token.split('.');\n if(parts.length !== 3) {\n access_token = data.id_token;\n }\n \n $http.defaults.headers.common[\"Authorization\"] = \"Bearer \" + access_token;\n// setCookie(\"token\", \"Bearer \" + data.token.accessToken, null);\n LoginService.set(\"accessToken\", access_token);\n LoginService.set(\"refreshToken\", data.refresh_token);\n LoginService.set(\"expires_in\", data.expires_in);\n LoginService.set(\"accessTokenValidTo\", new Date(data.expires_in * 1000 + Date.now()).toISOString());\n window.close();\n });\n }\n\n $scope.loginData = {};\n $scope.alerts = {};\n \n if($rootScope.inactivityLogout != null) {\n $scope.alerts = [\n { type: 'danger', msg: 'Sesión caducada por inactividad.' }\n ];\n $rootScope.inactivityLogout = null;\n }\n\n $rootScope.islogged = false;\n $scope.services = null;\n\n if (LoginService.isLoggedIn()) {\n $rootScope.islogged = true;\n } else {\n if (LoginService.wantToBeRemembered() == \"true\") {\n $scope.loginData.username = LoginService.get(\"user\");\n $scope.loginData.remember = true;\n }\n }\n\n Restangular.all('Auth/Services').getList().then(function (services) {\n // Add to scope only services with openid configuration URL\n $scope.services = services.filter(s => s.openid_configuration != null);\n });\n\n let coerceToBase64Url = function (thing) {\n // Array or ArrayBuffer to Uint8Array\n if (Array.isArray(thing)) {\n thing = Uint8Array.from(thing);\n }\n\n if (thing instanceof ArrayBuffer) {\n thing = new Uint8Array(thing);\n }\n\n // Uint8Array to base64\n if (thing instanceof Uint8Array) {\n var str = \"\";\n var len = thing.byteLength;\n\n for (var i = 0; i < len; i++) {\n str += String.fromCharCode(thing[i]);\n }\n thing = window.btoa(str);\n }\n\n if (typeof thing !== \"string\") {\n throw new Error(\"could not coerce to string\");\n }\n\n // base64 to base64url\n // NOTE: \"=\" at the end of challenge is optional, strip it off here\n thing = thing.replace(/\\+/g, \"-\")\n .replace(/\\//g, \"_\")\n .replace(/={1,5}$/g, \"\");\n\n return thing;\n };\n\n let coerceToArrayBuffer = function (thing, name) {\n if (typeof thing === \"string\") {\n // base64url to base64\n thing = thing.replace(/-/g, \"+\").replace(/_/g, \"/\");\n\n // base64 to Uint8Array\n var str = window.atob(thing);\n var bytes = new Uint8Array(str.length);\n for (var i = 0; i < str.length; i++) {\n bytes[i] = str.charCodeAt(i);\n }\n thing = bytes;\n }\n\n // Array to Uint8Array\n if (Array.isArray(thing)) {\n thing = new Uint8Array(thing);\n }\n\n // Uint8Array to ArrayBuffer\n if (thing instanceof Uint8Array) {\n thing = thing.buffer;\n }\n\n // error if none of the above worked\n if (!(thing instanceof ArrayBuffer)) {\n throw new TypeError(\"could not coerce '\" + name + \"' to ArrayBuffer\");\n }\n\n return thing;\n };\n\n let verifyAssertionWithServer = async function (assertedCredential) {\n $log.debug(\"Verifying assertion with server\");\n $log.debug(assertedCredential);\n // Move data into Arrays incase it is super long\n let authData = new Uint8Array(assertedCredential.response.authenticatorData);\n let clientDataJSON = new Uint8Array(assertedCredential.response.clientDataJSON);\n let rawId = new Uint8Array(assertedCredential.rawId);\n let sig = new Uint8Array(assertedCredential.response.signature);\n let userHandle = new Uint8Array(assertedCredential.response.userHandle)\n const data = {\n id: assertedCredential.id,\n rawId: coerceToBase64Url(rawId),\n type: assertedCredential.type,\n extensions: assertedCredential.getClientExtensionResults(),\n response: {\n authenticatorData: coerceToBase64Url(authData),\n clientDataJSON: coerceToBase64Url(clientDataJSON),\n userHandle: userHandle !== null ? coerceToBase64Url(userHandle): null,\n signature: coerceToBase64Url(sig)\n }\n };\n\n Restangular.all('Auth').customPOST(JSON.stringify(data), 'WebAuthn/MakeAssertion', {}, {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json'\n }).then(function (response) {\n // show error\n if (response.AssertionVerificationResult.status !== \"ok\") {\n $log.error(\"Error doing assertion\");\n $log.error(response.AssertionVerificationResult.errorMessage);\n return;\n }\n\n processAuthenticationInfo(response.AuthenticationInfo);\n $log.debug(\"Assertion verified!\");\n });\n };\n \n const processAuthenticationInfo = function (data) {\n $rootScope.offersPermission = \"\";\n if (data.token.success) {\n localStorage.removeItem(\"authService\");\n\n $http.defaults.headers.common[\"Authorization\"] = \"Bearer \" + data.token.accessToken;\n LoginService.saveTokenInfo(data);\n $rootScope.islogged = true;\n\n $rootScope.roles_permissions = data.roles_permissions;\n\n //configuramos lenguaje de usuario\n $translate.use(data.language);\n $http.defaults.headers.common[\"language_code\"] = data.language;\n\n let validTo = Date.parse(data.token.validTo);\n\n let timeValid =Math.abs(validTo - Date.now());\n\n/* $timeout(function () {\n $log.debug(\"Salta el timeout\");\n $scope.refreshToken();\n }, timeValid - 180000);*/\n\n //Si ha entrado con contraseña temporal, se lanza el popup para cambiarla.\n if (data.temporal_password) {\n\n Restangular.one('Users', data.token.userId).get().then(function (results) {\n $scope.user = results;\n let $modalInstance = $uibModal.open({\n animation: true,\n template: EditPasswordModalView,\n controller: \"EditPasswordModalCtrl\",\n resolve: {\n user: function () {\n return $scope.user;\n }\n }\n });\n });\n }\n\n $state.go('dashboard.list');\n } else {\n $scope.alerts = [\n { type: 'danger', msg: data.token.errorMessage }\n ];\n }\n };\n \n $scope.doWebauthnLogin = function () {\n Restangular.all('Auth').customPOST({}, 'WebAuthn/AssertionOptions', {}).then(async function (makeAssertionOptions) {\n $log.debug(makeAssertionOptions);\n if (makeAssertionOptions.status === \"ok\") {\n const challenge = makeAssertionOptions.challenge.replace(/-/g, \"+\").replace(/_/g, \"/\");\n makeAssertionOptions.challenge = Uint8Array.from(atob(challenge), c => c.charCodeAt(0));\n\n // fix escaping. Change this to coerce\n makeAssertionOptions.allowCredentials.forEach(function (listItem) {\n var fixedId = listItem.id.replace(/\\_/g, \"/\").replace(/\\-/g, \"+\");\n listItem.id = Uint8Array.from(atob(fixedId), c => c.charCodeAt(0));\n });\n\n // ask browser for credentials (browser will ask connected authenticators)\n let credential;\n try {\n credential = await navigator.credentials.get({ publicKey: makeAssertionOptions })\n } catch (err) {\n $log.error(err);\n }\n\n try {\n await verifyAssertionWithServer(credential);\n } catch (e) {\n $log.error(e);\n }\n }\n });\n };\n \n // Perform the login action when the user submits the login form\n $scope.doLogin = function () {\n if ($scope.loginData.username == \"\" || $scope.loginData.password == \"\" || $scope.loginData.username == null || $scope.loginData.password == null) {\n $scope.alerts = [\n { type: 'danger', msg: 'Debes indicar tu nombre de usuario y contraseña de acceso.' }\n ];\n return;\n }\n\n LoginService.loginUser($scope.loginData.username, $scope.loginData.password)\n .then(function (data) {\n $rootScope.offersPermission = \"\";\n if (data.token.success) { \n localStorage.removeItem(\"authService\");\n \n LoginService.saveTokenInfo(data, $scope.loginData);\n $rootScope.islogged = true;\n\n $rootScope.roles_permissions = data.roles_permissions;\n\n //configuramos lenguaje de usuario\n $translate.use(data.language);\n $http.defaults.headers.common[\"language_code\"] = data.language;\n \n/* let validTo = Date.parse(data.token.validTo);\n \n let timeValid =Math.abs(validTo - Date.now());\n \n $timeout(function () {\n $log.debug(\"Salta el timeout\");\n $scope.refreshToken();\n }, timeValid - 180000);*/\n \n //Si ha entrado con contraseña temporal, se lanza el popup para cambiarla.\n if (data.temporal_password) {\n \n Restangular.one('Users', data.token.userId).get().then(function (results) {\n $scope.user = results; \n let $modalInstance = $uibModal.open({\n animation: true,\n template: EditPasswordModalView,\n controller: \"EditPasswordModalCtrl\",\n resolve: {\n user: function () {\n return $scope.user;\n }\n }\n });\n });\n }\n\n $state.go('dashboard.list');\n } else {\n $scope.alerts = [\n { type: 'danger', msg: data.token.errorMessage }\n ];\n }\n }, \n function (data) {\n $scope.alerts = [\n { type: 'danger', msg: 'Ha ocurrido un error, inténtelo de nuevo más tarde.' }\n ];\n });\n\n };\n\n $scope.closeSession = function () {\n LoginService.closeSession();\n }\n\n $scope.forgottenPswModal = {};\n $scope.selectedService = { value: null };\n\n function dec2hex (dec) {\n return dec.toString(16).padStart(2, \"0\")\n }\n \n function generateId (len) {\n var arr = new Uint8Array((len || 40) / 2)\n window.crypto.getRandomValues(arr)\n return Array.from(arr, dec2hex).join('')\n }\n \n $scope.loginExternal = function(service) {\n let openid = JSON.parse(service.openid_configuration);\n \n // cuando pasemos el proceso completo de proxy de login al servidor quitar el false\n if(service.proxy_token_request === true && false) {\n $http.get(\"/api/auth/Challenge/\" + service.id).then(function (response) {\n $window.location.href = response.data;\n });\n } else {\n let nonce = generateId(16);\n let state = generateId(16);\n let codeVerifier = generateId(64);\n\n service.nonce = nonce;\n service.state = state;\n service.codeVerifier = codeVerifier;\n\n localStorage.setItem(\"authService\", JSON.stringify(service));\n\n let codeChallenge = CryptoJS.SHA256(codeVerifier).toString(CryptoJS.enc.Base64);\n\n let url = openid.authorization_endpoint\n + \"?response_type=code&client_id=\" + encodeURIComponent(service.client_id)\n + \"&scope=\" + encodeURIComponent(service.scopes)\n + \"&response_mode=query\"\n + \"&state=\" + encodeURIComponent(state)\n + \"&nonce=\" + encodeURIComponent(nonce)\n + \"&redirect_uri=\" + encodeURIComponent(service.callback_url)\n + \"&code_challenge=\" + codeChallenge.replace(/=/g, '').replace(/\\+/g, '-').replace(/\\//g, '_')\n + \"&code_challenge_method=S256\";\n\n if (openid.client_secret != null) {\n url += \"&client_secret=\" + encodeURIComponent(openid.client_secret);\n }\n\n $log.debug(\"Cargo la url \" + url + \" en una nueva ventana\");\n\n let win = window.open(url, \"_blank\", \"\");\n\n\n const interval = setInterval(() => {\n if (win.closed) {\n clearInterval(interval);\n // window.location.reload();\n /* let expires = parseInt(LoginService.get(\"expires_in\"));\n \n $timeout(function () {\n $scope.refreshToken();\n }, (expires - 60) * 1000);*/\n\n $timeout(function () {\n if (LoginService.isLoggedIn()) {\n Restangular.one('Auth/UserInfo').get().then(function (data2) {\n $log.debug(\"UserInfo fetched\");\n $log.debug(\"UserInfo fetched\");\n LoginService.set(\"userId\", data2.user_id);\n LoginService.set(\"userIcon\", data2.user_icon);\n LoginService.set(\"companyId\", data2.company_id);\n LoginService.set(\"rolesPermissions\", data2.roles_permissions);\n $rootScope.islogged = true;\n $rootScope.roles_permissions = data2.roles_permissions;\n $translate.use(data2.language);\n $http.defaults.headers.common[\"language_code\"] = data2.language;\n\n $log.debug(\"Login externo correcto. Cargamos el dashboard\");\n $state.go('dashboard.list');\n });\n }\n }, 1000);\n }\n }, 500);\n }\n }\n \n $scope.ForgottenPswDialog = function () {\n\n let $modalInstance = $uibModal.open({\n animation: true,\n template: ForgottenPswModalView,\n controller: \"ForgottenPswModalCtrl\"\n \n });\n\n $modalInstance.result.then(function (resultModal) {\n if (angular.isDefined(resultModal.email) && resultModal.email != \"\") {\n\n $http.post((window as any).CONFIG.api_url + 'Auth/CreateNewPass', { email: resultModal.email })\n .then(function (data, status, headers, config) {\n modalService.message({\n title: \"Correo enviado\",\n message: \"Si existe un usuario con esa cuenta, se le ha enviado al correo proporcionado una contraseña temporal. \",\n onAccept: function () {\n $modalInstance.dismiss('cancel');\n }\n });\n })\n .catch(function (data, status, headers, config) {\n $log.debug(\"error\");\n });\n }\n\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n });\n\n }; //ForgottenPswDialog\n\n }])\n \n\n .controller(\"ForgottenPswModalCtrl\", ['$scope', '$uibModalInstance', 'modalService', function ($scope, $uibModalInstance, modalService) {\n\n $scope.forgottenPswModal = {};\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n $scope.sendEmail = function () {\n //Devolvemos el control al principal\n $uibModalInstance.close($scope.forgottenPswModal);\n\n };//saveTranslation\n\n\n }])\n;","import './mail_accounts';\nimport './mail_accounts-list';\nimport './mail_accounts-edit'; ","import EditPasswordAccountModalView from \"./editPasswordModal.html\";\nimport TryConnectionModalView from \"./tryConnectionModal.html\";\n\nangular.module(\"mail_accounts\")\n\n .controller(\"MailAccountsEditCtrl\", ['LoginService', '$scope', '$rootScope', '$state', '$stateParams', 'Restangular', 'gridService', '$filter', '$translate', 'modalService', '$uibModal',\n function (LoginService, $scope, $rootScope, $state, $stateParams, Restangular, gridService, $filter, $translate, modalService, $uibModal) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"MAIL_ACCOUNTS_WRITE\");\n\n $rootScope.title = $filter('translate')('mail_accounts.title');\n\n $scope.isCorrectReplyTo = true;\n\n $scope.tinymceOptions = {\n resize: true,\n forced_root_block: false,\n\n relative_urls: false,\n convert_urls: false,\n remove_script_host: false,\n\n height: 60,\n body_class: 'custom_tinymce_content',\n //valid_classes: 'razor_expression',\n language: 'es',\n paste_as_text: true,\n plugins: 'paste autoresize textcolor image lists advlist table noneditable code link',\n toolbar: \"undo redo | alignleft aligncenter alignright alignjustify | bold italic forecolor backcolor fontsizeselect | bullist numlist outdent indent link | table | image | code\",\n menubar: false,\n statusbar: false,\n setup: function (editor) {\n\n }\n };\n\n $scope.mail_account = {\n use_for_system_mails: true\n };\n if (angular.isUndefined($stateParams.id) || $stateParams.id == \"\") {\n\n $rootScope.breadcrumb = [\n { title: $filter('translate')('mail_accounts.title'), url: \"mail_accounts.list\" },\n { title: $filter('translate')('mail_accounts.title_add') },\n ];\n\n } else {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('mail_accounts.title'), url: \"mail_accounts.list\" },\n { title: $filter('translate')('mail_accounts.title_edit') },\n ];\n\n Restangular.one('MailAccounts', $stateParams.id).get().then(function (result) {\n $scope.mail_account = result;\n if ($scope.mail_account.reply_to!=null) {\n $scope.mail_account.replyto_list_array = $scope.mail_account.reply_to.split(\",\");\n } else {\n $scope.mail_account.replyto_list_array = [];\n }\n });\n }\n\n $scope.saveMailAccount = function () {\n\n if ($scope.mail_account.replyto_list_array.length > 1) {\n $scope.isCorrectReplyTo = false;\n } else {\n $scope.isCorrectReplyTo = true;\n\n $scope.mail_account.reply_to = $scope.mail_account.replyto_list_array.join(\",\");\n\n if (angular.isDefined($stateParams.id) && $stateParams.id != \"\") {\n $scope.mail_account.put().then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('mail_accounts.save_success'));\n $state.go(\"mail_accounts.list\");\n } else {\n $scope.errorMessage = result.message;\n }\n });\n } else {\n Restangular.all('MailAccounts').post($scope.mail_account).then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('mail_accounts.edit_success'));\n $state.go(\"mail_accounts.list\");\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n }\n }\n\n $scope.checkDelete = function () {\n modalService.confirm({\n title: $filter('translate')('mail_accounts.button_delete'),\n message: $filter('translate')('mail_accounts.delete_message') + \" \" + $scope.mail_account.name + \"?\",\n onAccept: function () {\n $scope.mail_account.remove().then(function () {\n toastr.success($filter('translate')('mail_accounts.deleted_success'));\n $state.go(\"mail_accounts.list\");\n });\n }\n });\n };\n\n\n $scope.editPassword = function () {\n $scope.$modalInstancee = $uibModal.open({\n animation: true,\n template: EditPasswordAccountModalView,\n controller: \"EditPasswordAccountModalCtrl\",\n resolve: {\n entity: function () {\n return $scope.mail_account;\n }\n }\n });\n };\n\n $scope.tryConnection = function () {\n $scope.$modalInstancee = $uibModal.open({\n animation: true,\n template: TryConnectionModalView,\n controller: \"TryConnectionModalCtrl\",\n resolve: {\n entity: function () {\n return $scope.mail_account;\n }\n }\n });\n }\n }])\n\n.controller(\"EditPasswordAccountModalCtrl\", ['$scope', '$uibModalInstance', 'Restangular', 'entity', 'modalService', '$filter', function ($scope, $uibModalInstance, Restangular, entity, modalService, $filter) {\n let tests = [/[a-z]/i];\n\n function test(pass) {\n if (pass == null)\n return -1;\n let s = 0;\n if (pass.length < 4)\n return 0;\n for (let i in tests)\n s++\n return s;\n }\n\n $scope.password = \"\";\n $scope.validPassword = false;\n\n $scope.v = function () {\n let val = test($scope.password);\n $scope.validPassword = val ===1;\n return val;\n };\n\n\n $scope.entity = entity;\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n $scope.savePassword = function () {\n if ($scope.password != \"\") {\n $scope.entity.password = $scope.password;\n $scope.entity.update_password = true;\n $scope.entity.put().then(function (result) {\n if (angular.isDefined(result.id)) {\n $scope.entity.password = result.password;\n $scope.entity.update_password = false;\n $uibModalInstance.close();\n toastr.success($filter('translate')('users.password_updated'));\n } \n });\n }\n };\n}])\n\n.controller(\"TryConnectionModalCtrl\", ['$scope', '$uibModalInstance', 'Restangular', 'entity', 'modalService', '$filter', function ($scope, $uibModalInstance, Restangular, entity, modalService, $filter) {\n\n $scope.entity = entity;\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n $scope.sendEmail = function () {\n Restangular.all('MailAccounts').customPOST({}, \"TryMailConnection\", { id: $scope.entity.id, mailTo: $scope.mailTo }).then(function (result) {\n $scope.success = result;\n if (!result) {\n $scope.message = \"El mensaje no se ha enviado.\";\n } else {\n $scope.message = \"El mensaje se ha enviado correctamente.\";\n }\n }); \n };\n}]);\n\n;\n\n","angular.module(\"mail_accounts\")\n\n .controller(\"MailAccountsListCtrl\", ['LoginService', '$rootScope', '$scope', '$http', '$interval', '$q', 'i18nService', 'Restangular', 'gridService', 'modalService', '$uibModal', '$filter', '$translate', '$state',\n function (LoginService, $rootScope, $scope, $http, $interval, $q, i18nService, Restangular, gridService, modalService, $uibModal, $filter, $translate, $state) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"MAIL_ACCOUNTS_WRITE\");\n\n $rootScope.title = $filter('translate')('mail_accounts.title');\n\n $rootScope.breadcrumb = [\n { title: $filter('translate')('mail_accounts.title') }\n ];\n\n $scope.gridOptionsMailAccounts = {\n pdfTitle: $filter('translate')('mail_accounts.title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n enableSorting: true,\n paginationPageSizes: [20, 40, 60],\n paginationPageSize: 20,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n { name: 'name', displayName: $filter('translate')('mail_accounts.name'), enableFiltering: true, enableHiding: false },\n { name: 'email', displayName: $filter('translate')('mail_accounts.email'), enableFiltering: true, enableHiding: false },\n { name: 'reply_to', displayName: $filter('translate')('mail.reply_to'), enableFiltering: false, enableHiding: false },\n { name: 'use_by_default', enableFiltering: true, displayName: $filter('translate')('mail_accounts.use_by_default'), cellTemplate: \"
\" +\n \"\" +\n \"\" +\n \"
\" },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('mail_accounts.button_edit'), action: 'ui-sref=\"mail_accounts.edit({id:row.entity.id})\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('mail_accounts.button_delete'), action: 'ng-click=\"grid.appScope.deleteDialog(row.entity.id,row.entity.name);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n return Restangular.all('MailAccounts').getList(options);\n }\n };\n\n $scope.goToEdit = function (rowEntity) {\n $state.go(\"mail_accounts.edit\", { id: rowEntity.id });\n }\n\n $scope.deleteDialog = function (id, name) {\n $scope.id = id;\n $scope.name = name;\n modalService.confirm({\n title: $filter('translate')('mail_accounts.button_delete'),\n message: $filter('translate')('mail_accounts.delete_message') + \" \" + $scope.name + \"?\",\n onAccept: function () {\n Restangular.one('MailAccounts', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('mail_accounts.deleted_success'));\n $scope.gridOptionsMailAccounts.gridApi.core.raise.itemDeleted($scope);\n\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n });\n };\n\n }])\n\n;","import BreadcrumbView from \"../common/breadcrumb/breadcrumb.html\";\nimport MailAccountsListView from \"./mail_accounts-list.html\";\nimport MailAccountsEditView from \"./mail_accounts-edit.html\";\n\n\nangular.module(\"mail_accounts\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('mail_accounts', {\n url: \"/mail_accounts\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n })\n\n .state('mail_accounts.list', {\n url: \"/list\",\n controller: \"MailAccountsListCtrl\",\n template: MailAccountsListView,\n cache: false,\n requiredPermission: [\"MAIL_ACCOUNTS_READ\"]\n }) \n .state('mail_accounts.edit', {\n url: \"/edit/:id\",\n controller: \"MailAccountsEditCtrl\",\n template: MailAccountsEditView,\n cache: false,\n requiredPermission: [\"MAIL_ACCOUNTS_READ\"]\n })\n }])\n;","import './mailings';\nimport './mailings-list';\nimport './mailings-edit';\nimport './mailingFilesStelaModal';\nimport './mailingTemplatesModal';","angular.module('mailings')\n\n .controller('MailingFilesStelaModalCtrl', ['entity_type', 'entity_type_id','is_public', 'folderId', '$scope', '$uibModal', '$uibModalInstance', '$http', 'Restangular', 'LoginService', '$filter', '$timeout', '$rootScope', '$log',\n function (entity_type, entity_type_id, is_public, folderId, $scope, $uibModal, $uibModalInstance, $http, Restangular, LoginService, $filter, $timeout, $rootScope, $log) {\n let currentFolderId = null;\n $scope.checkedFile = [];\n $scope.breadcrumb = function (folderId) {\n let options = { id: folderId, entity_type: entity_type, entity_type_id: entity_type_id };\n currentFolderId = folderId;\n Restangular.all(\"Folders\").customGET(\"FoldersBreadcrumb\", options).then(function (results) {\n $scope.breadcrumbs = results;\n });\n };\n $scope.breadcrumb(currentFolderId);\n\n $scope.loadData = function (folderId) {\n let options = { folder_id: folderId, entity_type: entity_type, entity_type_id: entity_type_id, is_public: is_public };\n currentFolderId = folderId;\n $log.debug(is_public);\n Restangular.all(\"Folders\").getList(options).then(function (results) {\n $log.debug(results);\n let fullFolderFiles = results;\n $scope.foldersFiles = results;\n $scope.breadcrumb(currentFolderId);//recargamos el breadcrumb\n });\n };\n\n $scope.loadData(currentFolderId);\n\n $scope.saveTemplate = function () {\n $scope.loadAttachments();\n $timeout(function () {\n $uibModalInstance.close($scope.attachmentsStela);\n }, 500);\n \n };\n\n $scope.loadAttachments = function () {\n $scope.attachmentsStela = [];\n\n for (var key in $scope.checkedFile) {\n if ($scope.checkedFile[key].checked) {\n Restangular.all(\"Files\").getList({ uid: key }).then(function (res) {\n $scope.attachmentsStela.push(res[0]);\n });\n }\n }\n }\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n }])\n;","angular.module('mailings')\n\n .controller('MailingTemplatesModalCtrl', ['entity_type', 'entity_type_id', '$scope', '$uibModal', '$uibModalInstance', '$http', 'Restangular', 'LoginService', '$filter', '$timeout', '$rootScope',\n function (entity_type, entity_type_id, $scope, $uibModal, $uibModalInstance, $http, Restangular, LoginService, $filter, $timeout, $rootScope) {\n\n $scope.search = { mailing_id: null };\n\n Restangular.all('mailings').getList({ entity_type: null, entity_type_id: null, mailing_type_code : 'EVENTS'}).then(function (mailings) {\n $scope.selectMailings = [];\n angular.forEach(mailings, function (mailing) {\n $scope.selectMailings.push({ id: mailing.id, fullname: mailing.short_title + \" - \" + mailing.title });\n })\n });\n\n $scope.saveTemplate = function () {\n Restangular.all(\"Mailings\").customPOST({}, \"SaveMailingFromTemplateToEvent\", { mailing_id: $scope.search.mailing_id, entity_type, entity_type_id }).then(function (results) {\n $uibModalInstance.close(results);\n });\n };\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n }])\n;","import MailingFilesStelaModalView from \"./mailingFilesStelaModal.html\";\nimport SearchPersonsModalView from '../notifications/searchPersonsModal.html';\n\nangular.module(\"mailings\")\n\n .controller(\"MailingsEditCtrl\", ['mailingId', 'entityType', 'entityTypeId', '$rootScope', '$scope', '$uibModal', '$uibModalInstance', '$timeout', '$http', '$stateParams', 'Restangular', 'Upload', '$state', 'modalService', '$filter', 'gridService', 'generateDocumentService', 'BeeService',\n function (mailingId, entityType, entityTypeId, $rootScope, $scope, $uibModal, $uibModalInstance,$timeout, $http, $stateParams, Restangular, Upload, $state, modalService, $filter, gridService, generateDocumentService, BeeService) {\n\n $rootScope.title = $filter('translate')('mailing.title');\n $scope.mailingId = null;\n $scope.showDocuments = false;\n $scope.loadBee = true;\n\n $scope.mailingId = mailingId;\n $scope.entity_type = entityType;\n $scope.entity_type_id = entityTypeId;\n $scope.mailingsTypes = [];\n $scope.mailing = [];\n $scope.mailing.filesToShow = [];\n $scope.mailing.attachments = [];\n $scope.mailing.documentsIds = [];\n\n if (entityType == 'events') {\n $scope.forEvents = true;\n } else {\n $scope.forEvents = false;\n }\n\n let loadMailingsTypes = function () {\n Restangular.all('MailingsTypes').getList().then(function (types) {\n\n $scope.mailingsTypes = types;\n\n if ($scope.forEvents) {\n $scope.mailing.mailing_type_id = $scope.mailingsTypes.filter(function (config) { return config.code == \"EVENTS\"; }).map(function (config) { return config.id; })[0];\n }\n\n });\n\n }\n\n let languageCode = \"es\"; //$translate.use().toLowerCase();\n $scope.tinymceOptions = {\n resize: true,\n forced_root_block: false,\n relative_urls: false,\n convert_urls: false,\n remove_script_host: false,\n height: 100,\n body_class: 'custom_tinymce_content',\n //valid_classes: 'razor_expression',\n language: languageCode,\n paste_as_text: true,\n plugins: 'paste autoresize textcolor image lists advlist table noneditable code link fullpage',\n toolbar: \"undo redo | alignleft aligncenter alignright alignjustify | bold italic forecolor backcolor fontsizeselect | bullist numlist outdent indent link | code\",\n menubar: false,\n statusbar: false\n };\n\n Restangular.all('NotificationsTemplates').customGET(\"LoadTemplatesForSelect\").then(function (templates) {\n $scope.templates = templates;\n });\n\n let loadMailsAccounts = function () {\n\n if ($scope.forEvents) {\n Restangular.one('Events', $scope.entity_type_id).get().then(function (event) {\n Restangular.all('MailAccounts').getList().then(function (accounts) {\n if (typeof ($scope.mailingId) == 'undefined')\n $scope.mailing.mail_account_id = event.mail_account_id;\n\n // En caso de que no haya una defininda para el evento, utilizamos la cuenta por defecto, si la hay.\n let defaultAccount = accounts.filter(m => m.use_by_default)[0];\n $scope.mailing.cco = event.bcc;\n if (typeof ($scope.mailingId) == 'undefined' && defaultAccount != null && $scope.mailing.mail_account_id == null) $scope.mailing.mail_account_id = defaultAccount.id;\n\n $scope.mailsAccounts = accounts;\n });\n });\n } else {\n Restangular.all('MailAccounts').getList().then(function (mailsAccounts) {\n $scope.mailsAccounts = mailsAccounts;\n // Si no es para eventos, utilizamos por defecto la cuenta definida como tal.\n let defaultAccount = mailsAccounts.filter(m => m.use_by_default)[0];\n if (typeof ($scope.mailingId) == 'undefined' && defaultAccount != null && $scope.mailing.mail_account_id == null) $scope.mailing.mail_account_id = defaultAccount.id;\n });\n }\n \n\n };\n\n loadMailingsTypes();\n\n Restangular.one('Mailings', $scope.mailingId).get().then(function (result) {\n $scope.mailing = result;\n\n $scope.mailing.filesToShow = [];\n $scope.mailing.attachments = [];\n $scope.mailing.documentsIds = [];\n\n if (typeof ($scope.mailingId) != 'undefined') {\n if ($scope.mailing.preheader == null) {\n $scope.mailing.preheader = \"[EVENT_NAME] [EVENT_DATE]\";\n }\n\n if ($scope.mailing.json != null && $scope.mailing.json !== \"\") {\n $scope.loadBee = true;\n BeeService.reload(JSON.parse($scope.mailing.json));\n } else {\n $scope.loadBee = false;\n }\n\n if (result.id != null) {\n if (result.FK_mailing_attachment_mailing.length > 0) {\n angular.forEach(result.FK_mailing_attachment_mailing, function (row) {\n $scope.mailing.filesToShow.push(row);\n });\n }\n }\n\n loadMailsAccounts()\n\n } else {\n loadMailsAccounts();\n $scope.loadBee = true;\n BeeService.start({});\n $scope.mailing.ics = 0;\n $scope.mailing.icon = \"glyphicon glyphicon-asterisk\";\n $scope.mailing.is_blocked = true;\n }\n });\n\n if ($scope.entity_type == 'events') {\n $scope.for_event_guest = true;\n }\n\n var optionsValues = {\n entity_type: $scope.entity_type,\n entity_type_id: $scope.entity_type_id,\n codes: $scope.codes,\n for_event_guest: $scope.for_event_guest,\n for_event_staff: $scope.for_event_staff,\n for_event_workteam: $scope.for_event_workteam,\n for_correspondence: $scope.for_correspondence\n };\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + 'Documents/GetDocumentsByDocumentsType',\n params: optionsValues\n }).then(function (results, status, headers, config) {\n $scope.documents = results.data.rows;\n\n $scope.documentsTypes = $scope.documents.map(function (item) { return { code: item.FK_documents_documents_types.code, name: item.FK_documents_documents_types.name } }).filter(function (x, i, a) {\n return a.findIndex(m => m.code === x.code) == i;\n });\n });\n\n\n $scope.loadTemplate = function (template_id) {\n if (typeof (template_id) !== \"undefined\" && template_id !== null && template_id !== \"\") {\n Restangular.one('Templates', template_id).get().then(function (result) {\n let json = result.FK_templates_tl_templates.filter(function (tl) { return tl.language_id == $rootScope.languageId })[0].json;\n if (json != null && json !== \"\") {\n $scope.loadBee = true;\n BeeService.reload(JSON.parse(json));\n } else if (json == null || json === \"\") {\n $scope.loadBee = false;\n $scope.mailing.content = result.FK_templates_tl_templates.filter(function (tl) { return tl.language_id == $rootScope.languageId })[0].html;\n }\n });\n } else {\n $scope.mailing.content = \"\";\n }\n }\n\n $scope.openSearchPerson = function (whereToAdd) {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: SearchPersonsModalView,\n size: \"lg\",\n controller: \"searchPersonsModalCtrl\",\n scope: $scope,\n resolve: {\n options: function () {\n return {};\n }\n }\n });\n //Response del modal\n $modalInstance.result.then(function (data) {\n let mailsSelected = \"\";\n angular.forEach(data, function (row) {\n mailsSelected = (mailsSelected != \"\" ? mailsSelected + \",\" + row : row);\n });\n if (whereToAdd == \"addresses\") {\n $scope.mailing.addresses = (typeof ($scope.mailing.addresses) !== 'undefined' && $scope.mailing.addresses != \"\" ? $scope.mailing.addresses + \",\" + mailsSelected : mailsSelected);\n } else if (whereToAdd == \"cc_tmp\") {\n $scope.mailing.cc_tmp = (typeof ($scope.mailing.cc_tmp) !== 'undefined' && $scope.mailing.cc_tmp != \"\" ? $scope.mailing.cc_tmp + \",\" + mailsSelected : mailsSelected);\n } else if (whereToAdd == \"cco_tmp\") {\n $scope.mailing.cco = (typeof ($scope.mailing.cco) !== 'undefined' && $scope.mailing.cco != \"\" ? $scope.mailing.cco + \",\" + mailsSelected : mailsSelected);\n }\n if (!$scope.$$phase) $scope.$apply();\n }, function () {\n if (!$scope.$$phase) $scope.$apply();\n });\n };\n\n $scope.newAttachment = function (file) {\n if (file != null) { $scope.mailing.filesToShow.unshift(file); }\n Upload.base64DataUrl(file).then(function (urls) {\n $scope.mailing.attachments.push({\n name: file.name,\n content: urls\n });\n });\n };\n\n $scope.newAttachmentStela = function () {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: MailingFilesStelaModalView,\n size: \"lg\",\n controller: \"MailingFilesStelaModalCtrl\",\n scope: $scope,\n resolve: {\n entity_type: function () { return $scope.entity_type != null ? $scope.entity_type :\"general\" },\n entity_type_id: function () { return $scope.entity_type_id != null?$scope.entity_type_id:null; },\n is_public: function () { return false; },\n folderId: function () { return null; }\n }\n });\n //Response del modal\n $modalInstance.result.then(function (data) {\n if (data.length > 0) {\n angular.forEach(data, function (row) {\n $scope.mailing.filesToShow.push({\n name: row.filename,\n type: row.mimetype\n });\n $scope.mailing.attachments.push({\n name: row.filename,\n file_id: row.id,\n mimetype: row.mimetype,\n uid: row.uid\n })\n })\n }\n\n }, function () {\n\n });\n\n };\n\n\n $scope.deleteAttachment = function (item) {\n let index = $scope.mailing.filesToShow.indexOf(item);\n $scope.mailing.filesToShow.splice(index, 1);\n let option = {\n id: item.id\n };\n\n if (!angular.isUndefined(option.id)) {\n Restangular.all('Mailings/DeleteAttachment').remove(option).then(function (result) {\n });\n } else {\n if ($scope.mailing.documentsIds.length > 0) {\n var idx = $scope.mailing.documentsIds.find(function (row, i) {\n if (row.document_name === item.name) {\n return i;\n }\n });\n $scope.mailing.documentsIds.splice(idx, 1);\n }\n }\n };\n \n $scope.saveMailing = function () {\n if (typeof ($scope.mailingId) == \"undefined\") {\n $scope.mailing.entity_type = $scope.entity_type;\n $scope.mailing.entity_type_id = $scope.entity_type_id;\n\n /*if ($scope.forEvents) {\n $scope.mailing.mail_account_id = null;\n }*/\n Restangular.all('Mailings').post($scope.mailing).then(function (result) {\n $scope.mailing.id = result.id;\n $scope.uploadAttachment($scope.mailing);\n $uibModalInstance.close();\n });\n } else {\n if (!$scope.loadBee) {\n $scope.mailing.json = null;\n }\n $scope.mailing.put().then(function (result) {\n if ($scope.mailing.filesToShow.length == 0 && $scope.mailing.FK_mailing_attachment_mailing.length > 0) {\n //Eliminamos todos los adjuntos de la comunicacion\n Restangular.all('Mailings/DeleteAllAttachments').remove({ mailingId: $scope.mailing.id }).then(function (result) { });\n\n } else {\n if ($scope.mailing.filesToShow.length > 0) {\n $scope.uploadAttachment($scope.mailing);\n }\n }\n \n toastr.success($filter('translate')('general.edit_success'));\n $uibModalInstance.close();\n });\n }\n };\n\n $scope.save = function () {\n if($scope.loadBee) {\n BeeService.save().then(function (result) {\n $scope.mailing.json = result.json;\n $scope.mailing.content = result.html;\n $scope.saveMailing();\n });\n } else {\n $scope.saveMailing();\n }\n }\n\n $scope.uploadAttachment = function (mailing) {\n $http({\n method: 'post',\n url: (window as any).CONFIG.api_url + 'Mailings/UploadAttachment',\n data: mailing\n }).then(function (results) {\n $scope.mailing.attachments = [];\n })\n }\n\n $scope.openDocumentsModal = function (document_code) {\n if (document_code != null && document_code != \"\") {\n var params = {\n entity_type: $scope.entity_type,\n entity_type_id: $scope.entity_type_id,\n documents: { codes: [document_code] }\n };\n generateDocumentService.documentNew({\n params: params,\n onAccept: function (data) {\n\n // se lo añadimos a los files....\n\n var doc = { name: data[0].document_name }\n $scope.mailing.filesToShow.unshift(doc);\n $scope.mailing.documentsIds.unshift({ document_id: data[0].document_id, document_name: data[0].document_name, document_type: data[0].document_type_code})\n }\n });\n }\n }\n\n $scope.checkDelete = function () {\n modalService.confirm({\n title: $filter('translate')('general.delete'),\n message: $filter('translate')('general.delete_message') + \" \" + $scope.mailing.subject + \"?\",\n onAccept: function () {\n $scope.mailing.remove().then(function () {\n toastr.success($filter('translate')('general.deleted_success'));\n $uibModalInstance.close();\n });\n }\n });\n }; \n\n $scope.showOrNotMailAccounts = function (type) {\n if (type.code == \"EVENTS\") {\n $scope.showMailsAccounts = false;\n } else {\n $scope.showMailsAccounts = true;\n }\n }\n\n $scope.callbackClose = function (mode) {\n $uibModalInstance.dismiss(mode);\n };\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n }]);","import MailingTemplatesModalView from \"./mailingTemplatesModal.html\";\nimport MailingsEditView from \"./mailings-edit.html\";\n\n\nangular.module(\"mailings\")\n\n .controller('MailingsListCtrl', ['entity_type', '$stateParams', '$timeout', '$rootScope', '$scope', 'Restangular', 'gridService', 'modalService', '$filter', '$state', '$uibModal', 'LoginService', '$log',\n function (entity_type, $stateParams, $timeout, $rootScope, $scope, Restangular, gridService, modalService, $filter, $state, $uibModal, LoginService, $log) {\n\n $scope.show_title = (entity_type != \"correspondence\");\n $scope.eventId = null;\n $scope.entity_type = entity_type;\n\n if (entity_type == \"events\") {\n $scope.allowAutomaticMailing = LoginService.permissionExist(\"AUTOMATIC_MAILINGS\");\n $rootScope.title = $scope.event.name + \" - \" + $filter('translate')('mailing.title');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('events.title'), url: \"events.list\" },\n { title: $scope.event.name, url: \"events.edit({ id: \" + $scope.event.id + \" })\" },\n { title: $filter('translate')('mailing.title') }\n ];\n\n } else {\n $scope.allowAutomaticMailing = false;\n }\n\n $scope.selectMailings = [];\n\n // Lo paso a función para recargar las opciones cuando se crea un mailing nuevo\n let loadSelectMailings = function () {\n $log.debug('entramos aquí')\n Restangular.all('Mailings').getList({ entity_type: entity_type, entity_type_id: $stateParams.id }).then(function (mailings) {\n $scope.selectMailings = mailings;\n $scope.selectMailings.push({ id: null, title: \"-Vacio-\" });\n });\n }\n\n loadSelectMailings();\n\n var event = null;\n if (typeof ($stateParams.id) !== 'undefined') {\n $scope.eventId = $stateParams.id;\n if (entity_type == \"events\") {\n Restangular.one('Events', $stateParams.id).get().then(function (results) {\n event = results;\n });\n }\n }\n\n $rootScope.title = $filter('translate')('mailing.title');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('notifications.list') }\n ];\n\n $scope.search = {\n subject: \"\",\n date_from: null,\n date_to: null\n };\n\n $scope.gridOptionMailings = {\n pdfTitle: $filter('translate')('notifications.pdf_title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n paginationPageSizes: [10, 20, 30],\n paginationPageSize: 10,\n enableFiltering: false,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n { name: 'short_title', displayName: $filter('translate')('mailing.short_title'), enableFiltering: true, enableHiding: false, enableColumnMenu: false,width: 120 },\n { name: 'title', displayName: $filter('translate')('mailing.name_title'), enableFiltering: true, enableHiding: false, enableColumnMenu: false },\n { name: 'mailing_icon', displayName: $filter('translate')('menus.icon'), enableFiltering: true, enableHiding: false, enableColumnMenu: false, width: 120, cellTemplate: \"
 
\" },\n { name: 'subject', displayName: $filter('translate')('notifications.subject'), enableFiltering: true, enableHiding: false, enableColumnMenu: false },\n {\n name: 'attachtment', displayName: $filter('translate')('correspondence.attachtment'), enableFiltering: true, enableHiding: true, width: 70,\n cellTemplate: '
0\" class=\"fa fa-paperclip fa-lg\" style=\"color: #1ab394;\">
'\n },\n\n {\n name: ' ', exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('documents_reports.button_duplicate'), action: 'ng-click=\"grid.appScope.duplicate(row.entity.id)\"', cssIconClass: \"fa fa-copy\" },\n { title: $filter('translate')('general.edit'), action: 'ng-click=\"grid.appScope.goToEdit(row.entity)\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('general.delete'), action: 'ng-click=\"grid.appScope.deleteInternalDialog(row.entity.id,row.entity.subject);\"', cssIconClass: \"fa fa-remove\" },\n { title: $filter('translate')('mailing.notification_view'), action: 'ng-click=\"grid.appScope.goToNotificationList(row.entity.id)\"', cssIconClass: \"fa fa-eye\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n options.subject = $scope.search.subject;\n if ($scope.eventId != null) options.entity_type_id = $scope.eventId;\n if (entity_type != null) options.entity_type = entity_type;\n return Restangular.all('Mailings').getList(options);\n }\n\n };\n\n $scope.duplicate = function (id) {\n\n var params = { mailingId: id, eventId: $scope.eventId };\n Restangular.all('Mailings').customPOST({}, \"DuplicateMailing\", params).then(function (result) {\n if (result.id > 0) {\n toastr.success($filter('translate')('mailings.create_success'));\n $scope.gridOptionMailings.loadData();\n loadSelectMailings();\n } else {\n $scope.errorMessage = result.message;\n }\n });\n\n }\n\n $scope.saveMailingId = function () {\n\n $scope.event.put().then(function (result) {\n });\n\n }\n\n $scope.searchNotifications = function () {\n if (angular.isDefined($scope.gridOptionMailings.loadData)) {\n $scope.gridOptionMailings.loadData(false);\n }\n }\n\n $scope.deleteInternalDialog = function (id, name) {\n modalService.confirm({\n title: $filter('translate')('general.delete'),\n message: $filter('translate')('general.delete_message') + \" \" + name + \"?\",\n onAccept: function () {\n Restangular.one('Mailings', id).remove().then(function () {\n toastr.success($filter('translate')('general.delete_success'));\n $scope.gridOptionMailings.loadData(false);\n loadSelectMailings();\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n });\n\n };\n\n $scope.goToNotificationList = function (id) {\n $state.go(\"events.edit.notifications\", { event: $scope.eventId, mailing_id: id });\n }\n\n $scope.addFromTemplate = function () {\n if (event.mail_account_id == null) {\n modalService.message({\n title: \"Error\",\n message: $filter('translate')('mailing.message_not_mailAccount'),\n onAccept: function () { }\n });\n } else {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: MailingTemplatesModalView,\n controller: \"MailingTemplatesModalCtrl\",\n backdrop: 'static',\n keyboard: false,\n resolve: {\n entity_type: function () {\n return $scope.entity_type;\n },\n entity_type_id: function () {\n return $scope.eventId;\n },\n\n }\n });\n\n $modalInstance.result.then(function (results) {\n $scope.gridOptionMailings.loadData(false);\n loadSelectMailings();\n $scope.goToEdit(results);\n });\n }\n }\n \n $scope.goToEdit = function (rowEntity) {\n //if (rowEntity.entity_type == null) {\n // $state.go(\"mailings.edit\", { entityType: null, entityTypeId: rowEntity.entity_type_id, mailingId: null });\n //} else {\n\n if (typeof (rowEntity.id) == 'undefined' && rowEntity.entity_type == \"events\" && event.mail_account_id == null) {\n modalService.message({\n title: \"Error\",\n message: $filter('translate')('mailing.message_not_mailAccount'),\n onAccept: function () { }\n });\n } else {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: MailingsEditView,\n size: \"lg\",\n controller: \"MailingsEditCtrl\",\n resolve: {\n mailingId: function () {\n return rowEntity.id;\n },\n entityType: function () {\n return rowEntity.entity_type;\n },\n entityTypeId: function () {\n return rowEntity.entity_type_id;\n }\n },\n windowClass: 'mailing-modal'\n });\n\n //Retorno de los datos desde el modal.\n $modalInstance.result.then(function (resultModal) {\n $timeout(function () {\n loadSelectMailings();\n $scope.gridOptionMailings.loadData(false);\n }, 1000);\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n });\n }\n\n // }\n\n }\n\n }])\n\n ;","import BreadcrumbView from \"../common/breadcrumb/breadcrumb.html\";\nimport MailingsListView from \"./mailings-list.html\";\n\n\nangular.module(\"mailings\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('mailings', {\n url: \"/mailings\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n })\n .state('mailings.list', {\n url: \"/list\",\n controller: \"MailingsListCtrl\",\n template: MailingsListView,\n resolve: {\n entity_type: [function () { return null; }],\n },\n cache: false,\n data: { pageTitle: 'Comunicaciones' },\n requiredPermission: [\"MAILINGS_READ\"]\n })\n\n ;\n }])\n;","import './mailingsTypes';\nimport './mailingsTypes-list';\nimport './mailingsTypes-edit';","angular.module(\"mailings_types\")\n\n .controller(\"MailingTypesEditCtrl\", ['LoginService', '$scope', '$rootScope', '$state', '$stateParams', 'Restangular', 'modalService','$filter', '$translate', function (LoginService, $scope, $rootScope, $state, $stateParams, Restangular, modalService, $filter, $translate) {\n\n //Comprobamos si tiene permiso escritura\n\n\n $scope.allowWrite = true// LoginService.permissionExist(\"MAILINGS_WRITE\");\n\n $rootScope.title = $filter('translate')('mailings_types.title');\n\n $scope.mailing_type = {};\n\n\n //Gestor de texto \n \n\n if (angular.isUndefined($stateParams.id) || $stateParams.id == \"\") {\n\n $rootScope.breadcrumb = [\n { title: $filter('translate')('mailings_types.title'), url: `mailings_types.list` },\n { title: $filter('translate')('mailings_types.add') },\n\n ];\n } else {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('mailings_types.title'), url: `mailings_types.list` },\n { title: $filter('translate')('mailings_types.edit') },\n ];\n\n Restangular.one('MailingsTypes', $stateParams.id).get().then(function (result) {\n\n $scope.mailing_type = result;\n });\n }\n\n $scope.save = function () {\n\n if (!angular.isUndefined($scope.mailing_type.id)) {\n $scope.mailing_type.put().then(function (result) {\n if (typeof (result.id) != \"undefined\") {\n toastr.success($filter('translate')('mailings_types.add_success'));\n $state.go(\"mailings_types.list\");\n } else {\n $scope.errorMessage = result.message;\n }\n });\n } else {\n Restangular.all('MailingsTypes').post($scope.mailing_type).then(function (result) {\n if (typeof (result.id) != \"undefined\") {\n toastr.success($filter('translate')('mailings_types.add_success'));\n $state.go(\"mailings_types.list\");\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n }\n\n $scope.checkDelete = function () {\n modalService.confirm({\n title: $filter('translate')('mailings_types.delete'),\n message: $filter('translate')('mailings_types.delete_message') + \" \" + $scope.mailing_type.name + \"?\",\n onAccept: function () {\n $scope.mailing_type.remove().then(function () {\n toastr.success($filter('translate')('mailings_types.remove_success'));\n $state.go(\"mailings_types.list\");\n });\n }\n });\n };\n\n\n\n }])\n\n ;\n\n","angular.module(\"mailings_types\")\n\n .controller(\"MailingTypesListCtrl\", ['LoginService', '$rootScope', '$scope','$q', 'Restangular', 'gridService', 'treeService', 'modalService', '$filter', '$state', '$log',\n function (LoginService, $rootScope, $scope, $q, Restangular, gridService, treeService, modalService, $filter, $state, $log) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = true // LoginService.permissionExist(\"MAILINGS_WRITE\");\n\n $rootScope.title = $filter('translate')('mailings_types.title');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('mailings_types.title') }\n ];\n\n $scope.gridOptions = {\n pdfTitle: $filter('translate')('mailings_types.title'),\n exporterMenuCsv: true,\n gridMenuShowHideColumns: false,\n paginationPageSizes: [15, 30, 45],\n paginationPageSize: 15,\n // rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n\n columnDefs: [ \n { name: 'name', displayName: $filter('translate')('general.name'), enableFiltering: true, enableHiding: false },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('general.edit'), action: 'ui-sref=\"mailings_types.edit({id:row.entity.id})\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('general.delete'), action: 'ng-click=\"grid.appScope.deleteDialog(row.entity.id,row.entity.name);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n\n return Restangular.all('MailingsTypesGrid').getList(options);\n\n }\n\n };\n\n $scope.goToEdit = function (rowEntity) {\n $state.go(\"mailings_types.edit\", {id: rowEntity.id });\n }\n\n $scope.deleteDialog = function (id, name) {\n $scope.id = id;\n $scope.name = name;\n modalService.confirm({\n title: $filter('translate')('mailings_types.delete'),\n message: $filter('translate')('mailings_types.delete_message') + \" \" + $scope.name + \"?\",\n onAccept: function () {\n Restangular.one('MailingsTypes', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('mailings_types.remove_success'));\n $scope.gridOptions.data =\n $scope.gridOptions.data.filter(function (el) { return el.id != $scope.id; });\n }, function (response) {\n $log.error(\"Error with status code\", response.status);\n });\n }\n });\n\n };\n\n }])\n\n ;","import BreadcrumbView from \"../common/breadcrumb/breadcrumb.html\";\nimport MailingsTypesListView from \"./mailingsTypes-list.html\";\nimport MailingsTypesEditView from \"./mailingsTypes-edit.html\";\n\n\nangular.module(\"mailings_types\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('mailings_types', {\n url: \"/mailings_types\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n })\n\n .state('mailings_types.list', {\n url: \"/list\",\n controller: \"MailingTypesListCtrl\",\n template: MailingsTypesListView,\n // requiredPermission: [\"MAILINGS_READ\"]\n })\n .state('mailings_types.edit', {\n url: \"/edit/:id\",\n controller: \"MailingTypesEditCtrl\",\n template: MailingsTypesEditView,\n // requiredPermission: [\"MAILINGS_READ\"]\n })\n }])\n ;","import './materials';\nimport './materials-list';\nimport './materials-edit';\nimport './materials_types/materials_types';\nimport './materials_types/materials_types-list';\nimport './materials_types/materials_types-edit'; ","import AddQuantityModalView from \"./addQuantityModal.html\";\n\n\nangular.module(\"materials\")\n\n .controller(\"MaterialsEditCtrl\", ['treeService', 'LoginService', '$scope', '$rootScope', '$state', '$timeout', '$sce', '$stateParams', 'Restangular', 'gridService', '$filter', '$translate', 'modalService', '$uibModal', '$log',\n function (treeService, LoginService, $scope, $rootScope, $state, $timeout, $sce, $stateParams, Restangular, gridService, $filter, $translate, modalService, $uibModal, $log) {\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"MATERIAL_WRITE\");\n\n $scope.stateParamsId = $stateParams.id;\n $scope.buttonCancel = true;\n $scope.changesNotSaved = false;\n $scope.errorUnits = false;\n $scope.showReturnAutomatic = false;\n\n $scope.gridWarehouse = { warehouse_id: 1, entity_type: 'materials' };\n $scope.loadWharesouseRows = function () {\n Restangular.all('Warehouses').getList({ entity_type: \"materials\", entity_id: $stateParams.id }).then(function (warehouses) {\n $scope.selectWarehouses = warehouses;\n $scope.gridWarehouse.warehouse_id = $scope.selectWarehouses[0].id;\n });\n }\n\n $scope.loadWharesouseRows();\n\n var trusted = {};\n $scope.getPopoverContent = function (html) {\n return trusted[html] || (trusted[html] = $sce.trustAsHtml(html));\n };\n\n\n Restangular.all('Providers').getList().then(function (providers) {\n $scope.selectProviders = providers;\n });\n\n $scope.addMaterialFromEvent = function (options) {\n $scope.stateParamsId = \"\";\n $scope.is_external = options.isExternal;\n $scope.callbackClose = options.callbackClose;\n $scope.comeFromEvents = true;\n $scope.buttonCancel = false;\n $scope.configure();\n };\n\n $scope.configure = function () {\n\n $rootScope.title = $filter('translate')('materials.title');\n $scope.material = {\n is_external: $stateParams.is_external === \"true\"\n };\n if (angular.isDefined($scope.is_external)) $scope.material.is_external = $scope.is_external;\n if (angular.isUndefined($stateParams.id) || $stateParams.id == \"\" || $scope.stateParamsId == \"\") {\n\n $rootScope.breadcrumb = [\n { title: $filter('translate')('materials.title'), url: \"materials.list\" },\n { title: $filter('translate')('materials.title_add') },\n ];\n\n } else {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('materials.title'), url: \"materials.list\" },\n { title: $filter('translate')('materials.title_edit') },\n ];\n\n Restangular.one('Materials', $stateParams.id).get().then(function (result) {\n $scope.material = result;\n $scope.warehouse_last = result.warehouse_id;\n if (!$scope.material.is_returnable) {\n $scope.showReturnAutomatic = false;\n } else {\n $scope.showReturnAutomatic = true;\n }\n });\n\n }\n }\n\n if ($state.is(\"materials.edit\")) $scope.configure();\n\n $rootScope.$on(\"ReloadDataSelectTypeMaterials\", function () {\n $scope.reloadDataSelectTypeMaterials();\n });\n\n $scope.reloadDataSelectTypeMaterials = function () {\n Restangular.all('MaterialsTypes').getList().then(function (types) {\n var resultados = treeService.typesMaterialsTree(types, null, []);\n $scope.selectTypes = resultados;\n });\n }\n $scope.reloadDataSelectTypeMaterials();\n\n $scope.loadGrid = function () {\n if (angular.isDefined($scope.gridOptionsMovements)) {\n $scope.gridOptionsMovements.loadData(false);\n } else {\n\n $scope.gridOptionsMovements = {\n pdfTitle: $filter('translate')('materials.pdf_title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n //gridMenuShowHideColumns: false,\n enableSorting: true,\n paginationPageSizes: [20, 40, 60],\n paginationPageSize: 20,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n { name: 'created_at', displayName: $filter('translate')('movement.date'), type: 'date', cellFilter: 'toUniversalDateCreatedAtHack | date:\\'dd/MM/yyyy HH:mm\\'' },\n { name: 'event_name', displayName: $filter('translate')('material.event'), enableFiltering: true },\n {\n name: 'direction', field: 'direction', displayName: $filter('translate')('movement.direction'), enableHiding: false,\n cellTemplate: '
Saliente
Entrante
'\n },\n { name: 'warehouse_name', displayName: $filter('translate')('material.warehouse'), enableFiltering: true },\n { name: 'quantity', displayName: $filter('translate')('movement.movement'), enableFiltering: true },\n { name: 'final_quantity', displayName: $filter('translate')('movement.final_quantity'), enableFiltering: true },\n {\n name: 'notes', field: 'notes', displayName: $filter('translate')('general.notes'), enableHiding: false, width: 300,\n cellTemplate: '',\n },\n\n ],\n getData: function (options) {\n options.warehouse_id = $scope.gridWarehouse.warehouse_id;\n options.entity_type = $scope.gridWarehouse.entity_type;\n options.entity_id = $stateParams.id;\n\n return Restangular.all('WarehousesMovements').getList(options);\n }\n };\n }\n }\n\n $scope.loadGrid();\n\n $scope.changeTab = function (warehouse_id) {\n $scope.gridWarehouse.warehouse_id = warehouse_id;\n $scope.loadGrid();\n }\n\n\n $scope.saveMaterial = function () {\n $log.debug($scope.material);\n if (angular.isDefined($scope.material.id)) {\n $scope.material.put().then(function (result) {\n if (angular.isDefined(result.id)) {\n if (angular.isUndefined($scope.comeFromEvents)) {\n toastr.success($filter('translate')('materials.edit_success'));\n } else {\n $scope.callbackClose('cancel');\n }\n }\n });\n } else {\n Restangular.all('Materials').post($scope.material).then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('gifts.save_success'));\n $scope.material = result;\n $stateParams.id = result.id;\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n }\n\n $scope.checkDelete = function () {\n modalService.confirm({\n title: $filter('translate')('materials.button_delete'),\n message: $filter('translate')('materials.delete_message') + \" \" + $scope.material.name + \"?\",\n onAccept: function () {\n $scope.material.remove().then(function () {\n toastr.success($filter('translate')('materials.delete_success'));\n $state.go(\"materials.list\");\n });\n }\n });\n };\n\n $scope.automaticMovement = function () {\n Restangular.all('Materials/AutomaticMovement').post().then(function () {\n });\n }\n\n\n $scope.addQuantities = function () {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: AddQuantityModalView,\n size: \"sm\",\n controller: \"AddQuantitiesMaterialsModalCrl\",\n resolve: {\n materialId: function () { return $stateParams.id }\n }\n });\n\n // Response del modal\n $modalInstance.result.then(function (movement) {\n Restangular.all('WarehousesMovements').post(movement).then(function (res) {\n toastr.success($filter('translate')('materials.edit_success'));\n Restangular.one('Materials', $stateParams.id).get().then(function (result) {\n $scope.material = result;\n $timeout(function () {\n $scope.loadWharesouseRows();\n $scope.loadGrid();\n }, 200);\n });\n });\n }, function () { });\n }\n\n\n $scope.changeCheckReturnable = function (item) {\n if (item) {\n $scope.showReturnAutomatic = true;\n } else {\n $scope.showReturnAutomatic = false;\n $scope.material.is_returnable_automatic = false;\n }\n }\n\n }])\n\n .controller(\"AddQuantitiesMaterialsModalCrl\", ['$scope', '$uibModalInstance', 'Restangular', 'modalService', '$filter', '$http', '$stateParams', '$q', 'materialId', function ($scope, $uibModalInstance, Restangular, modalService, $filter, $http, $stateParams, $q, materialId) {\n\n $scope.movement = { wharehouse_id: null, quantity: 0 };\n $scope.selectWarehouses = [];\n Restangular.all('Warehouses').getList().then(function (warehouses) {\n $scope.selectWarehouses = warehouses;\n });\n\n $scope.onSave = function () {\n\n Restangular.all('Warehouses').customGET(\"GetTotalStockInWarehouse\", { warehouse_id: $scope.movement.warehouse_id, product_id: materialId, type: \"materials\" }).then(function (res) {\n $scope.totalStock = res;\n //Comprobamos con los numeros negativos que no pongan menos cantidad de la que hay\n if ($scope.movement.quantity < 0) {\n if (parseInt($scope.movement.quantity) < $scope.totalStock * -1) {\n $scope.errorUnits = true;\n }\n else\n $scope.errorUnits = false;\n }\n\n if (!$scope.errorUnits) {\n let movement = {\n material_id: materialId,\n warehouse_id: $scope.movement.warehouse_id,\n direction: $scope.movement.quantity > 0 ? 'IN' : 'OUT',\n quantity: $scope.movement.quantity,\n notes: $scope.movement.notes\n }\n $uibModalInstance.close(movement);\n }\n });\n }\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n\n }])\n\n\n ;\n\n","import AddQuantityModalView from \"./addQuantityModal.html\";\n\n\nangular.module(\"materials\")\n\n .controller(\"MaterialsListCtrl\", ['LoginService', '$rootScope', '$scope', '$http', '$interval', '$q', 'i18nService', 'Restangular', 'gridService', '$filter', '$translate', 'modalService', '$uibModal','$state', 'datasetsService',\n function (LoginService, $rootScope, $scope, $http, $interval, $q, i18nService, Restangular, gridService, $filter, $translate, modalService, $uibModal,$state, datasetsService) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"MATERIAL_WRITE\");\n\n $rootScope.title = $filter('translate')('materials.title');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('materials.title') }\n ];\n\n $scope.material = {\n is_external: false\n };\n\n //Al listar, devolvemos todos los materiales que ya se han utilizado y ha finalizado el evento, tiene que estar activo el check retornar automaticamente\n Restangular.all('Materials/AutomaticMovement').post().then(function () {\n });\n\n $scope.gridOptionsInternalMaterials = {\n pdfTitle: $filter('translate')('materials.pdf_title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n //gridMenuShowHideColumns: false,\n enableSorting: true,\n paginationPageSizes: [20, 40, 60],\n paginationPageSize: 20,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n { name: 'FK_materials_providers.name', displayName: $filter('translate')('materials.provider_name'), enableFiltering: true },\n { name: 'type', field: 'FK_materials_materials_types.name', displayName: $filter('translate')('materials.material_type'), enableFiltering: true },\n { name: 'name', displayName: $filter('translate')('materials.name'), enableFiltering: true, enableHiding: false },\n { name: 'description', displayName: $filter('translate')('materials.description'), enableFiltering: true },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('materials.button_edit'), action: 'ui-sref=\"materials.edit({id:row.entity.id , is_external:false})\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('materials.button_delete'), action: 'ng-click=\"grid.appScope.deleteInternalDialog(row.entity.id,row.entity.name);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n options.is_external = false;\n return Restangular.all('Materials').getList(options);\n }\n };\n\n $scope.goToEdit = function (rowEntity) {\n $state.go(\"materials.edit\", { id: rowEntity.id, is_external: $scope.material.is_external });\n }\n\n\n $scope.deleteInternalDialog = function (id, name) {\n $scope.id = id;\n $scope.name = name;\n modalService.confirm({\n title: $filter('translate')('materials.button_delete'),\n message: $filter('translate')('materials.delete_message') + \" \" + $scope.name + \"?\",\n onAccept: function () {\n Restangular.one('Materials', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('materials.delete_success'));\n $scope.gridOptionsInternalMaterials.gridApi.core.raise.itemDeleted($scope);\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n });\n\n };\n\n $scope.gridOptionsExternalMaterials = {\n pdfTitle: $filter('translate')('materials.pdf_title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n //gridMenuShowHideColumns: false,\n enableSorting: true,\n paginationPageSizes: [20, 40, 60],\n paginationPageSize: 20,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n { name: 'FK_materials_providers.name', displayName: $filter('translate')('materials.provider_name'), enableFiltering: true },\n { name: 'type', field: 'FK_materials_materials_types.name', displayName: $filter('translate')('materials.material_type'), enableFiltering: true },\n { name: 'name', displayName: $filter('translate')('materials.name'), enableFiltering: true, enableHiding: false },\n { name: 'description', displayName: $filter('translate')('materials.description'), enableFiltering: true },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('materials.button_edit'), action: 'ui-sref=\"materials.edit({id:row.entity.id , is_external:true})\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('materials.button_delete'), action: 'ng-click=\"grid.appScope.deleteExternalDialog(row.entity.id,row.entity.name);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n options.is_external = true;\n return Restangular.all('Materials').getList(options);\n }\n };\n\n\n $scope.deleteExternalDialog = function (id, name) {\n $scope.id = id;\n $scope.name = name;\n modalService.confirm({\n title: $filter('translate')('materials.button_delete'),\n message: $filter('translate')('materials.delete_message') + \" \" + $scope.name + \"?\",\n onAccept: function () {\n Restangular.one('Materials', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('materials.delete_success'));\n $scope.gridOptionsExternalMaterials.gridApi.core.raise.itemDeleted($scope);\n\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n });\n\n };\n $scope.export = function () {\n var options = {\n filters: {\n IS_EXTERNAL: $scope.material.is_external\n }\n };\n\n datasetsService.exportByType(\"materials\", options);\n };\n\n $scope.gridOptionsMaterialsReturn = {\n pdfTitle: $filter('translate')('materials.pdf_title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n //gridMenuShowHideColumns: false,\n enableSorting: true,\n paginationPageSizes: [20, 40, 60],\n paginationPageSize: 20,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n { name: 'type', field: 'FK_events_materials_materials.FK_materials_materials_types.FK_materials_types_tl_materials_types[0].name', displayName: $filter('translate')('materials.material_type'), enableFiltering: true },\n { name: 'name', field: 'FK_events_materials_materials.name', displayName: $filter('translate')('materials.name'), enableFiltering: true, enableHiding: false },\n { name: 'description', field: 'FK_events_materials_materials.description', displayName: $filter('translate')('materials.description'), enableFiltering: true },\n { name: 'quantity', displayName: $filter('translate')('materials.quantity'), enableFiltering: true },\n { name: 'quantity_returned', displayName: $filter('translate')('materials.quantity_returned'), enableFiltering: true },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('general.button_return'), action: 'ng-click=\"grid.appScope.returnMaterial({id:row.entity.id})\"', cssIconClass: \"fa fa-reply\" },\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n return Restangular.all('EventsMaterials/GetEventMaterialReturn').getList({});\n }\n };\n\n $scope.returnMaterial = function (eventMaterialId) {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: AddQuantityModalView,\n size: \"sm\",\n controller: \"AddQuantitiesMaterialsReturnModalCtrl\",\n resolve: {\n eventMaterialId: function () { return eventMaterialId.id }\n }\n });\n\n // Response del modal\n $modalInstance.result.then(function (movement) {\n toastr.success($filter('translate')('materials.edit_success'));\n $scope.gridOptionsMaterialsReturn.loadData(false);\n }, function () { });\n }\n }])\n\n .controller(\"AddQuantitiesMaterialsReturnModalCtrl\", ['$scope', '$uibModalInstance', 'Restangular', 'modalService', '$filter', '$http', '$q', 'eventMaterialId', function ($scope, $uibModalInstance, Restangular, modalService, $filter, $http, $q, eventMaterialId) {\n $scope.isMaterialReturn = true;\n var event_material_origin;\n Restangular.one('EventsMaterials', eventMaterialId).get().then(function (result) {\n event_material_origin = angular.copy(result);\n $scope.movement = result;\n if ($scope.movement.quantity_returned != null && $scope.movement.quantity_returned > 0) {\n $scope.movement.quantity = $scope.movement.quantity - $scope.movement.quantity_returned;\n event_material_origin.quantity = $scope.movement.quantity;\n }\n \n });\n\n $scope.selectWarehouses = [];\n Restangular.all('Warehouses').getList().then(function (warehouses) {\n $scope.selectWarehouses = warehouses;\n });\n\n $scope.onSave = function () {\n\n if ($scope.movement.quantity <= event_material_origin.quantity) {\n Restangular.all('Warehouses').customGET(\"GetTotalStockInWarehouse\", { warehouse_id: $scope.movement.warehouse_id, product_id: $scope.movement.material_id, type: \"materials\" }).then(function (res) {\n $scope.totalStock = res;\n //Comprobamos con los numeros negativos que no pongan menos cantidad de la que hay\n if ($scope.movement.quantity < 0) {\n if (parseInt($scope.movement.quantity) < $scope.totalStock * -1) {\n $scope.errorUnits = true;\n }\n else\n $scope.errorUnits = false;\n }\n\n $scope.movement.put().then(function (result) {\n $uibModalInstance.close(result);\n })\n });\n }\n }\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n\n }])\n;","import BreadcrumbView from \"../common/breadcrumb/breadcrumb.html\";\nimport MaterialsListView from \"./materials-list.html\";\nimport MaterialsEditView from \"./materials-edit.html\";\n\n\nangular.module(\"materials\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('materials', {\n url: \"/materials\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n })\n\n .state('materials.list', {\n url: \"/list\",\n controller: \"MaterialsListCtrl\",\n template: MaterialsListView,\n cache: false,\n data: { pageTitle: 'Materiales' },\n requiredPermission: [\"MATERIAL_READ\"]\n }) \n .state('materials.edit', {\n url: \"/edit/:id&:is_external\",\n controller: \"MaterialsEditCtrl\",\n cache: false,\n template: MaterialsEditView,\n data: { pageTitle: 'Materiales' },\n requiredPermission: [\"MATERIAL_READ\"]\n })\n }])\n;","angular.module(\"materials_types\")\n\n .controller(\"MaterialsTypesEditCtrl\", ['$uibModalInstance','LoginService', '$scope', '$rootScope', '$state', '$stateParams', 'Restangular', 'gridService', '$filter', '$translate','modalService', '$uibModal','id','is_group', '$log',\n function ($uibModalInstance, LoginService, $scope, $rootScope, $state, $stateParams, Restangular, gridService, $filter, $translate, modalService, $uibModal, id, is_group, $log) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"MATERIAL_TYPES_WRITE\");\n\n $rootScope.title = $filter('translate')('materials_types.title');\n if (is_group == 1) {\n $scope.material_type = { is_group: true, material_type_id: null };\n } else {\n $scope.material_type = { is_group: false, material_type_id: null };\n }\n\n /* if (angular.isUndefined($stateParams.id) || $stateParams.id == \"\") {\n \n $rootScope.breadcrumb = [\n { title: $filter('translate')('materials_types.title'), url: \"materials_types.list\" },\n { title: $filter('translate')('materials_types.title_add')},\n ];\n \n } else {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('materials_types.title'), url: \"materials_types.list\" },\n { title: $filter('translate')('materials_types.title_edit')},\n ];\n\n Restangular.one('MaterialsTypes', $stateParams.id).get().then(function (result) {\n $scope.material_type = result;\n });\n } */ \n \n if (angular.isDefined(id) && id != null && id != \"\") {\n Restangular.one('MaterialsTypes', id).get().then(function (result) {\n $scope.material_type = result;\n });\n }\n if ($scope.material_type.is_group == false) {\n let params = {\n is_group: true\n }\n Restangular.all('MaterialsTypes').getList(params).then(function (results) {\n $scope.selectMaterialsTypes = results;\n var withoutGroup = {\n material_type_id: 0,\n name: $filter('translate')('events.tasks.without_group'),\n is_group: true\n };\n $scope.selectMaterialsTypes.unshift(withoutGroup);\n if (angular.isUndefined($scope.material_type.material_type_id) || $scope.material_type.material_type_id == null) $scope.material_type.material_type_id = $scope.selectMaterialsTypes[0].id;\n });\n }\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n $scope.saveMaterialType = function () {\n $log.debug($scope.material_type);\n if ($scope.material_type.material_type_id == 0) $scope.eventTask.material_type_id = null;\n if (angular.isDefined($scope.material_type.id)) {\n $scope.material_type.put().then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('materials_types.save_success'));\n //$state.go(\"materials_types.list\");\n $uibModalInstance.close();\n } else {\n $scope.errorMessage = result.message;\n $uibModalInstance.close(\"Error\");\n }\n });\n } else {\n\n Restangular.all('MaterialsTypes').post($scope.material_type).then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('materials_types.edit_success'));\n //$state.go(\"materials_types.list\");\n $uibModalInstance.close();\n } else {\n $scope.errorMessage = result.message;\n $uibModalInstance.close(\"Error\");\n }\n });\n }\n }\n\n $scope.checkDelete = function () {\n modalService.confirm({\n title: $filter('translate')('materials_types.button_delete'),\n message: $filter('translate')('materials_types.delete_message') + \" \" + $scope.material_type.name + \"?\",\n onAccept: function () {\n $scope.material_type.remove().then(function () {\n toastr.success($filter('translate')('materials_types.deleted_success'));\n $state.go(\"materials_types.list\");\n $uibModalInstance.close();\n });\n }\n });\n }; \n\n}])\n\n;\n\n","import MaterialsTypesEditView from \"./materials_types-edit.html\";\n\n\nangular.module(\"materials_types\")\n\n .controller(\"MaterialsTypesListCtrl\", ['$state','treeService', '$q','LoginService', '$rootScope', '$scope', '$http', '$interval', 'i18nService', 'Restangular', 'gridService', 'modalService', '$uibModal', '$filter', '$translate',\n function ($state, treeService, $q, LoginService, $rootScope, $scope, $http, $interval, i18nService, Restangular, gridService, modalService, $uibModal, $filter, $translate) {\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"MATERIAL_TYPES_WRITE\");\n\n $rootScope.title = $filter('translate')('materials_types.title');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('materials_types.title') }\n ];\n\n $scope.gridOptionsMaterialsTypes = {\n pdfTitle: $filter('translate')('materials_types.pdf_title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n expandAllRows: true,\n gridMenuShowHideColumns: false,\n enableSorting: true, \n paginationPageSizes: [60, 80, 100],\n paginationPageSize: 60,\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n { name: 'name', displayName: $filter('translate')('materials_types.name'), enableFiltering: true, enableHiding: false },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('materials_types.button_edit'), action: 'ng-click=\"grid.appScope.addTypeMaterial(row.entity.id,row.entity.is_group);\" ng-if=\"grid.appScope.allowWrite && row.entity.id != null\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('materials_types.button_delete'), action: 'ng-click=\"grid.appScope.deleteDialog(row.entity.id,row.entity.name);\" ng-if=\"grid.appScope.allowWrite && row.entity.id != null\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) { \n var deferred = $q.defer();\n\n Restangular.all('MaterialsTypes').getList(options).then(function (result) {\n \n result.unshift({\n id: null,\n name: $filter('translate')('events.tasks.without_group'),\n material_type_id: null,\n is_group: true\n });\n var treeMaterialsTypes = [];\n var data = treeService.typesMaterialsTree(result, null, treeMaterialsTypes);\n \n deferred.resolve(data);\n });\n return deferred.promise;\n }\n };\n\n\n $scope.deleteDialog = function (id, name) {\n $scope.id = id;\n $scope.name = name;\n modalService.confirm({\n title: $filter('translate')('materials_types.button_delete'),\n message: $filter('translate')('materials_types.delete_message') + \" \" + $scope.name + \"?\",\n onAccept: function () {\n Restangular.one('MaterialsTypes', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('materials_types.deleted_success'));\n $scope.gridOptionsMaterialsTypes.gridApi.core.raise.itemDeleted($scope);\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n });\n\n };\n\n $scope.addTypeMaterial = function (id, is_group) {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: MaterialsTypesEditView,\n controller: \"MaterialsTypesEditCtrl\",\n size: 'lg',\n resolve: {\n id: function () {\n return id;\n },\n is_group: function () {\n return is_group;\n }\n }\n\n });\n\n //Retorno de los datos desde el modal.\n $modalInstance.result.then(function (resultModal) {\n\n if ($state.current.name == 'materials.edit') {\n $rootScope.$emit(\"ReloadDataSelectTypeMaterials\", {}); //LLamamos para que recarge los datos del combo.\n } else {\n $scope.gridOptionsMaterialsTypes.loadData();\n }\n \n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n // $scope.identity = {};\n });\n }\n \n }])\n\n;","import BreadcrumbView from \"../../common/breadcrumb/breadcrumb.html\";\nimport MaterialsTypesListView from \"./materials_types-list.html\";\nimport MaterialsTypesEditView from \"./materials_types-edit.html\";\n\n\nangular.module(\"materials_types\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('materials_types', {\n url: \"/materials_types\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n })\n\n .state('materials_types.list', {\n url: \"/list\",\n controller: \"MaterialsTypesListCtrl\",\n template: MaterialsTypesListView,\n data: { pageTitle: 'Tipos de Materiales' },\n requiredPermission: [\"MATERIAL_TYPES_READ\"]\n }) \n .state('materials_types.edit', {\n url: \"/edit/:id\",\n controller: \"MaterialsTypesEditCtrl\",\n template: MaterialsTypesEditView,\n data: { pageTitle: 'Tipos de Materiales' },\n requiredPermission: [\"MATERIAL_TYPES_READ\"]\n })\n }])\n;","import './menus';\nimport './menus-list';\nimport './menus-edit';\nimport './menus_items-edit'; ","angular.module(\"menus\")\n\n .controller(\"MenusEditCtrl\", ['$scope', '$rootScope', '$controller', '$state', '$q', '$stateParams', 'Restangular', '$uibModal', 'modalService', '$compile', 'gridService', 'uiGridTreeViewConstants', 'treeService', 'LoginService', '$filter', '$log',\n function ($scope, $rootScope, $controller, $state, $q, $stateParams, Restangular, $uibModal, modalService, $compile, gridService, uiGridTreeViewConstants, treeService, LoginService, $filter, $log) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"MENU_WRITE\");\n\n $rootScope.title = $filter('translate')('menus.title');\n $scope.editCode = true;\n $scope.menu = {};\n\n if (angular.isUndefined($stateParams.id) || $stateParams.id == \"\") {\n\n $rootScope.breadcrumb = [\n { title: $filter('translate')('menus.title'), url: \"menus.list\" },\n { title: $filter('translate')('menus.add') }\n ];\n }\n else {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('menus.title'), url: \"menus.list\" },\n { title: $filter('translate')('menus.edit') }\n ];\n Restangular.one('Menus', $stateParams.id).get().then(function (menu) {\n $scope.menu = menu;\n $scope.editCode = LoginService.permissionExist(\"P_MODIFY_CODE_MENU\");\n });\n }\n\n\n $scope.gridOptions = {\n pdfTitle: $filter('translate')('menus.title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n enableSorting: true,\n showTreeExpandNoChildren: true,\n paginationPageSizes: [100, 500, 1000],\n paginationPageSize: 500,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, exporterSuppressExport: true },\n { name: 'name', displayName: $filter('translate')('menus.name'), enableFiltering: true, enableHiding: false },\n { name: 'icon', displayName: $filter('translate')('menus.icon'), enableFiltering: true },\n { name: 'ui_sref', displayName: 'ui_sref', enableFiltering: true },\n { name: 'href', displayName: 'href', enableFiltering: true },\n { name: 'ng_click', displayName: 'ng_click', enableFiltering: true },\n { name: 'permissions_code', field: 'FK_menus_items_permissions.code', displayName: 'Permiso', enableFiltering: true },\n { name: 'position', visible: false, displayName: $filter('translate')('menus.position') },\n {\n name: 'visible', enableFiltering: true, filter: gridService.yesNoFilter('visible'),\n displayName: $filter('translate')('menus.visible'), cellTemplate: gridService.yesNoTemplate('visible')\n },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('menus.button_edit'), action: 'ui-sref=\"menus.menu_item-edit({menu_id:row.entity.menu_id,id:row.entity.id})\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('menus.button_delete'), action: 'ng-click=\"grid.appScope.BorrarDialog(row.entity.id,row.entity.name);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n options.menu_id = $stateParams.id;\n var deferred = $q.defer();\n Restangular.all('MenusItems').getList(options).then(function (menusItems) {\n var treeMenusItems = [];\n var data = treeService.menuTree(menusItems, null, treeMenusItems);\n data.totalRows = menusItems.totalRows;\n\n deferred.resolve(data);\n });\n\n return deferred.promise;\n }\n };\n\n\n $scope.goToEdit = function (rowEntity) {\n $state.go(\"menus.menu_item-edit\", { menu_id: rowEntity.menu_id, id: rowEntity.id });\n }\n\n\n $scope.saveMenu = function () {\n\n $log.debug($scope.menu);\n\n if (angular.isDefined($scope.menu.id)) {\n $scope.menu.put().then(function (result) {\n if (typeof (result.id) != \"undefined\") {\n $state.go(\"menus.list\");\n toastr.success($filter('translate')('menus.edit_success'));\n }\n });\n } else {\n Restangular.all('menus').post($scope.menu).then(function (result) {\n if (typeof (result.id) != \"undefined\") {\n toastr.success($filter('translate')('menus.create_success'));\n $state.go(\"menus.edit\", { id: result.id });\n }\n });\n }\n }\n\n $scope.checkDelete = function () {\n modalService.confirm({\n title: $filter('translate')('menus.button_delete'),\n message: $filter('translate')('menus.delete_message') + \" \" + $scope.menu.name + \"?\",\n onAccept: function () {\n $scope.menu.remove().then(function () {\n $state.go(\"menus.list\");\n });\n }\n });\n };\n\n $scope.BorrarDialog = function (id, name) {\n $scope.id = id;\n $scope.name = name;\n modalService.confirm({\n title: $filter('translate')('menus.button_delete'),\n message: $filter('translate')('menus.delete_option_message') + \" \" + $scope.name + \" del menú?\",\n onAccept: function () {\n Restangular.one('MenusItems', $scope.id).remove().then(function () {\n $scope.gridOptions.loadData();\n });\n }\n });\n\n };\n\n }]);","angular.module(\"menus\")\n\n .controller(\"MenusListCtrl\", ['LoginService', '$rootScope', '$scope', '$http', '$interval', '$q', 'Restangular', 'gridService', 'modalService', '$filter', '$state', '$log',\n function (LoginService, $rootScope, $scope, $http, $interval, $q, Restangular, gridService, modalService, $filter, $state, $log) {\n \n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"MENU_WRITE\");\n\n $rootScope.title = $filter('translate')('menus.title');\n $rootScope.breadcrumb = [\n { title: \"Lista\" }\n ];\n\n\n $scope.gridOptions = {\n pdfTitle: $filter('translate')('menus.title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n rowTemplate: '
',\n paginationPageSizes: [5, 10, 25],\n paginationPageSize: 5,\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, exporterSuppressExport: true },\n { name: 'name', displayName: $filter('translate')('menus.name'), enableFiltering: true, enableHiding: false },\n { name: 'code', displayName: $filter('translate')('menus.code'), enableFiltering: true },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('menus.edit'), action: 'ui-sref=\"menus.edit({id:row.entity.id})\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('menus.delete'), action: 'ng-click=\"grid.appScope.BorrarDialog(row.entity.id,row.entity.name);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n }, \n ],\n getData: function (options) {\n return Restangular.all('Menus').getList(options);\n }\n\n };\n\n $scope.goToEdit = function (rowEntity) {\n $state.go(\"menus.edit\", { id: rowEntity.id });\n }\n\n $scope.BorrarDialog = function (id, name) {\n $scope.id = id;\n $scope.name = name;\n modalService.confirm({\n title: $filter('translate')('menus.delete'),\n message: $filter('translate')('menus.delete_message')+\" \" + $scope.name + \"?\",\n onAccept: function () {\n Restangular.one('Menus', $scope.id).remove().then(function () { \n $scope.gridOptions.data =\n $scope.gridOptions.data.filter(function (el) { return el.id != $scope.id; });\n }, function (response) {\n $log.error(\"Error with status code\", response.status);\n alert(\"Error al borrar\")\n });\n }\n });\n\n };\n \n }])\n\n;","import BreadcrumbView from \"../common/breadcrumb/breadcrumb.html\";\nimport MenusListView from \"./menus-list.html\";\nimport MenusEditView from \"./menus-edit.html\";\nimport MenusItemsEditView from \"./menus_items-edit.html\";\n\n\nangular.module(\"menus\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('menus', {\n url: \"/menus\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n })\n\n .state('menus.list', {\n url: \"/list\",\n controller: \"MenusListCtrl\",\n template: MenusListView,\n requiredPermission: [\"MENU_READ\"]\n }) \n .state('menus.edit', {\n url: \"/edit/:id\",\n controller: \"MenusEditCtrl\",\n template: MenusEditView,\n requiredPermission: [\"MENU_READ\"]\n })\n .state('menus.menu_item-edit', {\n url: \"/menu_item/edit/:menu_id/:id\",\n controller: \"MenusItemsEditCtrl\",\n template: MenusItemsEditView,\n requiredPermission: [\"MENU_READ\"]\n })\n }])\n;","angular.module(\"menus\")\n\n .controller(\"MenusItemsEditCtrl\", ['LoginService', '$scope', '$rootScope', '$controller', '$state', '$stateParams', 'Restangular', '$uibModal', 'modalService', '$compile', 'gridService', '$filter', function (LoginService, $scope, $rootScope, $controller, $state, $stateParams, Restangular, $uibModal, modalService, $compile, gridService, $filter) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"MENU_WRITE\");\n\n $rootScope.title = $filter('translate')('menus.menu_options');\n $scope.menu_item = {\n FK_menus_items_permissions: []\n };\n $scope.menu_id = $stateParams.menu_id;\n\n $scope.selectParentMenu = {};\n\n $rootScope.breadcrumb = [\n { title: $filter('translate')('menus.menu_list'), url: \"menus.list\" },\n { title: $filter('translate')('menus.title'), url: \"menus.edit({ id: \" + $stateParams.menu_id + \" })\" },\n ];\n\n if (angular.isDefined($stateParams.id) && $stateParams.id != \"\") {\n Restangular.one('MenusItems', $stateParams.id).get().then(function (results) {\n $scope.menu_item = results;\n\n });\n }\n\n Restangular.all('Permissions').getList().then(function (results) {\n $scope.selectPermissions = results;\n var permissionNull = {\n id: null,\n name: $filter('translate')('menus.no_permission')\n }\n $scope.selectPermissions.unshift(permissionNull);\n });\n\n var options: any = {}\n options.menu_id = $stateParams.menu_id;\n\n Restangular.all('MenusItems/GetSelectParentsMenu').getList(options).then(function (results) {\n $scope.selectParentMenusItems = results;\n var itemNull = {\n id: null,\n name: $filter('translate')('menus.no_father')\n }\n $scope.selectParentMenusItems.unshift(itemNull);\n });\n\n\n $scope.saveMenuItem = function () {\n if (angular.isDefined($scope.menu_item.FK_menus_items_permissions) && $scope.menu_item.FK_menus_items_permissions != null) $scope.menu_item.permission_id = $scope.menu_item.FK_menus_items_permissions.id;\n if ($scope.menu_item.permission_id == 0) $scope.menu_item.permission_id = null;\n if ($scope.menu_item.parent_menu_item_id == 0) $scope.menu_item.parent_menu_item_id = null;\n\n $scope.menu_item.menu_id = $scope.menu_id;\n\n if (!angular.isUndefined($scope.menu_item.id)) {\n $scope.menu_item.put().then(function (result) {\n if (typeof (result.id) != \"undefined\") {\n toastr.success($filter('translate')('menus.edit_success'));\n $state.go(\"menus.edit\", { id: $scope.menu_item.menu_id });\n }\n });\n } else {\n Restangular.all('menusItems').post($scope.menu_item).then(function (result) {\n if (typeof (result.id) != \"undefined\") {\n toastr.success($filter('translate')('menus.create_success'));\n $state.go(\"menus.edit\", { id: $scope.menu_item.menu_id });\n }\n });\n }\n }\n\n $scope.checkDelete = function () {\n modalService.confirm({\n title: $filter('translate')('menus.button_delete'),\n message: $filter('translate')('menus.delete_message') + \" \" + $scope.menu_item.name + \"?\",\n onAccept: function () {\n $scope.menu_item.remove().then(function () {\n toastr.success($filter('translate')('menus.delete_success'));\n $state.go(\"menus.edit\", { id: $scope.menu_item.menu_id });\n });\n }\n });\n };\n\n }]);","import './notifications';\nimport './notifications-list'; \nimport './notifications-edit';\nimport './notificationsOptionsModal';\nimport './notificationsModalMail';\nimport './searchPersonsModal';\n","import NotificationsModalMailInfoView from \"./NotificationsModalMailInfo.html\";\nimport ChangeEmailsModalView from \"./changeEmailsModal.html\";\nimport _ from 'lodash';\n\n\n\nangular.module(\"notifications\")\n\n .controller(\"NotificationsEditCtrl\", ['$uibModal', '$rootScope', '$scope', '$http', '$stateParams', 'Restangular', '$state', 'modalService', '$filter', 'gridService', '$log',\n function ($uibModal, $rootScope, $scope, $http, $stateParams, Restangular, $state, modalService, $filter, gridService, $log) {\n \n $rootScope.title = $filter('translate')('notifications.title');\n $log.debug($stateParams.notificationId);\n $scope.showData = 'showInfo';\n\n $scope.sent = 0;\n $scope.sending = 0;\n $scope.error = 0;\n $scope.eventId = null;\n $scope.search = {\n email: null,\n fullname: null\n }\n\n\n if (typeof ($stateParams.id) !== 'undefined') {\n $scope.eventId = $stateParams.id;\n }\n\n if (angular.isUndefined($stateParams.notificationId) || $stateParams.notificationId == \"\") {\n \n $rootScope.breadcrumb = [\n { title: $filter('translate')('notifications.list'), url: \"notifications.list\" },\n { title: $filter('translate')('notifications.button_view') }\n ];\n $scope.company = {\n name: '',\n created_at: new Date()\n };\n }\n else {\n\n var loadSent = function () {\n if (angular.isDefined($scope.gridSent)) {\n $scope.gridSent.loadData(false);\n } else {\n $scope.gridSent = {\n pdfTitle: $filter('translate')('notifications.pdf_sent'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n paginationPageSizes: [40, 100, 150],\n paginationPageSize: 40,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: true, enableHiding: false, exporterSuppressExport: true, maxWidth: 80 },\n {\n name: 'real_send_date', displayName: $filter('translate')('notifications.date'), maxWidth: 125, minWidth: 80,\n type: 'real_send_date', cellFilter: 'toLocalDate | date:\\'dd/MM/yyyy HH:mm\\'',\n customFormatFn: function (value) {\n if (value != null) {\n var fecha = new Date(value);\n return $filter('date')(fecha, 'dd/MM/yyyy');\n }\n return \"\";\n },\n enableFiltering: false, enableColumnMenu: false\n },\n { name: 'person_name', displayName: $filter('translate')('persons.name'), enableFiltering: false, enableHiding: false, enableColumnMenu: false },\n { name: 'mails', displayName: $filter('translate')('companies.email'), enableFiltering: false, enableHiding: false, enableColumnMenu: false },\n { name: 'times_opened', displayName: $filter('translate')('notifications.times_opened'), enableFiltering: false, enableHiding: false, enableColumnMenu: false },\n {\n name: 'last_time_opened', displayName: $filter('translate')('notifications.last_time_opened'), maxWidth: 125, minWidth: 80,\n type: 'last_time_opened', cellFilter: 'toLocalDate | date:\\'dd/MM/yyyy HH:mm\\'',\n customFormatFn: function (value) {\n if (value != null) {\n var fecha = new Date(value);\n return $filter('date')(fecha, 'dd/MM/yyyy');\n }\n return \"\";\n },\n enableFiltering: false, enableColumnMenu: false\n },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('notifications.button_view'), action: 'ng-click=\"grid.appScope.goToEdit(row.entity)\"', cssIconClass: \"fa fa-edit\" },\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n //var deferred = $q.defer();\n options.notification_email_id = $stateParams.notificationId;\n options.state = \"sent\";\n options.name = $scope.search.fullname;\n options.email = $scope.search.email;\n return Restangular.all('NotificationsTo').getList(options);\n }\n };\n }\n };\n\n var loadSending = function () {\n $log.debug($scope.gridSending);\n if (angular.isDefined($scope.gridSending)) {\n $scope.gridSending.loadData(false);\n } else {\n $scope.gridSending = {\n pdfTitle: $filter('translate')('notifications.pdf_sent'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n paginationPageSizes: [10, 20, 30],\n paginationPageSize: 10,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n { name: 'person_name', displayName: $filter('translate')('persons.name'), enableFiltering: false, enableHiding: false, enableColumnMenu: false },\n { name: 'mails', displayName: $filter('translate')('companies.email'), enableFiltering: false, enableHiding: false, enableColumnMenu: false },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('notifications.edit_profile'), action: 'ng-click=\"grid.appScope.changeEmails(row.entity.id)\"', cssIconClass: \"fa fa-user\" },\n { title: $filter('translate')('notifications.button_view'), action: 'ng-click=\"grid.appScope.goToEdit(row.entity)\"', cssIconClass: \"fa fa-edit\" },\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n options.notification_email_id = $stateParams.notificationId;\n options.state = \"pending\";\n return Restangular.all('NotificationsTo').getList(options);\n }\n };\n }\n };\n\n var loadError = function () {\n $scope.selectedRows = [];\n if (angular.isDefined($scope.gridError)) {\n $scope.gridError.loadData(false);\n } else {\n $scope.gridError = {\n pdfTitle: $filter('translate')('notifications.pdf_sent'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n paginationPageSizes: [40, 100, 150],\n paginationPageSize: 40,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n this.gridApi.selection.on.rowSelectionChanged($scope, callbackFunctionRowSelected);\n this.gridApi.selection.on.rowSelectionChangedBatch($scope, callbackFunctionRowSelected);\n },\n columnDefs: [\n { name: 'id', visible: true, enableHiding: false, exporterSuppressExport: true, maxWidth: 80 },\n {\n name: 'real_send_date', displayName: $filter('translate')('notifications.date'), maxWidth: 125, minWidth: 80,\n type: 'real_send_date', cellFilter: 'toLocalDate | date:\\'dd/MM/yyyy HH:mm\\'',\n customFormatFn: function (value) {\n if (value != null) {\n var fecha = new Date(value);\n return $filter('date')(fecha, 'dd/MM/yyyy');\n }\n return \"\";\n },\n enableFiltering: false, enableColumnMenu: false\n },\n { name: 'person_name', displayName: $filter('translate')('persons.name'), enableFiltering: false, enableHiding: false, enableColumnMenu: false },\n { name: 'mails', displayName: $filter('translate')('companies.email'), enableFiltering: false, enableHiding: false, enableColumnMenu: false },\n { name: 'Re.', displayName: $filter('translate')('notifications.forwarded'), enableFiltering: true, enableHiding: false, cellTemplate: '
0 || row.entity.count_resend_error > 0\" > 0\" class=\\\"label label-small label-primary\\\" popover-placement=\"top\" popover-append-to-body=\"true\" popover-trigger=\"mouseenter\" uib-popover=\"{{row.entity.resend_parent_ids_ok}}\")>{{row.entity.count_resend_ok}} 0\" class=\\\"label label-small label-danger\\\" popover-placement=\"top\" popover-append-to-body=\"true\" popover-trigger=\"mouseenter\" uib-popover=\"{{row.entity.resend_parent_ids_error}}\">{{row.entity.count_resend_error}} 
' },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('notifications.email'), action: 'ng-click=\"grid.appScope.changeEmails(row.entity.id)\"', cssIconClass: \"fa fa-envelope-o\" },\n { title: $filter('translate')('notifications.button_view'), action: 'ng-click=\"grid.appScope.goToEdit(row.entity)\"', cssIconClass: \"fa fa-edit\" },\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n options.notification_email_id = $stateParams.notificationId;\n options.state = \"error\";\n return Restangular.all('NotificationsTo').getList(options);\n }\n };\n }\n }\n\n $scope.search = function () {\n $scope.gridSent.loadData(false);\n }\n\n $scope.clearSearch = function () {\n $scope.search.email = null;\n $scope.search.fullname = null;\n\n $scope.gridSent.loadData(false);\n }\n\n if ($scope.event) {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('events.title'), url: \"events.list\" },\n { title: $scope.event.name, url: \"events.edit({ id: \" + $scope.event.id + \" })\" },\n { title: $filter('translate')('notifications.title'), url: \"events.edit.notifications({ id: \" + $scope.event.id + \" })\" },\n { title: $filter('translate')('notifications.edit') }\n ];\n } else {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('notifications.list'), url: \"notifications.list\" },\n { title: $filter('translate')('notifications.edit') }\n ];\n }\n Restangular.one('NotificationsEmails', $stateParams.notificationId).get().then(function (results) {\n $scope.notification = results;\n\n $log.debug(\"he aquí los resultados\")\n $log.debug(results)\n\n\n angular.forEach(results.FK_notifications_to_notifications_emails, function (item) {\n if (item.state == \"sent\") {\n $scope.sent++;\n }\n if (item.state == \"error\" && item.resend_parent_id == null) {\n var exists = $filter('filter')(results.FK_notifications_to_notifications_emails, { 'mails': item.mails, 'state': 'sent' });\n if (exists.length == 0) {\n $scope.error++;\n }\n }\n if (item.state == \"pending\") {\n $scope.sending++;\n }\n });\n $scope.notification.content = (window as any).CONFIG.api_url + \"NotificationsAttachment/GetContentHTML?id=\" + $scope.notification.id;\n \n _.each($scope.notification.FK_notifications_attachments_notifications_emails, function (attachment) {\n attachment.downloadUrl = (window as any).CONFIG.api_url + 'NotificationsAttachment/getFile?uid=' + attachment.uid + '&filename=' + attachment.name\n });\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n\n $scope.goToProfile = function (person_id) {\n $state.go(\"persons.edit\", { person_type: 'authority', id: person_id });\n }\n\n let callbackFunctionRowSelected = function (row) {\n let addAll = row.length > 1;\n\n if (!addAll) { // Si solo hemos seleccionado uno \n var index = $scope.selectedRows.map(function (e) { return e }).indexOf(angular.isUndefined(row.entity) ? row[0].entity.id : row.entity.id);\n if (index < 0) {\n if (angular.isUndefined(row.isSelected)) {\n if (row[0].isSelected) {\n $scope.selectedRows.push(row[0].entity.id);\n } else {\n $scope.selectedRows = [];\n } \n } else {\n if (row.isSelected) {\n $scope.selectedRows.push(row.entity.id);\n } else {\n $scope.selectedRows.splice(index, 1);\n }\n }\n \n } else {\n $scope.selectedRows.splice(index, 1);\n }\n } else { //Si hemos seleccionado todos\n if (row[0].isSelected) {\n $scope.selectedRows = [];\n for (let i = 0; i < $scope.gridError.gridApi.grid.options.totalItems; i++) { $scope.selectedRows.push(row[i].entity.id); };\n } else {\n $scope.selectedRows = [];\n }\n }\n }\n\n $scope.goToEdit = function (rowEntity) {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: NotificationsModalMailInfoView,\n controller: 'NotificationsToInfoCtrl',\n size: 'lg',\n resolve: {\n id: function () { return rowEntity.id; }\n }\n });\n\n $modalInstance.result.then(function (bool) {\n $scope.cancel();\n });\n }\n }\n\n $scope.changeEmails = function (notification_to_id) {\n //Funcion para cambiar los correos que estan mal, se cambia tanto en la notificacion como en el perfil de la autoridad\n let $modalInstance = $uibModal.open({\n animation: true,\n template: ChangeEmailsModalView,\n controller: 'ChangeEmailsCtrl',\n size: 'md',\n resolve: {\n notification_to_id: function () { return notification_to_id; }\n }\n });\n\n $modalInstance.result.then(function (bool) {\n loadError();\n });\n\n }\n \n $scope.downloadFile = function (attachment) {\n //Estos son los tipos devueltos: 0 = Gembox, 1 = Jasper, 2 = Files, 3 = Attachments\n if (attachment.type == 0 || attachment.type == 1) {\n $http({\n method: 'post',\n url: (window as any).CONFIG.api_url + 'documentgenerator/Generate',\n params: { document_id: attachment.entity_type_id, event_id: $stateParams.id, event_guests_id: \"0\", order: 16, outputType: 'pdf', type: attachment.type }\n }).then(function (result, status, headers, config) {\n var url = (window as any).CONFIG.api_url + 'documentgenerator/download/' + result.data;\n window.open(url, '_blank');\n });\n\n } else {\n window.open(attachment.downloadUrl, '_blank', '');\n } \n }\n\n $scope.downloadFiles = function () {\n _.each($scope.notification.FK_notifications_attachments_notifications_emails, function (attachment) {\n //Solo se descargarn los adjuntos que no sean Reports\n if (!attachment.entity_type) {\n window.open(attachment.downloadUrl, '_blank', '');\n }\n \n });\n }\n\n $scope.addFile = function (flowFile) {\n var fileReader = new FileReader();\n fileReader.onload = function (event) {\n var uri = event.target.result;\n $scope.$apply(function () {\n $scope.company.logo = uri;\n });\n };\n fileReader.readAsDataURL(flowFile.file);\n };\n\n\n $scope.setActive = function (data) {\n $scope.showData = data;\n if (data == \"showSent\") {\n loadSent();\n } else if (data == \"showError\") {\n loadError();\n } else {\n loadSending();\n }\n $log.debug($scope.showData);\n }\n\n\n $scope.cancel = function () {\n if ($scope.eventId != null) {\n $state.go(\"events.edit.notifications\", { id: $scope.eventId });\n } else {\n $state.go(\"notifications.list\");\n }\n }\n\n $scope.onResendAll = function () {\n if ($scope.selectedRows.length > 0) {\n Restangular.all(\"NotificationsTo\").customPOST({}, \"resend\", { notificationsToIds: $scope.selectedRows }).then(function (results) {\n if (results) {\n $scope.cancel();\n }\n });\n }\n }\n\n }])\n\n\n .controller('NotificationsToInfoCtrl', ['$scope', '$uibModalInstance', '$http', 'Restangular', '$filter', 'id', function ($scope, $uibModalInstance, $http, Restangular, $filter, id) {\n\n Restangular.one('NotificationsTo', id).get().then(function (result) {\n $scope.notificationsEmailInfo = result;\n });\n\n $scope.onResend = function () {\n var ids = new Array();\n ids.push(id);\n Restangular.all(\"NotificationsTo\").customPOST({}, \"resend\", { notificationsToIds: ids }).then(function (results) {\n if (results) {\n $uibModalInstance.close();\n }\n });\n }\n\n $scope.onResendAll = function () {\n var ids = new Array();\n ids.push(id);\n Restangular.all(\"NotificationsTo\").customPOST({}, \"resend\", { notificationsToIds: ids }).then(function (results) {\n if (results) {\n $uibModalInstance.close();\n }\n });\n }\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n }])\n .controller('ChangeEmailsCtrl', ['$scope', '$uibModalInstance', '$http', 'Restangular', '$filter', 'notification_to_id', function ($scope, $uibModalInstance, $http, Restangular, $filter, notification_to_id) {\n\n var email_old = null;\n Restangular.one('NotificationsTo', notification_to_id).get().then(function (result) {\n $scope.changeMail = result;\n email_old = result.mails;\n });\n\n $scope.onChangeMail = function () {\n Restangular.all(\"NotificationsTo\").customPOST({}, \"ChangeEmails\", { notificationToId: $scope.changeMail.id, email: $scope.changeMail.mails, email_old: email_old }).then(function (results) {\n if (results) {\n $uibModalInstance.close();\n }\n });\n }\n\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n }])\n\n;","angular.module(\"notifications\")\n\n .controller('NotificationsListCtrl', ['entity_type', '$stateParams', '$rootScope', '$scope', 'Restangular', 'gridService', 'modalService', 'notificationService', '$filter', 'LoginService', '$state', '$uibModal', '$log',\n function (entity_type, $stateParams, $rootScope, $scope, Restangular, gridService, modalService, notificationService, $filter, LoginService, $state, $uibModal, $log) {\n\n $scope.mailings = [];\n $scope.show_title = (entity_type != \"correspondence\");\n let eventId = null;\n let event: any = null;\n let mailing_id = null;\n\n $scope.selectStates = [{ id: 'pending', title: $filter('translate')('notifications.sending') },\n { id: 'error', title: $filter('translate')('notifications.sent_error') },\n { id: 'sent', title: $filter('translate')('notifications.sent') }\n ]\n\n if (typeof ($stateParams.id) !== 'undefined') {\n eventId = $stateParams.id;\n mailing_id = $stateParams.mailing_id;\n if (entity_type == \"events\") {\n Restangular.one('Events', $stateParams.id).get().then(function (results) {\n event = results;\n });\n }\n } else {\n mailing_id = null;\n }\n \n $rootScope.title = $filter('translate')('notifications.title');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('notifications.list') }\n ];\n\n Restangular.all('Mailings').getList({ entity_type_id: $stateParams.id, entity_type: \"events\" }).then(function (templates) {\n $scope.mailings = templates;\n })\n\n $scope.search = {\n subject: \"\",\n mailing_id:\"\",\n date_from: null,\n date_to: null,\n name: null,\n surname: null,\n lastname: null,\n email: null,\n state: null\n };\n\n $scope.search.mailing_id = mailing_id;\n \n $scope.gridOptionNotifications = {\n pdfTitle: $filter('translate')('notifications.pdf_title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n paginationPageSizes: [10, 20, 30],\n paginationPageSize: 10,\n enableFiltering: false,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n {\n name: 'date', displayName: $filter('translate')('notifications.date'), maxWidth: 125, minWidth: 80,\n type: 'date', cellFilter: 'toLocalDate | date:\\'dd/MM/yyyy HH:mm\\'',\n customFormatFn: function (value) {\n if (value !== null) {\n var fecha = new Date(value);\n return $filter('date')(fecha, 'dd/MM/yyyy');\n }\n return \"\";\n } , \n enableFiltering: false, enableColumnMenu: false\n },\n {\n name: 'FK_notifications_emails_events.name',\n displayName: $filter('translate')('notifications.event'), enableFiltering: false, enableHiding: false, enableColumnMenu: false, minWidth: 100, maxWidth: 250,\n visible: (eventId != null ? false : true)\n },\n { name: 'subject', displayName: $filter('translate')('notifications.subject'), enableFiltering: true, enableHiding: false, enableColumnMenu: false },\n {\n name: 'guests', displayName: $filter('translate')('notifications.info'), enableFiltering: true, enableHiding: false, enableColumnMenu: false, minWidth: 100, maxWidth: 125,\n cellTemplate: '
' +\n '{{row.entity.status_sent}}
' +\n '{{row.entity.status_sending}}
' +\n '{{ row.entity.status_error }}
',\n visible: ($rootScope.sizeSm || $rootScope.sizeXs ? false : true)\n },\n {\n name: 'scheduled_date', displayName: $filter('translate')('notifications.scheduled_date'), minWidth: 100, maxWidth: 150, enableSorting: false,\n cellTemplate: '
{{ row.entity.FK_notifications_to_notifications_emails[0].scheduled_date | toLocalDate | date: \"dd/MM/yyyy HH:mm\" }}
',\n enableFiltering: true, enableHiding: false, enableColumnMenu: false\n },\n {\n name: 'marked_as_invitation_or_program', displayName: '', minWidth: 50, maxWidth: 100,\n cellTemplate: '
{{ \\'notifications.is_invitation\\' | translate | uppercase}}
' +\n '
{{ \\'events.programs_acts.programs_acts\\' | translate | uppercase}}
', \n enableFiltering: true, enableHiding: false, enableColumnMenu: false\n },\n {\n name: ' ', width: 40, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('notifications.button_view'), action: 'ng-click=\"grid.appScope.goToEdit(row.entity)\"', cssIconClass: \"fa fa-eye\" },\n // { title: $filter('translate')('notifications.button_delete'), action: 'ng-click=\"grid.appScope.deleteDialog(row.entity.id,row.entity.subject);\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n\n options.mailing_id = $scope.search.mailing_id;\n options.subject = $scope.search.subject;\n options.date_from = $scope.search.date_from;\n options.date_to = $scope.search.date_to;\n options.name = $scope.search.name;\n options.surname = $scope.search.surname;\n options.lastname = $scope.search.lastname;\n options.email = $scope.search.email;\n options.state = $scope.search.state;\n\n if (eventId != null) options.event_id = eventId;\n if (entity_type != null) options.entity_type = entity_type;\n\n return Restangular.all('NotificationsEmails').getList(options)\n\n }\n \n };\n\n $scope.searchNotifications = function () {\n if (angular.isDefined($scope.gridOptionNotifications.loadData)) {\n $scope.gridOptionNotifications.loadData(false);\n }\n }\n\n $scope.clearSearch = function () {\n $scope.search.mailing_id = null;\n $scope.search.subject = null;\n $scope.search.date_from = null;\n $scope.search.date_to = null;\n $scope.search.name = null;\n $scope.search.surname = null;\n $scope.search.lastname = null;\n $scope.search.email = null;\n $scope.search.state = null;\n $scope.gridOptionNotifications.loadData(false);\n }\n\n $scope.goToEdit = function (rowEntity) {\n if (eventId != null && entity_type == 'events') {\n $state.go(\"events.edit.notifications.edit\", { id: eventId, notificationId: rowEntity.id });\n } else {\n $state.go(\"notifications.edit\", { notificationId: rowEntity.id });\n }\n }\n\n\n $scope.send_notification = function () {\n let params = {\n entity_type: entity_type,\n entity_type_id: eventId,\n mail_account_id: (event != null && typeof (event) !== \"undefined\" ? event.mail_account_id : null),\n mail_account_reply: (event != null && typeof (event) !== \"undefined\" ? event.reply_to : null)\n };\n $log.debug(\"Param a pelo: events: \"+ params);\n notificationService.notificationMail({\n params: params,\n onAccept: function (data) {\n toastr.success($filter('translate')('notifications.sending_mail_success'));\n $scope.gridOptionNotifications.loadData(false);\n }\n }); \n }\n\n $scope.deleteDialog = function (id,name) {\n $scope.id = id;\n $scope.name = name;\n modalService.confirm({\n title: $filter('translate')('notifications.button_delete'),\n message: $filter('translate')('notifications.delete_message')+\" \"+ + $scope.name + \"?\",\n onAccept: function () {\n Restangular.one('NotificationsEmails', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('notifications.delete_success'));\n $scope.gridOptionNotifications.gridApi.core.raise.itemDeleted($scope);\n \n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n });\n\n };\n\n\n }])\n\n;","import BreadcrumbView from \"../common/breadcrumb/breadcrumb.html\";\nimport NotificationsListView from \"./notifications-list.html\";\nimport NotificationsEditView from \"./notifications-edit.html\";\n\n\nangular.module(\"notifications\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('notifications', {\n url: \"/notifications\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n })\n .state('notifications.list', {\n url: \"/list\",\n controller: \"NotificationsListCtrl\",\n template: NotificationsListView,\n resolve: {\n entity_type: [function () { return \"events\"; }],\n },\n cache: false,\n data: { pageTitle: 'Notificaciones' },\n requiredPermission: [\"NOTIFICATIONS_READ\"]\n })\n .state('notifications.edit', {\n url: \"/edit/:notificationId\",\n controller: \"NotificationsEditCtrl\",\n template: NotificationsEditView,\n cache: false,\n data: { pageTitle: 'Notificación' },\n requiredPermission: [\"NOTIFICATIONS_READ\"]\n });\n }]);","import SearchPersonsModalView from \"./searchPersonsModal.html\";\nimport _ from 'lodash';\n\n\n\nangular.module('notifications')\n\n .controller('NotificationsModalMailCtrl', ['$scope', '$uibModalInstance', '$uibModal', '$http', 'options', 'Restangular', '$filter', 'LoginService', 'Upload', 'modalService', '$stateParams', '$log',\n function ($scope, $uibModalInstance, $uibModal, $http, options, Restangular, $filter, LoginService, Upload, modalService, $stateParams, $log) {\n\n $scope.mail = options;\n $log.debug(options);\n\n $scope.showToPart = true;\n if ($scope.mail.event_guests_ids != null || $scope.mail.persons_ids != null || $scope.mail.users_ids != null || $scope.mail.event_staffs_ids != null || $scope.mail.event_users_ids != null) {\n\n $scope.showToPart = false;\n $scope.totalEmails = ($scope.mail.event_guests_ids != null ? $scope.mail.event_guests_ids.length : 0) +\n ($scope.mail.persons_ids != null ? $scope.mail.persons_ids.length : 0) +\n ($scope.mail.users_ids != null ? $scope.mail.users_ids.length : 0) +\n ($scope.mail.event_staffs_ids != null ? $scope.mail.event_staffs_ids.length : 0) +\n ($scope.mail.event_users_ids != null ? $scope.mail.event_users_ids.length : 0);\n\n }\n\n $scope.message = $scope.mail.message;\n $scope.replyMailsAccounts = [];\n var user_mail = \"\";\n\n Restangular.all('MailAccounts').getList().then(function (mailsAccounts) {\n\n $scope.mailsAccounts = mailsAccounts;\n $scope.changeReplies(true);\n\n });\n\n //Cuenta del usuario\n Restangular.one('Users/Mail', LoginService.get(\"userId\")).get().then(function (mail) {\n\n user_mail = mail;\n\n });\n\n\n let languageCode = \"es\"; //$translate.use().toLowerCase();\n $scope.tinymceOptions = {\n resize: true,\n forced_root_block: false,\n relative_urls: false,\n convert_urls: false,\n remove_script_host: false,\n height: 100,\n body_class: 'custom_tinymce_content',\n //valid_classes: 'razor_expression',\n language: languageCode,\n paste_as_text: true,\n plugins: 'paste autoresize textcolor image lists advlist table noneditable code link fullpage',\n toolbar: \"undo redo | alignleft aligncenter alignright alignjustify | bold italic forecolor backcolor fontsizeselect | bullist numlist outdent indent link\",\n menubar: false,\n statusbar: false,\n setup: function (editor) {\n\n }\n };\n\n $scope.options = options;\n\n $scope.changeReplies = function (firstime) {\n\n if (typeof firstime === 'undefined') firstime = false;\n\n $scope.replyMailsAccounts = [];\n let reply_to = $scope.mail.mail_account_reply;\n if ($scope.mailsAccounts != null && typeof ($scope.mailsAccounts) !== 'undefined' && $scope.mail.mail_account_id != null && typeof ($scope.mail.mail_account_id) !== 'undefined') {\n $scope.replyMailsAccounts.push(_.find($scope.mailsAccounts, function (account) { return $scope.mail.mail_account_id == account.id; }).email);\n if (!firstime) reply_to = _.find($scope.mailsAccounts, function (account) { return $scope.mail.mail_account_id == account.id; }).reply_to; //solo si cambia el combo\n }\n \n $scope.mail.from = $scope.replyMailsAccounts[0];\n $scope.mail.reply_to = reply_to;\n $scope.replyMailsAccounts.push(user_mail);\n\n };\n \n $scope.newAttachment = function (file) {\n\n if (file != null) { $scope.mail.files.unshift(file); }\n\n };\n\n $scope.deleteAttachment = function (item) {\n\n var index = $scope.mail.files.indexOf(item);\n $scope.mail.files.splice(index, 1);\n\n };\n\n $scope.onAccept = function () {\n\n if (angular.isUndefined($scope.mail.addresses)) $scope.mail.addresses = \"\";\n if (angular.isUndefined($scope.mail.cc_tmp)) $scope.mail.cc_tmp = \"\";\n if (angular.isUndefined($scope.mail.cco_tmp)) $scope.mail.cco_tmp = \"\";\n\n if ($scope.mail.addresses == \"\" && $scope.mail.cc_tmp == \"\" && $scope.mail.cco_tmp == \"\" && $scope.showToPart) {\n $scope.message = $filter('translate')('mail.missing_mail_to_cco_cc');\n } else {\n if (angular.isDefined($scope.mail.addresses) && $scope.mail.addresses != \"\" && $scope.mail.addresses != null)\n $scope.mail.to = $scope.mail.addresses.split(\",\");\n if (angular.isDefined($scope.mail.cc_tmp) && $scope.mail.cc_tmp != \"\" && $scope.mail.cc_tmp != null)\n $scope.mail.cc = $scope.mail.cc_tmp.split(\",\");\n if (angular.isDefined($scope.mail.cco_tmp) && $scope.mail.cco_tmp != \"\" && $scope.mail.cco_tmp != null)\n $scope.mail.cco = $scope.mail.cco_tmp.split(\",\");\n\n if ($scope.mail.files.length > 0) {\n Upload.base64DataUrl($scope.mail.files).then(function (urls) {\n for (var i = 0; i < urls.length; i++) {\n $scope.mail.attachments.push({\n name: $scope.mail.files[i].name,\n content: urls[i]\n });\n }\n confirmSend();\n });\n } else {\n confirmSend();\n }\n } \n };\n\n var confirmSend = function () {\n if (\n ($scope.mail.invitation_template != null && $scope.mail.invitation_template != \"\" && typeof $scope.mail.invitation_template != \"undefined\")\n ||\n ($scope.options.template != null && $scope.options.template.is_invitation)\n ) {\n //preguntamos si marcar como invitados o no\n modalService.confirm({\n title: \"\",\n message: $filter('translate')('events.guests.mark_as_sent_invitation'),\n onAccept: function () {\n $scope.mail.mark_as_sent_invitation = true;\n send();\n },\n onCancel: function () {\n $scope.mail.mark_as_sent_invitation = false;\n send();\n }\n });\n } else {\n send();\n }\n };\n\n var send = function () {\n $http({\n method: 'post',\n url: (window as any).CONFIG.api_url + 'NotificationsEmails/SendMail',\n data: $scope.mail\n }).success(function (results, status, headers, config) {\n $uibModalInstance.close(true);\n }).error(function (results, status, headers, config) {\n });\n };\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n $scope.openSearchPerson = function (whereToAdd) {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: SearchPersonsModalView,\n size: \"lg\",\n controller: \"searchPersonsModalCtrl\",\n scope: $scope,\n resolve: {\n options: function () {\n return {};\n }\n }\n });\n //Response del modal\n $modalInstance.result.then(function (data) {\n let mailsSelected = \"\";\n angular.forEach(data, function (row) {\n mailsSelected = (mailsSelected != \"\" ? mailsSelected + \",\" + row : row);\n });\n if (whereToAdd == \"addresses\") {\n $scope.mail.addresses = (typeof ($scope.mail.addresses) !== 'undefined' && $scope.mail.addresses != \"\" ? $scope.mail.addresses + \",\" + mailsSelected: mailsSelected);\n } else if (whereToAdd == \"cc_tmp\") { \n $scope.mail.cc_tmp = (typeof ($scope.mail.cc_tmp) !== 'undefined' && $scope.mail.cc_tmp != \"\" ? $scope.mail.cc_tmp + \",\" +mailsSelected: mailsSelected);\n } else if (whereToAdd == \"cco_tmp\") {\n $scope.mail.cco_tmp = (typeof ($scope.mail.cco_tmp) !== 'undefined' && $scope.mail.cco_tmp != \"\" ? $scope.mail.cco_tmp + \",\" +mailsSelected: mailsSelected);\n }\n if (!$scope.$$phase) $scope.$apply();\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n if (!$scope.$$phase) $scope.$apply();\n });\n };\n\n $scope.reloadTemplate = function () {\n $log.debug(\"entra en el reloadTemplate\");\n $log.debug(options);\n Restangular.all(\"NotificationsTemplates\").customGET(\"LoadTemplate\", { template_id: options.template_id }).then(function (res) {\n if (res !== \"\" && typeof (res) !== \"undefined\") {\n $scope.mail.content = res;\n } else {\n //options.content = template.FK_templates_tl_templates[0].html;\n toastr.error(\"Ha ocurrido un error, no se encuentra el template original\");\n }\n });\n }\n\n }])\n \n\n;","import NotificationsOptionsModalView from \"./notificationsOptionsModal.html\";\nimport NotificationsModalMailView from \"./notificationsModalMail.html\";\n\n\nangular.module('notifications')\n\n .controller(\"NotificationsTemplateModalCtrl\", ['eventId', 'guestsIds', 'staffsIds', 'personsIds', 'usersIds', 'mailAccountId', 'mailAccountReply', '$scope', '$uibModalInstance', 'Restangular', 'modalService', '$filter', '$http', '$stateParams', '$q', '$uibModal', '$log',\n function (eventId, guestsIds, staffsIds, personsIds, usersIds, mailAccountId, mailAccountReply, $scope, $uibModalInstance, Restangular, modalService, $filter, $http, $stateParams, $q, $uibModal, $log) {\n\n Restangular.all('NotificationsTemplates').customGET(\"LoadTemplatesForSelect\").then(function (templates) {\n $scope.templates = templates;\n });\n\n $scope.createFromTemplate = function (template) {\n $log.debug(template);\n let $modalInstance = $uibModal.open({\n animation: true,\n template: NotificationsOptionsModalView,\n size: \"lg\",\n controller: \"NotificationsOptionsModalCtrl\",\n resolve: {\n eventId: function () {\n return eventId;\n },\n guestsIds: function () {\n return guestsIds;\n },\n staffsIds: function () {\n return staffsIds;\n },\n personsIds: function () {\n return personsIds;\n },\n usersIds: function () {\n return usersIds;\n },\n mailAccountId: function () {\n return mailAccountId;\n },\n mailAccountReply: function () {\n return mailAccountReply;\n },\n template: function () {\n return template;\n }\n }\n });\n //Response del modal\n $modalInstance.result.then(function (id) {\n $uibModalInstance.close(true);\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n });\n };\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n\n }])\n\n .controller('NotificationsOptionsModalCtrl', ['template', 'eventId', 'guestsIds', 'staffsIds', 'personsIds', 'usersIds', 'mailAccountId', 'mailAccountReply', '$scope', '$uibModalInstance', '$http', 'Restangular', 'LoginService', '$uibModal', '$filter', '$log',\n function (template, eventId, guestsIds, staffsIds, personsIds, usersIds, mailAccountId, mailAccountReply, $scope, $uibModalInstance, $http, Restangular, LoginService, $uibModal, $filter, $log) {\n\n $scope.selected = [];\n var user_mail = \"\";\n\n let option = { _sortBy: \"FK_documents_documents_types.code\"};\n Restangular.all('Documents').getList(option).then(function (documents) {\n //$scope.documents = documents;\n $scope.documents = [];\n angular.forEach(documents, function (item) {\n if (guestsIds != null && guestsIds.length > 0) {\n if (item.FK_documents_documents_types.code == \"INVITATION\" ||\n //item.FK_documents_documents_types.code == \"ELECTRONIC_INVITATION\" || //no los incluimos, se duplican las de invitaciones normales\n item.FK_documents_documents_types.code == \"GUEST_PARKING\" ||\n //item.FK_documents_documents_types.code == \"GUEST_LOCATION\" ||\n item.FK_documents_documents_types.code == \"EVENT_MENU\" ||\n item.FK_documents_documents_types.code == \"GUEST_ZONE\" ||\n item.FK_documents_documents_types.code == \"PROGRAM_ACTS\" ||\n item.FK_documents_documents_types.code == \"GUEST_ACCREDITATION\") {\n $scope.documents.push(item);\n }\n } else {\n if (item.FK_documents_documents_types.code == \"EVENT_MENU\" ||\n item.FK_documents_documents_types.code == \"PROGRAM_ACTS\" ||\n item.FK_documents_documents_types.code == \"PROPOSAL_GUEST_LIST\" ||\n item.FK_documents_documents_types.code == \"GUEST_LIST\" ||\n item.FK_documents_documents_types.code == \"SPACE_GUESTS\" ||\n item.FK_documents_documents_types.code == \"SPACE_FULL_PLAN\" ||\n item.FK_documents_documents_types.code == \"GUEST_LIST_ADDRESSES\") {\n $scope.documents.push(item);\n }\n }\n });\n });\n\n $scope.setValue = function (document_type_id, document_type_code, document_id) {\n $scope.selected[document_type_id].document_id = document_id;\n $scope.selected[document_type_id].document_type_code = document_type_code;\n };\n \n $scope.save = function () {\n $scope.options = { to: \"\", content: \"\", subject: \"\", cc: [], cco: [], invitation_template: \"\", program_template: \"\", parking_template: \"\", zone_template: \"\", menu_template: \"\", guest_location_template: \"\", template_id: null };\n\n angular.forEach($scope.selected, function (item) {\n if (item.checked) {\n if (item.document_type_code == \"PROGRAM_ACTS\") {\n $scope.options.program_template = item.document_id;\n } else if (item.document_type_code == \"INVITATION\" || item.document_type_code == \"ELECTRONIC_INVITATION\") {\n $scope.options.invitation_template = item.document_id;\n } else if (item.document_type_code == \"GUEST_PARKING\") {\n $scope.options.parking_template = item.document_id;\n } else if (item.document_type_code == \"GUEST_LOCATION\") {\n $scope.options.guest_location_template = item.document_id;\n } else if (item.document_type_code == \"EVENT_MENU\") {\n $scope.options.menu_template = item.document_id;\n } else if (item.document_type_code == \"GUEST_ZONE\") {\n $scope.options.zone_template = item.document_id;\n } else if (item.document_type_code == \"GUEST_LIST\") {\n $scope.options.list_guests_template = item.document_id;\n } else if (item.document_type_code == \"PROPOSAL_GUEST_LIST\") {\n $scope.options.list_guests_proposal_template = item.document_id;\n } else if (item.document_type_code == \"GUEST_LIST_ADDRESSES\") {\n $scope.options.guest_addresses_template = item.document_id;\n } else if (item.document_type_code == \"SPACE_GUESTS\") {\n $scope.options.guests_space_plan_template = item.document_id;\n } else if (item.document_type_code == \"SPACE_FULL_PLAN\") {\n $scope.options.full_space_plan_template = item.document_id;\n } else if (item.document_type_code == \"GUEST_ACCREDITATION\") {\n $scope.options.accreditation_template = item.document_id;\n }\n }\n });\n\n //ponemos contenido de plantilla del idioma\n if (angular.isDefined(template) && template != null && angular.isDefined(template.FK_templates_tl_templates) && template.FK_templates_tl_templates.length > 0) {\n\n if (eventId != null && eventId != \"\" && template.FK_templates_tl_templates[0].id != null && template.FK_templates_tl_templates[0].id != \"\") {\n Restangular.all(\"NotificationsTemplates\").customGET(\"LoadTemplateFromEmailsFromEvent\", { event_id: eventId, template_tl_id: template.FK_templates_tl_templates[0].id }).then(function (res) {\n if (res.content !== \"\" && typeof (res.content) !== \"undefined\") { //Es que ya se ha mandado el correo alguna vez y se precarga ese como el template.\n $scope.options.content = res.content;\n } else {\n $scope.options.content = template.FK_templates_tl_templates[0].html;\n }\n $scope.options.template_id = template.FK_templates_tl_templates[0].id;\n $scope.endLoadTemplate();\n });\n } else {\n $scope.options.content = template.FK_templates_tl_templates[0].html;\n $scope.options.template_id = template.FK_templates_tl_templates[0].id;\n $log.debug($scope.options.content);\n $scope.endLoadTemplate();\n }\n } else {\n $scope.endLoadTemplate();\n }\n };\n\n $scope.endLoadTemplate = function () {\n\n //Dependiendo de la seleccion, iremos creando los campos correspondientes. \n $scope.mail = {\n addresses: $scope.options.to,\n content: $scope.options.content,\n subject: $scope.options.subject,\n module: \"\",\n code: \"\",\n cc: [],\n cco: [],\n cc_tmp: $scope.options.cc,\n cco_tmp: $scope.options.cco,\n mail_account_id: mailAccountId,\n mail_account_reply: mailAccountReply,\n message: \"\",\n files: [],\n attachments: [],\n event_id: eventId,\n event_guests_ids: guestsIds,\n persons_ids: personsIds,\n users_ids: (eventId != null ? null : usersIds),\n event_staffs_ids: staffsIds,\n event_users_ids: (eventId != null ? usersIds : null),\n invitation_template: $scope.options.invitation_template,\n program_template: $scope.options.program_template,\n parking_template: $scope.options.parking_template,\n zone_template: $scope.options.zone_template,\n menu_template: $scope.options.menu_template,\n accreditation_template: $scope.options.accreditation_template,\n list_guests_template: $scope.options.list_guests_template,\n guest_location_template: $scope.options.guest_location_template,\n full_space_plan_template: $scope.options.full_space_plan_template,\n guests_space_plan_template: $scope.options.guests_space_plan_template,\n guest_addresses_template: $scope.options.guest_addresses_template,\n list_guests_proposal_template: $scope.options.list_guests_proposal_template,\n template_id: $scope.options.template_id,\n template: template\n };\n\n let $modalInstance = $uibModal.open({\n animation: true,\n template: NotificationsModalMailView,\n controller: 'NotificationsModalMailCtrl',\n size: 'lg',\n resolve: {\n options: function () { return $scope.mail; }\n }\n });\n\n $modalInstance.result.then(function (bool) {\n toastr.success($filter('translate')('notifications.sending_mail_success'));\n $uibModalInstance.close(true);\n });\n \n };\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n }])\n \n\n;","import _ from 'lodash';\nimport angular from 'angular';\n\nangular.module('notifications')\n\n .controller(\"searchPersonsModalCtrl\", ['uiGridSelectionService', '$state', '$timeout', 'LoginService', '$scope', '$uibModalInstance', 'Restangular', 'modalService', '$filter', '$http', '$stateParams', '$q', '$uibModal', 'options', '$rootScope', '$log',\n function (uiGridSelectionService, $state, $timeout, LoginService, $scope, $uibModalInstance, Restangular, modalService, $filter, $http, $stateParams, $q, $uibModal, options, $rootScope, $log) {\n $log.debug($state.current.name);\n if ($state.current.name === \"notifications.list\" || $state.current.name === \"correspondence.edit\") {\n $scope.eventId = null;\n } else {\n $scope.eventId = $stateParams.id;\n }\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = true;\n\n $scope.showError = false;\n $scope.selectedRows = [];\n $scope.options = [];\n $scope.showResults = false;\n $scope.personPositionModal = {};\n $scope.personPositionOrigin = {};\n $scope.personPositionModal.persons_groups = {};\n $scope.personPositionModal.FK_positions_groups = null;\n $scope.type_persons = [\n { option: null, label: $filter('translate')('persons.title_all'), checked: true },\n { option: \"authority\", label: $filter('translate')('persons.title'), checked: false }\n ];\n $scope.typePersonSelected = { checked: $scope.type_persons[0].option };\n\n if ($scope.personPositionModal.position_order == 0) $scope.personPositionModal.position_order = null;\n // funci�n que monta al estructura del select.\n $scope.groupTree = function (groups, locationListResult, parent_id, levelString) {\n\n for (var i = 0; i < groups.length; i++) {\n angular.forEach(groups[i].FK_groups_groups_groups1, function (group_group) {\n if (group_group.parent_group_id == parent_id) {\n groups[i].name = levelString + groups[i].name;\n locationListResult.push(groups[i]);\n $scope.groupTree(groups, locationListResult, groups[i].id, levelString + \"----\");\n if (!_.some(groups[i].FK_positions_groups, function (position) { return position.id == \"\"; })) // si no est� s�lo\n groups[i].FK_positions_groups.push({ id: \"\", name: $filter('translate')('events.guests.all_positions') })\n }\n });\n }\n }\n\n //Custom function. return null values instead of undefined\n function isDefinedAndNotNull(val) {\n return angular.isDefined(val) && val !== null;\n }\n\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + '/Groups/GetGroupsPositions',\n params: options\n }).then(function (results, status, headers, config) {\n var groups = results.data.rows;\n let groupsListResult: any[] = [];\n groupsListResult.push({\n id: \"\",\n name: $filter('translate')('events.guests.all_groups'),\n FK_positions_groups: [{ id: \"\", name: \"\" }]\n });\n for (var i = 0; i < groups.length; i++) {\n if (groups[i].FK_groups_groups_groups1.length == 0) {\n groupsListResult.push(groups[i]);\n $scope.groupTree(groups, groupsListResult, groups[i].id, \"----\");\n groups[i].FK_positions_groups.push({ id: \"\", name: $filter('translate')('events.guests.all_positions') });\n }\n }\n $scope.personGroups = groupsListResult;\n $scope.$watch('personPositionModal.persons_groups.selected', function (newValue, oldValue) {\n if (angular.isDefined(oldValue) && newValue.id != oldValue.id) {\n if ($scope.personPositionModal.FK_positions_groups != null && angular.isDefined($scope.personPositionModal.FK_positions_groups.selected)) $scope.personPositionModal.FK_positions_groups.selected = \"\";\n }\n });\n });\n\n\n $scope.searchGuestsOptions = function () {\n $scope.selectedRows = [];\n //gridGuestsOptions;\n $scope.showResults = true;\n if (!isDefinedAndNotNull($scope.personPositionModal.FK_positions_groups)) {\n $scope.group_id = \"\";\n $scope.position_id = \"\";\n } else {\n $scope.position_id = $scope.personPositionModal.FK_positions_groups.selected.id;\n }\n if (angular.isDefined($scope.personPositionModal.persons_groups.selected)) $scope.group_id = $scope.personPositionModal.persons_groups.selected.id;\n\n if (!angular.isDefined($scope.search)) {\n $scope.search = {};\n $scope.search.name = \"\";\n $scope.search.surname = \"\";\n $scope.search.lastname = \"\";\n $scope.search.historic_position = false;\n }\n\n if (angular.isDefined($scope.gridGuestsOptions)) {\n $scope.gridGuestsOptions.loadData(false);\n //quitamos la seleccion\n //$scope.gridGuestsOptions.gridApi.selection.clearSelectedRows();\n } else {\n $scope.gridGuestsOptions = {\n exporterMenuCsv: false,\n enableGridMenu: true,\n enableHiding: false,\n enableSelectionBatchEvent: true,//para obtener los seleccionados\n gridMenuShowHideColumns: false,\n paginationPageSizes: [5, 10, 25],\n paginationPageSize: 5,\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n this.gridApi.core.on.rowsRendered($scope, callbackFunctionItemChange);\n this.gridApi.selection.on.rowSelectionChanged($scope, callbackFunctionRowSelected);\n this.gridApi.selection.on.rowSelectionChangedBatch($scope, callbackFunctionRowSelected);\n\n },\n columnDefs: [\n { name: 'id', visible: false, enableFiltering: false, enableHiding: false, exporterSuppressExport: true },\n { name: 'positionId', visible: false, enableFiltering: false, enableHiding: false, exporterSuppressExport: true },\n\n {\n field: 'photo', nableFiltering: false, enableSorting: false,\n displayName: $filter('translate')('persons.photo'), cellTemplate: \"\", width: 70, enableFiltering: false\n },\n { name: 'program_emails', displayName: $filter('translate')('person.mail'), enableFiltering: true, enableSorting: true, enableHiding: false },\n { name: 'name', displayName: $filter('translate')('persons.name'), enableFiltering: true, enableSorting: true, enableHiding: false },\n { name: 'surname', displayName: $filter('translate')('persons.surname'), enableFiltering: true, enableSorting: true, enableHiding: false },\n { name: 'lastname', displayName: $filter('translate')('persons.lastname'), enableFiltering: true, enableSorting: true, enableHiding: false }\n ],\n getData: function (options) {\n $log.debug(options)\n var deferred = $q.defer();\n options.event_id = $scope.eventId,\n options.group_id = $scope.group_id,\n options.position_id = $scope.position_id,\n options.nameSearch = $scope.search.name,\n options.surnameSearch = $scope.search.surname,\n options.lastnameSearch = $scope.search.lastname;\n options.historic_position = $scope.search.historic_position;\n options.person_type = $scope.typePersonSelected.checked;\n options.save = false;\n\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + 'Notifications/SearchPersonsEmails',\n params: options\n }).then(function (results, status, headers, config) {\n var data = results.data.rows;\n var personsIds = [];\n angular.forEach(data, function (dataR) {\n if (personsIds.indexOf(dataR.id) < 0) {\n personsIds.push(dataR.id);\n }\n });\n //Obtenemos sus im�genes\n if (personsIds.length > 0) {\n $http({\n method: 'post',\n url: (window as any).CONFIG.api_url + 'Persons/ImagesSmall',\n params: { ids: personsIds }\n }).then(function (resultsImage, status, headers, config) {\n angular.forEach(data, function (person) {\n for (var i = 0; i < resultsImage.data.length; i++) {\n if (person.id == resultsImage.data[i].person_id) {\n person.photo = resultsImage.data[i].image_small;\n break;\n }\n }\n });\n });\n }\n data.totalRows = results.data.totalRows;\n $scope.totalRows = results.data.totalRows;\n deferred.resolve(data);\n\n });\n return deferred.promise;\n\n }\n }; //End gridoptions\n }\n };\n\n let callbackFunctionRowSelected = function (row, evt) {\n let addAll = row.length > 1;\n\n if (!addAll) {\n //buscamos si ya existe la persona a�adida\n var index = $scope.selectedRows.map(function (e) { return e; }).indexOf(row.entity.program_emails);\n if (index < 0) {\n if (row.isSelected) {\n $log.debug(row.entity.program_emails);\n $scope.selectedRows.push(row.entity.program_emails);\n } else {\n $log.debug(\"lo quita?\");\n $scope.selectedRows.splice(index, 1);\n }\n } else {\n if (!row.isSelected) $scope.selectedRows.splice(index, 1);\n }\n\n } else {\n if (row[0].isSelected) {\n //se ha seleccionado todo.\n $scope.selectedRows = [];\n for (let i = 0; i < $scope.gridGuestsOptions.gridApi.grid.options.totalItems; i++) { $scope.selectedRows.push(i); };\n } else {\n $scope.selectedRows = [];\n }\n\n }\n $log.debug($scope.selectedRows);\n };\n\n let callbackFunctionItemChange = function () {\n $timeout(function () {\n for (var i = 0; i < $scope.gridGuestsOptions.data.length; i++) {\n var row = $scope.gridGuestsOptions.data[i];\n for (var select = 0; select < $scope.selectedRows.length; select++) {\n let selected = $scope.selectedRows[select];\n $log.debug(row.program_emails, selected);\n if (row.program_emails == selected) {\n $scope.gridGuestsOptions.gridApi.selection.toggleRowSelection(row);\n break;\n }\n }\n }\n }, 350);//lo pongo as� porque sino falla la primera vez\n };\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n\n $scope.addGuests = function (continueOption) {\n\n var addAll = $scope.gridGuestsOptions.gridApi.selection.getSelectAllState();\n\n if (addAll) {\n let options: any = {};\n options.event_id = $scope.eventId,\n options.group_id = $scope.group_id,\n options.position_id = $scope.position_id,\n options.nameSearch = $scope.search.name,\n options.surnameSearch = $scope.search.surname,\n options.lastnameSearch = $scope.search.lastname;\n options.historic_position = $scope.search.historic_position;\n options.person_type = $scope.typePersonSelected.checked;\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + 'Notifications/SearchPersonsEmails',\n params: options\n }).then(function (results, status, headers, config) {\n var data = results.data.rows;\n $log.debug(data)\n var mailsSelected = new Array();\n angular.forEach(data, function (row) {\n $log.debug(row.program_emails);\n mailsSelected.push(row.program_emails);\n $log.debug(mailsSelected);\n });\n\n $uibModalInstance.close(mailsSelected);\n });\n } else {\n //Devolvemos el control al principal\n var mailsSelected = new Array();\n angular.forEach($scope.selectedRows, function (row) {\n $log.debug(row); \n mailsSelected.push(row);\n $log.debug(mailsSelected);\n });\n \n $uibModalInstance.close(mailsSelected);\n }\n\n };//savePersonPosition\n\n \n\n }])\n\n \n\n;","import './notifications_by_person';\nimport './notifications_by_person-list';\nimport './notifications_by_person-edit'; ","import NotificationsModalMailInfoView from \"../notifications/NotificationsModalMailInfo.html\";\n\n\n\nangular.module(\"notifications_by_person\")\n\n .controller(\"NotificationsByPersonEditModalCtrl\", ['$stateParams', 'notificationId', 'notificationToId', '$scope', '$uibModalInstance', '$uibModal', 'Restangular', '$filter', '$log',\n function ($stateParams, notificationId, notificationToId, $scope, $uibModalInstance, $uibModal, Restangular, $filter, $log) {\n \n $scope.showData = 'showInfo';\n $scope.eventId = null;\n if (typeof ($stateParams.id) !== 'undefined') {\n $scope.eventId = $stateParams.id;\n }\n\n Restangular.one('NotificationsEmails', notificationId).get().then(function (results) {\n $log.debug(results);\n $scope.notification = results;\n $scope.notification.content = (window as any).CONFIG.api_url + \"NotificationsAttachment/GetContentHTML?id=\" + $scope.notification.id;\n \n _.each($scope.notification.FK_notifications_attachments_notifications_emails, function (attachment) {\n attachment.downloadUrl = (window as any).CONFIG.api_url + 'NotificationsAttachment/getFile?uid=' + attachment.uid + '&filename=' + attachment.name\n });\n /*if ($scope.notification.program_template != null) {\n //Tiene programa, poner para que lo pueda descargar.\n if ($scope.notification.event_id != null) {\n $log.debug(\"Entra en: \" + $scope.notification.program_template, $scope.notification.event_id);\n\n Restangular.all('EventProgram').getList({ event_id: $scope.notification.event_id }).then(function (eventProgram) {\n $log.debug(eventProgram);\n if (eventProgram.length > 0) {\n $scope.eventProgramInformation = eventProgram[0];\n $log.debug(CONFIG.api_url + 'EventProgram/getFile?uid=' + $scope.eventProgramInformation.file_uid + '&filename=' + $scope.eventProgramInformation.filename);\n $scope.showFile = $scope.eventProgramInformation.filename != null;\n }\n });\n //window.open(CONFIG.api_url + 'EventProgram/getFile?uid=' + $scope.eventProgramInformation.file_uid + '&filename=' + $scope.eventProgramInformation.filename, '_blank', '');\n }\n }*/\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n \n\n $scope.downloadFile = function (attachment) {\n window.open(attachment.downloadUrl, '_blank', '');\n };\n\n $scope.downloadFiles = function () {\n _.each($scope.notification.FK_notifications_attachments_notifications_emails, function (attachment) {\n window.open(attachment.downloadUrl, '_blank', '');\n });\n };\n\n $scope.moreInfo = function () {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: NotificationsModalMailInfoView,\n controller: 'NotificationsModalMailInfoCtrl',\n size: 'lg',\n resolve: {\n id: function () { return notificationToId; }\n }\n });\n\n $modalInstance.result.then(function (bool) {\n toastr.success($filter('translate')('notifications.sending_mail_success'));\n $scope.gridOptionNotifications.gridApi.core.raise.itemDeleted($scope);\n });\n };\n \n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n }])\n\n\n /*.controller('NotificationsModalMailInfoCtrl', ['$scope', '$uibModalInstance', '$http', 'Restangular', '$filter', 'id', function ($scope, $uibModalInstance, $http, Restangular, $filter, id) {\n \n Restangular.one('NotificationsTo', id).get().then(function (result) {\n $scope.notificationsEmailInfo = result;\n });\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n }])*/\n\n;","import NotificationsByPersonEditModalView from \"./notifications_by_person-edit.html\";\n\n\n\nangular.module(\"notifications_by_person\")\n\n .controller('NotificationsByPersonListCtrl', ['$stateParams', '$rootScope', '$scope', 'Restangular', 'gridService', 'modalService', 'uiGridConstants', '$filter', 'LoginService', '$state', '$uibModal', '$log', function ($stateParams, $rootScope, $scope, Restangular, gridService, modalService, uiGridConstants, $filter, LoginService, $state, $uibModal, $log) {\n\n let eventId = null;\n let event = null;\n if (typeof ($stateParams.id) !== 'undefined') {\n $scope.showEventCombo = false;\n eventId = $stateParams.id;\n Restangular.one('Events', $stateParams.id).get().then(function (results) {\n event = results;\n });\n } else {\n $scope.showEventCombo = true;\n var options = {\n searchName: \"\",\n is_template: false\n };\n Restangular.all('Events/AllEvents').getList(options).then(function (events) {\n $log.debug($scope.selectEvents);\n $scope.selectEvents = events;\n $scope.selectEvents.unshift({\n id: null,\n name: $filter('translate')('informations.all')\n });\n });\n\n }\n \n $rootScope.title = $filter('translate')('notifications_by_person.title');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('notifications.list') }\n ];\n\n $scope.search = {\n subject: \"\",\n date_from: null,\n date_to: null,\n event_id : eventId\n };\n\n $scope.sendStatus = [\n { text: $filter('translate')('notifications.sending'), value: 'pending', checked: false },\n { text: $filter('translate')('notifications.sent'), value: 'sent', checked: false },\n { text: $filter('translate')('notifications.sent_error'), value: 'error', checked: false }\n ];\n /* $scope.sendToGroup = [\n { text: $filter('translate')('notifications.users'), value: 'users', checked: false },\n { text: $filter('translate')('notifications.guests'), value: 'guests', checked: false },\n { text: $filter('translate')('notifications.staff'), value: 'staff', checked: false },\n { text: $filter('translate')('notifications.work_team'), value: 'work_team', checked: false }\n ];*/\n \n\n $scope.gridOptionNotifications = {\n pdfTitle: $filter('translate')('notifications.pdf_title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n paginationPageSizes: [10, 20, 30],\n paginationPageSize: 10,\n enableFiltering: false,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n {\n name: 'state', displayName: \" \", enableFiltering: false, enableHiding: false, enableColumnMenu: false, width: 90,\n cellTemplate: '
' + $filter('translate')('notifications.sent_error') + '' + $filter('translate')('notifications.sending') + '' + $filter('translate')('notifications.sent') +'
',\n },\n {\n name: 'FK_notifications_to_notifications_emails.date', displayName: $filter('translate')('notifications.date'), maxWidth: 125, minWidth: 80,\n type: 'FK_notifications_to_notifications_emails.date', cellFilter: 'toLocalDate | date:\\'dd/MM/yyyy HH:mm\\'',\n customFormatFn: function (value) {\n if (value !== null) {\n var fecha = new Date(value);\n return $filter('FK_notifications_to_notifications_emails.date')(fecha, 'dd/MM/yyyy');\n }\n return \"\";\n } , \n enableFiltering: false, enableColumnMenu: false,enableSorting: false\n },\n {\n name: 'FK_notifications_to_notifications_emails.FK_notifications_emails_events.name',\n displayName: $filter('translate')('notifications.event'), enableFiltering: false, enableHiding: false, enableColumnMenu: false, enableSorting: false,\n visible: (eventId != null ? false : true)\n },\n { name: 'FK_notifications_to_notifications_emails.subject', displayName: $filter('translate')('notifications.subject'), enableFiltering: true, enableHiding: false, enableColumnMenu: false, enableSorting: false },\n { name: 'mails', displayName: $filter('translate')('notifications.mails'), enableFiltering: true, enableHiding: false, enableColumnMenu: false },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('notifications.button_view'), action: 'ng-click=\"grid.appScope.goToEdit(row.entity)\"', cssIconClass: \"fa fa-eye\" },\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n options.subject = $scope.search.subject;\n options.email = $scope.search.email;\n options.date_from = $scope.search.date_from;\n options.date_to = $scope.search.date_to;\n options.event_id = $scope.search.event_id;\n if (eventId != null) options.event_id = eventId;\n options.states = _.chain($scope.sendStatus)\n .filter(function (status) { return status.checked; })\n .map(function (status) { return status.value; })\n .value();\n $log.debug(options.states);\n return Restangular.all('NotificationsEmails/GetNotificationByUser').getList(options);\n }\n \n };\n\n $scope.searchNotifications = function () {\n if (angular.isDefined($scope.gridOptionNotifications.loadData)) {\n $scope.gridOptionNotifications.loadData(false);\n }\n };\n\n $scope.clearform = function () {\n $scope.search = {\n event_id: null,\n email: \"\",\n subject: \"\",\n date_from: null,\n date_to: null\n };\n $scope.sendStatus = [\n { text: $filter('translate')('notifications.sending'), value: 'pending', checked: false },\n { text: $filter('translate')('notifications.sent'), value: 'sent', checked: false },\n { text: $filter('translate')('notifications.sent_error'), value: 'error', checked: false }\n ];\n\n $scope.gridOptionNotifications.loadData();\n }\n\n\n $scope.goToEdit = function (rowEntity) {\n if (eventId != null) {\n $state.go(\"events.edit.notifications_by_person.edit\", { id: eventId, notificationId: rowEntity.FK_notifications_to_notifications_emails.id });\n } else {\n //$state.go(\"notifications_by_person.edit\", { notificationId: rowEntity.id });\n //Popup.\n let $modalInstance = $uibModal.open({\n animation: true,\n template: NotificationsByPersonEditModalView,\n size: \"lg\",\n controller: \"NotificationsByPersonEditModalCtrl\",\n scope: $scope,\n resolve: {\n notificationId: function () {\n return rowEntity.FK_notifications_to_notifications_emails.id;\n },\n notificationToId: function () {\n return rowEntity.id;\n }\n }\n });\n //Response del modal\n $modalInstance.result.then(function (data) {\n $scope.gridOptionNotifications.loadData(false);\n if (!$scope.$$phase) $scope.$apply();\n $scope.$parent.loadInfo($stateParams.id);\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n if (!$scope.$$phase) $scope.$apply();\n });\n }\n };\n\n\n }])\n\n;","import BreadcrumbView from \"../common/breadcrumb/breadcrumb.html\";\nimport NotificationsByPersonListView from \"./notifications_by_person-list.html\";\n\n\nangular.module(\"notifications_by_person\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('notifications_by_person', {\n url: \"/notifications_by_person\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n })\n .state('notifications_by_person.list', {\n url: \"/list\",\n controller: \"NotificationsByPersonListCtrl\",\n template: NotificationsByPersonListView,\n cache: false,\n data: { pageTitle: 'Historico' },\n requiredPermission: [\"NOTIFICATIONS_READ\"]\n })\n ;\n }])\n;","import './passbooks';\nimport './passbooks-list';\nimport './passbooks-edit';","import PassbookNewFieldModalView from \"./PassbookNewFieldModal.html\";\n\n\nangular.module('passbooks')\n .controller(\"PassbookEditCtrl\", ['LoginService', '$scope', '$rootScope', '$state', '$stateParams', 'Restangular', 'gridService', '$filter', '$translate', 'modalService', '$uibModal', 'Upload', 'uiGridConstants',\n function (LoginService, $scope, $rootScope, $state, $stateParams, Restangular, gridService, $filter, $translate, modalService, $uibModal, Upload, uiGridConstants) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = true // LoginService.permissionExist(\"passbookS_WRITE\");\n $rootScope.title = $filter('translate')('passbooks.title');\n $scope.passbook = {\n primary_field: { type: \"primary\" },\n extra_fields: [],\n background_color: \"#ffffff\",\n barcode_text: \"[GUEST_GUID]\"\n };\n\n $scope.passbook_types = [\n { id: \"QR\", name: 'QR' },\n { id: \"PDF417\", name: 'PDF417' },\n { id: \"Aztec\", name: 'Aztec' },\n { id: \"CODE128\", name: 'CODE128' },\n ];\n \n $scope.showImg = \"\";\n\n $scope.configurePassbooksFields = function () {\n let i = 0;\n $scope.passbook.extra_fields.forEach(function (f) {\n f.inGrid = true;\n })\n $scope.gridExtraFields.data = $scope.passbook.extra_fields; \n }\n\n Restangular.all('Locations', { located_in_gps_only: true }).getList().then(results => $scope.selectLocations = results);\n\n if (angular.isUndefined($stateParams.id) || $stateParams.id == \"\") {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('passbooks.title'), url: \"passbooks.list\" },\n { title: $filter('translate')('passbooks.title_add') },\n ];\n } else {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('passbooks.title'), url: \"passbooks.list\" },\n { title: $filter('translate')('passbooks.title_edit') },\n ];\n\n Restangular.one('Passbooks', $stateParams.id).get().then(function (result) {\n $scope.passbook = result;\n $scope.passbookType = $scope.passbook_types.filter(function (item) { return item.id === $scope.passbook.barcode_type })[0];\n if($scope.passbook.expiration_date != null && $scope.passbook.expiration_date !== \"\" && $scope.passbook.expiration_date !== \"null\") {\n $scope.passbook.expiration_date = new Date($scope.passbook.expiration_date);\n }\n if ($scope.passbook.start_date != null && $scope.passbook.start_date !== \"\" && $scope.passbook.start_date !== \"null\") {\n $scope.passbook.start_date = new Date($scope.passbook.start_date);\n }\n $scope.configurePassbooksFields();\n });\n\n // Gestionamos las imagenes e Iconos \n\n Restangular.all('Files').getList({ entity_type: 'passbooks', entity_type_id: $stateParams.id }).then(function (result) {\n result ? $scope.strip_image = result[0] : \"\";\n if ($scope.strip_image != null) {\n Restangular.one(`Files/${$scope.strip_image.uid}/download/b64`).get().then(function (result) {\n $scope.showImg = `data:image/jpeg;base64,${result}`;\n })\n }\n });\n // Gestionamos los iconos\n Restangular.all('Files').getList({ entity_type: 'passbooks_icon_1', entity_type_id: $stateParams.id }).then(function (result) {\n result ? $scope.icon1 = result[0] : \"\";\n if ($scope.icon1 != null) {\n Restangular.one(`Files/${$scope.icon1.uid}/download/b64`).get().then(function (result) {\n $scope.showicon1 = `data:image/jpeg;base64,${result}`;\n })\n }\n });\n\n Restangular.all('Files').getList({ entity_type: 'passbooks_icon_2', entity_type_id: $stateParams.id }).then(function (result) {\n result ? $scope.icon2 = result[0] : \"\";\n if ($scope.icon2 != null) {\n Restangular.one(`Files/${$scope.icon2.uid}/download/b64`).get().then(function (result) {\n $scope.showicon2 = `data:image/jpeg;base64,${result}`;\n })\n }\n });\n\n Restangular.all('Files').getList({ entity_type: 'passbooks_icon_3', entity_type_id: $stateParams.id }).then(function (result) {\n result ? $scope.icon3 = result[0] : \"\";\n if ($scope.icon3 != null) {\n Restangular.one(`Files/${$scope.icon3.uid}/download/b64`).get().then(function (result) {\n $scope.showicon3 = `data:image/jpeg;base64,${result}`;\n })\n }\n });\n Restangular.all('Files').getList({ entity_type: 'passbooks_icon_3', entity_type_id: $stateParams.id }).then(function (result) {\n result ? $scope.icon3 = result[0] : \"\";\n if ($scope.icon3 != null) {\n Restangular.one(`Files/${$scope.icon3.uid}/download/b64`).get().then(function (result) {\n $scope.showicon3 = `data:image/jpeg;base64,${result}`;\n })\n }\n });\n\n// Gestionamos el logo\n\n Restangular.all('Files').getList({ entity_type: 'passbooks_logo', entity_type_id: $stateParams.id }).then(function (result) {\n result ? $scope.logo = result[0] : \"\";\n if ($scope.logo != null) {\n Restangular.one(`Files/${$scope.logo.uid}/download/b64`).get().then(function (result) {\n $scope.showLogo = `data:image/jpeg;base64,${result}`;\n })\n }\n });\n\n }\n\n $scope.selectImage = function () {\n $(\"#frmImage\").trigger(\"click\");\n $(\"#frmImage\").change(function () {\n const imageElement = document.querySelector('#frmImage') as HTMLInputElement;\n const file = imageElement?.files?.[0];\n if (file) {\n const fileReader = new FileReader();\n fileReader.onload = function (event) {\n const src = (event.target as FileReader).result;\n $scope.showImg = src;\n if (!$scope.$$phase) $scope.$apply();\n };\n fileReader.readAsDataURL(file);\n $scope.file = file;\n } \n });\n };\n\n $scope.selecticon = function (num) {\n $(\"#frmicon\" + num).trigger(\"click\");\n $(\"#frmicon\" + num).change(function () {\n const iconElement = document.querySelector('#frmicon' + num) as HTMLInputElement;\n const file = iconElement?.files?.[0];\n if (file) {\n const fileReader = new FileReader();\n fileReader.onload = function (event) {\n const src = (event.target as FileReader).result;\n switch (num) {\n case 1:\n $scope.showicon1 = src;\n break;\n case 2:\n $scope.showicon2 = src;\n break;\n case 3:\n $scope.showicon3 = src;\n break;\n }\n if (!$scope.$$phase) $scope.$apply();\n };\n fileReader.readAsDataURL(file);\n switch (num) {\n case 1:\n $scope.file_icon1 = file;\n break;\n case 2:\n $scope.file_icon2 = file;\n break;\n case 3:\n $scope.file_icon3 = file;\n break;\n }\n }\n });\n };\n\n\n $scope.selectLogo = function () {\n $(\"#frmLogo\").trigger(\"click\");\n $(\"#frmLogo\").change(function () {\n const logoElement = document.querySelector('#frmLogo') as HTMLInputElement;\n const file = logoElement?.files?.[0];\n if (file) {\n const fileReader = new FileReader();\n fileReader.onload = function (event) {\n const src = (event.target as FileReader).result;\n $scope.showLogo = src;\n if (!$scope.$$phase) $scope.$apply();\n };\n fileReader.readAsDataURL(file);\n $scope.file_logo = file;\n }\n });\n };\n\n $scope.getImage = function () {\n if ($scope.showImg && $scope.showImg != \"\") {\n return $scope.showImg;\n } else {\n return \"assets/img/no-image.png\";\n }\n };\n\n $scope.geticon = function (num) {\n switch (num) {\n case 1:\n if ($scope.showicon1 && $scope.showicon1 != \"\") {\n return $scope.showicon1;\n } else {\n return \"assets/img/no-image.png\";\n }\n break;\n case 2:\n if ($scope.showicon2 && $scope.showicon2 != \"\") {\n return $scope.showicon2;\n } else {\n return \"assets/img/no-image.png\";\n }\n break;\n case 3:\n if ($scope.showicon3 && $scope.showicon3 != \"\") {\n return $scope.showicon3;\n } else {\n return \"assets/img/no-image.png\";\n }\n break;\n }\n };\n\n\n $scope.getLogo = function () {\n if ($scope.showLogo && $scope.showLogo != \"\") {\n return $scope.showLogo;\n } else {\n return \"assets/img/no-image.png\";\n }\n };\n\n\n $scope.removeImage = function ( $event) {\n event.stopPropagation();\n $scope.showImg = null;\n $scope.file = null;\n if (typeof ($event) !== \"undefined\") {\n $event.preventDefault();\n $event.stopPropagation();\n }\n };\n\n $scope.removeicon = function (num, $event) {\n event.stopPropagation();\n switch (num) {\n case 1:\n $scope.showicon1 = null;\n $scope.file_icon1 = null;\n break;\n case 2:\n $scope.showicon2 = null;\n $scope.file_icon2 = null;\n break;\n case 3:\n $scope.showicon3 = null;\n $scope.file_icon3 = null;\n break;\n }\n if (typeof ($event) !== \"undefined\") {\n $event.preventDefault();\n $event.stopPropagation();\n }\n };\n\n\n $scope.removeLogo = function ($event) {\n event.stopPropagation();\n $scope.showLogo = null;\n $scope.file_logo = null;\n if (typeof ($event) !== \"undefined\") {\n $event.preventDefault();\n $event.stopPropagation();\n }\n };\n\n let uploadFile = function (id) {\n $scope.file.upload = Upload.upload({\n url: (window as any).CONFIG.api_url + \"Files/uploadFile\",\n data: { file: $scope.file, id: 0, entity_type: \"passbooks\", entity_type_id: id, is_public: \"true\"},\n });\n\n $scope.file.upload.then(function (response) {\n }, function (response) {\n if (response.status > 0) {\n let errorMsg = response.status + ': ' + response.data;\n toastr.error(\"Ha ocurrido un error: \" + errorMsg);\n }\n });\n }\n\n let uploadicons = function (id, num) {\n switch (num) {\n case 1:\n $scope.file_icon1.upload = Upload.upload({\n url: (window as any).CONFIG.api_url + \"Files/uploadFile\",\n data: { file: $scope.file_icon1, id: 0, entity_type: \"passbooks_icon_1\", entity_type_id: id, is_public: \"true\" },\n });\n\n $scope.file_icon1.upload.then(function (response) {\n }, function (response) {\n if (response.status > 0) {\n let errorMsg = response.status + ': ' + response.data;\n toastr.error(\"Ha ocurrido un error: \" + errorMsg);\n }\n });\n break;\n case 2:\n $scope.file_icon2.upload = Upload.upload({\n url: (window as any).CONFIG.api_url + \"Files/uploadFile\",\n data: { file: $scope.file_icon2, id: 0, entity_type: \"passbooks_icon_2\", entity_type_id: id, is_public: \"true\" },\n });\n\n $scope.file_icon2.upload.then(function (response) {\n }, function (response) {\n if (response.status > 0) {\n let errorMsg = response.status + ': ' + response.data;\n toastr.error(\"Ha ocurrido un error: \" + errorMsg);\n }\n });\n break;\n case 3:\n $scope.file_icon3.upload = Upload.upload({\n url: (window as any).CONFIG.api_url + \"Files/uploadFile\",\n data: { file: $scope.file_icon3, id: 0, entity_type: \"passbooks_icon_3\", entity_type_id: id, is_public: \"true\" },\n });\n\n $scope.file_icon3.upload.then(function (response) {\n }, function (response) {\n if (response.status > 0) {\n let errorMsg = response.status + ': ' + response.data;\n toastr.error(\"Ha ocurrido un error: \" + errorMsg);\n }\n });\n break;\n }\n };\n\n\n let uploadLogo = function (id) {\n $scope.file_logo.upload = Upload.upload({\n url: (window as any).CONFIG.api_url + \"Files/uploadFile\",\n data: { file: $scope.file_logo, id: 0, entity_type: \"passbooks_logo\", entity_type_id: id, is_public: \"true\" },\n });\n\n $scope.file_logo.upload.then(function (response) {\n }, function (response) {\n if (response.status > 0) {\n let errorMsg = response.status + ': ' + response.data;\n toastr.error(\"Ha ocurrido un error: \" + errorMsg);\n }\n });\n }\n\n let manageFile = function (id) {\n if ($scope.file) { uploadFile(id) };\n if ($scope.strip_image && ($scope.file || !$scope.showImg)) { $scope.strip_image.remove() }\n }\n\n let manageicons = function (id) {\n if ($scope.file_icon1) { uploadicons(id,1) };\n if ($scope.icon1 && ($scope.file_icon1 || !$scope.showicon1)) { $scope.icon1.remove() }\n if ($scope.file_icon2) { uploadicons(id,2) };\n if ($scope.icon2 && ($scope.file_icon2 || !$scope.showicon2)) { $scope.icon2.remove() }\n if ($scope.file_icon3) { uploadicons(id, 3) };\n if ($scope.icon3 && ($scope.file_icon3 || !$scope.showicon3)) { $scope.icon3.remove() }\n };\n\n\n let manageLogo = function (id) {\n if ($scope.file_logo) { uploadLogo(id) };\n if ($scope.logo && ($scope.file_logo || !$scope.showLogo)) { $scope.logo.remove() }\n }\n\n\n // Gestión de campos \n $scope.addField = function (field) {\n\n field ? $scope.newField = field : $scope.newField = {};\n\n let $modalInstance = $uibModal.open({\n animation: true,\n template: PassbookNewFieldModalView,\n controller: \"PassbookNewFieldModalCtrl\",\n resolve: {},\n scope: $scope,\n size: 'lg'\n });\n };\n \n $scope.removeField = function (field) {\n let index = $scope.passbook.extra_fields.indexOf(field)\n $scope.passbook.extra_fields.splice(index, 1);\n };\n\n // Campos adicionales \n $scope.gridExtraFields = {\n pdfTitle: $filter('translate')('passbooks.extra_fields'),\n enableGridMenu: false,\n gridMenuShowHideColumns: false,\n enableSorting: true,\n enablePaginationControls: false,\n paginationPageSizes: [5, 10, 15],\n paginationPageSize: 5,\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n { name: 'field_order', displayName: $filter('translate')('passbooks.field_order'), enableSorting: true, enableHiding: false, visible: true, enableCellEdit: true, type:'number', width: 200 },\n { name: 'type', displayName: $filter('translate')('passbooks.type'), enableFiltering: false, enableHiding: false, visible: true, enableCellEdit: true, width: 150 },\n { name: 'label', displayName: $filter('translate')('passbooks.label'), enableFiltering: false, enableHiding: false, visible: true, enableCellEdit: true, width: 150 },\n { name: 'value', displayName: $filter('translate')('passbooks.value'), enableFiltering: false, enableHiding: false, visible: true, enableCellEdit: true },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, enableCellEdit: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('general.button_edit'), action: 'ng-click=\"grid.appScope.addField(row.entity);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('general.button_delete'), action: 'ng-click=\"grid.appScope.removeField(row.entity);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n };\n \n $scope.testPassbook = function () {\n window.open((window as any).CONFIG.api_url + \"Passbooks/test/\" + $scope.passbook.id, '_blank');\n };\n\n $scope.savePassbook = function () {\n $scope.passbook.primary_field.type = 'primary';\n $scope.passbook.barcode_type = $scope.passbookType.id;\n if (angular.isDefined($scope.passbook.id)) {\n $scope.passbook.put().then(function (result) {\n if (angular.isDefined(result.id)) {\n manageFile(result.id);\n manageicons(result.id);\n manageLogo(result.id);\n toastr.success($filter('translate')('passbooks.edit_success'));\n $state.go(\"passbooks.list\");\n } else {\n $scope.errorMessage = result.message;\n }\n });\n } else {\n Restangular.all('Passbooks').post($scope.passbook).then(function (result) {\n if (angular.isDefined(result.id)) {\n manageFile(result.id);\n manageicons(result.id);\n manageLogo(result.id);\n toastr.success($filter('translate')('passbooks.save_success'));\n $state.go(\"passbooks.list\");\n } else {\n $scope.errorMessage = result.message;\n }\n });\n } \n }\n\n $scope.checkDelete = function () {\n modalService.confirm({\n title: $filter('translate')('passbooks.delete_message'),\n message: $filter('translate')('passbooks.delete_message') + \" \" + $scope.passbook.name + \"?\",\n onAccept: function () {\n if ($scope.strip_image) { $scope.strip_image.remove() };\n $scope.passbook.remove().then(function () {\n toastr.success($filter('translate')('passbooks.deleted_success'));\n $state.go(\"passbooks.list\");\n });\n }\n });\n };\n }])\n\n .controller(\"PassbookNewFieldModalCtrl\", ['$scope', '$uibModalInstance', 'modalService', '$filter', function ($scope, $uibModalInstance, modalService, $filter) {\n\n $scope.modalSelect = [{ name: 'header' }, { name: 'secondary' }, { name: 'auxiliary' }, { name: 'back' }];\n\n $scope.newFieldTitle = $scope.newField.id ? ($filter('translate')('passbooks.field_edit')) : ($filter('translate')('passbooks.field_add'));\n let defaultPosition;\n // Sugerimos una posición por defecto\n let orderList = $scope.passbook.extra_fields.map(f => f.field_order);\n\n if (orderList.length > 0) {\n defaultPosition = Math.max(...orderList) + 1;\n }\n if (!defaultPosition) {\n defaultPosition = 1;\n };\n\n $scope.newField.field_order = $scope.newField.field_order ?? defaultPosition;\n\n $scope.onCancel = function () {\n $scope.newField = {};\n $uibModalInstance.dismiss('cancel');\n };\n\n $scope.onAccept = function () {\n if (!$scope.newField.inGrid) {\n $scope.passbook.extra_fields.push($scope.newField);\n };\n $scope.configurePassbooksFields();\n $scope.newField = {};\n $uibModalInstance.close();\n };\n\n }]);","angular.module('passbooks')\n\n .controller(\"PassbooksListCtrl\", ['$rootScope', '$scope', 'Restangular', 'gridService', 'modalService', '$uibModal', '$filter','$state', '$log',\n function ($rootScope, $scope, Restangular, gridService, modalService, $uibModal, $filter, $state, $log) {\n\n $rootScope.title = $filter('translate')('passbooks.title');\n $log.debug($filter('translate')('passbooks.title'));\n $rootScope.breadcrumb = [\n { title: $filter('translate')('passbooks.title') }\n ];\n\n $scope.allowWrite = true //LoginService.permissionExist(\"AUTHENTICATION_SERVICES_WRITE\");\n\n $scope.gridOptions = {\n pdfTitle: $filter('translate')('passbooks.title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n enableSorting: true,\n paginationPageSizes: [10, 20, 30],\n paginationPageSize: 10,\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: true, enableHiding: false, exporterSuppressExport: true, maxWidth: 100},\n { name: 'name', displayName: $filter('translate')('general.name'), enableFiltering: true, enableHiding: false },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('general.button_edit'), action: 'ui-sref=\"passbooks.edit({id:row.entity.id})\"; ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('general.button_delete'), action: 'ng-click=\"grid.appScope.deleteDialog(row.entity.id,row.entity.name);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n return Restangular.all('Passbooks').getList(options)\n }\n };\n\n\n $scope.goToEdit = function (id) {\n $state.go(\"passbooks.edit\", { id: id });\n };\n\n\n $scope.deleteDialog = function (id, name) {\n $scope.id = id;\n $scope.name = name;\n modalService.confirm({\n title: $filter('translate')('passbooks.button_delete'),\n message: $filter('translate')('passbooks.delete_message') + \" \" + $scope.name + \"?\",\n onAccept: function () {\n Restangular.one('Passbooks', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('passbooks.deleted_success'));\n $scope.gridOptions.gridApi.core.raise.itemDeleted($scope);\n\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n });\n\n\n }\n }])","import BreadcrumbView from \"../common/breadcrumb/breadcrumb.html\";\nimport PassbooksListView from \"./passbooks-list.html\";\nimport PassbooksEditView from \"./passbooks-edit.html\";\n\n\nangular.module(\"passbooks\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('passbooks', {\n url: \"/passbooks\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n })\n .state('passbooks.list', {\n url: \"/list\",\n controller: \"PassbooksListCtrl\",\n template: PassbooksListView, \n // requiredPermission: [\"NOTIFICATIONS_READ\"]\n })\n .state('passbooks.edit', {\n url: \"/edit/:id\",\n controller: \"PassbookEditCtrl\",\n template: PassbooksEditView,\n // requiredPermission: [\"NOTIFICATIONS_READ\"]\n });\n }]);","import './persons';\nimport './persons-list';\nimport './persons-edit';\nimport \"./attended_events-edit\";\nimport \"./import/person-import\";\nimport './persons_duplicates-list'; \nimport './persons_duplicates-merge'; ","angular.module(\"persons\")\n\n .controller(\"AttendedEventsModalCtrl\", ['$state', 'LoginService', '$scope', '$uibModalInstance', 'Restangular', 'modalService', '$filter', 'person_id', '$http', 'treeService', '$uibModal', 'gridService', '$q', '$interval', '$timeout', 'uiGridConstants', function ($state, LoginService, $scope, $uibModalInstance, Restangular, modalService, $filter, person_id, $http, treeService, $uibModal, gridService, $q, $interval, $timeout, uiGridConstants) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"GROUPS_WRITE\");\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n $scope.goToEvent = function (rowEntity) {\n $scope.onCancel();\n $state.go(\"events.edit.guests\", { id: rowEntity.FK_events_guests_events.id });\n };\n\n /* GRIDS */\n $scope.gridAttendedEvents = {\n pdfTitle: $filter('translate')('persons.attended_events'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n paginationPageSizes: [10, 20, 30],\n paginationPageSize: 10,\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, exporterSuppressExport: true },\n {\n name: 'event_name', field: 'FK_events_guests_events.name', displayName: $filter('translate')('persons.event_name'), enableColumnMenu: false, enableFiltering: true, enableHiding: false,\n cellTemplate: ''\n },\n {\n name: 'date', field: 'FK_events_guests_events.date_from', displayName: $filter('translate')('persons.date'),\n type: 'date', cellFilter: 'toLocalDate | date:\\'dd/MM/yyyy\\'', enableColumnMenu: false, enableFiltering: false, width: 100,\n customFormatFn: function (value) {\n if (value != null) {\n var fecha = new Date(value);\n return $filter('date')(fecha, 'dd/MM/yyyy');\n }\n return \"\";\n },\n },\n {\n name: 'confirmation_status', displayName: $filter('translate')('events.guests.status'), enableColumnMenu: false, enableFiltering: false, enableHiding: false,width: 100,\n cellTemplate: '
{{\\'events.guests.pending\\' | translate}}
' +\n '
{{\\'events.guests.confirmed\\' | translate}}
' +\n '
{{\\'events.guests.delegated\\' | translate}}
' +\n '
{{\\'events.guests.rejected\\' | translate}}
',\n customFormatFn: function (value) {\n if (value != null) {\n return $filter('translate')('events.guests.'+value);\n }\n return \"\";\n },\n }\n ],\n getData: function (options) {\n options.person_id = person_id;\n return Restangular.all('Persons/AttendedEvents').getList(options);\n }\n };\n\n\n}])\n;","angular.module(\"persons\")\n\n .controller(\"PersonsImportCtrl\", ['$scope', '$stateParams',\n function ($scope, $stateParams) {\n $scope.people = $stateParams.people;\n $scope.person_type = $stateParams.person_type;\n }]);","import html2canvas from \"html2canvas\";\n\nimport AddGroupModalView from \"./addGroupModal.html\";\nimport PositionModalView from \"../groups/PositionModal.html\";\nimport PersonPositionAddressModalView from \"./PersonPositionAddressModal.html\";\nimport PersonPositionContactModalView from \"./PersonPositionContactModal.html\";\nimport AttendedEventsModalView from \"./AttendedEventsModal.html\";\nimport AllowedUsersModalView from \"./AllowedUsersModal.html\";\nimport TagsModalView from \"../tags/TagsModal.html\";\nimport AssignTagsPersonModalView from \"../tags/AssignTagsModal.html\";\n\nangular.module(\"persons\")\n .controller(\"PersonsEditCtrl\", ['foldersService', 'LoginService', 'notificationService', '$http', '$filter', '$scope', '$rootScope', '$controller', '$state', '$stateParams', 'Restangular', '$uibModal', 'modalService', '$compile', 'gridService', 'treeService', '$sce', '$q', '$interval', '$timeout', 'uiGridConstants', '$log',\n function (foldersService, LoginService, notificationService, $http, $filter, $scope, $rootScope, $controller, $state, $stateParams, Restangular, $uibModal, modalService, $compile, gridService, treeService, $sce, $q, $interval, $timeout, uiGridConstants, $log) {\n\n $scope.urlApi = (window as any).CONFIG.api_url;\n\n $scope.changesNotSaved = false;\n //Comprobamos si la empresa tiene marcado la opción de el artículo 10 para mostrar las opciones en consecuencia\n $scope.tagsInFilter = [];\n $scope.article10 = false;\n $scope.article12 = false;\n $scope.default_order_article = \"article12\";\n $scope.is_duplicate = false;\n\n\n let limit_image_height = 0;\n let limit_image_width = 0;\n\n $scope.loadCompany = function () {\n Restangular.one('Companies', $rootScope.company_id).get().then(function (results) {\n $scope.app_enabled = results.public_guest_app_enabled;\n if (results.article_10 == true) { $scope.article10 = true; }\n if (results.article_12 == true) { $scope.article12 = true; }\n $scope.default_order_article = results.default_order_article;\n $scope.private_people_enabled = results.private_people_enabled;\n $scope.private_people_enabled = results.private_people_enabled;\n $scope.military_groups_enabled = results.military_groups_enabled;\n const languageDefault = $scope.selectLanguages.filter(pt => { return pt.id == results.language_id });\n $scope.selectedLanguage = languageDefault[0];\n });\n\n }\n\n setTimeout(function () {\n $scope.loadCompany();\n }, 200);\n\n\n let checkIfPositionIsVisible = function (personPosition) {\n\n if (personPosition.position_type == 'civil') {\n return (personPosition.FK_persons_positions_positions.FK_positions_groups.is_historic || !$scope.person_groups.active)\n } else if (personPosition.position_type == 'militar') {\n return (personPosition.FK_persons_positions_positions.FK_positions_groups.is_historic || !$scope.person_groups_militar.active)\n }\n\n return false;\n\n }\n\n $scope.checkPositionVisibility = function () {\n $scope.person.FK_persons_positions_persons.forEach(function (position) {\n position.show = checkIfPositionIsVisible(position);\n })\n }\n $scope.loadPersonsTreatments = function (reload) {\n Restangular.all('PersonsTreatments').getList().then(function (treatments) {\n $scope.personTreatments = treatments;\n const personDefault = $scope.personTreatments.filter(pt => { return pt.person_default });\n $scope.selectedTreatment = personDefault[0];\n });\n\n };\n\n $scope.loadPersonsTreatments(false);\n\n let GetAllowedUsers = function () {\n Restangular.all(\"Persons\").customGET(\"GetAllowedUsers\", { id: $scope.person.id }).then(function (results) {\n $scope.allowedUsers = results;\n })\n };\n let GetAllowedGroups = function () {\n Restangular.all(\"Persons\").customGET(\"GetAllowedGroups\", { id: $scope.person.id }).then(function (results) {\n $scope.allowedGroups = results;\n })\n };\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"PERSONS_WRITE\");\n $scope.allowDelete = LoginService.permissionExist(\"PERSONS_DELETE\");\n $scope.allowDiscard = LoginService.permissionExist(\"PERSONS_DISCARD\");\n $scope.allowFoldersFiles = LoginService.permissionExist(\"FILES_READ\");\n\n //Usar estas variables, ya que se reutiliza el controlador en otro lado.\n $scope.stateParams_person_type = $stateParams.person_type;\n $scope.stateParams_id = $stateParams.id;\n $scope.personsIds = $stateParams.personsIds;\n $scope.personOptions = function (options) {\n // $log.debug(options);\n $scope.stateParams_person_type = options.person_type;\n $scope.callbackClose = options.callbackClose;\n $scope.stateParams_id = \"\";\n $scope.person.person_type = options.person_type;\n };\n\n var savedOptions = JSON.parse(localStorage.getItem(\"persons_options\"));\n\n //preparamos barra de navegacion\n $scope.navigation = {\n _page: -1,\n _pageSize: 1,\n _pages: 1\n };\n\n let prepareTitle = function () {\n if ($stateParams.person_type == 'authority') {\n $rootScope.title = $filter('translate')('persons.subtitle');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('persons.title'), url: \"persons.list({ person_type: '\" + $stateParams.person_type + \"', reset: false })\" }\n ];\n }\n\n /*\n else if ($stateParams.person_type == 'other') {\n $rootScope.title = $filter('translate')('persons.title_other');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('persons.subtitle_other') }\n ];\n }\n else if ($stateParams.person_type == 'inactive') {\n $rootScope.title = $filter('translate')('persons.title_inactive');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('persons.title_inactive') }\n ];\n }\n */\n\n else if ($stateParams.person_type == 'anonymous') {\n $rootScope.title = $filter('translate')('persons.title_anonymous');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('persons.title_anonymous') }\n ];\n }\n else if ($stateParams.person_type == 'imported') {\n $rootScope.title = $filter('translate')('persons.title_imported');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('persons.title_imported') }\n ];\n }\n else if ($stateParams.person_type == 'enrolled') {\n $rootScope.title = $filter('translate')('inscriptions_forms.inscripted');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('inscriptions_forms.inscripted') }\n ];\n } else {\n $rootScope.title = $filter('translate')('persons.title_all');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('persons.title_all') }\n ];\n }\n\n // Comprobamos si venimos desde duplicates_list y actualizamos el breadcrump en consecuencia\n\n if ($stateParams.coming_from_duplicates == true) {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('persons.duplicates_title'), url: \"persons.duplicates_list\" }\n ];\n }\n }\n\n $scope.prepareNavigationBar = function () {\n\n prepareTitle();\n $scope.changesNotSaved = false;\n var idxArrayPersonsResults = 0;\n\n if ($scope.navigation._page != -1) {\n\n //if (savedOptions._pageSize < $scope.navigation._page) {\n // idxArrayPersonsResults = $scope.navigation._page - savedOptions._pageSize;\n //} else {\n\n idxArrayPersonsResults = $scope.navigation._page;\n\n //}\n\n $scope.stateParams_id = $scope.personsIds[idxArrayPersonsResults - 1];\n $scope.loadPerson(false);\n } else {\n if(savedOptions != null) {\n $scope.navigation._page = savedOptions.row_index + 1;\n $scope.navigation._pages = savedOptions.totalRows;\n }\n }\n };\n\n $scope.prepareNavigationBar();\n $scope.navigatePrevious = function () {\n if ($scope.navigation._page > 1) $scope.navigation._page--;\n $scope.prepareNavigationBar();\n };\n $scope.navigateNext = function () {\n if ($scope.navigation._page < $scope.navigation._pages) $scope.navigation._page++;\n $scope.prepareNavigationBar();\n };\n\n //cargamos datos auxiliares\n\n $scope.loadLanguages = function () {\n Restangular.all('Languages').getList({ only_active: true }).then(function (languages) {\n $scope.selectLanguages = languages;\n });\n };\n $scope.loadLanguages();\n\n //Lista de parejas de autoridades\n $scope.loadAllPersons = function () {\n Restangular.all('Persons/AllPersons').getList().then(function (persons) {\n $scope.couplePersons = persons;\n $scope.couplePersons.unshift({\n id: null,\n name: $filter(\"translate\")('persons.no_couple')\n });\n });\n };\n\n $scope.genders = [\n { id: 'M', name: $filter(\"translate\")('persons.gender_male') }, \n { id: 'F', name: $filter(\"translate\")('persons.gender_female') }, \n { id: 'N', name: $filter(\"translate\")('persons.gender_neutral') }\n ];\n\n $scope.selectedGender = $scope.genders.filter(pt => { return pt.id === 'M' })[0];\n\n $scope.loadGroups = function (reload) {\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + '/Groups/GetGroupsPositions'\n }).then(function (results, status, headers, config) {\n var data = treeService.groups(results.data.rows, null);\n $scope.personGroups = data;\n $rootScope.personGroups = data;\n });\n };\n\n $scope.loadGroups(false);\n\n $scope.loadPoliticalAffiliations = function (reload) {\n if (angular.isDefined($scope.politicalAffiliations) && !reload) return;\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + '/PoliticalAffiliations'\n }).then(function (results, status, headers, config) {\n $scope.politicalAffiliations = results.data.rows;\n });\n };\n\n $scope.loadContactTypes = function () {\n Restangular.all('PersonsContactsTypes').getList().then(function (results) {\n $scope.contactTypes = results;\n });\n };\n\n $scope.loadCountries = function (reload) {\n if (angular.isDefined($scope.countries) && !reload) return;\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + '/Countries'\n }).then(function (results, status, headers, config) {\n $scope.countries = results.data.rows;\n });\n };\n $scope.loadPersonsInformationsGroups = function () {\n var options = { entity_type: \"persons\" };\n Restangular.all('InformationsGroups').getList(options).then(function (personsInformationGroups) {\n $scope.personsInformationGroups = personsInformationGroups;\n $scope.personsInformationGroups.forEach(function (pig) {\n if (pig.configuration != \"\") pig.configuration = JSON.parse(pig.configuration);\n });\n $scope.checkboxSimpleOptions = [\n { option: null, label: $filter('translate')('informations.all'), checked: true },\n { option: true, label: $filter('translate')('events.staff.yes'), checked: false },\n { option: false, label: $filter('translate')('events.staff.no'), checked: false }\n ];\n });\n };\n\n $scope.loadPersonsInformationsGroups();\n let loadConfigurationOptions = function () {\n let group_name = \"Imágenes\";\n Restangular.all('Configurations').getList({ code: \"\", group_name: group_name }).then(function (response) {\n let configuration = response;\n limit_image_width = configuration.filter(function (config) { return config.code == \"LIMIT_IMAGE_WIDTH\"; }).map(function (config) { return config.value; })[0];\n limit_image_height = configuration.filter(function (config) { return config.code == \"LIMIT_IMAGE_HEIGHT\"; }).map(function (config) { return config.value; })[0];\n });\n }\n\n loadConfigurationOptions(); //Load image since from company_id\n $scope.selectImage = function () {\n\n $(\"#frmPersonImage\").trigger(\"click\");\n $(\"#frmPersonImage\").change(function () {\n const fileInput = document.querySelector('#frmPersonImage') as HTMLInputElement;\n const file = fileInput?.files?.[0];\n if (file) {\n const fileReader = new FileReader();\n /*\n fileReader.onload = function (event) {\n var uri = event.target.result;\n if (angular.isUndefined($scope.person.FK_persons_images) || $scope.person.FK_persons_images == null) $scope.person.FK_persons_images = {};\n $scope.person.FK_persons_images.image = uri;\n $scope.person.photo = uri;\n $scope.person.image_id = null; //??\n $scope.changesNotSaved = true;\n if(!$scope.$$phase) $scope.$apply();\n };\n */\n fileReader.onload = function (event) {\n if (!event.target) return;\n const result = event.target.result;\n if (typeof result !== 'string') return;\n \n const image = new Image();\n image.src = result;\n image.onload = function() {\n if (limit_image_height != 0 && limit_image_width != 0) {\n // Check if image exceeds size limits\n if (image.width > limit_image_width || image.height > limit_image_height) {\n modalService.message({\n title: \"Error\",\n message: $filter('translate')('events.image_size_limit') + \"
\" + limit_image_width + \"X\" + limit_image_height,\n onAccept: function () { }\n });\n } else {\n if (angular.isUndefined($scope.person.FK_persons_images) || $scope.person.FK_persons_images == null) $scope.person.FK_persons_images = {};\n $scope.person.FK_persons_images.image = image.src;\n $scope.person.photo = image.src;\n $scope.person.image_id = null; //??\n $scope.changesNotSaved = true;\n if (!$scope.$$phase) $scope.$apply();\n }\n } else {\n if (angular.isUndefined($scope.person.FK_persons_images) || $scope.person.FK_persons_images == null) $scope.person.FK_persons_images = {};\n $scope.person.FK_persons_images.image = image.src;\n $scope.person.photo = image.src;\n $scope.person.image_id = null; //??\n $scope.changesNotSaved = true;\n if (!$scope.$$phase) $scope.$apply();\n }\n };\n };\n fileReader.readAsDataURL(file);\n } else {\n // preview.src = \"\";\n }\n });\n };\n\n $scope.getImage = function () {\n if ($scope.person.FK_persons_images != null && $scope.person.FK_persons_images.image != null) {\n return $scope.person.FK_persons_images.image;\n } else if ($scope.person.image_id != null) {\n return \"/api/Image/GetImageBmp?id=\" + $scope.person.image_id + \"&maxW=150&maxH2=150\";\n } else {\n return \"assets/img/no-user.jpeg\";\n }\n };\n\n $scope.removeImage = function ($event) {\n $scope.person.image_id = null;\n $scope.person.photo = null;\n if ($scope.person.FK_persons_images != null) $scope.person.FK_persons_images.image = null;\n if (typeof ($event) !== \"undefined\") {\n $event.preventDefault();\n $event.stopPropagation();\n }\n };\n\n $scope.getGroupPath = function (group_id) {\n var ret = \"\";\n var groups = $filter(\"filter\")($scope.personGroups, { id: group_id }, true);\n if (groups != null && groups.length > 0) {\n var group = groups[0];\n if (group.parent_group_id != null) {\n var parentGroup = $scope.getGroupPath(group.parent_group_id);\n ret = parentGroup + \" > \" + group.name;\n } else {\n var parentsGroups = $filter(\"filter\")(group.FK_groups_groups_groups1, { child_group_id: group_id }, true);\n if (parentsGroups.length > 0) {\n var parentGroup1 = $scope.getGroupPath(parentsGroups[0].parent_group_id);\n ret = parentGroup1 + \" > \" + group.name;\n } else {\n ret = group.name;\n }\n }\n }\n return ret;\n };\n\n $scope.savePerson = function () {\n // $log.debug(frmPerson);\n $scope.person.person_treatment_id = $scope.selectedTreatment.id;\n $scope.person.language_id = $scope.selectedLanguage.id;\n $scope.person.gender = $scope.selectedGender.id;\n if (!angular.isUndefined($scope.person.id)) {\n //generamos pigs\n var newPips = new Array();\n angular.forEach($scope.personsInformationGroups, function (pig) {\n var value = $scope.person.pigs[pig.id];\n var pips = $filter(\"filter\")(newPips, { information_group_id: pig.id });\n if (pips.length > 0) {\n var pip = pips[0];\n pip.value = value;\n } else {\n var newPip = {\n person_id: $scope.person.id,\n entity_type: \"persons\",\n entity_type_id: $scope.person.id,\n information_group_id: pig.id,\n value: value\n };\n newPips.push(newPip);\n }\n });\n\n $scope.person.Information_groups_values_persons = newPips;\n angular.forEach($scope.person.Information_groups_values_persons, function (pig) {\n $scope.person.pigs[pig.information_group_id] = pig.value;\n });\n\n $scope.noneAllowedDialogCheck();\n $scope.person.put().then(function (result) {\n\n if (typeof (result.id) != \"undefined\") {\n\n if (angular.isUndefined($scope.callbackClose)) {\n // $state.go(\"persons.list\", { person_type: $scope.person_type, reset: true }); Para que se quede en la misma página.\n } else {\n $scope.callbackClose('cancel');\n }\n if ($scope.isAuthority == 'authority') {\n toastr.success(\"Autoridad actualizada\");\n } else {\n toastr.success(\"Personalidad actualizada\");\n }\n $scope.loadPerson(false);\n $scope.changesNotSaved = false;\n\n } else {\n\n $scope.errorMessage = result.message;\n\n }\n });\n } else {\n //generamos pigs\n var newPips = new Array();\n angular.forEach($scope.personsInformationGroups, function (pig) {\n var value = $scope.person.pigs[pig.id];\n var pips = $filter(\"filter\")(newPips, { information_group_id: pig.id });\n if (pips.length > 0) {\n var pip = pips[0];\n pip.value = value;\n } else {\n var newPip = {\n person_id: $scope.person.id,\n entity_type: \"persons\",\n entity_type_id: $scope.person.id,\n information_group_id: pig.id,\n value: value\n };\n newPips.push(newPip);\n }\n });\n $scope.person.Information_groups_values_persons = newPips;\n angular.forEach($scope.person.Information_groups_values_persons, function (pig) {\n $scope.person.pigs[pig.information_group_id] = pig.value;\n });\n Restangular.all('Persons/CheckIfExists').post($scope.person).then(function (result) {\n if (result) {\n modalService.confirm({\n title: $filter('translate')('persons.person_already_exist'),\n message: $filter('translate')('persons.person_already_exist_message'),\n onAccept: function () {\n $scope.createPerson();\n }\n });\n } else {\n $scope.createPerson();\n }\n });\n }\n };\n\n $scope.cancel = function () {\n if ($stateParams.coming_from_duplicates == true) {\n $state.go(\"persons.duplicates_list\");\n } else if (angular.isUndefined($scope.callbackClose)) {\n $state.go(\"persons.list\", { person_type: $scope.stateParams_person_type, reset: false });\n } else {\n $scope.callbackClose('cancel');\n }\n };\n\n $scope.createPerson = function () {\n // $log.debug($scope.person);\n Restangular.all('persons').post($scope.person).then(function (result) {\n if (angular.isDefined(result.id)) {\n\n $scope.changesNotSaved = false;\n\n if (angular.isUndefined($scope.callbackClose)) {\n $state.go(\"persons.list\", { person_type: $stateParams.person_type });\n } else {\n // $log.debug(\"callbackCloseeee\");\n $scope.loadPerson(false);\n $scope.callbackClose('cancel');\n }\n\n if ($scope.isAuthority == 'authority') {\n toastr.success($filter('translate')('persons.authority_create_success'));\n } else {\n toastr.success($filter('translate')('persons.personality_create_success'));\n }\n }\n });\n };\n\n $scope.showActiveGroups = function (checked) {\n };\n\n //cargamos la visibilidad de los grupos asociados a la persona\n $scope.person_groups = {\n active: true //por defecto a true\n };\n\n $scope.person_groups_militar = {\n active: true //por defecto a true\n };\n\n //cargamos persona\n $scope.person = {\n is_active: true,\n FK_persons_contacts_persons: [],\n FK_persons_private_fields_persons: [{}],\n FK_persons_addresses_persons: [],\n FK_persons_positions_persons: [],\n FK_persons_political_affiliations_persons: [],\n Information_groups_values_persons: [],\n FK_persons_mails_persons: [],\n FK_persons_positions: [],\n pigs: [],\n person_type: $stateParams.person_type\n };\n\n $scope.setChangesNotSaved = function (state, value) {\n if (value != null) {\n $scope.changesNotSaved = state;\n } \n };\n\n // test\n\n // endtest\n\n $scope.loadPerson = function (reload) {\n if (!angular.isUndefined($scope.stateParams_id) && $scope.stateParams_id != null && $scope.stateParams_id != \"\") {\n Restangular.one('Persons', $scope.stateParams_id).get().then(function (results) {\n if (results.id != 0) {\n\n $scope.person = results;\n $scope.selectedTreatment = $scope.personTreatments.filter(pt => { return pt.id == $scope.person.person_treatment_id })[0];\n $scope.selectedLanguage = $scope.selectLanguages.filter(pt => { return pt.id == $scope.person.language_id })[0];\n $scope.selectedGender = $scope.genders.filter(pt => { return pt.id == $scope.person.gender })[0];\n\n // Cargamos los permisos\n GetAllowedUsers();\n GetAllowedGroups();\n\n //Comprobamos que tenga tratamiento, si no ponemos el que este por defecto\n if (angular.isUndefined($scope.person.person_treatment_id) || $scope.person.person_treatment_id == null) {\n const personDefault = $scope.personTreatments.filter(pt => { return pt.person_default });\n $scope.person.person_treatment_id = personDefault[0].id;\n }\n\n $scope.person.FK_persons_positions = [];\n $scope.person.FK_persons_positions.push({ person_position_id: null, position_id: null, position_name: 'Vacio' });\n angular.forEach($scope.person.FK_persons_positions_persons, function (row) {\n\n // Le metemos el tipo de posición\n row.position_type = row.FK_persons_positions_positions.position_type;\n\n let allPositionsPerson: any = {\n person_position_id: null,\n position_id: null,\n position_name: null,\n color_group: null\n };\n\n allPositionsPerson.person_position_id = row.id;\n allPositionsPerson.position_id = row.position_id;\n allPositionsPerson.color_group = row.FK_persons_positions_positions.FK_positions_groups.color;\n allPositionsPerson.position_type = row.position_type;\n if ($scope.person.gender == \"M\") {\n allPositionsPerson.position_name = row.FK_persons_positions_positions.male_description;\n } else {\n if ($scope.person.gender == \"F\") {\n allPositionsPerson.position_name = row.FK_persons_positions_positions.female_description;\n } else {\n allPositionsPerson.position_name = row.FK_persons_positions_positions.name;\n }\n }\n\n $scope.person.FK_persons_positions.push(allPositionsPerson);\n //Traemos las instituciones\n if ($scope.person.FK_persons_positions.length > 0)\n getPositionsInstitutions($scope.person.FK_persons_positions_persons);\n\n // Decimos si la mostramos o no\n\n row.show = checkIfPositionIsVisible(row);\n $log.debug(`row.show = ${row.show}`)\n });\n\n let options: any = {};\n //Gestionamos duplicados\n\n //Comprobamos si es un duplicado\n if ($scope.person.duplicate_of != null) {\n options.id = $scope.person.duplicate_of;\n $scope.is_duplicate = true;\n getParent();\n } else {\n options.id = $scope.person.id;\n }\n\n Restangular.all('Persons/DuplicatesGroup').getList(options).then(function (results) {\n\n if (results.length > 0) {\n $scope.duplicates = results;\n if ($scope.is_duplicate) {\n $scope.duplicates = $scope.duplicates.filter(m => m.id != $scope.person.id)\n }\n }\n\n })\n }\n\n if (results.show_person_couple) $scope.loadAllPersons();\n if (!reload) {\n if ($rootScope.title.includes(\" - \", 0)) {\n $rootScope.title = $rootScope.title.split(\" - \")[0] + \" - \" + results.name + \" \" + results.surname + (results.lastname != null ? \" \" + results.lastname : \"\"); //Ponemos el nombre en el titulo.\n $rootScope.breadcrumb.pop(); //.splice(-1, 1);\n } else {\n $rootScope.title += \" - \" + results.name + \" \" + results.surname + (results.lastname != null ? \" \" + results.lastname : \"\"); //Ponemos el nombre en el titulo.\n }\n $rootScope.breadcrumb.push({ title: results.name + \" \" + results.surname + (results.lastname != null ? \" \" + results.lastname : \"\") });\n }\n if ($scope.person.birthdate != null) $scope.person.birthdate = new Date($scope.person.birthdate);\n if ($scope.person.death_date != null) $scope.person.death_date = new Date($scope.person.death_date);\n\n //generamos lista de valores de persons informations groups\n $scope.person.pigs = [];\n angular.forEach($scope.person.Information_groups_values_persons, function (pig) {\n if (pig.FK_information_groups_values_information_groups.type == \"checkboxSimple\") {\n $scope.person.pigs[pig.information_group_id] = pig.value; // (pig.value == \"true\" ? true : false);\n } else if (pig.FK_information_groups_values_information_groups.type == \"datetime\") {\n $scope.person.pigs[pig.information_group_id] = new Date(pig.value);\n } else {\n $scope.person.pigs[pig.information_group_id] = pig.value;\n }\n\n });\n });\n } else {\n $scope.person_groups = false;\n };\n }\n\n //No quitar esto, por que al crear nueva persona desde invitados, pilla antes esto que el ng-init y carga una persona por id de evento\n setTimeout(function () {\n if (angular.isDefined($scope.stateParams_id) && $scope.stateParams_id != \"\") {\n $scope.loadPerson(false);\n }\n }, 100);\n\n //funciones de utilizar\n $scope.getRGB = function (hex) {\n var ret = \"130,130,130\";\n if (hex != null && hex != \"\") {\n ret = parseInt(hex.replace(\"#\", \"\").substring(0, 2), 16) + \",\" + parseInt(hex.replace(\"#\", \"\").substring(2, 4), 16) + \",\" + parseInt(hex.replace(\"#\", \"\").substring(4, 6), 16)\n }\n return ret;\n };\n\n $scope.prepareDates = function (obj) {\n for (var prop in obj) {\n if (prop.indexOf(\"date\") >= 0 && obj[prop] != null && typeof obj[prop] == \"string\") obj[prop] = new Date(obj[prop]);\n }\n };\n\n //cargamos cargos en grupo\n $scope.getPositions = function (group_id) {\n var positions = [];\n if (angular.isDefined($scope.personGroups)) {\n var group = $filter('filter')($scope.personGroups, { id: group_id }, true)[0];\n if (group != null) positions = group.FK_positions_groups;\n }\n return positions;\n };\n\n //Grids person position addresses y contacts\n $scope.gridPersonPositionAddresses = {\n pdfTitle: $filter('translate')('persons.addresses'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n enablePaginationControls: false,\n rowHeight: 45,\n minRowsToShow: 3,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, exporterSuppressExport: true },\n\n {\n name: 'address_line_1', displayName: $filter('translate')('persons.address_line_1'), enableColumnMenu: false, enableFiltering: false, enableHiding: false,\n cellTemplate: '
{{row.entity.address_line_1}}
{{row.entity.postal_code}}, {{row.entity.city}}
',\n },\n /*{ name: 'address_line_2', displayName: $filter('translate')('persons.address_line_2'), enableColumnMenu: false, enableFiltering: false, visible: false },\n { name: 'postal_code', displayName: $filter('translate')('persons.postal_code'), enableColumnMenu: false, enableFiltering: false },\n { name: 'city', displayName: $filter('translate')('persons.city'), enableColumnMenu: false, enableFiltering: false },\n { name: 'state', displayName: $filter('translate')('persons.state'), enableColumnMenu: false, enableFiltering: false, enableHiding: false },*/\n { name: 'notes', displayName: $filter('translate')('persons.notes'), visible: true },\n {\n name: ' ', width: 100, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionIconTemplate([\n { title: \"\", action: 'ng-click=\"grid.appScope.addPersonPositionsAddressDialog(row.entity)\"', cssIconClass: \"fa fa-edit\" },\n { title: \"\", action: 'ng-click=\"$event.stopPropagation();grid.appScope.deletePositionAddress(row.entity);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n }\n ]\n }\n\n $scope.gridPersonPositionContactInfo = {\n pdfTitle: $filter('translate')('persons.contact_data'),\n exporterMenuCsv: true,\n enableGridMenu: false,\n enablePaginationControls: false,\n enableFiltering: false,\n minRowsToShow: 4,\n /* paginationPageSizes: [1],\n paginationPageSize: 1,*/\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n $timeout(function () {\n gridApi.grid.sortColumn(gridApi.grid.columns[3], uiGridConstants.ASC);\n // gridApi.grid.sortColumn(gridApi.grid.columns[1], uiGridConstants.ASC,true);\n gridApi.grid.notifyDataChange(uiGridConstants.dataChange.ALL);\n });\n },\n columnDefs: [\n { name: 'id', visible: false, enableColumnMenu: false, enableHiding: false, exporterSuppressExport: true },\n { name: 'FK_persons_positions_contacts_positions_contacts_types.name', displayName: $filter('translate')('persons.contact_type'), enableHiding: false, enableColumnMenu: false },\n { name: 'FK_persons_positions_contacts_positions_contacts_types.order', displayName: '', enableColumnMenu: false, enableHiding: false, visible: false },\n { name: 'value', displayName: $filter('translate')('persons.value'), enableColumnMenu: false, enableFiltering: false, enableHiding: false },\n { name: 'notes', displayName: $filter('translate')('persons.notes'), enableColumnMenu: false, enableFiltering: false, enableHiding: false, visible: false },\n {\n name: ' ', width: 100, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionIconTemplate([\n { title: \"\", action: 'ng-click=\"grid.appScope.addPersonPositionsContactDialog(row.entity)\"', cssIconClass: \"fa fa-edit\" },\n { title: \"\", action: 'ng-click=\"grid.appScope.deletePositionContactInfo(row.entity);\" ng-if=\"grid.appScope.allowWrite\" ', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n }\n ]\n }\n\n //funcion para cambiar elemento a edicion en linea\n $scope.inlineEditItems = {};\n $scope.inlineEdit = function (type, item, enable) {\n\n if (enable) {\n\n if (angular.isUndefined(item.persons_position)) {\n item.persons_position = $scope.person.FK_persons_positions.filter(m=>m.position_type == \"civil\");\n }\n\n if ((type == \"mail\" || type == \"address\" || type == \"contact\") && item.persons_position.filter(m => m.person_position_id == null).length < 1) {\n item.persons_position = [{ position_name: $filter('translate')('persons.contact.unassigned'), id: 0, person_position_id: null }, ...item.persons_position]; // Añadimos la opción sin asignar para indicar que no está asociado a ningún cargo. \n }\n\n //cargamos datos necesarios segun tipo de entidad editada\n if (type === \"position\") {\n //$scope.loadGroups(false);\n $scope.newPosition = {\n positionName: '',\n groupName: item.FK_persons_positions_positions.FK_positions_groups.name,\n position_type: item.position_type,\n groupPath: '',\n newPositionGroupId: null,\n positionId: null\n }\n\n //$scope.newPosition.positionName = item.FK_persons_positions_positions.name;\n //$scope.loadPersonsTreatments(false);\n\n if (item.position_order != null) {\n if (item.FK_persons_positions_positions.position_order != item.position_order) {\n item.is_custom_position_order = true;\n } else {\n item.is_custom_position_order = false;\n item.position_order = null;\n }\n } else {\n item.is_custom_position_order = false;\n }\n\n if (item.position_order_article_10 != null) {\n if (item.FK_persons_positions_positions.position_order_article_10 != item.position_order_article_10) {\n item.is_custom_position_order_article_10 = true;\n } else {\n item.is_custom_position_order_article_10 = false;\n item.position_order_article_10 = null;\n }\n } else {\n item.is_custom_position_order_article_10 = false;\n }\n $scope.positionEdited = item.position_id;\n $scope.gridPersonPositionAddresses.data = item.FK_persons_positions_addresses_positions;\n $scope.gridPersonPositionContactInfo.data = item.FK_persons_positions_contacts_positions;\n\n //$scope.gridPersonPositionContactInfo.gridApi.grid.notifyDataChange(uiGridConstants.dataChange.ALL);\n\n } else if (type == \"political-affiliation\") {\n $scope.loadPoliticalAffiliations(false);\n } else if (type == \"address\") {\n $scope.loadCountries(false);\n } else if (type == \"contact\") {\n $scope.loadContactTypes(false);\n }\n\n if (angular.isDefined($scope.inlineEditItems[type]) && $scope.inlineEditItems[type] != null) $scope.inlineEditItems[type].editMode = false;\n var copy = JSON.parse(JSON.stringify(item));\n item.editMode = true;\n $scope.prepareDates(copy);\n\n $scope.inlineEditItems[type] = copy; //copia, para no pasar cambios salvo que se guarde\n $scope.inlineEditItems[type + \"_orig\"] = item; //objeto original\n\n /*\n if(type === \"position\" && item.position_id == null) {\n $scope.loadPersonsTreatments(false).then(() => {\n const personDefault = $scope.personTreatments.filter(pt => { return pt.person_default});\n const positionDefault = $scope.personTreatments.filter(pt => { return pt.position_default});\n if(personDefault !== undefined && personDefault.length > 0) {\n $scope.inlineEditItems['position'].person_treatment_id = personDefault[0].id;\n }\n if(positionDefault !== undefined && positionDefault.length > 0) {\n $scope.inlineEditItems['position'].position_treatment_id = positionDefault[0].id;\n }\n });\n }\n */\n } else {\n $scope.inlineEditItems[type + \"_orig\"].editMode = false;\n delete $scope.inlineEditItems[type];\n delete $scope.inlineEditItems[type + \"_orig\"];\n }\n $rootScope.isInlineEditEnabled = enable;\n };\n\n // Al dar de alta un nuevo cargo, lo seleccionas, y al darle guardar, no te lo muestra. Despinchas el check de \"ver activos\" y entonces te lo muestra. Cambiarlo y q ese check no aplique hasta que guarde.\n // Simplemente con darle a guardar en la ficha de cliente, ya se aplica el cambio, por lo que lo que vamos a hacer es que cuando se cierre la ficha de añadir el cargo, se fuerce el guardado de la ficha de persona.\n $scope.savePersonPosition = function (item) {\n // TODO: Quitar esto si a Rodolfo le parece bien como ha quedado la pantalla\n /*\n if($scope.newPosition.positionName != null && $scope.newPosition.positionId == null && $scope.newPosition.newPositionGroupId != null) {\n let newPositionDto = {\n id: \"\",\n group_id: $scope.newPosition.newPositionGroupId,\n name: $scope.newPosition.positionName,\n male_description: $scope.newPosition.positionName,\n female_description: $scope.newPosition.positionName,\n FK_positions_tl_positions: [ {\n id: \"\",\n name: $scope.newPosition.positionName,\n male_description: $scope.newPosition.positionName,\n female_description: $scope.newPosition.positionName,\n language_id: $rootScope.languageId\n }],\n FK_positions_contacts_positions: [],\n FK_positions_addresses_positions: []\n };\n Restangular.all('positions').post(newPositionDto).then(function (result) {\n $log.debug(result);\n });\n }*/\n\n if (!angular.isUndefined($scope.person.id) && item != null) {\n $scope.personPosition = item;\n $scope.person.put().then(function (result) {\n if (result.id === undefined) {\n $scope.errorMessage = result.message;\n } else {\n $scope.loadPerson(false);\n }\n });\n }\n };\n $scope.positionChange = function (item, model) {\n\n $scope.inlineEditItems['position'].FK_persons_positions_positions.position_treatment_id = item.position_treatment_id;\n }\n $scope.saveInline = function (type) {\n //preparamos datos\n let originalItem = $scope.inlineEditItems[type + \"_orig\"];\n let item = $scope.inlineEditItems[type];\n originalItem.is_historic = true;\n\n if (type === \"position\") {\n var group = $filter('filter')($scope.personGroups, { id: item.FK_persons_positions_positions.group_id }, true)[0];\n if (group == null) return;\n var position = $filter('filter')(group.FK_positions_groups, { id: item.position_id }, true)[0];\n if (position == null) return;\n if (angular.isUndefined(originalItem.id)) originalItem.id = null;\n\n // Controlamos que solo pueda añadirse una position_militar \n if (position.position_type == \"militar\") {\n\n // Buscamos si tiene cargos militares activos \n let active_positions = $scope.person.FK_persons_positions_persons.filter(m => m.position_type == \"militar\" && !m.is_historic && m.id != position.id);\n\n // Si los tiene solo se puede crear un cargo militar con fecha hasta anterior a hoy.\n if (active_positions.length > 0 && (item.to_date == null || new Date(item.to_date).getTime() > Date.now())) {\n return modalService.message({\n title: \"Error\",\n message: $filter('translate')('persons.militar_position_error'),\n onAccept: function () { }\n });\n }\n }\n\n originalItem.position_id = position.id;\n originalItem.FK_persons_positions_positions.name = position.name;\n originalItem.FK_persons_positions_positions.group_id = group.id;\n originalItem.FK_persons_positions_positions.FK_positions_groups.id = group.id;\n originalItem.FK_persons_positions_positions.FK_positions_groups.name = group.name;\n originalItem.FK_persons_positions_positions.FK_positions_groups.color = group.color;\n originalItem.from_date = item.from_date;\n originalItem.to_date = item.to_date;\n originalItem.position_order = item.position_order;\n originalItem.position_order_article_10 = item.position_order_article_10;\n originalItem.person_treatment_id = item.person_treatment_id;\n originalItem.position_treatment_id = item.position_treatment_id;\n originalItem.program_emails = item.program_emails;\n originalItem.invitation_emails = item.invitation_emails;\n originalItem.FK_persons_positions_addresses_positions = item.FK_persons_positions_addresses_positions;\n originalItem.FK_persons_positions_contacts_positions = item.FK_persons_positions_contacts_positions;\n // $log.debug(originalItem);\n if (!item.is_custom_position_order) originalItem.position_order = null;\n $scope.savePersonPosition(originalItem);\n $scope.changesNotSaved = true;\n\n } else if (type === \"political-affiliation\") {\n\n // $log.debug(item);\n //var politicalAffiliation = item.FK_persons_political_affiliations_political_affiliations;\n\n if (angular.isUndefined(originalItem.id)) originalItem.id = null;\n originalItem.political_affiliation_id = item.FK_persons_political_affiliations_political_affiliations.id;\n originalItem.from_date = item.from_date;\n originalItem.to_date = item.to_date;\n originalItem.political_affiliation_zone_id = (item.FK_persons_political_affiliations_political_affiliations_zones != null ? item.FK_persons_political_affiliations_political_affiliations_zones.id : null);\n\n originalItem.FK_persons_political_affiliations_political_affiliations = item.FK_persons_political_affiliations_political_affiliations;\n originalItem.FK_persons_political_affiliations_political_affiliations_zones = item.FK_persons_political_affiliations_political_affiliations_zones;\n\n $scope.changesNotSaved = true;\n\n } else if (type === \"address\") {\n var country = $filter('filter')($scope.countries, { id: item.country_id.id }, true)[0];\n if (angular.isUndefined(originalItem.id)) originalItem.id = null;\n originalItem.country_id = country.id;\n originalItem.address_line_1 = item.address_line_1;\n originalItem.address_line_2 = item.address_line_2;\n originalItem.postal_code = item.postal_code;\n originalItem.city = item.city;\n originalItem.state = item.state;\n originalItem.notes = item.notes;\n originalItem.FK_persons_addresses_countries.code = country.code;\n originalItem.FK_persons_addresses_countries.name = country.name;\n originalItem.value = item.value;\n originalItem.person_position_id = item.person_position_id;\n $scope.person.FK_persons_addresses_persons[0].is_historic = true;\n $scope.changesNotSaved = true;\n } else if (type === \"contact\") {\n var contactType = $filter('filter')($scope.contactTypes, { id: item.person_contact_type_id.id }, true)[0];\n if (angular.isUndefined(originalItem.id)) originalItem.id = null;\n originalItem.person_contact_type_id = contactType.id;\n originalItem.notes = item.notes;\n originalItem.FK_persons_contacts_persons_contacts_types.code = contactType.code;\n originalItem.FK_persons_contacts_persons_contacts_types.name = contactType.name;\n originalItem.value = item.value;\n originalItem.person_position_id = item.person_position_id;\n $scope.person.FK_persons_contacts_persons[0].is_historic = true;\n $scope.changesNotSaved = true;\n } else if (type === \"mail\") {\n if (angular.isUndefined(originalItem.id)) originalItem.id = null;\n originalItem.email = item.email;\n originalItem.use_for_invitation = item.use_for_invitation;\n originalItem.use_for_program = item.use_for_program;\n originalItem.use_for_others = item.use_for_others;\n originalItem.person_position_id = item.person_position_id;\n //$scope.person.FK_persons_mails_persons[0].is_historic = true;\n \n\n $scope.changesNotSaved = true;\n }\n\n $scope.inlineEdit(type, originalItem, false);\n };\n $scope.cancelInline = function (type) {\n\n $scope.inlineEditItems[type + \"_orig\"].editMode = false;\n $scope.inlineEditItems[type] = $scope.inlineEditItems[type + \"_orig\"];\n // $log.debug(angular.isDefined($scope.inlineEditItems[type].id));\n if (angular.isDefined($scope.inlineEditItems[type].id)) {\n //si tiene id definido (cuando es nuevo se pone a null al guardar inline), cancelamos edicion\n $scope.inlineEdit(type, $scope.inlineEditItems[type], false);\n } else {\n //si no tiene, estabamos añadiendo, borramos\n $scope.deleteInline(type);\n }\n\n };\n $scope.deleteInline = function (type) {\n\n var orig = $scope.inlineEditItems[type + \"_orig\"];\n // $log.debug(\"deleteInline\", type, orig);\n if (type === \"position\") {\n var idx = $scope.person.FK_persons_positions_persons.indexOf(orig);\n $scope.person.FK_persons_positions_persons.splice(idx, 1);\n } else if (type === \"political-affiliation\") {\n var idx = $scope.person.FK_persons_political_affiliations_persons.indexOf(orig);\n $scope.person.FK_persons_political_affiliations_persons.splice(idx, 1);\n } else if (type === \"address\") {\n var idx = $scope.person.FK_persons_addresses_persons.indexOf(orig);\n $scope.person.FK_persons_addresses_persons.splice(idx, 1);\n } else if (type === \"contact\") {\n var idx = $scope.person.FK_persons_contacts_persons.indexOf(orig);\n $scope.person.FK_persons_contacts_persons.splice(idx, 1);\n } else if (type === \"mail\") {\n var idx = $scope.person.FK_persons_mails_persons.indexOf(orig);\n $scope.person.FK_persons_mails_persons.splice(idx, 1);\n }\n $scope.inlineEdit(type, $scope.inlineEditItems[type], false);\n $scope.changesNotSaved = true;\n\n };\n\n $scope.newPosition = {\n positionName: '',\n groupName: '',\n groupPath: '',\n newPositionGroupId: null,\n positionId: null\n }\n $scope.positionAdded = {};\n\n $scope.addPersonPosition = function (position_type) {\n if (angular.isUndefined($scope.person.id)) {\n modalService.message({\n title: $filter('translate')('groups.warning'),\n message: \"Debe guardar antes la autoridad para poder asignarle cargos.\",//$filter('translate')('cms_categories.delete_message_children_error'),\n onAccept: function () { }\n });\n } else {\n var position = {\n position_id: null,\n position_type: position_type,\n person_id: $scope.person.id,\n FK_persons_positions_addresses_positions: [],\n FK_persons_positions_contacts_positions: [],\n FK_persons_positions_positions: {\n name: null,\n FK_positions_groups: {\n name: null\n },\n from_date: null,\n to_date: null,\n }\n };\n $scope.person.FK_persons_positions_persons.push(position);\n $scope.inlineEdit(\"position\", position, true);\n }\n };\n\n $scope.getPositionsSearch = function (val) {\n let param = '';\n if ($scope.newPosition.newPositionGroupId != null) {\n param = '?related_entity_id=' + $scope.newPosition.newPositionGroupId;\n }\n return Restangular.all('search/position/' + val + param).getList().then(function (searchTerms) {\n return searchTerms;\n });\n };\n\n $scope.getGroupsSearch = function (val) {\n\n if ($scope.newPosition.position_type == 'militar') {\n return Restangular.all('search/group_militar/' + val).getList().then(function (searchTerms) {\n return searchTerms;\n });\n\n } else {\n return Restangular.all('search/group/' + val).getList().then(function (searchTerms) {\n return searchTerms;\n });\n }\n };\n\n $scope.positionSelected = function ($item, $model, $label) {\n\n $scope.inlineEditItems['position'].position_id = $item.id;\n $scope.positionAdded = {\n id: $item.id,\n name: $item.term,\n\n groupId: $item.related_entity_id,\n groupName: $item.related_term\n }\n $scope.newPosition.positionName = $item.term;\n $scope.newPosition.positionId = $item.id;\n\n };\n\n $scope.groupSelected = function ($item, $model, $label) {\n\n $scope.inlineEditItems['position'].FK_persons_positions_positions.group_id = $item.id;\n $scope.newPosition.groupPath = $item.related_term;\n\n };\n\n $scope.addPoliticalAffiliationDialog = function () {\n var politicalAffiliation = {\n political_affiliation_id: null,\n political_affiliation_zone_id: null,\n person_id: $scope.person.id,\n };\n $scope.person.FK_persons_political_affiliations_persons.push(politicalAffiliation);\n $timeout(function () {\n $scope.inlineEdit(\"political-affiliation\", politicalAffiliation, true);\n }, 200);\n\n };\n\n $scope.addAddress = function () {\n\n var address = {\n\n country_id: null,\n person_id: $scope.person.id,\n address_line_1: null,\n address_line_2: null,\n state: null,\n postal_code: null,\n city: null,\n notes: null,\n\n FK_persons_addresses_countries: {\n code: null,\n name: null\n },\n\n persons_position: $scope.person.FK_persons_positions.filter(m => m.position_type == \"civil\")\n\n };\n\n $scope.person.FK_persons_addresses_persons.push(address);\n $timeout(function () {\n $scope.inlineEdit(\"address\", address, true);\n }, 200);\n };\n\n $scope.addContact = function () {\n\n var contact = {\n contact_type_id: null,\n person_id: $scope.person.id,\n value: null,\n from_position: false,\n FK_persons_contacts_persons_contacts_types: {\n name: null\n },\n persons_position: $scope.person.FK_persons_positions.filter(m => m.position_type == \"civil\")\n };\n\n $scope.person.FK_persons_contacts_persons.push(contact);\n $timeout(function () {\n $scope.inlineEdit(\"contact\", contact, true);\n }, 200);\n };\n\n $scope.addMail = function () {\n var mail = {\n person_id: $scope.person.id,\n email: null,\n use_for_invitation: true,\n use_for_program: true,\n use_for_others: true,\n persons_position: $scope.person.FK_persons_positions.filter(m => m.position_type == 'civil')\n };\n\n $scope.person.FK_persons_mails_persons.push(mail);\n\n $timeout(function () {\n $scope.inlineEdit(\"mail\", mail, true);\n }, 200);\n };\n\n $scope.addNewPosition = function (position) {\n\n var item = $scope.inlineEditItems['position'];\n if (item.FK_persons_positions_positions.group_id == null) return;\n $scope.addNewGroup(item.FK_persons_positions_positions.group_id);\n\n };\n\n $scope.addNewGroup = function (group_id) {\n\n let $modalInstance = $uibModal.open({\n animation: true,\n template: AddGroupModalView,\n controller: \"AddNewGroupModalCtrl\",\n size: \"lg\",\n resolve: {\n group_id: function () {\n return group_id;\n }\n }\n });\n $modalInstance.result.then(function (result) {\n // $log.debug(result);\n angular.forEach($scope.person.FK_persons_positions_persons, function (personPosition) {\n if (personPosition.FK_persons_positions_positions.FK_positions_groups.id == result.id) {\n personPosition.FK_persons_positions_positions.FK_positions_groups.name = result.name;\n personPosition.FK_persons_positions_positions.FK_positions_groups.color = result.color;\n personPosition.FK_persons_positions_positions.FK_positions_groups.FK_groups_tl_groups = result.FK_positions_groups.FK_groups_tl_groups;\n }\n });\n $scope.loadGroups(true);\n // Se recarga de nuevo la persona\n // $scope.loadPerson(false);\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n });\n\n };\n\n $scope.editGroup = function ($event, group) {\n $event.stopPropagation();\n // $log.debug(group);\n $scope.addNewGroup(group.id);\n };\n $scope.editPosition = function ($event, position) {\n\n $event.stopPropagation();\n /* var groups = $filter(\"filter\")($scope.personGroups, { id: $scope.inlineEditItems['position'].FK_persons_positions_positions.group_id }, true);\n $log.debug(groups);*/\n let $modalInstance = $uibModal.open({\n animation: true,\n template: PositionModalView,\n controller: \"PositionModalCtrl\",\n size: 'lg',\n resolve: {\n position: function () {\n return position;\n }, position_list: function () {\n return null;\n }, group: function () {\n return null;\n }, fromView: function () {\n return \"Persons\";\n }\n }\n\n });\n $modalInstance.result.then(function (resultModal) {\n var resultvalue = resultModal.edited;\n Restangular.all(\"positions/\" + resultvalue.id).customPUT(resultvalue).then(function (result) {\n //buscamos referencia y reemplazamos completa\n angular.forEach($scope.person.FK_persons_positions_persons, function (personPosition) {\n if (personPosition.FK_persons_positions_positions.id == result.id) {\n personPosition.FK_persons_positions_positions.name = result.name;\n personPosition.FK_persons_positions_positions.notes = result.notes;\n personPosition.FK_persons_positions_positions.institution = result.institution;\n personPosition.FK_persons_positions_positions.invitation_emails = result.invitation_emails;\n personPosition.FK_persons_positions_positions.program_emails = result.program_emails;\n personPosition.FK_persons_positions_positions.position_order = result.position_order;\n personPosition.FK_persons_positions_positions.position_treatment_id = result.position_treatment_id;\n // Quizás funcione\n personPosition.FK_persons_positions_positions.position_order_article_10 = result.position_order_article_10;\n personPosition.FK_persons_positions_positions.FK_positions_tl_positions = result.FK_positions_tl_positions;\n personPosition.FK_persons_positions_positions.FK_positions_addresses_positions = result.FK_positions_addresses_positions;\n personPosition.FK_persons_positions_positions.FK_positions_contacts_positions = result.FK_positions_contacts_positions;\n $scope.inlineEditItems[\"position\"].FK_persons_positions_positions.position_treatment_id = personPosition.FK_persons_positions_positions.position_treatment_id;\n }\n });\n //$scope.loadGroups();\n // Se recarga de nuevo la persona\n //$scope.loadPerson(false);\n });\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n });\n };\n\n $scope.addPersonPositionsAddressDialog = function (personPositionAddress) {\n\n var editedIdx = 0;\n if ($scope.gridPersonPositionAddresses.data != null) editedIdx = $scope.gridPersonPositionAddresses.data.indexOf(personPositionAddress);\n\n if (angular.isUndefined(personPositionAddress)) personPositionAddress = { isNew: true };\n\n let $modalInstance = $uibModal.open({\n animation: true,\n template: PersonPositionAddressModalView,\n controller: \"PersonPositionAddressModalCtrl\",\n resolve: {\n personPositionAddress: function () {\n return personPositionAddress;\n }\n }\n });\n //Response del modal\n $modalInstance.result.then(function (data) {\n var personPositionAddressValue = data.edited;\n if (angular.isUndefined(personPositionAddressValue.state)) personPositionAddressValue.state = \"\";\n if (angular.isUndefined(personPositionAddressValue.postal_code)) personPositionAddressValue.postal_code = \"\";\n if (angular.isUndefined(personPositionAddressValue.address_line_2)) personPositionAddressValue.address_line_2 = \"\";\n if (angular.isUndefined(personPositionAddressValue.notes)) personPositionAddressValue.notes = \"\";\n\n if ((angular.isDefined(personPositionAddressValue.address_line_1) && personPositionAddressValue.address_line_1 != \"\" && personPositionAddressValue.address_line_1 != null) &&\n (angular.isDefined(personPositionAddressValue.city) && personPositionAddressValue.city != \"\" && personPositionAddressValue.city != null)) {\n if (!angular.isUndefined(personPositionAddressValue.FK_persons_positions_addresses_countries.selected) && personPositionAddressValue.FK_persons_positions_addresses_countries.selected !== null) {\n\n var person_positions_address = {\n FK_persons_positions_addresses_countries: angular.copy(personPositionAddressValue.FK_persons_positions_addresses_countries.selected),\n country_id: personPositionAddressValue.FK_persons_positions_addresses_countries.selected.id,\n address_line_1: personPositionAddressValue.address_line_1,\n city: personPositionAddressValue.city,\n state: personPositionAddressValue.state,\n postal_code: personPositionAddressValue.postal_code,\n address_line_2: personPositionAddressValue.address_line_2,\n notes: personPositionAddressValue.notes\n };\n if (personPositionAddressValue.isNew) {\n // $log.debug($scope.inlineEditItems['position']);\n $scope.inlineEditItems['position'].FK_persons_positions_addresses_positions.push(person_positions_address);\n $scope.gridPersonPositionAddresses.data = $scope.inlineEditItems['position'].FK_persons_positions_addresses_positions;\n } else {\n $scope.gridPersonPositionAddresses.data[editedIdx] = person_positions_address;\n $scope.inlineEditItems['position'].FK_persons_positions_addresses_positions[editedIdx] = person_positions_address;\n }\n\n if (!$scope.$$phase) $scope.$apply();\n }\n\n }\n\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n if (!$scope.$$phase) $scope.$apply();\n });\n\n };\n\n $scope.addPersonPositionsContactDialog = function (personPositionContactInfo) {\n var editedIdx = 0;\n if ($scope.gridPersonPositionContactInfo.data != null) editedIdx = $scope.gridPersonPositionContactInfo.data.indexOf(personPositionContactInfo);\n\n if (angular.isUndefined(personPositionContactInfo)) personPositionContactInfo = { isNew: true };\n\n let $modalInstance = $uibModal.open({\n animation: true,\n template: PersonPositionContactModalView,\n controller: \"PersonPositionContactModalCtrl\",\n resolve: {\n personPositionContactInfo: function () {\n return personPositionContactInfo;\n }\n }\n });\n //Response del modal\n $modalInstance.result.then(function (data) {\n\n var personPositionContactValue = data.edited;\n // $log.debug(personPositionContactValue);\n if (angular.isUndefined(personPositionContactValue.notes)) personPositionContactValue.notes = \"\";\n\n if (angular.isDefined(personPositionContactValue.value) && personPositionContactValue.value !== \"\" && personPositionContactValue.value !== null) {\n if (!angular.isUndefined(personPositionContactValue.FK_persons_positions_contacts_positions_contacts_types.selected) && personPositionContactValue.FK_persons_positions_contacts_positions_contacts_types.selected !== null) {\n var person_positions_contacts = {\n FK_persons_positions_contacts_positions_contacts_types: angular.copy(personPositionContactValue.FK_persons_positions_contacts_positions_contacts_types.selected),\n person_position_contact_type_id: personPositionContactValue.FK_persons_positions_contacts_positions_contacts_types.selected.id,\n value: personPositionContactValue.value,\n notes: personPositionContactValue.notes\n };\n\n if (personPositionContactValue.isNew) {\n $scope.inlineEditItems['position'].FK_persons_positions_contacts_positions.push(person_positions_contacts);\n $scope.gridPersonPositionContactInfo.data = $scope.inlineEditItems['position'].FK_persons_positions_contacts_positions;\n } else {\n $scope.inlineEditItems['position'].FK_persons_positions_contacts_positions[editedIdx] = person_positions_contacts;\n $scope.gridPersonPositionContactInfo.data[editedIdx] = person_positions_contacts;\n }\n\n if (!$scope.$$phase) $scope.$apply();\n\n }\n\n }\n\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n if (!$scope.$$phase) $scope.$apply();\n });\n\n };\n\n // Gestión de duplicados\n // Navegación\n let getParent = function () {\n Restangular.one('Persons', $scope.person.duplicate_of).get().then((results) => {\n $scope.parent = results;\n })\n };\n\n $scope.goToDuplicate = function (person) {\n $state.go(\"persons.edit\", { person_type: person.person_type, id: person.id, coming_from_duplicates: $stateParams.coming_from_duplicates });\n };\n\n $scope.goToParent = function () {\n $state.go(\"persons.edit\", { person_type: $scope.parent.person_type, id: $scope.parent.id, coming_from_duplicates: $stateParams.coming_from_duplicates });\n };\n\n //Mergeo de dato\n //Función general\n\n let mergeKeys = function (mergeFrom, mergeTo, keysToMerge) {\n\n let keys = Object.keys(mergeFrom)\n\n keys.forEach(key => {\n if (keysToMerge.includes(key)) {\n if (!mergeTo[key] || mergeTo[key] == \"\") {\n mergeTo[key] = mergeFrom[key];\n }\n }\n });\n\n return mergeTo;\n }\n\n // Funciones específicas\n $scope.mergeMainData = function () {\n\n modalService.confirm({\n title: $filter('translate')('persons.push_to_parent'),\n message: $filter('translate')('persons.push_to_parent_message'),\n onAccept: function () {\n\n let keysToMerge = ['name', 'surname', 'lastname', 'num_identification', 'birthdate',\n 'death_date', 'gender', 'language_id', 'couple_person_id', 'not_accept_gifts', 'notes'];\n\n $scope.parent = mergeKeys($scope.person, $scope.parent, keysToMerge);\n\n $scope.parent.put().then(function (result) {\n\n if (typeof (result.id) != \"undefined\") {\n toastr.success($filter('translate')('persons.push_to_parent_success'));\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n });\n\n };\n\n // Gestión de instituciones \n let getPositionsInstitutions = function (person_position_list) {\n\n let institutionsIdList = person_position_list.map(pp => pp.FK_persons_positions_positions.institution_id);\n // Recogemos las instituciones pertinentes\n Restangular.all('Institutions').getList(institutionsIdList).then(function (result) {\n // Filtramos los resultados \n result = result.filter(r => institutionsIdList.includes(r.id));\n // Las asociamos a cada Cargo\n person_position_list.forEach(function (personPosition) {\n if (personPosition.FK_persons_positions_positions.institution_id)\n personPosition.FK_positions_institution = result.filter(r => r.id == personPosition.FK_persons_positions_positions.institution_id).pop();\n })\n\n });\n };\n\n $scope.mergePositions = function (position) {\n\n event.stopPropagation();\n\n modalService.confirm({\n title: $filter('translate')('persons.push_to_parent'),\n message: $filter('translate')('persons.push_to_parent_message'),\n onAccept: function () {\n\n let index = $scope.person.FK_persons_positions_persons.indexOf(position);\n position.person_id = $scope.parent.id;\n $scope.person.FK_persons_positions_persons.splice(index, 1);\n $scope.parent.FK_persons_positions_persons.push(position)\n\n $scope.parent.put().then(function (result) {\n\n if (typeof (result.id) != \"undefined\") {\n toastr.success($filter('translate')('persons.push_to_parent_success'));\n } else {\n $scope.errorMessage = result.message;\n }\n });\n\n }\n });\n };\n\n $scope.mergePoliticalAffiliations = function (affiliation) {\n event.stopPropagation()\n\n modalService.confirm({\n title: $filter('translate')('persons.push_to_parent'),\n message: $filter('translate')('persons.push_to_parent_message'),\n onAccept: function () {\n\n let index = $scope.person.political_affiliations.indexOf(affiliation);\n affiliation.person_id = $scope.parent.id;\n $scope.person.political_affiliations.splice(index, 1);\n $scope.parent.political_affiliations.push(affiliation)\n\n $scope.parent.put().then(function (result) {\n\n if (typeof (result.id) != \"undefined\") {\n toastr.success($filter('translate')('person.push_to_parent_success'));\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n });\n };\n\n $scope.mergeMails = function (mail) {\n event.stopPropagation()\n\n modalService.confirm({\n title: $filter('translate')('persons.push_to_parent'),\n message: $filter('translate')('persons.push_to_parent_message'),\n onAccept: function () {\n\n let index = $scope.person.FK_persons_mails_persons.indexOf(mail);\n $scope.person.FK_persons_mails_persons.splice(index, 1);\n mail.person_id = $scope.parent.id;\n $scope.parent.FK_persons_mails_persons.push(mail);\n\n $scope.parent.put().then(function (result) {\n\n if (typeof (result.id) != \"undefined\") {\n toastr.success($filter('translate')('person.push_to_parent_success'));\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n });\n };\n\n $scope.mergeAddresses = function (address) {\n event.stopPropagation()\n\n modalService.confirm({\n title: $filter('translate')('persons.push_to_parent'),\n message: $filter('translate')('persons.push_to_parent_message'),\n onAccept: function () {\n\n let index = $scope.person.FK_persons_addresses_persons.indexOf(address);\n address.person_id = $scope.parent.id;\n $scope.person.FK_persons_addresses_persons.splice(index, 1);\n $scope.parent.FK_persons_addresses_persons.push(address)\n\n $scope.parent.put().then(function (result) {\n\n if (typeof (result.id) != \"undefined\") {\n toastr.success($filter('translate')('person.push_to_parent_success'));\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n });\n };\n\n $scope.mergeContacts = function (contact) {\n event.stopPropagation()\n\n modalService.confirm({\n title: $filter('translate')('persons.push_to_parent'),\n message: $filter('translate')('persons.push_to_parent_message'),\n onAccept: function () {\n\n let index = $scope.person.FK_persons_contacts_persons.indexOf(contact);\n contact.person_id = $scope.parent.id;\n $scope.person.FK_persons_contacts_persons.splice(index, 1);\n\n $scope.parent.FK_persons_contacts_persons.push(contact)\n\n $scope.parent.put().then(function (result) {\n\n if (typeof (result.id) != \"undefined\") {\n toastr.success($filter('translate')('person.push_to_parent_success'));\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n });\n };\n $scope.deletePositionContactInfo = function (entity) {\n var editedIdx = $scope.gridPersonPositionContactInfo.data.indexOf(entity);\n $scope.gridPersonPositionContactInfo.data.splice(editedIdx, 1);\n $scope.inlineEditItems['position'].FK_persons_positions_contacts_positions.splice(editedIdx, 1);\n }\n\n $scope.deletePositionAddress = function (entity) {\n var editedIdx = $scope.gridPersonPositionAddresses.data.indexOf(entity);\n $scope.gridPersonPositionAddresses.data.splice(editedIdx, 1);\n $scope.inlineEditItems['position'].FK_persons_positions_addresses_positions.splice(editedIdx, 1);\n }\n\n $scope.openAttendedEvents = function () {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: AttendedEventsModalView,\n controller: \"AttendedEventsModalCtrl\",\n resolve: {\n person_id: function () {\n return $scope.person.id;\n }\n },\n size: 'lg'\n });\n\n $modalInstance.result.then(function () {\n\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n });\n };\n\n\n $scope.openAllowedUsers = function () {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: AllowedUsersModalView,\n controller: \"AllowedUsersModalCtrl\",\n scope: $scope,\n resolve: {\n person_id: function () {\n return $scope.person.id;\n }\n },\n size: 'lg'\n });\n\n $modalInstance.result.then(function () {\n\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n });\n\n\n };\n\n $scope.printPDF = function () {\n\n $(\"#elementHideForPrint\").hide();\n $(\"#elementHideForPrintBtn1\").hide();\n $(\"#elementHideForPrintBtn2\").hide();\n $(\"#elementHideForPrintBtn3\").hide();\n $(\"#elementHideForPrintBtn4\").hide();\n $(\"#elementHideForPrintBtn5\").hide();\n $(\"#elementHideForPrintBtn6\").hide();\n\n $scope.tableResultsExport = true;\n\n html2canvas(document.querySelector(\"#documentPrint\")).then(canvas => {\n var data = canvas.toDataURL(\"image/png\", 1.0);\n $(\".modal\").css(\"height\", \"\");\n var docDefinition = {\n pageSize: {\n width: canvas.width + 100,\n height: canvas.height + 200\n },\n content: [{\n image: data,\n width: canvas.width\n }]\n };\n //@ts-ignore\n pdfMake.createPdf(docDefinition).download(\"ficha_autoridad.pdf\");\n\n $(\"#elementHideForPrint\").show();\n $(\"#elementHideForPrintBtn1\").show();\n $(\"#elementHideForPrintBtn2\").show();\n $(\"#elementHideForPrintBtn3\").show();\n $(\"#elementHideForPrintBtn4\").show();\n $(\"#elementHideForPrintBtn5\").show();\n $(\"#elementHideForPrintBtn6\").show();\n\n });\n };\n\n $scope.foldersFiles = function () {\n foldersService.folders(\"persons\", $scope.person.id, false);\n };\n\n //\n $scope.movePersonMailToPosition = function ($event, person_mail_id) {\n $event.stopPropagation();\n Restangular.one(\"Persons/MovePersonMailToPosition/\", person_mail_id).get().then(function () {\n $scope.loadGroups();\n $scope.loadPerson(true);\n });\n };\n\n $scope.movePositionMailToPerson = function ($event, position_mail_id, person_position_id) {\n $event.stopPropagation();\n Restangular.one(\"Persons/MovePositionMailToPerson/\" + position_mail_id, person_position_id).get().then(function () {\n $scope.loadGroups();\n $scope.loadPerson(true);\n });\n };\n\n $scope.moveInstitutionMailToPosition = function ($event, institution_mail_id, position_id) {\n $event.stopPropagation();\n Restangular.one(\"Persons/MoveInstitutionMailToPosition/\" + institution_mail_id, position_id).get().then(function () {\n $scope.loadGroups();\n $scope.loadPerson(true);\n });\n };\n\n $scope.movePositionMailToInstitution = function ($event, position_mail_id, institution_id) {\n $event.stopPropagation();\n Restangular.one(\"Persons/MovePositionMailToInstitution/\" + position_mail_id, institution_id).get().then(function () {\n $scope.loadGroups();\n $scope.loadPerson(true);\n });\n };\n\n\n $scope.deletePersonMail = function ($event, person_mail_id) {\n $event.stopPropagation();\n Restangular.one(\"Persons/DeletePersonMail\", person_mail_id).remove().then(function () {\n $scope.loadGroups();\n $scope.loadPerson(true);\n });\n };\n\n $scope.deletePositionEmails = function ($event, position_mail_id) {\n $event.stopPropagation();\n Restangular.one(\"Persons/DeletePositionEmails/\", position_mail_id).get().then(function () {\n $scope.loadGroups();\n $scope.loadPerson(true);\n });\n };\n\n $scope.deleteInstitutionEmails = function ($event, institution_mail_id) {\n $event.stopPropagation();\n Restangular.one(\"Persons/DeleteInstitutionMail/\", institution_mail_id).remove().then(function () {\n $scope.loadGroups();\n $scope.loadPerson(true);\n });\n\n }\n //\n\n //\n $scope.movePersonAddressToPosition = function ($event, person_address_id) {\n $event.stopPropagation();\n Restangular.one(\"Persons/MovePersonAddressToPosition/\" + person_address_id).get().then(function () {\n $scope.loadGroups();\n $scope.loadPerson(true);\n });\n };\n\n $scope.movePositionAddressToPerson = function ($event, address_id, person_position_id) {\n $event.stopPropagation();\n Restangular.one(\"Persons/MovePositionAddressToPerson/\" + address_id + \"/\" + person_position_id).get().then(function () {\n $scope.loadGroups();\n $scope.loadPerson(true);\n });\n };\n\n $scope.moveInstitutionAddressToPosition = function ($event, institution_address_id, position_id) {\n $event.stopPropagation();\n Restangular.one(\"Persons/MoveInstitutionAddressToPosition/\" + institution_address_id + \"/\" + position_id).get().then(function () {\n $scope.loadGroups();\n $scope.loadPerson(true);\n });\n };\n\n $scope.movePositionAddressToInstitution = function ($event, position_address_id, institution_id) {\n $event.stopPropagation();\n Restangular.one(\"Persons/MovePositionAddressToInstitution/\" + position_address_id + \"/\" + institution_id).get().then(function () {\n $scope.loadGroups();\n $scope.loadPerson(true);\n });\n };\n\n $scope.deletePersonAddress = function ($event, person_address_id) {\n $event.stopPropagation();\n Restangular.one(\"Persons/DeletePersonAddress\", person_address_id).remove().then(function () {\n $scope.loadGroups();\n $scope.loadPerson(true);\n });\n };\n\n $scope.deletePositionAddress = function ($event, address_id) {\n $event.stopPropagation();\n Restangular.one(\"Persons/DeletePositionAddress\", address_id).remove().then(function () {\n $scope.loadGroups();\n $scope.loadPerson(true);\n });\n };\n\n $scope.deleteInstitutionAddress = function ($event, address_id) {\n $event.stopPropagation();\n Restangular.one(\"Persons/DeleteInstitutionAddress\", address_id).remove().then(function () {\n $scope.loadGroups();\n $scope.loadPerson(true);\n });\n };\n //\n\n //\n $scope.movePositionContactToPerson = function ($event, contact_id, person_position_id) {\n $event.stopPropagation();\n Restangular.one(\"Persons/MovePositionContactToPerson/\" + contact_id + \"/\" + person_position_id).get().then(function () {\n $scope.loadGroups();\n $scope.loadPerson(true);\n });\n };\n\n $scope.movePersonContactToPosition = function ($event, person_contact_id) {\n $event.stopPropagation();\n Restangular.one(\"Persons/MovePersonContactToPosition/\" + person_contact_id).get().then(function () {\n $scope.loadGroups();\n $scope.loadPerson(true);\n });\n };\n\n $scope.moveInstitutionContactToPosition = function ($event, institution_contact_id, position_id) {\n $event.stopPropagation();\n Restangular.one(\"Persons/MoveInstitutionContactToPosition/\" + institution_contact_id + \"/\" + position_id).get().then(function () {\n $scope.loadGroups();\n $scope.loadPerson(true);\n });\n };\n\n $scope.movePositionContactToInstitution = function ($event, position_contact_id, institution_id) {\n $event.stopPropagation();\n Restangular.one(\"Persons/MovePositionContactToInstitution/\" + position_contact_id + \"/\" + institution_id).get().then(function () {\n $scope.loadGroups();\n $scope.loadPerson(true);\n });\n };\n\n $scope.deletePersonContact = function ($event, person_contact_id) {\n $event.stopPropagation();\n Restangular.one(\"Persons/DeletePersonContact\", person_contact_id).remove().then(function () {\n $scope.loadGroups();\n $scope.loadPerson(true);\n });\n };\n\n $scope.deletePositionContact = function ($event, contact_id) {\n // $log.debug(\"deletePositionContact contact_id: \", contact_id);\n $event.stopPropagation();\n Restangular.one(\"Persons/DeletePositionContact\", contact_id).remove().then(function () {\n $scope.loadGroups();\n $scope.loadPerson(true);\n });\n };\n\n $scope.deleteInstitutionContact = function ($event, contact_id) {\n // $log.debug(\"deletePositionContact contact_id: \", contact_id);\n $event.stopPropagation();\n Restangular.one(\"Persons/DeleteInstitutionContact\", contact_id).remove().then(function () {\n $scope.loadGroups();\n $scope.loadPerson(true);\n });\n };\n\n /* Operaciones con la precedencia */\n $scope.deletePositionOrder = function ($event, position_id) {\n // $log.debug(\"deletePersonPositionOrder position_id: \", position_id);\n $event.stopPropagation();\n Restangular.one(\"Persons/DeletePositionOrder/\" + position_id).get().then(function () {\n $scope.loadGroups();\n $scope.loadPerson(true);\n });\n };\n\n $scope.deletePersonPositionOrder = function ($event, position_id) {\n // $log.debug(\"deletePersonPositionOrder position_id: \", position_id);\n $event.stopPropagation();\n Restangular.one(\"Persons/DeletePersonPositionOrder/\" + position_id).get().then(function () {\n $scope.loadGroups();\n $scope.loadPerson(true);\n });\n };\n\n $scope.moveOrderToPosition = function ($event, person_position_id) {\n $event.stopPropagation();\n Restangular.one(\"Persons/MoveOrderToPosition/\" + person_position_id).get().then(function () {\n $scope.loadGroups();\n $scope.loadPerson(true);\n });\n };\n\n $scope.moveOrderToPersonPosition = function ($event, person_position_id) {\n $event.stopPropagation();\n Restangular.one(\"Persons/MoveOrderToPersonPosition/\" + person_position_id).get().then(function () {\n $scope.loadGroups();\n $scope.loadPerson(true);\n });\n };\n\n // Gestión de privados\n\n $scope.noneAllowedDialogCheck = function () {\n\n if ($scope.person.is_private == true) {\n\n if ((!$scope.allowedGroups || $scope.allowedGroups.length <= 0) && (!$scope.allowedUsers || $scope.allowedUsers.length <= 0)) {\n $scope.person.is_private = false;\n modalService.message({\n title: $filter('translate')('persons.none_allowed_title'),\n message: $filter('translate')('persons.none_allowed_message'),\n onAccept: function () { }\n });\n }\n }\n\n };\n\n $scope.setDefaultAllowedUser = function () {\n $scope.changesNotSaved = true;\n let userId = LoginService.get(\"userId\");\n if (!$scope.allowedUsers.map(u => u.entityId).includes(userId))\n Restangular.all(\"Persons\").customGET(\"AddAllowedEntity\", { id: $scope.person.id, entityId: userId, entityType: \"user\" }).then(function () {\n GetAllowedUsers();\n })\n };\n\n $scope.sendMailing = function (personId) {\n\n var listIds = [];\n listIds.push(personId);\n\n var listEmailsIds = [];\n Restangular.all(\"Persons\").customGET(\"GetAllPersonsEmailsIds\", { persons_ids: listIds }).then(function (res) {\n listEmailsIds = res;\n var params = {\n entity_type: \"persons\",\n entity_type_id: 0,\n persons_ids: listIds,\n mail_account_id: null,\n mail_account_reply: null,\n app_enabled: $scope.app_enabled,\n documents: { for_event_guest: false }\n };\n notificationService.notificationMail({\n params: params,\n onAccept: function (data) {\n toastr.success($filter('translate')('notifications.sending_mail_success'));\n }\n });\n });\n };\n\n $scope.loadTags = function () {\n if ($stateParams.id != null) {\n Restangular.all(\"Tags\").customGET(\"TagsByEntityTypeAndId\", { entity_type: \"persons\", entity_id: $stateParams.id }).then(function (result) {\n $scope.tags = result;\n });\n\n }\n }\n\n $scope.loadTags();\n\n $scope.createNewTag = function () {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: TagsModalView,\n size: \"ld\",\n controller: \"tagsEditCtrl\",\n scope: $scope,\n resolve: {\n is_modal: function () {\n return true;\n },\n entity_type: function () {\n return \"persons\"\n },\n entity_id: function () {\n return null;\n }\n\n }\n });\n }\n\n $scope.assignTags = function () {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: AssignTagsPersonModalView,\n size: \"ld\",\n controller: \"tagsEditCtrl\",\n scope: $scope,\n resolve: {\n is_modal: function () {\n return true;\n },\n entity_type: function () {\n return \"persons\";\n },\n entity_id: function () {\n return $stateParams.id;\n }\n }\n });\n\n $modalInstance.result.then(function (data) {\n $timeout(function () {\n $scope.loadTags();\n }, 800);\n }, function () {\n });\n\n }\n\n $scope.removeTag = function (tag_id) {\n Restangular.all('Tags').customPOST({}, \"DeleteTagsEntity\", { entity_id: tag_id }).then(function (result) {\n $scope.loadTags();\n })\n\n };\n\n }\n ])\n\n //controlador añadir grupo\n .controller(\"AddNewGroupModalCtrl\", ['LoginService', '$scope', '$uibModalInstance', 'Restangular', 'group_id', function (LoginService, $scope, $uibModalInstance, Restangular, group_id) {\n $scope.allowWrite = LoginService.permissionExist(\"PERSONS_WRITE\");\n $scope.group_id = group_id;\n // $log.debug(group_id);\n $scope.callbackClose = function (mode, result) {\n // $log.debug(\"Linea 1009\");\n $uibModalInstance.close(result);\n };\n\n $scope.getGroupId = function () {\n // $log.debug(\"getGroupId\", $scope.group_id);\n return $scope.group_id;\n };\n\n $scope.onCancel = function () {\n //$uibModalInstance.dismiss('cancel');\n Restangular.all('Groups').get($scope.group_id).then(function (result) {\n $uibModalInstance.close(result);\n });\n };\n\n }])\n\n .controller(\"PersonPositionAddressModalCtrl\", ['LoginService', '$scope', '$uibModalInstance', 'Restangular', 'modalService', '$filter', 'personPositionAddress', function (LoginService, $scope, $uibModalInstance, Restangular, modalService, $filter, personPositionAddress) {\n\n $scope.allowWrite = LoginService.permissionExist(\"PERSONS_WRITE\");\n $scope.personPositionAddressModal = (!angular.isUndefined(personPositionAddress) ? angular.copy(personPositionAddress) : {});\n $scope.personPositionAddressOrigin = (!angular.isUndefined(personPositionAddress) ? personPositionAddress : {});\n\n Restangular.all('Countries').getList().then(function (countries) {\n\n $scope.countries = countries;\n //Seleccionamos el correspondiente.\n if ($scope.personPositionAddressModal != null) {\n $scope.personPositionAddressModal.FK_persons_positions_addresses_countries = {};\n $scope.countries.forEach(function (pct) {\n if (pct.id == $scope.personPositionAddressModal.country_id) $scope.personPositionAddressModal.FK_persons_positions_addresses_countries.selected = pct;\n });\n }\n });\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n $scope.savePersonPositionAddress = function () {\n //Devolvemos el control al principal\n $uibModalInstance.close({ edited: $scope.personPositionAddressModal, origin: $scope.personPositionAddressOrigin });\n };//savePositionAddress\n\n }])\n\n .controller(\"PersonPositionContactModalCtrl\", ['LoginService', '$scope', '$uibModalInstance', 'Restangular', 'modalService', '$filter', 'personPositionContactInfo', function (LoginService, $scope, $uibModalInstance, Restangular, modalService, $filter, personPositionContactInfo) {\n\n $scope.allowWrite = LoginService.permissionExist(\"PERSONS_WRITE\");\n $scope.personPositionContactModal = (!angular.isUndefined(personPositionContactInfo) ? angular.copy(personPositionContactInfo) : {});\n $scope.personPositionContactOrigin = (!angular.isUndefined(personPositionContactInfo) ? personPositionContactInfo : {});\n\n Restangular.all('PersonsPositionsContactsTypes').getList().then(function (personsPositionsContactsTypes) {\n // $log.debug(personsPositionsContactsTypes);\n $scope.personsPositionsContactsTypes = personsPositionsContactsTypes;\n //Seleccionamos el correspondiente.\n if ($scope.personPositionContactModal != null) {\n $scope.personsPositionsContactsTypes.forEach(function (pct) {\n if (pct.id == $scope.personPositionContactModal.person_position_contact_type_id) $scope.personPositionContactModal.FK_persons_positions_contacts_positions_contacts_types.selected = pct;\n });\n }\n });\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n $scope.savePersonPositionContact = function () {\n //Devolvemos el control al principal\n\n $uibModalInstance.close({ edited: $scope.personPositionContactModal, origin: $scope.personPositionContactOrigin });\n\n };//save\n\n\n }])\n\n .controller(\"AllowedUsersModalCtrl\", ['LoginService', '$scope', '$uibModalInstance', 'Restangular', 'modalService', '$filter', 'person_id', function (LoginService, $scope, $uibModalInstance, Restangular, modalService, $filter, person_id) {\n\n $scope.allowWrite = LoginService.permissionExist(\"PERSONS_WRITE\");\n $scope.userToAdd = {};\n $scope.groupToAdd = {};\n\n\n\n\n // Recogemos los datos\n\n Restangular.all('Users').getList().then(function (results) {\n $scope.allowedUsersSelect = results;\n\n });\n\n Restangular.all('UsersGroups').getList().then(function (results) {\n $scope.allowedGroupsSelect = results;\n\n });\n\n // Añadimos \n $scope.addAllowedUser = function () {\n if (!$scope.allowedUsers.includes($scope.userToAdd.selected))\n Restangular.all(\"Persons\").customGET(\"AddAllowedEntity\", { id: person_id, entityId: $scope.userToAdd.selected.id, entityType: \"user\" }).then(function () {\n $scope.allowedUsers.push($scope.userToAdd.selected);\n $scope.userToAdd.selected = null;\n toastr.success($filter('translate')('persons.allowed_success'));\n })\n };\n\n $scope.addAllowedGroup = function () {\n if (!$scope.allowedGroups.includes($scope.groupToAdd.selected))\n Restangular.all(\"Persons\").customGET(\"AddAllowedEntity\", { id: person_id, entityId: $scope.groupToAdd.selected.id, entityType: \"group\" }).then(function () {\n $scope.allowedGroups.push($scope.groupToAdd.selected);\n $scope.groupToAdd.selected = null;\n toastr.success($filter('translate')('persons.allowed_group_success'));\n\n })\n };\n\n //Eliminamos \n $scope.removeAllowedUser = function (user) {\n Restangular.all(\"Persons\").customGET(\"DeleteAllowedEntity\", { id: person_id, entityId: user.id, entityType: \"user\"}).then(function () {\n let index = $scope.allowedUsers.indexOf(user);\n $scope.allowedUsers.splice(index, 1);\n toastr.success($filter('translate')('persons.deleted_allowed_success'));\n\n\n })\n };\n\n $scope.removeAllowedGroup = function (group) {\n Restangular.all(\"Persons\").customGET(\"DeleteAllowedEntity\", { id: person_id, entityId: group.id, entityType: \"group\"} ).then(function () {\n let index = $scope.allowedGroups.indexOf(group)\n $scope.allowedGroups.splice(index, 1);\n toastr.success($filter('translate')('persons.deleted_allowed_group_succes'));\n })\n };\n\n // Control del modal\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n }])\n\n;\n","import Encoding from \"encoding-japanese\";\n\nimport SearchGroupModalView from \"../events/guests/searchGroupModal.html\";\nimport AssignTagsPersonModalView from \"../tags/AssignTagsModal.html\";\n\nangular.module(\"persons\")\n\n .controller(\"PersonsListCtrl\", ['datasetsService', 'notificationService', 'treeService', '$sce', '$uibModal', 'LoginService', '$stateParams', '$filter', '$rootScope', '$scope', '$http', '$interval', '$q', 'Upload', 'Restangular', 'gridService', 'modalService', '$translate', '$window', '$state', 'generateDocumentService','$timeout', '$log',\n function (datasetsService, notificationService, treeService, $sce, $uibModal, LoginService, $stateParams, $filter, $rootScope, $scope, $http, $interval, $q, Upload, Restangular, gridService, modalService, $translate, $window, $state, generateDocumentService, $timeout, $log) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"PERSONS_WRITE\");\n $scope.allowDelete = LoginService.permissionExist(\"PERSONS_DELETE\");\n $scope.allowDiscard = LoginService.permissionExist(\"PERSONS_DISCARD\");\n $scope.allowImport = LoginService.permissionExist(\"PERSONS_IMPORT\");\n\n let importCSVConfigured = false;\n\n $scope.duplicate_string = $filter('translate')('persons.duplicate_string');\n $scope.private_string = $filter('translate')('persons.is_private');\n\n $scope.selectOptionsRegister = [\n { id: 'notRegistered', value: $filter('translate')('persons.selectNotRegistered') },\n { id: 'registered', value: $filter('translate')('persons.selectRegistered') },\n { id: 'pendingRegistered', value: $filter('translate')('persons.selectPendingRegistered') },\n { id: 'registerExpired', value: $filter('translate')('persons.selectRegisterExpired') }\n ];\n\n $scope.update_data = {};\n\n $scope.personFilter = {\n name: \"\",\n surname: \"\",\n lastname: \"\",\n position: \"\",\n state: \"\",\n listPositionsIds: [],\n is_active: true,\n is_death: false,\n positions_inactives: false,\n event: \"\",\n person_registered: \"\",\n get_duplicates: false\n };\n\n Restangular.one('Companies', $rootScope.company_id).get().then(function (results) {\n $scope.app_enabled = results.public_guest_app_enabled;\n //Mostramos o no la coluna del grid en función de la variable de empresa\n $scope.gridOptions.columnDefs[11].visible = $scope.app_enabled;\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n //reseteamos los filtros del buscador\n\n if (!angular.isDefined($stateParams.reset)) $stateParams.reset = true;\n\n if ($stateParams.reset == \"true\") {\n localStorage.removeItem(\"persons_filters\");\n } else {\n var savedFilters = localStorage.getItem(\"persons_filters\");\n if (savedFilters != null) {\n $scope.personFilter = JSON.parse(savedFilters);\n }\n }\n\n if ($stateParams.person_type == 'authority') {\n $rootScope.title = $filter('translate')('persons.title');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('persons.subtitle') }\n ];\n }\n else if ($stateParams.person_type == 'anonymous') {\n $rootScope.title = $filter('translate')('persons.title_anonymous');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('persons.title_anonymous') }\n ];\n }\n else if ($stateParams.person_type == 'imported') {\n $rootScope.title = $filter('translate')('persons.title_imported');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('persons.title_imported') }\n ];\n }\n else if ($stateParams.person_type == 'enrolled') {\n $rootScope.title = $filter('translate')('inscriptions_forms.inscripted');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('inscriptions_forms.inscripted') }\n ];\n } else {\n $rootScope.title = $filter('translate')('persons.title_all');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('persons.title_all') }\n ];\n }\n $scope.person_type = $stateParams.person_type;\n\n var optionsPIGa = { entity_type: \"persons\" };\n Restangular.all('InformationsGroups').getList(optionsPIGa).then(function (personsInformationGroups) {\n $scope.personsInformationGroups = personsInformationGroups;\n angular.forEach($scope.personsInformationGroups, function (pig) {\n if (pig.configuration != \"\") pig.configuration = JSON.parse(pig.configuration);\n });\n $scope.checkboxSimpleOptions = [\n { option: null, label: $filter('translate')('informations.all'), checked: true },\n { option: true, label: $filter('translate')('events.staff.yes'), checked: false },\n { option: false, label: $filter('translate')('events.staff.no'), checked: false }\n ];\n });\n\n $scope.composeUiPopover = function (group_id) {\n var options: any = {}\n options.id = group_id;\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + 'Groups/GetGroupsAndParent',\n params: options\n }).then(function (results, status, headers, config) {\n var data = treeService.groups(results.data, null, false);\n let html = \"\";\n angular.forEach(data, function (item) {\n html += item.customName + \"
\";\n });\n $scope.valuePopover = $sce.trustAsHtml(html);\n });\n };\n var trusted = {};\n\n $scope.getPopoverContent = function (html) {\n return trusted[html] || (trusted[html] = $sce.trustAsHtml(html));\n };\n\n // Marcamos 'duplicados' de forma similar a cómo lo hacemos en people_import\n $scope.rowFormatter = function (row) {\n return row.entity.imported_duplicate_ext_id != null;\n };\n\n $scope.gridOptions = {\n exporterMenuCsv: false,\n enableFiltering: false,\n enableGridMenu: true,\n paginationPageSizes: [50, 100, 150],\n pdfTitle: $rootScope.title,\n paginationPageSize: 50,\n exporterSuppressColumns: [\"image_id\"], //la eliminamos porque no funciona con la url, probar con base64 si se quiere.\n exporterOlderExcelCompatibility: true,\n // rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, exporterSuppressExport: true, width: 80 },\n { name: 'id_ext', visible: false, exporterSuppressExport: true, width: 80 },\n {\n name: 'is_active', displayName: \" \", visible: true, exporterSuppressExport: true, width: 30, enableHiding: false,\n //cellTemplate: '
row.entity.is_activeActivoa
'\n cellTemplate: \"
\" +\n \"\" +\n \"\" +\n \"
\"\n },\n {\n field: 'image_id',\n enableSorting: false,\n visible: $stateParams.person_type != 'anonymous' && $stateParams.person_type != 'enrolled',\n width: 50,\n enableFiltering: false,\n /*customFormatFn: function (value) {\n * no funciona con una imagen de url.\n if (value != null) {\n var img = {\n image: value,\n width: 30\n };\n return img;\n } else {\n return \"\";\n }\n },*/\n displayName: $filter('translate')('persons_reports.photo'),\n cellTemplate: \"
\"\n },\n {\n name: 'event_name', displayName: $filter('translate')('persons.event'), enableFiltering: true, enableHiding: false, visible: $stateParams.person_type === 'anonymous' || $stateParams.person_type === 'enrolled',\n cellTemplate: '
{{ row.entity.event_name }} 1\">{{row.entity.event_name}}
',\n },\n {\n customFormatFn: function (value) {\n if (value.contains(\"
\")) value = value.replaceAll(\"
\", \"\\n\");\n return value;\n },\n name: 'position_for_anonymous', displayName: $filter('translate')('persons.active_positions'),\n enableFiltering: false, enableSorting: false, width: '*', enableHiding: true, visible: $stateParams.person_type === 'anonymous',\n cellTemplate: '',\n },\n\n {\n name: 'name', displayName: $filter('translate')('persons.name'), enableFiltering: true, enableHiding: false, minWidth: 80, maxWidth: 150,\n cellTemplate: '
{{ row.entity.name }}
'\n },\n { name: 'surname', displayName: $filter('translate')('persons.surname'), enableFiltering: true, enableHiding: true, minWidth: 80, maxWidth: 150 },\n { name: 'lastname', displayName: $filter('translate')('persons.lastname'), enableFiltering: true, enableHiding: true, minWidth: 60, maxWidth: 150 },\n {\n name: 'position_order', width: 100, displayName: $filter('translate')('persons.position_order'), enableFiltering: true, enableHiding: true\n },\n {\n customFormatFn: function (value) {\n if (value.contains(\"
\")) value = value.replaceAll(\"
\", \"\\n\");\n return value;\n },\n name: 'position_and_group_name', displayName: $filter('translate')('persons.active_positions'),\n enableFiltering: false, enableSorting: false, width: '*', enableHiding: true, visible: $stateParams.person_type !== 'anonymous' && $stateParams.person_type !== 'enrolled',\n cellTemplate: '',\n },\n {\n name: 'user', width: 100, displayName: $filter('translate')('general.user'), enableFiltering: true, enableHiding: false, visible: false,\n cellTemplate: '
{{ row.entity.username }}' + $filter('translate')('persons.pte_register') + '
',\n },\n {\n name: ' ', width: 100, enableFiltering: true, enableHiding: false, visible: true,\n cellTemplate: `
`,\n },\n {\n name: ' ', width: 100, enableFiltering: true, enableHiding: false, visible: true,\n cellTemplate: `
`,\n },\n\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n // { title: $filter('translate')('persons.convert_to_authority'), action: 'ng-if=\"row.entity.person_type==\\'other\\' || row.entity.person_type==\\'anonymous\\' || row.entity.person_type==\\'imported\\'\" ng-click=\"grid.appScope.convertToType(row.entity, \\'authority\\')\"', cssIconClass: \"fa fa-exchange\" },\n // { title: $filter('translate')('persons.convert_to_other'), action: 'ng-if=\"row.entity.person_type==\\'anonymous\\' || row.entity.person_type==\\'imported\\'\" ng-click=\"grid.appScope.convertToType(row.entity, \\'other\\')\"', cssIconClass: \"fa fa-exchange\" },\n //{ title: $filter('translate')('persons.edit'), action: 'ng-if=\"row.entity.is_active || row.entity.person_type==\\'anonymous\\' || row.entity.person_type==\\'imported\\'\" ui-sref=\"persons.edit({person_type: row.entity.person_type, id:row.entity.id})\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('events.user_view'), action: 'ng-click=\"grid.appScope.goToImportDuplicate(row.entity.imported_duplicate_ext_id)\"; ng-if=\"row.entity.imported_duplicate_ext_id\"', cssIconClass: \"fa fa-users\" },\n { title: $filter('translate')('persons.edit'), action: 'ng-click=\"grid.appScope.goToEdit(row.entity)\"', cssIconClass: \"fa fa-edit\" },\n //{ title: $filter('translate')('persons.edit'), action: 'ng-if=\"!row.entity.is_active\" ui-sref=\"persons.edit({person_type: \\'inactive\\', id:row.entity.id})\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('persons.button_delete'), action: 'ng-click=\"grid.appScope.DeleteDialog(row.entity.id,row.entity.name, row.entity.surname);\" ng-if=\"grid.appScope.allowWrite && (grid.appScope.allowDelete || (grid.appScope.allowDiscard && (grid.appScope.person_type==\\'anonymous\\' || grid.appScope.person_type==\\'imported\\' || grid.appScope.person_type==\\'enrolled\\')))\" ', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n rowTemplate: '
' +\n '
' +\n '
',\n getData: function (options) {\n options.person_type = $scope.person_type;\n options.is_active = $scope.personFilter.is_active ? true : false;\n options.is_death = $scope.personFilter.is_death ? true : false;\n options.positions_inactives = $scope.personFilter.positions_inactives;\n\n if ($scope.personFilter.name != \"\") options.name = $scope.personFilter.name;\n if ($scope.personFilter.surname != \"\") options.surname = $scope.personFilter.surname;\n if ($scope.personFilter.lastname != \"\") options.lastname = $scope.personFilter.lastname;\n if ($scope.personFilter.position != \"\") options.position_name = $scope.personFilter.position;\n if ($scope.personFilter.institution != \"\") options.institution = $scope.personFilter.institution;\n if ($scope.personFilter.event_name != \"\") options.event_name = $scope.personFilter.event_name;\n if ($scope.personFilter.state != \"\") options.state = $scope.personFilter.state;\n if ($scope.personFilter.phone != \"\") options.phone = $scope.personFilter.phone;\n if ($scope.personFilter.mail != \"\") options.mail = $scope.personFilter.mail;\n if ($scope.personFilter.person_registered != \"\") options.person_registered = $scope.personFilter.person_registered;\n if ($scope.personFilter.listPositionsIds.length > 0) options.listPositionsIds = $scope.personFilter.listPositionsIds;\n if ($scope.personFilter.get_duplicates == true) options.get_duplicates = true;\n if ($scope.tags != null) options.tags = $scope.tags;\n\n var pigs = \"\";\n for (var key in $scope.personFilter.pigs) {\n\n if (typeof $scope.personFilter.pigs[key] != \"undefined\" && $scope.personFilter.pigs[key] != \"\" && $scope.personFilter.pigs[key] != null) {\n if (typeof ($scope.personFilter.pigs[key]) == \"object\") {\n //estamos en el selector simple.\n var infoFilter = $scope.personsInformationGroups.filter(function (el) { return el.id == key; });\n if (infoFilter.length == 1) {\n if (infoFilter[0].type == \"datetime\") {\n if ($scope.personFilter.pigs[key] != null) pigs += (pigs != \"\" ? \"#\" : \"\") + key + \"=>\" + new Date($scope.personFilter.pigs[key]).toISOString();\n } else if (infoFilter[0].type == \"checkboxSimple\") {\n if ($scope.personFilter.pigs[key].checked != \"\") pigs += (pigs != \"\" ? \"#\" : \"\") + key + \"=>\" + $scope.personFilter.pigs[key].checked;\n } else {\n pigs += (pigs != \"\" ? \"#\" : \"\") + key + \"=>\" + $scope.personFilter.pigs[key];\n }\n }\n } else {\n pigs += (pigs != \"\" ? \"#\" : \"\") + key + \"=>\" + $scope.personFilter.pigs[key];\n }\n }\n }\n options.pigs = pigs;\n\n //guardamos filtros\n localStorage.setItem(\"persons_filters\", JSON.stringify($scope.personFilter));\n //guardamos opciones\n localStorage.setItem(\"persons_options\", JSON.stringify(options));\n var deferred = $q.defer();\n\n Restangular.all('Persons/GetAllPersonsFiltered').post(options).then(function (results) {\n var data = results.rows;\n $scope.personsIds = results.allRowsResultIds;\n\n //Obtenemos sus imágenes\n let visibleIds = results.rows.map(function (row) { return row.id; });\n\n if (visibleIds.length > 0 && options._pageSize != null) { //para que no casque si quieren imprimir todo...\n $http({\n method: 'post',\n url: (window as any).CONFIG.api_url + 'Persons/ImagesSmall',\n params: { ids: visibleIds }\n }).then(function (resultsImage, status, headers, config) {\n angular.forEach(data, function (person) {\n for (var i = 0; i < resultsImage.data.length; i++) {\n if (person.id == resultsImage.data[i].person_id) {\n person.image_small = resultsImage.data[i].image_small;\n break;\n }\n }\n });\n });\n }\n\n data.totalRows = results.totalRows;\n $scope.totalRows = results.totalRows;\n $scope.persons = data;\n\n deferred.resolve(data);\n });\n return deferred.promise;\n }\n };\n $scope.goToEdit = function (rowEntity) {\n var idx = 0;\n $scope.persons.forEach(function (row, index) {\n if (row.id == rowEntity.id) idx = index;\n });\n\n var savedOptions = JSON.parse(localStorage.getItem(\"persons_options\"));\n var offset = (savedOptions._page - 1) * savedOptions._pageSize;\n savedOptions.row_index = offset + idx;\n savedOptions.totalRows = $scope.totalRows;\n localStorage.setItem(\"persons_options\", JSON.stringify(savedOptions));\n $state.go(\"persons.edit\", { person_type: rowEntity.person_type, id: rowEntity.id, personsIds: $scope.personsIds });\n };\n\n $scope.goToImportDuplicate = function (id) {\n var url = $state.href(\"persons.edit\", { person_type: 'authority', id: id, personsIds: [] });\n $window.open(url, '_blank');\n }\n\n\n let filter = false;\n $scope.searchPersons = function () {\n if (angular.isDefined($scope.gridOptions.loadData)) {\n filter = true;\n $scope.gridOptions.loadData(false);\n }\n };\n\n $scope.deleteSelected = function () {\n let rows = $scope.gridOptions.gridApi.selection.getSelectedRows();\n let ids = [];\n angular.forEach(rows, function (row) {\n ids.push(row.id);\n });\n if (ids.length > 0) {\n modalService.confirm({\n title: $filter('translate')('persons.button_delete'),\n message: $filter('translate')('persons.delete_all_message'),\n onAccept: function () {\n\n let options = {\n ids: ids,\n type: $stateParams.person_type\n };\n Restangular.all('Persons/DeleteAll').remove(options).then(function (result) {\n toastr.success($filter('translate')('persons.delete_success'));\n $scope.gridOptions.loadData(false);\n });\n\n }\n });\n }\n };\n\n $scope.DeleteDialog = function (id, name, surname) {\n $scope.id = id;\n $scope.name = name + \" \" + surname;\n modalService.confirm({\n title: $filter('translate')('persons.button_delete'),\n message: $filter('translate')('persons.delete_message') + \" \" + $scope.name + \"?\",\n onAccept: function () {\n Restangular.one('Persons', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('persons.delete_success'));\n $scope.gridOptions.loadData(false);\n }, function (response) {\n $log.error(\"Error with status code\", response.status);\n alert(\"Error al borrar\")\n });\n }\n });\n };\n $scope.export = function () {\n\n var options = {\n filters: {\n PERSON_TYPE: $scope.person_type,\n NAME: $scope.personFilter.name,\n SURNAME: $scope.personFilter.surname,\n LASTNAME: $scope.personFilter.lastname,\n POSITION: $scope.personFilter.position,\n STATE: $scope.personFilter.state,\n LIST_POSITIONS_IDS: $scope.personFilter.listPositionsIds,\n IS_ACTIVE: $scope.personFilter.is_active ? true : false,\n POSITIONS_INACTIVE: $scope.personFilter.positions_inactives\n }\n };\n\n var n = 0;\n\n for (var key in $scope.personFilter.pigs) {\n n++;\n if (!angular.isUndefined($scope.personFilter.pigs[key].checked)) {\n options.filters[\"PIG\" + n] = \"#\" + key + \"=\" + $scope.personFilter.pigs[key].checked + \"#\";\n } else {\n options.filters[\"PIG\" + n] = \"#\" + key + \"=\" + $scope.personFilter.pigs[key] + \"#\";\n }\n }\n\n datasetsService.exportByType(\"persons\", options);\n };\n\n let initImportCSV = function (type) {\n $(\"#frmCSV\").change(function () {\n const fileInput = document.querySelector('#frmCSV') as HTMLInputElement;\n let file = fileInput?.files?.[0];\n if (file) {\n let reader = new FileReader();\n reader.onload = function (e) {\n const codes = new Uint8Array(e.target?.result as ArrayBuffer);\n const detectedEncoding = Encoding.detect(codes);\n try {\n let unicodeString = Encoding.convert(codes, {\n to: 'unicode',\n from: detectedEncoding,\n type: 'string'\n });\n\n let request = {\n file: btoa(unicodeString),\n person_type: type,\n mime: file.type\n }\n Restangular.all('Persons/ImportCSV').post(request).then(function (data) {\n $state.go('persons.import', { people: data, person_type: $scope.person_type });\n });\n } catch (e) {\n // Uncaught RangeError: Maximum call stack size exceeded\n }\n };\n reader.readAsDataURL(file);\n }\n });\n\n };\n\n $scope.importCSV = function (type) {\n if (!importCSVConfigured) {\n importCSVConfigured = true;\n initImportCSV(type);\n }\n $(\"#frmCSV\").trigger(\"click\");\n };\n\n $scope.convertToType = function (type) {\n //Voy a ignoarar esta opción en el masivo. Ahora sólo se mandará los que están siendo visibles en la vista, no más, porque\n //sino hay problemas con los filtros, si filtran, y seleccionan el único resultado, está mandando el addAll y entonces se pasan TODOS.\n //var addAll = $scope.gridOptions.gridApi.selection.getSelectAllState();\n var addAll = false;\n\n var rows = $scope.gridOptions.gridApi.selection.getSelectedRows();\n var ids = [];\n var rowsToMerge = []; // Las personas a las que vamos a fusionar con una autoridad\n angular.forEach(rows, function (row) {\n if (row.imported_duplicate_ext_id != null) {\n rowsToMerge.push(row); // Añadimos 0 de placeholder para que no nos lo detecte vacío\n } else {\n ids.push(row.id);\n }\n });\n if (ids.length > 0 || rowsToMerge.length > 0) {\n $scope.update_data.all_persons = false;//addAll;\n $scope.update_data.add_persons_duplicates = false;\n $scope.update_data.id_list = ids;\n $scope.update_data.old_type = $stateParams.person_type;\n $scope.update_data.new_type = type;\n modalService.confirm({\n title: $filter('translate')('persons.convert_to_' + type),\n message: $filter('translate')('persons.convert_to_' + type + '_message_massive'),\n onAccept: function () {\n if ($stateParams.person_type == \"anonymous\" || $stateParams.person_type == \"imported\" || $stateParams.person_type == \"enrolled\") {\n\n // Importamos aquellos con id_ext coincidente\n rowsToMerge.forEach(function (row) {\n $scope.mergeWithAuthority(row);\n });\n\n //preparamos opciones\n var options = {\n all: addAll,\n ids: ids,\n type: $stateParams.person_type /*,\n person_type: $scope.person_type,\n name: $scope.personFilter.name,\n surname: $scope.personFilter.surname,\n lastname: $scope.personFilter.lastname,\n position_name: $scope.personFilter.position,\n listPositionsIds: $scope.personFilter.listPositionsIds*/\n\n };\n Restangular.all('Persons').customGET(\"CheckIfExistsMassive\", options).then(function (result) {\n if (result.ids != \"\" && result.ids !== null) {\n var arrayIds = result.ids.split(\",\");\n $scope.update_data.id_list = arrayIds;\n\n /*angular.forEach(arrayIds, function (item) {\n var indice = $scope.update_data.id_list.indexOf(parseInt(item));\n if (indice == 0) {\n $scope.update_data.id_list.splice(indice, 1);\n }\n });*/\n\n modalService.confirm({\n title: $filter('translate')('persons.person_already_exist_massive'),\n message: $filter('translate')('persons.person_already_exist_message_massive') + \"

\" + result.message,\n onAccept: function () {\n $scope.update_data.add_persons_duplicates = true;\n $scope.update_data.id_list = ids;\n Restangular.all('Persons/UpdateTypeMassive').post($scope.update_data).then(function (data) {\n toastr.success($filter('translate')('persons.update_massive_success'));\n $scope.gridOptions.loadData(false);\n });\n },\n onCancel: function () {\n $scope.update_data.add_persons_duplicates = false;\n $scope.update_data.id_list = ids;\n Restangular.all('Persons/UpdateTypeMassive').post($scope.update_data).then(function (data) {\n toastr.success($filter('translate')('persons.update_massive_success'));\n $scope.gridOptions.loadData(false);\n });\n }\n });\n } else {\n Restangular.all('Persons/UpdateTypeMassive').post($scope.update_data).then(function (data) {\n toastr.success($filter('translate')('persons.update_massive_success'));\n $scope.gridOptions.loadData(false);\n });\n }\n });\n } else {\n Restangular.all('Persons/UpdateTypeMassive').post($scope.update_data).then(function (result) {\n toastr.success($filter('translate')('persons.update_massive_success'));\n $scope.gridOptions.loadData(false);\n });\n }\n }\n });\n } else {\n modalService.message({\n title: \"Error\",\n message: $filter('translate')('persons.select_persons'),\n onAccept: function () { }\n });\n }\n };\n\n $scope.searchGroup = function () {\n\n let $modalInstance = $uibModal.open({\n animation: true,\n template: SearchGroupModalView,\n size: \"lg\",\n controller: \"SearchGroupModalCtrl\",\n resolve: {\n preselect: function () {\n return false; //para preseleccionar los grupos ya buscados\n },\n event_id: function () {\n return 0;\n },\n is_filter: function () {\n return false;\n },\n listGroupsIds: function () {\n return [];\n },\n listPositionsIds: function () {\n return [];\n }\n }\n });\n //Response del modal\n $modalInstance.result.then(function (groups) {\n if (groups.listPositions.length > 0) {\n $scope.personFilter.listPositionsIds = groups.listPositions;\n $scope.searchPersons();\n }\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n if (!$scope.$$phase) $scope.$apply();\n });\n };\n\n $scope.clearGroupFilter = function () {\n $scope.personFilter = {\n name: \"\",\n surname: \"\",\n lastname: \"\",\n position: \"\",\n state: \"\",\n is_active: true,\n positions_inactives: false,\n listPositionsIds: []\n };\n\n localStorage.removeItem(\"name\");\n localStorage.removeItem(\"surname\");\n localStorage.removeItem(\"lastname\");\n localStorage.removeItem(\"position\");\n localStorage.removeItem(\"positions_inactives\");\n localStorage.removeItem(\"listPositionsIds\");\n\n $scope.tags = [];\n\n $scope.searchPersons();\n };\n\n //\n\n $scope.mergeWithAuthority = function (rowEntity) { // TO BE CONTINUED\n Restangular.one(\"Persons/MergeWithAuthority\").get({ importedId: rowEntity.id, authorityId: rowEntity.imported_duplicate_ext_id }).then(function (result) {\n toastr.success($filter('translate')('persons.merge_with_authority_success'));\n $scope.gridOptions.loadData(false);\n });\n };\n\n $scope.printDialog = function (code, type_document, type_result, id) {\n var rows = $scope.gridOptions.gridApi.selection.getSelectedRows();\n var persons_ids = _.chain(rows)\n .map(function (row) { return row.id; })\n .value();\n\n var params = {\n entity_type: \"persons\",\n entity_type_id: $stateParams.id,\n persons_ids: persons_ids,\n documents: { codes: [code] }\n };\n\n generateDocumentService.documentNew({\n params: params,\n onAccept: function (data) {\n angular.forEach(data, function (item) {\n $http({\n method: 'post',\n url: (window as any).CONFIG.api_url + 'documentgenerator/Generate',\n params: { document_id: item.document_id, persons_ids: persons_ids.toString(), order: item.url_params, outputType: 'pdf' }\n }).then(function (result, status, headers, config) {\n var url = (window as any).CONFIG.api_url + 'documentgenerator/download/' + result.data;\n window.open(url, '_blank');\n });\n })\n }\n });\n };\n\n $scope.sendPushNotifications = function () {\n var rows = $scope.gridOptions.gridApi.selection.getSelectedRows();\n var listIds = _.chain(rows)\n .map(function (row) { return row.id; })\n .value();\n if (listIds.length == 0) {\n modalService.message({\n title: \"Error\",\n message: $filter('translate')('persons.select_authority'),\n onAccept: function () { }\n });\n } else {\n let params = {\n listIds: listIds,\n type: 'person'\n };\n notificationService.notificationPush({\n params: params,\n onAccept: function (data) {\n toastr.success($filter('translate')('notifications.sending_mail_success'));\n }\n });\n }\n }\n\n $scope.sendMailing = function () {\n var rows = $scope.gridOptions.gridApi.selection.getSelectedRows();\n var listIds = _.chain(rows)\n .map(function (row) { return row.id; })\n .value();\n if (listIds.length == 0) {\n modalService.message({\n title: \"Error\",\n message: $filter('translate')('persons.select_authority'),\n onAccept: function () { }\n });\n } else {\n var listEmailsIds = [];\n Restangular.all(\"Persons\").customGET(\"GetAllPersonsEmailsIds\", { persons_ids: listIds }).then(function (res) {\n\n listEmailsIds = res;\n\n var params = {\n entity_type: \"persons\",\n entity_type_id: 0,\n persons_ids: listIds,\n mail_account_id: null,\n mail_account_reply: null,\n app_enabled: $scope.app_enabled,\n documents: { for_event_guest: false }\n };\n\n notificationService.notificationMail({\n params: params,\n onAccept: function (data) {\n toastr.success($filter('translate')('notifications.sending_mail_success'));\n }\n });\n\n });\n }\n }\n\n $scope.assignTags = function () {\n var rows = $scope.gridOptions.gridApi.selection.getSelectedRows();\n var listIds = _.chain(rows)\n .map(function (row) { return row.id; })\n .value();\n if (listIds.length == 0) {\n modalService.message({\n title: \"Error\",\n message: $filter('translate')('persons.select_authority'),\n onAccept: function () { }\n });\n } else {\n\n let $modalInstance = $uibModal.open({\n animation: true,\n template: AssignTagsPersonModalView,\n size: \"ld\",\n controller: \"tagsEditCtrl\",\n scope: $scope,\n resolve: {\n is_modal: function () {\n return true;\n },\n entity_type: function () {\n return \"persons\";\n },\n entity_id: function () {\n return listIds;\n }\n }\n });\n\n }\n }\n\n $scope.searchByTags = function () {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: AssignTagsPersonModalView,\n size: \"ld\",\n controller: \"tagsEditCtrl\",\n scope: $scope,\n resolve: {\n is_modal: function () {\n return true;\n },\n entity_type: function () {\n return \"persons\";\n },\n entity_id: function () {\n return null;\n }\n }\n });\n\n $modalInstance.result.then(function (data) {\n $scope.tags = [];\n angular.forEach(data, function (key, item) {\n Restangular.one('Tags', item).get().then(function (result) {\n $scope.tags.push(result);\n })\n });\n $timeout(function () {\n $scope.personFilter.tags = $scope.tags;\n $scope.searchPersons();\n }, 1000);\n\n }, function () {\n });\n }\n\n }]);\n","\nimport BreadcrumbView from \"../common/breadcrumb/breadcrumb.html\";\nimport PersonsListView from \"./persons-list.html\";\nimport PersonsDuplicatesListView from \"./persons_duplicates-list.html\";\nimport PersonsEditView from \"./persons-edit.html\";\nimport PersonImportView from \"./import/person-import.html\";\n\nangular.module(\"persons\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('persons', {\n url: \"/persons\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n })\n .state('persons.list', {\n url: \"/list/:person_type/:reset\",\n controller: \"PersonsListCtrl\",\n template: PersonsListView,\n cache: false,\n data: { pageTitle: \"Autoridades\" },\n requiredPermission: [\"PERSONS_READ\"]\n })\n .state('persons.duplicates_list', {\n url: \"/list/duplicates\",\n controller: \"PersonsDuplicatesListCtrl\",\n template: PersonsDuplicatesListView,\n cache: false,\n data: { pageTitle: \"Autoridades\" },\n requiredPermission: [\"PERSONS_READ\"]\n })\n .state('persons.edit', {\n url: \"/edit/:person_type/:id\",\n controller: \"PersonsEditCtrl\",\n template: PersonsEditView,\n cache: false,\n data: { pageTitle: \"Autoridades\" },\n params: {\n person_type: null,\n id: null,\n coming_from_duplicates: false,\n personsIds: []\n },\n requiredPermission: [\"PERSONS_READ\"]\n })\n .state('persons.import', {\n url: \"/import\",\n controller: \"PersonsImportCtrl\",\n template: PersonImportView,\n cache: false,\n requiredPermission: [\"PERSONS_READ\"],\n params: {\n people: null,\n person_type: 'anonymous'\n }\n })\n ;\n }])\n;","import PersonsDuplicatesMergeModalView from \"./personDuplicatesMergeModal.html\";\n\n\nangular.module(\"persons\")\n\n .controller(\"PersonsDuplicatesListCtrl\", ['datasetsService', 'notificationService', 'treeService', '$sce', '$uibModal', 'LoginService', '$stateParams', '$filter', '$rootScope', '$scope', '$http', '$interval', '$q', 'Restangular', 'gridService', 'modalService', '$translate', '$window', '$state', 'generateDocumentService', 'uiGridTreeViewConstants', '$log',\n function (datasetsService, notificationService, treeService, $sce, $uibModal, LoginService, $stateParams, $filter, $rootScope, $scope, $http, $interval, $q, Restangular, gridService, modalService, $translate, $window, $state, generateDocumentService, uiGridTreeViewConstants, $log) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"PERSONS_WRITE\");\n\n //Reseteamos los filtros del buscador\n $scope.options = {dni: \"false\", show_hidden: false};\n $scope.duplicatesFilter = { name: \"\" };\n let filter = false;\n\n $scope.mergeGroup = [];\n\n $scope.duplicate_string = $filter('translate')('persons.duplicate_string');\n\n // Breadcrumbs\n $rootScope.title = $filter('translate')('persons.duplicates_title');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('persons.duplicates_list') }\n ];\n\n $scope.parsePersonType = function (person_type) {\n\n var result = \"\";\n\n if (person_type == \"authority\") {\n result = $filter('translate')('persons.title');\n }\n if (person_type === \"anonymous\") {\n result = $filter('translate')('persons.title_anonymous');\n } else if (person_type === \"imported\") {\n result = $filter('translate')('persons.title_imported');\n } else if (person_type === \"enrolled\") {\n result = $filter('translate')('inscriptions_forms.inscripted');\n }\n\n return result;\n\n };\n\n var trusted = {};\n\n $scope.getPopoverContent = function (html) {\n return trusted[html] || (trusted[html] = $sce.trustAsHtml(html));\n };\n\n //Definimos el grid\n $scope.gridOptions = {\n exporterMenuCsv: false,\n enableFiltering: false,\n enableGridMenu: true,\n\n paginationPageSizes: [20, 40, 60],\n paginationPageSize: 20,\n pdfTitle: $rootScope.title,\n exporterSuppressColumns: [\"image_id\"], //la eliminamos porque no funciona con la url, probar con base64 si se quiere.\n exporterOlderExcelCompatibility: true,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, exporterSuppressExport: true, width: 80 },\n { name: 'id_ext', visible: false, exporterSuppressExport: true, width: 80 },\n {\n name: 'is_active', displayName: \" \", visible: true, exporterSuppressExport: true, width: 30, enableHiding: false,\n //cellTemplate: '
row.entity.is_activeActivoa
'\n cellTemplate: \"
\" +\n \"\" +\n \"\" +\n \"
\"\n },\n {\n customFormatFn: function (value) {\n if (value.contains(\"
\")) value = value.replaceAll(\"
\", \"\\n\");\n return value;\n },\n name: 'position_for_anonymous', displayName: $filter('translate')('persons.active_positions'),\n enableFiltering: false, enableSorting: false, width: '*', enableHiding: true, visible: $stateParams.person_type === 'anonymous',\n cellTemplate: '',\n },\n { name: 'name', displayName: $filter('translate')('persons.name'), enableFiltering: true, enableHiding: false, minWidth: 250 },\n { name: 'surname', displayName: $filter('translate')('persons.surname'), enableFiltering: true, enableHiding: true, minWidth: 80, maxWidth: 150 },\n { name: 'lastname', displayName: $filter('translate')('persons.lastname'), enableFiltering: true, enableHiding: true, minWidth: 60, maxWidth: 150 },\n {\n name: 'person_type', displayName: $filter('translate')('persons.type'), enableFiltering: true, enableHiding: true, minWidth: 60, maxWidth: 150,\n cellTemplate: '
{{grid.appScope.parsePersonType(row.entity.person_type)}}
'\n },\n {\n customFormatFn: function (value) {\n if (value.contains(\"
\")) value = value.replaceAll(\"
\", \"\\n\");\n return value;\n },\n name: 'position_and_group_name', displayName: $filter('translate')('persons.active_positions'),\n enableFiltering: false, enableSorting: false, width: '*', enableHiding: true, visible: $stateParams.person_type !== 'anonymous' && $stateParams.person_type !== 'enrolled',\n cellTemplate: '',\n },\n {\n name: ' ', width: 100, enableFiltering: true, enableHiding: false, visible: true,\n cellTemplate: `
`,\n },\n {\n name: ' ', width: 350, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('persons.hide_from_duplicates'), action: 'ng-click=\"grid.appScope.toggleHidden(row.entity)\" ng-if=\"!row.entity.is_group && !row.entity.hide_from_duplicates\"', cssIconClass: \"fas fa-eye\" },\n { title: $filter('translate')('persons.show_to_duplicates'), action: 'ng-click=\"grid.appScope.toggleHidden(row.entity)\" ng-if=\"!row.entity.is_group && row.entity.hide_from_duplicates\"', cssIconClass: \"fas fa-eye-slash\"},\n { title: $filter('translate')('persons.edit'), action: 'ng-click=\"grid.appScope.goToEdit(row.entity)\" ng-if=\"!row.entity.is_group\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('persons.duplicates.merge'), action: 'ng-click=\"grid.appScope.goToMerge(row.entity)\" ng-if=\"!row.entity.is_group && !row.entity.duplicate_of\"', cssIconClass: \"fa fa-people-arrows\" },\n { title: $filter('translate')('persons.duplicates.unmark'), action: 'ng-click=\"grid.appScope.unmark(row.entity)\" ng-if=\"!row.entity.is_group && row.entity.duplicate_of\"', cssIconClass: \"fa fa-undo\" },\n { title: $filter('translate')('persons.button_delete'), action: 'ng-click=\"grid.appScope.DeleteDialog(row.entity.id,row.entity.name, row.entity.surname);\" ng-if=\"grid.appScope.allowWrite && !row.entity.is_group\" && (grid.appScope.allowDelete || (grid.appScope.allowDiscard && (grid.appScope.person_type==\\'anonymous\\' || grid.appScope.person_type==\\'imported\\' || grid.appScope.person_type==\\'enrolled\\')))\" ', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n\n var deferred = $q.defer();\n options = $scope.options;\n\n var firstRow = ($scope.gridOptions.paginationCurrentPage - 1) * $scope.gridOptions.paginationPageSize;\n\n Restangular.all('Persons/Duplicates').getList(options).then(function (results) {\n var data: any = [];\n\n if ($scope.options.dni != \"true\") {\n\n // Hacemos los grupos a mano\n\n let persons = [];\n let personsList = [];\n results.forEach(function (group) {\n persons = [...group, ...persons];\n });\n persons.forEach(function (person) {\n person.key = person.fullnameNormalized;\n });\n let uniqueNames = [...new Set(persons.map(c => c.key))];\n\n uniqueNames.forEach(function (unique) {\n let followers = persons.filter(c => c.key == unique);\n personsList = [...personsList, followers];\n results = personsList;\n })\n\n }\n\n let results2;\n\n if ($scope.duplicatesFilter.name != \"\" && filter == true) {\n $log.debug(results[0][0].name + results[0][0].surname + results[0][0].lastname)\n results2 = results.filter((d) => d.some((i) => `${i.name}${i.surname}${i.lastname}`.toLowerCase().includes($scope.duplicatesFilter.name.toLowerCase())))\n \n results2 = results2.slice(firstRow, firstRow + $scope.gridOptions.paginationPageSize);\n } else {\n results2 = results.slice(firstRow, firstRow + $scope.gridOptions.paginationPageSize);\n }\n\n results2.forEach(result => {\n let group = {\n name: $scope.options.dni == \"true\" ? `Duplicados DNI: ${result[0].num_identification}` : `Duplicados de ${result[0].name} ${result[0].surname}`,\n $$treeLevel: 0,\n is_group: true\n };\n\n // Asignamos una Key para reconocer posteriormente a los elementos que forman parte del mismo grupo. \n let num = 0;\n result.forEach(r => {\n r.key = group.name;\n r.identifier = num;\n num++;\n });\n\n data = [...data, group, ...result];\n\n });\n\n filter = false;\n $log.debug(data)\n data.totalRows = results.length;\n\n $scope.duplicatesData = data;\n deferred.resolve(data);\n\n });\n\n return deferred.promise;\n\n }\n\n };\n\n $scope.search = function () {\n if (angular.isDefined($scope.gridOptions.loadData)) {\n filter = true;\n $scope.gridOptions.loadData(false);\n }\n };\n\n $scope.goToEdit = function (rowEntity) {\n\n // $state.go(\"persons.edit\", { person_type: rowEntity.person_type, id: rowEntity.id, coming_from_duplicates: true });\n\n var url = $state.href(\"persons.edit\", { person_type: rowEntity.person_type, id: rowEntity.id, coming_from_duplicates: true });\n $window.open(url, '_blank');\n\n };\n\n\n $scope.goToMerge = function (person) {\n\n $scope.mergeGroup = $scope.duplicatesData.filter((d) => d.key == person.key && d.duplicate_of == null);\n $scope.mergeGroup[person.identifier].is_main = \"true\";\n $scope.mergeGroup[person.identifier].selected = true;\n\n $scope.$modalInstance = $uibModal.open({\n animation: true,\n template: PersonsDuplicatesMergeModalView,\n controller: \"PersonsDuplicatesMergeCtrl\",\n size: 'lg',\n scope: $scope,\n resolve: {}\n\n });\n\n };\n\n $scope.unmark = function (person) {\n person.duplicate_of = null;\n Restangular.one('Persons', person.id).get().then(function (result) {\n person = result;\n person.duplicate_of = null;\n person.put().then(function (result) {\n if (typeof (result.id) != \"undefined\") {\n toastr.success($filter('translate')('persons.duplicates_unmarked_success'));\n } else {\n $scope.errorMessage = result.message;\n }\n });\n });\n };\n\n $scope.toggleHidden = function (person) {\n \n if (!person.hide_from_duplicates == true) {\n person.hide_from_duplicates = true\n } else {\n person.hide_from_duplicates = null\n }\n person.duplicate_of = null;\n\n Restangular.one('Persons', person.id).get().then(function (result) {\n person = result;\n person.duplicate_of = null;\n if (!person.hide_from_duplicates == true) {\n person.hide_from_duplicates = true\n } else {\n person.hide_from_duplicates = null\n }\n person.put();\n });\n\n };\n\n $scope.DeleteDialog = function (id, name, surname) {\n $scope.id = id;\n $scope.name = name + \" \" + surname;\n modalService.confirm({\n title: $filter('translate')('persons.button_delete'),\n message: $filter('translate')('persons.delete_message') + \" \" + $scope.name + \"?\",\n onAccept: function () {\n Restangular.one('Persons', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('persons.delete_success'));\n $scope.gridOptions.loadData(false);\n }, function (response) {\n $log.error(\"Error with status code\", response.status);\n alert(\"Error al borrar\")\n });\n }\n });\n };\n\n }])\n\n .controller(\"PersonsDuplicatesMergeCtrl\", ['$filter', '$scope', 'Restangular', '$log',\n function ( $filter, $scope, Restangular, $log) {\n\n\n $scope.changeMain = function (person) {\n $scope.mergeGroup.forEach(p => p.is_main = \"false\");\n if (person.is_main != \"true\") {\n person.is_main = \"true\"\n person.selected = true\n }\n };\n\n $scope.onCancel = function () {\n $scope.mergeGroup.forEach(p => {\n p.is_main = \"false\";\n p.selected = false;\n });\n $scope.$modalInstance.dismiss('cancel');\n };\n\n $scope.merge = function () {\n\n let dataToSend = $scope.mergeGroup.filter((m) => m.selected == true && m.is_main != \"true\");\n $log.debug(dataToSend);\n\n \n if (dataToSend.length > 0) {\n\n let mainPerson = $scope.mergeGroup.filter((m) => m.is_main == \"true\")[0];\n $log.debug(mainPerson)\n $log.debug(dataToSend)\n\n\n dataToSend.forEach(person => {\n\n person.duplicate_of = mainPerson.id;\n\n // Hay que hacer el Get porque el person no esta 'Restangulariced' y hacer directamente person.put() no funcionaría\n Restangular.one('Persons', person.id).get().then(function (result) {\n person = result;\n person.duplicate_of = mainPerson.id;\n person.put().then(function (result) {\n if (typeof (result.id) != \"undefined\") {\n toastr.success($filter('translate')('persons.duplicates_marked_success'));\n } else {\n $scope.errorMessage = result.message;\n }\n\n });\n });\n \n });\n\n $log.debug(dataToSend);\n $scope.$modalInstance.close();\n\n } else {\n $scope.errorMessage = $filter('translate')('persons.too_few_duplicates') ;\n $scope.$modalInstance.dismiss('cancel');\n };\n \n };\n\n }])","\nimport html2canvas from \"html2canvas\";\nimport pdfMake from \"pdfmake\";\n\nimport AddGroupModalView from \"./addGroupModal.html\";\nimport PositionModalView from \"../groups/PositionModal.html\";\nimport PersonPositionAddressModalView from \"./PersonPositionAddressModal.html\";\nimport PersonPositionContactModalView from \"./PersonPositionContactModal.html\";\nimport AttendedEventsModalView from \"./AttendedEventsModal.html\";\n\nangular.module(\"persons\")\n .controller(\"PersonsMergeCtrl\", ['foldersService', 'LoginService', '$http', '$filter', '$scope', '$rootScope', '$controller', '$state', '$stateParams', 'Restangular', '$uibModal', 'modalService', '$compile', 'gridService', 'treeService', '$sce', '$q', '$interval', '$timeout', 'uiGridConstants', '$log',\n function (foldersService, LoginService, $http, $filter, $scope, $rootScope, $controller, $state, $stateParams, Restangular, $uibModal, modalService, $compile, gridService, treeService, $sce, $q, $interval, $timeout, uiGridConstants, $log) {\n\n $scope.urlApi = (window as any).CONFIG.api_url;\n\n $scope.changesNotSaved = false;\n\n //Comprobamos si la empresa tiene marcado la opción de el artículo 10 para mostrar las opciones en consecuencia\n\n $scope.article10 = false;\n Restangular.one('Companies', $rootScope.company_id).get().then(function (results) {\n if (results.article_10 == true) { $scope.article10 = true; }\n }),\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"PERSONS_WRITE\");\n $scope.allowDelete = LoginService.permissionExist(\"PERSONS_DELETE\");\n $scope.allowDiscard = LoginService.permissionExist(\"PERSONS_DISCARD\");\n $scope.allowFoldersFiles = LoginService.permissionExist(\"FILES_READ\");\n\n //Usar estas variables, ya que se reutiliza el controlador en otro lado.\n $scope.stateParams_person_type = $stateParams.person_type;\n $scope.stateParams_id = $stateParams.id;\n\n $scope.personOptions = function (options) {\n // $log.debug(options);\n $scope.stateParams_person_type = options.person_type;\n $scope.callbackClose = options.callbackClose;\n $scope.stateParams_id = \"\";\n $scope.person.person_type = options.person_type;\n };\n\n let limit_image_width = 0;\n let limit_image_height = 0;\n\n\n var savedOptions = JSON.parse(localStorage.getItem(\"persons_options\"));\n\n //preparamos barra de navegacion\n $scope.navigation = {\n _page: -1,\n _pageSize: 1,\n _pages: 1\n };\n\n let prepareTitle = function () {\n if ($stateParams.person_type == 'authority') {\n $rootScope.title = $filter('translate')('persons.subtitle');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('persons.title'), url: \"persons.list({ person_type: '\" + $stateParams.person_type + \"', reset: false })\" }\n ];\n }/*else if ($stateParams.person_type == 'other') {\n $rootScope.title = $filter('translate')('persons.title_other');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('persons.subtitle_other') }\n ];\n }\n else if ($stateParams.person_type == 'inactive') {\n $rootScope.title = $filter('translate')('persons.title_inactive');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('persons.title_inactive') }\n ];\n }*/\n else if ($stateParams.person_type == 'anonymous') {\n $rootScope.title = $filter('translate')('persons.title_anonymous');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('persons.title_anonymous') }\n ];\n }\n else if ($stateParams.person_type == 'imported') {\n $rootScope.title = $filter('translate')('persons.title_imported');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('persons.title_imported') }\n ];\n }\n else if ($stateParams.person_type == 'enrolled') {\n $rootScope.title = $filter('translate')('inscriptions_forms.inscripted');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('inscriptions_forms.inscripted') }\n ];\n } else {\n $rootScope.title = $filter('translate')('persons.title_all');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('persons.title_all') }\n ];\n }\n }\n\n $scope.prepareNavigationBar = function () {\n\n prepareTitle();\n $scope.changesNotSaved = false;\n if ($scope.navigation._page != -1) {\n savedOptions._page = $scope.navigation._page;\n savedOptions._pageSize = $scope.navigation._pageSize;\n }\n\n\n Restangular.all('Persons/GetNextPersonId').post(savedOptions).then(function (results) {\n var data = results.rows;\n if ($scope.navigation._page == -1) {\n //buscamos posicion en resultados si es el primero que cargamos del conjunto\n $scope.navigation._pages = results.totalRows;\n $scope.navigation._page = savedOptions.row_index + 1;\n } else {\n //asignamos nuevo id y cargamos\n $scope.stateParams_id = results.rows[0];\n $scope.loadPerson(false);\n }\n // // $log.debug(data);\n });\n };\n\n $scope.prepareNavigationBar();\n\n $scope.navigatePrevious = function () {\n if ($scope.navigation._page > 1) $scope.navigation._page--;\n $scope.prepareNavigationBar();\n };\n $scope.navigateNext = function () {\n if ($scope.navigation._page < $scope.navigation._pages) $scope.navigation._page++;\n $scope.prepareNavigationBar();\n };\n\n //cargamos datos auxiliares\n $scope.loadLanguages = function () {\n Restangular.all('Languages').getList({ only_active: true }).then(function (languages) {\n $scope.selectLanguages = languages;\n });\n };\n $scope.loadLanguages();\n\n //Lista de parejas de autoridades\n $scope.loadAllPersons = function () {\n Restangular.all('Persons/AllPersons').getList().then(function (persons) {\n $scope.couplePersons = persons;\n $scope.couplePersons.unshift({\n id: null,\n name: $filter(\"translate\")('persons.no_couple')\n });\n });\n };\n $scope.genders = [{ id: 'M', name: $filter(\"translate\")('persons.gender_male') }, { id: 'F', name: $filter(\"translate\")('persons.gender_female') }, { id: 'N', name: $filter(\"translate\")('persons.gender_neutral') }];\n $scope.loadGroups = function (reload) {\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + '/Groups/GetGroupsPositions'\n }).then(function (results, status, headers, config) {\n var data = treeService.groups(results.data.rows, null);\n $scope.personGroups = data;\n $rootScope.personGroups = data;\n });\n };\n\n $scope.loadGroups(false);\n\n\n $scope.loadPersonsTreatments = function (reload) {\n if (angular.isDefined($scope.personTreatments) && !reload) return Promise.resolve();\n return Restangular.all('PersonsTreatments').getList().then(function (treatments) {\n $scope.personTreatments = treatments;\n });\n };\n $scope.loadPoliticalAffiliations = function (reload) {\n if (angular.isDefined($scope.politicalAffiliations) && !reload) return;\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + '/PoliticalAffiliations'\n }).then(function (results, status, headers, config) {\n $scope.politicalAffiliations = results.data.rows;\n });\n };\n $scope.loadContactTypes = function (reload) {\n if (angular.isDefined($scope.contactTypes) && !reload) return;\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + '/PersonsContactsTypes'\n }).then(function (results, status, headers, config) {\n $scope.contactTypes = results.data.rows;\n });\n };\n $scope.loadCountries = function (reload) {\n if (angular.isDefined($scope.countries) && !reload) return;\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + '/Countries'\n }).then(function (results, status, headers, config) {\n $scope.countries = results.data.rows;\n });\n };\n $scope.loadPersonsInformationsGroups = function () {\n var options = { entity_type: \"persons\" };\n Restangular.all('InformationsGroups').getList(options).then(function (personsInformationGroups) {\n $scope.personsInformationGroups = personsInformationGroups;\n $scope.personsInformationGroups.forEach(function (pig) {\n if (pig.configuration != \"\") pig.configuration = JSON.parse(pig.configuration);\n });\n $scope.checkboxSimpleOptions = [\n { option: null, label: $filter('translate')('informations.all'), checked: true },\n { option: true, label: $filter('translate')('events.staff.yes'), checked: false },\n { option: false, label: $filter('translate')('events.staff.no'), checked: false }\n ];\n });\n };\n\n $scope.loadPersonsInformationsGroups();\n\n let loadConfigurationOptions = function () {\n let group_name = \"Imágenes\";\n Restangular.all('Configurations').getList({ code: \"\", group_name: group_name }).then(function (response) {\n let configuration = response;\n limit_image_width = configuration.filter(function (config) { return config.code == \"LIMIT_IMAGE_WIDTH\"; }).map(function (config) { return config.value; })[0];\n limit_image_height = configuration.filter(function (config) { return config.code == \"LIMIT_IMAGE_HEIGHT\"; }).map(function (config) { return config.value; })[0];\n });\n }\n\n loadConfigurationOptions(); //Load image since from company_id\n\n $scope.selectImage = function () {\n $(\"#frmPersonImage\").trigger(\"click\");\n $(\"#frmPersonImage\").change(function () {\n const fileInput = document.querySelector('#frmPersonImage') as HTMLInputElement;\n const file = fileInput?.files?.[0];\n if (file) {\n var fileReader = new FileReader();\n /*fileReader.onload = function (event) {\n var uri = event.target.result;\n if (angular.isUndefined($scope.person.FK_persons_images) || $scope.person.FK_persons_images == null) $scope.person.FK_persons_images = {};\n $scope.person.FK_persons_images.image = uri;\n $scope.person.photo = uri;\n $scope.person.image_id = null; //??\n $scope.changesNotSaved = true;\n if(!$scope.$$phase) $scope.$apply();\n };*/\n fileReader.onload = function (event) {\n if (!event.target) return;\n const result = event.target.result;\n if (typeof result !== 'string') return;\n \n var image = new Image();\n image.src = result;\n image.onload = function () {\n if (limit_image_height != 0 && limit_image_width != 0) {\n //Comprobamos que no pase del tamaño limite de imagen\n if (image.width > limit_image_width || image.height > limit_image_height) {\n modalService.message({\n title: \"Error\",\n message: $filter('translate')('events.image_size_limit') + \"
\" + limit_image_width + \"X\" + limit_image_height,\n onAccept: function () { }\n });\n } else {\n if (angular.isUndefined($scope.person.FK_persons_images) || $scope.person.FK_persons_images == null) $scope.person.FK_persons_images = {};\n $scope.person.FK_persons_images.image = image.src;\n $scope.person.photo = image.src;\n $scope.person.image_id = null; //??\n $scope.changesNotSaved = true;\n if (!$scope.$$phase) $scope.$apply();\n }\n } else {\n if (angular.isUndefined($scope.person.FK_persons_images) || $scope.person.FK_persons_images == null) $scope.person.FK_persons_images = {};\n $scope.person.FK_persons_images.image = image.src;\n $scope.person.photo = image.src;\n $scope.person.image_id = null; //??\n $scope.changesNotSaved = true;\n if (!$scope.$$phase) $scope.$apply();\n }\n };\n };\n fileReader.readAsDataURL(file);\n } else {\n // preview.src = \"\";\n }\n });\n };\n\n $scope.getImage = function () {\n if ($scope.person.FK_persons_images != null && $scope.person.FK_persons_images.image != null) {\n return $scope.person.FK_persons_images.image;\n } else if ($scope.person.image_id != null) {\n return \"/api/Image/GetImageBmp?id=\" + $scope.person.image_id + \"&maxW=150&maxH2=150\";\n } else {\n return \"assets/img/no-user.jpeg\";\n }\n };\n\n $scope.removeImage = function ($event) {\n $scope.person.image_id = null;\n $scope.person.photo = null;\n if ($scope.person.FK_persons_images != null) $scope.person.FK_persons_images.image = null;\n if (typeof ($event) !== \"undefined\") {\n $event.preventDefault();\n $event.stopPropagation();\n }\n };\n\n $scope.getGroupPath = function (group_id) {\n var ret = \"\";\n var groups = $filter(\"filter\")($scope.personGroups, { id: group_id }, true);\n if (groups != null && groups.length > 0) {\n var group = groups[0];\n if (group.parent_group_id != null) {\n var parentGroup = $scope.getGroupPath(group.parent_group_id);\n ret = parentGroup + \" > \" + group.name;\n } else {\n var parentsGroups = $filter(\"filter\")(group.FK_groups_groups_groups1, { child_group_id: group_id }, true);\n if (parentsGroups.length > 0) {\n var parentGroup1 = $scope.getGroupPath(parentsGroups[0].parent_group_id);\n ret = parentGroup1 + \" > \" + group.name;\n } else {\n ret = group.name;\n }\n }\n }\n return ret;\n };\n\n $scope.savePerson = function () {\n\n // $log.debug(frmPerson);\n\n if (!angular.isUndefined($scope.person.id)) {\n //generamos pigs\n var newPips = new Array();\n angular.forEach($scope.personsInformationGroups, function (pig) {\n var value = $scope.person.pigs[pig.id];\n var pips = $filter(\"filter\")(newPips, { information_group_id: pig.id });\n if (pips.length > 0) {\n var pip = pips[0];\n pip.value = value;\n } else {\n var newPip = {\n person_id: $scope.person.id,\n entity_type: \"persons\",\n entity_type_id: $scope.person.id,\n information_group_id: pig.id,\n value: value\n };\n newPips.push(newPip);\n }\n });\n $scope.person.Information_groups_values_persons = newPips;\n angular.forEach($scope.person.Information_groups_values_persons, function (pig) {\n $scope.person.pigs[pig.information_group_id] = pig.value;\n });\n\n $scope.person.put().then(function (result) {\n if (typeof (result.id) != \"undefined\") {\n if (angular.isUndefined($scope.callbackClose)) {\n //$state.go(\"persons.list\", { person_type: $scope.person_type, reset: true }); Para que se quede en la misma página.\n } else {\n $scope.callbackClose('cancel');\n }\n if ($scope.isAuthority == 'authority') {\n toastr.success(\"Autoridad actualizada\");\n } else {\n toastr.success(\"Personalidad actualizada\");\n }\n $scope.loadPerson(false);\n $scope.changesNotSaved = false;\n } else {\n $scope.errorMessage = result.message;\n }\n });\n } else {\n //generamos pigs\n var newPips = new Array();\n angular.forEach($scope.personsInformationGroups, function (pig) {\n var value = $scope.person.pigs[pig.id];\n var pips = $filter(\"filter\")(newPips, { information_group_id: pig.id });\n if (pips.length > 0) {\n var pip = pips[0];\n pip.value = value;\n } else {\n var newPip = {\n person_id: $scope.person.id,\n entity_type: \"persons\",\n entity_type_id: $scope.person.id,\n information_group_id: pig.id,\n value: value\n };\n newPips.push(newPip);\n }\n });\n $scope.person.Information_groups_values_persons = newPips;\n\n angular.forEach($scope.person.Information_groups_values_persons, function (pig) {\n $scope.person.pigs[pig.information_group_id] = pig.value;\n });\n Restangular.all('Persons/CheckIfExists').post($scope.person).then(function (result) {\n if (result) {\n modalService.confirm({\n title: $filter('translate')('persons.person_already_exist'),\n message: $filter('translate')('persons.person_already_exist_message'),\n onAccept: function () {\n $scope.createPerson();\n }\n });\n } else {\n $scope.createPerson();\n }\n });\n }\n };\n\n $scope.cancel = function () {\n if (angular.isUndefined($scope.callbackClose)) {\n $state.go(\"persons.list\", { person_type: $scope.stateParams_person_type, reset: false });\n } else {\n $scope.callbackClose('cancel');\n }\n };\n\n $scope.createPerson = function () {\n // $log.debug($scope.person);\n\n Restangular.all('persons').post($scope.person).then(function (result) {\n if (angular.isDefined(result.id)) {\n $scope.changesNotSaved = false;\n\n if (angular.isUndefined($scope.callbackClose)) {\n $state.go(\"persons.list\", { person_type: $stateParams.person_type });\n } else {\n // $log.debug(\"callbackCloseeee\");\n $scope.loadPerson(false);\n $scope.callbackClose('cancel');\n }\n\n if ($scope.isAuthority == 'authority') {\n toastr.success($filter('translate')('persons.authority_create_success'));\n } else {\n toastr.success($filter('translate')('persons.personality_create_success'));\n }\n }\n });\n };\n\n $scope.showActiveGroups = function (checked) {\n\n };\n\n //cargamos la visibilidad de los grupos asociados a la persona\n $scope.person_groups = {\n active: true //por defecto a true\n };\n\n //cargamos persona\n $scope.person = {\n is_active: true,\n FK_persons_contacts_persons: [],\n FK_persons_private_fields_persons: [{}],\n FK_persons_addresses_persons: [],\n FK_persons_positions_persons: [],\n FK_persons_political_affiliations_persons: [],\n Information_groups_values_persons: [],\n FK_persons_mails_persons: [],\n pigs: [],\n person_type: $stateParams.person_type\n };\n\n $scope.setChangesNotSaved = function () {\n $scope.changesNotSaved = true;\n };\n\n $scope.loadPerson = function (reload) {\n if (!angular.isUndefined($scope.stateParams_id) && $scope.stateParams_id != null && $scope.stateParams_id != \"\") {\n Restangular.one('Persons', $scope.stateParams_id).get().then(function (results) {\n if (results.id != 0) {\n $scope.person = results;\n }\n\n if (results.show_person_couple) $scope.loadAllPersons();\n if (!reload) {\n if ($rootScope.title.includes(\" - \", 0)) {\n $rootScope.title = $rootScope.title.split(\" - \")[0] + \" - \" + results.name + \" \" + results.surname + (results.lastname != null ? \" \" + results.lastname : \"\"); //Ponemos el nombre en el titulo.\n $rootScope.breadcrumb.pop(); //.splice(-1, 1);\n } else {\n $rootScope.title += \" - \" + results.name + \" \" + results.surname + (results.lastname != null ? \" \" + results.lastname : \"\"); //Ponemos el nombre en el titulo.\n }\n $rootScope.breadcrumb.push({ title: results.name + \" \" + results.surname + (results.lastname != null ? \" \" + results.lastname : \"\") });\n }\n if ($scope.person.birthdate != null) $scope.person.birthdate = new Date($scope.person.birthdate);\n if ($scope.person.death_date != null) $scope.person.death_date = new Date($scope.person.death_date);\n\n\n //generamos lista de valores de persons informations groups\n $scope.person.pigs = [];\n angular.forEach($scope.person.Information_groups_values_persons, function (pig) {\n if (pig.FK_information_groups_values_information_groups.type == \"checkboxSimple\") {\n $scope.person.pigs[pig.information_group_id] = pig.value; // (pig.value == \"true\" ? true : false);\n } else if (pig.FK_information_groups_values_information_groups.type == \"datetime\") {\n $scope.person.pigs[pig.information_group_id] = new Date(pig.value);\n } else {\n $scope.person.pigs[pig.information_group_id] = pig.value;\n }\n\n });\n });\n }\n };\n\n //No quitar esto, por que al crear nueva persona desde invitados, pilla antes esto que el ng-init y carga una persona por id de evento\n setTimeout(function () {\n if (angular.isDefined($scope.stateParams_id) && $scope.stateParams_id != \"\") {\n $scope.loadPerson(false);\n }\n }, 100);\n\n //funciones de utilizar\n $scope.getRGB = function (hex) {\n var ret = \"130,130,130\";\n if (hex != null && hex != \"\") {\n ret = parseInt(hex.replace(\"#\", \"\").substring(0, 2), 16) + \",\" + parseInt(hex.replace(\"#\", \"\").substring(2, 4), 16) + \",\" + parseInt(hex.replace(\"#\", \"\").substring(4, 6), 16)\n }\n return ret;\n };\n\n $scope.prepareDates = function (obj) {\n for (var prop in obj) {\n if (prop.indexOf(\"date\") >= 0 && obj[prop] != null && typeof obj[prop] == \"string\") obj[prop] = new Date(obj[prop]);\n }\n };\n\n //cargamos cargos en grupo\n $scope.getPositions = function (group_id) {\n var positions = [];\n if (angular.isDefined($scope.personGroups)) {\n var group = $filter('filter')($scope.personGroups, { id: group_id }, true)[0];\n if (group != null) positions = group.FK_positions_groups;\n }\n return positions;\n };\n\n //Grids person position addresses y contacts\n $scope.gridPersonPositionAddresses = {\n pdfTitle: $filter('translate')('persons.addresses'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n enablePaginationControls: false,\n rowHeight: 45,\n minRowsToShow: 3,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, exporterSuppressExport: true },\n\n {\n name: 'address_line_1', displayName: $filter('translate')('persons.address_line_1'), enableColumnMenu: false, enableFiltering: false, enableHiding: false,\n cellTemplate: '
{{row.entity.address_line_1}}
{{row.entity.postal_code}}, {{row.entity.city}}
',\n },\n /*{ name: 'address_line_2', displayName: $filter('translate')('persons.address_line_2'), enableColumnMenu: false, enableFiltering: false, visible: false },\n { name: 'postal_code', displayName: $filter('translate')('persons.postal_code'), enableColumnMenu: false, enableFiltering: false },\n { name: 'city', displayName: $filter('translate')('persons.city'), enableColumnMenu: false, enableFiltering: false },\n { name: 'state', displayName: $filter('translate')('persons.state'), enableColumnMenu: false, enableFiltering: false, enableHiding: false },*/\n { name: 'notes', displayName: $filter('translate')('persons.notes'), visible: true },\n {\n name: ' ', width: 100, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionIconTemplate([\n { title: \"\", action: 'ng-click=\"grid.appScope.addPersonPositionsAddressDialog(row.entity)\"', cssIconClass: \"fa fa-edit\" },\n { title: \"\", action: 'ng-click=\"$event.stopPropagation();grid.appScope.deletePositionAddress(row.entity);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n }\n ]\n }\n\n $scope.gridPersonPositionContactInfo = {\n pdfTitle: $filter('translate')('persons.contact_data'),\n exporterMenuCsv: true,\n enableGridMenu: false,\n enablePaginationControls: false,\n enableFiltering: false,\n minRowsToShow: 4,\n /* paginationPageSizes: [1],\n paginationPageSize: 1,*/\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n $timeout(function () {\n gridApi.grid.sortColumn(gridApi.grid.columns[3], uiGridConstants.ASC);\n // gridApi.grid.sortColumn(gridApi.grid.columns[1], uiGridConstants.ASC,true);\n gridApi.grid.notifyDataChange(uiGridConstants.dataChange.ALL);\n });\n },\n columnDefs: [\n { name: 'id', visible: false, enableColumnMenu: false, enableHiding: false, exporterSuppressExport: true },\n { name: 'FK_persons_positions_contacts_positions_contacts_types.name', displayName: $filter('translate')('persons.contact_type'), enableHiding: false, enableColumnMenu: false },\n { name: 'FK_persons_positions_contacts_positions_contacts_types.order', displayName: '', enableColumnMenu: false, enableHiding: false, visible: false },\n { name: 'value', displayName: $filter('translate')('persons.value'), enableColumnMenu: false, enableFiltering: false, enableHiding: false },\n { name: 'notes', displayName: $filter('translate')('persons.notes'), enableColumnMenu: false, enableFiltering: false, enableHiding: false, visible: false },\n {\n name: ' ', width: 100, enableSorting: false, enableFiltering: false, enableColumnMenu: false, enableHiding: false, cellTemplate: gridService.actionIconTemplate([\n { title: \"\", action: 'ng-click=\"grid.appScope.addPersonPositionsContactDialog(row.entity)\"', cssIconClass: \"fa fa-edit\" },\n { title: \"\", action: 'ng-click=\"grid.appScope.deletePositionContactInfo(row.entity);\" ng-if=\"grid.appScope.allowWrite\" ', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n }\n ]\n }\n\n //funcion para cambiar elemento a edicion en linea\n $scope.inlineEditItems = {};\n $scope.inlineEdit = function (type, item, enable) {\n // $log.debug(\"inlineEdit\", type, item, enable);\n if (enable) {\n //cargamos datos necesarios segun tipo de entidad editada\n if (type === \"position\") {\n // $scope.loadGroups(false);\n $scope.newPosition = {\n positionName: '',\n groupName: item.FK_persons_positions_positions.FK_positions_groups.name,\n groupPath: '',\n newPositionGroupId: null,\n positionId: null\n }\n //$scope.newPosition.positionName = item.FK_persons_positions_positions.name;\n $scope.loadPersonsTreatments(false);\n if (item.position_order != null) {\n if (item.FK_persons_positions_positions.position_order != item.position_order) {\n item.is_custom_position_order = true;\n } else {\n item.is_custom_position_order = false;\n item.position_order = null;\n }\n } else {\n item.is_custom_position_order = false;\n }\n\n if (item.position_order_article_10 != null) {\n if (item.FK_persons_positions_positions.position_order_article_10 != item.position_order_article_10) {\n item.is_custom_position_order_article_10 = true;\n } else {\n item.is_custom_position_order_article_10 = false;\n item.position_order_article_10 = null;\n }\n } else {\n item.is_custom_position_order_article_10 = false;\n }\n $scope.positionEdited = item.position_id;\n $scope.gridPersonPositionAddresses.data = item.FK_persons_positions_addresses_positions;\n $scope.gridPersonPositionContactInfo.data = item.FK_persons_positions_contacts_positions;\n //$scope.gridPersonPositionContactInfo.gridApi.grid.notifyDataChange(uiGridConstants.dataChange.ALL);\n\n } else if (type == \"political-affiliation\") {\n $scope.loadPoliticalAffiliations(false);\n } else if (type == \"address\") {\n $scope.loadCountries(false);\n } else if (type == \"contact\") {\n $scope.loadContactTypes(false);\n }\n\n if (angular.isDefined($scope.inlineEditItems[type]) && $scope.inlineEditItems[type] != null) $scope.inlineEditItems[type].editMode = false;\n var copy = JSON.parse(JSON.stringify(item));\n item.editMode = true;\n $scope.prepareDates(copy);\n $scope.inlineEditItems[type] = copy; //copia, para no pasar cambios salvo que se guarde\n $scope.inlineEditItems[type + \"_orig\"] = item; //objeto original\n if (type === \"position\" && item.position_id == null) {\n $scope.loadPersonsTreatments(false).then(() => {\n const personDefault = $scope.personTreatments.filter(pt => { return pt.person_default });\n const positionDefault = $scope.personTreatments.filter(pt => { return pt.position_default });\n if (personDefault !== undefined && personDefault.length > 0) {\n $scope.inlineEditItems['position'].person_treatment_id = personDefault[0].id;\n }\n if (positionDefault !== undefined && positionDefault.length > 0) {\n $scope.inlineEditItems['position'].position_treatment_id = positionDefault[0].id;\n }\n });\n }\n } else {\n $scope.inlineEditItems[type + \"_orig\"].editMode = false;\n delete $scope.inlineEditItems[type];\n delete $scope.inlineEditItems[type + \"_orig\"];\n }\n $rootScope.isInlineEditEnabled = enable;\n };\n\n // Al dar de alta un nuevo cargo, lo seleccionas, y al darle guardar, no te lo muestra. Despinchas el check de \"ver activos\" y entonces te lo muestra. Cambiarlo y q ese check no aplique hasta que guarde.\n // Simplemente con darle a guardar en la ficha de cliente, ya se aplica el cambio, por lo que lo que vamos a hacer es que cuando se cierre la ficha de añadir el cargo, se fuerce el guardado de la ficha de persona.\n $scope.savePersonPosition = function (item) {\n // TODO: Quitar esto si a Rodolfo le parece bien como ha quedado la pantalla\n /*\n if($scope.newPosition.positionName != null && $scope.newPosition.positionId == null && $scope.newPosition.newPositionGroupId != null) {\n let newPositionDto = {\n id: \"\",\n group_id: $scope.newPosition.newPositionGroupId,\n name: $scope.newPosition.positionName,\n male_description: $scope.newPosition.positionName,\n female_description: $scope.newPosition.positionName,\n FK_positions_tl_positions: [ {\n id: \"\",\n name: $scope.newPosition.positionName,\n male_description: $scope.newPosition.positionName,\n female_description: $scope.newPosition.positionName,\n language_id: $rootScope.languageId\n }],\n FK_positions_contacts_positions: [],\n FK_positions_addresses_positions: []\n };\n Restangular.all('positions').post(newPositionDto).then(function (result) {\n $log.debug(result);\n });\n }*/\n\n if (!angular.isUndefined($scope.person.id) && item != null) {\n $scope.personPosition = item;\n $scope.person.put().then(function (result) {\n if (result.id === undefined) {\n $scope.errorMessage = result.message;\n } else {\n $scope.loadPerson(false);\n }\n });\n }\n };\n\n $scope.saveInline = function (type) {\n //preparamos datos\n let originalItem = $scope.inlineEditItems[type + \"_orig\"];\n let item = $scope.inlineEditItems[type];\n if (type === \"position\") {\n var group = $filter('filter')($scope.personGroups, { id: item.FK_persons_positions_positions.group_id }, true)[0];\n if (group == null) return;\n var position = $filter('filter')(group.FK_positions_groups, { id: item.position_id }, true)[0];\n if (position == null) return;\n if (angular.isUndefined(originalItem.id)) originalItem.id = null;\n originalItem.position_id = position.id;\n originalItem.FK_persons_positions_positions.name = position.name;\n originalItem.FK_persons_positions_positions.group_id = group.id;\n originalItem.FK_persons_positions_positions.FK_positions_groups.id = group.id;\n originalItem.FK_persons_positions_positions.FK_positions_groups.name = group.name;\n originalItem.FK_persons_positions_positions.FK_positions_groups.color = group.color;\n originalItem.from_date = item.from_date;\n originalItem.to_date = item.to_date;\n originalItem.position_order = item.position_order;\n originalItem.position_order_article_10 = item.position_order_article_10;\n originalItem.person_treatment_id = item.person_treatment_id;\n originalItem.position_treatment_id = item.position_treatment_id;\n originalItem.program_emails = item.program_emails;\n originalItem.invitation_emails = item.invitation_emails;\n originalItem.FK_persons_positions_addresses_positions = item.FK_persons_positions_addresses_positions;\n originalItem.FK_persons_positions_contacts_positions = item.FK_persons_positions_contacts_positions;\n // $log.debug(originalItem);\n if (!item.is_custom_position_order) originalItem.position_order = null;\n $scope.savePersonPosition(originalItem);\n $scope.changesNotSaved = false;\n } else if (type === \"political-affiliation\") {\n // $log.debug(item);\n\n //var politicalAffiliation = item.FK_persons_political_affiliations_political_affiliations;\n if (angular.isUndefined(originalItem.id)) originalItem.id = null;\n originalItem.political_affiliation_id = item.FK_persons_political_affiliations_political_affiliations.id;\n originalItem.from_date = item.from_date;\n originalItem.to_date = item.to_date;\n originalItem.political_affiliation_zone_id = (item.FK_persons_political_affiliations_political_affiliations_zones != null ? item.FK_persons_political_affiliations_political_affiliations_zones.id : null);\n\n originalItem.FK_persons_political_affiliations_political_affiliations = item.FK_persons_political_affiliations_political_affiliations;\n originalItem.FK_persons_political_affiliations_political_affiliations_zones = item.FK_persons_political_affiliations_political_affiliations_zones;\n\n $scope.changesNotSaved = true;\n } else if (type === \"address\") {\n var country = $filter('filter')($scope.countries, { id: item.country_id }, true)[0];\n if (angular.isUndefined(originalItem.id)) originalItem.id = null;\n originalItem.country_id = item.country_id;\n originalItem.address_line_1 = item.address_line_1;\n originalItem.address_line_2 = item.address_line_2;\n originalItem.postal_code = item.postal_code;\n originalItem.city = item.city;\n originalItem.state = item.state;\n originalItem.notes = item.notes;\n originalItem.FK_persons_addresses_countries.code = country.code;\n originalItem.FK_persons_addresses_countries.name = country.name;\n originalItem.value = item.value;\n $scope.changesNotSaved = true;\n } else if (type === \"contact\") {\n var contactType = $filter('filter')($scope.contactTypes, { id: item.person_contact_type_id }, true)[0];\n if (angular.isUndefined(originalItem.id)) originalItem.id = null;\n originalItem.person_contact_type_id = item.person_contact_type_id;\n originalItem.notes = item.notes;\n originalItem.FK_persons_contacts_persons_contacts_types.code = contactType.code;\n originalItem.FK_persons_contacts_persons_contacts_types.name = contactType.name;\n originalItem.value = item.value;\n $scope.changesNotSaved = true;\n } else if (type === \"mail\") {\n if (angular.isUndefined(originalItem.id)) originalItem.id = null;\n originalItem.email = item.email;\n originalItem.use_for_invitation = item.use_for_invitation;\n originalItem.use_for_program = item.use_for_program;\n originalItem.use_for_others = item.use_for_others;\n $scope.changesNotSaved = true;\n }\n $scope.inlineEdit(type, originalItem, false);\n };\n $scope.cancelInline = function (type) {\n $scope.inlineEditItems[type + \"_orig\"].editMode = false;\n $scope.inlineEditItems[type] = $scope.inlineEditItems[type + \"_orig\"];\n // $log.debug(angular.isDefined($scope.inlineEditItems[type].id));\n if (angular.isDefined($scope.inlineEditItems[type].id)) {\n //si tiene id definido (cuando es nuevo se pone a null al guardar inline), cancelamos edicion\n $scope.inlineEdit(type, $scope.inlineEditItems[type], false);\n } else {\n //si no tiene, estabamos añadiendo, borramos\n $scope.deleteInline(type);\n }\n };\n $scope.deleteInline = function (type) {\n var orig = $scope.inlineEditItems[type + \"_orig\"];\n // $log.debug(\"deleteInline\", type, orig);\n if (type === \"position\") {\n var idx = $scope.person.FK_persons_positions_persons.indexOf(orig);\n $scope.person.FK_persons_positions_persons.splice(idx, 1);\n } else if (type === \"political-affiliation\") {\n var idx = $scope.person.FK_persons_political_affiliations_persons.indexOf(orig);\n $scope.person.FK_persons_political_affiliations_persons.splice(idx, 1);\n } else if (type === \"address\") {\n var idx = $scope.person.FK_persons_addresses_persons.indexOf(orig);\n $scope.person.FK_persons_addresses_persons.splice(idx, 1);\n } else if (type === \"contact\") {\n var idx = $scope.person.FK_persons_contacts_persons.indexOf(orig);\n $scope.person.FK_persons_contacts_persons.splice(idx, 1);\n } else if (type === \"mail\") {\n var idx = $scope.person.FK_persons_mails_persons.indexOf(orig);\n $scope.person.FK_persons_mails_persons.splice(idx, 1);\n }\n $scope.inlineEdit(type, $scope.inlineEditItems[type], false);\n $scope.changesNotSaved = true;\n };\n\n $scope.newPosition = {\n positionName: '',\n groupName: '',\n groupPath: '',\n newPositionGroupId: null,\n positionId: null\n }\n $scope.positionAdded = {};\n\n $scope.addPersonPosition = function () {\n var position = {\n position_id: null,\n person_id: $scope.person.id,\n FK_persons_positions_addresses_positions: [],\n FK_persons_positions_contacts_positions: [],\n FK_persons_positions_positions: {\n name: null,\n FK_positions_groups: {\n name: null\n },\n from_date: null,\n to_date: null,\n\n }\n };\n $scope.person.FK_persons_positions_persons.push(position);\n $scope.inlineEdit(\"position\", position, true);\n };\n\n $scope.getPositionsSearch = function (val) {\n let param = '';\n if ($scope.newPosition.newPositionGroupId != null) {\n param = '?related_entity_id=' + $scope.newPosition.newPositionGroupId;\n }\n return Restangular.all('search/position/' + val + param).getList().then(function (searchTerms) {\n return searchTerms;\n });\n };\n\n $scope.getGroupsSearch = function (val) {\n return Restangular.all('search/group/' + val).getList().then(function (searchTerms) {\n return searchTerms;\n });\n };\n\n $scope.positionSelected = function ($item, $model, $label) {\n $log.debug($item);\n $log.debug($model);\n $scope.inlineEditItems['position'].position_id = $item.id;\n $scope.positionAdded = {\n id: $item.id,\n name: $item.term,\n\n groupId: $item.related_entity_id,\n groupName: $item.related_term\n }\n $scope.newPosition.positionName = $item.term;\n $scope.newPosition.positionId = $item.id;\n };\n\n $scope.groupSelected = function ($item, $model, $label) {\n $scope.inlineEditItems['position'].FK_persons_positions_positions.group_id = $item.id;\n $scope.newPosition.groupPath = $item.related_term;\n };\n\n $scope.addPoliticalAffiliationDialog = function () {\n var politicalAffiliation = {\n political_affiliation_id: null,\n political_affiliation_zone_id: null,\n person_id: $scope.person.id,\n };\n $scope.person.FK_persons_political_affiliations_persons.push(politicalAffiliation);\n $scope.inlineEdit(\"political-affiliation\", politicalAffiliation, true);\n };\n\n $scope.addAddress = function () {\n var address = {\n country_id: null,\n person_id: $scope.person.id,\n address_line_1: null,\n address_line_2: null,\n state: null,\n postal_code: null,\n city: null,\n notes: null,\n FK_persons_addresses_countries: {\n code: null,\n name: null\n }\n };\n $scope.person.FK_persons_addresses_persons.push(address);\n $scope.inlineEdit(\"address\", address, true);\n };\n\n $scope.addContact = function () {\n var contact = {\n contact_type_id: null,\n person_id: $scope.person.id,\n value: null,\n from_position: false,\n FK_persons_contacts_persons_contacts_types: {\n name: null\n }\n };\n $scope.person.FK_persons_contacts_persons.push(contact);\n $scope.inlineEdit(\"contact\", contact, true);\n };\n\n $scope.addMail = function () {\n var mail = {\n person_id: $scope.person.id,\n email: null,\n use_for_invitation: null,\n use_for_program: null,\n use_for_others: null\n };\n $scope.person.FK_persons_mails_persons.push(mail);\n $scope.inlineEdit(\"mail\", mail, true);\n };\n\n $scope.addNewPosition = function (position) {\n var item = $scope.inlineEditItems['position'];\n if (item.FK_persons_positions_positions.group_id == null) return;\n $scope.addNewGroup(item.FK_persons_positions_positions.group_id);\n };\n\n $scope.addNewGroup = function (group_id) {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: AddGroupModalView,\n controller: \"AddNewGroupModalCtrl\",\n size: \"lg\",\n resolve: {\n group_id: function () {\n return group_id;\n }\n }\n });\n $modalInstance.result.then(function (result) {\n // $log.debug(result);\n angular.forEach($scope.person.FK_persons_positions_persons, function (personPosition) {\n if (personPosition.FK_persons_positions_positions.FK_positions_groups.id == result.id) {\n personPosition.FK_persons_positions_positions.FK_positions_groups.name = result.name;\n personPosition.FK_persons_positions_positions.FK_positions_groups.color = result.color;\n personPosition.FK_persons_positions_positions.FK_positions_groups.FK_groups_tl_groups = result.FK_positions_groups.FK_groups_tl_groups;\n }\n });\n $scope.loadGroups(true);\n // Se recarga de nuevo la persona\n // $scope.loadPerson(false);\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n });\n };\n\n $scope.editGroup = function ($event, group) {\n $event.stopPropagation();\n // $log.debug(group);\n $scope.addNewGroup(group.id);\n };\n $scope.editPosition = function ($event, position) {\n $event.stopPropagation();\n /* var groups = $filter(\"filter\")($scope.personGroups, { id: $scope.inlineEditItems['position'].FK_persons_positions_positions.group_id }, true);\n $log.debug(groups);*/\n let $modalInstance = $uibModal.open({\n animation: true,\n template: PositionModalView,\n controller: \"PositionModalCtrl\",\n size: 'lg',\n resolve: {\n position: function () {\n return position;\n }, position_list: function () {\n return null;\n }, group: function () {\n return null;\n }, fromView: function () {\n return \"Persons\";\n }\n }\n\n });\n $modalInstance.result.then(function (resultModal) {\n var resultvalue = resultModal.edited;\n Restangular.all(\"positions/\" + resultvalue.id).customPUT(resultvalue).then(function (result) {\n //buscamos referencia y reemplazamos completa\n angular.forEach($scope.person.FK_persons_positions_persons, function (personPosition) {\n if (personPosition.FK_persons_positions_positions.id == result.id) {\n personPosition.FK_persons_positions_positions.name = result.name;\n personPosition.FK_persons_positions_positions.notes = result.notes;\n personPosition.FK_persons_positions_positions.institution = result.institution;\n personPosition.FK_persons_positions_positions.invitation_emails = result.invitation_emails;\n personPosition.FK_persons_positions_positions.program_emails = result.program_emails;\n personPosition.FK_persons_positions_positions.position_order = result.position_order;\n // Quizás funcione\n personPosition.FK_persons_positions_positions.position_order_article_10 = result.position_order_article_10;\n personPosition.FK_persons_positions_positions.FK_positions_tl_positions = result.FK_positions_tl_positions;\n personPosition.FK_persons_positions_positions.FK_positions_addresses_positions = result.FK_positions_addresses_positions;\n personPosition.FK_persons_positions_positions.FK_positions_contacts_positions = result.FK_positions_contacts_positions;\n }\n });\n //$scope.loadGroups();\n // Se recarga de nuevo la persona\n //$scope.loadPerson(false);\n });\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n });\n };\n\n $scope.addPersonPositionsAddressDialog = function (personPositionAddress) {\n var editedIdx = 0;\n if ($scope.gridPersonPositionAddresses.data != null) editedIdx = $scope.gridPersonPositionAddresses.data.indexOf(personPositionAddress);\n\n if (angular.isUndefined(personPositionAddress)) personPositionAddress = { isNew: true };\n\n let $modalInstance = $uibModal.open({\n animation: true,\n template: PersonPositionAddressModalView,\n controller: \"PersonPositionAddressModalCtrl\",\n resolve: {\n personPositionAddress: function () {\n return personPositionAddress;\n }\n }\n });\n //Response del modal\n $modalInstance.result.then(function (data) {\n var personPositionAddressValue = data.edited;\n if (angular.isUndefined(personPositionAddressValue.state)) personPositionAddressValue.state = \"\";\n if (angular.isUndefined(personPositionAddressValue.postal_code)) personPositionAddressValue.postal_code = \"\";\n if (angular.isUndefined(personPositionAddressValue.address_line_2)) personPositionAddressValue.address_line_2 = \"\";\n if (angular.isUndefined(personPositionAddressValue.notes)) personPositionAddressValue.notes = \"\";\n\n if ((angular.isDefined(personPositionAddressValue.address_line_1) && personPositionAddressValue.address_line_1 != \"\" && personPositionAddressValue.address_line_1 != null) &&\n (angular.isDefined(personPositionAddressValue.city) && personPositionAddressValue.city != \"\" && personPositionAddressValue.city != null)) {\n if (!angular.isUndefined(personPositionAddressValue.FK_persons_positions_addresses_countries.selected) && personPositionAddressValue.FK_persons_positions_addresses_countries.selected !== null) {\n\n var person_positions_address = {\n FK_persons_positions_addresses_countries: angular.copy(personPositionAddressValue.FK_persons_positions_addresses_countries.selected),\n country_id: personPositionAddressValue.FK_persons_positions_addresses_countries.selected.id,\n address_line_1: personPositionAddressValue.address_line_1,\n city: personPositionAddressValue.city,\n state: personPositionAddressValue.state,\n postal_code: personPositionAddressValue.postal_code,\n address_line_2: personPositionAddressValue.address_line_2,\n notes: personPositionAddressValue.notes\n };\n if (personPositionAddressValue.isNew) {\n // $log.debug($scope.inlineEditItems['position']);\n $scope.inlineEditItems['position'].FK_persons_positions_addresses_positions.push(person_positions_address);\n $scope.gridPersonPositionAddresses.data = $scope.inlineEditItems['position'].FK_persons_positions_addresses_positions;\n } else {\n $scope.gridPersonPositionAddresses.data[editedIdx] = person_positions_address;\n $scope.inlineEditItems['position'].FK_persons_positions_addresses_positions[editedIdx] = person_positions_address;\n }\n\n if (!$scope.$$phase) $scope.$apply();\n }\n\n }\n\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n if (!$scope.$$phase) $scope.$apply();\n });\n\n };\n\n $scope.addPersonPositionsContactDialog = function (personPositionContactInfo) {\n var editedIdx = 0;\n if ($scope.gridPersonPositionContactInfo.data != null) editedIdx = $scope.gridPersonPositionContactInfo.data.indexOf(personPositionContactInfo);\n\n if (angular.isUndefined(personPositionContactInfo)) personPositionContactInfo = { isNew: true };\n\n let $modalInstance = $uibModal.open({\n animation: true,\n template: PersonPositionContactModalView,\n controller: \"PersonPositionContactModalCtrl\",\n resolve: {\n personPositionContactInfo: function () {\n return personPositionContactInfo;\n }\n }\n });\n //Response del modal\n $modalInstance.result.then(function (data) {\n\n var personPositionContactValue = data.edited;\n // $log.debug(personPositionContactValue);\n if (angular.isUndefined(personPositionContactValue.notes)) personPositionContactValue.notes = \"\";\n\n if (angular.isDefined(personPositionContactValue.value) && personPositionContactValue.value !== \"\" && personPositionContactValue.value !== null) {\n if (!angular.isUndefined(personPositionContactValue.FK_persons_positions_contacts_positions_contacts_types.selected) && personPositionContactValue.FK_persons_positions_contacts_positions_contacts_types.selected !== null) {\n var person_positions_contacts = {\n FK_persons_positions_contacts_positions_contacts_types: angular.copy(personPositionContactValue.FK_persons_positions_contacts_positions_contacts_types.selected),\n person_position_contact_type_id: personPositionContactValue.FK_persons_positions_contacts_positions_contacts_types.selected.id,\n value: personPositionContactValue.value,\n notes: personPositionContactValue.notes\n };\n\n if (personPositionContactValue.isNew) {\n $scope.inlineEditItems['position'].FK_persons_positions_contacts_positions.push(person_positions_contacts);\n $scope.gridPersonPositionContactInfo.data = $scope.inlineEditItems['position'].FK_persons_positions_contacts_positions;\n } else {\n $scope.inlineEditItems['position'].FK_persons_positions_contacts_positions[editedIdx] = person_positions_contacts;\n $scope.gridPersonPositionContactInfo.data[editedIdx] = person_positions_contacts;\n }\n\n if (!$scope.$$phase) $scope.$apply();\n\n }\n\n }\n\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n if (!$scope.$$phase) $scope.$apply();\n });\n\n };\n\n $scope.deletePositionContactInfo = function (entity) {\n var editedIdx = $scope.gridPersonPositionContactInfo.data.indexOf(entity);\n $scope.gridPersonPositionContactInfo.data.splice(editedIdx, 1);\n $scope.inlineEditItems['position'].FK_persons_positions_contacts_positions.splice(editedIdx, 1);\n }\n\n $scope.deletePositionAddress = function (entity) {\n var editedIdx = $scope.gridPersonPositionAddresses.data.indexOf(entity);\n $scope.gridPersonPositionAddresses.data.splice(editedIdx, 1);\n $scope.inlineEditItems['position'].FK_persons_positions_addresses_positions.splice(editedIdx, 1);\n }\n\n $scope.openAttendedEvents = function () {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: AttendedEventsModalView,\n controller: \"AttendedEventsModalCtrl\",\n resolve: {\n person_id: function () {\n return $scope.person.id;\n }\n },\n size: 'lg'\n });\n\n $modalInstance.result.then(function () {\n\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n });\n };\n\n $scope.printPDF = function () {\n\n $(\"#elementHideForPrint\").hide();\n $(\"#elementHideForPrintBtn1\").hide();\n $(\"#elementHideForPrintBtn2\").hide();\n $(\"#elementHideForPrintBtn3\").hide();\n $(\"#elementHideForPrintBtn4\").hide();\n $(\"#elementHideForPrintBtn5\").hide();\n $(\"#elementHideForPrintBtn6\").hide();\n\n $scope.tableResultsExport = true;\n\n html2canvas(document.querySelector(\"#documentPrint\")).then(canvas => {\n var data = canvas.toDataURL(\"image/png\", 1.0);\n $(\".modal\").css(\"height\", \"\");\n var docDefinition = {\n pageSize: {\n width: canvas.width + 100,\n height: canvas.height + 200\n },\n content: [{\n image: data,\n width: canvas.width\n }]\n };\n //@ts-ignore\n pdfMake.createPdf(docDefinition).download(\"ficha_autoridad.pdf\");\n\n $(\"#elementHideForPrint\").show();\n $(\"#elementHideForPrintBtn1\").show();\n $(\"#elementHideForPrintBtn2\").show();\n $(\"#elementHideForPrintBtn3\").show();\n $(\"#elementHideForPrintBtn4\").show();\n $(\"#elementHideForPrintBtn5\").show();\n $(\"#elementHideForPrintBtn6\").show();\n\n });\n };\n\n $scope.foldersFiles = function () {\n foldersService.folders(\"persons\", $scope.person.id, false);\n };\n\n $scope.moveAddressToPosition = function ($event, address_id, position_id) {\n $event.stopPropagation();\n Restangular.one(\"Persons/MovePersonPositionAddressToPosition/\" + address_id, position_id).get().then(function () {\n $scope.loadGroups();\n $scope.loadPerson(true);\n });\n };\n\n $scope.moveContactToPosition = function ($event, contact_id, position_id) {\n $event.stopPropagation();\n Restangular.one(\"Persons/MovePersonPositionContactToPosition/\" + contact_id, position_id).get().then(function () {\n $scope.loadGroups();\n $scope.loadPerson(true);\n });\n };\n\n $scope.moveInvitationMailToPosition = function ($event, person_position_id) {\n $event.stopPropagation();\n Restangular.one(\"Persons/MovePersonPositionInvitationEmailToPosition/\" + person_position_id).get().then(function () {\n $scope.loadGroups();\n $scope.loadPerson(true);\n });\n };\n\n $scope.moveProgramMailToPosition = function ($event, person_position_id) {\n $event.stopPropagation();\n Restangular.one(\"Persons/MovePersonPositionProgramEmailToPosition/\" + person_position_id).get().then(function () {\n $scope.loadGroups();\n $scope.loadPerson(true);\n });\n };\n\n $scope.moveAddressToPersonPosition = function ($event, address_id, person_position_id) {\n $event.stopPropagation();\n Restangular.one(\"Persons/MovePositionAddressToPersonPosition/\" + address_id, person_position_id).get().then(function () {\n $scope.loadGroups();\n $scope.loadPerson(true);\n });\n };\n\n $scope.moveContactToPersonPosition = function ($event, contact_id, person_position_id) {\n $event.stopPropagation();\n Restangular.one(\"Persons/MovePositionContactToPersonPosition/\" + contact_id, person_position_id).get().then(function () {\n $scope.loadGroups();\n $scope.loadPerson(true);\n });\n };\n\n $scope.moveInvitationMailToPersonPosition = function ($event, person_position_id) {\n $event.stopPropagation();\n Restangular.one(\"Persons/MovePositionInvitationEmailToPersonPosition/\" + person_position_id).get().then(function () {\n $scope.loadGroups();\n // Se recarga de nuevo la persona\n $scope.loadPerson(true);\n });\n };\n\n $scope.moveProgramMailToPersonPosition = function ($event, person_position_id) {\n $event.stopPropagation();\n Restangular.one(\"Persons/MovePositionProgramEmailToPersonPosition/\" + person_position_id).get().then(function () {\n $scope.loadGroups();\n $scope.loadPerson(true);\n });\n };\n\n /* Deletes */\n $scope.deletePersonPositionAddress = function ($event, address_id) {\n // $log.debug(\"deletePersonPositionAddress address_id: \", address_id);\n $event.stopPropagation();\n Restangular.one('Persons/DeletePersonPositionAddress', address_id).remove().then(function () {\n $scope.loadGroups();\n $scope.loadPerson(true);\n });\n };\n\n $scope.deletePersonPositionContact = function ($event, contact_id) {\n // $log.debug(\"deletePersonPositionContact contact_id: \", contact_id);\n $event.stopPropagation();\n Restangular.one(\"Persons/DeletePersonPositionContact\", contact_id).remove().then(function () {\n $scope.loadGroups();\n $scope.loadPerson(true);\n });\n };\n\n $scope.deletePersonPositionEmails = function ($event, person_position_id, key) {\n // $log.debug(\"deletePersonPositionContact person_position_id: \", person_position_id, \"key \", key);\n $event.stopPropagation();\n Restangular.one(\"Persons/DeletePersonPositionEmails/\" + person_position_id, key).get().then(function () {\n $scope.loadGroups();\n $scope.loadPerson(true);\n });\n };\n\n $scope.deletePositionAddress = function ($event, address_id) {\n // $log.debug(\"deletePositionAddress address_id: \", address_id);\n $event.stopPropagation();\n Restangular.one(\"Persons/DeletePositionAddress\", address_id).remove().then(function () {\n $scope.loadGroups();\n $scope.loadPerson(true);\n });\n };\n\n $scope.deletePositionContact = function ($event, contact_id) {\n // $log.debug(\"deletePositionContact contact_id: \", contact_id);\n $event.stopPropagation();\n Restangular.one(\"Persons/DeletePositionContact\", contact_id).remove().then(function () {\n $scope.loadGroups();\n $scope.loadPerson(true);\n });\n };\n\n $scope.deletePositionEmails = function ($event, position_id, key) {\n // $log.debug(\"deletePositionEmails position_id: \", position_id, \"key: \", key);\n $event.stopPropagation();\n Restangular.one(\"Persons/DeletePositionEmails/\" + position_id, key).get().then(function () {\n $scope.loadGroups();\n $scope.loadPerson(true);\n });\n };\n\n /* Operaciones con la precedencia */\n $scope.deletePositionOrder = function ($event, position_id) {\n // $log.debug(\"deletePersonPositionOrder position_id: \", position_id);\n $event.stopPropagation();\n Restangular.one(\"Persons/DeletePositionOrder/\" + position_id).get().then(function () {\n $scope.loadGroups();\n $scope.loadPerson(true);\n });\n };\n\n $scope.deletePersonPositionOrder = function ($event, position_id) {\n // $log.debug(\"deletePersonPositionOrder position_id: \", position_id);\n $event.stopPropagation();\n Restangular.one(\"Persons/DeletePersonPositionOrder/\" + position_id).get().then(function () {\n $scope.loadGroups();\n $scope.loadPerson(true);\n });\n };\n\n $scope.moveOrderToPosition = function ($event, person_position_id) {\n $event.stopPropagation();\n Restangular.one(\"Persons/MoveOrderToPosition/\" + person_position_id).get().then(function () {\n $scope.loadGroups();\n $scope.loadPerson(true);\n });\n };\n\n $scope.moveOrderToPersonPosition = function ($event, person_position_id) {\n $event.stopPropagation();\n Restangular.one(\"Persons/MoveOrderToPersonPosition/\" + person_position_id).get().then(function () {\n $scope.loadGroups();\n $scope.loadPerson(true);\n });\n };\n }\n ])\n\n //controlador añadir grupo\n .controller(\"AddNewGroupModalCtrl\", ['LoginService', '$scope', '$uibModalInstance', 'Restangular', 'group_id', function (LoginService, $scope, $uibModalInstance, Restangular, group_id) {\n $scope.allowWrite = LoginService.permissionExist(\"PERSONS_WRITE\");\n $scope.group_id = group_id;\n // $log.debug(group_id);\n $scope.callbackClose = function (mode, result) {\n // $log.debug(\"Linea 1009\");\n $uibModalInstance.close(result);\n };\n\n $scope.getGroupId = function () {\n // $log.debug(\"getGroupId\", $scope.group_id);\n return $scope.group_id;\n };\n\n $scope.onCancel = function () {\n //$uibModalInstance.dismiss('cancel');\n Restangular.all('Groups').get($scope.group_id).then(function (result) {\n $uibModalInstance.close(result);\n });\n };\n\n }])\n\n .controller(\"PersonPositionAddressModalCtrl\", ['LoginService', '$scope', '$uibModalInstance', 'Restangular', 'modalService', '$filter', 'personPositionAddress', function (LoginService, $scope, $uibModalInstance, Restangular, modalService, $filter, personPositionAddress) {\n\n $scope.allowWrite = LoginService.permissionExist(\"PERSONS_WRITE\");\n $scope.personPositionAddressModal = (!angular.isUndefined(personPositionAddress) ? angular.copy(personPositionAddress) : {});\n $scope.personPositionAddressOrigin = (!angular.isUndefined(personPositionAddress) ? personPositionAddress : {});\n\n Restangular.all('Countries').getList().then(function (countries) {\n\n $scope.countries = countries;\n //Seleccionamos el correspondiente.\n if ($scope.personPositionAddressModal != null) {\n $scope.personPositionAddressModal.FK_persons_positions_addresses_countries = {};\n $scope.countries.forEach(function (pct) {\n if (pct.id == $scope.personPositionAddressModal.country_id) $scope.personPositionAddressModal.FK_persons_positions_addresses_countries.selected = pct;\n });\n }\n });\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n\n\n $scope.savePersonPositionAddress = function () {\n //Devolvemos el control al principal\n\n $uibModalInstance.close({ edited: $scope.personPositionAddressModal, origin: $scope.personPositionAddressOrigin });\n\n };//savePositionAddress\n\n\n }])\n\n .controller(\"PersonPositionContactModalCtrl\", ['LoginService', '$scope', '$uibModalInstance', 'Restangular', 'modalService', '$filter', 'personPositionContactInfo', function (LoginService, $scope, $uibModalInstance, Restangular, modalService, $filter, personPositionContactInfo) {\n\n $scope.allowWrite = LoginService.permissionExist(\"PERSONS_WRITE\");\n $scope.personPositionContactModal = (!angular.isUndefined(personPositionContactInfo) ? angular.copy(personPositionContactInfo) : {});\n $scope.personPositionContactOrigin = (!angular.isUndefined(personPositionContactInfo) ? personPositionContactInfo : {});\n\n Restangular.all('PersonsPositionsContactsTypes').getList().then(function (personsPositionsContactsTypes) {\n // $log.debug(personsPositionsContactsTypes);\n $scope.personsPositionsContactsTypes = personsPositionsContactsTypes;\n //Seleccionamos el correspondiente.\n if ($scope.personPositionContactModal != null) {\n $scope.personsPositionsContactsTypes.forEach(function (pct) {\n if (pct.id == $scope.personPositionContactModal.person_position_contact_type_id) $scope.personPositionContactModal.FK_persons_positions_contacts_positions_contacts_types.selected = pct;\n });\n }\n });\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n $scope.savePersonPositionContact = function () {\n //Devolvemos el control al principal\n\n $uibModalInstance.close({ edited: $scope.personPositionContactModal, origin: $scope.personPositionContactOrigin });\n\n };//save\n\n\n }])\n\n ;\n","import './persons_information_groups';\nimport './persons_information_groups-list';\nimport './persons_information_groups-edit'; ","\nimport toastr from 'toastr';\n\nangular.module(\"persons_information_groups\")\n\n .controller(\"PersonsInformationGroupsEditCtrl\", [ 'LoginService', '$scope', '$rootScope', '$controller', '$state', '$stateParams', 'Restangular', '$uibModal', 'modalService', '$compile', 'gridService', '$filter', '$translate', function (LoginService, $scope, $rootScope, $controller, $state, $stateParams, Restangular, $uibModal, modalService, $compile, gridService, $filter, $translate) {\n \n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"INFORMATION_GROUPS_WRITE\");\n var subtitle = \"\";\n if ($scope.entity_type == \"persons\") {\n subtitle = $filter('translate')('events.tasks.persons');\n } else if ($scope.entity_type == \"events\") {\n subtitle = $filter('translate')('events.title');\n }\n $rootScope.title = $filter('translate')('persons_information_groups.title') + \" - \" + subtitle;\n\n $scope.types = [\n { id: 'text', name: \"Texto\" },\n { id: 'number', name: \"Número\" },\n { id: 'select', name: \"Desplegable de opciones\" },\n { id: 'checkboxSimple', name: \"Si/No check\" },\n { id: 'datetime', name: \"Fecha\" }\n ];\n\n if (angular.isUndefined($stateParams.id) || $stateParams.id == \"\") {\n \n $rootScope.breadcrumb = [\n { title: $filter('translate')('persons_information_groups.title'), url: \"persons_information_groups.list({ entity_type: '\" + $stateParams.entity_type +\"' })\" },\n { title: $filter('translate')('persons_information_groups.title_add') },\n ];\n\n $scope.information_group = { type: \"text\", entity_type: $stateParams.entity_type };\n\n } else {\n\n $rootScope.breadcrumb = [\n { title: $filter('translate')('persons_information_groups.title'), url: \"persons_information_groups.list({ entity_type: '\"+$stateParams.entity_type+\"' })\" },\n { title: $filter('translate')('persons_information_groups.title_edit') },\n ];\n\n Restangular.one('InformationsGroups', $stateParams.id).get().then(function (results) { \n $scope.information_group = results;\n });\n\n }\n \n /* PERSON INFORMATION GROUP */\n $scope.save = function (frmPersonsInformationGroups) { \n \n if (!angular.isUndefined($scope.information_group.id)) {\n $scope.information_group.put().then(function (result) {\n if (typeof (result.id) != \"undefined\") {\n toastr.success($filter('translate')('persons_information_groups.edit_success'));\n $state.go(\"persons_information_groups.list\", { entity_type: $stateParams.entity_type });\n } else {\n $scope.errorMessage = result.message;\n }\n });\n } else {\n Restangular.all('InformationsGroups').post($scope.information_group).then(function (result) {\n if (typeof (result.id) != \"undefined\") {\n toastr.success($filter('translate')('persons_information_groups.created_success'));\n $state.go(\"persons_information_groups.list\", { entity_type: $stateParams.entity_type });\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n }\n\n $scope.checkDelete = function () {\n modalService.confirm({\n title: $filter('translate')('persons_information_groups.button_delete'),\n message: $filter('translate')('persons_information_groups.delete_message') + \" \" + $scope.information_group.name + \"?\",\n onAccept: function () {\n $scope.information_group.remove().then(function () {\n toastr.success($filter('translate')('persons_information_groups.delete_success'));\n $state.go(\"persons_information_groups.list\", { entity_type: $stateParams.entity_type });\n });\n }\n });\n }; \n\n}])\n\n;\n\n","\nimport toastr from 'toastr';\n\nangular.module(\"persons_information_groups\")\n\n .controller(\"PersonsInformationGroupsListCtrl\", ['LoginService', '$rootScope', '$scope', '$http', '$interval', '$q', 'i18nService', 'Restangular', 'uiGridTreeViewConstants', 'gridService', '$stateParams', 'modalService', '$uibModal', '$filter', '$translate', '$state', '$log',\n function (LoginService, $rootScope, $scope, $http, $interval, $q, i18nService, Restangular, uiGridTreeViewConstants, gridService, $stateParams, modalService, $uibModal, $filter, $translate, $state, $log) {\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"INFORMATION_GROUPS_WRITE\");\n $scope.entity_type = $stateParams.entity_type;\n\n var subtitle = \"\";\n if ($scope.entity_type == \"persons\") {\n subtitle = $filter('translate')('events.tasks.persons');\n } else if($scope.entity_type == \"events\") {\n subtitle = $filter('translate')('events.title');\n }\n $rootScope.title = $filter('translate')('persons_information_groups.title') + \" - \" + subtitle;\n\n $rootScope.breadcrumb = [\n { title: $filter('translate')('persons_information_groups.title') }\n ];\n\n $scope.gridOptions = {\n pdfTitle: $filter('translate')('persons_information_groups.title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n enableSorting: true,\n showTreeExpandNoChildren: true,\n paginationPageSizes: [15, 30, 50],\n paginationPageSize: 15,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, exporterSuppressExport: true },\n { name: 'order', width: 40, displayName: $filter('translate')('persons_information_groups.order'), enableFiltering: false, enableHiding: true },\n {\n name: 'icon', displayName: $filter('translate')('persons_information_groups.icon'),\n cellTemplate: '
' +\n '' +\n '
', width: 60,\n enableFiltering: false, enableHiding: false\n },\n { name: 'name', displayName: $filter('translate')('persons_information_groups.name'), enableFiltering: true, enableHiding: false },\n {\n name: 'use_in_search', displayName: $filter('translate')('persons_information_groups.use_in_search'),\n cellTemplate: gridService.yesNoTemplate('use_in_search'),\n enableFiltering: false, enableHiding: false\n },\n {\n name: 'notify_in_list', displayName: $filter('translate')('persons_information_groups.notify_in_list'),\n cellTemplate: gridService.yesNoTemplate('notify_in_list'),\n enableFiltering: false, enableHiding: false\n },\n {\n name: 'is_required_field', displayName: $filter('translate')('persons_information_groups.is_required_field'),\n cellTemplate: gridService.yesNoTemplate('is_required_field'),\n enableFiltering: false, enableHiding: false, action: 'ng-if=\"grid.appScope.entity_type == correspondence\"',\n },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('persons_information_groups.button_edit'), action: 'ng-click=\"grid.appScope.goToEdit(row.entity)\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('persons_information_groups.button_delete'), action: 'ng-click=\"grid.appScope.deleteDialog(row.entity.id,row.entity.name);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n options.entity_type = $stateParams.entity_type;\n return Restangular.all('InformationsGroups').getList(options); \n }\n };\n\n $scope.goToEdit = function (rowEntity) {\n $log.debug(rowEntity);\n $state.go(\"persons_information_groups.edit\", { person_information_group_id: rowEntity.person_information_group_id, id: rowEntity.id, entity_type: $stateParams.entity_type });\n }\n\n\n $scope.deleteDialog = function (id, name) {\n $scope.id = id;\n $scope.name = name; \n modalService.confirm({\n title: $filter('translate')('persons_information_groups.button_delete'),\n message: $filter('translate')('persons_information_groups.delete_message') +\" \"+ $scope.name + \"?\",\n onAccept: function () {\n Restangular.one('InformationsGroups', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('persons_information_groups.delete_success'));\n $scope.gridOptions.data =\n $scope.gridOptions.data.filter(function (el) { return el.id != $scope.id; });\n }, function (response) {\n $log.error(\"Error with status code\", response.status);\n alert(\"Error al borrar\")\n });\n }\n });\n\n };\n \n }])\n\n;","\nimport BreadcrumbView from \"../common/breadcrumb/breadcrumb.html\";\nimport PersonsInformationGroupsListView from \"./persons_information_groups-list.html\";\nimport PersonsInformationGroupsEditView from \"./persons_information_groups-edit.html\";\n\nangular.module(\"persons_information_groups\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('persons_information_groups', {\n url: \"/persons_information_groups\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n })\n\n .state('persons_information_groups.list', {\n url: \"/list/:entity_type\",\n controller: \"PersonsInformationGroupsListCtrl\",\n template: PersonsInformationGroupsListView,\n cache: false,\n requiredPermission: [\"INFORMATION_GROUPS_READ\"]\n }) \n .state('persons_information_groups.edit', {\n url: \"/edit/:entity_type/:id\",\n controller: \"PersonsInformationGroupsEditCtrl\",\n template: PersonsInformationGroupsEditView,\n cache: false,\n requiredPermission: [\"INFORMATION_GROUPS_READ\"]\n })\n }])\n;","import './persons_treatments';\nimport './persons_treatments-list';\nimport './persons_treatments-edit';","\nimport toastr from 'toastr';\n\nangular.module(\"persons_treatments\")\n\n .controller(\"PersonsTreatmentsEditCtrl\", ['LoginService', '$scope', '$rootScope', '$state', '$stateParams', 'Restangular', 'gridService', '$filter', '$translate', 'modalService', '$uibModal',\n function (LoginService, $scope, $rootScope, $state, $stateParams, Restangular, gridService, $filter, $translate, modalService, $uibModal) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"STAFF_POSITION_WRITE\");\n\n $rootScope.title = $filter('translate')('persons_treatments.title');\n\n $scope.person_treatment = {\n };\n if (angular.isUndefined($stateParams.id) || $stateParams.id == \"\") {\n\n $rootScope.breadcrumb = [\n { title: $filter('translate')('persons_treatments.title'), url: \"persons_treatments.list\" },\n { title: $filter('translate')('persons_treatments.button_add') },\n ];\n\n } else {\n\n $rootScope.breadcrumb = [\n { title: $filter('translate')('persons_treatments.title'), url: \"persons_treatments.list\" },\n { title: $filter('translate')('persons_treatments.button_edit') },\n ];\n\n Restangular.one('PersonsTreatments', $stateParams.id).get().then(function (result) {\n\n $scope.person_treatment = result;\n\n });\n }\n\n $scope.savePersonsTreatment = function () {\n if (angular.isDefined($scope.id)) {\n $scope.person_treatment.put().then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('persons_treatments.save_success'));\n $state.go(\"persons_treatments.list\");\n }\n });\n } else {\n Restangular.all('PersonsTreatments').post($scope.person_treatment).then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('persons_treatments.edit_success'));\n $state.go(\"persons_treatments.list\");\n }\n });\n }\n }\n\n $scope.checkDelete = function () {\n modalService.confirm({\n title: $filter('translate')('persons_treatments.button_delete'),\n message: $filter('translate')('persons_treatments.delete_message') + \" \" + $scope.person_treatment.name + \"?\",\n onAccept: function () {\n $scope.person_treatment.remove().then(function () {\n toastr.success($filter('translate')('persons_treatments.deleted_success'));\n $state.go(\"persons_treatments.list\");\n });\n }\n });\n };\n\n }])\n\n;\n\n","angular.module(\"persons_treatments\")\n\n .controller(\"PersonsTreatmentsListCtrl\", ['LoginService', '$rootScope', '$scope', '$http', '$interval', '$q', 'i18nService', 'Restangular', 'gridService', 'modalService', '$uibModal', '$filter', '$translate', '$state',\n function (LoginService, $rootScope, $scope, $http, $interval, $q, i18nService, Restangular, gridService, modalService, $uibModal, $filter, $translate, $state) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"PERSONS_TREATMENTS_WRITE\");\n\n $rootScope.title = $filter('translate')('persons_treatments.title');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('persons_treatments.title') }\n ];\n\n $scope.gridOptionsPersonsTreatments = {\n pdfTitle: $filter('translate')('persons_treatments.title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n enableSorting: true,\n paginationPageSizes: [50, 100],\n paginationPageSize: 50,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n { name: 'name', displayName: $filter('translate')('persons_treatments.name'), enableFiltering: true, enableHiding: false },\n { name: 'male_description', displayName: $filter('translate')('persons_treatments.male_description'), enableFiltering: true, enableHiding: false },\n { name: 'female_description', displayName: $filter('translate')('persons_treatments.female_description'), enableFiltering: true, enableHiding: false },\n { name: 'person_default', displayName: $filter('translate')('persons_treatments.person_default'), enableFiltering: false, enableHiding: false, cellTemplate: gridService.yesNoTemplate('person_default') },\n { name: 'position_default', displayName: $filter('translate')('persons_treatments.position_default'), enableFiltering: false, enableHiding: false, cellTemplate: gridService.yesNoTemplate('position_default') },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('persons_treatments.button_edit'), action: 'ui-sref=\"persons_treatments.edit({id:row.entity.id})\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('persons_treatments.button_delete'), action: 'ng-click=\"grid.appScope.deleteDialog(row.entity.id,row.entity.name);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n options.is_list = true;\n return Restangular.all('PersonsTreatments').getList(options);\n }\n };\n\n $scope.goToEdit = function (rowEntity) {\n $state.go(\"persons_treatments.edit\", { id: rowEntity.id });\n }\n\n\n $scope.deleteDialog = function (id, name) {\n $scope.id = id;\n $scope.name = name;\n modalService.confirm({\n title: $filter('translate')('persons_treatments.button_delete'),\n message: $filter('translate')('persons_treatments.delete_message') + \" \" + $scope.name + \"?\",\n onAccept: function () {\n Restangular.one('PersonsTreatments', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('persons_treatments.deleted_success'));\n $scope.gridOptionsPersonsTreatments.gridApi.core.raise.itemDeleted($scope);\n\n });\n }\n });\n\n };\n\n }])\n\n;\n","\nimport BreadcrumbView from \"../common/breadcrumb/breadcrumb.html\";\nimport PersonsTreatmentsListView from \"./persons_treatments-list.html\";\nimport PersonsTreatmentsEditView from \"./persons_treatments-edit.html\";\n\nangular.module(\"persons_treatments\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('persons_treatments', {\n url: \"/persons_treatments\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n cache: false,\n })\n .state('persons_treatments.list', {\n url: \"/list\",\n controller: \"PersonsTreatmentsListCtrl\",\n template: PersonsTreatmentsListView,\n data: { pageTitle: 'Tratamientos' },\n cache: false,\n requiredPermission: [\"PERSONS_TREATMENTS_READ\"]\n })\n .state('persons_treatments.edit', {\n url: \"/edit/:id\",\n controller: \"PersonsTreatmentsEditCtrl\",\n template: PersonsTreatmentsEditView,\n data: { pageTitle: 'Tratamientos' },\n cache: false,\n requiredPermission: [\"PERSONS_TREATMENTS_READ\"]\n })\n ;\n }])\n;","import './political_affiliations';\nimport './political_affiliations-list';\nimport './political_affiliations-edit'; ","import PoliticalAffiliationsZonesModalView from \"./political_affiliations_zones-modal.html\";\n\nimport toastr from 'toastr';\n\nangular.module(\"political_affiliations\")\n\n .controller(\"PoliticalAffiliationsEditCtrl\", ['LoginService', '$scope', '$rootScope', '$controller', '$state', '$stateParams', 'Restangular', '$uibModal', 'modalService', '$compile', '$filter', '$q', '$http', 'gridService', '$log',\n function (LoginService, $scope, $rootScope, $controller, $state, $stateParams, Restangular, $uibModal, modalService, $compile, $filter, $q, $http, gridService, $log) {\n //Comprobamos si tiene permiso escritura \n $scope.allowWrite = LoginService.permissionExist(\"POLITICAL_AFILIATION_WRITE\");\n\n $rootScope.title = $filter('translate')('political_affiliations.title');\n\n $scope.political_affiliation_id = $stateParams.id; \n\n if (angular.isUndefined($stateParams.id) || $stateParams.id == \"\") { \n $rootScope.breadcrumb = [\n { title: $filter('translate')('political_affiliations.title'), url: \"political_affiliations.list\" },\n { title: $filter('translate')('political_affiliations.title_add'), url: \"political_affiliations.edit()\" },\n ]; \n $scope.political_affiliation = { };\n } else {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('political_affiliations.title'), url: \"political_affiliations.list\" },\n { title: $filter('translate')('political_affiliations.title_edit'), url: \"political_affiliations.edit({ id: \" + $stateParams.id + \" })\" },\n ];\n\n Restangular.one('PoliticalAffiliations', $stateParams.id).get().then(function (results) {\n $scope.political_affiliation = results;\n });\n\n\n $scope.gridZonesPolitical = {\n pdfTitle: $filter('translate')('political_affiliations.zones'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n enableSorting: true,\n paginationPageSizes: [10, 20, 30],\n paginationPageSize: 10,\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n {\n name: 'name', displayName: $filter('translate')('political_affiliations.zone_name'), enableFiltering: true, enableHiding: false,\n cellTemplate: '
      {{row.entity.name}}
'\n },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('political_affiliations.button_edit'), action: 'ng-click=\"grid.appScope.editZoneDialog(row.entity.id,row.entity.name);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('political_affiliations.button_delete'), action: 'ng-click=\"grid.appScope.deleteZoneDialog(row.entity.id,row.entity.name);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n }\n ],\n getData: function (options) {\n\n var deferred = $q.defer();\n options.political_affiliation_id = $stateParams.id;\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + 'PoliticalAffiliations/Zones',\n params: options\n }).then(function (results, status, headers, config) {\n var data = results.data.rows;\n data.totalRows = results.data.totalRows;\n $scope.totalRows = results.data.totalRows;\n deferred.resolve(data);\n });\n return deferred.promise;\n }\n };\n\n }\n \n $scope.save = function (frmPoliticalAffiliations) {\n \n if (!angular.isUndefined($scope.political_affiliation_id) && $scope.political_affiliation_id != \"\") { \n $scope.political_affiliation.put().then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('political_affiliations.edit_success'));\n $state.go(\"political_affiliations.list\");\n } else {\n $scope.errorMessage = result.message;\n }\n });\n } else {\n Restangular.all('PoliticalAffiliations').post($scope.political_affiliation).then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('political_affiliations.create_success'));\n $state.go(\"political_affiliations.edit\", { id: result.id });\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n }\n\n $scope.checkDelete = function () {\n modalService.confirm({\n title: $filter('translate')('political_affiliations.delete'),\n message: $filter('translate')('political_affiliations.delete_message')+\" \" + $scope.political_affiliation.name + \"?\",\n onAccept: function () {\n $scope.political_affiliation.remove().then(function () {\n toastr.success($filter('translate')('political_affiliations.delete_success'));\n $state.go(\"political_affiliations.list\");\n });\n }\n });\n }; \n\n $scope.selectImage = function () {\n $(\"#frmImage\").trigger(\"click\");\n $(\"#frmImage\").change(function () {\n const fileInput = document.querySelector('#frmImage') as HTMLInputElement;\n const file = fileInput?.files?.[0];\n if (file) {\n const fileReader = new FileReader();\n fileReader.onload = function (event) {\n const uri = (event.target as FileReader).result;\n if (angular.isUndefined($scope.political_affiliation.FK_political_affiliations_images) || $scope.political_affiliation.FK_political_affiliations_images == null) $scope.political_affiliation.FK_political_affiliations_images = {};\n $scope.political_affiliation.FK_political_affiliations_images.image = uri;\n $scope.political_affiliation.photo = uri;\n $scope.political_affiliation.image_id = null; //??\n if (!$scope.$$phase) $scope.$apply();\n };\n fileReader.readAsDataURL(file);\n } else {\n //preview.src = \"\";\n }\n });\n };\n\n $scope.getImage = function () {\n if (typeof ($scope.political_affiliation) !== \"undefined\" && $scope.political_affiliation.FK_political_affiliations_images != null && $scope.political_affiliation.FK_political_affiliations_images.image != null) {\n return $scope.political_affiliation.FK_political_affiliations_images.image;\n } else if (typeof ($scope.political_affiliation) !== \"undefined\" && $scope.political_affiliation.image_id != null) {\n return \"/api/Image/GetImageBmp?id=\" + $scope.political_affiliation.image_id + \"&maxW=150&maxH2=150\";\n } else {\n return \"assets/img/no-image.png\";\n }\n };\n\n $scope.removeImage = function ($event) {\n $scope.political_affiliation.image_id = null;\n $scope.political_affiliation.photo = null;\n if ($scope.political_affiliation.FK_political_affiliations_images != null) $scope.political_affiliation.FK_political_affiliations_images.image = null;\n if (typeof ($event) !== \"undefined\") {\n $event.preventDefault();\n $event.stopPropagation();\n }\n };\n\n $scope.deleteZoneDialog = function (id, name) {\n modalService.confirm({\n title: $filter('translate')('political_affiliations.delete_zone'),\n message: $filter('translate')('political_affiliations.delete_zone_message') + \" \" + name + \"?\",\n onAccept: function () {\n let options = { id: id }\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + 'PoliticalAffiliations/DeleteZone',\n params: options\n }).then(function (results, status, headers, config) {\n toastr.success($filter('translate')('political_affiliations.delete_zone_success'));\n $scope.gridZonesPolitical.gridApi.core.raise.itemDeleted($scope);\n\n });\n }\n });\n };\n\n $scope.editZoneDialog = function (id) {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: PoliticalAffiliationsZonesModalView,\n size: \"md\",\n controller: \"PoliticalAffiliationsModalCtrl\",\n resolve: {\n political_affiliation_zone_id: function () {\n return id;\n },\n political_affiliation_id: function () {\n return $stateParams.id\n }\n }\n });\n //Response del modal\n $modalInstance.result.then(function (option) {\n $scope.gridZonesPolitical.gridApi.core.raise.itemChanged($scope);\n });\n };\n\n }])\n\n .controller(\"PoliticalAffiliationsModalCtrl\", ['political_affiliation_zone_id', 'political_affiliation_id', '$scope', '$uibModalInstance', 'Restangular', '$http', 'modalService', 'LoginService', '$stateParams', '$filter', '$log',\n function (political_affiliation_zone_id, political_affiliation_id, $scope, $uibModalInstance, Restangular, $http, modalService, LoginService, $stateParams, $filter, $log) {\n\n $scope.allowWrite = LoginService.permissionExist(\"POLITICAL_AFILIATION_WRITE\");\n\n $log.debug(political_affiliation_zone_id);\n if (typeof (political_affiliation_zone_id) === \"undefined\" || political_affiliation_zone_id == null) {\n $scope.political_affiliation = { political_affiliation_id: political_affiliation_id };\n } else {\n Restangular.all(\"PoliticalAffiliations\").customGET(\"GetZone\", { id: political_affiliation_zone_id }).then(function (result) {\n $scope.political_affiliation = result;\n });\n }\n \n\n $scope.zones_availables = [];\n let options = { name: \"\" };\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + 'PoliticalAffiliations/ZonesAvailables',\n params: options\n }).then(function (results, status, headers, config) {\n $scope.zones_availables = results.data.rows;\n $scope.zones_availables.unshift({\n id: -1,\n name: \"-- \" + $filter('translate')('political_affiliations.new_zone_option') + \" --\"\n }); \n });\n\n $scope.callbackClose = function (mode) {\n $uibModalInstance.dismiss(mode);\n };\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n $scope.save = function () {\n $log.debug($scope.political_affiliation);\n Restangular.all(\"PoliticalAffiliations\").customPOST($scope.political_affiliation, \"SaveZone\", {}).then(function (results) {\n toastr.success($filter('translate')('political_affiliations.save_zone_success'));\n $uibModalInstance.close();\n }); \n }\n\n }])\n\n;\n\n","\nimport toastr from 'toastr';\n\nangular.module(\"political_affiliations\")\n\n .controller(\"PoliticalAffiliationsListCtrl\", ['LoginService', '$rootScope', '$scope', '$http', '$interval', '$q', 'i18nService', 'Restangular', 'gridService', 'modalService', '$uibModal', '$filter', '$translate', '$state', function (LoginService, $rootScope, $scope, $http, $interval, $q, i18nService, Restangular, gridService, modalService, $uibModal, $filter, $translate, $state) {\n \n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"POLITICAL_AFILIATION_WRITE\");\n\n $rootScope.title = $filter('translate')('political_affiliations.title'); \n $rootScope.breadcrumb = [\n { title: $filter('translate')('political_affiliations.title') }\n ];\n\n $scope.gridOptionsPoliticalAffiliations = {\n pdfTitle: \"Afiliaciones políticas\",\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n enableSorting: true, \n paginationPageSizes: [20, 40, 60],\n paginationPageSize: 20,\n exporterSuppressColumns: [\"image_id\"], //la eliminamos porque no funciona con la url, probar con base64 si se quiere.\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true }, \n {\n field: 'image_id',\n enableSorting: false,\n width: 60,\n enableFiltering: false,\n displayName: $filter('translate')('political_affiliations.logo'),\n cellTemplate: \"
\"\n },\n { name: 'name', displayName: $filter('translate')('political_affiliations.name'), enableFiltering: true, enableHiding: false },\n { name: 'order_afiliation', displayName: $filter('translate')('political_affiliation.order'), enableFiltering: false, enableHiding: false },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('political_affiliations.button_edit'), action: 'ui-sref=\"political_affiliations.edit({id:row.entity.id})\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('political_affiliations.button_delete'), action: 'ng-click=\"grid.appScope.deleteDialog(row.entity.id,row.entity.name);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n var deferred = $q.defer();\n Restangular.all('PoliticalAffiliations').getList(options).then(function (results) {\n deferred.resolve(results);\n });\n return deferred.promise;\n }\n };\n\n $scope.goToEdit = function (rowEntity) {\n $state.go(\"political_affiliations.edit\", { id: rowEntity.id });\n }\n\n\n\n $scope.deleteDialog = function (id, name) {\n $scope.id = id;\n $scope.name = name;\n modalService.confirm({\n title: $filter('translate')('political_affiliations.delete'),\n message: $filter('translate')('political_affiliations.delete_message')+\" \" + $scope.name + \"?\",\n onAccept: function () {\n Restangular.one('PoliticalAffiliations', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('political_affiliations.delete_success'));\n $scope.gridOptionsPoliticalAffiliations.gridApi.core.raise.itemDeleted($scope);\n \n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n });\n\n };\n \n }])\n\n;","\nimport BreadcrumbView from \"../common/breadcrumb/breadcrumb.html\";\nimport PoliticalAffiliationsListView from \"./political_affiliations-list.html\";\nimport PoliticalAffiliationsEditView from \"./political_affiliations-edit.html\";\n\nangular.module(\"political_affiliations\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('political_affiliations', {\n url: \"/political_affiliations\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n })\n\n .state('political_affiliations.list', {\n url: \"/list\",\n controller: \"PoliticalAffiliationsListCtrl\",\n template: PoliticalAffiliationsListView,\n cache: false,\n requiredPermission: [\"POLITICAL_AFILIATION_READ\"]\n }) \n .state('political_affiliations.edit', {\n url: \"/edit/:id\",\n controller: \"PoliticalAffiliationsEditCtrl\",\n template: PoliticalAffiliationsEditView,\n cache: false,\n requiredPermission: [\"POLITICAL_AFILIATION_READ\"]\n })\n }])\n;","import './providers';\nimport './providers-list';\nimport './providers-edit';","angular.module(\"providers\")\n\n .controller(\"ProvidersEditCtrl\", ['LoginService', '$state', '$rootScope', '$stateParams', '$scope', 'Restangular', 'modalService', '$filter', '$translate',\n function (LoginService, $state, $rootScope,$stateParams, $scope, Restangular,modalService, $filter, $translate) {\n $scope.allowWrite = LoginService.permissionExist(\"PROVIDERS_WRITE\");\n\n\n if (angular.isUndefined($stateParams.id) || $stateParams.id == \"\") {\n\n $rootScope.breadcrumb = [\n { title: $filter('translate')('providers.title'), url: \"providers.list\" },\n { title: $filter('translate')('providers.button_add') }\n ];\n $scope.warehouses = {};\n\n } else {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('providers.title'), url: \"providers.list\" },\n { title: $filter('translate')('providers.button_edit'), url: \"providers.edit({ id: \" + $stateParams.id + \" })\" },\n ];\n\n Restangular.one('Providers', $stateParams.id).get().then(function (results) {\n $scope.providers = results;\n });\n\n };\n\n\n $scope.save = function (frmProviders) {\n\n if (!angular.isUndefined($scope.providers.id)) {\n $scope.providers.put().then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('providers.edit_success'));\n if ($scope.callbackFn != null) {\n $scope.callbackFn(result);\n } else {\n $state.go(\"providers.list\");\n }\n } else {\n $scope.errorMessage = result.message;\n }\n });\n } else {\n Restangular.all('Providers').post($scope.providers).then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('providers.create_success'));\n if ($scope.callbackFn != null) {\n $scope.callbackFn(result);\n } else {\n $state.go(\"providers.list\", { id: result.id, is_template: false });\n }\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n }\n\n $scope.onCancel = function () {\n if ($scope.callbackFn != null) {\n $scope.callbackFn(null);\n } else {\n $state.go(\"providers.list\");\n }\n };\n\n $scope.checkDelete = function () {\n modalService.confirm({\n title: $filter('translate')('providers.button_delete'),\n message: $filter('translate')('providers.delete_message') + \" \" + $scope.providers.name + \"?\",\n onAccept: function () {\n $scope.providers.remove().then(function () {\n toastr.success($filter('translate')('providers.delete_success'));\n $state.go(\"providers.list\");\n });\n }\n });\n };\n\n\n }]);","angular.module(\"providers\")\n\n .controller(\"ProvidersListCtrl\", ['LoginService', '$state', '$rootScope', '$scope', 'Restangular', 'gridService', '$filter', '$translate', 'modalService',\n function (LoginService, $state, $rootScope, $scope, Restangular, gridService, $filter, $translate, modalService) {\n\n $scope.allowWrite = LoginService.permissionExist(\"PROVIDERS_WRITE\");\n $rootScope.title = $filter('translate')('providers.title');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('providers.title') }\n ];\n\n $scope.gridOptionsProviders = {\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n enableSorting: true,\n paginationPageSizes: [20, 40, 60],\n paginationPageSize: 20,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n { name: 'name', displayName: $filter('translate')('providers.name'), enableFiltering: true, enableHiding: false },\n { name: 'contact', displayName: $filter('translate')('providers.contact'), enableFiltering: true, enableHiding: false },\n { name: 'mail', displayName: $filter('translate')('providers.mail'), enableFiltering: true, enableHiding: false },\n { name: 'phone', displayName: $filter('translate')('providers.phone'), enableFiltering: true, enableHiding: false },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('providers.button_edit'), action: 'ui-sref=\"providers.edit({id:row.entity.id})\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('providers.button_delete'), action: 'ng-click=\"grid.appScope.deleteDialog(row.entity.id,row.entity.name);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n return Restangular.all('providers').getList(options)\n }\n };\n\n $scope.goToEdit = function (rowEntity) {\n $state.go(\"providers.edit\", { id: rowEntity.id });\n }\n\n $scope.deleteDialog = function (id, name) {\n $scope.id = id;\n $scope.name = name;\n modalService.confirm({\n title: $filter('translate')('providers.button_delete'),\n message: $filter('translate')('providers.delete_message') + \" \" + $scope.name + \"?\",\n onAccept: function () {\n Restangular.one('Providers', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('providers.delete_success'));\n $scope.gridOptionsProviders.gridApi.core.raise.itemDeleted($scope);\n\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n });\n\n };\n\n\n }]);","\nimport BreadcrumbView from \"../common/breadcrumb/breadcrumb.html\";\nimport ProvidersListView from \"./providers-list.html\";\nimport ProvidersEditView from \"./providers-edit.html\";\n\nangular.module(\"providers\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('providers', {\n url: \"/providers\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n })\n\n .state('providers.list', {\n url: \"/list\",\n controller: \"ProvidersListCtrl\",\n template: ProvidersListView,\n data: { pageTitle: 'Proveedores' },\n requiredPermission: [\"PROVIDERS_READ\"]\n })\n .state('providers.edit', {\n url: \"/edit/:id\",\n controller: \"ProvidersEditCtrl\",\n template: ProvidersEditView,\n data: { pageTitle: 'Proveedores' },\n requiredPermission: [\"PROVIDERS_READ\"]\n })\n }])\n ;","import './push_notifications';\nimport './push_notifications-list'; \nimport './push_notifications-edit';","\nangular.module(\"push_notifications\")\n\n .controller(\"PushNotificationsEditCtrl\", ['$uibModal', '$rootScope', '$scope', '$http', '$stateParams', 'Restangular', '$state', 'modalService', '$filter', 'gridService', '$log',\n function ($uibModal, $rootScope, $scope, $http, $stateParams, Restangular, $state, modalService, $filter, gridService, $log) {\n\n $rootScope.title = $filter('translate')('push_notifications.title');\n $log.debug($stateParams.notificationId);\n $scope.showData = 'showInfo';\n\n\n $scope.sent = 0;\n $scope.sending = 0;\n $scope.error = 0;\n $scope.eventId = null;\n if (typeof ($stateParams.id) !== 'undefined') {\n $scope.eventId = $stateParams.id;\n }\n\n $rootScope.breadcrumb = [\n { title: $filter('translate')('push_notifications.title'), url: \"push_notifications.list\" },\n { title: $filter('translate')('push_notifications.view') }\n ];\n\n if (angular.isUndefined($stateParams.notificationId) || $stateParams.notificationId == \"\") {\n\n\n $scope.company = {\n name: '',\n created_at: new Date()\n };\n }\n\n // Filtro por el estado de la petición\n\n let status_filter = \"none\";\n\n $scope.filterSent = function () {\n status_filter = \"sent\";\n $log.debug(status_filter);\n $scope.gridOptions.loadData();\n };\n\n $scope.filterPending = function () {\n status_filter = \"pending\";\n $log.debug(status_filter);\n $scope.gridOptions.loadData();\n };\n $scope.filterError = function () {\n status_filter = \"error\";\n $log.debug(status_filter);\n $scope.gridOptions.loadData();\n };\n $scope.filterNone = function () {\n status_filter = \"none\";\n $log.debug(status_filter);\n $scope.gridOptions.loadData();\n };\n\n\n\n $scope.gridOptions = {\n pdfTitle: $filter('translate')('push_notifications.users_title'),\n exporterMenuCsv: true,\n gridMenuShowHideColumns: false,\n paginationPageSizes: [15, 30, 45],\n paginationPageSize: 15,\n // rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n\n columnDefs: [\n { name: 'FK_users_notifications_users.name', displayName: $filter('translate')('general.name'), enableFiltering: true, enableHiding: false },\n {\n name: 'status', displayName: $filter('translate')('user_notifications.status'), enableFiltering: true, enableHiding: false, enableColumnMenu: false,\n cellTemplate: '
{{row.entity.status_name}}
',\n },\n ],\n getData: function (options) {\n\n $scope.sent = 0;\n $scope.sending = 0;\n $scope.error = 0;\n\n return Restangular.one('PushNotifications/One', $stateParams.notificationId).get().then(function (result) {\n $scope.notification = result;\n let data = result.FK_users_notifications_notifications;\n\n data.forEach(user => {\n switch (user.status) {\n case \"sent\":\n user.label = \" label-primary\";\n user.status_name = $filter('translate')('notifications.sent');\n $scope.sent++;\n break;\n case \"pending\":\n user.label = \" label-default\";\n user.status_name = $filter('translate')('notifications.sending');\n $scope.sending++;\n break;\n case \"error\":\n user.label = \" label-danger\";\n user.status_name = $filter('translate')('notifications.sent_error');\n $scope.error++;\n break;\n }\n })\n\n switch (status_filter) {\n\n case \"sent\":\n data = data.filter((user) => user.status == \"sent\")\n break;\n case \"pending\":\n data = data.filter((user) => user.status == \"pending\")\n break;\n case \"error\":\n data = data.filter((user) => user.status == \"error\")\n break;\n\n };\n\n return data;\n\n\n });\n }\n }\n\n\n\n\n\n $scope.cancel = function () {\n $state.go(\"push_notifications.list\");\n \n }\n }])\n\n ;","angular.module(\"push_notifications\")\n\n .controller(\"PushNotificationsListCtrl\", ['LoginService', '$rootScope', '$scope', '$q', 'Restangular', 'gridService', 'treeService', 'modalService', '$filter', '$state', '$log',\n function (LoginService, $rootScope, $scope, $q, Restangular, gridService, treeService, modalService, $filter, $state, $log) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = true // LoginService.permissionExist(\"MAILINGS_WRITE\");\n let filter = false;\n $scope.notificationFilter = {};\n\n $rootScope.title = $filter('translate')('push_notifications.title');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('push_notifications.title') }\n ];\n\n $scope.gridOptions = {\n pdfTitle: $filter('translate')('push_notifications.title'),\n exporterMenuCsv: true,\n gridMenuShowHideColumns: false,\n paginationPageSizes: [15, 30, 45],\n paginationPageSize: 15,\n // rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n\n columnDefs: [\n\n {\n name: 'created_at', displayName: $filter('translate')('user_notifications.date'), type: 'date', cellFilter: 'toLocalDate | date:\\'dd/MM/yyyy HH:mm\\'',\n customFormatFn: function (value) {\n if (value !== null) {\n var fecha = new Date(value);\n return $filter('date')(fecha, 'dd/MM/yyyy');\n }\n return \"\";\n },\n enableColumnMenu: false, enableFiltering: true, enableHiding: false },\n { name: 'event_name', displayName: $filter('translate')('user_notifications.event_name'), enableFiltering: true, enableHiding: false },\n { name: 'title', displayName: $filter('translate')('general.title'), enableFiltering: true, enableHiding: false },\n { name: 'FK_un_users_notifications_types.name', displayName: $filter('translate')('user_notifications.type'), enableFiltering: true, enableHiding: false },\n {\n name: 'is_urgent', displayName: $filter('translate')('user_notifications.priority'), enableFiltering: true, enableHiding: false, enableColumnMenu: false,\n cellTemplate: '
{{row.entity.is_urgent == true? \"Urgente\" : \"\" }}
'\n },\n {\n name: 'status', displayName: $filter('translate')('user_notifications.status'), enableFiltering: true, enableHiding: false, enableColumnMenu: false,\n cellTemplate: '
' +\n '{{row.entity.sent}}
' +\n '{{row.entity.pending}}
' +\n '{{row.entity.error}}
'\n\n },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('notifications.button_view'), action: 'ui-sref=\"push_notifications.edit({notificationId:row.entity.id})\"', cssIconClass: \"fa fa-eye\" },\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n\n \n if (filter) {\n\n options.title = $scope.notificationFilter.title;\n options.type = $scope.notificationFilter.type;\n options.event_name = $scope.notificationFilter.event_name;\n\n\n };\n \n return Restangular.all('PushNotifications/List').getList(options).then(function (result) {\n \n //Contamos el estado de cada comunicación con respecto a cada usuario\n let list = result;\n list.forEach(l => {\n l.sent = 0;\n l.pending = 0;\n l.error = 0;\n l.FK_users_notifications_notifications.forEach(user => {\n switch (user.status) {\n case \"sent\":\n l.sent++;\n break;\n case \"pending\":\n l.pending++;\n break;\n case \"error\":\n l.error++;\n break;\n }\n })\n $log.debug(l)\n })\n return list;\n })\n \n \n }\n\n };\n\n $scope.search = function () {\n filter = true;\n $scope.gridOptions.loadData();\n }\n\n $scope.goToEdit = function (rowEntity) {\n $state.go(\"push_notifications_types.edit\", { id: rowEntity.id });\n }\n\n $scope.deleteDialog = function (id, name) {\n $scope.id = id;\n $scope.name = name;\n modalService.confirm({\n title: $filter('translate')('push_notifications.delete'),\n message: $filter('translate')('push_notifications.delete_message') + \" \" + $scope.name + \"?\",\n onAccept: function () {\n Restangular.one('PushNotifications/List', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('push_notifications.remove_success'));\n $scope.gridOptions.data =\n $scope.gridOptions.data.filter(function (el) { return el.id != $scope.id; });\n }, function (response) {\n $log.error(\"Error with status code\", response.status);\n });\n\n }\n });\n\n };\n\n }])\n\n ;","\nimport BreadcrumbView from \"../common/breadcrumb/breadcrumb.html\";\nimport PushNotificationsListView from \"./push_notifications-list.html\";\nimport PushNotificationsEditView from \"./push_notifications-edit.html\";\n\nangular.module(\"push_notifications\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('push_notifications', {\n url: \"/push_notifications\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n })\n\n .state('push_notifications.list', {\n url: \"/list\",\n controller: \"PushNotificationsListCtrl\",\n template: PushNotificationsListView,\n // requiredPermission: [\"MAILINGS_READ\"]\n })\n .state('push_notifications.edit', {\n url: \"/edit/:notificationId\",\n controller: \"PushNotificationsEditCtrl\",\n template: PushNotificationsEditView,\n // requiredPermission: [\"MAILINGS_READ\"]\n })\n }])\n ;","import './push_notifications_types';\nimport './push_notifications_types-list';\nimport './push_notifications_types-edit'; "," angular.module(\"push_notifications_types\")\n\n .controller(\"PushNotificationsTypesEditCtrl\", ['LoginService', '$scope', '$rootScope', '$state', '$stateParams', 'Restangular', 'modalService','$filter', '$translate', function (LoginService, $scope, $rootScope, $state, $stateParams, Restangular, modalService, $filter, $translate) {\n\n //Comprobamos si tiene permiso escritura\n\n\n $scope.allowWrite = true// LoginService.permissionExist(\"MAILINGS_WRITE\");\n\n $rootScope.title = $filter('translate')('push_notifications_types.title');\n\n $scope.push_notification_type = {};\n\n\n //Gestor de texto \n \n\n if (angular.isUndefined($stateParams.id) || $stateParams.id == \"\") {\n\n $rootScope.breadcrumb = [\n { title: $filter('translate')('push_notifications_types.title'), url: `push_notifications_types.list` },\n { title: $filter('translate')('push_notifications_types.add') },\n\n ];\n } else {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('push_notifications_types.title'), url: `push_notifications_types.list` },\n { title: $filter('translate')('general.edit') },\n ];\n\n Restangular.one('PushNotifications/Types', $stateParams.id).get().then(function (result) {\n $scope.push_notification_type = result;\n });\n }\n\n $scope.save = function () {\n\n if (!angular.isUndefined($scope.push_notification_type.id)) {\n $scope.push_notification_type.put().then(function (result) {\n if (typeof (result.id) != \"undefined\") {\n toastr.success($filter('translate')('push_notifications_types.add_success'));\n $state.go(\"push_notifications_types.list\");\n } else {\n $scope.errorMessage = result.message;\n }\n });\n } else {\n Restangular.all('PushNotifications/Types').post($scope.push_notification_type).then(function (result) {\n if (typeof (result.id) != \"undefined\") {\n toastr.success($filter('translate')('push_notifications_types.add_success'));\n $state.go(\"push_notifications_types.list\");\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n }\n\n $scope.checkDelete = function () {\n modalService.confirm({\n title: $filter('translate')('push_notifications_types.delete'),\n message: $filter('translate')('push_notifications_types.delete_message'),\n onAccept: function () {\n $scope.push_notification_type.remove().then(function () {\n toastr.success($filter('translate')('push_notifications_types.remove_success'));\n $state.go(\"push_notifications_types.list\");\n });\n }\n });\n };\n\n\n\n }])\n\n ;\n\n","angular.module(\"push_notifications_types\")\n\n .controller(\"PushNotificationsTypesListCtrl\", ['LoginService', '$rootScope', '$scope','$q', 'Restangular', 'gridService', 'treeService', 'modalService', '$filter', '$state', '$log',\n function (LoginService, $rootScope, $scope, $q, Restangular, gridService, treeService, modalService, $filter, $state, $log) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = true // LoginService.permissionExist(\"MAILINGS_WRITE\");\n\n $rootScope.title = $filter('translate')('push_notifications_types.title');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('push_notifications_types.title') }\n ];\n\n $scope.gridOptions = {\n pdfTitle: $filter('translate')('push_notifications_types.title'),\n exporterMenuCsv: true,\n gridMenuShowHideColumns: false,\n paginationPageSizes: [15, 30, 45],\n paginationPageSize: 15,\n // rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n\n columnDefs: [ \n { name: 'name', displayName: $filter('translate')('general.name'), enableFiltering: true, enableHiding: false },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('general.edit'), action: 'ui-sref=\"push_notifications_types.edit({id:row.entity.id})\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('general.delete'), action: 'ng-click=\"grid.appScope.deleteDialog(row.entity.id,row.entity.name);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n return Restangular.all('PushNotifications/Types').getList(options).then(function (result) {\n var data = result;\n data.totalRows = result.length;\n return data;\n });\n \n }\n\n };\n\n $scope.goToEdit = function (rowEntity) {\n $state.go(\"push_notifications_types.edit\", {id: rowEntity.id });\n }\n\n $scope.deleteDialog = function (id, name) {\n $scope.id = id;\n $scope.name = name;\n modalService.confirm({\n title: $filter('translate')('push_notifications_types.delete'),\n message: $filter('translate')('push_notifications_types.delete_message') + \" \" + $scope.name + \"?\",\n onAccept: function () {\n Restangular.one('PushNotifications/Types', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('push_notifications_types.remove_success'));\n $scope.gridOptions.data =\n $scope.gridOptions.data.filter(function (el) { return el.id != $scope.id; });\n }, function (response) {\n $log.error(\"Error with status code\", response.status);\n });\n }\n });\n\n };\n\n }])\n\n ;","\nimport BreadcrumbView from \"../common/breadcrumb/breadcrumb.html\";\nimport PushNotificationsTypesListView from \"./push_notifications_types-list.html\";\nimport PushNotificationsTypesEditView from \"./push_notifications_types-edit.html\";\n\nangular.module(\"push_notifications_types\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('push_notifications_types', {\n url: \"/push_notifications_types\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n })\n\n .state('push_notifications_types.list', {\n url: \"/list\",\n controller: \"PushNotificationsTypesListCtrl\",\n template: PushNotificationsTypesListView,\n // requiredPermission: [\"MAILINGS_READ\"]\n })\n .state('push_notifications_types.edit', {\n url: \"/edit/:id\",\n controller: \"PushNotificationsTypesEditCtrl\",\n template: PushNotificationsTypesEditView,\n // requiredPermission: [\"MAILINGS_READ\"]\n })\n }])\n ;","import './razor_views';\nimport './razor_views-list';\nimport './razor_views-edit';","angular.module(\"razor_views\")\n\n .controller('RazorViewsEditCtrl', ['$rootScope', '$scope', '$http', '$stateParams', 'Restangular', '$state', '$translate', 'modalService','$filter','Upload', function ($rootScope, $scope, $http, $stateParams, Restangular, $state, $translate, modalService, $filter, Upload) {\n\n $rootScope.title = $filter('translate')('razor_views.title');\n\n if (angular.isUndefined($stateParams.id) || $stateParams.id == \"\") {\n\n $rootScope.breadcrumb = [\n { title: $filter('translate')('razor_views.list'), url: \"razor_views.list\" },\n { title: $filter('translate')('razor_views.button_add') }\n ];\n $scope.razor_views = {\n created_at: new Date()\n };\n }\n else {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('razor_views.list'), url: \"razor_views.list\" },\n { title: $filter('translate')('razor_views.edit') }\n ];\n Restangular.one('RazorViews', $stateParams.id).get().then(function (results) {\n $scope.razor_views = results;\n\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n\n $scope.cancel = function () {\n $state.go(\"razor_views.list\", { \"reset\": false });\n };\n\n $scope.save = function () {\n if (angular.isUndefined($stateParams.id) || $stateParams.id === \"\")\n Restangular.all('RazorViews').post($scope.razor_views).then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('razor_views.success'));\n $state.go(\"razor_views.edit\");\n } else {\n $scope.errorMessage = result.message;\n }\n });\n else {\n $scope.razor_views.put().then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('razor_views.success'));\n $state.go(\"razor_views.edit\");\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n };\n }]);\n","angular.module(\"razor_views\")\n\n .controller('RazorViewsListCtrl', ['$rootScope', '$scope', 'Restangular', 'gridService', 'modalService', 'uiGridConstants', '$filter', 'LoginService', '$stateParams', '$state',\n function ($rootScope, $scope, Restangular, gridService, modalService, uiGridConstants, $filter, LoginService, $stateParams, $state) {\n\n $rootScope.title = $filter('translate')('razor_views.title');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('razor_views.title') }\n ];\n\n $scope.gridOptionsRazorViews = {\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n paginationPageSizes: [20, 50, 100],\n paginationPageSize: 100,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n { name: 'name', displayName: $filter('translate')('razor_views.name'), enableFiltering: true, enableHiding: false, enableColumnMenu: false },\n { name: 'path', displayName: $filter('translate')('razor_views.path'), enableFiltering: true, enableHiding: false, enableColumnMenu: false },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('razor_views.button_edit'), action: 'ui-sref=\"razor_views.edit({id:row.entity.id})\"', cssIconClass: \"fa fa-edit\" }\n ], { cssClass: \"pull-right\" })\n },\n\n ],\n getData: function (options) {\n return Restangular.all('RazorViews').getList();\n }\n\n };\n\n $scope.goToEdit = function (rowEntity) {\n $state.go(\"razor_views.edit\", { id: rowEntity.id });\n }\n\n $scope.BorrarDialog = function (id, name) {\n $scope.id = id;\n $scope.name = name;\n modalService.confirm({\n title: $filter('translate')('razor_views.button_delete'),\n message: $filter('translate')('razor_views.delete_message') + \" \" + name + \"?\",\n onAccept: function () {\n Restangular.one('RazorViews', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('razor_views.success'));\n $scope.gridOptionsRazorViews.gridApi.core.raise.itemDeleted($scope);\n\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n });\n\n };\n \n $scope.reloadViews = function () {\n Restangular.all('RazorViews/Reload').customPUT({}).then(function () {});\n };\n \n }]);\n","\nimport BreadcrumbView from \"../common/breadcrumb/breadcrumb.html\";\nimport RazorViewsListView from \"./razor_views-list.html\";\nimport RazorViewsEditView from \"./razor_views-edit.html\";\n\nangular.module(\"razor_views\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('razor_views', {\n url: \"/razor_views\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n })\n .state('razor_views.list', {\n url: \"/list\",\n controller: \"RazorViewsListCtrl\",\n template: RazorViewsListView,\n params: { reset: null },\n data: { pageTitle: 'Vistas' }\n })\n .state('razor_views.edit', {\n url: \"/edit/:id\",\n controller: \"RazorViewsEditCtrl\",\n template: RazorViewsEditView,\n data: { pageTitle: 'Vistas' }\n })\n ;\n }])\n;\n","import './reports'; \nimport './reports-preview';\nimport './gifts_reports/_index';\nimport './resume_reports/_index';\nimport './persons_reports/_index';\nimport './tasks_reports/_index';\n","import './gifts_reports';\nimport './gifts_reports-list'; ","angular.module(\"gifts_reports\")\n\n .controller(\"GiftsReportsCtrl\", ['$scope', '$rootScope', '$controller', '$state', 'Restangular', '$uibModal', 'modalService', '$filter', 'uiGridConstants', 'gridService',\n function ($scope, $rootScope, $controller, $state, Restangular, $uibModal, modalService, $filter, uiGridConstants, gridService) {\n\n $rootScope.title = $filter('translate')('gifts_reports.title');\n\n $scope.gifts_reports = {\n person: {},\n gift: {}\n };\n\n $scope.total = 0;\n $scope.showGiftsReport = false;\n\n Restangular.all('Persons/AllPersons').getList().then(function (persons) {\n $scope.selectPersons = persons;\n $scope.selectPersons.unshift({\n id: null,\n name: $filter('translate')('gifts_reports.all')\n });\n $scope.gifts_reports.person = $scope.selectPersons[0];\n });\n\n $scope.limit = 50;\n\n /*$scope.select2Options = {\n query: function (query) {\n var data = { results: [], more: false };\n $log.debug(\"aa\");\n // Reduce all values to what's needed\n if ($scope.selectPersons) {\n // Filter search\n data.results = $scope.selectPersons.reduce(function (previous, current) {\n if (query.matcher(query.term, current.text)) {\n previous.push(current);\n }\n return previous;\n }, []);\n // Page\n if (data.results.length > query.page * $scope.limit) {\n data.more = true;\n }\n data.results = data.results.splice((query.page - 1) * $scope.limit, $scope.limit);\n }\n query.callback(data);\n },\n multiple: true\n };*/\n\n Restangular.all('Gifts').getList().then(function (gifts) {\n $scope.selectGifts = gifts;\n $scope.selectGifts.unshift({\n id: null,\n name: $filter('translate')('gifts_reports.all')\n });\n $scope.selectGifts.push({\n id: 0,\n name: $filter('translate')('gifts_reports.other_gifts')\n });\n $scope.gifts_reports.gift = $scope.selectGifts[0];\n });\n\n $scope.generateReport = function () {\n\n $scope.showGiftsReport = true;\n\n if (angular.isDefined($scope.gridOptionsGifts)) {\n $scope.gridOptionsGifts.loadData(false);\n } else {\n $scope.gridOptionsGifts = {\n showColumnFooter: true,\n exporterMenuCsv: true,\n enableGridMenu: true,\n enableHiding: false,\n gridMenuShowHideColumns: true,\n paginationPageSizes: [15, 30, 45],\n paginationPageSize: 15,\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n pdfTitle: $filter('translate')('tasks_reports.pdf_title'),\n getFilterExternalDescription: function () {\n var externalFilters = \"\";\n if (angular.isDefined($scope.gifts_reports.person) && $scope.gifts_reports.person.id != null)\n externalFilters += $filter('translate')('gifts_reports.person') + \": \" + $scope.gifts_reports.person.name + \"\\n\";\n if (angular.isDefined($scope.gifts_reports.gift) && $scope.gifts_reports.gift.id != null)\n externalFilters += $filter('translate')('gifts_reports.gift') + \": \" + $scope.gifts_reports.gift.name + \"\\n\";\n if ($scope.gifts_reports.date_from != null && $scope.gifts_reports.date_from != \"\") {\n var fecha = $scope.gifts_reports.date_from;\n externalFilters += \"\\n\" + $filter('translate')('gifts_reports.date_from') + \": \" + fecha.getDate() + \"/\" + fecha.getMonth() + \"/\" + fecha.getFullYear();\n }\n if (angular.isDefined($scope.gifts_reports.in_out) && $scope.gifts_reports.in_out != \"\")\n externalFilters += $filter('translate')('gifts_reports.in_out') + \": \" + $scope.gifts_reports.in_out == 'IN' ? $filter('translate')('gifts_reports.in') : $filter('translate')('gifts_reports.out') + \"\\n\";\n if ($scope.gifts_reports.date_to != null && $scope.gifts_reports.date_to != \"\") {\n var fecha = $scope.gifts_reports.date_to;\n externalFilters += \"\\n\" + $filter('translate')('gifts_reports.date_to') + \": \" + fecha.getDate() + \"/\" + fecha.getMonth() + \"/\" + fecha.getFullYear();\n }\n externalFilters += \"\\n\\n\" + \"Coste total: \" + $scope.total + \"€ \\n\";\n return externalFilters;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n {\n name: 'gift_date', displayName: $filter('translate')('gifts_reports.date'), cellFilter: 'toLocalDate | date:\\'dd/MM/yyyy\\'',\n enableFiltering: true, enableColumnMenu: false, width: 150,\n customFormatFn: function (value) {\n var fecha = new Date(value);\n return $filter('date')(fecha, 'dd/MM/yyyy');\n },\n },\n {\n name: 'in_out', displayName: $filter('translate')('gifts_reports.in_out'), enableFiltering: true,\n cellTemplate: '
'+$filter('translate')('gifts_reports.in')+'
' +\n '
' + $filter('translate')('gifts_reports.out') + '
',\n customFormatFn: function (value) {\n if (value == 'IN')\n return $filter('translate')('gifts_reports.in');\n else if (value == 'OUT')\n return $filter('translate')('gifts_reports.out');\n else\n return value\n },\n },\n { name: 'person_name', field: 'FK_persons_gifts_persons.name', displayName: $filter('translate')('gifts_reports.person_name'), enableFiltering: true },\n { name: 'person_surname', field: 'FK_persons_gifts_persons.surname', displayName: $filter('translate')('gifts_reports.person_surname'), enableFiltering: true },\n { name: 'person_lastname', field: 'FK_persons_gifts_persons.lastname', displayName: $filter('translate')('gifts_reports.person_lastname'), enableFiltering: true },\n { name: 'event_name', field: 'FK_persons_gifts_events.name', displayName: $filter('translate')('gifts_reports.event'), enableFiltering: false },\n { name: 'gift_name', field: 'name', displayName: $filter('translate')('gifts_reports.gift'), enableFiltering: false, enableHiding: false },\n { name: 'quantity', displayName: $filter('translate')('gifts_reports.quantity'), enableFiltering: true },\n { name: 'cost', displayName: $filter('translate')('gifts_reports.cost'), enableFiltering: true, footerCellTemplate: '
Total: {{grid.appScope.total}} €
' },\n { name: 'grateful', width: 100, field: 'grateful', displayName: $filter('translate')('persons_gifts.grateful'), enableFiltering: false, cellTemplate: gridService.yesNoTemplate('grateful') },\n { name: 'given_to_somebody', width: 100, field: 'given_to_somebody', displayName: $filter('translate')('persons_gifts.given_to_somebody'), enableFiltering: false, cellTemplate: gridService.yesNoTemplate('given_to_somebody') },\n { name: 'given_to', displayName: $filter('translate')('persons_gifts.given_to'), enableFiltering: false },\n ],\n getData: function (options) {\n options.in_out = $scope.gifts_reports.in_out;\n options.date_from = $scope.gifts_reports.date_from;\n options.date_to = $scope.gifts_reports.date_to;\n options.gift_id = $scope.gifts_reports.gift.id;\n options.person_id = (typeof($scope.gifts_reports.person) !== 'undefined' && $scope.gifts_reports.person != null ? $scope.gifts_reports.person.id : null);\n Restangular.all('Reports/Gifts/TotalCost').getList(options).then(function (total) {\n $scope.total = total[0];\n });\n\n return Restangular.all('Reports/Gifts').getList(options);\n }\n\n };\n }\n }\n\n }])\n\n;","\nimport BreadcrumbView from \"../../common/breadcrumb/breadcrumb.html\";\nimport GiftsReportsListView from \"./gifts_reports-list.html\";\n\nangular.module(\"gifts_reports\", [])\n\n .config(['$stateProvider' ,function ($stateProvider) {\n $stateProvider\n .state('gifts_reports', {\n url: \"/gifts_reports\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n data: { pageTitle: \"Informes de Regalos\" }\n })\n .state('gifts_reports.list', {\n url: \"/list\",\n controller: \"GiftsReportsCtrl\",\n template: GiftsReportsListView,\n data: { pageTitle: \"Informes de Regalos\" }\n }) \n ;\n }])\n;","import './persons_reports';\nimport './persons_reports-list'; ","angular.module(\"persons_reports\")\n\n .controller(\"PersonsReportsCtrl\", ['$scope', '$rootScope', '$controller', '$state', 'Restangular', '$uibModal', 'modalService', '$filter', 'uiGridConstants', '$q', '$http', '$log',\n function ($scope, $rootScope, $controller, $state, Restangular, $uibModal, modalService, $filter, uiGridConstants, $q, $http, $log) {\n\n $rootScope.title = $filter('translate')('persons_reports.title');\n\n $scope.persons_reports = {\n group: {},\n state: \"\",\n tlf: false,\n address: false,\n contact: false,\n historic_positions: false,\n position: false\n };\n\n $scope.showPersonsReport = false;\n\n Restangular.all('PersonsAddress').customGET().then(function (states) { \n $scope.selectStates = states;\n $scope.selectStates.unshift($filter('translate')('persons_reports.all'));\n $scope.persons_reports.state = $scope.selectStates[0];\n });\n\n $scope.groupTree = function (groups, locationListResult, parent_id, levelString) {\n\n for (var i = 0; i < groups.length; i++) {\n\n if (groups[i].parent_group_id == parent_id) {\n groups[i].name = levelString + groups[i].name;\n locationListResult.push(groups[i]);\n $scope.groupTree(groups, locationListResult, groups[i].id, levelString + \"----\");\n }\n }\n };\n\n Restangular.all('Groups/GetGroupsPositions').getList().then(function (groups) {\n var groupsListResult = [];\n for (var i = 0; i < groups.length; i++) {\n if (groups[i].parent_group_id == null) {\n groupsListResult.push(groups[i]);\n $scope.groupTree(groups, groupsListResult, groups[i].id, \"----\");\n }\n }\n $scope.selectGroups = groupsListResult;\n $scope.selectGroups.unshift({ id: null, name: $filter('translate')('persons_reports.all') });\n $scope.persons_reports.group = $scope.selectGroups[0];\n });\n \n $scope.generateReport = function () {\n\n $scope.showPersonsReport = true;\n\n\n if (angular.isDefined($scope.gridOptionsPersons)) {\n\n angular.forEach($scope.gridOptionsPersons.gridApi.grid.columns, function (item) {\n $log.debug(item);\n if (item.name === \"address\") {\n if ($scope.persons_reports.address) {\n item.showColumn();\n $log.debug(item);\n } else {\n item.hideColumn();\n }\n } \n if (item.name === \"group\") {\n if ($scope.persons_reports.position) {\n item.showColumn();\n } else {\n item.hideColumn();\n }\n }\n if (item.name === \"position\") {\n if ($scope.persons_reports.position) {\n item.showColumn();\n } else {\n item.hideColumn();\n }\n }\n if (item.name === \"contact\") {\n if ($scope.persons_reports.contact) {\n item.showColumn();\n } else {\n item.hideColumn();\n }\n }\n });\n $scope.gridOptionsPersons.gridApi.core.refresh();\n $scope.gridOptionsPersons.gridApi.core.notifyDataChange(uiGridConstants.dataChange.COLUMN);\n $scope.gridOptionsPersons.loadData(false);\n } else {\n $scope.gridOptionsPersons = {\n exporterMenuCsv: true,\n enableGridMenu: true,\n enableHiding: false,\n gridMenuShowHideColumns: true,\n paginationPageSizes: [15, 30, 45],\n paginationPageSize: 15,\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n pdfTitle: $filter('translate')('persons_reports.pdf_title'),\n getFilterExternalDescription: function () {\n var externalFilters = \"\";\n if (angular.isDefined($scope.persons_reports.group) && $scope.persons_reports.group.id != null)\n externalFilters += $filter('translate')('persons_reports.group') + \": \" + $scope.persons_reports.group.name.replace(\"----\", \"\") + \"\\n\";\n if ($scope.persons_reports.state !== \"\" && $scope.persons_reports.state !== $filter('translate')('persons_reports.all'))\n externalFilters += $filter('translate')('persons_reports.state') + \": \" + $scope.persons_reports.state + \"\\n\";\n return externalFilters;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n {\n field: 'image_small', enableSorting: false, visible: true, \n customFormatFn: function (value) {\n if (value != null) { \n var img = {\n image: value,\n width: 30\n };\n return img;\n } else {\n return \"\";\n }\n },\n displayName: $filter('translate')('persons_reports.photo'), cellTemplate: \"\", width: 70, enableFiltering: false\n\n },\n { name: 'name', displayName: $filter('translate')('persons_reports.name'), enableHiding: false, enableGridMenu: false },\n { name: 'surname', displayName: $filter('translate')('persons_reports.surname'), enableGridMenu: false },\n { name: 'lastname', displayName: $filter('translate')('persons_reports.lastname'), enableGridMenu: false },\n { field: 'address', name: 'address', displayName: $filter('translate')('persons_reports.address'), enableGridMenu: false, visible: $scope.persons_reports.address},\n { field: 'contact', name: 'contact', displayName: $filter('translate')('persons_reports.contact'), enableGridMenu: false, visible: $scope.persons_reports.contact },\n { field: 'position_name', name: 'position', displayName: $filter('translate')('persons_reports.position'), enableGridMenu: false, visible: $scope.persons_reports.position },\n { field: 'group_name', name: 'group', displayName: $filter('translate')('persons_reports.group_name'), enableGridMenu: false, visible: $scope.persons_reports.position }\n ],\n getData: function (options) {\n if ($scope.persons_reports.state !== \"\" && $scope.persons_reports.state !== $filter('translate')('persons_reports.all'))\n options.state = $scope.persons_reports.state;\n options.group_id = $scope.persons_reports.group.id;\n options.showAddress = $scope.persons_reports.address;\n options.showPositions = $scope.persons_reports.position;\n options.showContact = $scope.persons_reports.contact;\n options.showHistoric = $scope.persons_reports.historic_positions;\n\n var deferred = $q.defer();\n Restangular.all('Reports/Authorities').getList(options).then(function (results, status, headers, config) {\n var data = results;\n var personsIds = [];\n angular.forEach(data, function (dataR) {\n if (personsIds.indexOf(dataR.id) < 0) {\n personsIds.push(dataR.id);\n }\n });\n //Obtenemos sus imágenes\n if (personsIds.length > 0) {\n $http({\n method: 'post',\n url: (window as any).CONFIG.api_url + 'Persons/ImagesSmall',\n params: { ids: personsIds }\n }).then(function (resultsImage, status, headers, config) {\n angular.forEach(data, function (person) {\n for (var i = 0; i < resultsImage.data.length; i++) {\n if (person.id == resultsImage.data[i].person_id) {\n person.image_small = resultsImage.data[i].image_small;\n break;\n }\n }\n });\n });\n }\n data.totalRows = results.totalRows;\n $scope.totalRows = results.totalRows;\n deferred.resolve(data);\n });\n return deferred.promise;\n }\n\n };\n }\n };\n\n }])\n\n\n.filter('getNames', function () {\n return function (items) { \n return items && items.map(function (item) {\n return item.FK_events_tasks_users_users.name;\n }).join(', ');\n }\n})\n\n;","\nimport BreadcrumbView from \"../../common/breadcrumb/breadcrumb.html\";\nimport PersonsReportsListView from \"./persons_reports-list.html\";\n\nangular.module(\"persons_reports\", [])\n\n .config(['$stateProvider' ,function ($stateProvider) {\n $stateProvider\n .state('persons_reports', {\n url: \"/persons_reports\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n data: { pageTitle: \"Informes de Autoridades\" }\n })\n .state('persons_reports.list', {\n url: \"/list\",\n controller: \"PersonsReportsCtrl\",\n template: PersonsReportsListView,\n data: { pageTitle: \"Informes de Autoridades\" }\n }) \n ;\n }])\n;","import html2canvas from \"html2canvas\";\n\nimport xmlToJSON from \"xmltojson\";\nimport ReportsPreviewValueView from \"./reports-preview-value.html\";\n\nangular.module(\"reports\")\n\n .directive('customOnChange', function () {\n return {\n restrict: 'A',\n link: function (scope, element, attrs) {\n const onChangeHandler = scope.$eval(attrs.customOnChange);\n element.on('change', onChangeHandler);\n element.on('$destroy', function () {\n element.off();\n });\n\n }\n };\n })\n\n .controller(\"ReportsPreviewCtrl\", ['$sce', '$scope', 'LoginService', '$rootScope', '$state', 'Restangular', '$uibModal', 'modalService', '$filter', '$uibModalInstance', 'document', 'entity_type', 'entity_type_id', 'LanguagesService', '$log',\n function ($sce, $scope, LoginService, $rootScope, $state, Restangular, $uibModal, modalService, $filter, $uibModalInstance, document, entity_type, entity_type_id, LanguagesService, $log) {\n\n $scope.allowWrite = LoginService.permissionExist(\"EVENTS_DOCUMENTS_PARAMETERS_WRITE\");\n\n $scope.document = document;\n //$scope.event = event;\n\n $scope.jasper_parameters = {name: \"JasperParameter\", values: null};\n\n $rootScope.title = $filter('translate')('reports.title');\n $scope.reportJSON = {};\n\n Restangular.all(\"reports\").customGET('previewjrxml/' + $scope.document.id).then(function (report) {\n $scope.report = report;\n $scope.parseJRXML($scope.report);\n });\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n $scope.save = function () {\n\n $scope.parameters.push($scope.jasper_parameters);\n $uibModalInstance.close($scope.parameters);\n };\n\n $scope.getParameters = function (str) {\n const regex = /\\$P{(.*?)}/gm;\n let m;\n\n const parameters = new Array();\n while ((m = regex.exec(str)) !== null) {\n // This is necessary to avoid infinite loops with zero-width matches\n if (m.index === regex.lastIndex) {\n regex.lastIndex++;\n }\n\n // The result can be accessed through the `m`-variable.\n m.forEach((match, groupIndex) => {\n parameters.push(match);\n });\n }\n return parameters;\n };\n\n $scope.getFirstParameter = function (str) {\n const parameters = $scope.getParameters(str);\n return parameters.length > 0 ? parameters[0] : null;\n };\n\n $scope.qrSampleBase64 = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALoAAAC6CAMAAAAu0KfDAAAABlBMVEX///8AAABVwtN+AAABxklEQVR4nO3QUZKDQAwD0eT+l94DgJQeCAXOtr4oGKzneb2MMebivHHSX31mbzljkC5d+hT6tj6dIcuQ+vRMDNKlS59I5zX9ZKKQ98QgXbr0X6X3f9P5NEG6dOnSSTGnk6/SpUv/PXrHEXpHHLsa6dKlT6cfq/nuMzdIly59Cv18SMGF9Wci/Y5IvyM301N9quxEshJZAy0sXbr0x9NJWRqXWH2NnnQR0qVLn0XvUL79KqVfFmmULl36FHpC9xBoByFi+ipduvQh9D4ivUllqwvwq5EuXfpEOjoK6NsJxy6iLyxduvRZ9M4lX8mSx7rieenSpQ+hry6z/TdVrl5E/1e6dOmz6H2B/kyI6TmtmhaLy0iXLv3B9FXWauXq5NSyE+nSpT+enupTyEoESto/oKVLl/54emKREemvPqf/tWCQLl36EHpfKYWc54vxLunSpU+hr2Zbn3Dkfb+yPkG6dOnPp79xTtWErmPXIV269Fn0nQ/hTHomK5FeflK6dOmz6O9N+Lgz6/XsoKVLl/6j9PS1V/LFert06dL/A31nUM13J0iXLn0inRfz9JnbM/3ipEuXPpF+DEGInN5bpEuXPpFujDEX5A/WVTvF1c+o+gAAAABJRU5ErkJggg==\";\n\n $scope.parseJRXML = function (report) {\n let options: any = {\n mergeCDATA: true,\t// extract cdata and merge with text nodes\n grokAttr: true,\t\t// convert truthy attributes to boolean, etc\n grokText: true,\t\t// convert truthy text/attr to boolean, etc\n normalize: true,\t// collapse multiple spaces to single space\n xmlns: false, \t\t// include namespaces as attributes in output\n namespaceKey: '', \t// tag name for namespace objects\n textKey: 'text', \t// tag name for text nodes\n valueKey: 'value', \t// tag name for attribute values\n attrKey: '', \t// tag for attr groups\n cdataKey: '',\t// tag for cdata nodes (ignored if mergeCDATA is true)\n attrsAsObject: false, \t// if false, key is used as prefix to name, set prefix to '' to merge children and attrs.\n stripAttrPrefix: false, \t// remove namespace prefixes from attributes\n stripElemPrefix: true, \t// for elements of same name in diff namespaces, you can enable namespaces and access the nskey property\n childrenAsArray: true \t// force children into arrays\n };\n $scope.reportJSON = xmlToJSON.parseString(report.xml, options);\n $log.debug($scope.reportJSON);\n let report0 = $scope.reportJSON.jasperReport[0];\n\n //preparamos estilo documento\n $scope.pageStyle = {\n \"position\": \"relative\",\n \"margin\": \"auto\",\n \"background-color\": \"white\",\n \"border\": \"1px solid #444444\",\n \"-webkit-box-shadow\": \"0px 2px 5px 0px rgba(0,0,0,0.75)\",\n \"-moz-box-shadow\": \"0px 2px 5px 0px rgba(0,0,0,0.75)\",\n \"box-shadow\": \"0px 2px 5px 0px rgba(0,0,0,0.75)\",\n \"width\": report0.pageWidth.value + \"px\",\n \"height\": report0.pageHeight.value + \"px\",\n \"padding-left\": report0.leftMargin.value + \"px\",\n \"padding-top\": report0.topMargin.value + \"px\",\n \"padding-right\": report0.rightMargin.value + \"px\",\n \"padding-bottom\": report0.bottomMargin.value + \"px\"\n };\n\n const leftMargin = parseFloat(report0.leftMargin.value);\n const topMargin = parseFloat(report0.topMargin.value);\n\n //extraemos elementos\n $scope.elements = [];\n const bands: any[] = [];\n \n $scope.editableParams = [];\n\n angular.forEach(report0.parameter, function(param, idx) {\n if(Array.isArray(param.property)) {\n $log.debug(param);\n }\n });\n \n if (angular.isDefined(report0.title)) bands.push(report0.title[0].band[0]);\n if (angular.isDefined(report0.summary)) bands.push(report0.summary[0].band[0]);\n if (angular.isDefined(report0.pageHeader)) bands.push(report0.pageHeader[0].band[0]);\n if (angular.isDefined(report0.columnHeader)) {\n var aux = angular.copy(report0.columnHeader[0].band);\n\n angular.forEach(report0.columnHeader[0].band, function (item, idx) {\n angular.forEach(item.property, function (prop) {\n if (prop.name.value == \"diaple.show_band\") {\n if (prop.value.value == false) {\n var index = aux.indexOf(item);\n aux.splice(index, 1);\n }\n }\n });\n })\n bands.push(aux[0]);\n }\n\n if (angular.isDefined(report0.detail)) {\n \n var aux = angular.copy(report0.detail[0].band[0]);\n \n angular.forEach(report0.detail[0].band[0], function (item) {\n angular.forEach(item.property, function (prop) {\n if (prop.name.value == \"diaple.show_band\") {\n if (prop.value.value == false) {\n var index = aux.indexOf(item);\n aux.splice(index, 1);\n }\n }\n });\n });\n\n bands.push(aux);\n //Si tiene dos detalles para dos paginas hay que cargarlo\n if (report0.detail[0].band.length > 1) {\n if (angular.isDefined(report0.detail)) {\n\n var aux = angular.copy(report0.detail[0].band[1]);\n\n angular.forEach(report0.detail[0].band[1], function (item) {\n angular.forEach(item.property, function (prop) {\n if (prop.name.value == \"diaple.show_band\") {\n if (prop.value.value == false) {\n var index = aux.indexOf(item);\n aux.splice(index, 1);\n }\n }\n });\n });\n\n bands.push(aux);\n } \n }\n }\n\n if (angular.isDefined(report0.columnFooter)) bands.push(report0.columnFooter[0].band[0]);\n if (angular.isDefined(report0.pageFooter)) bands.push(report0.pageFooter[0].band[0]);\n if (angular.isDefined(report0.lastPageFooter)) bands.push(report0.lastPageFooter[0].band[0]);\n let heightUsed = 0;\n let cont = 0;\n \n angular.forEach(bands, function (band, typeIdx) {\n $log.debug(band);\n\n let existsElements = false;\n if (typeof band != \"undefined\") {\n $scope.elements.push({ band: cont + 1, elements: [] });\n heightUsed = 0;\n angular.forEach(band, function (type, typeIdx: string) {\n if (typeIdx === \"line\") {\n existsElements = true;\n angular.forEach(type, function (element, idx) {\n const style = \"position: absolute;\" +\n \"background-color: #444444;\" +\n \"left: \" + (leftMargin + parseFloat(element.reportElement[0].x.value)) + \"px;\" +\n \"top: \" + (heightUsed + topMargin + parseFloat(element.reportElement[0].y.value)) + \"px;\" +\n \"width: \" + element.reportElement[0].width.value + \"px;\" +\n \"height: \" + element.reportElement[0].height.value + \"px;\";\n $scope.elements[cont].elements.push({\n type: typeIdx,\n uuid: element.reportElement[0].uuid.value,\n changeValue: false,\n style: style\n });\n });\n } else if (typeIdx === \"rectangle\") {\n existsElements = true;\n angular.forEach(type, function (element, idx) {\n const style = \"position: absolute;\" +\n \"background-color: \" + (angular.isDefined(element.reportElement[0].backcolor) ? element.reportElement[0].backcolor.value : \"transparent\") + \";\" +\n \"left: \" + (leftMargin + parseFloat(element.reportElement[0].x.value)) + \"px;\" +\n \"top: \" + (heightUsed + topMargin + parseFloat(element.reportElement[0].y.value)) + \"px;\" +\n \"width: \" + element.reportElement[0].width.value + \"px;\" +\n \"height: \" + element.reportElement[0].height.value + \"px;\";\n $scope.elements[cont].elements.push({\n type: typeIdx,\n uuid: element.reportElement[0].uuid.value,\n changeValue: false,\n style: style\n });\n });\n } else if (typeIdx === \"staticText\") {\n existsElements = true;\n angular.forEach(type, function (element, idx) {\n const style = \"position: absolute;\" +\n \"background-color: \" + (angular.isDefined(element.reportElement[0].backcolor) && angular.isDefined(element.reportElement[0].mode && element.reportElement[0].mode.value == \"Opaque\") ? element.reportElement[0].backcolor.value : \"transparent\") + \";\" +\n (angular.isDefined(element.reportElement[0].forecolor) ? \"color: \" + element.reportElement[0].forecolor.value + \";\" : \"\") +\n //(changeValue ? \"cursor: pointer;\" : \"\") +\n //\"border: 1px dotted #e9e9e9;\" +\n \"display: table-cell;\" +\n //\"white-space: pre-line;\" +\n \"left: \" + (leftMargin + parseFloat(element.reportElement[0].x.value)) + \"px;\" +\n \"top: \" + (heightUsed + topMargin + parseFloat(element.reportElement[0].y.value)) + \"px;\" +\n \"width: \" + element.reportElement[0].width.value + \"px;\" +\n \"height: \" + element.reportElement[0].height.value + \"px;\" +\n (Array.isArray(element.textElement[0].font) && angular.isDefined(element.textElement[0].font[0].size) ? \"font-size: \" + element.textElement[0].font[0].size.value + \"px;\" : \"\") +\n \"line-height: normal;\" +\n (angular.isDefined(element.textElement[0].rotation) ? \"transform: rotate(\" + (element.textElement[0].rotation.value == \"UpsideDown\" ? \"180deg\" : \"\") + \");\" : \"\") +\n \"text-align: \" + element.textElement[0].textAlignment.value + \";\" +\n \"vertical-align: \" + element.textElement[0].verticalAlignment.value + \";\";\n $scope.elements[cont].elements.push({\n type: typeIdx,\n uuid: element.reportElement[0].uuid.value,\n changeValue: false,\n text: element.text[0].text,\n expression: \"\",\n style: style\n });\n });\n } else if (typeIdx === \"textField\") {\n existsElements = true;\n angular.forEach(type, function (element, idx) {\n let changeValue = (typeof element.textFieldExpression != \"undefined\" && element.textFieldExpression[0].text != null && element.textFieldExpression[0].text.indexOf(\"$P\") == 0);\n const style = \"position: absolute;\" +\n \"background-color: \" + (angular.isDefined(element.reportElement[0].backcolor) && angular.isDefined(element.reportElement[0].mode && element.reportElement[0].mode.value === \"Opaque\") ? element.reportElement[0].backcolor.value : \"transparent\") + \";\" +\n (angular.isDefined(element.reportElement[0].forecolor) ? \"color: \" + element.reportElement[0].forecolor.value + \";\" : \"\") +\n (changeValue ? \"cursor: pointer;\" : \"\") +\n (changeValue ? \"border: 1px dotted #444444;\" : \"\") +\n \"display: table-cell;\" +\n //\"white-space: pre-line;\" +\n \"left: \" + (leftMargin + parseFloat(element.reportElement[0].x.value)) + \"px;\" +\n \"top: \" + (heightUsed + topMargin + parseFloat(element.reportElement[0].y.value)) + \"px;\" +\n \"width: \" + element.reportElement[0].width.value + \"px;\" +\n \"height: \" + element.reportElement[0].height.value + \"px;\" +\n (Array.isArray(element.textElement[0].font) && angular.isDefined(element.textElement[0].font[0].size) ? \"font-size: \" + element.textElement[0].font[0].size.value + \"px;\" : \"\") +\n \"line-height: normal;\" +\n (Array.isArray(element.textElement[0].font) && angular.isDefined(element.textElement[0].font[0].isBold) ? \"font-weight: \" + (element.textElement[0].font[0].isBold.value ? \"bold\" : \"normal\") + \";\" : \"\") +\n \"overflow-wrap: break-word;\" +\n (angular.isDefined(element.textElement[0].textAlignment) ? \"text-align: \" + element.textElement[0].textAlignment.value + \";\" : \"\") +\n (angular.isDefined(element.textElement[0].rotation) ? \"transform: rotate(\" + (element.textElement[0].rotation.value == \"UpsideDown\" ? \"180deg\" : \"\") + \");\" : \"\") +\n (angular.isDefined(element.textElement[0].verticalAlignment) ? \"vertical-align: \" + element.textElement[0].verticalAlignment.value + \";\" : \"\");\n let text = \"\";\n let name = element.textFieldExpression[0].text;\n //busca propieda de valor por defecto\n if (angular.isDefined(element.reportElement[0].property)) {\n angular.forEach(element.reportElement[0].property, function (property) {\n if (property.name.value === \"diaple.default_value\") text = property.value.value;\n if (property.name.value === \"diaple.parameter_name\") {\n name = property.value.value;\n changeValue = true;\n }\n });\n }\n $scope.elements[cont].elements.push({\n type: typeIdx,\n uuid: element.reportElement[0].uuid.value,\n changeValue: changeValue,\n text: $sce.trustAsHtml(text),\n expression: name,\n style: style\n });\n });\n } else if (typeIdx === \"image\") {\n existsElements = true;\n angular.forEach(type, function (element, idx) {\n\n //extraemos parametros, si hay varios cogemos solo primero\n let parameterExpression = null;\n if (angular.isDefined(element.imageExpression)) {\n parameterExpression = $scope.getFirstParameter(element.imageExpression[0].text);\n }\n\n let backgroundSize = angular.isDefined(element.scaleImage) ? element.scaleImage.value : \"cover\";\n if (backgroundSize == \"RetainShape\") backgroundSize = \"contain\";\n if (backgroundSize == \"FillFrame\") backgroundSize = \"cover\";\n const changeValue = (typeof element.imageExpression != \"undefined\" && element.imageExpression[0].text != null && element.imageExpression[0].text.indexOf(\"$P{P_IMAGE\") >= 0);\n const style = \"position: absolute;\" +\n \"background-color: \" + (angular.isDefined(element.reportElement[0].backcolor) && angular.isDefined(element.reportElement[0].mode && element.reportElement[0].mode.value == \"Opaque\") ? element.reportElement[0].backcolor.value : \"transparent\") + \";\" +\n (changeValue ? \"cursor: pointer;\" : \"\") +\n \"border: 1px dotted #444444;\" +\n \"display: table-cell;\" +\n \"left: \" + (leftMargin + parseFloat(element.reportElement[0].x.value)) + \"px;\" +\n \"top: \" + (heightUsed + topMargin + parseFloat(element.reportElement[0].y.value)) + \"px;\" +\n \"width: \" + element.reportElement[0].width.value + \"px;\" +\n \"height: \" + element.reportElement[0].height.value + \"px;\" +\n (angular.isDefined(element.hAlign) ? \"text-align: \" + element.hAlign.value + \";\" : \"\") +\n (angular.isDefined(element.vAlign) ? \"vertical-align: \" + element.vAlign.value + \";\" : \"\") +\n (angular.isDefined(element.imageExpression) && element.imageExpression[0].text.indexOf(\"?rotate\") > 0 ? \"transform: rotate(180deg);\" : \"\") +\n \"background-repeat: no-repeat;\" +\n \"background-position: center center;\" +\n \"background-image: url('/assets/img/no-image.png') !important;\" +\n \"background-size: \" + backgroundSize + \";\";\n $scope.elements[cont].elements.push({\n type: typeIdx,\n uuid: element.reportElement[0].uuid.value,\n changeValue: changeValue,\n text: \"\", //element.imageExpression[0].text,\n expression: parameterExpression, //element.imageExpression[0].text,\n style: style,\n size_info: element.reportElement[0].width.value + \"x\" + element.reportElement[0].height.value\n });\n });\n } else if (typeIdx === \"componentElement\") {\n existsElements = true;\n angular.forEach(type, function (element, idx) {\n\n if (angular.isDefined(element.QRCode)) {\n //es un QR, ponemos ejemplo\n $log.debug(element);\n const style = \"position: absolute;\" +\n \"display: table-cell;\" +\n \"left: \" + (leftMargin + parseFloat(element.reportElement[0].x.value)) + \"px;\" +\n \"top: \" + (heightUsed + topMargin + parseFloat(element.reportElement[0].y.value)) + \"px;\" +\n \"width: \" + element.reportElement[0].width.value + \"px;\" +\n \"height: \" + element.reportElement[0].height.value + \"px;\" +\n (angular.isDefined(element.hAlign) ? \"text-align: \" + element.hAlign.value + \";\" : \"\") +\n (angular.isDefined(element.vAlign) ? \"vertical-align: \" + element.vAlign.value + \";\" : \"\") +\n (angular.isDefined(element.imageExpression) && element.imageExpression[0].text.indexOf(\"?rotate\") > 0 ? \"transform: rotate(180deg);\" : \"\") +\n \"background-repeat: no-repeat;\" +\n \"background-position: center center;\" +\n \"background-image: url(\" + $scope.qrSampleBase64 + \");\" +\n \"background-size: contain;\";\n $scope.elements[cont].elements.push({\n type: typeIdx,\n uuid: element.reportElement[0].uuid.value,\n changeValue: false,\n text: \"\",\n expression: \"\",\n style: style\n });\n }\n });\n }\n });\n if (!existsElements) {\n $scope.elements.splice(cont, 1);\n cont--;\n }\n heightUsed += band.height.value;\n cont++;\n }\n existsElements = false;\n });\n $log.debug($scope.elements);\n //evaluate expression\n $scope.parameters = [];\n angular.forEach($scope.elements, function (band) {\n angular.forEach(band.elements, function (element) {\n if (element.changeValue) {\n $scope.parameters.push({\n name: element.expression,\n value: \"\"\n });\n }\n });\n });\n\n setTimeout(function () {\n //hacemos captura para generar thumbnail de tipo de documento si no tiene ya\n //html2canvas se ha actualizado a una nueva version, onrendered ha dejado de funcionar en la nueva\n\n if (!report.has_thumbnail) {\n /*html2canvas($(\"#jrxml-preview .page\")[0], {\n onrendered: function (canvas) {\n var data = {\n document_id: $scope.doc_report.id,\n base64: canvas.toDataURL()\n };\n Restangular.all(\"documents\").customPOST(data, 'thumbnail').then(function (result) {\n $log.debug(result);\n });\n }\n });*/\n $(\"#jrxml-preview .page\").css(\"box-shadow\", \"\");\n html2canvas($(\"#jrxml-preview .page\")[0], { scrollX: 0, scrollY: 0 }).then(canvas => {\n const image = canvas.toDataURL(\"image/png\", 1.0);\n const data = {\n document_id: $scope.document.id,\n base64: image\n };\n Restangular.all(\"documents\").customPOST(data, 'thumbnail').then(function (result) {\n $log.debug(result);\n });\n });\n }\n }, 1000);\n\n //cargando valores configurados para el evento en cuestion\n options = {\n entity_type: entity_type,\n entity_type_id: entity_type_id,\n document_id: $scope.document.id\n };\n Restangular.all(\"DocumentsConfig\").getList(options).then(function (parameters) {\n angular.forEach(parameters, function (parameter) {\n $scope.jasper_parameters.values = parameter.values[0].value;\n angular.forEach($scope.parameters, function (scopeParameter) {\n if (scopeParameter.name == parameter.name) {\n //scopeParameter.value = parameter.value;\n angular.forEach($scope.elements, function (e) {\n angular.forEach(e.elements, function (element) {\n if (element.expression == parameter.name) {\n element.values = parameter.values;\n angular.forEach(parameter.values, function (param) {\n if (param.language_id == $rootScope.languageId) {\n if (element.type == \"image\") {\n if (param.value != \"\") element.image_style = \"background-image: url('\" + param.value + \"') !important;\"; // background-size: contain !important;\";\n } else {\n element.text = $sce.trustAsHtml(param.value);\n }\n }\n });\n }\n });\n });\n }\n });\n });\n });\n };\n\n $scope.enterValue = function (element) {\n if (element.changeValue) {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: ReportsPreviewValueView,\n controller: ['$scope', 'element', '$uibModalInstance', '$translate', '$timeout', function ($scope, element, $uibModalInstance, $translate, $timeout) {\n\n $scope.element = element;\n\n $scope.data = {\n values: element.values\n };\n\n $scope.tinymceOptions = {\n //resize: true,\n language: $translate.use().toLowerCase(), //Hay que customizarlo dependiendo del idioma...\n // language_url: \"Scripts/tinymce/langs/es.js\",\n //min_height: 100,\n height: 200,\n schema: \"html5\",\n //relative_urls: false,\n //remove_script_host: true,\n formats: {\n bold: { inline: 'b' },\n underline: { inline: 'u' },\n italic: { inline: 'i' },\n alignleft: { selector: 'u,b,p,h1,h2,h3,h4,h5,h6,td,th,div,span', block: \"div\", styles: { \"text-align\": \"left\" } },\n aligncenter: { selector: 'u,b,p,h1,h2,h3,h4,h5,h6,td,th,div,span', block: \"div\", styles: { \"text-align\": \"center\" } },\n alignright: { selector: 'u,b,p,h1,h2,h3,h4,h5,h6,td,th,div,span', block: \"div\", styles: { \"text-align\": \"right\" } },\n alignjustify: { selector: 'u,b,p,h1,h2,h3,h4,h5,h6,td,th,div,span', block: \"div\", styles: { \"text-align\": \"justify\" } },\n },\n invalid_elements: 'strong,em',\n fontsize_formats: \"7pt 8pt 9pt 10pt 11pt 12pt 13pt 14pt 15pt 16pt 18pt 20pt 22pt 24pt 25pt 28pt 30pt 36pt 40pt 48pt 60pt\",\n // fontsize_formats: \"7px 8px 9px 10px 11px 12px 13px 14px 15px 16px 18px 20px 22px 24px 25px 28px 30px 36px \",\n // font_formats: 'Arial=Arial;Cambria=Cambria;Courier New=Courier New;Segoe Script=Segoe Script;Tahoma=Tahoma;Verdana=Verdana',\n // body_class: 'custom_tinymce_content',\n paste_as_text: true,\n plugins: 'paste textcolor colorpicker',\n //toolbar: \"bold underline italic | fontsizeselect forecolor | alignleft aligncenter alignright alignjustify | bullist numlist\",\n toolbar: \"bold underline italic | fontsizeselect forecolor | bullist numlist\",\n menubar: false,\n forced_root_block: 'div',\n /*forced_root_block_attrs: {\n 'style': 'font-family: ' + font_family + '; font-size: ' + font_size\n\n }*/\n };\n\n\n $scope.readFile = function (event) {\n $log.debug(\"En readFile\");\n element.error = false;\n let files = event.target.files;\n let typeFile = \"\";\n if (element.type == \"image\") {\n typeFile = \"image\";\n }\n Restangular.all(\"FilesTypesWhitelist\").customGET(\"GetTotalSizeAllowed\", { entity: \"documents_config\" }).then(function (result) {\n if (result.filter(e => e.type === files[0].type).length <= 0) {\n var typeAllowed = result.map(o => o.type).join(', ');\n modalService.message({\n title: \"Error\",\n message: $filter('translate')('general.type_file_not_allowed') + \"
\" + typeAllowed,\n onAccept: function () { }\n });\n } else {\n var maxSizeAllowed = result.find(e => e.type === files[0].type).maxsize;\n var sizeFileMB = files[0].size / 1024;\n if (sizeFileMB > 0) {\n //Comprobamos que no pase del tamaño limite de imagen\n if (sizeFileMB > maxSizeAllowed) {\n modalService.message({\n title: \"Error\",\n message: $filter('translate')('general.image_size_limit') + \"
\" + maxSizeAllowed + \" Kb\",\n onAccept: function () { }\n });\n } else {\n let fileReader = new FileReader();\n $scope.data.values = [];\n fileReader.addEventListener(\"load\", function (e) {\n LanguagesService.languages().then(function (languages) {\n angular.forEach(languages, function (language, idx) {\n $scope.data.values.push({\n language_id: language.id,\n value: e.target.result\n })\n });\n });\n });\n fileReader.readAsDataURL(files[0]);\n }\n }\n }\n })\n\n };\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n $scope.save = function () {\n if (!element.error) {\n $uibModalInstance.close($scope.data);\n }\n \n };\n }],\n resolve: {\n element: function () {\n return element;\n }\n }\n\n });\n $modalInstance.result.then(function (data) {\n angular.forEach($scope.parameters, function (parameter) {\n if (parameter.name == element.expression) {\n parameter.values = data.values;\n angular.forEach(data.values, function(param) {\n if(param.language_id == $rootScope.languageId) {\n if (element.type == \"image\") {\n if (param.value != \"\") element.image_style = \"background-image: url('\" + param.value + \"') !important;\"; // background-size: contain !important;\";\n } else {\n element.text = $sce.trustAsHtml(param.value);\n }\n }\n });\n }\n });\n });\n }\n };\n\n $scope.onClearImages = function () {\n //Eliminamos las imagenes para que pueda cargar otras o dejarlo vacio\n let options = {\n entity_type: entity_type,\n document_id: $scope.document.id,\n entity_type_id: entity_type_id\n };\n $scope.jasper_parameters.values = null;\n \n Restangular.all(\"DocumentsConfig\").getList(options).then(function (parameters) {\n Restangular.all('Documents').customPOST({}, 'DeleteImagesPreviews', options).then(function (result) {\n angular.forEach(parameters, function (parameter) {\n angular.forEach($scope.parameters, function (scopeParameter) {\n if (scopeParameter.name == parameter.name) {\n //scopeParameter.value = parameter.value;\n angular.forEach($scope.elements, function (e) {\n angular.forEach(e.elements, function (element) {\n if (element.expression == parameter.name) {\n element.values = parameter.values;\n angular.forEach(parameter.values, function (param) {\n if (param.language_id == $rootScope.languageId) {\n if (element.type == \"image\") {\n if (param.value != \"\") element.image_style = \"background-image: url('/assets/img/no-image.png') !important;\";\n } else {\n element.text = $sce.trustAsHtml(null);\n element.values = [];\n }\n }\n });\n }\n });\n });\n }\n });\n });\n });\n });\n\n };\n\n\n }\n ]);\n","\nimport BreadcrumbView from \"../common/breadcrumb/breadcrumb.html\";\nimport ReportsPreviewView from \"./reports-preview.html\";\n\nangular.module(\"reports\", [])\n\n .config(['$stateProvider' ,function ($stateProvider) {\n $stateProvider\n .state('reports', {\n url: \"/reports\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n data: { pageTitle: \"Informes\" }\n })\n .state('reports.preview', {\n url: \"/preview\",\n controller: \"ReportsPreviewCtrl\",\n template: ReportsPreviewView,\n data: { pageTitle: \"Previsualización\" }\n }) \n ;\n }])\n;","import './resume_reports';\nimport './resume_reports-list'; ","angular.module(\"resume_reports\")\n\n .controller(\"ResumeReportsCtrl\", ['$scope', '$rootScope', '$controller', '$state', 'Restangular', '$uibModal', 'modalService', '$filter','gridService','$q','treeService', '$log',\n function ($scope, $rootScope, $controller, $state, Restangular, $uibModal, modalService, $filter, gridService, $q, treeService, $log) {\n\n $rootScope.title = $filter('translate')('resume_report.title');\n\n $scope.resume_report = {\n person: {},\n event: {} \n\n };\n $scope.showResumeReport = false;\n\n Restangular.all('Persons/AllPersons').getList().then(function (persons) {\n $scope.selectPersons = persons;\n $scope.selectPersons.unshift({\n id: null,\n name: $filter('translate')('resume_report.all')\n });\n $scope.resume_report.person = $scope.selectPersons[0];\n });\n\n /*Restangular.all('Events').getList({ is_template: false }).then(function (events) {\n $scope.selectEvents = events;\n $scope.selectEvents.unshift({\n id: null,\n name: $filter('translate')('resume_report.all')\n });\n $scope.resume_report.event = $scope.selectEvents[0];\n });*/\n var options = {\n searchName: \"\",\n is_template: false\n };\n Restangular.all('Events/AllEvents').getList(options).then(function (events) {\n $scope.selectEvents = events;\n $scope.selectEvents.unshift({\n id: null,\n name: $filter('translate')('resume_report.all')\n });\n $scope.resume_report.event = $scope.selectEvents[0];\n });\n\n $rootScope.$on('rowExpandedStateChanged', function (e) {\n $log.debug(\"aaa\", e);\n });\n \n\n $scope.generateReport = function () {\n\n $scope.showResumeReport = true;\n\n if (angular.isDefined($scope.gridOptionsResume)) {\n $scope.gridOptionsResume.loadData(false);\n } else {\n $scope.gridOptionsResume = {\n exporterMenuCsv: true,\n enableGridMenu: true,\n enableHiding: false,\n gridMenuShowHideColumns: true,\n showTreeExpandNoChildren: false,\n paginationPageSizes: [3, 10, 25],\n paginationPageSize: 3,\n onRegisterApi: function (gridApi) { \n this.gridApi = gridApi;\n },\n pdfTitle: $filter('translate')('resume_reports.pdf_title'),\n columnDefs: [\n { name: 'event_name', field: 'event_name', displayName: $filter('translate')('events.resume.event'), enableGridMenu: false },\n { name: 'name', width: 150, field: 'name', displayName: $filter('translate')('events.resume.name'), enableGridMenu: false },\n { name: 'surname', width: 150, field: 'surname', displayName: $filter('translate')('events.resume.surname'), enableGridMenu: false },\n { name: 'lastname', width: 150, field: 'lastname', displayName: $filter('translate')('events.resume.lastname'), enableGridMenu: false },\n { name: 'dni', width: 100, field: 'dni', displayName: $filter('translate')('events.resumen.dni'), enableGridMenu: false },\n // { name: 'total_time', field: 'seconds', displayName: $filter('translate')('event.resumen.total_time'), enableGridMenu: false },\n /*{\n name: 'infoMonitoring', width: 550, field: 'infoMonitoring',\n displayName: $filter('translate')('events.resume.monitoring'), enableGridMenu: false,\n cellTemplate: '
'\n , customFormatFn: function (value) {\n $log.debug(value.replace(/
/g, \"\\n\"));\n if (value != null) {\n return value.replace(/
/g, \"\\n\");\n }\n return \"\";\n },\n },*/\n \n ],\n getData: function (options) {\n $log.debug(options);\n var deferred = $q.defer();\n options.person_id = $scope.resume_report.person.id;\n options.event_id = $scope.resume_report.event.id;\n\n Restangular.all('Reports/Resume').getList(options).then(function (results) {\n $log.debug(results);\n var data = treeService.resume_report(results);\n\n data.totalRows = results.totalRows;\n $log.debug(data);\n deferred.resolve(data);\n }, function (response) {\n alert(response.message);\n deferred.reject(response);\n });\n return deferred.promise;\n \n // return Restangular.all('Reports/Resume').getList(options);\n }\n\n };\n }\n }\n\n }])\n\n;","\nimport BreadcrumbView from \"../../common/breadcrumb/breadcrumb.html\";\nimport ResumeReportsListView from \"./resume_reports-list.html\";\n\nangular.module(\"resume_reports\", [])\n\n .config(['$stateProvider' ,function ($stateProvider) {\n $stateProvider\n .state('resume_reports', {\n url: \"/resume_reports\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n data: { pageTitle: \"Seguimiento\" }\n })\n .state('resume_reports.list', {\n url: \"/list\",\n controller: \"ResumeReportsCtrl\",\n template: ResumeReportsListView,\n data: { pageTitle: \"Seguimiento\" }\n }) \n ;\n }])\n;","import './tasks_reports';\nimport './tasks_reports-list'; ","angular.module(\"tasks_reports\")\n\n .controller(\"TasksReportsCtrl\", ['$scope', '$rootScope', '$controller', '$state', 'Restangular', '$uibModal', 'modalService', '$filter',\n function ($scope, $rootScope, $controller, $state, Restangular, $uibModal, modalService, $filter) {\n\n $rootScope.title = $filter('translate')('tasks_reports.title');\n\n $scope.task_report = {\n user: {},\n event: {},\n task_status: [],\n late: false\n\n };\n $scope.showTasksReport = false;\n\n\n Restangular.all('Users').getList().then(function (persons) {\n $scope.selectPersons = persons;\n $scope.selectPersons.unshift({\n id: null,\n name: $filter('translate')('tasks_reports.all')\n });\n $scope.task_report.user = $scope.selectPersons[0];\n });\n\n /*Restangular.all('Events').getList({ is_template: false }).then(function (events) {\n $scope.selectEvents = events;\n $scope.selectEvents.unshift({\n id: null,\n name: $filter('translate')('tasks_reports.all')\n });\n $scope.task_report.event = $scope.selectEvents[0];\n });*/\n var options = {\n searchName: \"\",\n is_template: false\n };\n Restangular.all('Events/AllEvents').getList(options).then(function (events) {\n $scope.selectEvents = events;\n $scope.selectEvents.unshift({\n id: null,\n name: $filter('translate')('tasks_reports.all')\n });\n $scope.task_report.event = $scope.selectEvents[0];\n });\n\n Restangular.all('TasksStatus').getList({ entity_type: \"events\" }).then(function (status) {\n $scope.selectStatus = status;\n });\n\n $scope.generateReport = function () {\n\n $scope.showTasksReport = true;\n\n if (angular.isDefined($scope.gridOptionsTasks)) {\n $scope.gridOptionsTasks.loadData(false);\n } else {\n $scope.gridOptionsTasks = {\n exporterMenuCsv: true,\n enableGridMenu: true,\n enableHiding: false,\n gridMenuShowHideColumns: true,\n paginationPageSizes: [5, 10, 25],\n paginationPageSize: 15,\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n pdfTitle: $filter('translate')('tasks_reports.pdf_title'),\n getFilterExternalDescription: function () {\n var externalFilters = \"\";\n if (angular.isDefined($scope.task_report.user) && $scope.task_report.user.id != null)\n externalFilters += $filter('translate')('tasks_reports.person') + \": \" + $scope.task_report.user.name + \"\\n\";\n if (angular.isDefined($scope.task_report.event) && $scope.task_report.event.id != null)\n externalFilters += $filter('translate')('tasks_reports.event') + \": \" + $scope.task_report.event.name + \"\\n\";\n if ($scope.task_report.task_status.length > 0) {\n externalFilters += $filter('translate')('tasks_reports.status') + \": \";\n angular.forEach($scope.task_report.task_status, function (status, idx) {\n externalFilters += status.name + \", \";\n });\n externalFilters = externalFilters.substring(0, externalFilters.length - 2) + \"\\n\";\n }\n if (angular.isDefined($scope.task_report.task_status) && $scope.task_report.task_status.id != null)\n externalFilters += $filter('translate')('tasks_reports.status') + \": \" + $scope.task_report.task_status.name + \"\\n\";\n\n if ($scope.task_report.late)\n externalFilters += $filter('translate')('tasks_reports.show_only_late') + \"\\n\";\n if ($scope.task_report.date_from != null && $scope.task_report.date_from != \"\") {\n var fecha = $scope.task_report.date_from;\n externalFilters += \"\\n\" + $filter('translate')('tasks_reports.date_from') + \": \" + fecha.getDate() + \"/\" + fecha.getMonth() + \"/\" + fecha.getFullYear() + \" \" + fecha.getHours() + \":\" + fecha.getMinutes();\n }\n if ($scope.task_report.date_to != null && $scope.task_report.date_to != \"\") {\n var fecha = $scope.task_report.date_to;\n externalFilters += \"\\n\" + $filter('translate')('tasks_reports.date_to') + \": \" + fecha.getDate() + \"/\" + fecha.getMonth() + \"/\" + fecha.getFullYear() + \" \" + fecha.getHours() + \":\" + fecha.getMinutes();\n }\n\n return externalFilters;\n },\n columnDefs: [\n {\n name: 'date_from', displayName: $filter('translate')('tasks_reports.date_from'), type: 'date', cellFilter: ' toLocalDate |date:\\'dd/MM/yyyy HH:mm\\'',\n enableFiltering: false,\n customFormatFn: function (value) {\n if (value != null) {\n var fecha = new Date(value);\n return $filter('date')(fecha, 'dd/MM/yyyy HH:mm');\n }\n return \"\";\n },\n },\n {\n name: 'date_to', displayName: $filter('translate')('tasks_reports.date_to'), type: 'date', cellFilter: ' toLocalDate |date:\\'dd/MM/yyyy HH:mm\\'',\n enableFiltering: false,\n customFormatFn: function (value) {\n if (value != null) {\n var fecha = new Date(value);\n return $filter('date')(fecha, 'dd/MM/yyyy HH:mm');\n }\n return \"\";\n },\n },\n { name: 'title', displayName: $filter('translate')('tasks_reports.task'), enableHiding: false, enableGridMenu: false },\n {\n name: 'user_name', field: 'FK_events_tasks_users_events_tasks', displayName: $filter('translate')('tasks_reports.persons'), enableFiltering: false, suppressRemoveSort: true, enableSorting: false,\n cellTemplate: '
{{row.entity.FK_events_tasks_users_events_tasks | getNames}}
',\n customFormatFn: function (value) {\n return $filter('getNames')(value);\n },\n },\n { name: 'event_name', field: 'FK_events_tasks_events.name', displayName: $filter('translate')('tasks_reports.event'), enableGridMenu: false },\n {\n name: 'task_status', field: 'FK_events_tasks_tasks_status.name', displayName: $filter('translate')('tasks_reports.status'), enableGridMenu: false, enableSorting: false,\n cellTemplate: '
' +\n '
' +\n '
' +\n '
' +\n '
' +\n '
', \n },\n { name: 'task_type', field: 'FK_events_tasks_tasks_types.name', displayName: $filter('translate')('tasks_reports.task_type'), enableGridMenu: false }\n ],\n getData: function (options) {\n options.user_id = $scope.task_report.user.id;\n options.event_id = $scope.task_report.event.id;\n options.task_status_list = [];\n angular.forEach($scope.task_report.task_status, function (status, idx) {\n options.task_status_list.push(status.id);\n });\n options.date_from = $scope.task_report.date_from;\n options.date_to = $scope.task_report.date_to;\n options.late = $scope.task_report.late;\n return Restangular.all('Reports/Tasks').getList(options);\n }\n\n };\n }\n }\n\n }])\n.filter('getNames', function () {\n return function (items) {\n return items && items.map(function (item) {\n return item.users.name;\n }).join(', ');\n }\n})\n\n;","\nimport BreadcrumbView from \"../../common/breadcrumb/breadcrumb.html\";\nimport TasksReportsListView from \"./tasks_reports-list.html\";\n\nangular.module(\"tasks_reports\", [])\n\n .config(['$stateProvider' ,function ($stateProvider) {\n $stateProvider\n .state('tasks_reports', {\n url: \"/tasks_reports\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n data: { pageTitle: \"Informes de Tareas\" }\n })\n .state('tasks_reports.list', {\n url: \"/list\",\n controller: \"TasksReportsCtrl\",\n template: TasksReportsListView,\n data: { pageTitle: \"Informes de Tareas\" }\n }) \n ;\n }])\n;","import './restaurants';\nimport './restaurants-list';\nimport './restaurants-edit'; ","angular.module(\"restaurants\")\n\n .controller(\"RestaurantsEditCtrl\", ['LoginService', '$scope', '$rootScope', '$controller', '$state', '$stateParams', 'Restangular', '$uibModal', 'modalService', '$compile', 'gridService', '$filter', '$translate', '$q', '$http',\n function (LoginService, $scope, $rootScope, $controller, $state, $stateParams, Restangular, $uibModal, modalService, $compile, gridService, $filter, $translate, $q, $http) {\n\n $scope.callbackFn = null;\n $scope.callback = function (callbackFn) {\n $scope.callbackFn = callbackFn;\n };\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"RESTAURANTS_WRITE\");\n $scope.allowFoldersFiles = LoginService.permissionExist(\"FILES_READ\");\n $rootScope.title = $filter('translate')('restaurants.title');\n\n\n Restangular.all('Countries').getList().then(function (countries) {\n\n $scope.selectCountries = countries; \n });\n\n if (angular.isUndefined($stateParams.id) || $stateParams.id == \"\") {\n \n $rootScope.breadcrumb = [\n { title: $filter('translate')('restaurants.title'), url: \"restaurants.list\" },\n { title: $filter('translate')('restaurants.button_add') }\n ];\n $scope.restaurant = {};\n\n } else {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('restaurants.title'), url: \"restaurants.list\" },\n { title: $filter('translate')('restaurants.button_edit'), url: \"restaurants.edit({ id: \" + $stateParams.id + \" })\" },\n ];\n\n Restangular.one('Restaurants', $stateParams.id).get().then(function (results) {\n $scope.restaurant = results;\n });\n\n $scope.dateEventRestaurant = {};\n $scope.menusGrid = false;\n // Menus ofrecidos\n $scope.gridMenusOffered = {\n pdfTitle: $filter('translate')('restaurants.menus_offered'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n enableSorting: true,\n paginationPageSizes: [20, 40, 60],\n paginationPageSize: 20,\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n { name: 'event_name', displayName: $filter('translate')('restaurants.event_name'), enableFiltering: true, enableHiding: false },\n { name: 'program_act_name', displayName: $filter('translate')('restaurants.program_act_name'), enableFiltering: true, enableHiding: false, cellTemplate: '
' },\n {\n name: 'date', displayName: $filter('translate')('restaurants.date'), type: 'date', cellFilter: 'date:\\'dd/MM/yyyy HH:mm\\'',\n filterHeaderTemplate: '
' +\n 'Desde
' +\n 'Hasta ' +\n '
',\n\n enableFiltering: true, enableColumnMenu: false\n },\n { name: 'menu_name', displayName: $filter('translate')('restaurants.name_menu'), enableFiltering: true, enableHiding: false }, \n ],\n getData: function (options) {\n \n var deferred = $q.defer();\n options.restaurant_id = $stateParams.id;\n if (!!$scope.dateEventRestaurant.dateFrom) options.date_from = $scope.dateEventRestaurant.dateFrom;\n if (!!$scope.dateEventRestaurant.dateTo) options.date_to = $scope.dateEventRestaurant.dateTo;\n\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + 'Restaurants/MenusOffered',\n params: options\n }).then(function (results, status, headers, config) {\n var data = results.data.rows;\n data.totalRows = results.data.totalRows;\n\n if (data.totalRows > 0) $scope.showgridMenusOffered = true;\n $scope.totalRows = results.data.totalRows;\n deferred.resolve(data);\n });\n return deferred.promise;\n }\n };\n } \n \n $scope.save = function (frmRestaurant) {\n \n if (!angular.isUndefined($scope.restaurant.id)) {\n $scope.restaurant.put().then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('restaurants.edit_success'));\n if ($scope.callbackFn != null) {\n $scope.callbackFn(result);\n } else {\n $state.go(\"restaurants.list\");\n }\n } else {\n $scope.errorMessage = result.message;\n }\n });\n } else {\n Restangular.all('Restaurants').post($scope.restaurant).then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('restaurants.create_success'));\n if ($scope.callbackFn != null) {\n $scope.callbackFn(result);\n } else {\n $state.go(\"restaurants.edit\", { id: result.id, is_template: false });\n }\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n }\n\n $scope.onCancel = function () {\n if ($scope.callbackFn != null) {\n $scope.callbackFn(null);\n } else {\n $state.go(\"restaurants.list\");\n }\n };\n\n $scope.checkDelete = function () {\n modalService.confirm({\n title: $filter('translate')('restaurants.button_delete'),\n message: $filter('translate')('restaurants.delete_message') +\" \"+ $scope.restaurant.name + \"?\",\n onAccept: function () {\n $scope.restaurant.remove().then(function () {\n toastr.success($filter('translate')('restaurants.delete_success'));\n $state.go(\"restaurants.list\");\n });\n }\n });\n };\n \n\n}])\n\n;\n\n","angular.module(\"restaurants\")\n\n .controller(\"RestaurantsListCtrl\", ['LoginService', '$rootScope', '$scope', '$http', '$interval', '$q', 'i18nService', 'Restangular', 'gridService', 'modalService', '$uibModal', '$filter', '$translate', '$state', 'datasetsService', function (LoginService, $rootScope, $scope, $http, $interval, $q, i18nService, Restangular, gridService, modalService, $uibModal, $filter, $translate, $state, datasetsService) {\n \n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"RESTAURANTS_WRITE\");\n $rootScope.title = $filter('translate')('restaurants.title'); \n $rootScope.breadcrumb = [\n { title: $filter('translate')('restaurants.title') }\n ];\n\n $scope.gridOptionsRestaurants = {\n pdfTitle: $filter('translate')('restaurants.title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n enableSorting: true, \n paginationPageSizes: [20, 40, 60],\n paginationPageSize: 20,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n { name: 'name', displayName: $filter('translate')('restaurants.name'), enableFiltering: true, enableHiding: false },\n { name: 'country_name', field: 'FK_restaurants_countries.name', displayName: $filter('translate')('restaurants.country'), enableFiltering: true, enableHiding: false },\n { name: 'state', displayName: $filter('translate')('restaurants.state'), enableFiltering: true, enableHiding: false },\n { name: 'city', displayName: $filter('translate')('restaurants.city'), enableFiltering: true, enableHiding: false },\n { name: 'phone_1', displayName: $filter('translate')('restaurants.phone'), enableFiltering: true, enableHiding: false },\n { name: 'email', displayName: $filter('translate')('restaurants.email'), enableFiltering: true, enableHiding: false },\n { name: 'address_line_1', displayName: $filter('translate')('restaurants.address'), enableFiltering: true, enableHiding: false },\n {\n name: 'has_private_room', field: 'has_private_room', displayName: $filter('translate')('restaurants.private_room'),\n filter: gridService.yesNoFilter('has_private_room'), width: 100, enableFiltering: true,\n cellTemplate: gridService.yesNoTemplate('has_private_room')\n },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('restaurants.button_edit'), action: 'ui-sref=\"restaurants.edit({id:row.entity.id})\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('restaurants.button_delete'), action: 'ng-click=\"grid.appScope.deleteDialog(row.entity.id,row.entity.name);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) { \n return Restangular.all('Restaurants').getList(options) \n }\n };\n\n $scope.goToEdit = function (rowEntity) {\n $state.go(\"restaurants.edit\", { id: rowEntity.id });\n }\n\n\n $scope.deleteDialog = function (id, name) {\n $scope.id = id;\n $scope.name = name;\n modalService.confirm({\n title: $filter('translate')('restaurants.button_delete'),\n message: $filter('translate')('restaurants.delete_message') +\" \"+ $scope.name + \"?\",\n onAccept: function () {\n Restangular.one('Restaurants', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('restaurants.delete_success'));\n $scope.gridOptionsRestaurants.gridApi.core.raise.itemDeleted($scope);\n \n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n });\n\n };\n\n $scope.export = function () {\n var options = {\n filters: {\n }\n };\n\n datasetsService.exportByType(\"restaurants\", options);\n };\n \n }])\n\n;","\nimport BreadcrumbView from \"../common/breadcrumb/breadcrumb.html\";\nimport RestaurantsListView from \"./restaurants-list.html\";\nimport RestaurantsEditView from \"./restaurants-edit.html\";\nimport FoldersListView from \"../folders/folders-list.html\";\n\nangular.module(\"restaurants\", [])\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('restaurants', {\n url: \"/restaurants\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView\n })\n\n .state('restaurants.list', {\n url: \"/list\",\n controller: \"RestaurantsListCtrl\",\n template: RestaurantsListView,\n requiredPermission: [\"RESTAURANTS_READ\"]\n }) \n .state('restaurants.edit', {\n url: \"/edit/:id\",\n views: {\n '': {\n controller: \"RestaurantsEditCtrl\",\n template: RestaurantsEditView\n },\n 'foldersFiles@restaurants.edit': {\n controller: \"FoldersListCtrl\",\n template: FoldersListView,\n resolve: {\n entity_type: [function () { return \"restaurants\"; }],\n entity_type_id: ['$stateParams', function ($stateParams) {\n if (angular.isDefined($stateParams.id) && $stateParams.id != \"\") {\n return $stateParams.id;\n }\n return null;\n }],\n is_public: [function () { return false; }]\n }\n }\n },\n requiredPermission: [\"RESTAURANTS_READ\"]\n });\n }])\n;","import './rgpd';\nimport './rgpd-list'; \nimport './rgpd-edit';","\nimport NotificationsModalMailInfoView from \"../notifications/NotificationsModalMailInfo.html\";\n\nangular.module(\"rgpd\")\n\n .controller(\"NotificationsByPersonEditModalCtrl\", ['$stateParams', 'notificationId', '$scope', '$uibModalInstance', '$uibModal', 'Restangular', '$filter', '$log', function ($stateParams,notificationId, $scope, $uibModalInstance, $uibModal, Restangular, $filter, $log) {\n \n $scope.showData = 'showInfo';\n $scope.sent = 0;\n $scope.sending = 0;\n $scope.error = 0;\n $scope.eventId = null;\n if (typeof ($stateParams.id) !== 'undefined') {\n $scope.eventId = $stateParams.id;\n }\n\n Restangular.one('NotificationsEmails', notificationId).get().then(function (results) {\n $log.debug(results);\n $scope.notification = results;\n $scope.notification.content = (window as any).CONFIG.api_url + \"NotificationsAttachment/GetContentHTML?id=\" + $scope.notification.id;\n \n _.each($scope.notification.FK_notifications_attachments_notifications_emails, function (attachment) {\n attachment.downloadUrl = (window as any).CONFIG.api_url + 'NotificationsAttachment/getFile?uid=' + attachment.uid + '&filename=' + attachment.name\n });\n /*if ($scope.notification.program_template != null) {\n //Tiene programa, poner para que lo pueda descargar.\n if ($scope.notification.event_id != null) {\n $log.debug(\"Entra en: \" + $scope.notification.program_template, $scope.notification.event_id);\n\n Restangular.all('EventProgram').getList({ event_id: $scope.notification.event_id }).then(function (eventProgram) {\n $log.debug(eventProgram);\n if (eventProgram.length > 0) {\n $scope.eventProgramInformation = eventProgram[0];\n $log.debug(CONFIG.api_url + 'EventProgram/getFile?uid=' + $scope.eventProgramInformation.file_uid + '&filename=' + $scope.eventProgramInformation.filename);\n $scope.showFile = $scope.eventProgramInformation.filename != null;\n }\n });\n //window.open(CONFIG.api_url + 'EventProgram/getFile?uid=' + $scope.eventProgramInformation.file_uid + '&filename=' + $scope.eventProgramInformation.filename, '_blank', '');\n }\n }*/\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n \n $scope.goToEdit = function (rowEntity) {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: NotificationsModalMailInfoView,\n controller: 'NotificationsModalMailInfoCtrl',\n size: 'lg',\n resolve: {\n id: function () { return rowEntity.id; }\n }\n });\n\n $modalInstance.result.then(function (bool) {\n toastr.success($filter('translate')('notifications.sending_mail_success'));\n $scope.gridOptionNotifications.gridApi.core.raise.itemDeleted($scope);\n });\n }\n\n \n\n $scope.downloadFile = function (attachment) {\n window.open(attachment.downloadUrl, '_blank', '');\n }\n\n $scope.downloadFiles = function () {\n _.each($scope.notification.FK_notifications_attachments_notifications_emails, function (attachment) {\n window.open(attachment.downloadUrl, '_blank', '');\n });\n }\n\n $scope.addFile = function (flowFile) {\n var fileReader = new FileReader();\n fileReader.onload = function (event) {\n var uri = event.target.result;\n $scope.$apply(function () {\n $scope.company.logo = uri;\n });\n };\n fileReader.readAsDataURL(flowFile.file);\n };\n\n\n $scope.setActive = function (data) {\n $log.debug(data);\n $scope.showData = data;\n $log.debug($scope.showData);\n }\n \n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n }])\n\n\n .controller('NotificationsModalMailInfoCtrl', ['$scope', '$uibModalInstance', '$http', 'Restangular', '$filter', 'id', function ($scope, $uibModalInstance, $http, Restangular, $filter, id) {\n \n Restangular.one('NotificationsTo', id).get().then(function (result) {\n $scope.notificationsEmailInfo = result;\n });\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n }])\n\n;","angular.module(\"rgpd\")\n\n .controller('RgpdListCtrl', ['$stateParams', '$rootScope', '$scope', 'Restangular', 'gridService', 'modalService', 'uiGridConstants', '$filter', 'LoginService', '$state', '$uibModal', '$log', function ($stateParams, $rootScope, $scope, Restangular, gridService, modalService, uiGridConstants, $filter, LoginService, $state, $uibModal, $log) {\n\n Restangular.all('Persons/AllPersons').getList().then(function (persons) {\n $log.debug(persons);\n $scope.selectPersons = persons;\n $scope.selectPersons.unshift({\n id: null,\n name: $filter('translate')('informations.all')\n });\n }); \n $scope.allowWrite = LoginService.permissionExist(\"RGPD\");\n $rootScope.title = $filter('translate')('rgpd.title');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('rgpd.list') }\n ];\n\n $scope.search = {\n email: \"\",\n date_from: null,\n date_to: null,\n };\n\n $scope.gridOption = {\n pdfTitle: $filter('translate')('rgpd.pdf_title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n paginationPageSizes: [10, 20, 30],\n paginationPageSize: 10,\n enableFiltering: false,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n {\n name: 'date', displayName: $filter('translate')('rgpd.date'), maxWidth: 125, minWidth: 80,\n type: 'date', cellFilter: 'toLocalDate | date:\\'dd/MM/yyyy HH:mm\\'',\n customFormatFn: function (value) {\n if (value !== null) {\n var fecha = new Date(value);\n return $filter('date')(fecha, 'dd/MM/yyyy HH:mm');\n }\n return \"\";\n }, enableFiltering: false, enableColumnMenu: false\n },\n {\n name: 'date_end', displayName: $filter('translate')('rgpd.date_end'), maxWidth: 125, minWidth: 80,\n type: 'date', cellFilter: 'toLocalDate | date:\\'dd/MM/yyyy HH:mm\\'',\n customFormatFn: function (value) {\n if (value !== null) {\n var fecha = new Date(value);\n return $filter('date')(fecha, 'dd/MM/yyyy HH:mm');\n }\n return \"\";\n },enableFiltering: false, enableColumnMenu: false\n },\n { name: 'email', displayName: $filter('translate')('rgpd.email'), enableFiltering: false, enableHiding: false, enableColumnMenu: false },\n {\n name: 'FK_RGPD_persons.name',\n displayName: $filter('translate')('rgpd.person'), enableFiltering: false, enableHiding: false, enableColumnMenu: false,\n customFormatFn: function (value) {\n $log.debug(value);\n return value;\n }, cellTemplate: '
{{row.entity.FK_RGPD_persons.name}} {{row.entity.FK_RGPD_persons.surname}} {{row.entity.FK_RGPD_persons.lastname}}
'\n },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('rgpd.cancel_unsubscribe'), action: 'ng-click=\"grid.appScope.cancelUnsubscribe(row.entity);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n options.email = $scope.search.email;\n options.date_from = $scope.search.date_from;\n options.date_to = $scope.search.date_to;\n options.person_id = $scope.search.person_id;\n return Restangular.all('rgpd').getList(options);\n }\n };\n\n $scope.cancelUnsubscribe = function (entity) {\n modalService.confirm({\n title: $filter('translate')('rgpd.cancel_unsubscribe_title'),\n message: $filter('translate')('rgpd.cancel_unsubscribe_message') + \" \" + $scope.email + \"?\",\n onAccept: function () {\n entity.date_end = new Date();\n entity.put().then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('rgpd.cancel_unsubscribe_success'));\n $scope.gridOption.loadData();\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n });\n\n };\n\n }])\n\n;","\nimport BreadcrumbView from \"../common/breadcrumb/breadcrumb.html\";\nimport RgpdListView from \"./rgpd-list.html\";\n\nangular.module(\"rgpd\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('rgpd', {\n url: \"/rgpd\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n })\n .state('rgpd.list', {\n url: \"/list\",\n controller: \"RgpdListCtrl\",\n template: RgpdListView,\n cache: false,\n data: { pageTitle: 'RGPD' },\n requiredPermission: [\"RGPD\"]\n })\n ;\n }])\n;","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { FormsModule } from '@angular/forms';\nimport { ButtonModule } from 'primeng/button';\n\n@NgModule({\n imports: [\n CommonModule, FormsModule, ReactiveFormsModule, ButtonModule\n ],\n exports: [\n CommonModule, FormsModule, ReactiveFormsModule, ButtonModule\n ]\n})\nexport class SharedModule { }\n","import './spaces';\nimport './spaces-list';\nimport './spaces-edit'; ","import toastr from \"toastr\";\n\nimport SpacesConfigureView from \"./spaces-configure.html\";\n\nangular.module(\"spaces\")\n\n .controller(\"SpacesEditCtrl\", ['$scope', '$rootScope', '$controller', '$state', '$stateParams', 'Restangular', '$uibModal', 'modalService', '$compile', 'gridService', '$filter', '$translate', '$log',\n function ($scope, $rootScope, $controller, $state, $stateParams, Restangular, $uibModal, modalService, $compile, gridService, $filter, $translate, $log) {\n \n $rootScope.title = $filter('translate')('spaces.title');\n\n $scope.space_id = $stateParams.id;\n\n if (angular.isUndefined($stateParams.id) || $stateParams.id == \"\") {\n \n $rootScope.breadcrumb = [\n { title: $filter('translate')('spaces.title'), url: \"spaces.list\" },\n { title: $filter('translate')('spaces.title_add'), url: \"spaces.edit({ id: \" + $stateParams.id + \" })\" },\n ];\n $scope.space = {};\n } else {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('spaces.title'), url: \"spaces.list\" },\n { title: $filter('translate')('spaces.title_edit'), url: \"spaces.edit({ id: \" + $stateParams.id + \" })\" },\n ];\n\n Restangular.one('Spaces', $stateParams.id).get().then(function (results) {\n $scope.space = results;\n $scope.space.configuration = JSON.parse($scope.space.configuration);\n });\n } \n \n $scope.save = function (frmSpaces) {\n $scope.space.configuration = JSON.stringify($scope.space.configuration);\n if (!angular.isUndefined($scope.id)) {\n $scope.space.put().then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('spaces.edit_success'));\n $state.go(\"spaces.list\");\n } else {\n $scope.errorMessage = result.message;\n }\n });\n } else {\n Restangular.all('Spaces').post($scope.space).then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('spaces.create_success'));\n $state.go(\"spaces.list\");\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n }\n\n $scope.checkDelete = function () {\n modalService.confirm({\n title: $filter('translate')('spaces.delete'),\n message: $filter('translate')('spaces.delete_message')+\" \"+ $scope.space.name + \"?\",\n onAccept: function () {\n $scope.space.remove().then(function () {\n toastr.success($filter('translate')('spaces.delete_success'));\n $state.go(\"spaces.list\");\n });\n }\n });\n };\n\n $scope.configureSpace = function () {\n $(\"body\").scrollTop(0)\n $(window).unbind(\"keydown\");\n var instance = $uibModal.open({\n animation: true,\n template: SpacesConfigureView,\n controller: 'SpacesConfigureCtrl',\n size: 'lg-extra',\n resolve: {\n space: function () { return $scope.space; }\n }\n });\n instance.result.then(function (spaceInfo) {\n $log.debug(spaceInfo.thumb.substring(0,50));\n $log.debug(spaceInfo.configuration);\n $scope.space.thumb = spaceInfo.thumb;\n $scope.space.configuration = spaceInfo.configuration;\n if (!$scope.$$phase) $scope.$apply();\n }, function () {\n $log.debug(\"NO save\");\n })\n };\n\n }])\n\n .controller(\"SpacesConfigureCtrl\", ['$scope', '$uibModalInstance', 'space', 'ISOEngine', '$timeout', '$filter', '$log',\n function ($scope, $uibModalInstance, space, ISOEngine, $timeout, $filter, $log) {\n\n $scope.space = space;\n\n $scope.selectedElement = null;\n\n $scope.contextMenuPosition = { x: 0, y: 0 };\n $timeout(function () {\n $($(\"div[context-menu]\")[0]).mousedown(function (e) {\n $scope.contextMenuPosition.x = e.offsetX;\n $scope.contextMenuPosition.y = e.offsetY;\n });\n });\n\n $scope.menuOptions =[\n ['Añadir elemento', function ($itemScope) {\n //nothing\n }, [\n ['Mesas', function ($itemScope, $event) {\n //nada\n }, [\n ['Mesa rectangular izquierda (12)', function ($itemScope, $event) {\n let element = ISOEngine.addElement({\n type: \"table\",\n url: \"Content/iso/tables/table-rect-12-left.png\",\n x: $scope.contextMenuPosition.x + \"px\",\n y: $scope.contextMenuPosition.y + \"px\",\n w: 210,\n h: 124,\n\n scale: 1.0,\n zoneNumberPosition: { \"x\": 151, \"y\": -20},\n locations: [\n { \"x\": 13, \"y\": 69, \"number\": \"1\" },\n { \"x\": 40, \"y\": 56, \"number\": \"2\" },\n { \"x\": 67, \"y\": 43, \"number\": \"3\" },\n { \"x\": 94, \"y\": 29, \"number\": \"4\" },\n { \"x\": 119, \"y\": 16, \"number\": \"5\" },\n { \"x\": 147, \"y\": 2, \"number\": \"6\" },\n { \"x\": 36, \"y\": 79, \"number\": \"7\" },\n { \"x\": 62, \"y\": 66, \"number\": \"8\" },\n { \"x\": 88, \"y\": 53, \"number\": \"9\" },\n { \"x\": 116, \"y\": 39, \"number\": \"10\" },\n { \"x\": 142, \"y\": 26, \"number\": \"11\" },\n { \"x\": 167, \"y\": 14, \"number\": \"12\" }\n ]\n });\n $scope.selectElement(element);\n }],\n ['Mesa rectangular derecha (12)', function ($itemScope, $event) {\n let element = ISOEngine.addElement({\n type: \"table\",\n url: \"Content/iso/tables/table-rect-12-right.png\",\n x: $scope.contextMenuPosition.x + \"px\",\n y: $scope.contextMenuPosition.y + \"px\",\n w: 210,\n h: 124,\n\n scale: 1.0\n });\n $scope.selectElement(element);\n }],\n ['Mesa redonda (8)', function ($itemScope, $event) {\n let element = ISOEngine.addElement({\n type: \"table\",\n url: \"Content/iso/tables/table-circ-8.png\",\n x: $scope.contextMenuPosition.x + \"px\",\n y: $scope.contextMenuPosition.y + \"px\",\n w: 113,\n h: 77,\n\n scale: 1.0\n });\n $scope.selectElement(element);\n }]\n ]],\n ['Silla', function ($itemScope) {\n //nada\n }, [\n ['Silla 1', function ($itemScope, $event) {\n let element = ISOEngine.addElement({\n type: \"chair\",\n url: \"Content/iso/chairs/chair_ne.png\",\n x: $scope.contextMenuPosition.x + \"px\",\n y: $scope.contextMenuPosition.y + \"px\",\n w: 22,\n h: 35,\n\n scale: 1.0\n });\n $scope.selectElement(element);\n }],\n ['Silla 2', function ($itemScope, $event) {\n let element = ISOEngine.addElement({\n type: \"chair\",\n url: \"Content/iso/chairs/chair_no.png\",\n x: $scope.contextMenuPosition.x + \"px\",\n y: $scope.contextMenuPosition.y + \"px\",\n w: 22,\n h: 35,\n\n scale: 1.0\n });\n $scope.selectElement(element);\n }],\n ['Silla 3', function ($itemScope, $event) {\n let element = ISOEngine.addElement({\n type: \"chair\",\n url: \"Content/iso/chairs/chair_se.png\",\n x: $scope.contextMenuPosition.x + \"px\",\n y: $scope.contextMenuPosition.y + \"px\",\n w: 21,\n h: 39,\n\n scale: 1.0\n });\n $scope.selectElement(element);\n }],\n ['Silla 4', function ($itemScope, $event) {\n let element = ISOEngine.addElement({\n type: \"chair\",\n url: \"Content/iso/chairs/chair_so.png\",\n x: $scope.contextMenuPosition.x + \"px\",\n y: $scope.contextMenuPosition.y + \"px\",\n w: 21,\n h: 39,\n\n scale: 1.0\n });\n $scope.selectElement(element);\n }]\n ]]\n ]],\n null, //divider\n ['Plantas', function ($itemScope) {\n }, [\n ['Arboles', function ($itemScope, $event) {\n let element = ISOEngine.addElement({\n url: \"Content/iso/plants/arboles.png\",\n x: $scope.contextMenuPosition.x + \"px\",\n y: $scope.contextMenuPosition.y + \"px\",\n w: 290,\n h: 235,\n scale: 1.0\n\n });\n }],\n ['Flores 1', function ($itemScope, $event) {\n let element = ISOEngine.addElement({\n url: \"Content/iso/plants/flores.png\",\n x: $scope.contextMenuPosition.x + \"px\",\n y: $scope.contextMenuPosition.y + \"px\",\n w: 54,\n h: 51,\n scale: 1.0\n\n });\n }],\n ['Flores 2', function ($itemScope, $event) {\n let element = ISOEngine.addElement({\n url: \"Content/iso/plants/flores2.png\",\n x: $scope.contextMenuPosition.x + \"px\",\n y: $scope.contextMenuPosition.y + \"px\",\n w: 50,\n h: 45,\n scale: 1.0\n\n });\n }],\n ['Flores 3', function ($itemScope, $event) {\n let element = ISOEngine.addElement({\n url: \"Content/iso/plants/flores3.png\",\n x: $scope.contextMenuPosition.x + \"px\",\n y: $scope.contextMenuPosition.y + \"px\",\n w: 52,\n h: 45,\n scale: 1.0\n\n });\n }],\n ['Flores 4', function ($itemScope, $event) {\n let element = ISOEngine.addElement({\n url: \"Content/iso/plants/flores4.png\",\n x: $scope.contextMenuPosition.x + \"px\",\n y: $scope.contextMenuPosition.y + \"px\",\n w: 50,\n h: 36,\n scale: 1.0\n\n });\n }],\n ['Maceta', function ($itemScope, $event) {\n let element = ISOEngine.addElement({\n url: \"Content/iso/plants/maceta.png\",\n x: $scope.contextMenuPosition.x + \"px\",\n y: $scope.contextMenuPosition.y + \"px\",\n w: 42,\n h: 45,\n scale: 1.0\n\n });\n }],\n ['Palmera', function ($itemScope, $event) {\n let element = ISOEngine.addElement({\n url: \"Content/iso/plants/palmera.png\",\n x: $scope.contextMenuPosition.x + \"px\",\n y: $scope.contextMenuPosition.y + \"px\",\n w: 30,\n h: 48,\n scale: 1.0\n\n });\n }],\n ['Seto', function ($itemScope, $event) {\n let element = ISOEngine.addElement({\n url: \"Content/iso/plants/setillo.png\",\n x: $scope.contextMenuPosition.x + \"px\",\n y: $scope.contextMenuPosition.y + \"px\",\n w: 23,\n h: 49,\n scale: 1.0\n\n });\n }]\n ]],\n ['Tarimas', function ($itemScope) {\n }, [\n ['Tarima 1', function ($itemScope, $event) {\n let element = ISOEngine.addElement({\n\n url: \"Content/iso/tarima/tarima.png\",\n x: $scope.contextMenuPosition.x + \"px\",\n y: $scope.contextMenuPosition.y + \"px\",\n w: 264,\n h: 144,\n scale: 1.0\n });\n }],\n ['Tarima 2', function ($itemScope, $event) {\n let element = ISOEngine.addElement({\n url: \"Content/iso/tarima/tarima_naranja.png\",\n x: $scope.contextMenuPosition.x + \"px\",\n y: $scope.contextMenuPosition.y + \"px\",\n w: 527,\n h: 274,\n scale: 1.0\n\n });\n }]\n ]],\n ['Atriles', function ($itemScope) {\n }, [\n ['Atril SO', function ($itemScope, $event) {\n let element = ISOEngine.addElement({\n url: \"Content/iso/atriles/atril.png\",\n x: $scope.contextMenuPosition.x + \"px\",\n y: $scope.contextMenuPosition.y + \"px\",\n w: 25,\n h: 34,\n scale: 1.0\n });\n }],\n ['Atril SE', function ($itemScope, $event) {\n let element = ISOEngine.addElement({\n url: \"Content/iso/atriles/atril3.png\",\n x: $scope.contextMenuPosition.x + \"px\",\n y: $scope.contextMenuPosition.y + \"px\",\n w: 25,\n h: 34,\n scale: 1.0\n });\n }]\n ]],\n ['Otros', function ($itemScope) {\n }, [\n ['Columna interior', function ($itemScope, $event) {\n let element = ISOEngine.addElement({\n url: \"Content/iso/columnas/columna_grande.png\",\n x: $scope.contextMenuPosition.x + \"px\",\n y: $scope.contextMenuPosition.y + \"px\",\n w: 29,\n h: 186,\n scale: 1.0\n });\n }],\n ['Farola', function ($itemScope, $event) {\n let element = ISOEngine.addElement({\n url: \"Content/iso/farolas/farola_grande.png\",\n x: $scope.contextMenuPosition.x + \"px\",\n y: $scope.contextMenuPosition.y + \"px\",\n w: 41,\n h: 131,\n scale: 1.0\n });\n }]\n ]],\n ['Flechas', function ($itemScope) {\n }, [\n ['Flecha NE', function ($itemScope, $event) {\n let element = ISOEngine.addElement({\n url: \"Content/iso/flechas/flechanesuelo.png\",\n x: $scope.contextMenuPosition.x + \"px\",\n y: $scope.contextMenuPosition.y + \"px\",\n w: 63,\n h: 34,\n scale: 1.0\n });\n }],\n ['Flecha NO', function ($itemScope, $event) {\n let element = ISOEngine.addElement({\n url: \"Content/iso/flechas/flechanosuelo.png\",\n x: $scope.contextMenuPosition.x + \"px\",\n y: $scope.contextMenuPosition.y + \"px\",\n w: 63,\n h: 34,\n scale: 1.0\n });\n }],\n ['Flecha SE', function ($itemScope, $event) {\n let element = ISOEngine.addElement({\n url: \"Content/iso/flechas/flechasesuelo.png\",\n x: $scope.contextMenuPosition.x + \"px\",\n y: $scope.contextMenuPosition.y + \"px\",\n w: 65,\n h: 35,\n scale: 1.0\n });\n }],\n ['Flecha SO', function ($itemScope, $event) {\n let element = ISOEngine.addElement({\n url: \"Content/iso/flechas/flechasosuelo.png\",\n x: $scope.contextMenuPosition.x + \"px\",\n y: $scope.contextMenuPosition.y + \"px\",\n w: 65,\n h: 35,\n scale: 1.0\n });\n }]\n ]],\n null, // Dividier\n ['Fondo', function ($itemScope) {\n }, [\n ['Sin fondo', function ($itemScope, $event) {\n let element = ISOEngine.setFloor({\n url: \"\",\n scale: 0.5\n });\n }],\n ['Mosaico blanca-gris', function ($itemScope, $event) {\n let element = ISOEngine.setFloor({\n url: \"Content/iso/floor/floor-01.png\",\n scale: 0.5\n });\n }],\n ['Mosaico negro-blanco', function ($itemScope) {\n let element = ISOEngine.setFloor({\n url: \"Content/iso/floor/floor-04.png\",\n scale: 0.5\n });\n }],\n ['Baldosa grande', function ($itemScope) {\n let element = ISOEngine.setFloor({\n url: \"Content/iso/floor/floor-02.png\",\n scale: 0.5\n });\n }],\n ['Empedrado', function ($itemScope) {\n let element = ISOEngine.setFloor({\n url: \"Content/iso/floor/floor-03.png\",\n scale: 0.5\n });\n }]\n ]]\n ];\n\n //bind events\n $(window).keydown(function (e) {\n var stepX = 1;\n var stepY = 1;\n if (e.shiftKey) {\n stepX = 5;\n stepY = 5;\n }\n switch (e.keyCode) {\n case 46: //suprimir\n if ($scope.selectedElement!=null) {\n $scope.engine.removeElement($scope.selectedElement);\n $scope.selectedElement = null;\n }\n break;\n case 37: //izquierda\n $scope.selectedElement.x = (parseInt($scope.selectedElement.x.replace(\"px\", \"\")) - stepX) + \"px\";\n if (e.preventDefault) e.preventDefault();\n e.stopPropagation();\n break;\n case 38: //arriba\n $scope.selectedElement.y = (parseInt($scope.selectedElement.y.replace(\"px\", \"\")) - stepY) + \"px\";\n if (e.preventDefault) e.preventDefault();\n e.stopPropagation();\n break;\n case 39: //derecha\n $scope.selectedElement.x = (parseInt($scope.selectedElement.x.replace(\"px\", \"\")) + stepX) + \"px\";\n if (e.preventDefault) e.preventDefault();\n e.stopPropagation();\n break;\n case 40: //abajo\n $scope.selectedElement.y = (parseInt($scope.selectedElement.y.replace(\"px\", \"\")) + stepY) + \"px\";\n if (e.preventDefault) e.preventDefault();\n e.stopPropagation();\n break;\n case 187: //+\n $scope.selectedElement.z++;\n break;\n case 189: //-\n $scope.selectedElement.z--;\n break;\n case 68: //ctrl + d\n if (e.preventDefault) e.preventDefault();\n e.stopPropagation();\n\n if($scope.selectedElement!=null){\n var element = angular.copy($scope.selectedElement);\n $scope.engine.addElement(element);\n $log.debug(\"antes\", element);\n element.x = (parseInt(element.x.replace(\"px\", \"\")) + element.w) + \"px\";\n $log.debug(\"despues\", element);\n $scope.selectedElement = element;\n if (!$scope.$$phase) $scope.$apply();\n }\n break;\n \n }\n if (!$scope.$$phase) $scope.$apply();\n });\n\n $scope.save = function () {\n $scope.space.configuration = {\n floor: $scope.engine.floor,\n elements: $scope.engine.elements\n };\n $scope.selectedElement = null;\n // TODO: Revisar como habilitar esto porque se queja del onrendered\n/* html2canvas(document.getElementById(\"scene\"), {\n onrendered: function (canvas) {\n var thumb = canvas.toDataURL(\"image/jpeg\", 1.0);\n $(window).unbind(\"keydown\");\n $uibModalInstance.close({ thumb: thumb, configuration: $scope.space.configuration });\n }\n });*/\n };\n\n $scope.cancel = function () {\n $(window).unbind(\"keydown\");\n $uibModalInstance.dismiss('cancel');\n };\n\n $scope.onDragSuccess = function ($data, $event) {\n $log.debug($event, $data);\n if ($scope.selectedElement != null && $data!=null) {\n $scope.selectedElement.x = (parseInt($scope.selectedElement.x.replace(\"px\", \"\")) + $event.tx) + \"px\";\n $scope.selectedElement.y = (parseInt($scope.selectedElement.y.replace(\"px\", \"\")) + $event.ty) + \"px\";\n }\n\n };\n\n $scope.checkPixelTransparent = function (id, $event) {\n var canvas = document.createElement('canvas');\n var context = canvas.getContext('2d');\n var img = document.getElementById(\"img-\" + id);\n if (context && img) {\n context.drawImage(img as HTMLImageElement, 0, 0);\n }\n //calcular pixel respecto a la pagina\n var elementPosition = $(\"#\" + id).offset();\n var scenePosition = $(\"#\" + id).parent().offset();\n var x = $event.clientX - $(\"#\" + id).offset().left;\n var y = $event.clientY - $(\"#\" + id).offset().top;\n $log.debug(id, x, y);\n var theData = context.getImageData(x, y, 1, 1);\n return theData.data[3] == 0;\n };\n\n $scope.sceneClick = function ($event) {\n //quitamos seleccionado actual\n $scope.selectedElement = null;\n if (!$scope.$$phase) $scope.$apply();\n\n //buscamos elementos en click\n var oElements = document.elementsFromPoint($event.clientX, $event.clientY);\n var elementsIds = [];\n angular.forEach(oElements, function (element) {\n if ($(element).hasClass(\"element\")) {\n elementsIds.push($(element).attr(\"id\"));\n }\n });\n //filtramos solo los de escena\n var elements = $filter('filter')($scope.engine.elements, function (value) {\n return elementsIds.indexOf(value.id)>=0;\n });\n //ordenamos por Z\n elements = $filter('orderBy')(elements, 'z', true);\n for (var i = 0; i < elements.length; i++) {\n var isPixelTransparent = $scope.checkPixelTransparent(elements[i].id, $event);\n if (!isPixelTransparent) {\n //seleccionamos actual y paramos\n $scope.selectedElement = elements[i];\n $log.debug(\"selected\", $scope.selectedElement);\n break;\n }\n }\n };\n\n $scope.reorderElementLocations = function (element) {\n $log.debug(\"reorderElementLocations\", element);\n if (angular.isDefined(element.properties.distribution_system.value)) {\n if (element.properties.distribution_system.value == \"cartesiano_frances\") {\n var locationsBySide = element.locations.length / 2;\n var startPositionSide1 = locationsBySide + locationsBySide / 2 -1;\n var startPositionSide2 = locationsBySide / 2 -1;\n var side1Step = 0;\n var side2Step = 0;\n for (var i = 1; i <= element.locations.length ; i++) {\n var isPair = (i / 2) == i / 2;\n if (!isPair) {\n var positionIdx = startPositionSide1 + side1Step;\n element.locations[positionIdx].number = i;\n if (side1Step == 0) {\n side1Step = 1;\n } else if (side1Step > 0) {\n side1Step = -(Math.abs(side1Step));\n } else if (side1Step < 0) {\n side1Step = (Math.abs(side1Step)+1);\n }\n } else {\n var positionIdx = startPositionSide2 + side2Step;\n if (positionIdx < 0) {\n //lado par desbordado, va al otro lado de la mesa\n positionIdx = startPositionSide2 + Math.abs(side2Step);\n }\n element.locations[positionIdx].number = i;\n if (side2Step == 0) {\n side2Step = -1;\n } else if (side2Step > 0) {\n side2Step = -(Math.abs(side2Step) + 1);\n } else if (side2Step < 0) {\n side2Step = (Math.abs(side2Step));\n }\n }\n }\n }\n }\n $log.debug(element);\n };\n\n $scope.selectElement = function (element, $event) {\n if (element == null) return;\n if (angular.isDefined($event)) {\n $log.debug($event);\n var isPixelTransparent = false;\n if (angular.isDefined(element.id)) isPixelTransparent = $scope.checkPixelTransparent(element.id, $event);\n $log.debug(\"Transparent\", isPixelTransparent);\n if (!isPixelTransparent) {\n //si no es transparente cogemos el elemento y paramos la propagacion\n $log.debug(\"stopPropagation\");\n $event.stopPropagation();\n $scope.selectedElement = element;\n if (!$scope.$$phase) $scope.$apply();\n }\n } else {\n //solo seleccionamoe elemnto\n $log.debug(\"select\", element);\n $scope.selectedElement = element;\n if (!$scope.$$phase) $scope.$apply();\n }\n }\n\n $scope.engine = ISOEngine.init($scope);\n if ($scope.space.configuration != null && angular.isDefined($scope.space.configuration)) {\n if (angular.isDefined($scope.space.configuration.floor)) $scope.engine.floor = $scope.space.configuration.floor;\n if (angular.isDefined($scope.space.configuration.elements)) $scope.engine.elements = $scope.space.configuration.elements;\n }\n\n }])\n\n.service(\"ISOEngine\", [function () {\n var service = {\n\n scope: null,\n container: null,\n ctx: null,\n\n scaleX: 1.0,\n scaleY: 1.0,\n elements: null,\n floor: null,\n selectedElement: null,\n\n init: function (scope) {\n this.scope = scope;\n this.elements = new Array();\n return this;\n },\n generateGUUI: function () {\n function s4() {\n const crypto = window.crypto || (window as any).msCrypto;\n let array = new Uint32Array(1);\n let random = crypto.getRandomValues(array); // Compliant for security-sensitive use cases\n\n return Math.floor((1 + random[0]) * 0x10000)\n .toString(16)\n .substring(1);\n }\n return s4() + s4() + '-' + s4() + '-' + s4() + '-' +\n s4() + '-' + s4() + s4() + s4();\n },\n setFloor: function(floor){\n this.floor = floor;\n },\n addElement: function (element) {\n element.id = this.generateGUUI();\n element.name = \"Elemento \" + (this.elements.length + 1);\n if (angular.isUndefined(element.scale)) element.scale = 1;\n\n //calculando tamaño final\n element.scaled_w = (element.w * element.scale) + \"px\";\n element.scaled_h = (element.h * element.scale) + \"px\";\n element.z = this.elements.length;\n\n //añadimos propiedades segun tipo\n if(angular.isDefined(element.type)){\n if(element.type==\"table\"){\n element.properties = {\n \"distribution_system\": {\n \"type\": \"select\", \"value\": \"cartesiano_frances\", \"options\": [\n { \"value\": \"cartesiano_frances\", \"label\": \"Cartesiano - Pre. francesa\" },\n { \"value\": \"cartesiano_ingles\", \"label\": \"Cartesiano - Pre. inglesa\" },\n { \"value\": \"reloj_frances\", \"label\": \"Reloj - Pre. francesa\" },\n { \"value\": \"reloj_frances\", \"label\": \"Reloj - Pre. inglesa\" }\n ]\n },\n \"zone_number\": { \"type\":\"text\", \"value\": null },\n \"precedence_order\": { \"type\": \"text\", \"value\": null }\n };\n }\n }\n\n this.elements.push(element);\n if (!this.scope.$$phase) this.scope.$apply();\n return element;\n },\n removeElement: function (element) {\n this.elements.splice(this.elements.indexOf(element), 1);\n }\n };\n return service;\n}])\n\n;\n\n","\nimport SpacesEditView from \"./spaces-edit.html\";\n\nangular.module(\"spaces\")\n\n .controller(\"SpacesListCtrl\", ['$rootScope', '$scope', '$http', '$interval', '$q', 'i18nService', 'Restangular', 'gridService', 'modalService', '$uibModal', '$filter', '$translate', '$log',\n function ($rootScope, $scope, $http, $interval, $q, i18nService, Restangular, gridService, modalService, $uibModal, $filter, $translate, $log) {\n \n $rootScope.title = $filter('translate')('spaces.title');\n $log.debug($filter('translate')('spaces.title'));\n $rootScope.breadcrumb = [\n { title: $filter('translate')('spaces.title') }\n ];\n\n $scope.gridOptionsSpaces = {\n pdfTitle: \"Espacios\",\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n enableSorting: true, \n paginationPageSizes: [20, 40, 60],\n paginationPageSize: 20,\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n { name: 'name', displayName: $filter('translate')('spaces.name'), enableFiltering: true, enableHiding: false },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('documents_reports.button_duplicate'), action: 'ng-click=\"grid.appScope.duplicate(row.entity.id)\"', cssIconClass: \"fa fa-copy\" },\n { title: $filter('translate')('spaces.button_edit'), action: 'ng-click=\"grid.appScope.openDesigner(row.entity.id);\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('spaces.button_delete'), action: 'ng-click=\"grid.appScope.deleteDialog(row.entity.id,row.entity.name);\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) { \n return Restangular.all('Spaces').getList(options)\n }\n };\n\n\n $scope.deleteDialog = function (id, name) {\n $scope.id = id;\n $scope.name = name;\n modalService.confirm({\n title: $filter('translate')('spaces.delete'),\n message: $filter('translate')('spaces.delete_message')+\" \" + $scope.name + \"?\",\n onAccept: function () {\n Restangular.one('Spaces', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('spaces.delete_success'));\n $scope.gridOptionsSpaces.gridApi.core.raise.itemDeleted($scope);\n \n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n });\n\n };\n\n $scope.duplicate = function (id) {\n Restangular.all('Spaces').customPOST({}, \"DuplicateSpace\", { id: id }).then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('spaces.create_success'));\n $scope.gridOptionsSpaces.loadData();\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n\n $scope.openDesigner = function (id) {\n $log.debug(\"Open\", id);\n var modalInstance = $uibModal.open({\n template: SpacesEditView,\n controller: \"EventsSpacesEditCtrl\",\n size: \"fullscreen\",\n scope: $scope,\n backdrop: 'static',\n resolve: {\n id: function () {\n return id;\n },\n configuration: function () {\n return \"\";\n },\n name: function () {\n return \"\";\n }\n }\n });\n modalInstance.result.then(function (options) {\n $log.debug(options);\n $scope.gridOptionsSpaces.loadData();\n }, function () {\n //dimissed\n });\n }\n\n \n }])\n\n;","\nimport BreadcrumbView from \"../common/breadcrumb/breadcrumb.html\";\nimport SpacesListView from \"./spaces-list.html\";\n\nangular.module(\"spaces\", ['ui.bootstrap.contextMenu'])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('spaces', {\n url: \"/spaces\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n })\n\n .state('spaces.list', {\n url: \"/list\",\n controller: \"SpacesListCtrl\",\n template: SpacesListView\n }) \n }])\n;","import './staff';\nimport './staff-list';\nimport './staff-edit';\nimport './staff_positions/staff_positions';\nimport './staff_positions/staff_positions-list';\nimport './staff_positions/staff_positions-edit'; ","angular.module(\"staff\")\n\n .controller(\"StaffEditCtrl\", [ 'foldersService', 'LoginService', '$scope', '$rootScope', '$state', '$stateParams', 'Restangular', 'gridService', '$filter', '$translate', 'modalService', '$uibModal',\n function (foldersService, LoginService, $scope, $rootScope, $state, $stateParams, Restangular, gridService, $filter, $translate, modalService, $uibModal) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"STAFF_WRITE\");\n $scope.allowFoldersFiles = LoginService.permissionExist(\"FILES_READ\");\n\n $scope.stateParamsId = $stateParams.id;\n $scope.buttonCancel = true;\n\n $scope.addStaffFromEvent = function (options) {\n $scope.stateParamsId = \"\";\n $scope.is_external = options.isExternal;\n $scope.callbackClose = options.callbackClose;\n $scope.comeFromEvents = true;\n $scope.buttonCancel = false;\n $scope.configure();\n };\n\n\n $scope.configure = function () {\n $rootScope.title = $filter('translate')('staff.title');\n $scope.staff = {\n is_external: $stateParams.is_external === \"true\"\n };\n\n if (angular.isDefined($scope.is_external)) $scope.staff.is_external = $scope.is_external;\n\n if (angular.isUndefined($stateParams.id) || $stateParams.id == \"\" || $scope.stateParamsId == \"\") {\n\n $rootScope.breadcrumb = [\n { title: $filter('translate')('staff.title'), url: \"staff.list\" },\n { title: $filter('translate')('staff.title_add') },\n ];\n\n } else {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('staff.title'), url: \"staff.list\" },\n { title: $filter('translate')('staff.title_edit') },\n ];\n\n Restangular.one('Staff', $stateParams.id).get().then(function (result) {\n $scope.staff = result;\n $scope.staff.birthdate = new Date($scope.staff.birthdate);\n });\n }\n }\n\n if ($state.is(\"staff.edit\")) $scope.configure();\n\n Restangular.all('StaffPositions').getList().then(function (positions) {\n $scope.selectPositions = positions;\n });\n\n $scope.saveStaff = function () {\n if (angular.isDefined($scope.staff.id)) {\n $scope.staff.put().then(function (result) {\n if (angular.isDefined(result.id)) {\n if (angular.isUndefined($scope.comeFromEvents)) {\n $state.go(\"staff.list\");\n } else {\n $scope.callbackClose('cancel');\n }\n toastr.success($filter('translate')('staff.edit_success')); \n } else {\n $scope.errorMessage = result.message;\n }\n });\n } else {\n Restangular.all('Staff').post($scope.staff).then(function (result) {\n if (angular.isDefined(result.id)) {\n if (angular.isUndefined($scope.comeFromEvents)) {\n $state.go(\"staff.edit\", { id: result.id,is_template:false});\n } else {\n $scope.callbackClose('cancel');\n }\n toastr.success($filter('translate')('staff.save_success')); \n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n }\n\n $scope.checkDelete = function () {\n modalService.confirm({\n title: $filter('translate')('staff.button_delete'),\n message: $filter('translate')('staff.delete_message') + \" \" + $scope.staff.name + \"?\",\n onAccept: function () {\n $scope.staff.remove().then(function () {\n toastr.success($filter('translate')('staff.delete_success'));\n $state.go(\"staff.list\");\n });\n }\n });\n };\n\n $scope.selectImage = function () {\n $(\"#frmPersonImage\").trigger(\"click\");\n $(\"#frmPersonImage\").change(function () {\n var file = (document.querySelector('#frmPersonImage') as HTMLInputElement).files[0];\n if (file) {\n var fileReader = new FileReader();\n fileReader.onload = function (event) {\n var uri = event.target.result;\n if (angular.isUndefined($scope.staff.FK_staff_images) || $scope.staff.FK_staff_images == null) $scope.staff.FK_staff_images = {};\n $scope.staff.FK_staff_images.image = uri;\n $scope.staff.photo = uri;\n $scope.staff.image_id = null; //??\n if (!$scope.$$phase) $scope.$apply();\n };\n fileReader.readAsDataURL(file);\n } else {\n //preview.src = \"\";\n }\n });\n };\n\n $scope.getImage = function () {\n if ($scope.staff.FK_staff_images != null && $scope.staff.FK_staff_images.image != null) {\n return $scope.staff.FK_staff_images.image;\n } else if ($scope.staff.image_id != null) {\n return \"/api/Image/GetImageBmp?id=\" + $scope.staff.image_id + \"&maxW=150&maxH2=150\";\n } else {\n return \"assets/img/no-user.jpeg\";\n }\n };\n\n $scope.removeImage = function ($event) {\n $scope.staff.image_id = null; $scope.staff.photo = null;\n if ($scope.staff.FK_staff_images != null) $scope.staff.FK_staff_images.image = null;\n if (typeof ($event) !== \"undefined\") {\n $event.preventDefault();\n $event.stopPropagation();\n }\n };\n\n $scope.foldersFiles = function () {\n foldersService.folders(\"staff\", $scope.staff.id, false);\n };\n\n }])\n\n;\n\n","angular.module(\"staff\")\n\n .controller(\"StaffListCtrl\", ['LoginService', '$rootScope', '$scope', '$http', '$interval', '$q', 'i18nService', 'Restangular', 'gridService', '$filter', '$translate', 'modalService', '$uibModal','$state', 'datasetsService',\n function (LoginService, $rootScope, $scope, $http, $interval, $q, i18nService, Restangular, gridService, $filter, $translate, modalService, $uibModal,$state, datasetsService) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"STAFF_WRITE\");\n $rootScope.title = $filter('translate')('staff.title');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('staff.title') }\n ];\n\n $scope.staff = {\n is_external: false\n };\n\n $scope.gridOptionsInternalStaff = {\n pdfTitle: $filter('translate')('staff.pdf_title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n //gridMenuShowHideColumns: false,\n enableSorting: true,\n paginationPageSizes: [20, 40, 60],\n paginationPageSize: 20,\n exporterSuppressColumns: [\"image_id\"], \n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n {\n field: 'image_id',\n enableSorting: false,\n width: 40,\n enableFiltering: false,\n displayName: \"\",\n cellTemplate: \"
\"\n },\n { name: 'puesto', field: 'FK_staff_staff_positions.name', displayName: $filter('translate')('staff.staff_position'), enableFiltering: true },\n { name: 'name', displayName: $filter('translate')('staff.name'), enableFiltering: true, enableHiding: false },\n { name: 'surname', displayName: $filter('translate')('staff.surname'), enableFiltering: true },\n { name: 'lastname', displayName: $filter('translate')('staff.lastname'), enableFiltering: true },\n { name: 'dni', displayName: $filter('translate')('staff.dni'), width: 100, enableFiltering: true },\n { name: 'email', displayName: $filter('translate')('staff.email'), enableFiltering: true },\n { name: 'phone', displayName: $filter('translate')('staff.phone'), width: 100, enableFiltering: true },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('staff.button_edit'), action: 'ui-sref=\"staff.edit({id:row.entity.id , is_external:false})\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('staff.button_delete'), action: 'ng-click=\"grid.appScope.deleteInternalDialog(row.entity.id,row.entity.name);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n options.is_external = false;\n return Restangular.all('Staff').getList(options);\n }\n };\n\n\n $scope.deleteInternalDialog = function (id, name) {\n $scope.id = id;\n $scope.name = name;\n modalService.confirm({\n title: $filter('translate')('staff.button_delete'),\n message: $filter('translate')('staff.delete_message') + \" \" + $scope.name + \"?\",\n onAccept: function () {\n Restangular.one('Staff', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('staff.delete_success'));\n $scope.gridOptionsInternalStaff.gridApi.core.raise.itemDeleted($scope);\n\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n });\n\n };\n\n $scope.gridOptionsExternalStaff = {\n pdfTitle: $filter('translate')('staff.pdf_title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n //gridMenuShowHideColumns: false,\n enableSorting: true,\n paginationPageSizes: [20, 40, 60],\n paginationPageSize: 20,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n {\n field: 'image_id',\n enableSorting: false,\n width: 40,\n enableFiltering: false,\n displayName: \"\",\n cellTemplate: \"
\"\n },\n { name: 'provider_name', displayName: $filter('translate')('staff.provider_name'), enableFiltering: true },\n { name: 'puesto', field: 'FK_staff_staff_positions.name', displayName: $filter('translate')('staff.staff_position'), enableFiltering: true },\n { name: 'name', displayName: $filter('translate')('staff.name'), enableFiltering: true, enableHiding: false },\n { name: 'surname', displayName: $filter('translate')('staff.surname'), enableFiltering: true },\n { name: 'lastname', displayName: $filter('translate')('staff.lastname'), enableFiltering: true },\n { name: 'dni', displayName: $filter('translate')('staff.dni'), width: 100, enableFiltering: true },\n { name: 'email', displayName: $filter('translate')('staff.email'), enableFiltering: true },\n { name: 'phone', displayName: $filter('translate')('staff.phone'), width: 100, enableFiltering: true },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('staff.button_edit'), action: 'ui-sref=\"staff.edit({id:row.entity.id , is_external:true})\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('staff.button_delete'), action: 'ng-click=\"grid.appScope.deleteExternalDialog(row.entity.id,row.entity.name);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n options.is_external = true;\n return Restangular.all('Staff').getList(options);\n }\n };\n\n $scope.goToEdit = function (rowEntity) {\n $state.go(\"staff.edit\", { id: rowEntity.id, is_external: $scope.staff.is_external });\n }\n\n\n\n $scope.deleteExternalDialog = function (id, name) {\n $scope.id = id;\n $scope.name = name;\n modalService.confirm({\n title: $filter('translate')('staff.button_delete'),\n message: $filter('translate')('staff.delete_message') + \" \" + $scope.name + \"?\",\n onAccept: function () {\n Restangular.one('Staff', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('staff.delete_success'));\n $scope.gridOptionsExternalStaff.gridApi.core.raise.itemDeleted($scope);\n\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n });\n\n };\n\n $scope.export = function () {\n var options = {\n filters: {\n IS_EXTERNAL: $scope.staff.is_external\n }\n };\n\n datasetsService.exportByType(\"staff\", options);\n };\n\n }])\n\n;","\nimport BreadcrumbView from \"../common/breadcrumb/breadcrumb.html\";\nimport StaffListView from \"./staff-list.html\";\nimport StaffEditView from \"./staff-edit.html\";\nimport FoldersListView from \"../folders/folders-list.html\";\n\nangular.module(\"staff\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('staff', {\n url: \"/staff\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n })\n\n .state('staff.list', {\n url: \"/list\",\n controller: \"StaffListCtrl\",\n template: StaffListView,\n requiredPermission: [\"STAFF_READ\"]\n }) \n .state('staff.edit', {\n url: \"/edit/:id&:is_external\",\n views: {\n '': {\n controller: \"StaffEditCtrl\",\n template: StaffEditView,\n },\n 'foldersFiles@staff.edit': {\n controller: \"FoldersListCtrl\",\n template: FoldersListView,\n resolve: {\n entity_type: [function () { return \"staff\"; }],\n entity_type_id: ['$stateParams', function ($stateParams) {\n if (angular.isDefined($stateParams.id) && $stateParams.id != \"\") {\n return $stateParams.id;\n }\n return null;\n }],\n is_public: [function () { return false}]\n }\n }\n },\n requiredPermission: [\"STAFF_READ\"]\n })\n }])\n;","angular.module(\"staff_positions\")\n\n .controller(\"StaffPositionsEditCtrl\", ['LoginService', '$scope', '$rootScope', '$state', '$stateParams', 'Restangular', 'gridService', '$filter', '$translate','modalService', '$uibModal',\n function (LoginService, $scope, $rootScope, $state, $stateParams, Restangular, gridService, $filter, $translate, modalService, $uibModal) {\n \n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"STAFF_POSITION_WRITE\");\n\n $rootScope.title = $filter('translate')('staff_positions.title');\n\n $scope.staff_position = {\n };\n if (angular.isUndefined($stateParams.id) || $stateParams.id == \"\") {\n \n $rootScope.breadcrumb = [\n { title: $filter('translate')('staff_positions.title'), url: \"staff_positions.list\" },\n { title: $filter('translate')('staff_positions.title_add')},\n ];\n \n } else {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('staff_positions.title'), url: \"staff_positions.list\" },\n { title: $filter('translate')('staff_positions.title_edit')},\n ];\n\n Restangular.one('StaffPositions', $stateParams.id).get().then(function (result) {\n \n $scope.staff_position = result;\n });\n } \n \n $scope.saveStaffPosition = function () { \n if (angular.isDefined($scope.id)) {\n $scope.staff_position.put().then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('staff_positions.save_success'));\n $state.go(\"staff_positions.list\");\n } else {\n $scope.errorMessage = result.message;\n }\n });\n } else {\n Restangular.all('StaffPositions').post($scope.staff_position).then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('staff_positions.edit_success'));\n $state.go(\"staff_positions.list\");\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n }\n\n $scope.checkDelete = function () {\n modalService.confirm({\n title: $filter('translate')('staff_positions.button_delete'),\n message: $filter('translate')('staff_positions.delete_message') + \" \" + $scope.staff_position.name + \"?\",\n onAccept: function () {\n $scope.staff_position.remove().then(function () {\n toastr.success($filter('translate')('staff_positions.deleted_success'));\n $state.go(\"staff_positions.list\");\n });\n }\n });\n }; \n\n}])\n\n;\n\n","angular.module(\"staff_positions\")\n\n .controller(\"StaffPositionsListCtrl\", ['LoginService', '$rootScope', '$scope', '$http', '$interval', '$q', 'i18nService', 'Restangular', 'gridService', 'modalService', '$uibModal', '$filter', '$translate','$state',\n function (LoginService, $rootScope, $scope, $http, $interval, $q, i18nService, Restangular, gridService, modalService, $uibModal, $filter, $translate, $state) {\n \n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"STAFF_POSITION_WRITE\");\n\n $rootScope.title = $filter('translate')('staff_positions.title');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('staff_positions.title') }\n ];\n\n $scope.gridOptionsStaffPositions = {\n pdfTitle: $filter('translate')('staff_positions.pdf_title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n enableSorting: true, \n paginationPageSizes: [20, 40, 60],\n paginationPageSize: 20,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n { name: 'name', displayName: $filter('translate')('staff_positions.name'), enableFiltering: true, enableHiding: false },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('staff_positions.button_edit'), action: 'ui-sref=\"staff_positions.edit({id:row.entity.id})\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('staff_positions.button_delete'), action: 'ng-click=\"grid.appScope.deleteDialog(row.entity.id,row.entity.name);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) { \n return Restangular.all('StaffPositions').getList(options);\n }\n };\n\n $scope.goToEdit = function (rowEntity) {\n $state.go(\"staff_positions.edit\", { id: rowEntity.id });\n }\n\n\n $scope.deleteDialog = function (id, name) {\n $scope.id = id;\n $scope.name = name;\n modalService.confirm({\n title: $filter('translate')('staff_positions.button_delete'),\n message: $filter('translate')('staff_positions.delete_message') + \" \" + $scope.name + \"?\",\n onAccept: function () {\n Restangular.one('StaffPositions', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('staff_positions.deleted_success'));\n $scope.gridOptionsStaffPositions.gridApi.core.raise.itemDeleted($scope);\n \n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n });\n\n };\n \n }])\n\n;","\nimport BreadcrumbView from \"../../common/breadcrumb/breadcrumb.html\";\nimport StaffPositionsListView from \"./staff_positions-list.html\";\nimport StaffPositionsEditView from \"./staff_positions-edit.html\";\n\nangular.module(\"staff_positions\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('staff_positions', {\n url: \"/staff_positions\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n })\n\n .state('staff_positions.list', {\n url: \"/list\",\n controller: \"StaffPositionsListCtrl\",\n template: StaffPositionsListView,\n requiredPermission: [\"STAFF_POSITION_READ\"]\n }) \n .state('staff_positions.edit', {\n url: \"/edit/:id\",\n controller: \"StaffPositionsEditCtrl\",\n template: StaffPositionsEditView,\n requiredPermission: [\"STAFF_POSITION_READ\"]\n })\n }])\n;","import './tags';\nimport './tags-list';\nimport './tags-edit';","\nimport toastr from 'toastr';\nimport IconPicker from '../../scripts/iconpicker-1.5.0.js';\n\nangular.module(\"tags\")\n\n .controller(\"tagsEditCtrl\", ['LoginService', '$scope', '$rootScope', '$controller', '$state', '$stateParams', 'Restangular', '$uibModalInstance', 'modalService', '$compile', 'gridService', '$filter', '$translate', '$q', 'is_modal', '$document', 'entity_type', 'entity_id', function (LoginService, $scope, $rootScope, $controller, $state, $stateParams, Restangular, $uibModalInstance, modalService, $compile, gridService, $filter, $translate, $q, is_modal, $document, entity_type, entity_id) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"FILES_WRITE\");\n $scope.forSearchByTags = false;\n if (is_modal == false)\n $rootScope.title = $filter('translate')('tags.title');\n $scope.selected = [];\n\n if (entity_id != null) {\n $scope.forSearchByTags = false;\n } else {\n $scope.forSearchByTags = true;\n }\n\n $scope.tag = { entity_type: entity_type, color: '#008000' };\n\n //Icon Picker, usamos angular.element para asegurar que el docuemnto se ha cargado antes de iniciar la función\n //Lo comento por que veo que no se utiliza, se pone directamente un icono\n /*angular.element(function () {\n IconPicker.Init({\n // Required: You have to set the path of IconPicker JSON file to \"jsonUrl\" option. e.g. '/content/plugins/IconPicker/dist/iconpicker-1.5.0.json'\n jsonUrl: '/assets/iconpicker-1.5.0.json',\n // Optional: Change the buttons or search placeholder text according to the language.\n searchPlaceholder: 'Search Icon',\n showAllButton: 'Show All',\n cancelButton: 'Cancel',\n noResultsFound: 'No results found.', // v1.5.0 and the next versions\n borderRadius: '20px', // v1.5.0 and the next versions\n });\n\n IconPicker.Run('#GetIconPicker', function () {\n // ng-bind no funciona para asignar el icono porque no detecta el cambio que hacemos con el IconPicker, así que hay que hacerlo a pelo.\n let icon = document.querySelector(\"#IconPreview\").getAttribute(\"class\");\n icon = icon.substring(icon.indexOf('-') + 1);\n $scope.tag.icon = icon;\n });\n });*/\n \n if (is_modal == false) {\n if (angular.isUndefined($stateParams.id) || $stateParams.id == \"\") {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('tags.title'), url: `tags.list` },\n { title: $filter('translate')('tags.add') },\n ];\n } else {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('tags.title'), url: `tags.list` },\n { title: $filter('translate')('tags.edit') },\n ];\n Restangular.one('Tags', $stateParams.id).get().then(function (result) {\n $scope.tag = result;\n });\n }\n } else {\n Restangular.all(\"Tags\").customGET(\"TagsByEntityType\", { entity_type: entity_type, entity_id: entity_id }).then(function (result) {\n $scope.tags = result;\n });\n\n };\n \n\n $scope.save = function () {\n $scope.tag.icon = \"fas fa-tag\";\n if (!angular.isUndefined($scope.tag.id)) {\n $scope.tag.put().then(function (result) {\n if (typeof (result.id) != \"undefined\") {\n toastr.success($filter('translate')('tags.modified_success'));\n $state.go('tags.list');\n } else {\n $scope.errorMessage = result.message;\n }\n });\n } else {\n Restangular.all('Tags').post($scope.tag).then(function (result) {\n if (typeof (result.id) != \"undefined\") {\n toastr.success($filter('translate')('tags.created_success'));\n $state.go('tags.list');\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n }\n\n $scope.selectTagTypes = [\n { id: \"persons\", name: \"Personas\" },\n { id: \"documents\", name: \"Documentos\" }\n ];\n\n $scope.checkDelete = function () {\n modalService.confirm({\n title: $filter('translate')('tags.delete'),\n message: $filter('translate')('tags.delete_message'),\n onAccept: function () {\n $scope.tag.remove().then(function () {\n toastr.success($filter('translate')('tags.remove_success'));\n $state.go('tags.list');\n });\n }\n });\n };\n\n $scope.onCancelTag = function () {\n $uibModalInstance.close();\n };\n\n $scope.onAcceptTag = function () {\n $scope.tag.icon = \"fas fa-tag\";\n if (angular.isUndefined($scope.tag.color)) {\n $scope.tag.color = \"#008000\"\n }\n Restangular.all('Tags').post($scope.tag).then(function (result) {\n if (typeof (result.id) != \"undefined\") {\n toastr.success($filter('translate')('tags.created_success'));\n } else \n $scope.errorMessage = result.message;\n }) \n $uibModalInstance.close();\n }\n \n $scope.onAssignTags = function () {\n angular.forEach($scope.selected, function (key, item) {\n Restangular.all('Tags').customPOST({}, \"SaveTagsEntity\", { tag_id: item, entity_id: entity_id }).then(function (result) {\n })\n })\n $uibModalInstance.close();\n }\n\n $scope.onSearchByTags = function () {\n $uibModalInstance.close($scope.selected);\n }\n\n }]);\n\n","import angular from \"angular\";\nimport toastr from 'toastr';\n\nangular.module('tags')\n\n .controller(\"tagsListCtrl\", ['LoginService', '$rootScope', '$scope', 'Restangular', 'gridService', 'modalService', '$filter', '$state', '$log',\n function (LoginService, $rootScope, $scope, Restangular, gridService, modalService, $filter, $state, $log) {\n\n $rootScope.title = $filter('translate')('tags.title');\n $log.debug($filter('translate')('tags.title'));\n $rootScope.breadcrumb = [\n { title: $filter('translate')('tags.title') }\n ];\n\n $scope.allowWrite = LoginService.permissionExist(\"FILES_WRITE\");\n\n $scope.gridOptions = {\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n enableSorting: true,\n paginationPageSizes: [20, 40, 60],\n paginationPageSize: 20,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n { name: 'title', displayName: $filter('translate')('general.title'), enableFiltering: true, enableHiding: false, maxWidth: 250 },\n { name: 'description', displayName: $filter('translate')('general.description'), enableFiltering: true, enableHiding: false },\n\n { name: 'color', displayName: $filter('translate')('general.color'), enableFiltering: false, cellTemplate: gridService.colorTemplate(\"color\"), maxWidth: 50 },\n {\n name: 'icon', displayName: $filter('translate')('cms.icon'), cellTemplate: '
' +\n '' +\n '
', width: 80, enableFiltering: false, enableHiding: false\n },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('general.button_edit'), action: 'ui-sref=\"tags.edit({id:row.entity.id,entity_type: null,entity_id: null})\"; ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('general.button_delete'), action: 'ng-click=\"grid.appScope.deleteDialog(row.entity.id,row.entity.title);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n return Restangular.all('Tags').getList(options)\n }\n };\n\n\n $scope.goToEdit = function (rowEntity) {\n $state.go(\"tags.edit\", { id: rowEntity.id, entity_type: null, entity_id: null });\n };\n\n\n $scope.deleteDialog = function (id, title) {\n\n modalService.confirm({\n title: $filter('translate')('tags.button_delete'),\n message: $filter('translate')('tags.delete_message'),\n onAccept: function () {\n Restangular.one('Tags', id).remove().then(function () {\n toastr.success($filter('translate')('tags.deleted_success'));\n $scope.gridOptions.gridApi.core.raise.itemDeleted($scope);\n\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n });\n\n\n }\n }])","\nimport BreadcrumbView from \"../common/breadcrumb/breadcrumb.html\";\nimport TagsListView from \"./tags-list.html\";\nimport TagsEditView from \"./tags-edit.html\";\n\nangular.module('tags', [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('tags', {\n url: \"/tags\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n })\n\n .state('tags.list', {\n url: \"/list\",\n controller: \"tagsListCtrl\",\n template: TagsListView,\n requiredPermission: [\"FILES_READ\"]\n })\n\n .state('tags.edit', {\n url: \"/edit/:id\",\n controller: \"tagsEditCtrl\",\n template: TagsEditView,\n resolve: {\n is_modal: function () {\n return false;\n },\n entity_type: function () {\n return null;\n },\n entity_id: function () {\n return null;\n }\n\n },\n\n requiredPermission: [\"FILES_READ\"]\n })\n\n }]);","import './tasks';\nimport './tasks-list'; \nimport './tasks-service';","import pdfMake from \"pdfmake\";\nimport html2canvas from 'html2canvas';\nimport TaskModalView from \"./taskModal.html\";\nimport moment from \"moment\";\n\nangular.module(\"tasks\")\n\n .filter('formatTaskUsers', function () {\n return function (taskUser) {\n var ret = \"\";\n ret += \"\" + taskUser.FK_tasks_users_users.name + \"\";\n if (taskUser.FK_tasks_users_users.mail != null) ret += \"
Enviar correo\";\n return ret;\n };\n })\n\n .controller(\"TasksListCtrl\", ['entity_type', 'entity_type_id', 'LoginService', '$rootScope', '$scope', 'Restangular', 'gridService', 'modalService', '$uibModal', '$filter', '$translate', '$stateParams', '$state', 'uiGridConstants', '$timeout', '$q', '$http', 'uiGridTreeViewConstants', 'treeService', '$sce', 'datasetsService', '$log',\n function (entity_type, entity_type_id, LoginService, $rootScope, $scope, Restangular, gridService, modalService, $uibModal, $filter, $translate, $stateParams, $state, uiGridConstants, $timeout, $q, $http, uiGridTreeViewConstants, treeService, $sce, datasetsService, $log) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"TASKS_WRITE\");\n $scope.gantt_data = [];\n $scope.diagramView = false;\n $scope.search = {};\n $scope.showDiagram = function (val) {\n $scope.diagramView = val;\n }\n\n $scope.headersFormats = {\n 'year': 'YYYY',\n month: 'MM / YYYY',\n day: 'D',\n };\n\n if ($state.current.name == 'tasks.list') {\n $rootScope.title = $filter('translate')('events.tasks.title');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('events.tasks.tasks') }\n ];\n }\n\n $scope.task = {};\n $scope.getToday = new Date();\n $scope.currentDate = \"line\";\n $scope.viewScale = \"day\";\n $scope.classSize = \"col-lg-12 col-md-12\";\n\n function isDefinedAndNotNull(val) {\n return angular.isDefined(val) && val !== null;\n }\n \n $scope.statusOptions = [];\n Restangular.all('TasksStatus').getList({ entity_type: entity_type }).then(function (results) {\n angular.forEach(results, function (statusOption) {\n $scope.statusOptions.push({\n value: statusOption.id,\n label: statusOption.name\n });\n });\n\n });\n var initialized = false;\n\n $scope.show_gantt = false;\n $scope.show_groups = false;\n let loadConfigurationOptions = function () {\n let group_name = (entity_type == \"correspondence\" ? \"Tareas correspondencia\" : \"\");\n Restangular.all('Configurations').getList({ code: \"\", group_name: group_name }).then(function (response) {\n let configuration = response;\n\n let show_gantt_string = configuration.filter(function (config) { return config.code == \"SHOW_GANTT\"; }).map(function (config) { return config.value; })[0];\n $log.debug(\"show_gantt: \", $scope.show_gantt);\n $scope.show_gantt = (show_gantt_string == 'true' ? true : false);\n\n\n let show_groups_string = configuration.filter(function (config) { return config.code == \"SHOW_GROUPS\";}).map(function (config) { return config.value; })[0];\n $log.debug(\"show_groups: \", $scope.show_groups);\n $scope.show_groups = (show_groups_string == 'true' ? true : false);\n\n });\n }\n if (entity_type == \"correspondence\") loadConfigurationOptions(); //Ahora sólo se utiliza la parte de tareas desde correspondencia, si se utilizase desde otro sitio, habría que saber si se quiere configurar o no.\n\n $scope.pdfMaker = function () {\n //$('html, body').scrollTop(0);\n \n var container = angular.element('#gantt-container');\n\n $(\"#gantt-container #gantt-to-export .gantt-row-label\").css(\"font-size\", \"25px\").css(\"height\", \"50\").css(\"color\", \"#000000\");\n $(\"#gantt-container #gantt-to-export .gantt-row-height\").css(\"font-size\", \"24px\").css(\"height\", \"50\").css(\"color\", \"#000000\");\n $(\"#gantt-container #gantt-to-export .gantt-task .gantt-task-content > span > font\").hide()\n $(\"#gantt-container #gantt-to-export .gantt-header-row\").css(\"font-size\", \"25px\").css(\"height\", \"50\").css(\"color\", \"#000000\");\n $(\"#gantt-container #gantt-to-export .gantt-tree-handle-button\").hide();//ocultamos el desplegable.\n\n var widthShow = angular.element(\"#gantt-to-export .gantt-side\").width() + $(\"#gantt-container-shown .gantt-scrollable\")[0].scrollWidth;\n widthShow = widthShow + 1000;\n\n\n $(\"#gantt-container #gantt-to-export\").css(\"width\", widthShow ); //Le pongo el tamaño de lo que se visualiza!!\n container.show();\n\n\n // var width = angular.element('#gantt-to-export .gantt-side').width() + angular.element('#gantt-to-export .gantt-scrollable-header').width();\n //var width2 = angular.element('#gantt-to-export').width();\n \n var height = (angular.element('#gantt-container #gantt-to-export').height() + 500)*2;\n\n $log.debug(\"height: \" + angular.element('#gantt-container #gantt-to-export').height());\n var results = document.getElementById('gantt-to-export');\n\n html2canvas(document.querySelector(\"#gantt-to-export\")).then(canvas => {\n var data = canvas.toDataURL(\"image/png\", 1.0);\n var docDefinition = {\n pageSize: {\n width: widthShow + 500,\n height: angular.element('#gantt-to-export').height() + 1000//height\n },\n content: [{\n image: data,\n width: widthShow + 200\n }]\n };\n\n // @ts-ignore\n pdfMake.createPdf(docDefinition).download(\"gantt.pdf\");\n container.hide();\n\n });\n }\n\n $scope.gridOptionsTasks = {\n pdfTitle: function () { return $scope.event.name + \" - \" + $filter('translate')('events.tasks.pdf_title'); },\n exporterMenuCsv: true,\n enableGridMenu: true,\n showTreeExpandNoChildren: false,\n enableSorting: true,\n paginationPageSizes: [15, 30, 60],\n paginationPageSize: 15,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n exporterFieldCallback: function (grid, row, col, value) {\n var valueReturned = \"\";\n if (col.name == 'users') {\n if (angular.isDefined(row.entity.FK_tasks_users_tasks) && row.entity.FK_tasks_users_tasks.length > 0) {\n row.entity.FK_tasks_users_tasks.forEach(function (item) {\n if (valueReturned != \"\" && item.FK_tasks_users_users.name != \"\") valueReturned += \", \";\n valueReturned += item.FK_tasks_users_users.name;\n });\n }\n return valueReturned;\n } else if (col.name == \"title\") {\n if (!row.entity.is_group) {\n return \"-- \" + value;\n } else {\n return value;\n }\n } else if (col.name == \"task_status_name\" && !row.entity.is_group) {\n\n if (angular.isDefined(row.entity.FK_tasks_tasks_status)) {\n if (row.entity.FK_tasks_tasks_status.code == \"COMPLETED\") {\n return $filter('translate')('events.tasks.completed');\n } else if (row.entity.FK_tasks_tasks_status.code == \"CANCELED\") {\n return $filter('translate')('events.tasks.canceled');\n } else if (row.entity.FK_tasks_tasks_status.code == \"IN_PROGRESS\") {\n return $filter('translate')('events.tasks.work_progress') + \" \" + row.entity.work_progress + \"%\";\n\n } else if (row.entity.FK_tasks_tasks_status.code == \"PENDING\") {\n return $filter('translate')('events.tasks.pending');\n } else {\n return \"\";\n }\n }\n return value;\n } else {\n return value\n }\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n {\n name: 'title', displayName: $filter('translate')('events.tasks.title_field'), enableFiltering: true, enableHiding: false, enableColumnMenu: false,\n minWidth:75,\n cellTemplate: '',\n },\n {\n name: 'users', enableSorting: false, displayName: $filter('translate')('events.tasks.persons'), enableFiltering: true, enableColumnMenu: false,\n //cellTemplate: '
',\n cellTemplate: '
',\n maxWidth: 120, enableHiding: true, visible: true\n },\n { name: 'color', displayName: $filter('translate')('general.color'), enableFiltering: false, cellTemplate: gridService.colorTemplate(\"color\"), maxWidth: 30 },\n {\n name: 'date_from', displayName: $filter('translate')('events.date_from'), enableFiltering: false,\n cellTemplate: '
{{row.entity.date_from | toLocalDate | date:\"dd/MM/yy\"}}
' +\n '
{{row.entity.date_from | toLocalDate | date:\"dd/MM/yy HH:mm\"}}
',\n maxWidth: 125, minWidth: 105, enableHiding:true, visible: true,\n customFormatFn: function (value) {\n if (value != null) {\n var fecha = new Date(value);\n if (fecha.getHours() != 0) {\n return $filter('date')(fecha, 'dd/MM/yy HH:mm');\n } else {\n return $filter('date')(fecha, 'dd/MM/yy');\n }\n\n }\n return \"\";\n },\n },\n {\n name: 'date_to', displayName: $filter('translate')('events.date_to'), enableFiltering: false,\n cellTemplate: '
{{ row.entity.date_to | toLocalDate | date:\"dd/MM/yy\"}}
' +\n '
{{ row.entity.date_to | toLocalDate | date:\"dd/MM/yy HH:mm\"}}
',\n maxWidth: 125, minWidth: 105, enableHiding: true, visible: true,\n customFormatFn: function (value) {\n if (value != null) {\n var fecha = new Date(value);\n if (fecha.getHours() != 0) {\n return $filter('date')(fecha, 'dd/MM/yy HH:mm');\n } else {\n return $filter('date')(fecha, 'dd/MM/yy');\n }\n }\n return \"\";\n },\n enableColumnMenu: false\n },\n {\n name: 'task_status_name', enableFiltering: true, filter: { selectOptions: $scope.statusOptions, type: uiGridConstants.filter.SELECT },\n displayName: $filter('translate')('events.tasks.task_status'), cellTemplate: '' +\n '' +\n '' +\n '
' +\n '
' +\n '
',\n width: 75, enableHiding: true, visible: true,\n enableColumnMenu: false\n },\n {\n name: ' ', width: 40, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionIconTemplate([\n { title: \"\", action: ' ng-click=\"grid.appScope.addTask(row.entity.id, true)\" ng-if=\"grid.appScope.allowWrite && row.entity.id != null\" style=\"padding: 1px 0px\"', cssIconClass: \"fa fa-edit\" },\n { title: \"\", action: 'ng-click=\"grid.appScope.deleteDialog(row.entity.id,row.entity.title);\" ng-if=\"grid.appScope.allowWrite && row.entity.id != null\" style=\"padding: 1px 0px\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n var deferred = $q.defer();\n options.dateFrom1 = $scope.search.dateFrom1;\n options.dateFrom2 = $scope.search.dateFrom2;\n options.dateTo1 = $scope.search.dateTo1;\n options.dateTo2 = $scope.search.dateTo2;\n options.entity_type_id = entity_type_id;\n options.entity_type = entity_type;\n\n return Restangular.all('Tasks').getList(options);\n\n }\n };\n\n\n var addToGantt = function (event_task, event_task_2) {\n if (event_task_2.date_to == null || typeof event_task_2.date_to == \"undefined\") event_task_2.date_to = moment(event_task_2.date_from).add(1, 'days');\n var contentTooltip = \"\";\n contentTooltip += \"\" + event_task_2.title + \"
\"\n contentTooltip += \"Desde: \" + moment(event_task_2.date_from).format(\"DD/MM/YYYY HH:mm\") + \"
\";\n contentTooltip += \"Hasta: \" + moment(event_task_2.date_to).format(\"DD/MM/YYYY HH:mm\") + \"
\"\n contentTooltip += \"Personas: \";\n angular.forEach(event_task_2.FK_tasks_users_tasks, function (user) {\n contentTooltip += user.FK_tasks_users_users.name + \", \";\n });\n contentTooltip = contentTooltip.slice(0, -2);\n\n var color = \"#dddddd\";\n $log.debug(event_task_2.FK_tasks_tasks_status);\n if (typeof (event_task_2.FK_tasks_tasks_status) !== \"undefined\" && event_task_2.FK_tasks_tasks_status != null) {\n if (event_task_2.FK_tasks_tasks_status.code == 'CANCELED') color = \"#ed5565\";\n if (event_task_2.FK_tasks_tasks_status.code == 'COMPLETED') color = \"#1ab394\";\n if (event_task_2.FK_tasks_tasks_status.code == 'PENDING' || event_task_2.FK_tasks_tasks_status.code == 'IN_PROGRESS') color = \"#f8ac59\";\n }\n $scope.gantt_data.push({\n name: event_task_2.title,\n parent: event_task_2.title,\n tasks: [{\n task_id: event_task_2.id,\n name: event_task_2.title,\n color: color,\n progress: (typeof (event_task_2.FK_tasks_tasks_status) !== \"undefined\" && event_task_2.FK_tasks_tasks_status != null && event_task_2.FK_tasks_tasks_status.code == 'IN_PROGRESS') ? event_task_2.work_progress : \"\",\n content: \"\" + event_task_2.title + \"\",\n contentTooltip: $sce.trustAsHtml(contentTooltip),\n from: moment(event_task_2.date_from),\n to: moment(event_task_2.date_to)\n }]\n });\n }\n\n //API gantt\n $scope.registerApi = function (api) {\n $log.debug(\"registerApi\");\n $scope.api = api;\n api.directives.on.new($scope, function (dName, dScope, dElement, dAttrs, dController) {\n if (dName === 'ganttTask') {\n dElement.bind('click', function (event) { \n $log.debug(\"entra aqui en task-list.js linea324\");\n $scope.addTask(dScope.task.model.task_id);\n\n });\n }\n });\n };\n\n\n $scope.addTask = function (id, edit = false) {\n $log.debug(id);\n $log.debug(edit);\n // if ($scope.allowWrite && ((edit && id != null) || !edit)) {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: TaskModalView,\n controller: \"TaskModalCtrl\",\n size: 'lg',\n resolve: {\n task_id: function () {\n return id;\n },\n entity_type: function () {\n return entity_type;\n },\n entity_type_id: function () {\n return entity_type_id;\n },\n type: function () {\n return \"task\";\n },\n show_groups: function () {\n return $scope.show_groups;\n }\n }\n\n });\n\n //Retorno de los datos desde el modal.\n $modalInstance.result.then(function (resultModal) {\n //if ($state.current.name == 'events.edit.tasks') {\n if (angular.isDefined($scope.gridOptionsTasks.gridApi)) {\n $scope.gridOptionsTasks.gridApi.core.raise.itemChanged($scope);\n if ($scope.show_groups) $scope.gridOptionsTasks.gridApi.treeBase.expandAllRows();\n }\n //} \n\n if (typeof $scope.refetchEvents == 'function') $scope.refetchEvents();\n\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n // $scope.identity = {};\n });\n // }\n };\n\n /*\n * Si lleva el parámetro abro el elemento\n */\n if (angular.isDefined($stateParams.taskId) && $stateParams.taskId != null && $stateParams.taskId != \"\")\n $scope.addTask($stateParams.taskId)\n\n\n $scope.addTaskGroup = function (id) {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: TaskModalView,\n controller: \"TaskModalCtrl\",\n size: 'lg',\n resolve: {\n task_id: function () {\n return id;\n },\n entity_type: function () {\n return entity_type;\n },\n entity_type_id: function () {\n return entity_type_id;\n },\n type: function () {\n return \"group\";\n },\n show_groups: function () {\n return $scope.show_groups;\n }\n }\n\n });\n\n //Retorno de los datos desde el modal.\n $modalInstance.result.then(function (resultModal) {\n if (angular.isDefined($scope.gridOptionsTasks.gridApi)) {\n $scope.gridOptionsTasks.gridApi.core.raise.itemChanged($scope);\n if ($scope.show_groups) $scope.gridOptionsTasks.gridApi.treeBase.expandAllRows();\n }\n if (typeof $scope.refetchEvents == 'function') $scope.refetchEvents();\n\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n // $scope.identity = {};\n });\n };\n\n\n //Delete desde el listado\n $scope.deleteDialog = function (id, title) {\n \n modalService.confirm({\n title: $filter('translate')('events.tasks.button_delete'),\n message: $filter('translate')('events.tasks.delete_message') + \" \" + title + \"?\",\n onAccept: function () {\n Restangular.one('Tasks', id).remove().then(function () {\n toastr.success($filter('translate')('events.tasks.deleted_success'));\n if (angular.isDefined($scope.gridOptionsTasks.gridApi)) {\n $scope.gridOptionsTasks.gridApi.core.raise.itemChanged($scope);\n if ($scope.show_groups) $scope.gridOptionsTasks.gridApi.treeBase.expandAllRows();\n // $scope.gridOptionsTasks.loadData();\n\n }\n }, function (response) {\n $log.error(\"Error with status code\", response.status);\n alert(\"Error al borrar\")\n });\n }\n });\n }; \n \n $scope.export = function () {\n var options = {\n filters: {\n }\n }; \n datasetsService.exportByType(\"tasks\", options);\n };\n\n }])\n\n .controller(\"TaskModalCtrl\", ['LoginService', '$scope', '$uibModalInstance', 'Restangular', 'modalService', '$filter', '$http', '$stateParams', '$q', 'task_id', 'entity_type', 'entity_type_id', 'type', 'show_groups', 'uiSliderConfig', '$uibModal', '$log',\n function (LoginService, $scope, $uibModalInstance, Restangular, modalService, $filter, $http, $stateParams, $q, task_id, entity_type, entity_type_id, type, show_groups, uiSliderConfig, $uibModal, $log) {\n \n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"TASKS_WRITE\");\n $scope.send_notifications = false;\n $scope.task = {};\n $scope.selectedUsersIdS = [];\n $scope.type = type; \n $scope.show_groups = show_groups;\n $scope.selectTaskGroups = [];\n $scope.borderRight = {\"border-right\":\"none\"};\n $scope.widthGanttContainer = \"10000px\"; //var widthShow = angular.element(\"#gantt-container-shown .gantt-side\").width() + angular.element('#gantt-container-shown .gantt-scrollable-header').width();\n\n $scope.GanttContainerStyle = {\n \"width\": \"4000px\"\n }\n\n $log.debug(task_id);\n \n if (angular.isUndefined(task_id) || task_id == null) {\n $scope.task.entity_type = entity_type;\n $scope.task.entity_type_id = entity_type_id;\n $scope.task.all_day = true; \n $scope.task.work_progress = 0;\n $scope.task.task_id = 0;\n \n Restangular.all('Users').getList().then(function (results) {\n $scope.selectUsers = results; \n });\n\n if ($scope.type == \"task\") {\n let params = {\n entity_type: entity_type,\n entity_type_id: entity_type_id,\n is_group: true\n }\n Restangular.all('Tasks').getList(params).then(function (results) {\n $scope.selectTaskGroups = results;\n var withoutGroup = {\n id: 0,\n title: $filter('translate')('events.tasks.without_group'),\n is_group: true\n };\n $scope.selectTaskGroups.unshift(withoutGroup);\n if (!$scope.$$phase) $scope.$apply();\n });\n }\n } else {\n \n Restangular.one('Tasks', task_id).get().then(function (results) {\n $scope.task = results;\n \n if ($scope.task.task_id == null) $scope.task.task_id = 0;\n \n if ($scope.type == \"task\") {\n let params = {\n entity_type: $scope.task.entity_type,\n entity_type_id: $scope.task.entity_type_id,\n is_group: true\n }\n Restangular.all('Tasks').getList(params).then(function (results) {\n $scope.selectTaskGroups = results;\n var withoutGroup = {\n id: 0,\n title: $filter('translate')('events.tasks.without_group'),\n is_group: true\n };\n $scope.selectTaskGroups.unshift(withoutGroup);\n if (!$scope.$$phase) $scope.$apply();\n });\n }\n \n if (!$scope.task.is_group) { \n $scope.type = \"task\";\n $scope.newActivity = \"\";\n $scope.borderRight = { \"border-right\": \"1px solid #e7eaec\" };\n Restangular.all('TasksActivities').getList({ task_id: $scope.task.id }).then(function (activities) {\n $scope.activities = activities;\n })\n } else {\n $scope.type = \"group\";\n }\n if ($scope.task.date_from != null) {\n $scope.task.date_from = new Date($scope.task.date_from);\n }\n if ($scope.task.date_to != null) {\n $scope.task.date_to = new Date($scope.task.date_to);\n }\n \n angular.forEach($scope.task.FK_tasks_users_tasks, function (taskUser) {\n $scope.selectedUsersIdS.push(taskUser.FK_tasks_users_users.id);\n });\n Restangular.all('Users').getList().then(function (results) {\n $scope.selectUsers = results;\n $scope.task.selected_users = [];\n angular.forEach($scope.selectUsers, function (user) {\n if ($scope.selectedUsersIdS.indexOf(user.id) != -1) {\n $scope.task.selected_users.push(user);\n }\n }); \n });\n });\n }\n\n $scope.slider = {\n options: {\n min: 0,\n max: 100,\n range: 'min', \n }\n }\n\n $scope.setPrice = function (price) {\n $scope.price = price;\n }\n\n //var entityType = (angular.isUndefined(task_id) ? entity_type : $scope.task.entity_type); // si estás editando, pones el de la edición, sino el que llega.\n Restangular.all('TasksTypes').getList({ entity_type: entity_type }).then(function (results) {\n $scope.selectTaskTypes = results;\n if (results.length == 1 && (angular.isUndefined(task_id) || task_id == null)) {\n //lo preseleccionamos por defeco.\n $scope.task.FK_tasks_tasks_types = results[0];\n }\n });\n \n Restangular.all('TasksStatus').getList({ entity_type: entity_type }).then(function (results) {\n $scope.selectTaskStatus = results;\n if (angular.isUndefined($scope.task.id)) {\n $scope.task.FK_tasks_tasks_status = $scope.selectTaskStatus[0];\n }\n });\n\n $scope.saveTask = function () {\n if ($scope.task.task_id == 0) $scope.task.task_id = null;\n $scope.task.FK_tasks_users_tasks = [];\n if ($scope.type == \"group\") {\n $scope.task.is_group = 1;\n } else {\n $scope.task.task_type_id = (typeof ($scope.task.FK_tasks_tasks_types) !== \"undefined\" && $scope.task.FK_tasks_tasks_types != null ? $scope.task.FK_tasks_tasks_types.id : null);\n $scope.task.task_status_id = (typeof ($scope.task.FK_tasks_tasks_status) !== \"undefined\" && $scope.task.FK_tasks_tasks_status != null ? $scope.task.FK_tasks_tasks_status.id : null);\n angular.forEach($scope.task.selected_users, function (user) {\n $scope.task.FK_tasks_users_tasks.push({\n task_id: $scope.task.id,\n user_id: user.id\n })\n })\n }\n if ($scope.task.date_from > $scope.task.date_to) {\n let hour = $scope.task.date_to.getHours();\n let minutes = $scope.task.date_to.getMinutes();\n\n $scope.task.date_to = angular.copy($scope.task.date_from);\n $scope.task.date_to.setHours(hour);\n $scope.task.date_to.setMinutes(minutes);\n } \n\n\n if (angular.isDefined($scope.task.id)) {\n $scope.task.put().then(function (result) {\n if (angular.isDefined(result.id)) { \n $uibModalInstance.close();\n toastr.success($filter('translate')('events.tasks.edit_success'));\n } \n });\n } else {\n Restangular.all('Tasks').post($scope.task).then(function (result) {\n if (angular.isDefined(result.id)) {\n $uibModalInstance.close();\n toastr.success($filter('translate')('events.tasks.add_success'));\n\n } \n });\n }\n }\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n //Delete desde el popup\n $scope.checkDeleteTask = function () {\n modalService.confirm({\n title: $filter('translate')('events.tasks.button_delete'),\n message: $filter('translate')('events.tasks.delete_message') + \" \" + $scope.task.title + \"?\",\n onAccept: function () {\n Restangular.one('Tasks', $scope.task.id).remove({send_notifications : $scope.task.send_notifications}).then(function () {\n //$scope.task.remove().then(function () { \n $uibModalInstance.close();\n if (typeof $scope.refetchEvents == 'function') $scope.refetchEvents();\n });\n }\n });\n };\n\n // Gestión de actividades sobre una tarea\n $scope.addActivity = function (newActivity) {\n \n $scope.activity = {\n title: newActivity,\n task_id: $scope.task.id\n }\n Restangular.all('TasksActivities').post($scope.activity).then(function (result) {\n $scope.activities = result;\n delete $scope.newActivity; \n }); \n }\n\n $scope.deleteActivity = function (id) {\n Restangular.one('TasksActivities', id).remove().then(function (result) {\n $scope.activities = result;\n });\n }\n\n $scope.showHistory = function (id) {\n $log.debug(\"TODO: falta ver que histórico se pretende mostra aqui....\")\n\n }\n \n}])\n\n;\n\n;","\nimport TasksModalView from \"./tasks-modal.html\";\n\nangular.module(\"tasks\")\n .factory(\"tasksService\", ['$injector', function ($injector) {\n var instance = null;\n function remove() {\n instance = null;\n }\n var service = {\n tasks: function (entity_type, entity_type_id) {\n if (instance != null) return;\n var $uibModal = $injector.get(\"$uibModal\");\n instance = $uibModal.open({\n animation: true,\n template: TasksModalView,\n controller: 'TasksListCtrl',\n size: 'lg',\n resolve: {\n entity_type: function () { return entity_type; },\n entity_type_id: function () { return entity_type_id; }\n }\n });\n instance.result.then(function (result) {\n remove();\n }, function () {\n remove();\n })\n },\n onClose: function () {\n instance.close();\n }\n };\n return service;\n }])\n\n .directive('tasksDirective', [function() {\n 'use strict';\n return {\n restrict: 'E',\n scope: {\n to: \"=\",\n }, \n replace: true,\n controller: 'TasksListCtrl',\n /*link: function (scope, elem, attrs) {\n if (!attrs.entitytype) {\n throw \"Tiene que tener 'entitytype'\";\n }\n $log.debug(attrs);\n },*/\n resolve: function (attrs) {\n return {\n entitytype: function () { return attrs.entity_type; },\n entitytypeid: function () { return attrs.entity_type_id; }\n }\n },\n template: TasksModalView,\n };\n}]);\n ;","\nimport BreadcrumbView from \"../common/breadcrumb/breadcrumb.html\";\nimport TasksListView from \"./tasks-list.html\";\n\nangular.module(\"tasks\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('tasks', {\n url: \"/tasks\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n })\n\n .state('tasks.list', {\n url: \"/list/:entity_type/:entity_type_id\",\n controller: \"TasksListCtrl\", \n template: TasksListView,\n cache: false,\n resolve: {\n entity_type: ['$stateParams', '$log', function ($stateParams, $log) {\n $log.debug($stateParams.entity_type);\n if (angular.isDefined($stateParams.entity_type) && $stateParams.entity_type != \"\") {\n return $stateParams.entity_type;\n }\n return null;\n }],\n entity_type_id: ['$stateParams', '$log', function ($stateParams, $log) {\n if (angular.isDefined($stateParams.entity_type_id) && $stateParams.entity_type_id != \"\") {\n return $stateParams.entity_type_id;\n }\n return null;\n }]\n },\n requiredPermission: [\"TASKS_READ\"]\n })\n }])\n ;","import './tasks_status';\nimport './tasks_status-list';\nimport './tasks_status-edit'; ","angular.module(\"tasks_status\")\n\n .controller(\"TasksStatusEditCtrl\", ['LoginService', '$scope', '$rootScope', '$state', '$stateParams', 'Restangular', '$filter', 'modalService', function (LoginService, $scope, $rootScope, $state, $stateParams, Restangular, $filter, modalService) {\n \n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"TASKS_STATUS_WRITE\");\n $rootScope.title = $filter('translate')('tasks_status.title');\n\n $scope.task_status = {};\n $scope.selectEntityTypes = [{ id: 'events', name: $filter(\"translate\")('entity_types.events') }, { id: 'correspondence', name: $filter(\"translate\")('entity_types.correspondence') }, { id: 'general', name: $filter(\"translate\")('entity_types.general') }];\n\n if (angular.isUndefined($stateParams.id) || $stateParams.id == \"\") {\n \n $rootScope.breadcrumb = [\n { title: $filter('translate')('tasks_status.title'), url: \"tasks_status.list\" },\n { title: $filter('translate')('tasks_status.title_add') },\n ];\n \n } else {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('tasks_status.title'), url: \"tasks_status.list\" },\n { title: $filter('translate')('tasks_status.title_edit') },\n ];\n\n Restangular.one('TasksStatus', $stateParams.id).get().then(function (result) {\n \n $scope.task_status = result; \n });\n } \n \n $scope.saveTaskStatus = function () { \n if (angular.isDefined($scope.task_status.id)) {\n $scope.task_status.put().then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('tasks_status.edit_success')); \n $state.go(\"tasks_status.list\");\n } else {\n $scope.errorMessage = result.message;\n }\n });\n } else {\n Restangular.all('TasksStatus').post($scope.task_status).then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('tasks_status.save_success'));\n $state.go(\"tasks_status.list\");\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n }\n\n $scope.checkDelete = function () {\n modalService.confirm({\n title: $filter('translate')('tasks_status.button_delete'),\n message: $filter('translate')('tasks_status.delete_message') + \" \" + $scope.task_status.name + \"?\",\n onAccept: function () {\n $scope.task_status.remove().then(function () {\n toastr.success($filter('translate')('tasks_status.deleted_success'));\n $state.go(\"tasks_status.list\");\n });\n }\n });\n }; \n\n}])\n\n;\n\n","angular.module(\"tasks_status\")\n\n .controller(\"TasksStatusListCtrl\", ['LoginService', '$rootScope', '$scope', 'Restangular', 'gridService', 'modalService', '$filter', '$state', function (LoginService, $rootScope, $scope, Restangular, gridService, modalService, $filter, $state) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"TASKS_STATUS_WRITE\");\n\n $rootScope.title = $filter('translate')('tasks_status.title');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('tasks_status.title') }\n ];\n\n $scope.selectEntityTypes = [{ id: null, name: $filter(\"translate\")('entity_types.all') }, { id: 'events', name: $filter(\"translate\")('entity_types.events') }, { id: 'correspondence', name: $filter(\"translate\")('entity_types.correspondence') }, { id: 'general', name: $filter(\"translate\")('entity_types.general') }];\n $scope.search = { entity_type: null };\n $scope.gridOptionsTasksStatus = {\n pdfTitle: $filter('translate')('tasks_status.pdf_title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n enableSorting: true, \n paginationPageSizes: [20, 40, 60],\n paginationPageSize: 20,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n { name: 'entity_type', displayName: $filter('translate')('tasks_status.entity_type'), cellTemplate: gridService.entityTypeTemplate('entity_type'), enableFiltering: false, enableHiding: false, width: 120 },\n { name: 'name', displayName: $filter('translate')('tasks_status.name'), enableFiltering: true, enableHiding: false },\n { name: 'is_initial', displayName: $filter('translate')('tasks_status.is_initial'), cellTemplate: gridService.yesNoTemplate('is_initial'), enableFiltering: false, enableHiding: true, width: 100 },\n { name: 'is_final', displayName: $filter('translate')('tasks_status.is_final'), cellTemplate: gridService.yesNoTemplate('is_final'), enableFiltering: false, enableHiding: true, width: 100 },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('tasks_status.button_edit'), action: 'ui-sref=\"tasks_status.edit({id:row.entity.id})\"', cssClass: \"btn btn-xs btn-default btn-outline btn-custom-laptop\", cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('tasks_status.button_delete'), action: 'ng-click=\"grid.appScope.deleteDialog(row.entity.id,row.entity.name);\" ng-if=\"grid.appScope.allowWrite\"', cssClass: \"btn btn-xs btn-default btn-outline btn-custom-laptop\", cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n options.entity_type = $scope.search.entity_type;\n return Restangular.all('TasksStatus').getList(options);\n }\n };\n\n $scope.goToEdit = function (rowEntity) {\n $state.go(\"tasks_status.edit\", { id: rowEntity.id });\n }\n\n $scope.loadData = function () {\n $scope.gridOptionsTasksStatus.loadData(false);\n }\n\n $scope.deleteDialog = function (id, name) {\n $scope.id = id;\n $scope.name = name;\n modalService.confirm({\n title: $filter('translate')('tasks_status.button_delete'),\n message: $filter('translate')('tasks_status.delete_message') + \" \" + $scope.name + \"?\",\n onAccept: function () {\n Restangular.one('TasksStatus', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('tasks_status.deleted_success'));\n $scope.gridOptionsTasksStatus.gridApi.core.raise.itemDeleted($scope);\n \n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n });\n\n };\n \n }])\n\n;","\nimport BreadcrumbView from \"../common/breadcrumb/breadcrumb.html\";\nimport TasksStatusListView from \"./tasks_status-list.html\";\nimport TasksStatusEditView from \"./tasks_status-edit.html\";\n\nangular.module(\"tasks_status\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('tasks_status', {\n url: \"/tasks_status\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n })\n\n .state('tasks_status.list', {\n url: \"/list\",\n controller: \"TasksStatusListCtrl\",\n template: TasksStatusListView,\n requiredPermission: [\"TASKS_STATUS_READ\"]\n }) \n .state('tasks_status.edit', {\n url: \"/edit/:id\",\n controller: \"TasksStatusEditCtrl\",\n template: TasksStatusEditView,\n requiredPermission: [\"TASKS_STATUS_READ\"]\n })\n }])\n;","import './tasks_types';\nimport './tasks_types-list';\nimport './tasks_types-edit'; ","angular.module(\"tasks_types\")\n\n .controller(\"TasksTypesEditCtrl\", ['LoginService', '$scope', '$rootScope', '$state', '$stateParams', 'Restangular', '$filter', 'modalService',\n function (LoginService, $scope, $rootScope, $state, $stateParams, Restangular, $filter, modalService) {\n \n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"TASKS_TYPES_WRITE\");\n $rootScope.title = $filter('translate')('tasks_types.title');\n\n $scope.task_types = {};\n $scope.selectEntityTypes = [{ id: 'events', name: $filter(\"translate\")('entity_types.events') }, { id: 'correspondence', name: $filter(\"translate\")('entity_types.correspondence') }];;\n\n if (angular.isUndefined($stateParams.id) || $stateParams.id == \"\") {\n \n $rootScope.breadcrumb = [\n { title: $filter('translate')('tasks_types.title'), url: \"tasks_types.list\" },\n { title: $filter('translate')('tasks_types.title_add') },\n ];\n \n } else {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('tasks_types.title'), url: \"tasks_types.list\" },\n { title: $filter('translate')('tasks_types.title_edit') },\n ];\n\n Restangular.one('TasksTypes', $stateParams.id).get().then(function (result) { \n $scope.task_types = result; \n });\n } \n \n $scope.saveTaskTypes = function () { \n if (angular.isDefined($scope.task_types.id)) {\n $scope.task_types.put().then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('tasks_types.edit_success')); \n $state.go(\"tasks_types.list\");\n } else {\n $scope.errorMessage = result.message;\n }\n });\n } else {\n Restangular.all('TasksTypes').post($scope.task_types).then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('tasks_types.save_success'));\n $state.go(\"tasks_types.list\");\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n }\n\n $scope.checkDelete = function () {\n modalService.confirm({\n title: $filter('translate')('tasks_types.button_delete'),\n message: $filter('translate')('tasks_types.delete_message') + \" \" + $scope.task_types.name + \"?\",\n onAccept: function () {\n $scope.task_types.remove().then(function () {\n toastr.success($filter('translate')('tasks_types.deleted_success'));\n $state.go(\"tasks_types.list\");\n });\n }\n });\n }; \n\n}])\n\n;\n\n","angular.module(\"tasks_types\")\n\n .controller(\"TasksTypesListCtrl\", ['LoginService', '$rootScope', '$scope', '$http', '$interval', '$q', 'i18nService', 'Restangular', 'gridService', 'modalService', '$uibModal', '$filter', '$translate','$state',\n function (LoginService, $rootScope, $scope, $http, $interval, $q, i18nService, Restangular, gridService, modalService, $uibModal, $filter, $translate, $state) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"TASKS_TYPES_WRITE\");\n\n $rootScope.title = $filter('translate')('tasks_types.title');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('tasks_types.title') }\n ];\n $scope.selectEntityTypes = [{ id: null, name: $filter(\"translate\")('entity_types.all') }, { id: 'events', name: $filter(\"translate\")('entity_types.events') }, { id: 'correspondence', name: $filter(\"translate\")('entity_types.correspondence') }];;\n $scope.search = { entity_type: null };\n\n $scope.gridOptionsTasksTypes = {\n pdfTitle: $filter('translate')('tasks_types.pdf_title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n enableSorting: true, \n paginationPageSizes: [20, 40, 60],\n paginationPageSize: 20,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n { name: 'entity_type', displayName: $filter('translate')('tasks_types.entity_type'), cellTemplate: gridService.entityTypeTemplate('entity_type'), enableFiltering: false, enableHiding: false, width: 120 },\n { name: 'color', displayName: $filter('translate')('tasks_types.color'), enableFiltering: false, cellTemplate: gridService.colorTemplate(\"color\"), maxWidth: 30},\n { name: 'name', displayName: $filter('translate')('tasks_types.name'), enableFiltering: true, enableHiding: false },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('tasks_types.button_edit'), action: 'ui-sref=\"tasks_types.edit({id:row.entity.id})\"', cssIconClass: \"fa fa-edit\", cssClass: \"btn btn-xs btn-default btn-outline btn-custom-laptop\" },\n { title: $filter('translate')('tasks_types.button_delete'), action: 'ng-click=\"grid.appScope.deleteDialog(row.entity.id,row.entity.name);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\", cssClass: \"btn btn-xs btn-default btn-outline btn-custom-laptop\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) { \n options.entity_type = $scope.search.entity_type;\n\n return Restangular.all('TasksTypes').getList(options);\n }\n };\n\n $scope.goToEdit = function (rowEntity) {\n $state.go(\"tasks_types.edit\", { id: rowEntity.id });\n }\n\n $scope.loadData = function () {\n $scope.gridOptionsTasksTypes.loadData(false);\n }\n\n $scope.deleteDialog = function (id, name) {\n $scope.id = id;\n $scope.name = name;\n modalService.confirm({\n title: $filter('translate')('tasks_types.button_delete'),\n message: $filter('translate')('tasks_types.delete_message') + \" \" + $scope.name + \"?\",\n onAccept: function () {\n Restangular.one('TasksTypes', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('tasks_types.deleted_success'));\n $scope.gridOptionsTasksTypes.gridApi.core.raise.itemDeleted($scope);\n \n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n });\n\n };\n \n }])\n\n;","\nimport BreadcrumbView from \"../common/breadcrumb/breadcrumb.html\";\nimport TasksTypesListView from \"./tasks_types-list.html\";\nimport TasksTypesEditView from \"./tasks_types-edit.html\";\n\nangular.module(\"tasks_types\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('tasks_types', {\n url: \"/tasks_types\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n })\n\n .state('tasks_types.list', {\n url: \"/list\",\n controller: \"TasksTypesListCtrl\",\n template: TasksTypesListView,\n requiredPermission: [\"TASKS_TYPES_READ\"]\n }) \n .state('tasks_types.edit', {\n url: \"/edit/:id\",\n controller: \"TasksTypesEditCtrl\",\n template: TasksTypesEditView,\n requiredPermission: [\"TASKS_TYPES_READ\"]\n })\n }])\n;","import './templates';\nimport './templates-list';\nimport './templates-edit'; ","angular.module(\"templates\")\n\n .controller(\"TemplatesEditCtrl\", ['LanguagesService', 'LoginService', '$scope', '$rootScope', '$state', '$stateParams', 'Restangular', 'gridService', '$filter', '$translate', 'modalService', '$uibModal', 'BeeService', '$log',\n function (LanguagesService, LoginService, $scope, $rootScope, $state, $stateParams, Restangular, gridService, $filter, $translate, modalService, $uibModal, BeeService, $log) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"TEMPLATES_WRITE\");\n\n $rootScope.title = $filter('translate')('templates.title');\n\n $scope.tinymceOptions = {\n resize: true,\n //forced_root_block: false,\n\n relative_urls: false,\n convert_urls: false,\n remove_script_host: false,\n\n height: \"600\",\n body_class: 'custom_tinymce_content',\n //valid_classes: 'razor_expression',\n language: 'es',\n paste_as_text: true,\n plugins: 'paste autoresize textcolor image lists advlist table noneditable code link fullpage',\n toolbar: \"undo redo | alignleft aligncenter alignright alignjustify | bold italic forecolor backcolor fontsizeselect | bullist numlist outdent indent link | table | image | code\",\n menubar: false,\n statusbar: false,\n setup: function (editor) {\n }\n };\n\n $scope.template = {\n FK_templates_tl_templates: []\n };\n \n $scope.loadBee = false;\n\n if(!$scope.loadBee) {\n LanguagesService.languages().then(function (languages) {\n angular.forEach(languages, function (language) {\n let tl = $scope.template.FK_templates_tl_templates.filter(tl => tl.language_id === language.id);\n if(tl === null || tl === undefined) {\n $scope.template.FK_templates_tl_templates.push({language_id: language.id, html: \"\"});\n }\n });\n });\n }\n\n if (angular.isUndefined($stateParams.id) || $stateParams.id == \"\") {\n\n $rootScope.breadcrumb = [\n {title: $filter('translate')('templates.title'), url: \"templates.list\"},\n {title: $filter('translate')('templates.title_add')},\n ];\n \n $scope.loadBee = true;\n BeeService.start({});\n } else {\n $rootScope.breadcrumb = [\n {title: $filter('translate')('templates.title'), url: \"templates.list\"},\n {title: $filter('translate')('templates.title_edit')},\n ];\n\n Restangular.one('Templates', $stateParams.id).get().then(function (result) {\n $scope.template = result;\n $log.debug($scope.template.FK_templates_tl_templates);\n if($scope.template.FK_templates_tl_templates[0].json != null && $scope.template.FK_templates_tl_templates[0].json != \"\") {\n $scope.loadBee = true;\n BeeService.start(JSON.parse($scope.template.FK_templates_tl_templates[0].json));\n }\n });\n }\n\n $scope.saveTemplate = function () {\n if($scope.loadBee) {\n BeeService.save().then(function (result) {\n LanguagesService.languages().then(function (languages) {\n angular.forEach(languages, function (language) {\n let tl = $scope.template.FK_templates_tl_templates.filter(tl => tl.language_id === language.id);\n if(tl === null || tl === undefined || tl.length === 0) {\n let tl = {\n language_id: language.id,\n html: result.html,\n json: result.json\n };\n $scope.template.FK_templates_tl_templates.push(tl);\n } else {\n $log.debug(tl);\n tl[0].html = result.html;\n tl[0].json = result.json;\n }\n });\n $scope.saveOrUpdate();\n });\n });\n } else {\n $scope.saveOrUpdate();\n }\n };\n\n $scope.saveOrUpdate = function() {\n if (angular.isDefined($stateParams.id) && $stateParams.id != \"\") {\n $scope.template.put().then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('templates.save_success'));\n $state.go(\"templates.list\");\n } else {\n $scope.errorMessage = result.message;\n }\n });\n } else {\n Restangular.all('Templates').post($scope.template).then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('templates.edit_success'));\n $state.go(\"templates.list\");\n } else {\n $scope.errorMessage = result.message;\n }\n });\n } \n }\n \n $scope.checkDelete = function () {\n modalService.confirm({\n title: $filter('translate')('templates.button_delete'),\n message: $filter('translate')('templates.delete_message') + \" \" + $scope.template.name + \"?\",\n onAccept: function () {\n $scope.template.remove().then(function () {\n toastr.success($filter('translate')('templates.deleted_success'));\n $state.go(\"templates.list\");\n });\n }\n });\n };\n \n $scope.copyToClipboard = function () {\n BeeService.save().then(function (result) {\n var copyElement = document.createElement(\"textarea\");\n copyElement.style.position = 'fixed';\n copyElement.style.opacity = '0';\n copyElement.textContent = result.json;\n var body = document.getElementsByTagName('body')[0];\n body.appendChild(copyElement);\n copyElement.select();\n document.execCommand('copy');\n body.removeChild(copyElement);\n });\n };\n\n $scope.readFromClipboard = function () {\n navigator.clipboard.readText().then(text => {\n BeeService.reload(JSON.parse(text));\n });\n };\n\n\n }])\n;\n\n","angular.module(\"templates\")\n\n .controller(\"TemplatesListCtrl\", ['LoginService', '$rootScope', '$scope', '$http', '$interval', '$q', 'i18nService', 'Restangular', 'gridService', 'modalService', '$uibModal', '$filter', '$translate', '$state',\n function (LoginService, $rootScope, $scope, $http, $interval, $q, i18nService, Restangular, gridService, modalService, $uibModal, $filter, $translate, $state) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"TEMPLATES_WRITE\");\n\n $rootScope.title = $filter('translate')('templates.title');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('templates.title') }\n ];\n\n $scope.gridOptionsTemplates = {\n\n pdfTitle: $filter('translate')('templates.title'),\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n enableSorting: true,\n paginationPageSizes: [20, 40, 60],\n paginationPageSize: 20,\n rowTemplate: '
',\n\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n { name: 'name', displayName: $filter('translate')('templates.name'), enableFiltering: true, enableHiding: false, enableSorting: true },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('documents_reports.button_duplicate'), action: 'ng-click=\"grid.appScope.duplicate(row.entity.id)\"', cssIconClass: \"fa fa-copy\" },\n { title: $filter('translate')('templates.button_edit'), action: 'ui-sref=\"templates.edit({id:row.entity.id})\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('templates.button_delete'), action: 'ng-click=\"grid.appScope.deleteDialog(row.entity.id,row.entity.name);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n\n getData: function (options) {\n return Restangular.all('Templates').getList(options);\n }\n\n };\n\n $scope.goToEdit = function (rowEntity) {\n $state.go(\"templates.edit\", { id: rowEntity.id });\n };\n\n\n $scope.deleteDialog = function (id, name) {\n $scope.id = id;\n $scope.name = name;\n modalService.confirm({\n title: $filter('translate')('templates.button_delete'),\n message: $filter('translate')('templates.delete_message') + \" \" + $scope.name + \"?\",\n onAccept: function () {\n Restangular.one('Templates', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('templates.deleted_success'));\n $scope.gridOptionsTemplates.gridApi.core.raise.itemDeleted($scope);\n\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n });\n\n };\n\n $scope.duplicate = function (id) {\n Restangular.all('Templates').customPOST({}, \"DuplicateTemplate\", { id: id }).then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('templates.create_success'));\n $scope.gridOptionsTemplates.loadData();\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n\n }])\n\n;","\nimport BreadcrumbView from \"../common/breadcrumb/breadcrumb.html\";\nimport TemplatesListView from \"./templates-list.html\";\nimport TemplatesEditView from \"./templates-edit.html\";\n\nangular.module(\"templates\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('templates', {\n url: \"/templates\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n })\n\n .state('templates.list', {\n url: \"/list\",\n controller: \"TemplatesListCtrl\",\n template: TemplatesListView,\n cache: false,\n requiredPermission: [\"TEMPLATES_READ\"]\n }) \n .state('templates.edit', {\n url: \"/edit/:id\",\n controller: \"TemplatesEditCtrl\",\n template: TemplatesEditView,\n cache: false,\n requiredPermission: [\"TEMPLATES_READ\"]\n })\n }])\n;","import './update';\nimport './update-list'; ","angular.module(\"update\")\n\n .controller(\"UpdateListCtrl\", ['$rootScope', '$scope', 'UpdateService', '$filter', function ($rootScope, $scope, UpdateService, $filter) {\n \n $rootScope.title = $filter('translate')('update.title');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('update.new_version') }\n ];\n\n $scope.version = UpdateService.version;\n $rootScope.$watch(\"version\", function () {\n $scope.version = UpdateService.version;\n if (!$scope.$$phase) $scope.$apply();\n });\n\n $scope.update = function () {\n UpdateService.update()\n };\n\n $scope.download = function () {\n UpdateService.download()\n };\n \n }])\n\n;","\nimport BreadcrumbView from \"../common/breadcrumb/breadcrumb.html\";\nimport UpdateListView from \"./update-list.html\";\n\nangular.module(\"update\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('update', {\n url: \"/update\",\n abstract: true,\n cache: false,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n })\n .state('update.list', {\n url: \"/list\",\n cache: false,\n controller: \"UpdateListCtrl\",\n template: UpdateListView,\n data: { pageTitle: \"Actualización\" }\n })\n ;\n }])\n;","import \"./users\";\nimport \"./users-list\";\nimport \"./users-edit\";\nimport \"./roles/roles\";\nimport \"./roles/roles-list\";\nimport \"./roles/roles-edit\";\nimport \"./groups/users_groups\";\nimport \"./groups/users_groups-list\";\nimport \"./groups/users_groups-edit\";\n","angular.module(\"users_groups\")\n\n .controller(\"usersGroupsEditCtrl\", ['LoginService', '$scope', '$rootScope', '$controller', '$state', '$stateParams', 'Restangular', '$uibModal', 'modalService', '$compile', 'gridService', '$filter', '$translate', function (LoginService, $scope, $rootScope, $controller, $state, $stateParams, Restangular, $uibModal, modalService, $compile, gridService, $filter, $translate) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"USERS_WRITE\");\n $rootScope.title = $filter('translate')('users_groups.title');\n\n $scope.user_group_id = $stateParams.id;\n\n if (angular.isUndefined($stateParams.id) || $stateParams.id == \"\") {\n\n $rootScope.breadcrumb = [\n { title: $filter('translate')('users_groups.title'), url: \"users_groups.list\" },\n { title: $filter('translate')('general.add') },\n ];\n $scope.user_group = {};\n } else {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('users_groups.title'), url: \"users_groups.list\" },\n { title: $filter('translate')('general.edit') },\n ];\n\n Restangular.one('UsersGroups', $stateParams.id).get().then(function (results) {\n $scope.user_group = results;\n });\n }\n\n\n $scope.save = function (frmBudgetGroups) {\n\n if (!angular.isUndefined($scope.user_group.id)) {\n $scope.user_group.put().then(function (result) {\n if (typeof (result.id) != \"undefined\") {\n toastr.success($filter('translate')('users_groups.modified_success'));\n $state.go(\"users_groups.list\");\n } else {\n $scope.errorMessage = result.message;\n }\n });\n } else {\n Restangular.all('UsersGroups').post($scope.user_group).then(function (result) {\n if (typeof (result.id) != \"undefined\") {\n toastr.success($filter('translate')('users_groups.created_success'));\n $state.go(\"users_groups.list\");\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n }\n\n $scope.checkDelete = function () {\n modalService.confirm({\n title: $filter('translate')('events_types.button_delete'),\n message: $filter('translate')('users_groups.delete_message') + \" \" + $scope.user_group.name + \"?\",\n onAccept: function () {\n $scope.user_group.remove().then(function () {\n toastr.success($filter('translate')('users_groups.remove_success'));\n $state.go(\"users_groups.list\");\n });\n }\n });\n };\n\n\n\n }])\n\n ;\n\n","angular.module('users_groups')\n\n .controller(\"usersGroupsListCtrl\", ['LoginService', '$rootScope', '$scope', 'Restangular', 'gridService', 'modalService', '$uibModal', '$filter', '$translate', '$state', '$log',\n function (LoginService, $rootScope, $scope, Restangular, gridService, modalService, $uibModal, $filter, $translate, $state, $log) {\n\n\n $rootScope.title = $filter('translate')('users_groups.title');\n $log.debug($filter('translate')('users_groups.title'));\n $rootScope.breadcrumb = [\n { title: $filter('translate')('users_groups.title') }\n ];\n\n $scope.allowWrite = LoginService.permissionExist(\"USERS_WRITE\");\n\n $scope.gridOptions= {\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n enableSorting: true,\n paginationPageSizes: [20, 40, 60],\n paginationPageSize: 20,\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n { name: 'name', displayName: $filter('translate')('general.name'), enableFiltering: true, enableHiding: false },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('general.button_edit'), action: 'ui-sref=\"users_groups.edit({id:row.entity.id})\"; ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('general.button_delete'), action: 'ng-click=\"grid.appScope.deleteDialog(row.entity.id,row.entity.name);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n return Restangular.all('UsersGroups').getList(options)\n }\n };\n\n\n $scope.goToEdit = function (rowEntity) {\n $state.go(\"users_groups.edit\", { id: rowEntity.id });\n };\n\n\n $scope.deleteDialog = function (id, name) {\n $scope.id = id;\n $scope.name = name;\n modalService.confirm({\n title: $filter('translate')('events_types.button_delete'),\n message: $filter('translate')('users_groups.delete_message') + \" \" + $scope.name + \"?\",\n onAccept: function () {\n Restangular.one('UsersGroups', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('users_groups.remove_success'));\n $scope.gridOptions.gridApi.core.raise.itemDeleted($scope);\n\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n });\n\n\n }\n }])","\nimport BreadcrumbView from \"../../common/breadcrumb/breadcrumb.html\";\nimport UsersGroupsListView from \"./users_groups-list.html\";\nimport UsersGroupsEditView from \"./users_groups-edit.html\";\n\nangular.module('users_groups', [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('users_groups', {\n url: \"/users_groups\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n })\n\n .state('users_groups.list', {\n url: \"/list\",\n controller: \"usersGroupsListCtrl\",\n template: UsersGroupsListView,\n requiredPermission: [\"USERS_READ\"]\n })\n\n .state('users_groups.edit', {\n url: \"/edit/:id\",\n controller: \"usersGroupsEditCtrl\",\n template: UsersGroupsEditView,\n requiredPermission: [\"USERS_WRITE\"]\n })\n\n }])\n ;","angular.module(\"roles\")\n\n .controller(\"RolesEditCtrl\", ['$q', 'LoginService', '$scope', '$rootScope', '$controller', '$state', '$stateParams', 'Restangular', '$uibModal', 'modalService', '$timeout', '$filter', '$log',\n function ($q, LoginService, $scope, $rootScope, $controller, $state, $stateParams, Restangular, $uibModal, modalService, $timeout, $filter, $log) {\n \n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"ROLES_WRITE\");\n\n $rootScope.title = $filter(\"translate\")(\"roles.title\"); \n $scope.editCode = true;\n $scope.search = { group_name: \"\" };\n if (angular.isUndefined($stateParams.id) || $stateParams.id == \"\") {\n $rootScope.breadcrumb = [\n { title: $filter(\"translate\")(\"roles.list\"), url: \"roles.list\" },\n { title: $filter(\"translate\")(\"roles.add\") }\n ];\n $scope.role = {};\n\n } else {\n $rootScope.breadcrumb = [\n { title: $filter(\"translate\")(\"roles.list\"), url: \"roles.list\" },\n { title: $filter(\"translate\")(\"roles.edit\") }\n ];\n }\n\n\n\n\n Restangular.all('Permissions').getList().then(function (permissions) {\n $scope.permissions = permissions;\n Restangular.one('Roles', $stateParams.id).get().then(function (results) {\n $scope.role = results;\n angular.forEach($scope.permissions, function (permission) {\n if (permission.group_name == null) permission.group_name = \"Configuración\";\n angular.forEach($scope.role.FK_roles_permissions_roles, function (permission_role) {\n if (permission.id == permission_role.permission_id) {\n permission.checked = true;\n }\n });\n });\n $scope.editCode = LoginService.permissionExist(\"P_MODIFY_CODE_ROLE\");\n $scope.permissionsFromRoleBD = {};\n\n });\n\n });\n\n\n\n /*$scope.gridOptions = {\n pdfTitle: $filter(\"translate\")(\"roles.title\"),\n enablePaginationControls: false,\n showHeader: false,\n enableRowSelection: true,\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false },\n { name: 'name', displayName: $filter(\"translate\")(\"roles.name\") },\n { name: 'description', displayName: $filter(\"translate\")(\"roles.description\") }\n ],\n getData: function (options) {\n\n var deferred = $q.defer();\n\n Restangular.all('Permissions').getList().then(function (permissions) {\n $scope.gridOptions.data = permissions;\n $timeout(function () {\n if (angular.isDefined($stateParams.id) && $stateParams.id != \"\") {\n Restangular.one('Roles', $stateParams.id).get().then(function (results) {\n $scope.role = results;\n $log.debug($scope.role);\n $scope.editCode = LoginService.permissionExist(\"P_MODIFY_CODE_ROLE\");\n\n $scope.permissionsFromRoleBD = {};\n $scope.gridOptions.data.forEach(function (permission) {\n for (var i = 0; i < $scope.role.FK_roles_permissions_roles.length; i++) {\n if (permission.id == $scope.role.FK_roles_permissions_roles[i].permission_id) {\n $scope.gridOptions.gridApi.selection.selectRow(permission);\n }\n }\n });\n\n });\n }\n\n var data = $scope.gridOptions.data;\n data.totalRows = $scope.gridOptions.data.length;\n\n deferred.resolve(data);\n\n });\n\n\n }, function (response) {\n $log.error(\"Error with status code\", response.status);\n alert(\"Error al cargar los datos\")\n });\n\n return deferred.promise;\n\n }\n\n };*/\n \n\n\n $scope.saveRole = function (frmRole) {\n var roles_permissionsToBd = [];\n angular.forEach($scope.permissions, function (permission) {\n if (permission.checked) {\n roles_permissionsToBd.push({\n permission_id: permission.id,\n role_id: $scope.role.id,\n FK_roles_permissions_permissions: {\n company_id: permission.company_id,\n id: permission.id,\n name: permission.name,\n code: permission.code\n },\n roles: {\n company_id: $scope.role.company_id,\n id: $scope.role.id,\n name: $scope.role.name,\n code: $scope.role.code\n }\n\n });\n }\n });\n\n /*\n angular.forEach($scope.gridOptions.gridApi.selection.getSelectedRows(), function(permission){\n roles_permissionsToBd.push({\n permission_id: permission.id,\n role_id: $scope.role.id,\n FK_roles_permissions_permissions: {\n company_id: permission.company_id,\n id: permission.id,\n name: permission.name,\n code: permission.code\n },\n roles: {\n company_id: $scope.role.company_id,\n id: $scope.role.id,\n name: $scope.role.name,\n code: $scope.role.code\n }\n\n });\n });*/\n\n $scope.role.FK_roles_permissions_roles = roles_permissionsToBd;\n \n if (!angular.isUndefined($scope.role.id)) { \n $scope.role.put().then(function (result) { \n if (!angular.isUndefined(result.id)){\n $state.go(\"roles.list\");\n } else {\n $scope.errorMessage = result.message;\n }\n });\n } else { \n Restangular.all('roles').post($scope.role).then(function (result) {\n if (!angular.isUndefined(result.id)){\n $state.go(\"roles.list\");\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n }\n\n $scope.checkDelete = function () {\n modalService.confirm({\n title: $filter(\"translate\")(\"roles.delete\"),\n message: $filter(\"translate\")(\"roles.delete_message\")+\" \" + $scope.role.name + \"?\",\n onAccept: function () {\n $scope.role.remove().then(function () {\n $state.go(\"roles.list\");\n });\n }\n });\n };\n \n }]);","angular.module(\"roles\")\n\n .controller(\"RolesListCtrl\", ['LoginService', '$rootScope', '$scope', '$http', '$interval', '$q', 'i18nService', 'Restangular', 'gridService', 'modalService', '$filter', '$state', '$log',\n function (LoginService, $rootScope, $scope, $http, $interval, $q, i18nService, Restangular, gridService, modalService, $filter, $state, $log) {\n \n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"ROLES_WRITE\");\n\n $rootScope.title = $filter(\"translate\")(\"roles.title\");\n $rootScope.breadcrumb = [\n { title: $filter(\"translate\")(\"roles.list\") }\n ];\n\n i18nService.setCurrentLang('es');\n var fakeI18n = function (title) {\n var deferred = $q.defer();\n $interval(function () {\n deferred.resolve('col: ' + title);\n }, 1000, 1);\n return deferred.promise;\n };\n\n\n $scope.gridOptions = {\n exporterMenuCsv: true,\n enableGridMenu: true,\n //gridMenuShowHideColumns: false,\n pdfTitle: $filter(\"translate\")(\"roles.title\"),\n paginationPageSizes: [5, 10, 25],\n paginationPageSize: 5,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, exporterSuppressExport: true },\n { name: 'code', displayName: $filter(\"translate\")(\"roles.code\"), enableFiltering: true },\n { name: 'name', displayName: $filter(\"translate\")(\"roles.name\"), enableFiltering: true, enableHiding: false },\n { name: 'description', enableFiltering: true, displayName: $filter(\"translate\")(\"roles.description\") },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter(\"translate\")(\"roles.edit\"), action: 'ui-sref=\"roles.edit({id:row.entity.id})\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter(\"translate\")(\"roles.delete\"), action: 'ng-click=\"grid.appScope.BorrarDialog(row.entity.id,row.entity.name);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\"})\n },\n //''\n ],\n getData: function (options) {\n return Restangular.all('Roles').getList(options);\n }\n\n };\n\n $scope.goToEdit = function (rowEntity) {\n $state.go(\"roles.edit\", { id: rowEntity.id });\n }\n\n\n $scope.BorrarDialog = function (id, name) {\n $scope.id = id;\n $scope.name = name;\n modalService.confirm({\n title: $filter(\"translate\")(\"roles.delete\"),\n message: $filter(\"translate\")(\"roles.delete_message\")+\" \" + $scope.name + \"?\",\n onAccept: function () {\n Restangular.one('Roles', $scope.id).remove().then(function () { \n $scope.gridOptions.data =\n $scope.gridOptions.data.filter(function (el) { return el.id != $scope.id; });\n }, function (response) {\n $log.error(\"Error with status code\", response.status);\n alert(\"Error al borrar\")\n });\n }\n });\n\n };\n }])\n\n;","\nimport BreadcrumbView from \"../../common/breadcrumb/breadcrumb.html\";\nimport RolesListView from \"./roles-list.html\";\nimport RolesEditView from \"./roles-edit.html\";\n\nangular.module(\"roles\", [])\n\n .config(['$stateProvider' ,function ($stateProvider) {\n $stateProvider\n .state('roles', {\n url: \"/roles\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n })\n .state('roles.list', {\n url: \"/list\",\n controller: \"RolesListCtrl\",\n template: RolesListView,\n requiredPermission: [\"ROLES_READ\"]\n })\n .state('roles.edit', {\n url: \"/edit/:id\",\n controller: \"RolesEditCtrl\",\n template: RolesEditView,\n requiredPermission: [\"ROLES_READ\"]\n })\n ;\n }])\n;","import EditPasswordModalView from \"./editPasswordModal.html\";\nimport AddAuthenticatorModalView from \"./addAuthenticatorModal.html\"; \n\n\nangular.module(\"users\")\n\n .controller(\"UsersEditCtrl\", ['LoginService', '$scope', '$rootScope', '$state', '$stateParams', 'Restangular', '$uibModal', 'modalService', 'gridService','$filter', '$log',\n function (LoginService, $scope, $rootScope, $state, $stateParams, Restangular, $uibModal, modalService, gridService, $filter, $log) {\n let tests = [/\\d/, /[a-z]/, /[A-Z]/, /[^A-Z-\\d]/i];\n\n function test(pass){\n if(pass == null)\n return -1;\n let s = 0;\n if(pass.length < 8)\n return 0;\n for(let i in tests)\n if(tests[i].test(pass))\n s++\n return s;\n }\n\n $scope.v = function() {\n let val = test($scope.user.password);\n if(!$scope.validPassword) {\n $scope.validPassword = val === 4;\n }\n return val;\n };\n\n\n\n //Comporbamos si el usuario conectado es de tipo \"support\"\n $scope.conected_user_id = LoginService.get(\"userId\");\n Restangular.one('Users', $scope.conected_user_id).get().then(function (result) {\n\n if (result.type == \"support\") {\n $scope.selectTypes = [{ name: \"staff\" }, { name: \"lite\" }, {name: \"support\"}];\n } else {\n $scope.selectTypes = [{ name: \"staff\" }, { name: \"lite\" }];\n }\n });\n\n\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"USERS_WRITE\");\n $scope.validPassword = true;\n $scope.data = {\n uniqueName: \"\"\n };\n\n $rootScope.title = $filter('translate')('users.title');\n $scope.user = {\n FK_users_roles_users: [],\n FK_users_permissions_users: [],\n FK_asu_users: [],\n FK_users_images: {},\n active: true\n };\n\n \n $scope.userRolesIds = [];\n $scope.userPermissionsIds = [];\n $scope.userAuthenticationServicesIds = [];\n $scope.userCredentialsIds = [];\n $scope.showQR = false;\n\n Restangular.all('StaffPositions').getList().then(function (positions) {\n $scope.selectPositions = positions;\n });\n\n \n if ((angular.isUndefined($stateParams.id) || $stateParams.id == \"\") && $stateParams.id != \"profile\") {\n $scope.validPassword = false;\n\n $rootScope.breadcrumb = [\n { title: $filter('translate')('users.list'), url: \"users.list\" },\n { title: $filter('translate')('users.add') }\n ];\n\n }\n else {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('users.list'), url: \"users.list\" },\n { title: $filter('translate')('users.edit') }\n ];\n \n let userId = $stateParams.id;\n if(userId === \"profile\") {\n userId = LoginService.get(\"userId\");\n $scope.showQR = true;\n }\n \n $scope.allowAddCredentials = false;\n \n Restangular.one('Users', userId).get().then(function (results) {\n\n $scope.user = results;\n\n if ($scope.user.user_expired != null) {\n $scope.user.user_expired = new Date($scope.user.user_expired);\n }\n\n $scope.user.password = \"\";\n $scope.password2 = $scope.user.password;\n if ($scope.user.FK_users_permissions_users == null) {\n $scope.user.FK_users_permissions_users = [];\n } else {\n $scope.gridOptionsPermissions.data = $scope.user.FK_users_permissions_users;\n angular.forEach($scope.user.FK_users_permissions_users, function (userPermission) {\n $scope.userPermissionsIds.push(userPermission.permission_id);\n });\n } \n\n if ($scope.user.FK_users_roles_users == null) {\n $scope.user.FK_users_roles_users = [];\n } else {\n $scope.gridOptionsRoles.data = $scope.user.FK_users_roles_users;\n\n\n\n angular.forEach($scope.user.FK_users_roles_users, function (userRole) {\n $scope.userRolesIds.push(userRole.role_id);\n\n \n }); \n }\n\n if ($scope.user.FK_asu_users == null) {\n $scope.user.FK_asu_users = [];\n } else {\n $scope.gridOptionsAsu.data = $scope.user.FK_asu_users;\n angular.forEach($scope.user.FK_asu_users, function (userAsu) {\n $scope.userAuthenticationServicesIds.push(userAsu.authentication_service_id);\n });\n }\n \n if($scope.user.WebauthnCredentials == null) {\n $scope.user.WebauthnCredentials = [];\n } else {\n $scope.gridOptionsCredentials.data = $scope.user.WebauthnCredentials;\n angular.forEach($scope.user.WebauthnCredentials, function (userCredential) {\n $scope.userCredentialsIds.push(userCredential.id);\n\n\n });\n }\n \n //$scope.selectedLanguage.selected = $scope.user.languages;\n \n if($scope.conected_user_id == $scope.user.id && $scope.user.users_fk01.webauthn_enabled) {\n $scope.allowAddCredentials = true;\n }\n });\n }\n\n //$scope.selectedLanguage = {};\n Restangular.all('Languages').getList({use_for_interface: true}).then(function (languages) {\n $scope.selectLanguages = languages;\n $log.debug($scope.selectLanguages)\n });\n\n // Available Groups\n\n Restangular.all('UsersGroups').getList().then(list => $scope.selectGroups = list);\n\n\n $scope.gridOptionsRoles = {\n enablePaginationControls: false,\n columnDefs: [\n { name: 'FK_users_roles_roles.id', visible: false, exporterSuppressExport: true },\n { name: 'FK_users_roles_roles.name', displayName: $filter('translate')('users.name') },\n {\n name: ' ', width: 100, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('users.delete'), action: 'ng-click=\"grid.appScope.deleteRole(row.entity.FK_users_roles_roles.id);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ]\n\n };\n\n $scope.gridOptionsRoles.data = $scope.user.FK_users_roles_roles;\n\n $scope.gridOptionsCredentials = {\n enablePaginationControls: false,\n columnDefs: [\n { name: 'id', visible: false, exporterSuppressExport: true },\n { name: 'RegDate', displayName: $filter('translate')('general.date'), cellFilter: 'toLocalDate | date:\\'dd/MM/yyyy HH:mm:ss\\'' },\n {\n name: ' ', width: 100, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('users.delete'), action: 'ng-click=\"grid.appScope.deleteCredential(row.entity.id);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ]\n\n };\n\n $scope.gridOptionsCredentials.data = $scope.user.WebauthnCredentials;\n\n $scope.gridOptionsPermissions = {\n enablePaginationControls: false,\n columnDefs: [\n { name: 'FK_users_permissions_permissions.id', visible: false, exporterSuppressExport: true },\n { name: 'FK_users_permissions_permissions.name', displayName: $filter('translate')('users.name') },\n {\n name: ' ', width: 100, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('users.delete'), action: 'ng-click=\"grid.appScope.deletePermission(row.entity.FK_users_permissions_permissions.id);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\"})\n },\n ]\n };\n\n \n\n $scope.gridOptionsPermissions.data = $scope.user.FK_users_permissions_users;\n\n $scope.gridOptionsAsu = {\n enablePaginationControls: false,\n columnDefs: [\n { name: 'id', visible: false, exporterSuppressExport: true },\n { name: 'FK_asu_authentication_services.name', displayName: $filter('translate')('users.name') },\n { name: 'unique_name', displayName: $filter('translate')('users.unique_name') },\n {\n name: ' ', width: 100, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('users.delete'), action: 'ng-click=\"grid.appScope.deleteAuthenticationService(row.entity.FK_asu_authentication_services.id);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ]\n };\n\n $scope.gridOptionsAsu.data = $scope.user.FK_asu_users;\n\n\n \n Restangular.all('Roles').getList().then(function (roles) {\n $scope.selectRoles = roles;\n });\n $scope.selectRole = {};\n\n Restangular.all('Roles').getList().then(function (roles) {\n $scope.selectRoles = roles;\n });\n $scope.selectRole = {};\n\n Restangular.all('Permissions').getList().then(function (permissions) {\n $scope.selectPermissions = permissions;\n });\n $scope.selectPermission = {};\n\n\n Restangular.all('AuthenticationServices').getList().then(function (authenticationServices) {\n $scope.selectAuthenticationServices = authenticationServices;\n });\n $scope.selectAuthenticationService = {};\n\n\n Restangular.all('AuthenticationServicesUsers').getList().then(function (serviceUsers) {\n $scope.serviceUsers = serviceUsers;\n });\n $scope.serviceUsers = {};\n \n $scope.filterRoles = function (value) {\n if (angular.isDefined($scope.userRolesIds) && $scope.userRolesIds.indexOf(value.id) == -1) {\n return true;\n } else {\n return false;\n }\n }\n\n $scope.filterPermissions = function (value) {\n if (angular.isDefined($scope.userPermissionsIds) && $scope.userPermissionsIds.indexOf(value.id) == -1) {\n return true;\n } else {\n return false;\n }\n\n }\n\n $scope.filterAuthenticationServices = function (value) {\n if (angular.isDefined($scope.userAuthenticationServicesIds) && $scope.userAuthenticationServicesIds.indexOf(value.id) == -1) {\n return true;\n } else {\n return false;\n }\n\n }\n\n $scope.addRole = function () {\n if (!angular.isUndefined($scope.selectRole.selected) && $scope.selectRole.selected != \"\") { \n var noExiste = true; \n \n angular.forEach($scope.user.FK_users_roles_users, function (user_role) {\n if (user_role.role_id == $scope.selectRole.selected.id) {\n noExiste = false;\n }\n });\n if (noExiste && !angular.isUndefined($scope.selectRole.selected)) {\n var user_role = {\n role_id: $scope.selectRole.selected.id,\n FK_users_roles_roles: $scope.selectRole.selected,\n user_id: $scope.user.id,\n users: {\n company_id: $scope.user.company_id,\n id: $scope.user.id,\n name: $scope.user.name,\n username: $scope.user.username\n }\n };\n $scope.user.FK_users_roles_users.push(user_role); \n $scope.userRolesIds.push($scope.selectRole.selected.id);\n // tentativa de actualizar la vista \n $scope.gridOptionsRoles.data = $scope.user.FK_users_roles_users;\n if (!$scope.$$phase) $scope.$apply();\n }\n \n }\n $scope.selectRole.selected = \"\";\n }\n\n $scope.deleteCredential = function (id) {\n Restangular.one('Auth/WebAuthn/Credential/', id).remove().then(function (result) {\n var index = $scope.userCredentialsIds.indexOf(id);\n $scope.userCredentialsIds.splice(index, 1);\n });\n };\n \n $scope.deleteRole = function (id) {\n \n angular.forEach($scope.user.FK_users_roles_users, function (user_role, idx) {\n if (user_role.role_id == id) {\n $scope.user.FK_users_roles_users.splice(idx, 1);\n\n }\n });\n var index = $scope.userRolesIds.indexOf(id);\n $scope.userRolesIds.splice(index, 1);\n }\n\n $scope.addPermission = function () {\n\n if (!angular.isUndefined($scope.selectPermission.selected) && $scope.selectPermission.selected != \"\") {\n var noExiste = true; \n angular.forEach($scope.user.FK_users_permissions_users, function (user_permission) {\n if (user_permission.permission_id == $scope.selectPermission.selected.id) {\n noExiste = false;\n }\n });\n if (noExiste && !angular.isUndefined($scope.selectPermission.selected)) {\n var user_permission = {\n permission_id: $scope.selectPermission.selected.id,\n FK_users_permissions_permissions: $scope.selectPermission.selected,\n user_id: $scope.user.id,\n users: {\n company_id: $scope.user.company_id,\n id: $scope.user.id,\n name: $scope.user.name,\n username: $scope.user.username\n }\n };\n $scope.user.FK_users_permissions_users.push(user_permission);\n $scope.userPermissionsIds.push($scope.selectPermission.selected.id);\n if (!$scope.$$phase) $scope.$apply();\n }\n }\n $scope.selectPermission.selected = \"\";\n }\n\n $scope.deletePermission = function (id) {\n \n angular.forEach($scope.user.FK_users_permissions_users, function (user_permission, idx) {\n if (user_permission.permission_id == id) {\n $scope.user.FK_users_permissions_users.splice(idx, 1);\n }\n });\n var index = $scope.userPermissionsIds.indexOf(id);\n $scope.userPermissionsIds.splice(index, 1);\n }\n\n\n\n $scope.addAuthenticationService = function () {\n $log.debug($scope.serviceUsers)\n $log.debug($scope.data.uniqueName);\n $log.debug(\"estoy aqui\");\n $log.debug($scope.selectAuthenticationService.selected);\n\n if (!angular.isUndefined($scope.selectAuthenticationService.selected) && $scope.selectAuthenticationService.selected != \"\") {\n var noExiste = true;\n $log.debug(\"he entrado en el primer if\")\n angular.forEach($scope.user.FK_asu_users, function (user_authentication_service) {\n $log.debug(\"he entrado en el for each\")\n if (user_authentication_service.authentication_service_id == $scope.selectAuthenticationService.selected.id) {\n \n noExiste = false;\n }\n });\n angular.forEach($scope.serviceUsers, function (serviceUsers) {\n $log.debug(\"he entrado en el for each2\")\n $log.debug(`serviceUsers.unique_name = ${serviceUsers.unique_name}, $scope.data.unique_name = ${$scope.data.unique_name}, serviceUsers.authentication_service_id= ${serviceUsers.authentication_service_id} $scope.selectAuthenticationService.selected.id = ${$scope.selectAuthenticationService.selected.id}`)\n if (serviceUsers.authentication_service_id == $scope.selectAuthenticationService.selected.id && serviceUsers.unique_name == $scope.data.uniqueName) {\n\n uniqueNameWarning();\n noExiste = false;\n }\n });\n\n if (noExiste && !angular.isUndefined($scope.selectAuthenticationService.selected)) {\n $log.debug(\"HE ENTRADO EN ESTE MOMENTO\")\n var user_authentication_service = {\n authentication_service_id: $scope.selectAuthenticationService.selected.id,\n FK_asu_authentication_services: $scope.selectAuthenticationService.selected,\n user_id: $scope.user.id,\n unique_name: $scope.data.uniqueName,\n users: {\n company_id: $scope.user.company_id,\n id: $scope.user.id,\n name: $scope.user.name,\n username: $scope.user.username\n }\n };\n $log.debug(user_authentication_service);\n $scope.user.FK_asu_users.push(user_authentication_service);\n $scope.userAuthenticationServicesIds.push($scope.selectAuthenticationService.selected.id);\n if (!$scope.$$phase) $scope.$apply();\n }\n }\n $scope.selectAuthenticationService.selected = \"\";\n $scope.data.uniqueName = \"\";\n\n }\n\n $scope.deleteAuthenticationService = function (id) {\n\n angular.forEach($scope.user.FK_asu_users, function (user_authentication_service, idx) {\n if (user_authentication_service.authentication_service_id == id) {\n $scope.user.FK_asu_users.splice(idx, 1);\n }\n });\n var index = $scope.userAuthenticationServicesIds.indexOf(id);\n $scope.userAuthenticationServicesIds.splice(index, 1);\n }\n\n\n\n \n\n $scope.saveUser = function (frmUser) {\n /* $scope.user.language_id = $scope.selectedLanguage.selected.id;\n $log.debug($scope.user.language_id);*/\n if ($scope.user.user_expired != null) {\n $scope.user.user_expired = new Date($scope.user.user_expired);\n }\n\n if (angular.isDefined($scope.user.id)) {\n if (LoginService.get(\"userId\") == $scope.user.id)\n LoginService.set(\"userIcon\", $scope.user.icon);\n delete $scope.user.FK_users_images;\n $scope.user.put().then(function (result) { \n if (typeof (result.id) != \"undefined\") {\n $state.go(\"users.list\");\n toastr.success($filter('translate')('users.user_modified'));\n } else {\n $scope.errorMessage = result.message;\n }\n });\n } else {\n Restangular.all('users').post($scope.user).then(function (result) {\n if (typeof (result.id) != \"undefined\") {\n $state.go(\"users.list\");\n toastr.success($filter('translate')('users.user_created'));\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n }\n\n $scope.checkDelete = function () {\n modalService.confirm({\n title: $filter('translate')('users.delete'),\n message: $filter('translate')('users.delete_message')+\" \" + $scope.user.name + \"?\",\n onAccept: function () {\n $scope.user.remove().then(function () {\n $state.go(\"users.list\");\n });\n }\n });\n };\n\n //Aviso cuando el UniqueName está en uso\n let uniqueNameWarning = function () {\n modalService.message({\n title: $filter('translate')('users.unique_name_warning'),\n message: $filter('translate')('users.unique_name_warning_message') + \" \" + $scope.data.uniqueName + \" \" + $filter('translate')('users.unique_name_warning_message2'),\n onAccept: function () {}\n });\n };\n\n\n $scope.editPassword = function () {\n $scope.validPassword = false;\n let $modalInstance = $uibModal.open({\n animation: true,\n template: EditPasswordModalView,\n controller: \"EditPasswordModalCtrl\",\n resolve: {\n user: function () {\n return $scope.user;\n } \n }\n\n });\n \n };\n \n $scope.addAuthenticator = function () {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: AddAuthenticatorModalView,\n controller: \"AddAuthenticatorModalCtrl\",\n resolve: {\n user: function () {\n return $scope.user;\n }\n }\n\n });\n\n };\n \n\n /*\n * Foto\n */\n\n $scope.addFile = function (flowFile) {\n var fileReader = new FileReader();\n fileReader.onload = function (event) {\n var uri = event.target.result; \n $scope.$apply(function () {\n $scope.user.icon = uri;\n $scope.user.FK_users_images.image = uri;\n });\n };\n fileReader.readAsDataURL(flowFile.file);\n };\n \n let coerceToBase64Url = function (thing) {\n // Array or ArrayBuffer to Uint8Array\n if (Array.isArray(thing)) {\n thing = Uint8Array.from(thing);\n }\n\n if (thing instanceof ArrayBuffer) {\n thing = new Uint8Array(thing);\n }\n\n // Uint8Array to base64\n if (thing instanceof Uint8Array) {\n var str = \"\";\n var len = thing.byteLength;\n\n for (var i = 0; i < len; i++) {\n str += String.fromCharCode(thing[i]);\n }\n thing = window.btoa(str);\n }\n\n if (typeof thing !== \"string\") {\n throw new Error(\"could not coerce to string\");\n }\n\n // base64 to base64url\n // NOTE: \"=\" at the end of challenge is optional, strip it off here\n thing = thing.replace(/\\+/g, \"-\")\n .replace(/\\//g, \"_\")\n .replace(/={1,5}$/g, \"\");\n\n return thing;\n };\n \n let coerceToArrayBuffer = function (thing) {\n if (typeof thing === \"string\") {\n // base64url to base64\n thing = thing.replace(/-/g, \"+\").replace(/_/g, \"/\");\n\n // base64 to Uint8Array\n var str = window.atob(thing);\n var bytes = new Uint8Array(str.length);\n for (var i = 0; i < str.length; i++) {\n bytes[i] = str.charCodeAt(i);\n }\n thing = bytes;\n }\n\n // Array to Uint8Array\n if (Array.isArray(thing)) {\n thing = new Uint8Array(thing);\n }\n\n // Uint8Array to ArrayBuffer\n if (thing instanceof Uint8Array) {\n thing = thing.buffer;\n }\n\n // error if none of the above worked\n if (!(thing instanceof ArrayBuffer)) {\n throw new TypeError(\"could not coerce to ArrayBuffer\");\n }\n\n return thing;\n };\n \n let registerNewCredential = function (newCredential) {\n // Move data into Arrays incase it is super long\n let attestationObject = new Uint8Array(newCredential.response.attestationObject);\n let clientDataJSON = new Uint8Array(newCredential.response.clientDataJSON);\n let rawId = new Uint8Array(newCredential.rawId);\n\n const data = {\n id: newCredential.id,\n rawId: coerceToBase64Url(rawId),\n type: newCredential.type,\n extensions: newCredential.getClientExtensionResults(),\n response: {\n attestationObject: coerceToBase64Url(attestationObject),\n clientDataJSON: coerceToBase64Url(clientDataJSON)\n }\n };\n\n Restangular.all('Auth').customPOST(JSON.stringify(data), 'WebAuthn/MakeCredential/', null, {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json'\n }).then(function (response) {\n $log.debug(\"Credential Object\", response);\n \n // show error\n if (response.status !== \"ok\") {\n $log.error(\"Error creating credential\");\n $log.error(response.errorMessage);\n return;\n }\n });\n }\n \n $scope.addCredentials = function () {\n Restangular.all(\"Auth\").customPOST(null, \"WebAuthn/MakeCredentialOptions/\", null).then(function (makeCredentialOptions) {\n $log.debug(makeCredentialOptions);\n if(makeCredentialOptions.status === \"ok\") {\n // Turn the challenge back into the accepted format of padded base64\n makeCredentialOptions.challenge = coerceToArrayBuffer(makeCredentialOptions.challenge);\n // Turn ID into a UInt8Array Buffer for some reason\n makeCredentialOptions.user.id = coerceToArrayBuffer(makeCredentialOptions.user.id);\n\n makeCredentialOptions.excludeCredentials = makeCredentialOptions.excludeCredentials.map((c) => {\n c.id = coerceToArrayBuffer(c.id);\n return c;\n });\n\n if (makeCredentialOptions.authenticatorSelection.authenticatorAttachment === null) makeCredentialOptions.authenticatorSelection.authenticatorAttachment = undefined;\n\n $log.debug(\"Creating PublicKeyCredential...\");\n\n let newCredential;\n try {\n navigator.credentials.create({\n publicKey: makeCredentialOptions\n }).then(function (newCredential) {\n $log.debug(\"PublicKeyCredential Created\", newCredential);\n registerNewCredential(newCredential);\n });\n } catch (e) {\n let msg = \"Could not create credentials in browser. Probably because the username is already registered with your authenticator. Please change username or authenticator.\"\n console.error(msg, e);\n }\n }\n });\n };\n \n }])\n\n.controller(\"EditPasswordModalCtrl\", ['$scope', '$uibModalInstance', 'Restangular', 'user','modalService','$filter', function ($scope, $uibModalInstance, Restangular, user, modalService, $filter) {\n let tests = [/\\d/, /[a-z]/, /[A-Z]/, /[^A-Z-\\d]/i];\n\n function test(pass){\n if(pass == null)\n return -1;\n let s = 0;\n if(pass.length < 8)\n return 0;\n for(let i in tests)\n if(tests[i].test(pass))\n s++\n return s;\n }\n \n $scope.user = user;\n $scope.password = \"\";\n $scope.validPassword = false;\n\n $scope.v = function(){\n let val = test($scope.password);\n $scope.validPassword = val === 4;\n return val;\n };\n \n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n $scope.savePassword = function () { \n if ($scope.password !== \"\") {\n\n $scope.user.password = $scope.password;\n $scope.user.put().then(function (result) { \n if (typeof (result.id) != \"undefined\") {\n $uibModalInstance.close();\n toastr.success($filter('translate')('users.password_updated'));\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n \n \n\n };\n\n}])\n.controller(\"AddAuthenticatorModalCtrl\", ['$scope', '$uibModalInstance', 'Restangular', 'user','modalService','$filter', '$log', function ($scope, $uibModalInstance, Restangular, user, modalService, $filter, $log) {\n $scope.qrCode = '';\n $scope.code = '';\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n \n $scope.saveAuthenticator = function () {\n Restangular.all(\"Auth\").customPOST(null, \"Authenticator/Verify/\" + $scope.code, null).then(function (result) {\n $log.debug(result);\n });\n };\n \n Restangular.one('Auth/AuthenticatorQRCode').get().then(function (result) {\n $scope.qrCode = result;\n });\n}]);","\nimport AddLicenseModalView from \"./addLicenseModal.html\";\n\nangular.module(\"users\")\n\n .controller(\"UsersListCtrl\", ['LoginService', '$rootScope', '$scope', '$http', 'Restangular', 'gridService', 'modalService', '$filter', '$state', 'uiGridExporterConstants', '$log', '$uibModal', function (LoginService, $rootScope, $scope, $http, Restangular, gridService, modalService, $filter, $state, uiGridExporterConstants, $log, $uibModal) {\n\n //Comprobamos si tiene permiso escritura\n $scope.allowWrite = LoginService.permissionExist(\"USERS_WRITE\");\n\n\n $rootScope.title = $filter('translate')('users.title');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('users.list') }\n ];\n\n $log.debug($rootScope);\n let id = $rootScope.company_id;\n\n $scope.getLicenses = function () {\n Restangular.all(`Companies/${id}/Licenses`).getList().then(function (licenses) {\n $scope.licencias = licenses;\n });\n }\n\n $scope.getLicenses();\n\n $scope.gridOptions = {\n exporterMenuCsv: true,\n enableGridMenu: true,\n //gridMenuShowHideColumns: false,\n paginationPageSizes: [15, 30, 45],\n pdfTitle: $filter('translate')('users.title'),\n paginationPageSize: 45,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, exporterSuppressExport: true, displayName: $filter('translate')('users.id') },\n {\n field: 'FK_users_images.image_small', visible: false,\n customFormatFn: function (value) {\n if (value != null) {\n var img = {\n image: value,\n width: 30\n };\n return img;\n } else {\n return \"\";\n }\n },\n displayName: $filter('translate')('users.icon'), cellTemplate: \"\", width: 70, enableFiltering: false\n },\n { name: 'name', displayName: $filter('translate')('users.name'), enableFiltering: true, enableHiding: false },\n { name: 'username', enableFiltering: true, displayName: $filter('translate')('users.user') },\n { name: 'users_groups.name', enableFiltering: true, displayName: $filter('translate')('users.group') },\n { name: 'mail', enableFiltering: true, displayName: $filter('translate')('users.mail') },\n { name: 'active', enableFiltering: true, displayName: $filter('translate')('users.active'), width: 75, cellTemplate: \"
\" +\n \"\" +\n \"\" +\n \"
\" },\n { name: 'type', enableFiltering: true, displayName: $filter('translate')('users.type'), cellTemplate: '
{{\"users.type_\" + row.entity.type | translate }}
' },\n\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('users.edit'), action: 'ui-sref=\"users.edit({id:row.entity.id})\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('users.delete'), action: 'ng-click=\"grid.appScope.BorrarDialog(row.entity.id,row.entity.name);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n //''\n ],\n getData: function (options) {\n $log.debug(Restangular.all('Users'));\n return Restangular.all('Users').getList(options).then(function (r) {\n $log.debug(r);\n return r;\n\n });\n }\n\n };\n\n $scope.addLicense = function () {\n let $modalInstance = $uibModal.open({\n animation: true,\n template: AddLicenseModalView,\n size: \"lg\",\n controller: \"AddLicenseModalCtrl\",\n resolve: function () { }\n });\n };\n\n $scope.goToEdit = function (rowEntity) {\n $state.go(\"users.edit\", { id: rowEntity.id });\n }\n\n $scope.exportToPDF = function () {\n $scope.export_row_type = 'all';\n $scope.export_column_type = 'all';\n\n $scope.gridOptions.gridApi.exporter.pdfExport(uiGridExporterConstants.ALL, uiGridExporterConstants.ALL);\n }\n\n $scope.BorrarDialog = function (id, name) {\n $scope.id = id;\n $scope.name = name;\n modalService.confirm({\n title: $filter('translate')('users.delete'),\n message: $filter('translate')('users.delete_message')+\" \" + $scope.name + \"?\",\n onAccept: function () {\n Restangular.one('Users', $scope.id).remove().then(function () { \n $scope.gridOptions.data =\n $scope.gridOptions.data.filter(function (el) { return el.id != $scope.id; });\n }, function (response) {\n $log.error(\"Error with status code\", response.status);\n alert(\"Error\")\n });\n }\n });\n\n };\n }])\n\n .controller(\"AddLicenseModalCtrl\", ['$scope', '$uibModalInstance', 'Restangular', '$rootScope', '$filter', function ($scope, $uibModalInstance, Restangular, $rootScope, $filter) {\n let id = $rootScope.company_id;\n\n Restangular.one(\"Companies\", id).get().then(function (result) {\n $scope.license = result.license;\n });\n\n\n $scope.onCancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n $scope.saveLicense = function () {\n if ($scope.license !== \"\") {\n //Es muy poco intuitivo, pero es la única forma que conozco de llamar a una función del controlador mediante una ruta específica.\n Restangular.all(`Companies/${id}/AddLicenses`).getList({ codedLicense: $scope.license }).then(function () {\n $uibModalInstance.close();\n $scope.getLicenses();\n toastr.success($filter('translate')('users.license_updated'));\n }, function (result) {\n $scope.errorMessage = result.message;\n });\n }\n };\n\n}]);","\nimport BreadcrumbView from \"../common/breadcrumb/breadcrumb.html\";\nimport UsersListView from \"./users-list.html\";\nimport UsersEditView from \"./users-edit.html\";\n\nangular.module(\"users\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('users', {\n url: \"/users\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n })\n .state('users.list', {\n url: \"/list\",\n controller: \"UsersListCtrl\",\n template: UsersListView,\n data: {pageTitle: \"Usuarios\"},\n requiredPermission: [\"USERS_READ\"]\n })\n .state('users.edit', {\n url: \"/edit/:id\",\n controller: \"UsersEditCtrl\",\n template: UsersEditView,\n data: { pageTitle: \"Usuario\" } ,\n requiredPermission: [\"USERS_READ\"]\n })\n .state('users.profile', {\n url: \"/:id\",\n controller: \"UsersEditCtrl\",\n template: UsersEditView,\n params: {\n 'id': 'profile'\n },\n data: { pageTitle: \"Usuario\" }\n })\n ;\n }])\n;","import './warehouses';\nimport './warehouses-list';\nimport './warehouses-edit';","angular.module(\"warehouses\")\n\n .controller(\"WarehousesEditCtrl\", ['LoginService', '$state', '$rootScope', '$stateParams', '$scope', 'Restangular', 'modalService', '$filter', '$translate',\n function (LoginService, $state, $rootScope,$stateParams, $scope, Restangular,modalService, $filter, $translate) {\n $scope.allowWrite = LoginService.permissionExist(\"WAREHOUSES_WRITE\");\n\n\n if (angular.isUndefined($stateParams.id) || $stateParams.id == \"\") {\n\n $rootScope.breadcrumb = [\n { title: $filter('translate')('warehouses.title'), url: \"warehouses.list\" },\n { title: $filter('translate')('warehouses.button_add') }\n ];\n $scope.warehouses = {};\n\n } else {\n $rootScope.breadcrumb = [\n { title: $filter('translate')('warehouses.title'), url: \"warehouses.list\" },\n { title: $filter('translate')('warehouses.button_edit'), url: \"warehouses.edit({ id: \" + $stateParams.id + \" })\" },\n ];\n\n Restangular.one('Warehouses', $stateParams.id).get().then(function (results) {\n $scope.warehouses = results;\n });\n\n };\n\n\n $scope.save = function (frmWarehouses) {\n\n if (!angular.isUndefined($scope.warehouses.id)) {\n $scope.warehouses.put().then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('warehouses.edit_success'));\n if ($scope.callbackFn != null) {\n $scope.callbackFn(result);\n } else {\n $state.go(\"warehouses.list\");\n }\n } else {\n $scope.errorMessage = result.message;\n }\n });\n } else {\n Restangular.all('Warehouses').post($scope.warehouses).then(function (result) {\n if (angular.isDefined(result.id)) {\n toastr.success($filter('translate')('warehouses.create_success'));\n if ($scope.callbackFn != null) {\n $scope.callbackFn(result);\n } else {\n $state.go(\"warehouses.list\", { id: result.id, is_template: false });\n }\n } else {\n $scope.errorMessage = result.message;\n }\n });\n }\n }\n\n $scope.onCancel = function () {\n if ($scope.callbackFn != null) {\n $scope.callbackFn(null);\n } else {\n $state.go(\"warehouses.list\");\n }\n };\n\n $scope.checkDelete = function () {\n modalService.confirm({\n title: $filter('translate')('warehouses.button_delete'),\n message: $filter('translate')('warehouses.delete_message') + \" \" + $scope.warehouses.name + \"?\",\n onAccept: function () {\n $scope.warehouses.remove().then(function () {\n toastr.success($filter('translate')('warehouses.delete_success'));\n $state.go(\"warehouses.list\");\n });\n }\n });\n };\n\n\n }]);","angular.module(\"warehouses\")\n\n .controller(\"WarehousesListCtrl\", ['LoginService', '$state', '$rootScope', '$scope', 'Restangular', 'gridService', '$filter', '$translate', 'modalService',\n function (LoginService, $state, $rootScope, $scope, Restangular, gridService, $filter, $translate,modalService) {\n\n $scope.allowWrite = LoginService.permissionExist(\"WAREHOUSES_WRITE\");\n $rootScope.title = $filter('translate')('warehouses.title');\n $rootScope.breadcrumb = [\n { title: $filter('translate')('warehouses.title') }\n ];\n\n $scope.gridOptionsWarehouses = {\n exporterMenuCsv: true,\n enableGridMenu: true,\n gridMenuShowHideColumns: false,\n enableSorting: true,\n paginationPageSizes: [20, 40, 60],\n paginationPageSize: 20,\n rowTemplate: '
',\n onRegisterApi: function (gridApi) {\n this.gridApi = gridApi;\n },\n columnDefs: [\n { name: 'id', visible: false, enableHiding: false, exporterSuppressExport: true },\n { name: 'name', displayName: $filter('translate')('warehouses.name'), enableFiltering: true, enableHiding: false },\n { name: 'location', displayName: $filter('translate')('warehouses.location'), enableFiltering: true, enableHiding: false },\n {\n name: ' ', width: 150, exporterSuppressExport: true, enableSorting: false, enableHiding: false, enableFiltering: false, enableColumnMenu: false, cellTemplate: gridService.actionTemplate([\n { title: $filter('translate')('warehouses.button_edit'), action: 'ui-sref=\"warehouses.edit({id:row.entity.id})\"', cssIconClass: \"fa fa-edit\" },\n { title: $filter('translate')('warehouses.button_delete'), action: 'ng-click=\"grid.appScope.deleteDialog(row.entity.id,row.entity.name);\" ng-if=\"grid.appScope.allowWrite\"', cssIconClass: \"fa fa-remove\" }\n ], { cssClass: \"pull-right\" })\n },\n ],\n getData: function (options) {\n return Restangular.all('Warehouses').getList(options)\n }\n };\n\n $scope.goToEdit = function (rowEntity) {\n $state.go(\"warehouses.edit\", { id: rowEntity.id });\n }\n\n $scope.deleteDialog = function (id, name) {\n $scope.id = id;\n $scope.name = name;\n modalService.confirm({\n title: $filter('translate')('warehouses.button_delete'),\n message: $filter('translate')('warehouses.delete_message') + \" \" + $scope.name + \"?\",\n onAccept: function () {\n Restangular.one('Warehouses', $scope.id).remove().then(function () {\n toastr.success($filter('translate')('warehouses.delete_success'));\n $scope.gridOptionsWarehouses.gridApi.core.raise.itemDeleted($scope);\n\n }, function (response) {\n $scope.errorMessage = response.message;\n });\n }\n });\n\n };\n\n\n }]);","\nimport BreadcrumbView from \"../common/breadcrumb/breadcrumb.html\";\nimport WarehousesListView from \"./warehouses-list.html\";\nimport WarehousesEditView from \"./warehouses-edit.html\";\n\nangular.module(\"warehouses\", [])\n\n .config(['$stateProvider', function ($stateProvider) {\n $stateProvider\n .state('warehouses', {\n url: \"/warehouses\",\n abstract: true,\n controller: \"BreadcrumbCtrl\",\n template: BreadcrumbView,\n })\n\n .state('warehouses.list', {\n url: \"/list\",\n controller: \"WarehousesListCtrl\",\n template: WarehousesListView,\n data: { pageTitle: 'Almacenes' },\n requiredPermission: [\"WAREHOUSES_READ\"]\n })\n .state('warehouses.edit', {\n url: \"/edit/:id\",\n controller: \"WarehousesEditCtrl\",\n template: WarehousesEditView,\n data: { pageTitle: 'Almacenes' },\n requiredPermission: [\"WAREHOUSES_READ\"]\n })\n }])\n ;","import \"./grid-directives\";\nimport './navigation-directives';\nimport './translatable-directive';\nimport './utils-directives';\nimport './valid_number-directives';\n","angular.module(\"app\")\n\n.directive(\"diapleGridFilterButton\", ['uiGridConstants', function (uiGridConstants) {\n return {\n restrict: 'A',\n link: function (scope, element, attrs) {\n var gridOptions = scope[attrs.uiGrid];\n gridOptions.gridMenuCustomItems = [\n {\n ref: 'btnShowHideFilter',\n title: gridOptions.enableFiltering ? \"Ocultar filtros\" : \"Mostrar filtros\",\n icon: \"fa fa-filter\",\n action: function ($event) {\n gridOptions.enableFiltering = !gridOptions.enableFiltering;\n gridOptions.gridApi.core.notifyDataChange(uiGridConstants.dataChange.COLUMN);\n\n angular.forEach(gridOptions.gridMenuCustomItems, function (menuItem) {\n if (menuItem.ref == \"btnShowHideFilter\") {\n menuItem.title = gridOptions.enableFiltering ? \"Ocultar filtros\" : \"Mostrar filtros\";\n }\n });\n },\n order: 0\n }\n ];\n }\n };\n}])\n\n\n.directive(\"diapleGridExternalDataLoad\", ['uiGridConstants', 'LoginService', '$timeout', function (uiGridConstants, LoginService, $timeout) {\n return {\n restrict: 'A',\n link: function (scope: any, element, attrs) {\n var gridOptions = scope[attrs.uiGrid];\n\n gridOptions.useExternalSorting = true;\n gridOptions.useExternalFiltering = true;\n gridOptions.useExternalPagination = true;\n\n //ajustamos altura grid a page size\n gridOptions.resizeHeight = function () { \n\n if (gridOptions.enablePaginationControls) {\n var _h = 130 + gridOptions.paginationPageSize * gridOptions.rowHeight;\n element[0].style.height = _h + \"px\";\n } else {\n gridOptions.gridApi.registerEvent('core', 'canvasHeightChanged');\n }\n \n };\n gridOptions.customResizeHeight = function (size) {\n \n if (size < 120) size = 120; \n if (gridOptions.enableFiltering) {\n //Tiene filtros.\n var _h = 130 + size;\n } else {\n if (gridOptions.enablePaginationControls) {\n var _h = 90 + size;\n } else { \n var _h = 20 + size;\n } \n }\n if (gridOptions.showColumnFooter)\n _h += 50;\n element[0].style.height = _h + \"px\";\n };\n\n\n //formateado de pdf\n gridOptions.pdfFilterDescription = \"\";\n gridOptions.exporterPdfCustomFormatter = function (docDefinition) {\n docDefinition.pageMargins = [40, 60, 40, 40];\n var icon = LoginService.get(\"companyLogo\");\n var columnsHeader: any = [{\n text: angular.isFunction(gridOptions.pdfTitle) ? gridOptions.pdfTitle() : angular.isDefined(gridOptions.pdfTitle)?gridOptions.pdfTitle: \"Sin titulo\",\n fontSize: 16,\n margin: [40, 30, 0, 0]\n }\n ]; \n if (icon != null && icon != \"undefined\" && icon != \"null\") {\n columnsHeader.push({\n image: icon,\n fit: [300, 40],\n margin: [0, 20, 20, 0],\n alignment: 'right'\n });\n }\n docDefinition.header = {\n columns: columnsHeader\n };\n docDefinition.footer = function (currentPage, pageCount) {\n // you can apply any logic and return any valid pdfmake element\n return {\n columns: [\n { text: moment().format(\"DD/MM/YYYY HH:mm:ss\").toString(), alignment: 'left', margin: [40, 0, 0, 0] },\n { text: currentPage.toString() + ' de ' + pageCount, alignment: 'right', margin: [0, 0, 40, 0] },\n ]\n };\n };\n //calculamos filtros internos\n gridOptions.pdfFilterDescription = \"\";\n angular.forEach(gridOptions.columnDefs, function (columnDef) {\n if (columnDef.enableFiltering) {\n //buscar valor d filtro\n var valor = \"\";\n angular.forEach(gridOptions.gridApi.grid.columns, function (column) {\n if (column.name == columnDef.name) {\n valor = column.filters[0].term;\n if (angular.isDefined(column.filters[0].selectOptions)) {\n angular.forEach(column.filters[0].selectOptions, function (option) {\n if (option.value == valor) valor = option.label;\n });\n }\n }\n });\n if (typeof valor == \"undefined\" || valor == null) valor = \"\";\n if (valor != \"\" && valor != null) gridOptions.pdfFilterDescription += (gridOptions.internalFilterDescription != \"\" ? \"\\n\" : \"\") + columnDef.displayName + \": \" + valor;\n }\n });\n //calculamos filtros externos\n if (gridOptions.getFilterExternalDescription) {\n var externalFilterDescription = gridOptions.getFilterExternalDescription();\n if (gridOptions.pdfFilterDescription != \"\" && externalFilterDescription != \"\") {\n gridOptions.pdfFilterDescription += \"\\n\";\n }\n gridOptions.pdfFilterDescription += externalFilterDescription;\n }\n var filter = {\n text: gridOptions.pdfFilterDescription,\n fontSize: 11\n };\n docDefinition.content.splice(0, 0, filter);\n return docDefinition;\n };\n\n var sortBy = \"\";\n var sortDirection = \"\";\n\n function getOptions(allData) {\n var options: any = {};\n\n //paginacion \n if (allData != true) {\n options._page = gridOptions.paginationCurrentPage;\n options._pageSize = gridOptions.paginationPageSize;\n }\n\n //ordenacion\n options._sortBy = sortBy;\n options._sortDirection = sortDirection;\n\n //filtrado\n angular.forEach(gridOptions.columnDefs, function (columnDef) {\n if (columnDef.enableFiltering) {\n //buscar valor d filtro\n var valor = \"\";\n angular.forEach(gridOptions.gridApi.grid.columns, function (column) {\n if (column.name == columnDef.name) valor = column.filters[0].term;\n });\n if (typeof valor == \"undefined\" || valor == null) valor = \"\";\n options[columnDef.name] = valor;\n }\n });\n\n return options;\n };\n\n gridOptions.loadData = function (allData) {\n gridOptions.resizeHeight(); \n gridOptions.getData(getOptions(allData)).then(function (results) {\n \n gridOptions.data = results;\n gridOptions.totalItems = results.totalRows;\n if (typeof (gridOptions.gridApi.selection) !== 'undefined' && gridOptions.gridApi.selection.getSelectAllState()) {\n $timeout(function () { gridOptions.gridApi.selection.selectAllVisibleRows(); });\n }\n }, function (response) {\n scope.errorMessage = response.message;\n });\n \n };\n\n gridOptions.gridApi.core.on.sortChanged(scope, function (grid, sortColumns) {\n if (sortColumns.length == 0) {\n sortBy = \"\";\n sortDirection = \"\";\n } else {\n sortBy = sortColumns[0].name;\n switch (sortColumns[0].sort.direction) {\n case uiGridConstants.ASC:\n sortDirection = \"asc\";\n break;\n case uiGridConstants.DESC:\n sortDirection = \"desc\";\n break;\n case undefined:\n sortDirection = \"\";\n break;\n }\n }\n gridOptions.paginationCurrentPage = 1;\n gridOptions.loadData(false);\n });\n gridOptions.gridApi.core.on.filterChanged(scope, function () {\n if (angular.isDefined(gridOptions.filterTimeout)) {\n $timeout.cancel(gridOptions.filterTimeout);\n }\n gridOptions.filterTimeout = $timeout(function () {\n gridOptions.paginationCurrentPage = 1;\n gridOptions.loadData(false);\n }, 300);\n });\n gridOptions.gridApi.pagination?.on.paginationChanged(scope, function (newPage, pageSize) { \n gridOptions.pageValue = newPage;\n gridOptions.loadData(false);\n });\n \n\n gridOptions.gridApi.core.on.canvasHeightChanged(scope, function (lastSizeCanvas, actualSizeCanvas) {\n if (lastSizeCanvas != actualSizeCanvas) {\n gridOptions.customResizeHeight(actualSizeCanvas);\n }\n });\n\n /**\n * hace que el exportar todos no tenga en cuenta el paginador\n */\n gridOptions.exporterAllDataFn = function () {\n return gridOptions.getData(getOptions(true)).then(function (results) {\n gridOptions.data = results;\n gridOptions.totalItems = results.totalRows;\n });\n };\n\n /**\n * Evento para lanzar cuando se borra algo.\n */\n gridOptions.gridApi.registerEvent('core', 'itemDeleted');\n\n gridOptions.gridApi.core.on.itemDeleted(scope, function () {\n gridOptions.loadData(false);\n });\n\n /**\n * Evento para lanzar cuando se edita o se añade algo.\n */\n gridOptions.gridApi.registerEvent('core', 'itemChanged');\n\n gridOptions.gridApi.core.on.itemChanged(scope, function () {\n gridOptions.loadData(false);\n });\n \n //carga inicial\n gridOptions.loadData(false);\n }\n };\n}])\n\n.directive(\"diapleGridAutoResize\", ['uiGridConstants', function (uiGridConstants) {\n return {\n restrict: 'A',\n link: function (scope, element, attrs) {\n var gridOptions = scope[attrs.uiGrid];\n\n gridOptions.gridApi.registerEvent('core', 'canvasHeightChanged');\n\n gridOptions.customResizeHeight = function (size) {\n\n if (size < 120) size = 120;\n if (gridOptions.enableFiltering) {\n //Tiene filtros.\n var _h = 130 + size;\n } else {\n if (gridOptions.enablePaginationControls) {\n var _h = 90 + size;\n } else {\n var _h = 20 + size;\n }\n }\n if (gridOptions.showColumnFooter)\n _h += 50;\n element[0].style.height = _h + \"px\";\n };\n\n gridOptions.gridApi.core.on.canvasHeightChanged(scope, function (lastSizeCanvas, actualSizeCanvas) {\n if (lastSizeCanvas != actualSizeCanvas) {\n gridOptions.customResizeHeight(actualSizeCanvas);\n }\n });\n\n \n }\n };\n}])\n\n;","angular.module(\"app\")\n/**\n * pageTitle - Directive for set Page title - mata title\n */\n.directive('pageTitle', ['$rootScope', '$timeout', '$filter', function pageTitle($rootScope, $timeout, $filter) {\n return {\n link: function (scope, element) {\n \n var listener = function (event, toState, toParams, fromState, fromParams) {\n // Default title - load on Dashboard 1 {{'app.title' | translate}}\n var title = $filter('translate')('app.title');\n // Create your own title pattern\n if (toState.data && toState.data.pageTitle) title = $filter('translate')('app.urlTitle') + ' | ' + toState.data.pageTitle;\n $timeout(function () {\n element.text(title);\n });\n };\n $rootScope.$on('$stateChangeStart', listener);\n }\n }\n}])\n\n/**\n * sideNavigation - Directive for run metsiMenu on sidebar navigation\n */\n.directive('sideNavigation',['$timeout', '$rootScope', function sideNavigation($timeout, $rootScope) {\n return {\n restrict: 'A',\n link: function (scope, element, attr) { \n scope.$watch(attr.watchMe, function (newValue, oldValue) { \n if (newValue != oldValue) { \n (element as any).metisMenu({ preventDefault: false });\n }\n \n }) \n }\n };\n}])","angular.module(\"app\")\n\n.directive(\"diapleTranslatableField\", ['$compile', '$translate', 'LanguagesService', '$log',\n function ($compile, $translate, LanguagesService, $log) {\n return {\n restrict: 'A',\n replace: true,\n link: function (scope, element, attrs) {\n\n scope.$watch(attrs[\"ngModel\"], function (value) {\n try {\n\n var model: any = scope;\n\n var modelNames = attrs[\"ngModel\"].split(\".\");\n angular.forEach(modelNames, function (modelName) {\n if (angular.isUndefined(model[modelName])) {\n model[modelName] = [];\n }\n model = model[modelName];\n\n });\n\n //asignamos lenguaje por defecto\n model.selectedLanguageId = $translate.use();\n } catch (e) {\n //si no encuentra modelos salimos\n return;\n }\n\n if (!angular.isUndefined(attrs[\"diapleTranslatableField\"])) {\n LanguagesService.languages()\n .then(\n function (languages) {\n let html = \"
\"; \n\n angular.forEach(languages, function (language, idx) {\n\n //buscamos el lenguaje\n var modelIdx = null;\n angular.forEach(model, function (tl, tlIdx) {\n if (tl.language_id == language.id) modelIdx = tlIdx;\n });\n\n //si no existia, añadimos objeto vacio para el lenguaje\n if (modelIdx == null) {\n model.push({\n language_id: language.id\n });\n modelIdx = model.length - 1;\n }\n\n var modelName = modelBaseName + \"[\" + modelIdx + \"].\" + attrs[\"diapleTranslatableField\"];\n //$log.debug(modelName, eval(modelName));\n html += \"
\";\n if (type == \"text\") {\n html += \"\";\n } else if (type == \"textarea\") {\n html += \"\";\n } else if (type == \"tinymce\") {\n html += \"
\" + modelName + \"
\";\n } else if (type == \"tinymceCustom\") {\n html += \"
\";\n } else if (type == \"tinymceCustomOptions\") {\n html += \"
\";\n } else {\n html += \" \";\n }\n html += \"
\";\n });\n html += \"\";\n element.html(html);\n $compile(element.contents())(scope);\n\n },\n function (error) {\n $log.error(error);\n }\n );\n }//if\n });\n\n }\n };\n}])\n;","angular.module(\"app\")\n\n.directive('select-value-as-number', [function() {\n return {\n require: 'ngModel',\n link: function (scope, element, attrs, ngModel) {\n ngModel.$parsers.push(function (val) {\n return val ? parseInt(val, 10) : null;\n });\n ngModel.$formatters.push(function (val) {\n return val ? '' + val : null;\n });\n }\n };\n }])\n .directive('back', ['$window', function ($window) {\n return {\n restrict: 'A',\n link: function (scope, elem, attrs) {\n elem.bind('click', function () {\n $window.history.back();\n });\n }\n };\n }])\n\n .directive('enter', function () {\n return function (scope, element, attrs) {\n element.bind(\"keydown keypress\", function (event) {\n if (event.which === 13) {\n scope.$apply(function () {\n scope.$eval(attrs.enter);\n });\n\n event.preventDefault();\n }\n });\n };\n });","angular.module(\"app\")\n\n.directive('validDecimal', [function () {\n return {\n require: '?ngModel',\n link: function (scope, element, attrs, ngModelCtrl) {\n if (!ngModelCtrl) {\n return;\n }\n\n ngModelCtrl.$parsers.push(function (val: any) {\n if (angular.isUndefined(val)) {\n val = '';\n }\n var clean = val.replace(/[^0-9\\.]+/g, '');\n var decimalCheck = clean.split('.');\n\n if (!angular.isUndefined(decimalCheck[1])) {\n decimalCheck[1] = decimalCheck[1].slice(0, 2);\n clean = decimalCheck[0] + '.' + decimalCheck[1];\n }\n if (val !== clean) {\n ngModelCtrl.$setViewValue(clean);\n ngModelCtrl.$render();\n }\n return clean;\n });\n\n element.bind('keypress', function (event) {\n if (event.keyCode === 32) {\n event.preventDefault();\n }\n });\n }\n };\n}])\n.directive('validInteger',[ function () {\n return {\n require: '?ngModel',\n link: function (scope, element, attrs, ngModelCtrl) {\n if (!ngModelCtrl) {\n return;\n }\n\n ngModelCtrl.$parsers.push(function (val: any) {\n if (angular.isUndefined(val)) {\n val = '';\n }\n var clean = val.replace(/[^0-9]+/g, '');\n if (val !== clean) {\n ngModelCtrl.$setViewValue(clean);\n ngModelCtrl.$render();\n }\n return clean;\n });\n\n element.bind('keypress', function (event) {\n if (event.keyCode === 32) {\n event.preventDefault();\n }\n });\n }\n };\n}]);\n\n;","import './date-filters'; \nimport './limit-ui-select-filter'; ","import moment from \"moment\";\n\nangular.module(\"events\")\n\n.filter('toLocalDate', function () {\n return function (dateUTCString) {\n //YYYY-MM-DDTHHmm:ss\n if (dateUTCString != null)\n return new Date(dateUTCString);\n return dateUTCString;\n };\n})\n .filter('toUniversalDateCreatedAtHack', function () {\n return function (dateUniversalString) {\n //YYYY-MM-DDTHHmm:ss\n //hack porque el created_at en la base de datos es local y lo devuelve como utc y entonces sale una hora mal.\n if (dateUniversalString != null) {\n return moment(dateUniversalString).add(-1, 'hours').toDate();\n }\n return dateUniversalString;\n };\n })\n","angular.module(\"events\")\n\n.filter('limitUiSelect', function () {\n return function (input, limit, selectedItems, properties, selected, propertiesSelected) {\n if (!_.isArray(input) && !_.isString(input)) {\n return input;\n }\n \n if (limit >= 0) {\n //return input.filter(filterOutExisting).slice(0, limit);\n return filterOutExisting(input);\n } else {\n return input.slice(limit, input.length);\n }\n function filterOutExisting(item) {\n if (typeof properties !== 'undefined' && properties != \"\" && properties != null) {\n if (selectedItems == \"\" || selectedItems == null) {\n //Para que preseleccione....\n if (typeof propertiesSelected !== 'undefined' && propertiesSelected != \"\" && propertiesSelected != null) {\n if (selected != null && selected != \"\" && typeof selected !== \"undefined\") {\n return (item[propertiesSelected] != null ? item[propertiesSelected] === selected : item[propertiesSelected]); //!_.includes(selectedItems, item);\n\n } else {\n return input.slice(0, limit);\n }\n } \n } else {\n return item.filter(x => x[properties].toUpperCase().includes(selectedItems.toUpperCase()));\n \n }\n \n } else {\n return item.filter(x => x[properties].toUpperCase().includes(selectedItems.toUpperCase()));\n }\n\n }\n \n };\n})\n","import \"./event-service\";\nimport \"./eventos-grid-service\";\nimport \"./generate-document-service\";\nimport \"./grid-service\";\nimport \"./http-interceptor-service\";\nimport \"./languages-services\";\nimport \"./login-service\";\nimport \"./modal-service\";\nimport \"./notification-service\";\nimport \"./spaces-service\";\nimport \"./tree-service\";\nimport \"./update-service\";\nimport \"./bee-service\";\n","import Bee from '@beefree.io/sdk';\nimport angular from 'angular';\n\nangular.module(\"app\")\n\n .service('BeeService', ['$http', '$q', 'Restangular', '$rootScope', '$timeout', function ($http, $q, Restangular, $rootScope, $timeout,) {\n let endpoint = \"https://auth.getbee.io/apiauth\";\n\n let config_email = {\n client_id: \"958cfa50-f6d0-470f-bdfa-34ab8a4862fa\", // Enter your client id\n client_secret: \"a3pX7dmiSzlvRLDge4Qc6wqBqZ5KnDT99ghuzHvqprRDWSQwilQf\", // Enter your secret key\n grant_type: \"password\" // Do not change\n };\n\n let config_html = {\n client_id: \"826b6a37-1d11-4725-94ab-cc67b493d186\", // Enter your client id\n client_secret: \"Tn1FP7B9G1oIetrsdVT7rvKgct2pDCSduvbWGYJmZ4a8XmW1syc4\", // Enter your secret key\n grant_type: \"password\" // Do not change\n };\n\n let savedDeferred: any = undefined;\n\n let config_instance: any = {\n container: 'bee-plugin-container',\n language: 'es-ES',\n onSave: function (jsonFile, htmlFile) {\n if(savedDeferred !== undefined) {\n savedDeferred.resolve({\n json: jsonFile,\n html: htmlFile\n });\n }\n }\n };\n \n let bee;\n let token = undefined;\n \n return {\n start: function (template, config: string | null = null) {\n let payload = config_email;\n if (config === 'html') {\n payload = config_html;\n }\n \n bee = new Bee(token);\n\n bee.getToken(payload.client_id, payload.client_secret).then(function () {\n Restangular.one('Companies', $rootScope.company_id).get().then(function (results) {\n config_instance.uid = 'stela-' + results.uid;\n bee.start(config_instance, template);\n }, function (response) {\n });\n\n });\n },\n reload: function (template, config = null) {\n this.start(template,config);\n },\n save: function () {\n savedDeferred = $q.defer();\n let promise = savedDeferred.promise;\n bee.save();\n return promise;\n },\n };\n }]);\n","angular.module(\"app\")\n\n.service('eventService', ['$http','$q', 'Restangular', function ($http, $q, Restangular) {\n var resultado = null;\n var service = {\n getGuests: function (event_id) {\n var deferred = $q.defer();\n var promise = deferred.promise;\n var options = { event_id: event_id }\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + '/EventsGuests/GetEventGuest',\n params: options\n }).then(function (data, status, headers, config) { \n deferred.resolve(data);\n });\n return promise;\n },\n getStaff: function (event_id) {\n var deferred = $q.defer();\n var promise = deferred.promise;\n var options = { event_id: event_id }\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + '/EventsStaff/GetEventStaff',\n params: options\n }).then(function (data, status, headers, config) {\n deferred.resolve(data);\n });\n return promise;\n },\n getTasks: function (event_id) {\n var deferred = $q.defer();\n var promise = deferred.promise;\n var options = { event_id: event_id }\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + '/EventsTaks/GetEventTasks',\n params: options\n }).then(function (data, status, headers, config) {\n deferred.resolve(data);\n });\n return promise;\n },\n getMaterials: function (event_id) {\n var deferred = $q.defer();\n var promise = deferred.promise;\n var options = { event_id: event_id }\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + '/EventsMaterials/GetEventMaterial',\n params: options\n }).then(function (data, status, headers, config) {\n deferred.resolve(data);\n });\n return promise;\n },\n getPendingInscriptions: function (event_id) {\n var deferred = $q.defer();\n var promise = deferred.promise;\n var options = { event_id: event_id }\n $http({\n method: 'get',\n url: (window as any).CONFIG.api_url + '/inscriptions/GetPendingInscriptions',\n params: options\n }).then(function (data, status, headers, config) {\n deferred.resolve(data);\n });\n return promise;\n },\n getSpaces: function (event_id) {\n return Restangular.one('events', + event_id).getList('spaces');\n },\n getSpaceZones: function (event_id, space_id) {\n return Restangular.one('events', + event_id).one('spaces', space_id).getList('zones');\n },\n addEventGuestSpaceZone: function (event_id, event_space_id, event_space_zone_id, event_guest_id) {\n return Restangular.one('events', event_id)\n .one('spaces', event_space_id)\n .one('zones', event_space_zone_id)\n .one('guests', event_guest_id).post();\n },\n modifyEventGuestSpaceZone: function (event_id, event_space_id, event_space_zone_id, event_guest_id) {\n return Restangular.one('events', event_id)\n .one('spaces', event_space_id)\n .one('zones', event_space_zone_id)\n .one('guests', event_guest_id).put();\n }\n };\n return service;\n}])\n\n .filter('to_trusted', ['$sce', function ($sce) {\n return function (text) {\n return $sce.trustAsHtml(text);\n };\n }]);\n","angular.module(\"app\")\n\n.factory(\"eventosGridService\", ['uiGridConstants', 'Restangular', '$timeout', '$filter', '$translate', function (uiGridConstants, Restangular, $timeout, $filter, $translate) {\n var service = {\n maleFemaleTemplate: function (propertyName) {\n return \"
{{row.entity.\" + propertyName + \"=='M'?\"+$filter('translate')('persons.male')+\":\"+$filter('translate')('persons.female')+\"}}
\";\n },\n maleFemaleFilter: function (propertyName) {\n return {\n term: \"\",\n type: uiGridConstants.filter.SELECT,\n selectOptions: [{ value: 'M', label: $filter('translate')('persons.male') }, { value: 'F', label: $filter('translate')('persons.female') }]\n };\n }\n };\n return service;\n}]);","import PrintModalView from \"../../app/events/common/printModal.html\";\nimport DocumentsModalView from \"../../app/common/modal/documentsModal.html\";\n\n\nangular.module(\"app\")\n\n.factory(\"generateDocumentService\", ['$injector', '$log', function ($injector, $log) {\n var service = {\n document: function (options) {\n $log.debug(\"HAY QUE CAMBIARLOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO \");\n var $uibModal = $injector.get(\"$uibModal\");\n let $modalInstance = $uibModal.open({\n animation: true,\n template: PrintModalView,\n controller: 'ModalGenerateDocumentCtrl',\n size: 'extra-lg',\n resolve: {\n options: function () { $log.debug(options); return options; }\n }\n }); \n\n $modalInstance.result.then(function (data) {\n options.onAccept(data); //Devolvemos el control al controlador que lo invoca\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n });\n\n },\n documentNew: function (options) {\n /*\n * EJEMPLOS DE PARAMETROS DE ENTRADA\n * añadiendo directamente el codigo del document_type\n * var params = {\n entity_type: \"correspondence\",\n documents: { codes: [\"CORRESPONDENCE\"] }\n };\n * var params = {\n entity_type: \"correspondence\",\n entity_type_id: $stateParams.id, //si estamos en una correspondencia en concreto.\n documents: { codes: [\"CORRESPONDENCE_RESPONSE\"] }\n }; \n var params = {\n entity_type: \"events\",\n entity_type_id: $stateParams.id, //si estamos en un evento.\n documents: { for_event_staff: true } //seran todos los documentos marcados como para staff.\n };\n */\n var $uibModal = $injector.get(\"$uibModal\");\n\n let $modalInstance = $uibModal.open({\n animation: true,\n template: DocumentsModalView,\n controller: 'ModalDocumentsTypesCtrl',\n size: 'extra-lg',\n resolve: {\n options: function () { return options; }\n }\n });\n\n\n $modalInstance.result.then(function (data) {\n $log.debug(data);\n options.onAccept(data); //Devolvemos el control al controlador que lo invoca\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n });\n\n }\n };\n return service;\n}])\n;","angular.module(\"app\")\n\n.config(['$provide', function ($provide) {\n\n //sobreescribimos metodos de ui-grid-exporter\n $provide.decorator('uiGridExporterService', [\"$filter\", \"$delegate\", function ($filter, $delegate) {\n $delegate.pdfExport = function (grid, rowTypes, colTypes) {\n var self = this;\n this.loadAllDataIfNeeded(grid, rowTypes, colTypes).then(function () {\n var exportColumnHeaders = self.getColumnHeaders(grid, colTypes);\n angular.forEach(exportColumnHeaders, function (header) {\n angular.forEach(grid.columns, function (column) {\n if (column.field == header.name) {\n header.colDef = column.colDef;\n }\n });\n });\n $delegate.exportColumnsTmp = exportColumnHeaders;\n\n var exportData = self.getData(grid, rowTypes, colTypes);\n var docDefinition = self.prepareAsPdf(grid, exportColumnHeaders, exportData);\n if (self.isIE()) {\n self.downloadPDF(grid.options.exporterPdfFilename, docDefinition);\n } else {\n pdfMake.createPdf(docDefinition).download(grid.options.pdfTitle + '.pdf');\n //pdfMake.createPdf(docDefinition).open();\n //.gridOptions.gridApi.exporter.pdfExport(uiGridExporterConstants.ALL, uiGridExporterConstants.ALL);\n }\n });\n };\n $delegate.formatRowAsPdf = function (exporter) {\n return function (row) {\n return row.map(exporter.formatFieldAsPdfString);\n };\n };\n $delegate.formatFieldAsPdfString = function (field, idx) {\n var returnVal;\n var column = $delegate.exportColumnsTmp[idx];\n if (angular.isDefined(column.colDef) && angular.isDefined(column.colDef.customFormatFn)) {\n returnVal = column.colDef.customFormatFn(field.value);\n } else {\n if (field.value == null) { // we want to catch anything null-ish, hence just == not ===\n returnVal = '';\n } else if (typeof (field.value) === 'number') {\n returnVal = field.value.toString();\n } else if (typeof (field.value) === 'boolean') {\n returnVal = (field.value ? 'Si' : 'No');\n } else if (typeof (field.value) === 'string') {\n //comprobamos si tiene tipo\n if (angular.isDefined(column.colDef) && angular.isDefined(column.colDef.type)) {\n if (column.colDef.type == \"date\") {\n returnVal = $filter('date')(field.value, \"dd/MM/yyyy HH:mm:ss\");\n } else {\n returnVal = field.value.replace(/\"/g, '\"\"');\n }\n } else {\n returnVal = field.value.replace(/\"/g, '\"\"');\n }\n } else {\n returnVal = JSON.stringify(field.value).replace(/^\"/, '').replace(/\"$/, '');\n }\n\n }\n\n if (field.alignment && typeof (field.alignment) === 'string') {\n returnVal = { text: returnVal, alignment: field.alignment };\n }\n\n return returnVal;\n };\n return $delegate;\n }]);\n\n\n}])\n\n .factory(\"gridService\", ['uiGridConstants', 'Restangular', '$timeout', '$filter', function (uiGridConstants, Restangular, $timeout, $filter) {\n var service = {\n yesNoTemplate: function (propertyName) {\n return \"
{{row.entity.\" + propertyName + \"?'Si':'No'}}
\";\n },\n\n hourTemplate: function () {\n return \"
\";\n },\n\n linkTemplate: function (value, linkRef, linkId) {\n return \"
{{row.entity.\" + value + \"}}
\";\n },\n actionTemplate: function (actions, options) {\n var ret = \"\";\n angular.forEach(actions, function (action) {\n var cssClass = \"btn btn-xs btn-default btn-outline\";\n if (typeof action.cssClass != \"undefined\") cssClass = action.cssClass;\n ret += \" \" + action.title + \"\\n\";\n });\n var cssClass = \"\";\n if (angular.isDefined(options)) {\n if (angular.isDefined(options.cssClass)) cssClass = options.cssClass;\n }\n return \"
\" + ret + \"
\";\n },\n actionIconNoSpaceTemplate: function (actions, options) {\n var ret = \"\";\n angular.forEach(actions, function (action) {\n var cssClass = \"btn btn-xs btn-default btn-outline\";\n if (typeof action.cssClass != \"undefined\") cssClass = action.cssClass;\n ret += \"\" + action.title + \"\\n\";\n });\n var cssClass = \"\";\n if (angular.isDefined(options)) {\n if (angular.isDefined(options.cssClass)) cssClass = options.cssClass;\n }\n return \"
\" + ret + \"
\";\n },\n actionIconTemplate: function (actions, options) {\n var ret = \"\";\n angular.forEach(actions, function (action) {\n var cssClass = \"btn btn-xs aColorGrey\";\n if (typeof action.cssClass != \"undefined\") cssClass = action.cssClass;\n ret += \" \" + action.title + \"\\n\";\n });\n var cssClass = \"\";\n if (angular.isDefined(options)) {\n if (angular.isDefined(options.cssClass)) cssClass = options.cssClass;\n }\n return \"
\" + ret + \"
\";\n },\n yesNoFilter: function (propertyName) {\n return {\n term: \"\",\n type: uiGridConstants.filter.SELECT,\n selectOptions: [{ value: 'true', label: 'Si' }, { value: 'false', label: 'No' }]\n };\n },\n colorTemplate: function (field_name, tree_level) { \n return \"
 
\";\n\n //return \"
{{row.entity.\" + field_name + \"}}
\";\n },\n stateTaskTemplate: function (code, name) {\n //
{{ user.id }}
\n return \"
\" +\n \"
\" +\n \"
\" +\n \"
\";\n \n },\n customStringTemplate: function (objectValues, separator) {\n var returnTemplate = \"\";\n if (typeof (separator) !== \"undefined\") separator = \" \";\n angular.forEach(objectValues, function (item) {\n if (item !== \"\" && item !== null) {\n\n returnTemplate += (returnTemplate == \"\"\n ? ' {{row.entity.' + item + '}}'\n : '' + separator + ' {{row.entity.' + item + '}}');\n }\n\n });\n return \"
\" + returnTemplate + \"
\";\n },\n customReplaceTemplate: function (item, separator1, separator2) {\n var returnTemplate = \"\";\n var textValue = \"\";\n if (typeof (separator1) !== \"undefined\") separator1 = \"\";\n if (typeof (separator2) !== \"undefined\") separator2 = \"\";\n if (item !== \"\" && item !== null) {\n textValue = '{{row.entity.' + item + '}}';\n textValue = textValue.replace(separator1, separator2);\n returnTemplate += textValue;\n }\n return \"
\" + returnTemplate + \"
\";\n },\n entityTypeTemplate: function (propertyName) {\n //$filter('translate')('tasks_status.delete_message')\n\n return \"
\" + $filter('translate')('entity_types.events') +\"
\" +\n \"
\" + $filter('translate')('entity_types.persons') + \"
\" +\n \"
\" + $filter('translate')('entity_types.correspondence') + \"
\" +\n \"
\" + $filter('translate')('entity_types.restaurants') + \"
\" +\n \"
\" + $filter('translate')('entity_types.general') + \"
\" +\n \"
\" + $filter('translate')('entity_types.staff') + \"
\";\n },\n\n };\n return service;\n}]);","angular.module(\"app\")\n\n .factory('httpInterceptorService', ['$q', 'modalService', '$templateCache', '$injector', '$rootScope', '$log', function ($q, modalService, $templateCache, $injector, $rootScope, $log) {\n return {\n //para qutiar cache de modal\n 'request': function (request) {\n if(request.url.indexOf(\"Auth/Refresh\") > -1) {\n return request;\n }\n if (request.url.indexOf(\".html\") > 0 && request.method === 'GET' && $templateCache.get(request.url) === undefined) {\n request.url += '?ver=' + (new Date()).getTime();\n delete request.headers.Authorization;\n return request;\n }\n\n if (request.url.indexOf(\"presidencia.gob.es\") > -1\n || request.url.indexOf(\"auth0.com\") > -1\n || request.url.indexOf(\"getbee.io\") > -1) {\n delete request.headers.language_code;\n }\n\n let defer = $q.defer();\n\n let loginService = $injector.get('LoginService');\n\n if(loginService.isLoggedIn() && loginService.shouldRefreshToken(request.url)) {\n loginService.refresh().then(function (response) {\n if(response.data.token !== undefined) {\n request.headers.Authorization = \"Bearer \" + response.data.token.accessToken;\n } else {\n request.headers.Authorization = \"Bearer \" + response.data.access_token;\n }\n defer.resolve(request);\n });\n } else {\n defer.resolve(request);\n }\n return defer.promise;\n },\n\n 'requestError': function (rejection) {\n $log.debug(\"requestError\", rejection);\n modalService.httpError({\n title: \"Ocurrió un error en la petición\",\n message: \"\",\n rejection: rejection\n });\n return $q.reject(rejection);\n },\n };\n }]);","angular.module(\"app\")\n\n .service('LanguagesService', [\"$q\", \"Restangular\", function ($q, Restangular) {\n var service = {\n languages: function (name, pw) {\n var deferred = $q.defer();\n var promise = deferred.promise;\n Restangular.all('Languages').getList({ use_for_translation: true }).then(function (languages) {\n deferred.resolve(languages);\n },\n function (error) {\n deferred.reject(error);\n });\n return promise;\n }\n };\n return service;\n }]);\n /*\n.provider('LanguagesService', function () {\n var provider = {};\n provider.$get = function ($http, $q, Restangular) {\n var service = {\n languages: function (name, pw) {\n var deferred = $q.defer();\n var promise = deferred.promise;\n Restangular.all('Languages').getList().then(function (languages) {\n deferred.resolve(languages);\n },\n function (error) {\n deferred.reject(error);\n });\n return promise;\n }\n };\n return service;\n };\n return provider;\n})*/\n","angular.module(\"app\")\n.service('LoginService', ['$http', '$q', 'Restangular', '$rootScope', '$log', '$httpParamSerializer', '$state', function ($http, $q, Restangular, $rootScope, $log, $httpParamSerializer, $state) {\n let refreshPromise;\n let transformUrlEncoded = function (data) {\n return $httpParamSerializer(data);\n };\n\n let coerceToBase64Url = function (thing) {\n // Array or ArrayBuffer to Uint8Array\n if (Array.isArray(thing)) {\n thing = Uint8Array.from(thing);\n }\n\n if (thing instanceof ArrayBuffer) {\n thing = new Uint8Array(thing);\n }\n\n // Uint8Array to base64\n if (thing instanceof Uint8Array) {\n var str = \"\";\n var len = thing.byteLength;\n\n for (var i = 0; i < len; i++) {\n str += String.fromCharCode(thing[i]);\n }\n thing = window.btoa(str);\n }\n\n if (typeof thing !== \"string\") {\n throw new Error(\"could not coerce to string\");\n }\n\n // base64 to base64url\n // NOTE: \"=\" at the end of challenge is optional, strip it off here\n thing = thing.replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=*$/g, \"\");\n\n return thing;\n };\n \n let service = {\n get: function (key) {\n let value = localStorage.getItem(key);\n //fix para solucionar problema con plantillas en madrid\n if(value==null && key==\"language\") value = 'ES';\n return value;\n },\n loginUser: function (name, pw) {\n let deferred = $q.defer();\n let promise = deferred.promise;\n\n if (name != \"\" && pw != \"\") {\n $http.post((window as any).CONFIG.api_url + '/Auth/Login', { email: name, password: pw, withCredentials: true })\n .then(function (response) {\n deferred.resolve(response.data);\n })\n .catch(function (data, status, headers, config) {\n deferred.reject('Wrong credentials.');\n });\n } else {\n deferred.reject('Wrong credentials.');\n }\n return promise;\n },\n //creamos una sesión //setter\n set: function (key, val) {\n if (key == \"token\") Restangular.setDefaultRequestParams({ token: val });\n return localStorage.setItem(key, val)\n },\n //limpiamos una sesión\n unset: function (key) {\n if (key == \"token\") Restangular.setDefaultRequestParams({ token: \"\" });\n return localStorage.removeItem(key)\n },\n isLoggedIn: function () {\n if (localStorage.getItem(\"accessToken\") != null) {\n $http.defaults.headers.common[\"Authorization\"] = \"Bearer \" + localStorage.getItem(\"accessToken\");\n return true\n } else return localStorage.getItem(\"userId\") != null;\n },\n wantToBeRemembered: function () {\n\n return localStorage.getItem(\"remember\");\n },\n permissionExist: function (permission) {\n var value = localStorage.getItem(\"rolesPermissions\");\n if (value != null) {\n var res = value.split(\",\");\n var index = res.indexOf(permission);\n if (index != -1) {\n return true;\n } else {\n return false;\n }\n } else {\n return false;\n }\n },\n closeSession: function () {\n $rootScope.islogged = false;\n //deleteCookie(\"token\");\n localStorage.removeItem(\"accessToken\");\n localStorage.removeItem(\"refreshToken\");\n localStorage.removeItem(\"rolesPermissions\");\n localStorage.removeItem(\"userName\");\n localStorage.removeItem(\"userId\");\n localStorage.removeItem(\"accessTokenValidTo\");\n if (!localStorage.getItem(\"remember\")) {\n localStorage.removeItem(\"name\");\n localStorage.removeItem(\"user\");\n }\n try {\n delete $http.defaults.headers.common.Authorization;\n } catch (e) { }\n $.get((window as any).CONFIG.api_url + \"Auth/Logout\", function () {\n location.replace(\"/\");\n });\n \n },\n shouldRefreshToken: function(url) {\n return url.match(/api\\/\\/Auth\\/Refresh/) == null && url.indexOf(\"/api\") >= 0\n && new Date() > new Date(this.get(\"accessTokenValidTo\"));\n },\n refresh: function () {\n if (!refreshPromise) {\n delete $http.defaults.headers.common[\"Authorization\"];\n let defered = $q.defer();\n refreshPromise = defered.promise;\n\n delete $http.defaults.headers.common.Authorization;\n\n $log.debug(\"Refrescando token\");\n let authService = localStorage.getItem(\"authService\");\n if(authService == null) {\n $http.post((window as any).CONFIG.api_url + \"Auth/Refresh\",\n {RefreshToken: service.get('refreshToken'), AccessToken: service.get('accessToken')})\n .then(function (response) {\n if(response.status != 200) {\n service.closeSession();\n defered.reject(response);\n $state.go(\"login\");\n } else {\n service.saveTokenInfo(response.data, null, true);\n defered.resolve(response);\n }\n }).catch(function (response) {\n service.closeSession();\n defered.reject(response);\n $state.go(\"login\");\n });\n } else {\n let parsedService = JSON.parse(authService);\n $log.debug(parsedService);\n let openid = JSON.parse(parsedService.openid_configuration);\n\n $http({\n method: \"post\",\n url: openid.token_endpoint,\n transformRequest: transformUrlEncoded,\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n data: {\n 'client_id': parsedService.client_id,\n 'grant_type': 'refresh_token',\n 'refresh_token': service.get('refreshToken')\n }\n }).then(function (response) {\n $log.debug(\"Token refrescado\");\n $log.debug(response.data);\n $http.defaults.headers.common[\"Authorization\"] = \"Bearer \" + response.data.access_token;\n service.set(\"accessToken\", response.data.access_token);\n if(typeof(response.data.refresh_token) !== \"undefined\") {\n service.set(\"refreshToken\", response.data.refresh_token);\n }\n service.set(\"expires_in\", response.data.expires_in);\n service.set(\"accessTokenValidTo\", new Date(response.data.expires_in * 1000 + Date.now()).toISOString());\n defered.resolve(response);\n });\n }\n refreshPromise.finally(() => refreshPromise = null);\n }\n\n return refreshPromise;\n },\n saveTokenInfo: function (data, loginData = null, newLogin = false) {\n if(!newLogin) {\n $http.defaults.headers.common[\"Authorization\"] = \"Bearer \" + data.token.accessToken;\n service.set(\"accessToken\", data.token.accessToken);\n service.set(\"refreshToken\", data.refresh_token);\n service.set(\"accessTokenValidTo\", data.token.validTo);\n } else {\n service.set(\"accessTokenValidTo\", new Date(data.token.expires_in * 1000 + Date.now()).toISOString());\n }\n \n service.set(\"userName\", data.user_name);\n service.set(\"user\", data.user_name);\n service.set(\"userId\", data.token.userId);\n service.set(\"userIcon\", data.user_icon);\n if(data.company_id != 0) {\n service.set(\"companyId\", data.company_id);\n }\n if(loginData != null) {\n service.set(\"remember\", loginData.remember);\n }\n if(data.roles_permissions != null) {\n service.set(\"rolesPermissions\", data.roles_permissions);\n }\n if(data.language != null) {\n service.set(\"language\", data.language);\n $http.defaults.headers.common[\"language_code\"] = data.language;\n }\n },\n validateUser: function(loginData = null) {\n $http.post((window as any).CONFIG.api_url + 'Auth/validate/user', loginData)\n .then(function (result) {\n if(result.data.success) {\n service.nextStep();\n }\n });\n },\n checkWebauthn: function() {\n Restangular.all('Auth').customPOST({}, 'WebAuthn/AssertionOptions', {}).then(async function (makeAssertionOptions) {\n $log.debug(makeAssertionOptions);\n if (makeAssertionOptions.status === \"ok\") {\n const challenge = makeAssertionOptions.challenge.replace(/-/g, \"+\").replace(/_/g, \"/\");\n makeAssertionOptions.challenge = Uint8Array.from(atob(challenge), c => c.charCodeAt(0));\n\n // fix escaping. Change this to coerce\n makeAssertionOptions.allowCredentials.forEach(function (listItem) {\n var fixedId = listItem.id.replace(/\\_/g, \"/\").replace(/\\-/g, \"+\");\n listItem.id = Uint8Array.from(atob(fixedId), c => c.charCodeAt(0));\n });\n\n // ask browser for credentials (browser will ask connected authenticators)\n let credential;\n try {\n credential = await navigator.credentials.get({ publicKey: makeAssertionOptions })\n } catch (err) {\n $log.error(err);\n }\n\n try {\n await service.verifyAssertionWithServer(credential);\n } catch (e) {\n $log.error(e);\n }\n }\n });\n },\n verifyAssertionWithServer: async function (assertedCredential) {\n $log.debug(\"Verifying assertion with server\");\n $log.debug(assertedCredential);\n // Move data into Arrays incase it is super long\n let authData = new Uint8Array(assertedCredential.response.authenticatorData);\n let clientDataJSON = new Uint8Array(assertedCredential.response.clientDataJSON);\n let rawId = new Uint8Array(assertedCredential.rawId);\n let sig = new Uint8Array(assertedCredential.response.signature);\n let userHandle = new Uint8Array(assertedCredential.response.userHandle)\n const data = {\n id: assertedCredential.id,\n rawId: coerceToBase64Url(rawId),\n type: assertedCredential.type,\n extensions: assertedCredential.getClientExtensionResults(),\n response: {\n authenticatorData: coerceToBase64Url(authData),\n clientDataJSON: coerceToBase64Url(clientDataJSON),\n userHandle: userHandle !== null ? coerceToBase64Url(userHandle): null,\n signature: coerceToBase64Url(sig)\n }\n };\n\n Restangular.all('Auth').customPOST(JSON.stringify(data), 'WebAuthn/MakeAssertionNew', {}, {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json'\n }).then(function (response) {\n // show error\n if (response.status !== \"ok\") {\n $log.error(\"Error doing assertion\");\n $log.error(response.errorMessage);\n return;\n }\n service.nextStep();\n });\n },\n validateAuthenticator: function(loginData) {\n if (loginData.authenticator_code.length === 6) {\n const data = {\n code: loginData.authenticator_code,\n };\n $http.post((window as any).CONFIG.api_url + 'Auth/Validate/Authenticator', data)\n .then(function (result) {\n if (result.data.success) {\n service.nextStep();\n }\n });\n }\n },\n validateYubicoOTP: function(loginData) {\n if (loginData.yubico_otp.length > 0) {\n const data = {\n code: loginData.yubico_otp\n };\n $http.post((window as any).CONFIG.api_url + 'Auth/Validate/YubicoOTP', data)\n .then(function (result) {\n if (result.data.success) {\n service.nextStep();\n }\n });\n } \n },\n loginExternal: function(service) {\n $log.info(\"External login with \" + service.name);\n $http.get((window as any).CONFIG.api_url + 'Auth/Challenge/' + service.id)\n .then(function (result) {\n location.href = result.data;\n });\n },\n nextStep: function(processId = null) {\n let url = (window as any).CONFIG.api_url + 'Auth/next';\n if(processId != null) {\n url += '/' + processId;\n }\n return $http.get(url)\n .then(function (response) {\n if(response.status === 202) {\n service.getAuthInfo();\n } else {\n $rootScope.step = response.data;\n return response.data;\n }\n });\n },\n getAuthInfo: function() {\n $http.get((window as any).CONFIG.api_url + 'Auth/info').then(function (response) {\n if(response.data.success) {\n $rootScope.loginProcess = false;\n service.saveTokenInfo(response.data.info, null, true);\n $state.go('dashboard.list');\n }\n });\n },\n };\n return service;\n}]);\n","import MessageModalView from \"../../app/common/modal/message.html\";\nimport ConfirmModalView from \"../../app/common/modal/confirm.html\";\nimport HttpErrorModalView from \"../../app/common/modal/httpError.html\";\nimport MailModalView from \"../../app/common/modal/mail.html\";\nimport ImageModalView from \"../../app/common/modal/image.html\";\n\nangular.module(\"app\")\n\n.factory(\"modalService\", ['$injector', function ($injector) {\n var instance = null;\n function remove() {\n instance = null;\n }\n var service = {\n message: function (options) {\n if (instance != null) return;\n var $uibModal = $injector.get(\"$uibModal\");\n instance = $uibModal.open({\n animation: true,\n template: MessageModalView,\n controller: 'ModalInstanceCtrl',\n size: 'sm',\n resolve: {\n options: function(){ return options; }\n }\n });\n instance.result.then(remove, remove)\n },\n confirm: function (options, size='sm') {\n if (instance != null) return;\n var $uibModal = $injector.get(\"$uibModal\");\n instance = $uibModal.open({\n animation: true,\n template: ConfirmModalView,\n controller: 'ModalInstanceCtrl',\n size: size,\n resolve: {\n options: function () { return options; }\n }\n });\n instance.result.then(remove, remove)\n },\n\n httpError: function (options) {\n if (instance != null) return;\n var $uibModal = $injector.get(\"$uibModal\");\n instance = $uibModal.open({\n animation: true,\n template: HttpErrorModalView,\n controller: 'ModalInstanceCtrl',\n size: 'lg',\n resolve: {\n options: function () { return options; }\n }\n });\n instance.result.then(remove, remove)\n },\n mail: function (options) {\n if (instance != null) return;\n var $uibModal = $injector.get(\"$uibModal\");\n instance = $uibModal.open({\n animation: true,\n template: MailModalView,\n controller: 'ModalSendMailCtrl',\n size: 'lg',\n resolve: {\n options: function () { return options; }\n }\n });\n instance.result.then(remove, remove)\n },\n image: function (options) {\n if (instance != null) return;\n var $uibModal = $injector.get(\"$uibModal\");\n instance = $uibModal.open({\n animation: true,\n template: ImageModalView,\n controller: 'ModalAddImageCtrl',\n size: 'lg',\n resolve: {\n options: function () { return options; }\n }\n });\n instance.result.then(remove, remove)\n },\n };\n return service;\n}]);","import NotificationsMailView from \"../../app/common/notifications_templates_mails/notificationsMail.html\";\nimport PushNotificationView from \"../../app/common/push_notifications/pushNotification.html\";\n\n\nangular.module(\"app\")\n\n.factory(\"notificationService\", ['$injector', '$log', function ($injector, $log) {\n // modal para mandar email de notificaciones.\n /*Parametros de entrada. O directamente una lista de codigos de documents_types o pasarle los checks de true/false\n * var params = {\n entity_type: \"correspondence\",\n entity_type_id: $stateParams.id,\n documents: { for_correspondence: true }\n };\n var params = {\n persons_ids: [], event_staffs_ids:[],event_guests_ids:[],\n entity_type: \"events\",\n entity_type_id: $stateParams.id,\n mail_account_id: null,\n mail_account_reply: null,\n documents: { codes: [\"PROPOSAL_GUEST_LIST\", \"GUEST_LIST_ADDRESSES\"] }\n };\n * */\n\n var service = {\n notificationMail: function (options) {\n var $uibModal = $injector.get(\"$uibModal\");\n let $modalInstance = $uibModal.open({\n animation: true,\n template: NotificationsMailView,\n controller: 'NotificationsMailCtrl',\n size: 'lg',\n resolve: {\n options: function () { $log.debug(options); return options; }\n },\n windowClass: 'mailing-modal'\n });\n $modalInstance.result.then(function (data) {\n options.onAccept(data); //Devolvemos el control al controlador que lo invoca\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n });\n\n },\n notificationPush: function (options) {\n var $uibModal = $injector.get(\"$uibModal\");\n let $modalInstance = $uibModal.open({\n animation: true,\n template: PushNotificationView,\n controller: 'PushNotificationsCtrl',\n size: 'lg',\n resolve: {\n options: function () { $log.debug(options); return options; }\n }\n });\n $modalInstance.result.then(function (data) {\n options.onAccept(data); //Devolvemos el control al controlador que lo invoca\n }, function () {\n console.info('Modal dismissed at: ' + new Date());\n });\n }\n };\n return service;\n}])\n;","angular.module(\"app\")\n.service('SpacesService', ['$http', 'Restangular', '$rootScope', '$log', function ($http, Restangular, $rootScope, $log) {\n $log = $log.getInstance(\"SpacesService\");\n function isPlaceFreeByZone(place, zone) {\n if (typeof zone.guests != \"undefined\") {\n for (let z = 0; z < zone.guests.length; z++) {\n if (parseInt(zone.guests[z].prefered) === parseInt(place)) {\n return false;\n }\n }\n }\n for (let j = 0; j < zone._objects.length; j++) {\n if(zone._objects[j].type === \"group\") {\n if(!isPlaceFreeByZone(place, zone._objects[j])) {\n return false;\n }\n }\n }\n return true;\n }\n \n function isPlaceFree(place, items) {\n for (let aux = 0; aux < items.length; aux++) {\n let zone = items[aux];\n if (zone.type === \"group\") {\n if(!isPlaceFreeByZone(place, zone))\n {\n return false;\n }\n }\n }\n return true;\n }\n \n return {\n arePlacesFree: function (firstPlace, increment, numPlaces, items) {\n let places = [];\n for (let i = firstPlace, j = 0; j < numPlaces; i += increment, j++) {\n if(!isPlaceFree(i, items)) {\n places.push(i);\n }\n }\n return places;\n },\n deleteGuestZone: function (eventId, spaceId, zoneId, guestId, preferedPosition) {\n $log.debug(\"deleteGuestZone: \" + eventId + \" \" + spaceId + \" \" + zoneId + \" \" + guestId + \" \" + preferedPosition);\n Restangular.one('Events', eventId)\n .one('Spaces', spaceId)\n .one('Zones', zoneId)\n .one('Guests', guestId)\n .one('Place', preferedPosition)\n .remove().then(function (response) {\n });\n }\n };\n}]);\n","angular.module(\"app\")\n\n.factory('treeService', ['$injector', function ($injector) {\n\n\n let service = {\n menuTree: function (menusItems, menuItemId, treeMenusItems) {\n let $l1 = [];\n\n\n function pintarRecursivo($actual, level) {\n\n if ($actual.parent_menu_item_id == null) $actual.$$treeLevel = level; \n treeMenusItems.push($actual);\n angular.forEach(menusItems, function (menuItem) {\n if (menuItem.parent_menu_item_id == $actual.id) {\n //recorremos el treeMenusItems para decir que ya no es ultimo.\n angular.forEach(treeMenusItems, function (m) {\n if (m.id == $actual.id) {\n m.$$treeLevel = level;\n }\n });\n return pintarRecursivo(menuItem, level + 1);\n }\n });\n };\n\n\n //Obtenemos los padres\n angular.forEach(menusItems, function (menuItem) {\n\n if (menuItem.parent_menu_item_id == null) {\n if (menuItem.id != null) {\n $l1.push(menuItem);\n } \n }\n\n });\n\n //Pintamos\n angular.forEach($l1, function (menuItemParent) {\n\n pintarRecursivo(menuItemParent, 0);\n });\n\n return treeMenusItems;\n },\n\n languageTree: function (resourcesItem, language_id) {\n let treeLanguagesItems = [];\n\n //Obtenemos los padres\n let nombreModulo = \"\";\n for (let i = 0; i < resourcesItem.length; i++ ){\n let itemId = resourcesItem[i];\n let itemNuevo: any = {};\n if (itemId.module != nombreModulo) {\n itemNuevo.module = itemId.module;\n itemNuevo.isParent = 1;\n itemNuevo.value = \"\";\n itemNuevo.code = \"\";\n itemNuevo.FK_resources_tl_resources = [];\n itemNuevo.$$treeLevel = 0;\n itemNuevo.id = \"\";\n treeLanguagesItems.push(itemNuevo);\n for (i; i < resourcesItem.length; i++) {\n let item = resourcesItem[i];\n if (item.module == itemNuevo.module) {\n\n item.isParent = 0;\n item.language_id = language_id;\n item.resource_id = item.id;\n angular.forEach(item.FK_resources_tl_resources, function (m) {\n if (m.language_id == language_id) {\n item.value = m.value;\n item.FK_resources_tl_resources_id = m.id;\n }\n });\n treeLanguagesItems.push(item);\n } else {\n i--;\n break;\n }\n\n }\n }\n nombreModulo = itemId.module;\n }\n \n return treeLanguagesItems;\n },\n\n groups: function (groups, menuItemId, showOrder) {\n let $l1 = [];\n let treeGroups = [];\n let blankBlock = \"      \";\n\n function pintarRecursivo($actual, level, super_parent_id) {\n\n $actual.$$treeLevel = level;\n $actual.super_parent_id = super_parent_id;\n\n let auxmargin = level * 15;\n let blankBlockLevel = \".\";\n\n let priorityText = \"\";\n if($actual.priority != null) {\n priorityText = $actual.priority + \". \";\n }\n if (showOrder)\n $actual.customName = '     ' + priorityText + \" (\" + $actual.preferred_order + \") \" + $actual.name;\n else\n $actual.customName = '     ' + priorityText + $actual.name;\n\n for (let i = 0; i <= level;i++){\n blankBlockLevel += \" \";\n }\n $actual.customNamePDF = blankBlockLevel + \"\" + $actual.name;\n treeGroups.push($actual);\n angular.forEach(groups, function (group) {\n angular.forEach(group.FK_groups_groups_groups1, function (group_group) {\n if (group_group.parent_group_id == $actual.id) {\n \n return pintarRecursivo(angular.copy(group), level + 1, super_parent_id);\n }\n });\n });\n };\n\n //Obtenemos los padres\n $l1 = _.filter(groups, function (group) { return group.FK_groups_groups_groups1.length == 0; }) \n //Pintamos\n angular.forEach($l1, function (groupItemParent) {\n let super_parent_id = groupItemParent.id;\n pintarRecursivo(angular.copy(groupItemParent), 0, super_parent_id);\n });\n\n return treeGroups;\n },\n\n // Paises y regiones\n\n countries: function (countries, ccountryId, treeCountries) {\n let $l1 = [];\n\n function pintarRecursivo($actual, level) {\n $actual.$$treeLevel = level;\n treeCountries.push($actual);\n angular.forEach(countries, function (country) {\n\n angular.forEach(country.FK_countries_regions_countries, function (region) {\n pintarRecursivo(region, level + 1);\n\n });\n \n\n });\n };\n\n //Obtenemos los padres\n angular.forEach(countries, function (country) {\n\n if (country.id != null) {\n $l1.push(country);\n }\n \n });\n\n //Pintamos\n angular.forEach($l1, function (countryParent) {\n\n pintarRecursivo(countryParent, 0);\n });\n\n return treeCountries;\n },\n//\n indicators: function (indicators) {\n let treeIndicatorsItems = [];\n\n let $filter = $injector.get(\"$filter\");\n\n //Obtenemos los padres\n let nombreModulo = \"\";\n for (let i = 0; i < indicators.length; i++) {\n let itemId = indicators[i];\n let itemNuevo: any = {};\n if (itemId.FK_events_indicators_staff.name == null)\n itemId.FK_events_indicators_staff.name = $filter('translate')('events.indicators_types.no_person');\n\n if (itemId.FK_events_indicators_staff.name != nombreModulo) {\n itemNuevo.FK_events_indicators_staff = {\n name: itemId.FK_events_indicators_staff.name\n };\n itemNuevo.isParent = 1;\n itemNuevo.$$treeLevel = 0;\n treeIndicatorsItems.push(itemNuevo);\n\n for (i; i < indicators.length; i++) {\n let item = indicators[i];\n if (item.FK_events_indicators_staff.name == null)\n item.FK_events_indicators_staff.name = $filter('translate')('events.indicators_types.no_person');\n if (item.FK_events_indicators_staff.name == itemNuevo.FK_events_indicators_staff.name) {\n item.isParent = 0;\n treeIndicatorsItems.push(item);\n } else {\n i--;\n break;\n }\n }\n }\n nombreModulo = itemId.FK_events_indicators_staff.name;\n }\n\n return treeIndicatorsItems;\n },\n\n eventTasksTree: function (eventTasks, eventTaskId, treeEventTasks) {\n let $l1 = []; \n\n function pintarRecursivo($actual, level) { \n if ($actual.event_task_id == null && $actual.is_group) $actual.$$treeLevel = level;\n $actual.hasTasks = false;\n treeEventTasks.push($actual);\n \n angular.forEach(eventTasks, function (eventTask) { \n if (eventTask.event_task_id == $actual.id && eventTask.id != null && !eventTask.is_group) { \n $actual.hasTasks = true; \n //recorremos el tree para decir que ya no es ultimo.\n angular.forEach(treeEventTasks, function (m) {\n if (m.id == $actual.id) {\n m.$$treeLevel = level;\n }\n });\n return pintarRecursivo(eventTask, level + 1);\n }\n });\n };\n\n\n let otherGroup = \"\";\n //Obtenemos los padres \n angular.forEach(eventTasks, function (eventTask) { \n if (eventTask.is_group) {\n if (eventTask.id != null) {\n $l1.push(eventTask);\n } else {\n otherGroup = eventTask;\n } \n }\n });\n\n if (eventTasks.length > 0 && otherGroup != \"\") $l1.push(otherGroup);\n\n //Pintamos\n angular.forEach($l1, function (eventTaskParent) { \n pintarRecursivo(eventTaskParent, 0);\n });\n\n return treeEventTasks;\n },\n\n typesMaterialsTree: function (typesMaterials, typeMaterialId, treeTypesMaterials) {\n let $l1 = [];\n\n\n function pintarRecursivo($actual, level) {\n if ($actual.material_type_id == null && $actual.is_group) $actual.$$treeLevel = level;\n treeTypesMaterials.push($actual);\n angular.forEach(typesMaterials, function (typeMaterial) {\n if (typeMaterial.material_type_id == $actual.id && typeMaterial.id != null && !typeMaterial.is_group) {\n //recorremos el tree para decir que ya no es ultimo.\n angular.forEach(treeTypesMaterials, function (m) {\n if (m.id == $actual.id) {\n m.$$treeLevel = level;\n }\n });\n return pintarRecursivo(typeMaterial, level + 1);\n }\n });\n };\n\n let otherGroup = \"\";\n //Obtenemos los padres\n angular.forEach(typesMaterials, function (typeMaterial) {\n\n if (typeMaterial.is_group) {\n if (typeMaterial.id != null) {\n $l1.push(typeMaterial);\n } else {\n otherGroup = typeMaterial;\n }\n }\n\n });\n $l1.push(otherGroup);\n\n //Pintamos\n angular.forEach($l1, function (typeMaterialParent) {\n\n pintarRecursivo(typeMaterialParent, 0);\n });\n\n return treeTypesMaterials;\n },\n\n\n locationsTree: function (locations, locationId, treeLocations) {\n let $l1 = [];\n\n\n function pintarRecursivo($actual, level) {\n if ($actual.parent_location_id == null) $actual.$$treeLevel = level;\n treeLocations.push($actual);\n angular.forEach(locations, function (location) {\n if (location.parent_location_id == $actual.id && location.id != null) {\n //recorremos el tree para decir que ya no es ultimo.\n angular.forEach(treeLocations, function (m) {\n if (m.id == $actual.id) {\n m.$$treeLevel = level;\n }\n });\n return pintarRecursivo(location, level + 1);\n }\n });\n };\n\n let otherGroup = \"\";\n //Obtenemos los padres\n angular.forEach(locations, function (location) {\n\n if (location.parent_location_id==null) {\n if (location.id != null) {\n $l1.push(location);\n } \n }\n\n });\n\n //Pintamos\n angular.forEach($l1, function (locationParent) {\n\n pintarRecursivo(locationParent, 0);\n });\n\n return treeLocations;\n },\n\n //Arbol de categorías\n\n cmsCategoriesTree: function (cms_categories, cmsCategoryId, treeCmsCategories) {\n let $l1 = [];\n\n function pintarRecursivo($actual, level) {\n if ($actual.parent_cms_category_id == null) $actual.$$treeLevel = level;\n treeCmsCategories.push($actual);\n angular.forEach(cms_categories, function (cms_category) {\n if (cms_category.parent_cms_category_id == $actual.id && cms_category.id != null) {\n //recorremos el tree para decir que ya no es ultimo.\n angular.forEach(treeCmsCategories, function (m) {\n if (m.id == $actual.id) {\n m.$$treeLevel = level;\n }\n });\n return pintarRecursivo(cms_category, level + 1);\n }\n });\n };\n\n let otherGroup = \"\";\n //Obtenemos los padres\n angular.forEach(cms_categories, function (cms_category) {\n\n if (cms_category.parent_cms_category_id == null) {\n if (cms_category.id != null) {\n $l1.push(cms_category);\n }\n }\n\n });\n\n //Pintamos\n angular.forEach($l1, function (cmsCategoryParent) {\n\n pintarRecursivo(cmsCategoryParent, 0);\n });\n\n return treeCmsCategories;\n },\n\n\n //Eventos\n eventsTree: function (events ,treeEvents) {\n let $l1 = [];\n function pintarRecursivo($actual, level) {\n if ($actual.parent_event_id == null) $actual.$$treeLevel = level;\n treeEvents.push($actual);\n angular.forEach(events, function (event) {\n if (event.parent_event_id == $actual.id && event.id != null) {\n //recorremos el tree para decir que ya no es ultimo.\n angular.forEach(events, function (m) {\n if (m.id == $actual.id) {\n m.$$treeLevel = level;\n }\n });\n return pintarRecursivo(event, level + 1);\n }\n });\n };\n\n let otherGroup = \"\";\n //Obtenemos los padres\n angular.forEach(events, function (event) {\n\n if (event.parent_event_id == null) {\n if (event.id != null) {\n $l1.push(event);\n }\n }\n\n });\n\n //Pintamos\n angular.forEach($l1, function (eventParent) {\n\n pintarRecursivo(eventParent, 0);\n });\n\n return treeEvents;\n },\n\n resume_report: function (resume) {\n let tree = [];\n\n angular.forEach(resume, function (item) {\n let parent = { event_name: item.event_name, name: item.name, surname: item.surname, lastname: item.lastname, dni: item.dni, $$treeLevel: 0 };\n tree.push(parent);\n angular.forEach(item.monitoring, function (child) {\n let children = { event_name: child/*, name: \"\", surname: \"\", lastname: \"\", dni: \"\", $$treeLevel: 1*/ };\n tree.push(children);\n });\n\n });\n return tree;\n },\n\n\n tasksTree: function (tasks, eventTaskId, treeTasks) {\n let $l1 = [];\n\n function pintarRecursivo($actual, level) {\n if ($actual.task_id == null && $actual.is_group) $actual.$$treeLevel = level;\n $actual.hasTasks = false;\n treeTasks.push($actual);\n\n angular.forEach(tasks, function (taks) {\n if (taks.task_id == $actual.id && taks.id != null && !taks.is_group) {\n $actual.hasTasks = true;\n //recorremos el tree para decir que ya no es ultimo.\n angular.forEach(treeTasks, function (m) {\n if (m.id == $actual.id) {\n m.$$treeLevel = level;\n }\n });\n return pintarRecursivo(taks, level + 1);\n }\n });\n };\n\n\n let otherGroup = \"\";\n //Obtenemos los padres \n angular.forEach(tasks, function (task) {\n if (task.is_group) {\n if (task.id != null) {\n $l1.push(task);\n } else {\n otherGroup = task;\n }\n }\n });\n\n if (tasks.length > 0 && otherGroup != \"\") $l1.push(otherGroup);\n\n //Pintamos\n angular.forEach($l1, function (eventTaskParent) {\n pintarRecursivo(eventTaskParent, 0);\n });\n\n return treeTasks;\n },\n }\n\n return service;\n\n}]);","import angular from \"angular\";\n\nangular.module(\"app\")\n.factory('UpdateService', ['$injector', '$http', '$interval', '$rootScope', '$log', function ($injector, $http, $interval, $rootScope, $log) {\n\n var service = {\n\n version: null,\n onUpdateAvailable: null,\n autoCheck: function (seconds) {\n service.check();\n $interval(function () {\n service.check();\n }, seconds * 1000);\n },\n check: function(){\n var url = (window as any).CONFIG.api_url + '/update/check';\n $http.get(url).then(\n function(response){\n service.version = response.data;\n $rootScope.version = service.version;\n if(service.onUpdateAvailable!=null) service.onUpdateAvailable(service.version);\n },\n function(err){\n $log.error(err);\n }\n );\n },\n update: function () {\n var url = (window as any).CONFIG.api_url + '/update/update';\n $http.get(url).then(\n function (response) {\n $log.debug(response);\n service.version = null;\n $rootScope.version = service.version;\n if (service.onUpdateAvailable != null) service.onUpdateAvailable(service.version);\n alert(\"Actualización aplicada\");\n location.replace(window.location.origin + window.location.pathname);\n },\n function (err) {\n $log.error(err);\n }\n );\n },\n getInstalledVersion: function () {\n var url = (window as any).CONFIG.api_url + '/update/actualversion';\n return $http.get(url);\n },\n download: function () {\n var url = (window as any).CONFIG.api_url + '/update/download';\n window.open(url);\n }\n };\n\n return service;\n}]);","import { registerInstrumentations } from '@opentelemetry/instrumentation';\nimport { WebTracerProvider,\n ConsoleSpanExporter,\n SimpleSpanProcessor,\n BatchSpanProcessor\n } from '@opentelemetry/sdk-trace-web';\nimport { getWebAutoInstrumentations } from '@opentelemetry/auto-instrumentations-web';\nimport { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';\nimport { ZoneContextManager } from '@opentelemetry/context-zone';\n\nconst provider = new WebTracerProvider();\n// provider.addSpanProcessor(new SimpleSpanProcessor(new ConsoleSpanExporter()));\n/*provider.addSpanProcessor(\n new BatchSpanProcessor(\n new OTLPTraceExporter({\n url: \"https://westeurope-5.in.applicationinsights.azure.com/\",\n headers: {\n \"InstrumentationKey\": \"72a0ffd3-4302-477a-89f3-9e521d09dfa7\",\n \"ApplicationId\": \"11a4c94b-de39-4ca4-909d-6331e8727631\",\n }\n })\n ),\n);*/\nprovider.register({\n contextManager: new ZoneContextManager(),\n});\n \nregisterInstrumentations({\n instrumentations: [\n getWebAutoInstrumentations({\n '@opentelemetry/instrumentation-document-load': {},\n '@opentelemetry/instrumentation-user-interaction': {},\n '@opentelemetry/instrumentation-fetch': {},\n '@opentelemetry/instrumentation-xml-http-request': {}, \n }),\n ],\n});\n","(window as any).CONFIG = {\n api_url: \"/api/\",\n time_check_changes_guests: 30000,\n PROJECT_CODE: \"8bc22d49-d650-4b41-9f9c-3120ca3fca72\",\n version_info_url: \"https://itsm.diaple.com/api/\",\n};\n\n\n(window as any).CONFIG_TINYMCE = {\n no_company_id : {\n font_color_description: \"grey\",\n font_size: \"12px\",\n font_family: \"tahoma,arial,helvetica,sans-serif\"\n },\n company_id_1 : {\n font_color_description: \"red\",\n font_size: \"14px\",\n font_family: \"tahoma,arial,helvetica,sans-serif\"\n },\n company_id_3 : {\n font_color_description: \"red\",\n font_size: \"14px\",\n font_family: \"tahoma,arial,helvetica,sans-serif\"\n },\n company_id_4: {\n font_color_description: \"red\",\n font_size: \"14px\",\n font_family: \"tahoma,arial,helvetica,sans-serif\"\n },\n company_id_5: {\n font_color_description: \"red\",\n font_size: \"14px\",\n font_family: \"tahoma,arial,helvetica,sans-serif\"\n },\n company_id_6: {\n font_color_description: \"grey\",\n font_size: \"14px\",\n font_family: \"tahoma,arial,helvetica,sans-serif\"\n },\n company_id_7: {\n font_color_description: \"red\",\n font_size: \"14px\",\n font_family: \"tahoma,arial,helvetica,sans-serif\"\n }\n};\n\nimport \"jquery-ui/ui/widgets/datepicker\";\nimport \"icheck\";\nimport \"bootstrap\";\nimport \"fabric\";\nimport 'angular';\nimport '@angular/compiler';\nimport \"ace-builds/src-noconflict/ace\";\nimport \"ace-builds/src-noconflict/mode-sqlserver\";\nimport \"ace-builds/src-noconflict/mode-html\";\nimport \"ace-builds/src-noconflict/mode-json\";\nimport \"ace-builds/src-noconflict/mode-javascript\";\nimport \"ace-builds/src-noconflict/theme-twilight\";\nimport \"ace-builds/src-noconflict/theme-sqlserver\";\nimport \"html2canvas\";\nimport \"toastr\";\n\nimport * as tinymce from './editor';\n\nimport * as CryptoJS from 'crypto-js';\n\nimport \"./scripts/inspinia\";\nimport \"./scripts/angularjs-chips\";\nimport \"angular-ui-bootstrap\";\n\nimport * as pdfMake from \"pdfmake/build/pdfmake\";\nimport * as pdfFonts from 'pdfmake/build/vfs_fonts';\nimport html2canvas from \"html2canvas\";\n\nimport * as _ from 'lodash';\n\nimport \"@ui-grid/core/dist/ui-grid.core\";\nimport \"@ui-grid/selection/dist/ui-grid.selection\";\nimport \"@ui-grid/exporter/dist/ui-grid.exporter\";\nimport \"@ui-grid/pagination/dist/ui-grid.pagination\";\nimport \"@ui-grid/tree-base/dist/ui-grid.tree-base\";\nimport \"@ui-grid/tree-view/dist/ui-grid.tree-view\";\nimport \"@ui-grid/auto-resize/dist/ui-grid.auto-resize\";\nimport \"@ui-grid/edit/dist/ui-grid.edit\";\nimport \"@ui-grid/cell-nav/js/ui-grid.cellnav\";\nimport \"@ui-grid/expandable/dist/ui-grid.expandable\";\n\nimport \"angular-ui-router\";\nimport \"angular-ui-bootstrap\";\nimport \"angular-ui-tree\";\n\nimport \"angular-ui-calendar\";\nimport \"angular-ui-validate\";\nimport \"angular-ui-date\";\nimport \"angular-ui-sortable\";\nimport \"angular-ui-slider\";\nimport \"angular-ui-ace\";\nimport \"angular-gantt\";\nimport \"angular-gantt/assets/angular-gantt-plugins\";\nimport \"angular-moment\";\nimport \"angular-animate\";\nimport \"ui-iconpicker/dist/scripts/ui-iconpicker\";\n\nimport \"restangular\";\nimport \"ng-log-unobtrusive-extension\";\nimport \"angular-filter\";\n\nimport \"angular-sanitize\";\nimport \"ui-select\";\nimport \"angular-translate\";\nimport \"angular-translate/dist/angular-translate-loader-url/angular-translate-loader-url\"\nimport \"angular-bootstrap-colorpicker\";\nimport \"angular-bootstrap-contextmenu\";\nimport \"angular-ui-tinymce\";\nimport \"ng-flow/dist/ng-flow-standalone.js\";\nimport \"ng-file-upload\";\nimport \"angular-clipboard\";\nimport \"angular-ui-switch\";\nimport \"angular-media-queries\";\n\nimport \"fullcalendar\";\nimport { Chart } from 'chart.js';\n\nimport \"moment\";\n\nimport toastr from \"toastr\";\nimport Bee from '@beefree.io/sdk';\n\nimport \"encoding-japanese\";\nimport \"xmltojson\";\n\nimport \"./app\";\nimport \"./app.downgraded\";\nimport \"./common/services/_index\";\nimport \"./app/materials/_index\";\nimport \"./app/notifications/_index\";\nimport \"./app/common/_index\";\nimport \"./app/events/_index\";\nimport \"./app/dashboard/_index\";\nimport \"./app/dashboard_space/_index\";\nimport \"./app/users/_index\";\nimport \"./app/menus/_index\";\nimport \"./app/companies/_index\";\nimport \"./app/login/login\";\nimport \"./app/auth/_index\";\nimport \"./app/tags/_index\";\nimport \"./app/authentication_processes/_index\";\nimport \"./app/authentication_services/_index\";\nimport \"./app/languages/_index\";\nimport \"./app/update/_index\";\nimport \"./app/groups/_index\";\nimport \"./app/persons/_index\";\nimport \"./app/political_affiliations/_index\";\nimport \"./app/staff/_index\";\nimport \"./app/documents_reports/_index\";\nimport \"./app/documents_types/_index\";\nimport \"./app/countries/_index\";\nimport \"./app/gifts/_index\";\nimport \"./app/files_types/_index\";\nimport \"./app/files_types_whitelist/_index\";\nimport \"./app/events_users_profiles/_index\";\nimport \"./app/indicators_types/_index\";\nimport \"./app/persons_information_groups/_index\";\nimport \"./app/informations/_index\";\nimport \"./app/reports/tasks_reports/_index\";\nimport \"./app/restaurants/_index\";\nimport \"./app/locations_reservations/_index\";\nimport \"./app/mail_accounts/_index\";\nimport \"./app/reports/persons_reports/_index\";\nimport \"./app/reports/gifts_reports/_index\";\nimport \"./app/reports/resume_reports/_index\";\nimport \"./app/budget_groups/_index\";\nimport \"./app/inscriptions_forms/_index\";\nimport \"./app/identifiers/_index\";\nimport \"./app/contact_types/_index\";\nimport \"./app/persons_treatments/_index\";\nimport \"./app/import_documents/_index\";\nimport \"./app/razor_views/_index\";\nimport \"./app/mailings/_index\";\nimport \"./app/mailings_types/_index\";\nimport \"./app/passbooks/_index\";\nimport \"./app/institutions/_index\";\nimport \"./app/warehouses/_index\";\nimport \"./app/providers/_index\";\nimport \"./app/event_hosts/_index\";\nimport \"./app/cms_categories/_index\";\nimport \"./app/spaces/_index\";\nimport \"./app/events_types/_index\";\nimport \"./app/reports/_index\";\nimport \"./app/notifications_by_person/_index\";\nimport \"./app/rgpd/_index\";\nimport \"./app/templates/_index\";\nimport \"./app/datasets/_index\";\nimport \"./app/folders/_index\";\nimport \"./app/tasks_status/_index\";\nimport \"./app/tasks_types/_index\";\nimport \"./app/correspondence/_index\";\nimport \"./app/correspondences_types/_index\";\nimport \"./app/tasks/_index\";\nimport \"./app/annexes/_index\";\nimport \"./app/accesses/_index\";\nimport \"./app/audits/_index\";\nimport \"./app/push_notifications_types/_index\";\nimport \"./app/push_notifications/_index\";\n\nimport \"./common/filters/_index\";\nimport \"./common/directives/_index\";\n\n\nimport 'bootstrap/dist/css/bootstrap.css';\nimport 'fullcalendar/dist/fullcalendar.css';\nimport 'icheck/skins/square/blue.css';\nimport 'ui-iconpicker/dist/styles/ui-iconpicker.css';\nimport 'ui-select/dist/select.css';\n//@ts-ignore\nimport \"../node_modules/icheck/skins/square/_all.css\";\n\nimport \"./styles/_index\";\n\nimport './instrument';\n\nimport \"./app/app.module\";\n\n\n\n","import \"./animate.css\";\nimport \"./colorpicker.css\";\nimport \"./font-awesome-6.css\";\nimport \"./fullcalendar.css\";\nimport \"./iconpicker-1.5.0.css\";\nimport \"./select.css\";\n// import \"./select2.css\";\nimport \"./selectize.default.css\";\nimport \"./slider.css\";\nimport \"./style.css\";\nimport \"./toastr.css\";\nimport \"./ui-grid.css\";\nimport \"./ui-iconpicker.css\";\nimport \"./jquery-ui.css\";\n//import \"./icheck_square_all.css\";\n//import \"./bootstrap-3.4.1.css\";\nimport \"./angularjs-chips.css\";\nimport \"./angular-ui-switch.css\";\nimport \"./angular-gantt.css\";\nimport \"./angular-gantt-plugins.css\";\nimport \"./app.css\";\nimport \"./events.css\";\nimport \"./events_mediaQueries.css\";\n\nimport \"./theme.css\";\n\nimport \"../../node_modules/primeicons/primeicons.css\";\n","'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n n = n + '';\n var i = n.indexOf('.');\n return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n var v = opt_precision;\n\n if (undefined === v) {\n v = Math.min(getDecimals(n), 3);\n }\n\n var base = Math.pow(10, v);\n var f = ((n * base) | 0) % base;\n return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n \"DATETIME_FORMATS\": {\n \"AMPMS\": [\n \"a. m.\",\n \"p. m.\"\n ],\n \"DAY\": [\n \"diumenge\",\n \"dilluns\",\n \"dimarts\",\n \"dimecres\",\n \"dijous\",\n \"divendres\",\n \"dissabte\"\n ],\n \"ERANAMES\": [\n \"abans de Crist\",\n \"despr\\u00e9s de Crist\"\n ],\n \"ERAS\": [\n \"aC\",\n \"dC\"\n ],\n \"FIRSTDAYOFWEEK\": 0,\n \"MONTH\": [\n \"de gener\",\n \"de febrer\",\n \"de mar\\u00e7\",\n \"d\\u2019abril\",\n \"de maig\",\n \"de juny\",\n \"de juliol\",\n \"d\\u2019agost\",\n \"de setembre\",\n \"d\\u2019octubre\",\n \"de novembre\",\n \"de desembre\"\n ],\n \"SHORTDAY\": [\n \"dg.\",\n \"dl.\",\n \"dt.\",\n \"dc.\",\n \"dj.\",\n \"dv.\",\n \"ds.\"\n ],\n \"SHORTMONTH\": [\n \"gen.\",\n \"febr.\",\n \"mar\\u00e7\",\n \"abr.\",\n \"maig\",\n \"juny\",\n \"jul.\",\n \"ag.\",\n \"set.\",\n \"oct.\",\n \"nov.\",\n \"des.\"\n ],\n \"STANDALONEMONTH\": [\n \"gener\",\n \"febrer\",\n \"mar\\u00e7\",\n \"abril\",\n \"maig\",\n \"juny\",\n \"juliol\",\n \"agost\",\n \"setembre\",\n \"octubre\",\n \"novembre\",\n \"desembre\"\n ],\n \"WEEKENDRANGE\": [\n 5,\n 6\n ],\n \"fullDate\": \"EEEE, d MMMM 'de' y\",\n \"longDate\": \"d MMMM 'de' y\",\n \"medium\": \"d MMM y H:mm:ss\",\n \"mediumDate\": \"d MMM y\",\n \"mediumTime\": \"H:mm:ss\",\n \"short\": \"d/M/yy H:mm\",\n \"shortDate\": \"d/M/yy\",\n \"shortTime\": \"H:mm\"\n },\n \"NUMBER_FORMATS\": {\n \"CURRENCY_SYM\": \"\\u20ac\",\n \"DECIMAL_SEP\": \",\",\n \"GROUP_SEP\": \".\",\n \"PATTERNS\": [\n {\n \"gSize\": 3,\n \"lgSize\": 3,\n \"maxFrac\": 3,\n \"minFrac\": 0,\n \"minInt\": 1,\n \"negPre\": \"-\",\n \"negSuf\": \"\",\n \"posPre\": \"\",\n \"posSuf\": \"\"\n },\n {\n \"gSize\": 3,\n \"lgSize\": 3,\n \"maxFrac\": 2,\n \"minFrac\": 2,\n \"minInt\": 1,\n \"negPre\": \"-\",\n \"negSuf\": \"\\u00a0\\u00a4\",\n \"posPre\": \"\",\n \"posSuf\": \"\\u00a0\\u00a4\"\n }\n ]\n },\n \"id\": \"ca-es\",\n \"localeID\": \"ca_ES\",\n \"pluralCat\": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n","'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n \"DATETIME_FORMATS\": {\n \"AMPMS\": [\n \"a. m.\",\n \"p. m.\"\n ],\n \"DAY\": [\n \"domingo\",\n \"lunes\",\n \"martes\",\n \"mi\\u00e9rcoles\",\n \"jueves\",\n \"viernes\",\n \"s\\u00e1bado\"\n ],\n \"ERANAMES\": [\n \"antes de Cristo\",\n \"despu\\u00e9s de Cristo\"\n ],\n \"ERAS\": [\n \"a. C.\",\n \"d. C.\"\n ],\n \"FIRSTDAYOFWEEK\": 0,\n \"MONTH\": [\n \"enero\",\n \"febrero\",\n \"marzo\",\n \"abril\",\n \"mayo\",\n \"junio\",\n \"julio\",\n \"agosto\",\n \"septiembre\",\n \"octubre\",\n \"noviembre\",\n \"diciembre\"\n ],\n \"SHORTDAY\": [\n \"dom.\",\n \"lun.\",\n \"mar.\",\n \"mi\\u00e9.\",\n \"jue.\",\n \"vie.\",\n \"s\\u00e1b.\"\n ],\n \"SHORTMONTH\": [\n \"ene.\",\n \"feb.\",\n \"mar.\",\n \"abr.\",\n \"may.\",\n \"jun.\",\n \"jul.\",\n \"ago.\",\n \"sept.\",\n \"oct.\",\n \"nov.\",\n \"dic.\"\n ],\n \"STANDALONEMONTH\": [\n \"Enero\",\n \"Febrero\",\n \"Marzo\",\n \"Abril\",\n \"Mayo\",\n \"Junio\",\n \"Julio\",\n \"Agosto\",\n \"Septiembre\",\n \"Octubre\",\n \"Noviembre\",\n \"Diciembre\"\n ],\n \"WEEKENDRANGE\": [\n 5,\n 6\n ],\n \"fullDate\": \"EEEE, d 'de' MMMM 'de' y\",\n \"longDate\": \"d 'de' MMMM 'de' y\",\n \"medium\": \"d MMM y H:mm:ss\",\n \"mediumDate\": \"d MMM y\",\n \"mediumTime\": \"H:mm:ss\",\n \"short\": \"d/M/yy H:mm\",\n \"shortDate\": \"d/M/yy\",\n \"shortTime\": \"H:mm\"\n },\n \"NUMBER_FORMATS\": {\n \"CURRENCY_SYM\": \"\\u20ac\",\n \"DECIMAL_SEP\": \",\",\n \"GROUP_SEP\": \".\",\n \"PATTERNS\": [\n {\n \"gSize\": 3,\n \"lgSize\": 3,\n \"maxFrac\": 3,\n \"minFrac\": 0,\n \"minInt\": 1,\n \"negPre\": \"-\",\n \"negSuf\": \"\",\n \"posPre\": \"\",\n \"posSuf\": \"\"\n },\n {\n \"gSize\": 3,\n \"lgSize\": 3,\n \"maxFrac\": 2,\n \"minFrac\": 2,\n \"minInt\": 1,\n \"negPre\": \"-\",\n \"negSuf\": \"\\u00a0\\u00a4\",\n \"posPre\": \"\",\n \"posSuf\": \"\\u00a0\\u00a4\"\n }\n ]\n },\n \"id\": \"es-es\",\n \"localeID\": \"es_ES\",\n \"pluralCat\": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n","'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n \"DATETIME_FORMATS\": {\n \"AMPMS\": [\n \"a. m.\",\n \"p. m.\"\n ],\n \"DAY\": [\n \"domingo\",\n \"lunes\",\n \"martes\",\n \"mi\\u00e9rcoles\",\n \"jueves\",\n \"viernes\",\n \"s\\u00e1bado\"\n ],\n \"ERANAMES\": [\n \"antes de Cristo\",\n \"despu\\u00e9s de Cristo\"\n ],\n \"ERAS\": [\n \"a. C.\",\n \"d. C.\"\n ],\n \"FIRSTDAYOFWEEK\": 0,\n \"MONTH\": [\n \"enero\",\n \"febrero\",\n \"marzo\",\n \"abril\",\n \"mayo\",\n \"junio\",\n \"julio\",\n \"agosto\",\n \"septiembre\",\n \"octubre\",\n \"noviembre\",\n \"diciembre\"\n ],\n \"SHORTDAY\": [\n \"dom.\",\n \"lun.\",\n \"mar.\",\n \"mi\\u00e9.\",\n \"jue.\",\n \"vie.\",\n \"s\\u00e1b.\"\n ],\n \"SHORTMONTH\": [\n \"ene.\",\n \"feb.\",\n \"mar.\",\n \"abr.\",\n \"may.\",\n \"jun.\",\n \"jul.\",\n \"ago.\",\n \"sept.\",\n \"oct.\",\n \"nov.\",\n \"dic.\"\n ],\n \"STANDALONEMONTH\": [\n \"Enero\",\n \"Febrero\",\n \"Marzo\",\n \"Abril\",\n \"Mayo\",\n \"Junio\",\n \"Julio\",\n \"Agosto\",\n \"Septiembre\",\n \"Octubre\",\n \"Noviembre\",\n \"Diciembre\"\n ],\n \"WEEKENDRANGE\": [\n 5,\n 6\n ],\n \"fullDate\": \"EEEE, d 'de' MMMM 'de' y\",\n \"longDate\": \"d 'de' MMMM 'de' y\",\n \"medium\": \"d MMM y H:mm:ss\",\n \"mediumDate\": \"d MMM y\",\n \"mediumTime\": \"H:mm:ss\",\n \"short\": \"d/M/yy H:mm\",\n \"shortDate\": \"d/M/yy\",\n \"shortTime\": \"H:mm\"\n },\n \"NUMBER_FORMATS\": {\n \"CURRENCY_SYM\": \"\\u20ac\",\n \"DECIMAL_SEP\": \",\",\n \"GROUP_SEP\": \".\",\n \"PATTERNS\": [\n {\n \"gSize\": 3,\n \"lgSize\": 3,\n \"maxFrac\": 3,\n \"minFrac\": 0,\n \"minInt\": 1,\n \"negPre\": \"-\",\n \"negSuf\": \"\",\n \"posPre\": \"\",\n \"posSuf\": \"\"\n },\n {\n \"gSize\": 3,\n \"lgSize\": 3,\n \"maxFrac\": 2,\n \"minFrac\": 2,\n \"minInt\": 1,\n \"negPre\": \"-\",\n \"negSuf\": \"\\u00a0\\u00a4\",\n \"posPre\": \"\",\n \"posSuf\": \"\\u00a0\\u00a4\"\n }\n ]\n },\n \"id\": \"es\",\n \"localeID\": \"es\",\n \"pluralCat\": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n","'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\n$provide.value(\"$locale\", {\n \"DATETIME_FORMATS\": {\n \"AMPMS\": [\n \"AM\",\n \"PM\"\n ],\n \"DAY\": [\n \"igandea\",\n \"astelehena\",\n \"asteartea\",\n \"asteazkena\",\n \"osteguna\",\n \"ostirala\",\n \"larunbata\"\n ],\n \"ERANAMES\": [\n \"K.a.\",\n \"K.o.\"\n ],\n \"ERAS\": [\n \"K.a.\",\n \"K.o.\"\n ],\n \"FIRSTDAYOFWEEK\": 0,\n \"MONTH\": [\n \"urtarrilak\",\n \"otsailak\",\n \"martxoak\",\n \"apirilak\",\n \"maiatzak\",\n \"ekainak\",\n \"uztailak\",\n \"abuztuak\",\n \"irailak\",\n \"urriak\",\n \"azaroak\",\n \"abenduak\"\n ],\n \"SHORTDAY\": [\n \"ig.\",\n \"al.\",\n \"ar.\",\n \"az.\",\n \"og.\",\n \"or.\",\n \"lr.\"\n ],\n \"SHORTMONTH\": [\n \"urt.\",\n \"ots.\",\n \"mar.\",\n \"api.\",\n \"mai.\",\n \"eka.\",\n \"uzt.\",\n \"abu.\",\n \"ira.\",\n \"urr.\",\n \"aza.\",\n \"abe.\"\n ],\n \"STANDALONEMONTH\": [\n \"Urtarrila\",\n \"Otsaila\",\n \"Martxoa\",\n \"Apirila\",\n \"Maiatza\",\n \"Ekaina\",\n \"Uztaila\",\n \"Abuztua\",\n \"Iraila\",\n \"Urria\",\n \"Azaroa\",\n \"Abendua\"\n ],\n \"WEEKENDRANGE\": [\n 5,\n 6\n ],\n \"fullDate\": \"y('e')'ko' MMMM d, EEEE\",\n \"longDate\": \"y('e')'ko' MMMM d\",\n \"medium\": \"y MMM d HH:mm:ss\",\n \"mediumDate\": \"y MMM d\",\n \"mediumTime\": \"HH:mm:ss\",\n \"short\": \"y/MM/dd HH:mm\",\n \"shortDate\": \"y/MM/dd\",\n \"shortTime\": \"HH:mm\"\n },\n \"NUMBER_FORMATS\": {\n \"CURRENCY_SYM\": \"\\u20ac\",\n \"DECIMAL_SEP\": \",\",\n \"GROUP_SEP\": \".\",\n \"PATTERNS\": [\n {\n \"gSize\": 3,\n \"lgSize\": 3,\n \"maxFrac\": 3,\n \"minFrac\": 0,\n \"minInt\": 1,\n \"negPre\": \"-\",\n \"negSuf\": \"\",\n \"posPre\": \"\",\n \"posSuf\": \"\"\n },\n {\n \"gSize\": 3,\n \"lgSize\": 3,\n \"maxFrac\": 2,\n \"minFrac\": 2,\n \"minInt\": 1,\n \"negPre\": \"-\",\n \"negSuf\": \"\\u00a0\\u00a4\",\n \"posPre\": \"\",\n \"posSuf\": \"\\u00a0\\u00a4\"\n }\n ]\n },\n \"id\": \"eu-es\",\n \"localeID\": \"eu_ES\",\n \"pluralCat\": function(n, opt_precision) { if (n == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n","'use strict';\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\nfunction getDecimals(n) {\n n = n + '';\n var i = n.indexOf('.');\n return (i == -1) ? 0 : n.length - i - 1;\n}\n\nfunction getVF(n, opt_precision) {\n var v = opt_precision;\n\n if (undefined === v) {\n v = Math.min(getDecimals(n), 3);\n }\n\n var base = Math.pow(10, v);\n var f = ((n * base) | 0) % base;\n return {v: v, f: f};\n}\n\n$provide.value(\"$locale\", {\n \"DATETIME_FORMATS\": {\n \"AMPMS\": [\n \"a.m.\",\n \"p.m.\"\n ],\n \"DAY\": [\n \"domingo\",\n \"luns\",\n \"martes\",\n \"m\\u00e9rcores\",\n \"xoves\",\n \"venres\",\n \"s\\u00e1bado\"\n ],\n \"ERANAMES\": [\n \"antes de Cristo\",\n \"despois de Cristo\"\n ],\n \"ERAS\": [\n \"a.C.\",\n \"d.C.\"\n ],\n \"FIRSTDAYOFWEEK\": 0,\n \"MONTH\": [\n \"xaneiro\",\n \"febreiro\",\n \"marzo\",\n \"abril\",\n \"maio\",\n \"xu\\u00f1o\",\n \"xullo\",\n \"agosto\",\n \"setembro\",\n \"outubro\",\n \"novembro\",\n \"decembro\"\n ],\n \"SHORTDAY\": [\n \"dom\",\n \"lun\",\n \"mar\",\n \"m\\u00e9r\",\n \"xov\",\n \"ven\",\n \"s\\u00e1b\"\n ],\n \"SHORTMONTH\": [\n \"xan\",\n \"feb\",\n \"mar\",\n \"abr\",\n \"mai\",\n \"xu\\u00f1\",\n \"xul\",\n \"ago\",\n \"set\",\n \"out\",\n \"nov\",\n \"dec\"\n ],\n \"STANDALONEMONTH\": [\n \"Xaneiro\",\n \"Febreiro\",\n \"Marzo\",\n \"Abril\",\n \"Maio\",\n \"Xu\\u00f1o\",\n \"Xullo\",\n \"Agosto\",\n \"Setembro\",\n \"Outubro\",\n \"Novembro\",\n \"Decembro\"\n ],\n \"WEEKENDRANGE\": [\n 5,\n 6\n ],\n \"fullDate\": \"EEEE dd MMMM y\",\n \"longDate\": \"dd MMMM y\",\n \"medium\": \"d MMM, y HH:mm:ss\",\n \"mediumDate\": \"d MMM, y\",\n \"mediumTime\": \"HH:mm:ss\",\n \"short\": \"dd/MM/yy HH:mm\",\n \"shortDate\": \"dd/MM/yy\",\n \"shortTime\": \"HH:mm\"\n },\n \"NUMBER_FORMATS\": {\n \"CURRENCY_SYM\": \"\\u20ac\",\n \"DECIMAL_SEP\": \",\",\n \"GROUP_SEP\": \".\",\n \"PATTERNS\": [\n {\n \"gSize\": 3,\n \"lgSize\": 3,\n \"maxFrac\": 3,\n \"minFrac\": 0,\n \"minInt\": 1,\n \"negPre\": \"-\",\n \"negSuf\": \"\",\n \"posPre\": \"\",\n \"posSuf\": \"\"\n },\n {\n \"gSize\": 3,\n \"lgSize\": 3,\n \"maxFrac\": 2,\n \"minFrac\": 2,\n \"minInt\": 1,\n \"negPre\": \"-\\u00a4\",\n \"negSuf\": \"\",\n \"posPre\": \"\\u00a4\",\n \"posSuf\": \"\"\n }\n ]\n },\n \"id\": \"gl-es\",\n \"localeID\": \"gl_ES\",\n \"pluralCat\": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}\n});\n}]);\n","(function () {\n Chips.$inject = [\"$compile\", \"$timeout\", \"DomUtil\"];\n ChipsController.$inject = [\"$scope\", \"$element\", \"DomUtil\"];\n angular.module('angularjs.chips', [])\n .directive('chips', Chips)\n .controller('chipsController', ChipsController);\n\n function isPromiseLike(obj) {\n return obj && angular.isFunction(obj.then);\n }\n\n /*\n * update values to ngModel reference\n */\n function ngModel(modelCtrl) {\n return {\n add: function (val) {\n var modelCopy = angular.copy(modelCtrl.$modelValue) || [];\n modelCopy.push(val)\n modelCtrl.$setViewValue(modelCopy);\n },\n delete: function (index) {\n var modelCopy = angular.copy(modelCtrl.$modelValue);\n modelCopy.splice(index, 1);\n modelCtrl.$setViewValue(modelCopy);\n },\n deleteByValue: function (val) {\n var index, resultIndex;\n for (let index = 0; index < modelCtrl.$modelValue.length; index++) {\n if (angular.equals(modelCtrl.$modelValue[index], val)) {\n resultIndex = index;\n break;\n }\n\n }\n if (resultIndex !== undefined)\n this.delete(resultIndex)\n }\n }\n }\n\n function DeferChip(data, promise) {\n var self = this;\n this.type = 'defer';\n this.defer = data;\n this.isLoading = false;\n this.isFailed = false;\n\n if (promise) {\n self.isLoading = true;\n promise.then(function (data) {\n self.defer = data;\n self.isLoading = false;\n }, function (data) {\n self.defer = data;\n self.isLoading = false;\n self.isFailed = true;\n });\n }\n }\n\n /*\n * get function param key\n * example: 'render(data)' data is the key here\n * getParamKey('render(data)') will return data\n */\n function getParamKey(funStr) {\n if (funStr === undefined)\n return;\n var openParenthesisIndex, closeParenthesisIndex;\n openParenthesisIndex = funStr.indexOf('(') + 1;\n closeParenthesisIndex = funStr.indexOf(')');\n return funStr.substr(openParenthesisIndex, closeParenthesisIndex - openParenthesisIndex);\n }\n /*@ngInject*/\n function Chips($compile, $timeout, DomUtil) {\n /*@ngInject*/\n linkFun.$inject = [\"scope\", \"iElement\", \"iAttrs\", \"ngModelCtrl\", \"transcludefn\"];\n function linkFun(scope, iElement, iAttrs, ngModelCtrl, transcludefn) {\n if ((error = validation(iElement)) !== '') {\n throw error;\n }\n\n var model = ngModel(ngModelCtrl);\n var isDeferFlow = iAttrs.hasOwnProperty('defer');\n var functionParam = getParamKey(iAttrs.render);\n\n /*\n * @scope.chips.addChip should be called by chipControl directive or custom XXXcontrol directive developed by end user\n * @scope.chips.deleteChip will be called by removeChip directive\n *\n */\n\n /*\n * ngModel values are copies here\n */\n scope.chips.list;\n\n scope.chips.addChip = function (data) {\n var updatedData, paramObj;\n\n if (scope.render !== undefined && functionParam !== '') {\n paramObj = {};\n paramObj[functionParam] = data;\n updatedData = scope.render(paramObj);\n } else { updatedData = data }\n\n if (!updatedData) {\n return false;\n }\n\n if (isPromiseLike(updatedData)) {\n updatedData.then(function (response) {\n model.add(response);\n });\n scope.chips.list.push(new DeferChip(data, updatedData));\n scope.$apply();\n } else {\n update(updatedData);\n }\n\n function update(data) {\n scope.chips.list.push(data);\n model.add(data);\n }\n\n return true;\n };\n\n scope.chips.deleteChip = function (index) {\n var deletedChip = scope.chips.list.splice(index, 1)[0];\n if (deletedChip.isFailed) {\n scope.$apply();\n return;\n }\n\n deletedChip instanceof DeferChip ? model.deleteByValue(deletedChip.defer) : model.delete(index);\n }\n\n /*\n * ngModel values are copied when it's updated outside\n */\n ngModelCtrl.$render = function () {\n if (isDeferFlow && ngModelCtrl.$modelValue) {\n var index, list = [];\n for (let index = 0; index < ngModelCtrl.$modelValue.length; index++) {\n // list.push(ngModelCtrl.$modelValue[index]);\n list.push(new DeferChip(ngModelCtrl.$modelValue[index]))\n }\n scope.chips.list = list;\n } else {\n scope.chips.list = angular.copy(ngModelCtrl.$modelValue) || [];\n }\n\n }\n\n var chipNavigate = null;\n /*\n * @index selected chip index\n * @return function, which will return the chip index based on left or right arrow pressed\n */\n function chipNavigator(index) {\n return function (direction) {\n direction === 37 ? index-- : index++;\n index = index < 0 ? scope.chips.list.length - 1 : index > scope.chips.list.length - 1 ? 0 : index;\n return index;\n }\n }\n\n /*Extract the chip-tmpl and compile inside the chips directive scope*/\n var rootDiv = angular.element('
');\n var tmplStr = iElement.html();\n tmplStr = tmplStr.substr(tmplStr.indexOf('') - ('').length);\n iElement.find('chip-tmpl').remove();\n var tmpl = angular.element(tmplStr);\n var chipTextNode, chipBindedData, chipBindedDataSuffix;\n tmpl.attr('ng-repeat', 'chip in chips.list track by $index');\n tmpl.attr('ng-class', '{\\'chip-failed\\':chip.isFailed}')\n tmpl.attr('tabindex', '-1')\n tmpl.attr('index', '{{$index+1}}')\n rootDiv.append(tmpl);\n var node = $compile(rootDiv)(scope);\n iElement.prepend(node);\n\n\n /*clicking on chips element should set the focus on INPUT*/\n iElement.on('click', function (event) {\n if (event.target.nodeName === 'CHIPS')\n iElement.find('input')[0].focus();\n });\n /*on every focus we need to nullify the chipNavigate*/\n iElement.find('input').on('focus', function () {\n chipNavigate = null;\n });\n /*this method will handle 'delete or Backspace' and left, right key press*/\n scope.chips.handleKeyDown = function (event) {\n if (event.target.nodeName !== 'INPUT' && event.target.nodeName !== 'CHIP-TMPL' || (iElement.find('chip-tmpl').length === 0 && event.target.value === ''))\n return;\n\n var chipTmpls;\n\n function focusOnChip() {\n var index = parseInt(document.activeElement.getAttribute('index')) || (chipTmpls = iElement.find('chip-tmpl')).length;\n chipTmpls = iElement.find('chip-tmpl');\n chipTmpls[index - 1].focus();\n chipNavigate = chipNavigator(index - 1);\n if (event.target.nodeName !== 'INPUT')\n chipTmpls[chipNavigate(event.keyCode)].focus();\n }\n\n if (event.keyCode === 8) {\n if (event.target.nodeName === 'INPUT' && event.target.value === '') {\n focusOnChip();\n event.preventDefault();\n } else if (event.target.nodeName === 'CHIP-TMPL') {\n /*\n * This block will be called during chip deletion using delete or Backspace key\n * Below code will set the focus of the next available chip\n */\n var chipTemplates = iElement.find('chip-tmpl');\n if (chipTemplates.length > 0 && parseInt(event.target.getAttribute('index')) - 1 === chipTemplates.length)\n iElement.find('chip-tmpl')[chipNavigate(37)].focus();\n }\n\n } else if (event.keyCode === 37 || event.keyCode === 39) {\n chipNavigate === null ? focusOnChip() : iElement.find('chip-tmpl')[chipNavigate(event.keyCode)].focus();\n }\n };\n\n iElement.on('keydown', scope.chips.handleKeyDown);\n\n DomUtil(iElement).addClass('chip-out-focus');\n }\n\n return {\n restrict: 'E',\n scope: {\n /*\n * optional callback, this will be called before rendering the data,\n * user can modify the data before it's rendered\n */\n render: '&?'\n },\n transclude: true,\n require: 'ngModel',\n link: linkFun,\n controller: 'chipsController',\n controllerAs: 'chips',\n template: '
'\n }\n\n\n };\n /* tag is mandatory added validation to confirm that*/\n function validation(element) {\n return element.find('chip-tmpl').length === 0 ? 'should have chip-tmpl' : element.find('chip-tmpl').length > 1 ? 'should have only one chip-tmpl' : '';\n }\n /*@ngInject*/\n function ChipsController($scope, $element, DomUtil) {\n /*toggling input controller focus*/\n this.setFocus = function (flag) {\n if (flag) {\n DomUtil($element).removeClass('chip-out-focus').addClass('chip-in-focus');\n } else {\n DomUtil($element).removeClass('chip-in-focus').addClass('chip-out-focus');\n }\n }\n this.removeChip = function (data, index) {\n this.deleteChip(index);\n }\n }\n})();\n\n(function () {\n angular.module('angularjs.chips')\n .directive('chipTmpl', ChipTmpl);\n\n function ChipTmpl() {\n return {\n restrict: 'E',\n transclude: true,\n link: function (scope, iElement, iAttrs, contrl, transcludefn) {\n transcludefn(scope, function (clonedTranscludedContent) {\n iElement.append(clonedTranscludedContent);\n });\n iElement.on('keydown', function (event) {\n if (event.keyCode === 8) {\n scope.$broadcast('chip:delete');\n event.preventDefault();\n }\n });\n }\n }\n }\n})();\n\n(function () {\n angular.module('angularjs.chips')\n .directive('removeChip', RemoveChip);\n /*\n * Will remove the chip\n * remove-chip=\"callback(chip)\"> call back will be triggered before remove\n * Call back method should return true to remove or false for nothing\n */\n function RemoveChip() {\n return {\n restrict: 'A',\n require: '^?chips',\n link: function (scope, iElement, iAttrs, chipsCtrl) {\n\n function getCallBack(scope, prop) {\n var target;\n if (prop.search('\\\\(') > 0) {\n prop = prop.substr(0, prop.search('\\\\('));\n }\n if (prop !== undefined) {\n if (prop.split('.').length > 1) {\n var levels = prop.split('.');\n target = scope;\n for (var index = 0; index < levels.length; index++) {\n target = target[levels[index]];\n }\n } else {\n target = scope[prop];\n }\n }\n return target;\n };\n\n /*\n * traverse scope hierarchy and find the scope\n */\n function findScope(scope, prop) {\n var funStr = prop.indexOf('.') !== -1 ? prop.split('.')[0] : prop.split('(')[0];\n if (!scope.hasOwnProperty(funStr)) {\n return findScope(scope.$parent, prop)\n }\n return scope;\n };\n\n function deleteChip() {\n // don't delete the chip which is loading\n if (typeof scope.chip !== 'string' && scope.chip.isLoading)\n return;\n var callBack, deleteIt = true;\n if (iAttrs.hasOwnProperty('removeChip') && iAttrs.removeChip !== '') {\n callBack = getCallBack(findScope(scope, iAttrs.removeChip), iAttrs.removeChip);\n deleteIt = callBack(scope.chip);\n }\n if (deleteIt)\n chipsCtrl.removeChip(scope.chip, scope.$index);\n };\n\n iElement.on('click', function () {\n deleteChip();\n });\n\n scope.$on('chip:delete', function () {\n deleteChip();\n });\n\n }\n }\n }\n})();\n\n(function () {\n angular.module('angularjs.chips')\n .factory('DomUtil', function () {\n return DomUtil;\n });\n /*Dom related functionality*/\n function DomUtil(element) {\n /*\n * addclass will append class to the given element\n * ng-class will do the same functionality, in our case\n * we don't have access to scope so we are using this util methods\n */\n var utilObj = {};\n\n utilObj.addClass = function (className) {\n utilObj.removeClass(element, className);\n element.attr('class', element.attr('class') + ' ' + className);\n return utilObj;\n };\n\n utilObj.removeClass = function (className) {\n var classes = element.attr('class').split(' ');\n var classIndex = classes.indexOf(className);\n if (classIndex !== -1) {\n classes.splice(classIndex, 1);\n }\n element.attr('class', classes.join(' '));\n return utilObj;\n };\n\n return utilObj;\n }\n})();\n\n(function () {\n ChipControlLinkFun.$inject = [\"scope\", \"iElement\", \"iAttrs\", \"chipsCtrl\"];\n angular.module('angularjs.chips')\n .directive('chipControl', ChipControl);\n\n /*\n * It's for normal input element\n * It send the value to chips directive when press the enter button\n */\n function ChipControl() {\n return {\n restrict: 'A',\n require: '^chips',\n link: ChipControlLinkFun,\n }\n };\n /*@ngInject*/\n function ChipControlLinkFun(scope, iElement, iAttrs, chipsCtrl) {\n iElement.on('keypress', function (event) {\n if (event.keyCode === 13) {\n if (event.target.value !== '' && chipsCtrl.addChip(event.target.value)) {\n event.target.value = \"\";\n }\n event.preventDefault();\n }\n });\n\n iElement.on('focus', function () {\n chipsCtrl.setFocus(true);\n });\n iElement.on('blur', function () {\n chipsCtrl.setFocus(false);\n });\n };\n})();\n\n(function () {\n angular.module('angularjs.chips')\n .directive('ngModelControl', NGModelControl);\n\n /*\n * It's for input element which uses ng-model directive\n * example: bootstrap typeahead component\n */\n function NGModelControl() {\n return {\n restrict: 'A',\n require: ['ngModel', '^chips'],\n link: function (scope, iElement, iAttrs, controller) {\n var ngModelCtrl = controller[0],\n chipsCtrl = controller[1];\n ngModelCtrl.$render = function (event) {\n if (!ngModelCtrl.$modelValue)\n return;\n if (chipsCtrl.addChip(ngModelCtrl.$modelValue)) {\n iElement.val('');\n }\n }\n\n iElement.on('focus', function () {\n chipsCtrl.setFocus(true);\n });\n iElement.on('blur', function () {\n chipsCtrl.setFocus(false);\n });\n }\n }\n }\n})();\n","/*!\n* IconPicker ('https://github.com/furcan/IconPicker')\n* Version: 1.5.0 \n* Author: Furkan MT ('https://github.com/furcan')\n* Dependencies: Font Awesome Free v5.11.2 (https://fontawesome.com/license/free)\n* Copyright 2019 IconPicker, MIT Licence ('https://opensource.org/licenses/MIT')*\n*/\n\n'use strict';\n\n// IconPicker: Default Options on\nvar ipDefaultOptions = {\n jsonUrl: null,\n searchPlaceholder: 'Search Icon',\n showAllButton: 'Show All',\n cancelButton: 'Cancel',\n noResultsFound: 'No results found.',\n borderRadius: '20px',\n}\nvar ipNewOptions;\nvar ipGithubUrl = 'https://github.com/furcan/IconPicker';\n// IconPicker: Default Options off\n\n// IconPicker: Extend Options on\nvar extendIconPicker = function () {\n var extended = {};\n var deep = false;\n var i = 0;\n if (Object.prototype.toString.call(arguments[0]) === '[object Boolean]') {\n deep = arguments[0];\n i++;\n }\n var merge = function (obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n if (deep && Object.prototype.toString.call(obj[prop]) === '[object Object]') {\n extended[prop] = extendIconPicker(extended[prop], obj[prop]);\n } else {\n extended[prop] = obj[prop];\n }\n }\n }\n };\n for (; i < arguments.length; i++) {\n merge(arguments[i]);\n }\n return extended;\n};\n// IconPicker: Extend Options off\n\n\n// IconPicker: Main on\nvar IconPicker = {\n\n // init\n Init: function (ipUserOptions) {\n ipNewOptions = extendIconPicker(true, ipDefaultOptions, ipUserOptions);\n },\n\n // run\n Run: function (theButton, theCallback) {\n\n // IconPicker: Console Error Function on\n var ipConsoleError = function (errorMessage) {\n return console.error('%c IconPicker (Error) ', 'padding:2px;border-radius:20px;color:#fff;background:#f44336', '\\n' + errorMessage);\n }\n // IconPicker: Console Error Function off\n\n // IconPicker: Console Log Function on\n var ipConsoleLog = function (errorMessage) {\n return console.log('%c IconPicker (Info) ', 'padding:2px;border-radius:20px;color:#fff;background:#00bcd4', '\\n' + errorMessage);\n }\n // IconPicker: Console Log Function off\n\n // IconPicker: Check The Arguments For Proceed on\n if (arguments && arguments.length <= 2) {\n\n // query selector\n var ipButtons = document.querySelectorAll(theButton);\n\n // if button exist on the document\n if (ipButtons && ipButtons.length > 0) {\n for (var i = 0; i < ipButtons.length; i++) {\n\n // IconPicker: Button Listeners -> Send XMLHttpRequest on\n var ipButton = ipButtons[i];\n ipButton.addEventListener('click', function () {\n var jsonUrl = ipNewOptions.jsonUrl;\n var inputElement = this.dataset.iconpickerInput;\n var previewElement = this.dataset.iconpickerPreview;\n var showAllButton = ipNewOptions.showAllButton;\n if (!showAllButton || (showAllButton && showAllButton.length < 1)) {\n showAllButton = ipDefaultOptions.showAllButton;\n }\n var cancelButton = ipNewOptions.cancelButton;\n if (!cancelButton || (cancelButton && cancelButton.length < 1)) {\n cancelButton = ipDefaultOptions.cancelButton;\n }\n var searchPlaceholder = ipNewOptions.searchPlaceholder;\n if (!searchPlaceholder || (searchPlaceholder && searchPlaceholder.length < 1)) {\n searchPlaceholder = ipDefaultOptions.searchPlaceholder;\n }\n var borderRadius = ipNewOptions.borderRadius;\n if (!borderRadius || (borderRadius && borderRadius.length < 1)) {\n borderRadius = ipDefaultOptions.borderRadius;\n }\n\n // check the json url on\n if (!jsonUrl) {\n ipConsoleError('You have to set the path of IconPicker JSON file to \"jsonUrl\" option. \\n\\nVisit to learn how: ' + ipGithubUrl);\n return false;\n }\n // check the json url off\n\n // check the input on\n var checkInput = document.querySelectorAll(inputElement);\n if (checkInput.length <= 0) {\n ipConsoleError('You must define your Input element with it\\'s ID or Class Name to your Button element data attribute. \\n\\nExample: \\ndata-iconpicker-input=\"#MyIconInput\" or \\ndata-iconpicker-input=\".my-icon-input\" \\n\\nVisit to learn how: ' + ipGithubUrl);\n return false;\n }\n // check the input off\n\n // check the preview icon on\n var checkPreviewIcon = document.querySelectorAll(previewElement);\n if (checkPreviewIcon.length <= 0) {\n ipConsoleLog('You can define your Preview Icon element with it\\'s ID or Class Name to your Button element data attribute. \\n\\nExample: \\ndata-iconpicker-preview=\"i#MyIconElement\" or \\ndata-iconpicker-preview=\"i.my-icon-element\" \\n\\nVisit to learn how: ' + ipGithubUrl);\n }\n // check the preview icon off\n\n // check the callback on\n if (!theCallback && typeof theCallback !== 'function') {\n theCallback = undefined;\n }\n // check the callback off\n\n getIconListXmlHttpRequest(jsonUrl, showAllButton, cancelButton, searchPlaceholder, borderRadius, inputElement, previewElement, theCallback);\n\n });\n // IconPicker: Button Listeners -> Send XMLHttpRequest off\n\n }\n }\n // not exist\n else {\n ipConsoleError('You called the IconPicker with \"' + theButton + '\" selector, but there is no such element on the document.');\n }\n\n } else if (arguments && arguments.length > 2) {\n ipConsoleError('More parameters than allowed.');\n return false;\n } else {\n ipConsoleError('You have to call the IconPicker with an Element(Button or etc.) Class or ID. \\n\\nYou can also find the other required data attributes in the Documentation. \\n\\nVisit: ' + ipGithubUrl);\n return false;\n }\n // IconPicker: Check The Arguments For Proceed off\n\n\n // IconPicker: Get Library from JSON and AppendTo Body on\n var getIconListXmlHttpRequest = function (jsonUrl, buttonShowAll, buttonCancel, searchPlaceholder, borderRadius, inputElement, previewElement, theCallback) {\n\n // if chrome browser\n if (navigator.userAgent.toLowerCase().indexOf('chrome') > -1) {\n // check the protocol\n if (window.location.protocol.indexOf('http') <= -1) {\n ipConsoleLog('Chrome Browser blocked this request by CORS policy.');\n return false;\n }\n }\n\n // modal element\n var ipElement = document.getElementById('IconPickerModal');\n\n // if modal element doesn't exist on document send XMLHttpRequest\n if (!ipElement) {\n var xmlHttp = new XMLHttpRequest();\n xmlHttp.open('GET', jsonUrl, true);\n xmlHttp.setRequestHeader('Content-type', 'application/json; charset=utf-8');\n xmlHttp.send();\n xmlHttp.onreadystatechange = function () {\n if (this.readyState === 4) {\n if (this.status === 200) { // success\n var data = this.responseText;\n appendIconListToBody(data, buttonShowAll, buttonCancel, searchPlaceholder, borderRadius, inputElement, previewElement, theCallback);\n } else {\n ipConsoleError('XMLHttpRequest Failed.');\n }\n }\n };\n }\n }\n // IconPicker: Get Library from JSON and AppendTo Body off\n\n\n // IconPicker: Append Library to Body on\n var appendIconListToBody = function (data, buttonShowAll, buttonCancel, searchPlaceholder, borderRadius, inputElement, previewElement, theCallback) {\n\n // data\n var jsonData = JSON.parse(data);\n\n // icons\n var icons = '';\n for (var key in jsonData) {\n if (jsonData.hasOwnProperty(key)) {\n var forObj = jsonData[key];\n var icon = '';\n icons += icon;\n }\n }\n\n // loading indicator\n var loadingIndicator = '
';\n\n // icons wrap\n var iconWrap = '
' +\n '
' +\n '
' +\n '
' +\n loadingIndicator +\n icons +\n '' + buttonShowAll + '' +\n '
' +\n '' +\n '
';\n\n // create the modal element\n var IconPickerModal = document.createElement('div')\n IconPickerModal.id = 'IconPickerModal';\n IconPickerModal.innerHTML = iconWrap;\n\n // body\n var docBody = document.body;\n\n // append to body\n docBody.appendChild(IconPickerModal);\n\n // get the modal element\n var ipElement = document.getElementById(IconPickerModal.id);\n\n // modal element display css\n ipElement.style.display = 'block';\n\n // heights\n var ipHeight = parseInt(ipElement.offsetHeight);\n var winHeight = parseInt(window.innerHeight);\n\n // modal element position top css on\n var liveScrollTop = parseInt(window.pageYOffset || document.documentElement.scrollTop);\n var totalTopPos = liveScrollTop + ((winHeight - ipHeight) / 2);\n if (winHeight + 20 <= ipHeight) {\n totalTopPos = liveScrollTop;\n }\n ipElement.style.top = totalTopPos + 'px';\n // modal element position top css off\n\n // add css animation class to modal\n ipElement.classList.add('animate');\n\n // remove loading indicator on\n var loadingElement = document.getElementById('IconPickerLoading');\n var ltAnimate = setTimeout(function () {\n loadingElement.classList.add('hide');\n clearTimeout(ltAnimate);\n }, 600);\n var ltRemove = setTimeout(function () {\n loadingElement.parentNode.removeChild(loadingElement);\n clearTimeout(ltRemove);\n }, 900);\n // remove loading indicator off\n\n // show all button click listener on\n var showAllButtonElm = document.getElementById(IconPickerModal.id).getElementsByClassName('ip-show-all-icons')[0];\n showAllButtonElm.addEventListener('click', function () {\n ipElement.classList.add('show-all');\n this.parentNode.removeChild(this);\n }, false);\n // show all button click listener off\n\n // close and remove all on\n var removeIpElement = function (delay) {\n ipElement.classList.remove('animate');\n setTimeout(function () {\n docBody.removeChild(ipElement);\n }, delay);\n }\n // close and remove all off\n\n // cancel button click listener on\n var cancelButtonElm = document.getElementById(IconPickerModal.id).getElementsByClassName('cancel')[0];\n cancelButtonElm.addEventListener('click', function () {\n removeIpElement(400);\n }, false);\n // cancel button click listener off\n\n // search input keyup listener on\n var searchInputElm = document.getElementById('IconPickerSearch');\n searchInputElm.addEventListener('keyup', function (e) {\n\n // keycodes\n var eKeyCode = e.keyCode;\n var eCode = e.code.toString().toLowerCase();\n\n // check space and backspace keyup\n var spaceOrBackspace = false;\n if (eKeyCode === 32 || eCode === 'space' || eKeyCode === 8 || eCode === 'backspace') {\n spaceOrBackspace = true;\n }\n\n // cant type space\n if (eKeyCode === 32 || eCode === 'space') {\n this.value = this.value.replace(' ', '');\n return false;\n }\n\n // this val\n var searchVal = this.value.toString().toLowerCase();\n\n // define icons areas\n var firstIconsArea = document.getElementById(IconPickerModal.id).getElementsByClassName('ip-icons-area')[0];\n var searchResultArea = document.getElementById(IconPickerModal.id).getElementsByClassName('ip-icons-search-results')[0];\n\n // clear old results\n searchResultArea.innerHTML = '';\n\n // (if not space or backspace) and (if typed at least one char) able to search\n if (!spaceOrBackspace && searchVal.length > 0) {\n\n // for \"serch term\" in Json\n var tempIcons = '';\n for (var key in jsonData) {\n if (jsonData.hasOwnProperty(key)) {\n var forObj = jsonData[key];\n // if there is results create them\n if (forObj.toString().indexOf(searchVal) > -1) {\n firstIconsArea.style.display = 'none';\n var tempIcon = '';\n tempIcons += tempIcon;\n }\n }\n }\n\n // create a temp container\n var tempResults = document.createElement('div');\n tempResults.id = 'IconsTempResults';\n tempResults.innerHTML = tempIcons;\n\n // no results found on\n if (tempIcons.length < 1) {\n firstIconsArea.style.display = 'none';\n var noResultsText = ipNewOptions.noResultsFound;\n if (!noResultsText || (noResultsText && noResultsText.length < 1)) {\n noResultsText = ipDefaultOptions.noResultsFound;\n }\n var noResultElm = '

' + noResultsText + '

';\n tempResults.innerHTML = noResultElm;\n }\n // no results found off\n\n // append temp container to results area\n searchResultArea.appendChild(tempResults);\n\n // event listener for each temp icon\n eachIconEventListener('search');\n\n }\n // show first icons \n else {\n firstIconsArea.style.display = 'block';\n }\n\n }, false);\n // search input keyup listener off\n\n\n // each icon click listener on\n var eachIconEventListener = function (firstOrSearch) {\n\n var inputElm = document.querySelectorAll(inputElement);\n var previewElm = document.querySelectorAll(previewElement);\n\n // define icons on\n var eachIconElm;\n if (firstOrSearch === 'first') { // first\n eachIconElm = document.getElementById(IconPickerModal.id).getElementsByClassName('first-icon');\n } else if (firstOrSearch === 'search') { // search\n eachIconElm = document.getElementById(IconPickerModal.id).getElementsByClassName('search-icon');\n }\n // define icons off\n\n // add listeners each on\n for (var i = 0; i < eachIconElm.length; i++) {\n var singleIconElm = eachIconElm[i];\n singleIconElm.addEventListener('click', function (e) {\n e.preventDefault();\n var iconClassName = this.dataset.class;\n\n // each input value on\n for (var i = 0; i < inputElm.length; i++) {\n\n var getTagName = inputElm[i].tagName.toString().toLowerCase();\n // if an input or textarea element\n if (getTagName === 'input' || getTagName === 'textarea') {\n inputElm[i].value = iconClassName;\n }\n // else any of element\n else {\n inputElm[i].innerHTML = iconClassName;\n }\n\n }\n // each input value off\n\n // each preview on\n for (var i = 0; i < previewElm.length; i++) {\n previewElm[i].className = iconClassName;\n }\n // each preview off\n\n // callback on\n if (theCallback) {\n theCallback();\n }\n // callback off\n\n removeIpElement(400);\n }, false);\n }\n // add listeners each off\n\n }\n // each icon click listener off\n\n // first icons listeners\n eachIconEventListener('first');\n\n }\n // IconPicker: Append Library to Body off\n },\n}\n// IconPicker: Main off\n\nexport default IconPicker;","/**\n * INSPINIA - Responsive Admin Theme\n * Copyright 2014 Webapplayers.com\n *\n * Custom scripts\n */\n\n// Minimalize menu when screen is less than 768px\n$(function() {\n $(window).bind(\"load resize\", function() {\n if ($(this).width() < 769) {\n $('body').addClass('body-small')\n } else {\n $('body').removeClass('body-small')\n }\n })\n})\n\nangular.module(\"inspinia\", [])\n\n.directive('icheck', ['$timeout', function icheck($timeout) {\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function ($scope, element, $attrs, ngModel) {\n return $timeout(function () {\n var value;\n value = $attrs['value'];\n\n $scope.$watch($attrs['ngModel'], function (newValue) {\n $(element).iCheck('update');\n })\n\n return $(element).iCheck({\n checkboxClass: 'icheckbox_square-yellow',\n radioClass: 'iradio_square-yellow'\n\n }).on('ifChanged', function (event) {\n if ($(element).attr('type') === 'checkbox' && $attrs['ngModel']) {\n $scope.$apply(function () {\n return ngModel.$setViewValue(event.target.checked);\n });\n }\n if ($(element).attr('type') === 'radio' && $attrs['ngModel']) {\n return $scope.$apply(function () {\n return ngModel.$setViewValue(value);\n });\n }\n });\n });\n }\n };\n}])","var map = {\n\t\"./af\": 25177,\n\t\"./af.js\": 25177,\n\t\"./ar\": 61509,\n\t\"./ar-dz\": 41488,\n\t\"./ar-dz.js\": 41488,\n\t\"./ar-kw\": 58676,\n\t\"./ar-kw.js\": 58676,\n\t\"./ar-ly\": 42353,\n\t\"./ar-ly.js\": 42353,\n\t\"./ar-ma\": 24496,\n\t\"./ar-ma.js\": 24496,\n\t\"./ar-ps\": 6947,\n\t\"./ar-ps.js\": 6947,\n\t\"./ar-sa\": 82682,\n\t\"./ar-sa.js\": 82682,\n\t\"./ar-tn\": 89756,\n\t\"./ar-tn.js\": 89756,\n\t\"./ar.js\": 61509,\n\t\"./az\": 95533,\n\t\"./az.js\": 95533,\n\t\"./be\": 28959,\n\t\"./be.js\": 28959,\n\t\"./bg\": 47777,\n\t\"./bg.js\": 47777,\n\t\"./bm\": 54903,\n\t\"./bm.js\": 54903,\n\t\"./bn\": 61290,\n\t\"./bn-bd\": 17357,\n\t\"./bn-bd.js\": 17357,\n\t\"./bn.js\": 61290,\n\t\"./bo\": 31545,\n\t\"./bo.js\": 31545,\n\t\"./br\": 11470,\n\t\"./br.js\": 11470,\n\t\"./bs\": 44429,\n\t\"./bs.js\": 44429,\n\t\"./ca\": 7306,\n\t\"./ca.js\": 7306,\n\t\"./cs\": 56464,\n\t\"./cs.js\": 56464,\n\t\"./cv\": 73635,\n\t\"./cv.js\": 73635,\n\t\"./cy\": 64226,\n\t\"./cy.js\": 64226,\n\t\"./da\": 93601,\n\t\"./da.js\": 93601,\n\t\"./de\": 77853,\n\t\"./de-at\": 26111,\n\t\"./de-at.js\": 26111,\n\t\"./de-ch\": 54697,\n\t\"./de-ch.js\": 54697,\n\t\"./de.js\": 77853,\n\t\"./dv\": 60708,\n\t\"./dv.js\": 60708,\n\t\"./el\": 54691,\n\t\"./el.js\": 54691,\n\t\"./en-au\": 53872,\n\t\"./en-au.js\": 53872,\n\t\"./en-ca\": 28298,\n\t\"./en-ca.js\": 28298,\n\t\"./en-gb\": 56195,\n\t\"./en-gb.js\": 56195,\n\t\"./en-ie\": 66584,\n\t\"./en-ie.js\": 66584,\n\t\"./en-il\": 65543,\n\t\"./en-il.js\": 65543,\n\t\"./en-in\": 9033,\n\t\"./en-in.js\": 9033,\n\t\"./en-nz\": 79402,\n\t\"./en-nz.js\": 79402,\n\t\"./en-sg\": 43004,\n\t\"./en-sg.js\": 43004,\n\t\"./eo\": 32934,\n\t\"./eo.js\": 32934,\n\t\"./es\": 97650,\n\t\"./es-do\": 20838,\n\t\"./es-do.js\": 20838,\n\t\"./es-mx\": 17730,\n\t\"./es-mx.js\": 17730,\n\t\"./es-us\": 56575,\n\t\"./es-us.js\": 56575,\n\t\"./es.js\": 97650,\n\t\"./et\": 3035,\n\t\"./et.js\": 3035,\n\t\"./eu\": 3508,\n\t\"./eu.js\": 3508,\n\t\"./fa\": 119,\n\t\"./fa.js\": 119,\n\t\"./fi\": 90527,\n\t\"./fi.js\": 90527,\n\t\"./fil\": 95995,\n\t\"./fil.js\": 95995,\n\t\"./fo\": 52477,\n\t\"./fo.js\": 52477,\n\t\"./fr\": 85498,\n\t\"./fr-ca\": 26435,\n\t\"./fr-ca.js\": 26435,\n\t\"./fr-ch\": 37892,\n\t\"./fr-ch.js\": 37892,\n\t\"./fr.js\": 85498,\n\t\"./fy\": 37071,\n\t\"./fy.js\": 37071,\n\t\"./ga\": 41734,\n\t\"./ga.js\": 41734,\n\t\"./gd\": 70217,\n\t\"./gd.js\": 70217,\n\t\"./gl\": 77329,\n\t\"./gl.js\": 77329,\n\t\"./gom-deva\": 32124,\n\t\"./gom-deva.js\": 32124,\n\t\"./gom-latn\": 93383,\n\t\"./gom-latn.js\": 93383,\n\t\"./gu\": 95050,\n\t\"./gu.js\": 95050,\n\t\"./he\": 11713,\n\t\"./he.js\": 11713,\n\t\"./hi\": 43861,\n\t\"./hi.js\": 43861,\n\t\"./hr\": 26308,\n\t\"./hr.js\": 26308,\n\t\"./hu\": 90609,\n\t\"./hu.js\": 90609,\n\t\"./hy-am\": 17160,\n\t\"./hy-am.js\": 17160,\n\t\"./id\": 74063,\n\t\"./id.js\": 74063,\n\t\"./is\": 89374,\n\t\"./is.js\": 89374,\n\t\"./it\": 88383,\n\t\"./it-ch\": 21827,\n\t\"./it-ch.js\": 21827,\n\t\"./it.js\": 88383,\n\t\"./ja\": 23827,\n\t\"./ja.js\": 23827,\n\t\"./jv\": 89722,\n\t\"./jv.js\": 89722,\n\t\"./ka\": 41794,\n\t\"./ka.js\": 41794,\n\t\"./kk\": 27088,\n\t\"./kk.js\": 27088,\n\t\"./km\": 96870,\n\t\"./km.js\": 96870,\n\t\"./kn\": 84451,\n\t\"./kn.js\": 84451,\n\t\"./ko\": 63164,\n\t\"./ko.js\": 63164,\n\t\"./ku\": 98174,\n\t\"./ku-kmr\": 6181,\n\t\"./ku-kmr.js\": 6181,\n\t\"./ku.js\": 98174,\n\t\"./ky\": 78474,\n\t\"./ky.js\": 78474,\n\t\"./lb\": 79680,\n\t\"./lb.js\": 79680,\n\t\"./lo\": 15867,\n\t\"./lo.js\": 15867,\n\t\"./lt\": 45766,\n\t\"./lt.js\": 45766,\n\t\"./lv\": 69532,\n\t\"./lv.js\": 69532,\n\t\"./me\": 58076,\n\t\"./me.js\": 58076,\n\t\"./mi\": 41848,\n\t\"./mi.js\": 41848,\n\t\"./mk\": 30306,\n\t\"./mk.js\": 30306,\n\t\"./ml\": 73739,\n\t\"./ml.js\": 73739,\n\t\"./mn\": 99053,\n\t\"./mn.js\": 99053,\n\t\"./mr\": 86169,\n\t\"./mr.js\": 86169,\n\t\"./ms\": 73386,\n\t\"./ms-my\": 92297,\n\t\"./ms-my.js\": 92297,\n\t\"./ms.js\": 73386,\n\t\"./mt\": 77075,\n\t\"./mt.js\": 77075,\n\t\"./my\": 72264,\n\t\"./my.js\": 72264,\n\t\"./nb\": 22274,\n\t\"./nb.js\": 22274,\n\t\"./ne\": 8235,\n\t\"./ne.js\": 8235,\n\t\"./nl\": 92572,\n\t\"./nl-be\": 43784,\n\t\"./nl-be.js\": 43784,\n\t\"./nl.js\": 92572,\n\t\"./nn\": 54566,\n\t\"./nn.js\": 54566,\n\t\"./oc-lnc\": 69330,\n\t\"./oc-lnc.js\": 69330,\n\t\"./pa-in\": 29849,\n\t\"./pa-in.js\": 29849,\n\t\"./pl\": 94418,\n\t\"./pl.js\": 94418,\n\t\"./pt\": 79834,\n\t\"./pt-br\": 48303,\n\t\"./pt-br.js\": 48303,\n\t\"./pt.js\": 79834,\n\t\"./ro\": 24457,\n\t\"./ro.js\": 24457,\n\t\"./ru\": 82271,\n\t\"./ru.js\": 82271,\n\t\"./sd\": 1221,\n\t\"./sd.js\": 1221,\n\t\"./se\": 33478,\n\t\"./se.js\": 33478,\n\t\"./si\": 17538,\n\t\"./si.js\": 17538,\n\t\"./sk\": 5784,\n\t\"./sk.js\": 5784,\n\t\"./sl\": 46637,\n\t\"./sl.js\": 46637,\n\t\"./sq\": 86794,\n\t\"./sq.js\": 86794,\n\t\"./sr\": 45719,\n\t\"./sr-cyrl\": 3322,\n\t\"./sr-cyrl.js\": 3322,\n\t\"./sr.js\": 45719,\n\t\"./ss\": 56000,\n\t\"./ss.js\": 56000,\n\t\"./sv\": 41011,\n\t\"./sv.js\": 41011,\n\t\"./sw\": 40748,\n\t\"./sw.js\": 40748,\n\t\"./ta\": 11025,\n\t\"./ta.js\": 11025,\n\t\"./te\": 11885,\n\t\"./te.js\": 11885,\n\t\"./tet\": 28861,\n\t\"./tet.js\": 28861,\n\t\"./tg\": 86571,\n\t\"./tg.js\": 86571,\n\t\"./th\": 55802,\n\t\"./th.js\": 55802,\n\t\"./tk\": 59527,\n\t\"./tk.js\": 59527,\n\t\"./tl-ph\": 29231,\n\t\"./tl-ph.js\": 29231,\n\t\"./tlh\": 31052,\n\t\"./tlh.js\": 31052,\n\t\"./tr\": 85096,\n\t\"./tr.js\": 85096,\n\t\"./tzl\": 79846,\n\t\"./tzl.js\": 79846,\n\t\"./tzm\": 81765,\n\t\"./tzm-latn\": 97711,\n\t\"./tzm-latn.js\": 97711,\n\t\"./tzm.js\": 81765,\n\t\"./ug-cn\": 48414,\n\t\"./ug-cn.js\": 48414,\n\t\"./uk\": 16618,\n\t\"./uk.js\": 16618,\n\t\"./ur\": 57777,\n\t\"./ur.js\": 57777,\n\t\"./uz\": 57609,\n\t\"./uz-latn\": 72475,\n\t\"./uz-latn.js\": 72475,\n\t\"./uz.js\": 57609,\n\t\"./vi\": 21135,\n\t\"./vi.js\": 21135,\n\t\"./x-pseudo\": 64051,\n\t\"./x-pseudo.js\": 64051,\n\t\"./yo\": 82218,\n\t\"./yo.js\": 82218,\n\t\"./zh-cn\": 52648,\n\t\"./zh-cn.js\": 52648,\n\t\"./zh-hk\": 1632,\n\t\"./zh-hk.js\": 1632,\n\t\"./zh-mo\": 31541,\n\t\"./zh-mo.js\": 31541,\n\t\"./zh-tw\": 50304,\n\t\"./zh-tw.js\": 50304\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 = 35358;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdD = function () {\n\tthrow new Error('define cannot be used indirect');\n};","__webpack_require__.amdO = {};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t524: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkstela_frontend_2\"] = self[\"webpackChunkstela_frontend_2\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\n__webpack_require__.O(undefined, [622], () => (__webpack_require__(66696)))\n__webpack_require__.O(undefined, [622], () => (__webpack_require__(75199)))\n__webpack_require__.O(undefined, [622], () => (__webpack_require__(87275)))\n__webpack_require__.O(undefined, [622], () => (__webpack_require__(54251)))\n__webpack_require__.O(undefined, [622], () => (__webpack_require__(54234)))\n__webpack_require__.O(undefined, [622], () => (__webpack_require__(5213)))\nvar __webpack_exports__ = __webpack_require__.O(undefined, [622], () => (__webpack_require__(1366)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","app_1","require","group_detail_component_1","static_1","app","directive","downgradeComponent","component","GroupDetailComponent","language","jquery_1","__importDefault","toastr_1","group_import_html_1","people_import_html_1","events_annexes_html_1","documents_edit_html_1","historic_mails_filters_html_1","spaces_edit_html_1","folders_list_html_1","groups_edit_html_1","locations_reservations_edit_html_1","materials_edit_html_1","address_html_1","contact_html_1","group_html_1","mail_html_1","political_affiliation_html_1","persons_edit_html_1","restaurants_edit_html_1","staff_edit_html_1","calendar_html_1","group_list_printed_html_1","loading_html_1","navigation_html_1","footer_html_1","topnavbar_html_1","exports","angular","module","config","$stateProvider","$httpProvider","$urlRouterProvider","$translateProvider","$animateProvider","$compileProvider","$uibModalProvider","RestangularProvider","$logProvider","logExProvider","$locationProvider","hashPrefix","setBaseUrl","window","CONFIG","api_url","debugInfoEnabled","debug","location","hostname","indexOf","enableLogging","useTemplates","overrideLogPrefix","className","injector","get","$filter","Date","isString","restrictLogMethods","options","backdrop","defaults","headers","common","preferredLanguage","fallbackLanguage","useUrlLoader","useSanitizeValueStrategy","interceptors","push","classNameFilter","otherwise","when","default","run","uiGridSelectionService","$rootScope","$http","$state","i18nService","$translate","UpdateService","$window","$injector","LoginService","Restangular","$q","$timeout","$log","$document","$templateCache","addResponseInterceptor","data","operation","what","url","response","isUndefined","rows","responseData","totalRows","put","addErrorInterceptor","responseHandler","error","status","replace","includes","pathname","hash","toggleRowSelection","grid","row","evt","multiSelect","noUnselect","selectedRows","selected","isSelected","enableSelection","getSelectedRows","length","clearSelectedRows","setSelected","selection","lastSelectedRow","selectAll","totalItems","api","raise","rowSelectionChanged","licenseExpired","loginProcess","theme","localStorage","getItem","$on","event","toState","toParams","fromState","fromParams","scrollTo","isLoggedIn","substring","Authorization","e","islogged","unset","isDefined","requiredPermission","forbidden","i","len","permissionExist","preventDefault","go","$watch","pendingRequests","showLoading","setCurrentLang","toLowerCase","onUpdateAvailable","version","getInstalledVersion","then","actualVersion","TimeOutTimerValue","TimeOut_Thread","LogoutByTimer","element","warn","inactivityLogout","closeSession","TimeOut_Resetter","cancel","filter","input","start","slice","link","scope","attrs","onClick","isChild","has","target","isSelf","$apply","clickAnywhereButHere","isActive","newValue","oldValue","bind","unbind","$","navigator","languages","parts","toUpperCase","split","datepicker","regional","closeText","prevText","nextText","currentText","monthNames","monthNamesShort","dayNames","dayNamesShort","dayNamesMin","weekHeader","dateFormat","firstDay","isRTL","showMonthAfterYear","yearSuffix","setDefaults","$provide","decorator","$delegate","add","aggregate","label","groupPanel","description","search","placeholder","showingItems","selectedItems","size","first","next","previous","last","menu","text","sort","ascending","descending","remove","column","hide","aggregation","count","sum","avg","min","max","pinning","pinLeft","pinRight","unpin","gridMenu","columns","importerTitle","exporterAllAsCsv","exporterVisibleAsCsv","exporterSelectedAsCsv","exporterAllAsPdf","exporterVisibleAsPdf","exporterSelectedAsPdf","clearAllFilters","importer","noHeaders","noObjects","invalidCsv","invalidJson","jsonNotArray","pagination","sizes","of","grouping","group","ungroup","aggregate_count","aggregate_sum","aggregate_max","aggregate_min","aggregate_avg","aggregate_remove","controller","$scope","gridService","modalService","uiGridConstants","title","breadcrumb","ip_address","uri","date_from","date_to","gridOptionsAccesses","pdfTitle","exporterMenuCsv","enableGridMenu","gridMenuShowHideColumns","paginationPageSizes","paginationPageSize","rowTemplate","onRegisterApi","gridApi","this","columnDefs","name","visible","enableHiding","exporterSuppressExport","displayName","enableFiltering","cellFilter","enableColumnMenu","getData","all","getList","searchAccesses","loadData","breadcrumb_html_1","accesses_list_html_1","state","abstract","template","pageTitle","$stateParams","annexes","id","one","results","FK_events_programs_annexes_types_tl_events_programs_annexes_types","errorMessage","message","save","post","result","toastr","success","delete","confirm","onAccept","gridOptionsAnnexes","cellTemplate","width","enableSorting","actionTemplate","action","cssIconClass","cssClass","goToEdit","rowEntity","deleteDialog","core","itemDeleted","annexes_list_html_1","annexes_edit_html_1","core_1","platform_browser_1","platform_browser_dynamic_1","people_module_1","shared_module_1","core_module_1","log_service_1","AppModule","constructor","upgrade","log","ngDoBootstrap","bootstrap","document","body","strictDi","__decorate","NgModule","imports","BrowserModule","UpgradeModule","PeopleModule","SharedModule","CoreModule","__param","Inject","LogService","platformBrowserDynamic","bootstrapModule","audits_modal_html_1","$uibModal","username","table","gridOptionsAudits","searchAudits","openDialog","value","open","animation","resolve","$uibModalInstance","onCancel","dismiss","audits_list_html_1","$location","$httpParamSerializer","$sce","showProcessSelector","processes","services","loginData","password","authenticator_code","yubico_otp","companyLogoUrl","companyName","showCompanyData","showNewLogin","passwordIcon","passwordType","togglePasswordVisibility","s","openid_configuration","webapp_enabled","forEach","imageUrl","imageUid","step","UserPassword","Authenticator","YubicoOTP","Webauthn","OAuth","loginExternal","nextStep","selectProcess","response2","onKeyPressPassword","keyEvent","which","checkUserPassword","onKeyPressAuthenticator","verifyCode","onKeyPressYubicoOTP","verifyYubicoOTP","validateUser","checkWebauthn","service","validateAuthenticator","validateYubicoOTP","process","userToken","token","showQr","qrCode","code","image","coerceToBase64Url","thing","Array","isArray","Uint8Array","from","ArrayBuffer","str","byteLength","String","fromCharCode","btoa","Error","coerceToArrayBuffer","atob","bytes","charCodeAt","buffer","TypeError","addCredentials","customPOST","makeCredentialOptions","challenge","user","excludeCredentials","map","c","authenticatorSelection","authenticatorAttachment","undefined","credentials","create","publicKey","newCredential","attestationObject","clientDataJSON","rawId","type","extensions","getClientExtensionResults","JSON","stringify","registerNewCredential","msg","registerYubicoOTP","auth_process_init_html_1","auth_register_auth_code_html_1","auth_register_webauthn_html_1","auth_register_yubicootp_html_1","views","AuthenticationProcessesNewStepModal_html_1","$interval","allowWrite","authentication_process","Steps","configureSteps","saveAuthenticationProcess","checkDelete","f","inGrid","gridOptionsSteps","addStep","removeStep","index","defaultPosition","newStepTitle","orderList","Order","Math","newField","close","gridOptions","gridOptionsAuthenticationServices","authentication_processes_list_html_1","authentication_processes_edit_html_1","Upload","authentication_service","showImg","entity_type","entity_type_id","logo","uid","selectImage","trigger","change","fileInput","querySelector","file","files","fileReader","FileReader","onload","src","$$phase","readAsDataURL","getImage","removeImage","$event","stopPropagation","manageFile","upload","is_public","errorMsg","uploadFile","saveAuthenticationService","authentication_services_list_html_1","authentication_services_edit_html_1","$controller","$compile","budget_group_id","budget_group","frmBudgetGroups","uiGridTreeViewConstants","treeService","showTreeExpandNoChildren","el","budget_groups_list_html_1","budget_groups_edit_html_1","iconpicker_1_5_0_js_1","cms_article","cms_category_id","params","parent_id","stateGo","stateGoParams","standalone","uiSerf","cms_article_id","tinymceOptions","resize","min_height","height","schema","formats","bold","inline","underline","italic","alignleft","selector","attributes","align","aligncenter","alignright","alignjustify","invalid_elements","fontsize_formats","font_formats","body_class","use","paste_as_text","plugins","toolbar","menubar","Init","jsonUrl","searchPlaceholder","showAllButton","cancelButton","noResultsFound","borderRadius","Run","icon","getAttribute","gridArticles","defer","full","category","promise","deleteArticleDialog","cms_articles_list_html_1","cms_articles_edit_html_1","cms_categories","category_id","selectCmsCategories","x","parent_cms_category_id","cms_categories_id","hijos","expandAllRows","allCmsCategories","cmsCategoriesTree","cms_categories_list_html_1","cms_categories_edit_html_1","newEventModal_html_1","taskModal_html_1","newReservationModal_html_1","templateModal_html_1","moment_1","locale_all_1","generateDocumentService","uiCalendarConfig","optionsUsers","user_id","parseInt","end","location_id","event_id","currentState","current","allowChangeUsersDashboard","allorPrintSchedule","company_id","base_url_api","base_url","selectUsers","dt","calendar","today","inlineOptions","showWeeks","startingDay","maxMode","locale","toggleMin","minDate","dateOptions","selectDate","calendars","fullCalendar","selectUser","events","checkUserTasks","checkOtherTasks","checkEventTasks","checkEvents","checkUserEvents","checkOtherEvents","checkEventProgramActs","checkBirthdays","checkActs","checkLocationPending","checkLocationConfirmed","checkLocationCancelled","checkLocationRejected","checkLocationId","checkLocationsChecked","loadedSections","loadedSectionsTotal","locations","calendarOptions","nameCalendar","calendarGroups","parse","setItem","checked","printPage","print","getCalendarEvents","view","format","userId","method","calendarRange","task_id","utc","toDate","allDay","all_day","backgroundColor","textColor","borderColor","eventName","event_name","eventType","entityType","entityTypeId","refetchEvents","setDate","getDate","events_guests","events_notes","strTitle","program_act_id","date","_d","getMonth","setFullYear","getFullYear","person_id","person_type","op","copy","dateFrom1","dateTo2","notes","op2","op3","location_group_id","FK_locations_reservations_locations","color","reserved_by","requested_by","FK_locations_reservations_requested_by","total_guests","saveCheckAndRefesh","checkName","checkValue","setTimeout","newElement","console","info","uiConfig","editable","locales","selectable","scrollTime","defaultView","header","left","center","right","timezone","callback","eventDurationEditable","select","startDate","endDate","newLocationReservation","eventLimit","month","dayClick","jsEvent","resourceObj","setHours","eventRender","calEvent","content","entityTranslate","find","prepend","css","contentCompiled","popover","html","placement","container","viewRender","addTask","resultModal","printDialog","type_document","type_result","codes","documents","documentNew","item","document_id","start_date","end_date","outputType","on","parents","hasClass","downloadICA","formatToken","translateText","prompt","eventsTypes","selectEventsTypes","newEvent","is_template","templates","unshift","uiSliderConfig","eventTask","selectedUsersIdS","borderRight","work_progress","event_task_id","selectEvents","eventChanged","is_group","selectEventTaskGroups","withoutGroup","selectTaskTypes","selectTaskStatus","FK_events_tasks_tasks_status","saveEventTask","FK_events_tasks_users_events_tasks","task_type_id","FK_events_tasks_tasks_types","task_status_id","selected_users","users","saveEvent","isDefinedAndNotNullAndNotEmpty","FK_events_users","responsible_id","selectStatus","location_reservation","frmLocationReservation","location_name","genders","totalPositions","treatments","actions","PersonName","PersonSurname","isDuplicate","PersonPositionId","rowFormatter","entity","Duplicate","gridGroupImport","enableScrollbars","enableRowSelection","enableSelectAll","callbackFunctionGridResize","callbackFunctionRowSelected","rowSelectionChangedBatch","paginationChanged","expandedRows","expandable","getExpandedRows","rowExpandedStateChanged","editableCellTemplate","editDropdownValueLabel","editDropdownOptionsFunction","colDef","expandableRowTemplate","importOptions","groupRows","subGridOptions","p","gridId","addAll","splice","visibleRows","paginationCurrentPage","gridSize","massiveIgnore","r","Action","massiveImport","massiveEndPosition","massiveAddPosition","import","groupPositions","position","request","genderHash","actionHash","ibox_tools_html_1","restrict","$element","showhide","ibox","closest","slideToggle","toggleClass","$attrs","ngModel","iCheck","checkboxClass","radioClass","attr","$setViewValue","folders_edit_html_1","files_edit_html_1","reports_preview_html_1","mail","addresses","to","subject","cc","cco","cc_tmp","cco_tmp","attachments","replyMailsAccounts","user_mail","mailsAccounts","forced_root_block","valid_classes","statusbar","content_css","changeReplies","_","account","mail_account_id","email","reply_to","newAttachment","deleteAttachment","base64DataUrl","urls","send","currentGeneralFolderId","generalFolders","generalFiles","currentEventFolderId","eventFolders","eventFiles","loadGeneralData","folderId","level","folder_id","newFolders","m","is_folder","mimetype","loadEventData","editAdd","currentFolderId","$modalInstance","parentFolderId","fileId","orderPrintModal","_sortBy","showOrder","configurateJasper","optionsValues","for_event_guest","for_event_staff","for_event_workteam","for_correspondence","documentsTypes","document_type_id","FK_documents_documents_types","a","findIndex","setValue","document_type_code","url_document_method","document_name","document_url_method","url_params","event_guests_id","persons_ids","changeCheck","key","obj","selectedNew","onError","onConfigure","modified","parameter","values","val","language_id","screenSize","finishHtmlLoad","showHideMenu","loadMenu","company","menu_code","menus","metisMenu","isItemActive","ret","ui_sref","hideMenu","menuItemId","args","w","getWindowDimensions","windowHeight","h","windowWidth","addClass","sizeLg","is","sizeMd","sizeSm","sizeXs","isDefinedAndNotNull","mailingFilesStelaModal_html_1","searchPersonsModal_html_1","BeeService","filesToShow","mailings","notificationAttachments","showRecipientList","showICS","blocked_all","disabled_account","scheduled_date","loadBee","preheader","ics","showToPart","event_guests_ids","users_ids","event_staffs_ids","event_users_ids","totalEmails","loadCombos","accounts","defaultAccount","use_by_default","customGET","template_id","app_enabled","mailing_type_code","isProgramMail","showDocuments","relative_urls","convert_urls","remove_script_host","firstime","mail_account_reply","bcc","newAttachmentStela","filename","fileStela","file_id","confirmSend","is_invitation","mark_as_sent_invitation","json","openSearchPerson","whereToAdd","mailsSelected","loadTemplate","res","reload","reloadTemplate","openDocumentsModal","document_code","doc","refreshRecipients","recipientData","event_guests_ids_mails","showRecipients","mailingChange","mailing_id","mail_from","FK_mailing_template","mailing","FK_mailing_attachment_mailing","responseType","contentType","Blob","forbidden_html_1","totalPeople","check","dataFullyLoaded","military_groups_enabled","gridPeopleImport","pop","matched_guest_id","rowTitleParser","minWidth","people","group_id","menu_item_id","person","Gender","Promise","massiveInvite","some","exceptionString","ExceptionMessage","exceptionMessage","exceptionExtraInfo","exceptionRowInfo","showDuplicate","href","PersonType","notification","notificationTypes","notificationsTypes","versionModal_html_1","currentDate","use_for_interface","lang","languageId","roles_permissions","changeLanguage","$broadcast","changeTheme","versions","showVersion","project_code","PROJECT_CODE","asyncSelected","itemSelected","$item","$model","$label","stateName","stateParams","related_entity","related_entity_id","getTerms","searchTerms","version_info_url","ajax","xhrFields","withCredentials","isOpen","minimalize","fadeIn","removeAttr","noImage","setup","editor","configureLanguages","FK_companies_languages_companies","companyLanguage","use_for_translation","created_at","program_mail_list_array","article_12","selectPrecededDefault","default_order_article","configurations","programMailList","loadComboPreceded","addFile","flowFile","saveCompany","finalCompanyLanguages","join","companyLanguages","article_10","deleteCompany","gridOptionsCompanies","BorrarDialog","companies_list_html_1","companies_edit_html_1","contact_type","saveContactType","gridOptionsContactTypes","contact_types_list_html_1","contact_types_edit_html_1","common_1","CommonModule","AuthService","permission","Injectable","providedIn","LogLevel","LogEntry","entryDate","Debug","extraInfo","logWithDate","buildLogString","toLocaleDateString","day","year","toLocaleTimeString","hour","minute","second","formatParams","optionalParams","writeToLog","Info","Warn","fatal","Fatal","All","shouldLog","entry","Off","addNewPersonModal_html_1","notificationService","allowFoldersFiles","allowTasks","allowNotifications","correspondence","to_name","from_name","from_person_id","to_person_id","information_groups_values","changesNotSaved","tinymceDescriptionOptions","paste_remove_styles","paste_remove_styles_if_webkit","paste_strip_class_attributes","paste_auto_cleanup_on_paste","loadInformationGroups","pigs","informationGroups","pig","configuration","checkboxSimpleOptions","option","infoFilter","information_group_id","loadCorrespondence","date_celebration","from_person","term","surname","lastname","from_position_id","from_position","gender","female_description","male_description","personSelected","from_position_name","to_person","correspondencesTypes","correspondence_type_id","savedOptions","prepareNavigationBar","_pageSize","row_index","_page","navigatePrevious","navigateNext","_pages","saveCorrespondence","pips","newPip","positions","persons","person_min_length","position_min_length","getPersonsSearch","getPositionsSearch","getPersonsToSearch","positionSelected","FK_persons_positions_persons","to_date","FK_persons_positions_positions","addNewPerson","closed","SelectPersons","documentAndEmail","personId","notificationMail","correspondence_id","datasetsService","pigstoShowInList","senders","senderPositions","personsInformationGroups","notify_in_list","gridOptionsCorrespondence","field","date_celebration_from","date_celebration_to","toISOString","correspondences","changeStatus","idx","offset","clearForm","export","filters","EXPORT_TYPE","TYPE","STATUS","FROM_PERSON_ID","FROM_POSITION_ID","FROM_NAME","DESCRIPTION","DATE_FROM","DATE_TO","exportByType","print_pending","CORRESPONDENCE_TYPE_ID","DATE_CELEBRATION","correspondence_list_html_1","correspondence_edit_html_1","tasks_list_html_1","notifications_list_html_1","correspondence_type","selectEntityTypes","gridOptionsCorrespondencesTypes","correspondences_types_list_html_1","correspondences_types_edit_html_1","countries_add_region_modal_html_1","regionFilter","country","gridRegions","context","country_id","addRegion","saveCountry","deleteCountry","deleteRegionDialog","region","gridOptionsCountries","countryFilter","countries_list_html_1","countries_edit_html_1","countries_regions_edit_html_1","countries_regions_cities_modal_html_1","cityFilter","gridCities","country_region_id","cityModal","city","deleteCityDialog","modalTitle","showCalendar","urlApi","required_image","show_in_dashboard","_sortDirection","loadEvents","loadGuestsInfo","hours","days","round","getTime","invitedGuests","totalGuestsConfirmed","total_guests_confirmed","totalGuestsNotExpected","total_guests_not_expected","invitedGuestNotInYet","guests_not_in_yet","filterGuestsIn","guests_in","filterGuestsRejected","guests_rejected","intervalLoadInfoFirstDashboard","time_check_changes_guests","eventFavourite","filterFilter","totalRow","totalGuestNotInYet","totalGuestIn","getGuestFilters","guests","confirmation_status","check_in_date","loadGuests","intervalLoadInfoDashboard","dashboard_list_html_1","dashboard_show_html_1","spaceId","dashboard_space_show_html_1","LanguagesService","types","dataset","is_system_dataset","dataset_id","datasets","fileType","fileTypeOptions","translation","allowExport","useFilter","toggleFilter","recursiveElementId","loadExportConfig","onDatasetChange","onExport","FILTERED_IDS","exportResult","getSize","size_description","onDownload","exportDialog","datasets_export_html_1","factory","instance","datasets_list_html_1","datasets_edit_html_1","cache","company_uid","fileJrxml","fileJasper","documents_reports","uploadFileJrxml","$file","errorMsgJrxml","uploadFileJasper","errorMsgJasper","uploadToServer","path","is_general","jasper_path","hasUploadedFiles","uploadFileNameError","angular_1","documents_reports_filter","reset","removeItem","savedFilters","gridOptionsDocuments","searchDocumentsReports","clearFilters","duplicate","documents_reports_list_html_1","documents_reports_edit_html_1","documentsTypesVariablesModal_html_1","document_type","gridOptionsVariables","addDocumentTypeVariable","document_type_variable_id","deleteVariablesDialog","gridOptionsDocumentsTypes","documents_types_list_html_1","documents_types_edit_html_1","event_host","event_host_id","frmEventHosts","colorTemplate","maxWidth","event_hosts_list_html_1","event_hosts_edit_html_1","accreditationsModal_html_1","$parent","menusItems","accreditations","gridOptionsEventAccreditations","actionIconTemplate","addEventAccreditation","event_guest_accreditation_id","alert","eventAccreditation","saveEventAccreditation","checkDeleteEventAccreditation","annexes_types","annexes_events","template_options","invalid_styles","ui","registry","addButton","onAction","insertContent","cargaInicial","is_explicit_annex","template_images","add_annex","annex_type_id","annexes_tl","rows_tl","FK_events_programs_annexes_events_programs_annexes_types","FK_events_programs_annexes_tl_events_programs_annexes","addImages","annex_event","errFiles","typeAllowed","o","maxSizeAllowed","maxsize","Image","sizeFileMB","is_deleted","orden","is_inserted","removeFile","annex","saveImages","FileId","event_annex_id","hasResults","gridBudget","exporterPdfFooter","enablePaginationControls","showColumnFooter","customFormatFn","aggregationType","aggregationTypes","article_id","historic_mails_modal_info_html_1","gridOptionHistoricMails","optionsGrid","infoModal","isDocumentEditState","eventId","loadOptions","show_by_default","documents_types_variables","copyDocumentsTypesVariables","j","FK_events_documents_types_document_types_variables","is_explicit_document_type","documentTypesVariables","delete_icon","DocumentsImportDocumentModal_html_1","eventService","classSize","has_variables","no_program_act_config","documentTypes","loadTemplateDocuments","documentType","configure","importDocument","documentTypeId","allTemplateFiles","templateFiles","DocumentTypeId","download","filePath","createElement","click","replaceFile","replacementFile","documentToAdd","selectFiles","onSelect","locationChanged","allOptions","toggleIcon","toggleAllOptions","article10","article12","public_guest_app_enabled","selectActFormat","showCheckRestricted","allowShowInformation","allowShowWorkTeam","allowShowGuests","allowShowTasks","allowShowProgramAct","allowShowDiary","allowShowMaterials","allowShowStaff","allowShowSpace","allowShowIndicator","allowShowMailAccount","allowShowBudget","allowShowInscriptionsForms","allowShowParkings","allowShowAccreditation","allowShowHistoric","allowShowNotifications","allowShowCMS","showEventsMenu","sizewidth","regxUrls","showButtonMenu","buttontext","offsetWidth","toggleEventsMenu","isPageLoaded","menu_id","idxParent","menuTree","profilePermissions","logged_event_user","FK_events_staff_staff","menuItem","is_restricted_access","parent_menu_item_id","childs","mainDataEditable","mainDataVisible","event_ended","guestProgress","total_staff","staffProgress","total_tasks","taskProgress","total_materials","materialsProgress","reply_deadline","progress","calculaTotal","event_finished","total","toFixed","radio_article_10","loadInfo","getGuests","guests_pending","guests_confirmed","guests_delegated","guests_manage_delegate","guests_pending_approval","total_guests_original","companion_guests_confirmed","companion_guests_pending_approval","companion_guests_confirmed_nominal","companion_guests_confirmed_not_nominal","getStaff","staff_pending","staff_confirmed","getTasks","tasks_pending","tasks_completed","tasks_canceled","getMaterials","materials_pending","materials_confirmed","getPendingInscriptions","inscriptions_pending","pending","total_inscriptions","intervalLoadInfo","limit_image_height","limit_image_width","group_name","loadConfigurationOptions","FK_events_images","image_id","widthContainer","restricted_access","isLocationSelected","locationAvailable","parent_allowed","selectIdentificationTypes","onCheckIdentification","identification_type","checkIfParentAllowed","is_parent","parent_event_id","event_type","is_companions_allowed","default_companions_limit","filterParents","selectParents","selectParentsFiltered","withoutImages","defaultUserFilter","u","only_active","availableLanguages","eventHosts","send_notifications","createTemplateFromEvent","favourite_to_user","location_min_length","getLocationsSearch","locationSelected","customGETLIST","reserve","duplicateEvent","$watchGroup","newVal","oldVal","getInstance","dateEvents","viewAll","eventFilter","maxbottomwidth","titleedit","titledelete","actionedit","actiondelete","gridOptionsEvents","DateFrom","DateTo","fecha","filterHeaderTemplate","actionIconNoSpaceTemplate","eventsTree","searchEvents","templateDialog","NAME","n","createFromTemplate","rest","events_list_html_1","events_menu_html_1","events_edit_html_1","guests_list_html_1","guests_import_html_1","work_team_list_html_1","staff_list_html_1","programs_acts_list_html_1","materials_list_html_1","parkings_list_html_1","indicators_types_list_html_1","diary_html_1","budget_list_html_1","spaces_list_html_1","resume_list_html_1","mail_accounts_list_html_1","informations_list_html_1","informations_edit_html_1","inscriptions_forms_list_html_1","inscriptions_forms_show_inscriptions_html_1","inscriptions_forms_edit_html_1","documents_list_html_1","accreditations_list_html_1","historic_mails_list_html_1","notifications_edit_html_1","mailings_list_html_1","groups_list_html_1","locationsEvents_list_html_1","cms_categories_event_list_html_1","cms_categories_event_edit_html_1","cms_categories_event_edit_html_2","cms_categories_event_list_html_2","push_notifications_event_list_html_1","push_notifications_event_edit_html_1","onEnter","parent","searchGroupModal_html_1","lodash_1","hasSearched","hasFilteredGroups","groupsNamesArray","listGroupsIds","listPositionsIds","getvalueArray","eventGroup","groupsIds","positionsIds","resultsGroups","groups","forceChecked","seleccionar","FK_positions_groups","filterGroups","preselect","is_filter","ids","chain","reduce","memo","listPositions","positionId","trustAsHtml","string","postGroups","addNewParkingModal_html_1","addNewZone_html_1","parking_id","only_one","parkings","selectParkings","saveOption","allow_parking","max_vehicles","addNewParking","parking","zone","companions_zone","selectZones","addNewZone","max_companions_allowed","selectAccreditions","eventsProgramsActSelected","eventsActs","haveEspecificActs","eventsAnnexesSelected","haveEspecificAnnexes","event_guest_vehicle","event_guest_id","guestVehicle","saveGuestVehicle","encoding_japanese_1","searchGuestsModal_html_1","configGuestModal_html_1","assignIdentifierModal_html_1","assignZone_html_1","assignParkings_html_1","assignAccreditation_html_1","assignActs_html_1","assignAnnexes_html_1","AssignTagsModal_html_1","guestNotesModal_html_1","guestSpaceZonesModal_html_1","guestVehiclesModal_html_1","assignCompanionsLimit_html_1","$last","$eval","repeatEnd","focus","setSelectionRange","showAdvanceSearch","showComunications","showAttachments","incidentMessage","paginationOptions","pageSize","currentPage","numPages","pageStart","pageEnd","pageArray","send_status","accreditions_ids","parkings_ids","document_sent_id","zones","comunication","communicationStatus","checkInFilter","checkInArrived","checkInAnyDate","checkInDate","showGroupByGroups","allowUserRead","allowImport","send_status_unsent","send_status_print","send_status_mail","send_status_inscription","parking_pending","pending_approval","confirmed","rejected","delegated","manage_delegate","guests_translate","companion_nominal","companion_not_nominal","companion","guestsId","invitedGuestsGroupByGroups","showParkingColumn","totalColumns","documentsForGuests","accreditationsList","inscription_form_id","sendStatusList","confirmationStatusList","use_rfid_access_control","togleIncidents","auxShowIncidents","showIncidents","parkingsList","zonesList","selectComunications","selectAttachment","guestReferred","guestInformation","searchGuests","loadGroups","incidents","groups_ids","attachment","cont","institution","positions_ids","items","addParentGroup","allGroups","FK_groups_groups_groups1","parent_group_id","guest","pushedGroups","parentPushed","text_color","hex","invertColor","groupGuests","referrer_person_id","companions","referred_in","tot_companions","num_companions","tot_companions_not_nominal","namesColumnMailings","searchByName","principalGuests","g_companions","referred_option","companion_sub","ceil","range","clearform","changePage","page","animate","scrollTop","top","checkAll","selectedAll","each","saveEventGuests","eventGuestsContainer","searchMasiveDialog","allName","configDialog","documentsTypesSpecifics","generateDocumentPopup","toString","order","newPrintDialog","printCSV","searchGroup","list","getContrastYIQ","hexcolor","substr","assignIdentifier","event_guest","forceSaved","identify_id","sendProgram","personIds","person_ids","resultsProgramExist","paramsNew","AssociateZone","guestsIds","AssociateParking","default_vehicle_limit","massiveAsignmentAccreditation","groups_names","unfilterGroups","MassiveRemove","is_invited","guest_ids","deleteItems","delete_message","SetCompanionsLimit","massiveAsignmentActs","event_acts_ids","epag","guests_id","resultsImage","assignAnnexes","events_annexes_ids","guests_ids","assignSpaces","async","selectedGuestsIds","spaces","getSpaces","event_guest_zone","spaceID","spaceSelected","zoneID","sendPushNotifications","listIds","notificationPush","sendNotifications","searchByIncident","filteredItemsIds","EVENT_ID","GUEST_LIST_INCLUDE_ACTS","importCSVConfigured","importCSV","reader","detectedEncoding","detect","unicodeString","convert","mime","readAsArrayBuffer","updateCSVConfigured","updateCSV","confirmSelected","selectedToConfirm","selectedToCheck","confirmation_date","guest_id","event_acts_show_ids","onlyConfirmableActs","partial_attendance","searchModal","showError","showResults","personPositionModal","personPositionOrigin","persons_groups","type_persons","typePersonSelected","position_order","personsInformationGoups","use_in_search","parsePersonType","position_id","searchGuestsOptions","name2","historic_position","gridGuestsOptions","enableSelectionBatchEvent","rowsRendered","callbackFunctionItemChange","nableFiltering","group_position_name","nameSearch","surnameSearch","lastnameSearch","tags","personsIds","dataR","photo","image_small","indexPosition","lengthOfPositions","searchByTags","is_modal","entity_id","addGuests","continueOption","getSelectAllState","positionIdSelected","aux","guestsOptions","guests_position","addGuestsCompanion","rows_data","limit","callbackClose","mode","isDefinedAndNotNullOrEmpty","allowReadPersons","eventsDocumentTypeSelected","hasSomethingToConfig","partial","positionChecked","companionTexts","tab_title","checkPartialAttendance","eventsConfirmableActs","confirmation_status_value","act","confirmationStatus","goToPerson","eventsSpecificActs","haveConfirmableActs","eventsProgramsActs","programAct","FK_events_programs_acts_menus_events_programs_acts","is_principal","FK_events_programs_acts_menus_guests_events_programs_acts","menu_guest","event_program_act_id","event_program_act_menu_id","sendStatus","isCompanionsAllowed","showContactInfoPhone","showContactInfoEmail","statusObject","sendStatusObject","isCompanionsAllowedObject","accreditation","event_person_order","prefered_order","event_guest_accreditation","send_invitation","max_vehicles_allowed","num_vehicles","previousGuestInfo","principalPhone","principalEmail","person_position_id","persons_positions","pp","gridCompanion","rowHeight","persons1","checkCompanion","checkStatus","companionDelegateText","companionText","saveGuestInfo","changeAccreditation","addCompanion","deleteCompanion","showCompanionList","modalSendMail","mail_to","filteredInvitedGuests","totalNumCompanions","Number","eventGuestsNewOrder","eventGuestsReferred","programActs","isPrincipal","gridOptionsGuestsNotes","addEventGuestNotes","egnotes","event_guest_notes","is_new","deleteEventGuestNotes","gridOptionNotifications","goToEditNotification","notificationId","notification_email_id","gridOptionsGuestsZones","deleteEventGuestSpaceZone","egzone","addEventGuestSpaceZone","spaceAssignedIds","space","FK_events_guests_zones_events_spaces_zones","event_space_id","disabled","eventGuestZone","$object","modifyEventGuestSpaceZone","gridOptionVehicles","deleteEventGuestVehicle","egVehicle","function","addEventGuestVehicle","is_edit","FK_events_guests_identifiers","identifier","identifiers_types","identifier_type","keyPressed","saveIdentifier","identifier_type_id","guestNotes","name_created","saveGuestNotes","FK_events_spaces_zones_events_spaces","event_zone_id","clearZone","saveGuestSpaceZones","listGroups","itemGroup","totalInGroup","totalLeft","notice","forceGetPosition","child","show","showPositions","groupId","toggleCheckTree","group_group","toggleShowTree","applyToSons","forcedState","toggleCheckPosition","addGroups","listIdsPositions","checkedGroupsIdsToSend","posi","guestTabSelect","emailTabSelect","notificationTabSelect","inscriptionsTabSelect","selectModules","actualTab","changeTab","tab","makeSearch","downloadUrl","FK_historic_mails_attachments_historic_mails","downloadFile","downloadFiles","event_indicator","eventIndicators","staffList","selectStaff","eventStaff","indicatorsTypes","selectIndicatorsTypes","loadIndicators","indicators","gridOptionEventIndicators","addEventIndicator","eventIndicator","staff_id","FK_events_indicators_staff","FK_events_indicators_indicators_types","indicator_type_id","staff","deleteEventIndicator","saveEventIndicator","eventIndicatorContainer","events_indicators","addLocationEventModal_html_1","allowMaterialRead","gridOptionLocations","yesNoFilter","yesNoTemplate","assignLocation","selectLocations","saveLocation","isCorrectReplyTo","mail_list_bcc_array","mail_list_reply_array","radio","FK_events_mail_accounts","changeMailAccount","historicMails_html_1","searchMaterialsModal_html_1","addNewMaterialModal_html_1","errorUnits","existsQuantity","loadWharesouseRows","warehouses","selectWarehouses","ConfirmationStatusOptions","gridOptionEventMaterials","selectOptions","SELECT","editEventMaterial","eventMaterial","quantity","FK_events_materials_materials","qty","budgetGroups","selectBudgetGroups","budgetGroupNull","pageYOffset","styleMargin","EventMaterialHistoricMail","keyboard","materialId","closeMaterialInfo","saveMaterialInfo","warehouse_id","product_id","material_id","totalStock","itemChanged","providers","selectProviders","materials_types","selectTypes","searchMaterialOptions","gridMaterialsOptions","material_type_id","provider_id","is_external","addMaterial","materialOptions","eventMaterials","addNewMaterial","gridOptionEventParkings","editParking","parkingId","FK_events_parkings_images","saveParking","chart_js_1","tinymce_1","programActModal_html_1","programActMonitoringModal_html_1","addRestaurantModal_html_1","programActMenuModal_html_1","programActReservationModal_html_1","programActUserModal_html_1","programChangesNotSaved","eventChangesNotSaved","setProgramChangesNotSaved","setEventChangesNotSaved","loadProgramInfo","program_mail_list","loadProgramsActs","lastDate","eventsProgramsActsByDate","eventProgramAct","programDate","actDate","program","acts","eventProgramActIds","eventProgram","eventProgramInformation","showFile","FK_events_programs_images","addEventProgramAct","event_program_act_date","programActId","seeActMonitoring","checkDeleteEventProgramAct","specificActChange","eventsGuestsEspecificAct","style","nameComplete","uploadFiles","hasChanged","showProgressBar","file_uid","Uid","showFilePanel","deleteFile","saveEventProgram","changeLoadProgramInfo","stopImmediatePropagation","addImage","program_image","sendProgramDialog","deleteImage","saveEventAndProgram","restoreDefaultProgramMails","allowReadUsers","allowWriteUsers","selectedTemplateModel","add_images","translatable_program_acts","fullImg","FK_events_programs_acts_images","addRestaurant","restaurant","selectRestaurants","restaurant_id","gridOptionsActMenus","gridGuestAct","exporterOlderExcelCompatibility","exporterFieldCallback","col","gridOptionsActUsers","gridOptionsActReservations","selectProgramsActsTypes","FK_events_programs_acts_events_programs_acts_types","CONFIG_TINYMCE","font_color_description","font_size","font_family","tinymceTitleOptions","saveEventProgramAct","event_program_act_type_id","FK_events_programs_acts_users_events_programs_acts","FK_locations_reservations_event_program_act","principal","deleteTemplate","addEventProgramActMenu","event_program_act_menu","deleteEventProgramActMenu","addEventProgramActReservation","reservation","event_program_act_reservation","event_program_act","deleteEventProgramActReservation","addEventProgramActUser","event_program_act_user","deleteEventProgramActUser","FK_events_programs_acts_users_users","printProgramActMenu","program_menu_id","showHistory","eventProgramActId","is_lateral","eventProgramActMenu","content_style","gridGuestMenu","exporterPdfOrientation","saveEventProgramActMenu","eventProgramActUser","name_user","ed","execCommand","saveEventProgramActUser","eventProgramActReservation","duration","saveEventProgramActReservation","barOptions","scaleBeginAtZero","scaleShowGridLines","scaleGridLineColor","scaleGridLineWidth","barShowStroke","barValueSpacing","barDatasetSpacing","responsive","maintainAspectRatio","scaleOverride","scaleSteps","scaleStartValue","scales","xAxes","stacked","gridLines","yAxes","ticks","beginAtZero","floor","getSerieColor","colors","loadChart","searchedData","dateSearch","dataResults","d","getUTCHours","getUTCDate","getUTCMonth","getUTCFullYear","filteredData","barData","labels","ctx","getElementById","getContext","myNewChart","destroy","check_in_dat","changeAssistance","route","ACT_ID","showData","sent","sending","status_filter","filterSent","filterPending","filterError","filterNone","FK_users_notifications_notifications","status_name","notificationFilter","l","auto_1","y","searchOptions","mainEvent","plain_text_name","isMainEvent","selectedAct","loadActList","allow_access_control","parse_text","actList","setOptionsDate","endpoint","searchDate","parsedDate","getHours","Chart","modifyStatus","events_guests_ids","has_companions","check_companions","overrideDate","fabric_1","spaces_place_not_available_action_html_1","spaces_set_first_position_html_1","spaces_free_place_action_html_1","spaces_item_table_html_1","spaces_item_zone_html_1","spaces_item_vehicle_html_1","cell_template_guest_html_1","cell_template_place_html_1","CONFIG_TABLE","CARTESIAN_4","CARTESIAN_5","CARTESIAN_6","CARTESIAN_7","CARTESIAN_8","CARTESIAN_9","CARTESIAN_10","CARTESIAN_11","CARTESIAN_12","CARTESIAN_13","CARTESIAN_14","CLOCK_4","CLOCK_5","CLOCK_6","CLOCK_7","CLOCK_8","CLOCK_9","CLOCK_10","CLOCK_11","CLOCK_12","CLOCK_13","CLOCK_14","CONFIG_TABLE_FRENCH","$parse","$interpolate","terminal","transclude","priority","ctrls","ngController","controllerName","newScope","$new","locals","ngInject","clone","append","SpacesService","showGuestList","allEventGuest","availableHeight","innerHeight","canvas_height","spaceCanvasFullWidth","guestsInfo","inSpaceEvents","isDashboard","zone_color","place_color_free","place_color_occuped","spaceClass","guestsClass","name_surnames","not_allocated","position_name","spaceOptions","spaceDTO","useFullname","usePosition","zoom","canvas","gridEventSpaceGuest","edit","afterCellEdit","freePlace","getFullSeatName","checkBusyPlacesAndAssign","renderAll","allowCellFocus","enableCellEdit","allocated","localFilteredResults","getFiteredGuests","Direction","addGrid","gridGroup","gridoption","stroke","strokeWidth","objectCaching","fabric","Line","Group","evented","addWithUpdate","sendToBack","removeGrid","moveSelected","direction","rotate","activeObject","getActiveObject","angle","angleStep","setCoords","deleteObject","eventData","transform","sendToBackObject","goDownObject","sendBackwards","goUpObject","bringForward","sendToFrontObject","bringToFront","renderIcon","styleOverride","fabricObject","cornerSize","translate","util","degreesToRadians","drawImage","restore","removeBox","_objects","localType","gridShown","addBox","rect","Rect","fill","box","draggable","resizeCanvas","clean","calcOffset","setCanvasWidth","setCanvasHeight","init","Canvas","preserveObjectStacking","_canvas","upperCanvasEl","dblclick","self","findTarget","onObjectDblClick","onMouseOver","opt","delta","deltaY","getZoom","zoomToPoint","offsetX","offsetY","altKey","isDragging","lastPosX","clientX","lastPosY","clientY","vpt","viewportTransform","requestRenderAll","setViewportTransform","addListener","keyCode","deleteImg","sendBackImg","sendFrontImg","goUpImg","goDownImg","Object","prototype","controls","deleteControl","Control","cursorStyle","mouseUpHandler","render","sendToFrontControl","goUpControl","goDownControl","sendToBackControl","initFabricControls","drawSpace","clear","skip","keepaliveInterval","keepalive","clearTimeout","apiPath","last_edit_date","diff","modified_by","setZoom","loadFromJSON","object","contextMenuOptions","$itemScope","modelValue","$li","createZone","createTable","createVehicle","discardActiveObject","blinkPlaceIterations","blinkPlace","place","color_guest","set","blinkIterationNumber","blink","eventGuest","objs","getObjects","zone_prefered","prefered","callbackFunctionSortGuests","b","sortBy","FK_events_guests_persons","fullname","localeCompare","aPosition","FK_events_guests_persons_positions","FK_positions_tl_positions","bPosition","anyGroup","anyPosition","getPrincipalName","principalName","principalGuest","loadGuest","rowResult","nameToShow","newRow","$emit","assignPositions","firstPlace","placeIncrement","findPosition","clearList","changeOrder","firstPositionNumber","firstPositionIncrementation","added","busyPlaces","arePlacesFree","$modalInstanceAction","moveGuests","replaceGuests","setPositions","ok","describeZone","zone_file","zone_position","zone_type","askForFreePlace","move","freePlaceModalOptions","freePlaceModalOk","freePlaceModalCancel","fullnameNormalized","posObj","female_short_description","male_short_description","guestId","guestName","positionNumber","guestColor","positionIncrementation","foundObj","locked","addGuestToObject","deletePrefered","previousGuest","previousPrefered","finalGuests","forEachObject","objFind","nextPosition","nextGuest","currentPosition","newPosition","newPlace","fullPlaceText","moveGuest","draggedObject","allowDrop","drag","ev","dataTransfer","setData","dragEnd","overTarget","zoneObj","positionObj","droppable","isDown","startPosition","polygonMode","activeShape","activeLine","pointArray","lineArray","spaceImages","showImageSelector","drawLine","isDrawingMode","removeEvents","pointer","getPointer","points","line","guid","fillColor","strokeColor","originX","originY","x2","y2","drawRectangle","transparent","transparentCorners","abs","drawCircle","circle","Circle","radius","drawPolygon","generatePolygon","addPointToPolygon","class","crypto","msCrypto","array","Uint32Array","random","getRandomValues","layerX","layerY","hasBorders","hasControls","pos","polygon","Polygon","opacity","polyPoint","point","drawText","IText","selectTool","selectedImage","spaceFiles","createImage","off","getPositionGuest","z","getAllSeatedGuests","seatedGuests","name_guest","preferedAux","positions_header","zoneAux","preferedValue","foundGuest","nGuest","customSvgClass","Textbox","fontSize","fontFamily","textAlign","breakWords","lineHeight","k","randomUUID","_toSVG","svg","call","replaceAll","saveSpace","continueOpen","findZonePositions","toJSON","tmp","objects","pre","curr","errorZoneName","toSVG","viewBox","customPUT","gridOptionsSpaces","cancelMain","resetZoom","zoomIn","zoomOut","deltaUnits","goRight","Point","relativePan","goLeft","goDown","goUp","dataURLtoBlob","dataurl","arr","bstr","u8arr","switchFullScreenCanvas","downloadImage","blob","toDataURL","objurl","URL","createObjectURL","click_x","click_y","placeWidth","placeHeight","places","angleCircle","PI","tableRect","placeText","placeNumber","arrayPositions","auxArrayPositions","nPlaceTotalPrefered","firstPlaceNumberPrefered","nRow","indexof","configurationTables","system_table","diffRadius","outherRadius","cos","sin","isNaN","placeRect","fontWeight","type_presidency_table","head_table","places_left","places_right","angleText","places_bottom","places_top","defineTable","posiSecond","maxI","lockScalingX","lockScalingY","padding","subTargetCheck","reasignGuestToZone","fixedValuex","fixedValuey","placeMargin","fixedValue","fromURL","oImg","modalOpened","nRows","nPlaces","placesDirection2","placesDirection","nPlaceTotal","firstPlaceNumber","resetPlaceNumberByRow","rowNumber","firstRowNumber","rowsNumberLikeChars","Text","centerArray","onlyPairNone","nPlace","leftText","topText","placeNumberPrefered","selectedTool","showGrid","groupObjects","toGroup","ungroupObjects","toActiveSelection","tool","freeDrawingBrush","changeNames","changeNamesGroup","findZonePositionsRec","margin","getPlaceName","spaces_export_options_html_1","clipboard","copyToClipboard","copyText","host","openImage","showExportSpaceToExcel","modalInstance","single_sheet","exportSpaceToExcel","editSpace","idTemplate","searchStaffModal_html_1","addNewStaffModal_html_1","allowReadUser","gridOptionEventStaff","editEventStaff","EventStaffHistoricMail","staffId","closeStaffInfo","saveStaffInfo","eventStaffIds","staff_positions","selectPositions","searchStaffOptions","gridStaffOptionsSelected","gridStaffOptions","staff_position_id","provider_name","addStaff","staffOptions","addNewStaff","selectEventModal_html_1","taskUser","FK_events_tasks_users_users","$$search","gantt_data","diagramView","showDiagram","headersFormats","task","getToday","viewScale","statusOptions","statusOption","pdfMaker","widthShow","scrollWidth","html2canvas","docDefinition","pdfMake","createPdf","gridOptionsEventTasks","valueReturned","dateFrom2","dateTo1","no_group","every","event_task","event_task_2","addToGantt","eventTasksTree","contParents","treeBase","contentTooltip","tasks","registerApi","directives","new","dName","dScope","dElement","dAttrs","dController","addEventTask","model","duplicateEventTask","taskId","addEventTaskGroup","widthGanttContainer","changedFields","GanttContainerStyle","newActivity","activities","slider","setPrice","price","AddChangedField","fieldName","minutes","getMinutes","setMinutes","checkDeleteEventTask","addActivity","activity","deleteActivity","saveSelectEvent","eventUsersIds","work_team","eventUsers","eventUser","FK_events_users_users","resultsImg","event_user","FK_users_images","searchFilter","inArray","FK_events_users_events_users_profiles","filterUsers","profiles","selectProfiles","addEventUser","frmWorkTeam","profile","event_user_profile_id","deleteEventUser","saveEventUser","eventUserContainer","events_users","saveEventUserProfile","events_types_list_html_1","events_types_edit_html_1","event_user_profile","loadPermissions","permissions","FK_events_users_profiles_menus_items_permissions_events_users_profiles","viewsFilter","prm","itm","editsFilter","viewItems","editItems","v","profile_id","view_permissions","edit_permissions","gridOptionsEventsUsersProfiles","events_users_profiles_list_html_1","events_users_profiles_edit_html_1","auth_service_1","core_2","authService","isAllowed","ngOnInit","Component","declarations","file_type","selectMimetypes","files_types_list_html_1","files_types_edit_html_1","type_whitelist","selectEntities","selectFilesTypes","searchEntity","files_types_whitelist_list_html_1","files_types_whitelist_edit_html_1","parent_folder_id","namesFiles","submit","folder","foldersDocumentTypeModal_html_1","foldersTagsModal_html_1","TagsModal_html_1","foldersService","fullFolderFiles","tagsInFilter","breadcrumbs","foldersFiles","selectTags","tagList","filterUsedTags","setDocumentType","folderfile","manageTags","createNewTag","filterByTags","tagsInFilterIds","t","tag_id","subFolderTagsIds","concat","addTagToFilter","tag","removeTagFromFilter","downloadAll","supported","protocol","openFile","onClose","changeIsGuestOnly","folderFile","guest_only","folderList","availableTags","folderTags","mergeWithoutDuplicates","subfolderTags","array1","array2","managedFolder","tagToAdd","addTagToFolder","tagEntity","removeTagFromFolder","selectDocumentTypes","managedFile","folders_modal_html_1","folders","entitytype","entitytypeid","addQuantityModal_html_1","gridWarehouse","trusted","getPopoverContent","gift","allowViewPersonGifts","loadGrid","gridOptionMovementsGifts","saveGift","FK_gifts_images","checkChanges","addQuantities","giftId","movement","wharehouse_id","onSave","gift_id","giftsFilter","gridOptionsGifts","exporterSuppressColumns","searchGifts","gifts_list_html_1","gifts_edit_html_1","in_out","viewNotAcceptGiftsLabel","person_gift","costReadOnly","show_in_reports","not_accept_gifts","is_IN","selectedGift","to_position_id","to_position","FK_persons_gifts_gifts","cost","gift_date","initialQuantity","gifts","SelectGifts","searchName","SelectEvents","checkQuantity","selectGift","selectPerson","changeWarehouse","savePersonGift","nameGift","FK_persons_gifts_images","personFromSelected","personToSelected","gridOptionsPersonsGiftsIn","FK_persons_gifts_persons1","FK_persons_gifts_persons","gift_date_from","dateFrom","gift_date_to","dateTo","deleteInDialog","gridOptionsPersonsGiftsOut","deleteOutDialog","IN_OUT","persons_gifts_list_html_1","persons_gifts_edit_html_1","endPosition","from_date","position_treatment_id","person_treatment_id","personGroups","personTreatments","person_default","position_default","loadPersonsTreatments","getPositions","gridAttendedEvents","ExtendPositionsInstructionsModal_html_1","origin_group","destiny_group","getGroupsSearch","groupSelected","saveExtendPosition","gridOptionsPersonPosition","elm","new_group_name","origin_group_id","destiny_group_id","group_date","person_positions","openInstructions","GroupsDeleteModal_html_1","PositionModal_html_1","GroupGroupModal_html_1","HistoricModal_html_1","GroupContactModal_html_1","GroupAddressModal_html_1","ExtendPositionsModal_html_1","AttendedEventsModal_html_1","InstitutionEditModal_html_1","PositionMailModal_html_1","PositionAddressModal_html_1","PositionContactModal_html_1","EndPositionAndAddNewPosition_html_1","allowDeleteDescendants","buttonCancel","prepareTitle","groupOptions","getGroupId","fromView","comeFromPersons","FK_groups_contacts_groups","FK_groups_addresses_groups","group_type","gridListPosition","gridGroupContactInfo","gridGroupAddresses","gridDesciendeDeOptions","blocked","changePositionsVisibility","showPosition","setColorParent","sortColumn","ASC","notifyDataChange","dataChange","ALL","customNamePDF","customName","parent_list","relation","filledList","reject","frmGroups","child_group_id","addPositions","isNew","position_type","FK_positions_contacts_positions","FK_positions_addresses_positions","position_list","deletePositionDialog","editedIdx","modifyParents","allow_select_multple","show_color","group_list","parents_clone","apply_parent_color","addDescendsFrom","descendsFrom","personsPositionHistoric","name_position","deleteGroupContactInfo","groupContactInfo","deleteGroupAddress","addGroupContactDialog","groupContactValue","edited","FK_groups_contacts_groups_contacts_scopes","FK_groups_contacts_groups_contacts_types","groups_contacts","group_contact_scope_id","group_contact_type_id","addGroupAddressDialog","groupAddress","groupAddressValue","postal_code","address_line_2","address_line_1","FK_groups_addresses_groups_addresses_scopes","FK_groups_addresses_countries","group_address_scope_id","openExtendPositions","openAttendedEvents","applyColorToSubgroups","reloadPositionsEmails","positionsMails","positionTreatments","positionDefault","pt","positionOrigin","getInstitutionsSearch","clearInstitution","institution_id","institutionSelected","editInstitution","id_from_modal","checkDeletePosition","deleted","origin","viewHistoric","checkSavePosition","shared_by","savePosition","exists","tl","scope_tl","FK_positions_mails_positions","gridPositionAddresses","gridPositionContactInfo","minRowsToShow","addEmailsPositions","position_email","use_for_invitation","use_for_program","use_for_others","editPostionMail","addPositionsAddressDialog","positionAddress","positionAddressValue","FK_positions_addresses_positions_addresses_scopes","FK_positions_addresses_countries","positions_contacts","position_address_scope_id","addPositionsContactDialog","positionContactInfo","positionContactValue","FK_positions_contacts_positions_contacts_scopes","FK_positions_contacts_positions_contacts_types","position_contact_scope_id","position_contact_type_id","deletePositionContactInfo","deletePositionAddress","duplicatePosition","slideUp","personPosition","only_authorities","gridPersonsHistoric","fromDate","selectedPersonsToEndPosition","position_prev_id","listPersonsIds","addPersonsToPosition","groupContactModal","groupContactOrigin","groupsContactsScopes","pcs","groupsContactsTypes","pct","saveGroupContact","groupAddressModal","groupAddressOrigin","groupsAddressessScopes","countries","saveGroupAddress","position_mail","savePositionMail","deletePositionMail","positionAddressModal","positionAddressOrigin","positionsAddressessScopes","savePositionAddress","positionContactModal","positionContactOrigin","positionsContactsScopes","positionsContactsTypes","savePositionContact","newParents","newParentsClone","gridDesciendeDeBuscadorOptions","searchGroups","checkSingle","saveGroupsGroups","is_inactive","searchPersons","gridPersonsOptions","is_active","clearGroupFilter","deleteOptions","deleteDescendants","mapsGroupsModal_html_1","addGroupModal_html_1","showNewData","searchValues","show_empty_positions","showOptions","loadDataNew","goToAdd","mapGroup","groupsLoaded","newData","changeGroupType","addNewGroup","addPosition","resultvalue","editPosition","deletedValue","toggleCheckGroup","toggleCheckGroupItself","movePositions","moveGroups","printGroupsAuthoritiesTree","groupImportId","importGroupCSVConfigured","importGroupCSV","printGroupsTree","person_import_html_1","fullGroup_import_html_1","identifiers","identifierTypes","selectIdentifierTypes","saveIdentifiers","frmIdentifier","identifiers_list_html_1","identifiers_edit_html_1","ImportDocumentsModal_html_1","gridOptionsImportDocument","openModal","import_documents","file_name","insert","isValidated","onImport","import_documents_list_html_1","indicator_type","saveIndicatorType","deleteIndicatorType","gridOptionsIndicatorsTypes","indicators_types_edit_html_1","information","information_type_id","information_id","onSelectFile","regExp","RegExp","regExpImage","regExpVideo","regExpAudio","saveInformation","informations_modal_list_html_1","showReturnToEvent","InformationTypesOptions","showInformations","selectPersons","information_type","gridOptionsInformations","user_name","addMultiple","inscriptionFormFieldModal_html_1","inscription_form","FK_inscriptions_forms_fields_inscriptions_forms","FK_inscriptions_forms_images","gridInscriptionsFormsFields","enablePagination","send_email_confirmation","send_email_enrolled","send_email_rejected","email_confirmation","email_enrolled","email_rejected","event_date_init","event_date_end","forced_root_block_attrs","frmInscriptionForm","openUrl","addInscriptionFormField","inscriptionFormField","inscriptionForm","inscriptionFormFieldValue","inscription_form_field","type_field_id","mandatory","show_in_list","exportable","options_class","parent_field_id","parent_option_id","FK_inscriptions_forms_fields_types_fields","type_field","FK_inscriptions_forms_fields_options_inscriptions_forms_fields","deleteInscriptionFormField","emailsToCheck","inscriptionFormFieldModal","inscriptionFormFieldOrigin","has_options","validParentFields","parentField","validOptions","selectParentField","validOptionsIds","is_conditional_field","selectTypesFields","saveInscriptionFormField","selectTypeField","addNewOption","inscription_form_field_id","removeOption","uiGridExporterService","urlPublic","gridOptionsInscriptionsForms","exportInscriptions","INSCRIPTION_FORM_ID","INSCRIPTION_EXPORTATION","showInscriptionModal_html_1","editInscriptionModal_html_1","capacityDetailModal_html_1","newInscriptionModal_html_1","assignTagModal_html_1","myDefs","inscriptions_approved","showActionsButtons","duplicate_string","is_approval_form","accepted","inscriptions_approved_cont","inscriptions_rejected_cont","inscriptions_pending_cont","list_fields","inscriptions_fields","inscriptions","inscription_field","FK_inscriptions_fields_inscriptions","FK_inscriptions_fields_inscriptions_forms_fields","updateCapacity","capacity","show_inscription","inscription","inscriptionIds","edit_inscription","confirmInscriptions","capacityDetails","formId","newInscription","associate_tag","filterInscriptions","filterForm","inscription_id","inscription_form_fields","previewImage","confirmInscription","deleteInscription","filledInscriptionFormFieldsIds","form_field","new_inscription_field","setUpInscriptionsFields","valuesArray","changeValuesArray","relatedFile","modifyInscription","fields","saveCapacities","capacitiesDetail","checkSavedTimeout","checkFormCompleted","okField","contents","saveInscription","InstitutionContactModal_html_1","InstitutionAddressModal_html_1","InstitutionMailModal_html_1","contacts","iconElement","iconClass","gridContact","gridAddress","editContact","contact","newContact","editAddress","address","newAddress","editMail","newMail","deleteContact","deleteAddress","deleteMails","mails","onCancelInstitution","onAcceptInstitution","contactTypesSelect","ContactTitle","typeName","contact_types","contact_type_id","contacts_types","addressTitle","countryList","mailTitle","onDelete","institutions_list_html_1","institutions_edit_html_1","resourceTLModal_html_1","textSearch","language_code_tree","language_id_tree","selectedLanguage","enableCellEditOnFocus","FK_resources_tl_resources_id","resources_tl","translationData","resource_id","languageTree","searchText","EditDialog","resources_tl_id","valueToChange","resourceTlModal","saveTranslation","languages_list_html_1","addInformationMarkerModal_html_1","js_api_loader_1","loader","Loader","apiKey","initMap","latitude","longitude","contextMenu","formatted_address","load","Map","OverlayView","InfoWindow","google","maps","importLibrary","Marker","latlng","lat","lng","myOptions","mapTypeId","MapTypeId","ROADMAP","overlay","draw","setMap","infoWindow","setCenter","marker","setContent","ControlPosition","TOP_CENTER","findDesc","FK_locations_markers_locations_markers","svgMarker","iconMain","description_marker","tempElement","iconUnicodeCache","appendChild","character","getComputedStyle","getPropertyValue","getIconUnicode","fillOpacity","strokeWeight","rotation","scale","anchor","optimized","entries","getTitle","getMap","pixel","showContextMenu","eventLatLng","latLng","hideContextMenu","adictionalMarks","location_country","location_region","searching","refresh","country_region_city_id","fullLocation","gps_latitude","gps_longitude","saveLocations","reloadMarkers","changedLocation","geolocation","Geocoder","geocoder","fullAddress","name_in_map","city_id","geocode","geometry","deleteMarker","typeMarker","markers","markerId","gps_aditinal_latitude","gps_aditional_longitude","getCurrentPosition","coords","clickMainMarker","goToCountries","clickPopup","saveMarker","gridOptionsGroupLocations","locationsTree","locations_list_html_1","locations_edit_html_1","requested_id","FK_locations_reservations_persons_locations_reservations","inheritable","locationReservationPerson","personsGrid","locationReservationPersonModal","locationReservationPersonOrigin","unregistered_person","idxPerson","saveLocationReservationPerson","dateLocationsReservations","gridOptionsLocationsReservations","FK_locations_reservations_persons","LOCATION","html2canvas_1","pdfmake_1","ConfigurationsGantt","configurationGant","timeFrames","working","magnet","drawTaskFactory","ganttOptions","expandToFit","allowSideResizing","columnWidth","timeFramesNonWorkingMode","changeDate","width2","locations_reservations_list_html_1","locations_reservations_timeline_html_1","login_html_1","editPasswordModal_html_1","forgottenPswModal_html_1","onKeyPress","doLogin","urlParts","absUrl","paramParts","disableLocalLogin","enableWebauthn","openid","payload","client_id","callback_url","codeVerifier","token_endpoint","transformRequest","client_secret","encodeURIComponent","audience","decodeURIComponent","proxy_token_request","access_token","id_token","refresh_token","expires_in","now","alerts","wantToBeRemembered","remember","processAuthenticationInfo","offersPermission","accessToken","saveTokenInfo","validTo","temporal_password","dec2hex","dec","padStart","generateId","doWebauthnLogin","makeAssertionOptions","credential","allowCredentials","listItem","fixedId","err","assertedCredential","authData","authenticatorData","sig","signature","userHandle","AssertionVerificationResult","AuthenticationInfo","verifyAssertionWithServer","loginUser","forgottenPswModal","selectedService","nonce","codeChallenge","CryptoJS","SHA256","enc","Base64","authorization_endpoint","scopes","win","interval","setInterval","clearInterval","data2","user_icon","ForgottenPswDialog","catch","sendEmail","tryConnectionModal_html_1","mail_account","use_for_system_mails","replyto_list_array","saveMailAccount","editPassword","$modalInstancee","tryConnection","tests","validPassword","pass","test","savePassword","update_password","mailTo","gridOptionsMailAccounts","mail_accounts_edit_html_1","checkedFile","saveTemplate","loadAttachments","attachmentsStela","selectMailings","short_title","mailingId","mailingsTypes","documentsIds","forEvents","loadMailsAccounts","mailing_type_id","is_blocked","FK_templates_tl_templates","saveMailing","uploadAttachment","showOrNotMailAccounts","showMailsAccounts","mailingTemplatesModal_html_1","mailings_edit_html_1","show_title","allowAutomaticMailing","loadSelectMailings","gridOptionMailings","saveMailingId","searchNotifications","deleteInternalDialog","goToNotificationList","addFromTemplate","windowClass","mailing_type","mailingsTypes_list_html_1","mailingsTypes_edit_html_1","stateParamsId","showReturnAutomatic","addMaterialFromEvent","isExternal","comeFromEvents","material","warehouse_last","is_returnable","reloadDataSelectTypeMaterials","resultados","typesMaterialsTree","gridOptionsMovements","saveMaterial","automaticMovement","changeCheckReturnable","is_returnable_automatic","gridOptionsInternalMaterials","gridOptionsExternalMaterials","deleteExternalDialog","IS_EXTERNAL","gridOptionsMaterialsReturn","returnMaterial","eventMaterialId","event_material_origin","isMaterialReturn","quantity_returned","material_type","selectMaterialsTypes","saveMaterialType","materials_types_edit_html_1","gridOptionsMaterialsTypes","addTypeMaterial","materials_types_list_html_1","editCode","saveMenu","menus_list_html_1","menus_edit_html_1","menus_items_edit_html_1","menu_item","FK_menus_items_permissions","selectParentMenu","selectPermissions","permissionNull","selectParentMenusItems","itemNull","saveMenuItem","permission_id","NotificationsModalMailInfo_html_1","changeEmailsModal_html_1","loadSent","gridSent","loadSending","gridSending","loadError","gridError","clearSearch","FK_notifications_to_notifications_emails","resend_parent_id","FK_notifications_attachments_notifications_emails","goToProfile","bool","changeEmails","notification_to_id","setActive","onResendAll","notificationsToIds","notificationsEmailInfo","onResend","email_old","changeMail","onChangeMail","notificationToId","selectStates","send_notification","invitation_template","notificationsOptionsModal_html_1","notificationsModalMail_html_1","staffsIds","usersIds","mailAccountId","mailAccountReply","program_template","parking_template","zone_template","menu_template","guest_location_template","list_guests_template","list_guests_proposal_template","guest_addresses_template","guests_space_plan_template","full_space_plan_template","accreditation_template","template_tl_id","endLoadTemplate","groupTree","locationListResult","levelString","groupsListResult","program_emails","moreInfo","notifications_by_person_edit_html_1","showEventCombo","states","notifications_by_person_list_html_1","PassbookNewFieldModal_html_1","passbook","primary_field","extra_fields","background_color","barcode_text","passbook_types","configurePassbooksFields","gridExtraFields","located_in_gps_only","passbookType","barcode_type","expiration_date","strip_image","icon1","showicon1","icon2","showicon2","icon3","showicon3","showLogo","imageElement","selecticon","num","file_icon1","file_icon2","file_icon3","selectLogo","logoElement","file_logo","geticon","getLogo","removeicon","removeLogo","uploadicons","manageicons","manageLogo","uploadLogo","addField","removeField","testPassbook","savePassbook","modalSelect","newFieldTitle","field_order","passbooks_list_html_1","passbooks_edit_html_1","goToEvent","FK_events_guests_events","PersonPositionAddressModal_html_1","PersonPositionContactModal_html_1","AllowedUsersModal_html_1","is_duplicate","loadCompany","private_people_enabled","languageDefault","selectLanguages","checkIfPositionIsVisible","is_historic","person_groups","active","person_groups_militar","checkPositionVisibility","personDefault","selectedTreatment","GetAllowedUsers","allowedUsers","allowDelete","allowDiscard","stateParams_person_type","stateParams_id","personOptions","navigation","coming_from_duplicates","idxArrayPersonsResults","loadPerson","loadLanguages","loadAllPersons","couplePersons","selectedGender","loadPoliticalAffiliations","politicalAffiliations","loadContactTypes","contactTypes","loadCountries","loadPersonsInformationsGroups","FK_persons_images","getGroupPath","parentsGroups","savePerson","newPips","Information_groups_values_persons","createPerson","noneAllowedDialogCheck","isAuthority","showActiveGroups","FK_persons_contacts_persons","FK_persons_private_fields_persons","FK_persons_addresses_persons","FK_persons_political_affiliations_persons","FK_persons_mails_persons","FK_persons_positions","setChangesNotSaved","allowedGroups","allPositionsPerson","color_group","getPositionsInstitutions","duplicate_of","getParent","duplicates","show_person_couple","birthdate","death_date","FK_information_groups_values_information_groups","getRGB","prepareDates","prop","gridPersonPositionAddresses","gridPersonPositionContactInfo","inlineEditItems","inlineEdit","enable","persons_position","positionName","groupName","groupPath","newPositionGroupId","is_custom_position_order","position_order_article_10","is_custom_position_order_article_10","positionEdited","FK_persons_positions_addresses_positions","FK_persons_positions_contacts_positions","editMode","isInlineEditEnabled","savePersonPosition","positionChange","saveInline","originalItem","invitation_emails","political_affiliation_id","FK_persons_political_affiliations_political_affiliations","political_affiliation_zone_id","FK_persons_political_affiliations_political_affiliations_zones","FK_persons_addresses_countries","contactType","person_contact_type_id","FK_persons_contacts_persons_contacts_types","cancelInline","deleteInline","orig","positionAdded","addPersonPosition","param","related_term","addPoliticalAffiliationDialog","politicalAffiliation","addAddress","addContact","addMail","addNewPosition","FK_groups_tl_groups","editGroup","addPersonPositionsAddressDialog","personPositionAddress","personPositionAddressValue","FK_persons_positions_addresses_countries","person_positions_address","addPersonPositionsContactDialog","personPositionContactInfo","personPositionContactValue","FK_persons_positions_contacts_positions_contacts_types","person_positions_contacts","person_position_contact_type_id","goToDuplicate","goToParent","mergeMainData","mergeFrom","mergeTo","keysToMerge","keys","mergeKeys","person_position_list","institutionsIdList","FK_positions_institution","mergePositions","mergePoliticalAffiliations","affiliation","political_affiliations","mergeMails","mergeAddresses","mergeContacts","openAllowedUsers","printPDF","tableResultsExport","movePersonMailToPosition","person_mail_id","movePositionMailToPerson","position_mail_id","moveInstitutionMailToPosition","institution_mail_id","movePositionMailToInstitution","deletePersonMail","deletePositionEmails","deleteInstitutionEmails","movePersonAddressToPosition","person_address_id","movePositionAddressToPerson","address_id","moveInstitutionAddressToPosition","institution_address_id","movePositionAddressToInstitution","position_address_id","deletePersonAddress","deleteInstitutionAddress","movePositionContactToPerson","contact_id","movePersonContactToPosition","person_contact_id","moveInstitutionContactToPosition","institution_contact_id","movePositionContactToInstitution","position_contact_id","deletePersonContact","deletePositionContact","deleteInstitutionContact","deletePositionOrder","deletePersonPositionOrder","moveOrderToPosition","moveOrderToPersonPosition","is_private","setDefaultAllowedUser","entityId","sendMailing","listEmailsIds","loadTags","assignTags","removeTag","personPositionAddressModal","personPositionAddressOrigin","savePersonPositionAddress","personPositionContactModal","personPositionContactOrigin","personsPositionsContactsTypes","savePersonPositionContact","userToAdd","groupToAdd","allowedUsersSelect","allowedGroupsSelect","addAllowedUser","addAllowedGroup","removeAllowedUser","removeAllowedGroup","private_string","selectOptionsRegister","update_data","personFilter","is_death","positions_inactives","person_registered","get_duplicates","composeUiPopover","valuePopover","imported_duplicate_ext_id","contains","phone","allRowsResultIds","visibleIds","goToImportDuplicate","deleteSelected","DeleteDialog","PERSON_TYPE","SURNAME","LASTNAME","POSITION","STATE","LIST_POSITIONS_IDS","IS_ACTIVE","POSITIONS_INACTIVE","initImportCSV","convertToType","rowsToMerge","all_persons","add_persons_duplicates","id_list","old_type","new_type","mergeWithAuthority","arrayIds","importedId","authorityId","persons_list_html_1","persons_duplicates_list_html_1","personDuplicatesMergeModal_html_1","dni","show_hidden","duplicatesFilter","mergeGroup","firstRow","personsList","Set","unique","followers","results2","num_identification","$$treeLevel","duplicatesData","goToMerge","is_main","unmark","toggleHidden","hide_from_duplicates","changeMain","merge","dataToSend","mainPerson","moveAddressToPosition","moveContactToPosition","moveInvitationMailToPosition","moveProgramMailToPosition","moveAddressToPersonPosition","moveContactToPersonPosition","moveInvitationMailToPersonPosition","moveProgramMailToPersonPosition","deletePersonPositionAddress","deletePersonPositionContact","deletePersonPositionEmails","subtitle","information_group","frmPersonsInformationGroups","person_information_group_id","persons_information_groups_list_html_1","persons_information_groups_edit_html_1","person_treatment","savePersonsTreatment","gridOptionsPersonsTreatments","is_list","persons_treatments_list_html_1","persons_treatments_edit_html_1","political_affiliations_zones_modal_html_1","political_affiliation","gridZonesPolitical","frmPoliticalAffiliations","FK_political_affiliations_images","deleteZoneDialog","editZoneDialog","zones_availables","gridOptionsPoliticalAffiliations","political_affiliations_list_html_1","political_affiliations_edit_html_1","frmProviders","callbackFn","gridOptionsProviders","providers_list_html_1","providers_edit_html_1","push_notifications_list_html_1","push_notifications_edit_html_1","push_notification_type","push_notifications_types_list_html_1","push_notifications_types_edit_html_1","razor_views","gridOptionsRazorViews","reloadViews","razor_views_list_html_1","razor_views_edit_html_1","gifts_reports","showGiftsReport","selectGifts","generateReport","getFilterExternalDescription","externalFilters","footerCellTemplate","gifts_reports_list_html_1","persons_reports","tlf","historic_positions","showPersonsReport","selectGroups","gridOptionsPersons","showColumn","hideColumn","COLUMN","showAddress","showContact","showHistoric","persons_reports_list_html_1","xmltojson_1","reports_preview_value_html_1","onChangeHandler","customOnChange","jasper_parameters","reportJSON","report","parseJRXML","parameters","getParameters","regex","exec","lastIndex","match","groupIndex","getFirstParameter","qrSampleBase64","mergeCDATA","grokAttr","grokText","normalize","xmlns","namespaceKey","textKey","valueKey","attrKey","cdataKey","attrsAsObject","stripAttrPrefix","stripElemPrefix","childrenAsArray","parseString","xml","report0","jasperReport","pageStyle","pageWidth","pageHeight","leftMargin","topMargin","rightMargin","bottomMargin","parseFloat","elements","bands","editableParams","property","band","summary","pageHeader","columnHeader","detail","columnFooter","pageFooter","lastPageFooter","heightUsed","typeIdx","existsElements","reportElement","uuid","changeValue","backcolor","forecolor","textElement","font","textAlignment","verticalAlignment","expression","textFieldExpression","isBold","parameterExpression","imageExpression","backgroundSize","scaleImage","hAlign","vAlign","size_info","QRCode","has_thumbnail","scrollX","scrollY","base64","scopeParameter","image_style","enterValue","block","styles","readFile","typeFile","addEventListener","onClearImages","resume_report","showResumeReport","gridOptionsResume","resume_reports_list_html_1","task_report","task_status","late","showTasksReport","gridOptionsTasks","suppressRemoveSort","task_status_list","tasks_reports_list_html_1","selectCountries","dateEventRestaurant","menusGrid","gridMenusOffered","showgridMenusOffered","frmRestaurant","gridOptionsRestaurants","restaurants_list_html_1","gridOption","cancelUnsubscribe","date_end","rgpd_list_html_1","forms_1","forms_2","button_1","FormsModule","ReactiveFormsModule","ButtonModule","spaces_configure_html_1","space_id","frmSpaces","configureSpace","spaceInfo","thumb","ISOEngine","selectedElement","contextMenuPosition","mousedown","menuOptions","addElement","zoneNumberPosition","selectElement","setFloor","keydown","stepX","stepY","shiftKey","engine","removeElement","onDragSuccess","$data","tx","ty","checkPixelTransparent","img","getImageData","sceneClick","oElements","elementsFromPoint","elementsIds","reorderElementLocations","properties","distribution_system","locationsBySide","startPositionSide1","startPositionSide2","side1Step","side2Step","positionIdx","number","isPixelTransparent","scaleX","scaleY","generateGUUI","s4","scaled_w","scaled_h","openDesigner","addStaffFromEvent","saveStaff","FK_staff_images","gridOptionsInternalStaff","gridOptionsExternalStaff","staff_position","saveStaffPosition","gridOptionsStaffPositions","staff_positions_list_html_1","staff_positions_edit_html_1","forSearchByTags","selectTagTypes","onCancelTag","onAcceptTag","onAssignTags","onSearchByTags","tags_list_html_1","tags_edit_html_1","FK_tasks_users_users","show_gantt","show_groups","show_gantt_string","show_groups_string","FK_tasks_users_tasks","FK_tasks_tasks_status","addTaskGroup","selectTaskGroups","FK_tasks_tasks_types","saveTask","checkDeleteTask","tasks_modal_html_1","saveTaskStatus","gridOptionsTasksStatus","entityTypeTemplate","tasks_status_list_html_1","tasks_status_edit_html_1","task_types","saveTaskTypes","gridOptionsTasksTypes","tasks_types_list_html_1","tasks_types_edit_html_1","saveOrUpdate","copyElement","textContent","getElementsByTagName","removeChild","readFromClipboard","readText","gridOptionsTemplates","templates_list_html_1","templates_edit_html_1","update","update_list_html_1","user_group_id","user_group","users_groups_list_html_1","users_groups_edit_html_1","role","FK_roles_permissions_roles","permission_role","permissionsFromRoleBD","saveRole","frmRole","roles_permissionsToBd","role_id","FK_roles_permissions_permissions","roles","roles_list_html_1","roles_edit_html_1","addAuthenticatorModal_html_1","conected_user_id","uniqueName","FK_users_roles_users","FK_users_permissions_users","FK_asu_users","userRolesIds","userPermissionsIds","userAuthenticationServicesIds","userCredentialsIds","showQR","allowAddCredentials","user_expired","password2","gridOptionsPermissions","userPermission","gridOptionsRoles","userRole","gridOptionsAsu","userAsu","authentication_service_id","WebauthnCredentials","gridOptionsCredentials","userCredential","users_fk01","webauthn_enabled","FK_users_roles_roles","selectRoles","selectRole","selectPermission","authenticationServices","selectAuthenticationServices","selectAuthenticationService","serviceUsers","filterRoles","filterPermissions","filterAuthenticationServices","addRole","noExiste","user_role","deleteCredential","deleteRole","addPermission","user_permission","FK_users_permissions_permissions","deletePermission","addAuthenticationService","user_authentication_service","unique_name","uniqueNameWarning","FK_asu_authentication_services","deleteAuthenticationService","saveUser","frmUser","addAuthenticator","saveAuthenticator","addLicenseModal_html_1","uiGridExporterConstants","getLicenses","licenses","licencias","addLicense","exportToPDF","export_row_type","export_column_type","exporter","pdfExport","license","saveLicense","codedLicense","users_list_html_1","users_edit_html_1","frmWarehouses","gridOptionsWarehouses","warehouses_list_html_1","warehouses_edit_html_1","uiGrid","gridMenuCustomItems","ref","useExternalSorting","useExternalFiltering","useExternalPagination","resizeHeight","_h","registerEvent","customResizeHeight","pdfFilterDescription","exporterPdfCustomFormatter","pageMargins","columnsHeader","isFunction","fit","alignment","footer","pageCount","moment","columnDef","valor","internalFilterDescription","externalFilterDescription","sortDirection","getOptions","allData","selectAllVisibleRows","sortChanged","sortColumns","DESC","filterChanged","filterTimeout","newPage","pageValue","canvasHeightChanged","lastSizeCanvas","actualSizeCanvas","exporterAllDataFn","watchMe","modelNames","modelName","selectedLanguageId","modelBaseName","attributesString","att","required","modelIdx","tlIdx","$parsers","$formatters","elem","history","back","enter","ngModelCtrl","decimalCheck","$render","dateUTCString","dateUniversalString","propertiesSelected","filterOutExisting","sdk_1","savedDeferred","bee","config_email","grant_type","config_html","config_instance","jsonFile","htmlFile","getToken","getSpaceZones","event_space_zone_id","maleFemaleTemplate","propertyName","maleFemaleFilter","printModal_html_1","documentsModal_html_1","rowTypes","colTypes","loadAllDataIfNeeded","exportColumnHeaders","getColumnHeaders","exportColumnsTmp","exportData","prepareAsPdf","isIE","downloadPDF","exporterPdfFilename","formatRowAsPdf","formatFieldAsPdfString","returnVal","hourTemplate","linkTemplate","linkRef","linkId","field_name","tree_level","stateTaskTemplate","customStringTemplate","objectValues","separator","returnTemplate","customReplaceTemplate","separator1","separator2","language_code","loginService","shouldRefreshToken","rejection","httpError","pw","refreshPromise","transformUrlEncoded","setDefaultRequestParams","defered","RefreshToken","AccessToken","parsedService","finally","newLogin","processId","getAuthInfo","message_html_1","confirm_html_1","httpError_html_1","image_html_1","notificationsMail_html_1","pushNotification_html_1","isPlaceFreeByZone","isPlaceFree","increment","numPlaces","deleteGuestZone","zoneId","preferedPosition","treeMenusItems","$l1","pintarRecursivo","$actual","menuItemParent","resourcesItem","treeLanguagesItems","nombreModulo","itemId","itemNuevo","isParent","FK_resources_tl_resources","treeGroups","super_parent_id","auxmargin","blankBlockLevel","priorityText","preferred_order","groupItemParent","ccountryId","treeCountries","FK_countries_regions_countries","countryParent","treeIndicatorsItems","eventTasks","eventTaskId","treeEventTasks","hasTasks","otherGroup","eventTaskParent","typesMaterials","typeMaterialId","treeTypesMaterials","typeMaterial","typeMaterialParent","locationId","treeLocations","parent_location_id","locationParent","cmsCategoryId","treeCmsCategories","cms_category","cmsCategoryParent","treeEvents","eventParent","resume","tree","monitoring","children","tasksTree","treeTasks","taks","autoCheck","seconds","instrumentation_1","sdk_trace_web_1","auto_instrumentations_web_1","context_zone_1","WebTracerProvider","register","contextManager","ZoneContextManager","registerInstrumentations","instrumentations","getWebAutoInstrumentations","no_company_id","company_id_1","company_id_3","company_id_4","company_id_5","company_id_6","company_id_7","PLURAL_CATEGORY","opt_precision","vf","getDecimals","base","pow","getVF","DeferChip","isLoading","isFailed","Chips","DomUtil","linkFun","iElement","iAttrs","transcludefn","modelCtrl","modelCopy","$modelValue","deleteByValue","resultIndex","equals","isDeferFlow","hasOwnProperty","functionParam","funStr","openParenthesisIndex","closeParenthesisIndex","getParamKey","chips","addChip","updatedData","paramObj","deleteChip","deletedChip","chipNavigate","rootDiv","tmplStr","tmpl","node","nodeName","handleKeyDown","chipTmpls","focusOnChip","chipTemplates","activeElement","chipNavigator","$inject","controllerAs","ChipsController","setFocus","flag","removeClass","removeChip","contrl","clonedTranscludedContent","chipsCtrl","findScope","chip","callBack","deleteIt","levels","getCallBack","$index","utilObj","classes","classIndex","ChipControlLinkFun","ipNewOptions","ipDefaultOptions","ipGithubUrl","extendIconPicker","extended","deep","arguments","ipUserOptions","theButton","theCallback","ipConsoleError","ipConsoleLog","ipButtons","querySelectorAll","inputElement","iconpickerInput","previewElement","iconpickerPreview","getIconListXmlHttpRequest","buttonShowAll","userAgent","xmlHttp","XMLHttpRequest","setRequestHeader","onreadystatechange","readyState","responseText","appendIconListToBody","jsonData","icons","forObj","iconWrap","IconPickerModal","innerHTML","docBody","ipElement","display","ipHeight","offsetHeight","winHeight","liveScrollTop","documentElement","totalTopPos","classList","loadingElement","ltAnimate","ltRemove","parentNode","getElementsByClassName","removeIpElement","delay","eKeyCode","eCode","spaceOrBackspace","searchVal","firstIconsArea","searchResultArea","tempIcons","tempResults","noResultsText","noResultElm","eachIconEventListener","firstOrSearch","eachIconElm","inputElm","previewElm","iconClassName","getTagName","tagName","webpackContext","req","webpackContextResolve","__webpack_require__","__webpack_module_cache__","moduleId","cachedModule","loaded","__webpack_modules__","amdD","amdO","O","chunkIds","fn","notFulfilled","Infinity","fulfilled","definition","defineProperty","enumerable","g","globalThis","Function","Symbol","toStringTag","nmd","paths","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""}