@c8y/ngx-components 1011.0.7 → 1011.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/c8y-ngx-components-reports.umd.js +15 -2
- package/bundles/c8y-ngx-components-reports.umd.js.map +1 -1
- package/bundles/c8y-ngx-components-reports.umd.min.js +2 -2
- package/bundles/c8y-ngx-components-reports.umd.min.js.map +1 -1
- package/bundles/c8y-ngx-components.umd.js +2 -2
- package/bundles/c8y-ngx-components.umd.js.map +1 -1
- package/bundles/c8y-ngx-components.umd.min.js +1 -1
- package/bundles/c8y-ngx-components.umd.min.js.map +1 -1
- package/esm2015/core/range-display/range-display.component.js +3 -3
- package/esm2015/reports/reports.service.js +9 -3
- package/fesm2015/c8y-ngx-components-reports.js +8 -2
- package/fesm2015/c8y-ngx-components-reports.js.map +1 -1
- package/fesm2015/c8y-ngx-components.js +2 -2
- package/fesm2015/c8y-ngx-components.js.map +1 -1
- package/locales/es.po +499 -109
- package/locales/fr.po +462 -71
- package/locales/ja_JP.po +458 -68
- package/locales/ko.po +460 -70
- package/locales/nl.po +461 -70
- package/locales/pl.po +493 -101
- package/locales/pt_BR.po +469 -78
- package/locales/ru.po +477 -85
- package/locales/zh_CN.po +453 -63
- package/locales/zh_TW.po +453 -64
- package/package.json +2 -2
- package/reports/c8y-ngx-components-reports.metadata.json +1 -1
- package/reports/reports.service.d.ts +2 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports,require("@angular/core"),require("@c8y/ngx-components"),require("lodash-es"),require("@c8y/client"),require("@ngx-translate/core"),require("@angular/common"),require("ngx-bootstrap/modal"),require("ngx-bootstrap/dropdown"),require("ngx-bootstrap/tooltip"),require("angular"),require("@c8y/ng1-modules/core/bootstrap"),require("@angular/upgrade/static")):"function"==typeof define&&define.amd?define("@c8y/ngx-components/reports",["exports","@angular/core","@c8y/ngx-components","lodash-es","@c8y/client","@ngx-translate/core","@angular/common","ngx-bootstrap/modal","ngx-bootstrap/dropdown","ngx-bootstrap/tooltip","angular","@c8y/ng1-modules/core/bootstrap","@angular/upgrade/static"],n):n(((e="undefined"!=typeof globalThis?globalThis:e||self).c8y=e.c8y||{},e.c8y["ngx-components"]=e.c8y["ngx-components"]||{},e.c8y["ngx-components"].reports={}),e.ng.core,e.c8y["ngx-components"],e.lodashEs,e.client,e.core$1,e.ng.common,e.modal,e.dropdown,e.tooltip,e.angular,e.bootstrap,e.ng.upgrade.static)}(this,(function(e,n,t,o,a,i,s,
|
|
1
|
+
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports,require("@angular/core"),require("@c8y/ngx-components"),require("lodash-es"),require("@c8y/client"),require("@ngx-translate/core"),require("@angular/common"),require("ngx-bootstrap/modal"),require("ngx-bootstrap/dropdown"),require("ngx-bootstrap/tooltip"),require("angular"),require("@c8y/ng1-modules/core/bootstrap"),require("@angular/upgrade/static")):"function"==typeof define&&define.amd?define("@c8y/ngx-components/reports",["exports","@angular/core","@c8y/ngx-components","lodash-es","@c8y/client","@ngx-translate/core","@angular/common","ngx-bootstrap/modal","ngx-bootstrap/dropdown","ngx-bootstrap/tooltip","angular","@c8y/ng1-modules/core/bootstrap","@angular/upgrade/static"],n):n(((e="undefined"!=typeof globalThis?globalThis:e||self).c8y=e.c8y||{},e.c8y["ngx-components"]=e.c8y["ngx-components"]||{},e.c8y["ngx-components"].reports={}),e.ng.core,e.c8y["ngx-components"],e.lodashEs,e.client,e.core$1,e.ng.common,e.modal,e.dropdown,e.tooltip,e.angular,e.bootstrap,e.ng.upgrade.static)}(this,(function(e,n,t,o,a,i,r,s,l,c,u,d,h){"use strict";function p(e){if(e&&e.__esModule)return e;var n=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var o=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(n,t,o.get?o:{enumerable:!0,get:function(){return e[t]}})}})),n.default=e,Object.freeze(n)}var m=p(u);
|
|
2
2
|
/*! *****************************************************************************
|
|
3
3
|
Copyright (c) Microsoft Corporation.
|
|
4
4
|
|
|
@@ -12,5 +12,5 @@
|
|
|
12
12
|
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
13
13
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
14
14
|
PERFORMANCE OF THIS SOFTWARE.
|
|
15
|
-
***************************************************************************** */function v(e,n,t,o){return new(t||(t=Promise))((function(a,i){function s(e){try{l(o.next(e))}catch(e){i(e)}}function r(e){try{l(o.throw(e))}catch(e){i(e)}}function l(e){var n;e.done?a(e.value):(n=e.value,n instanceof t?n:new t((function(e){e(n)}))).then(s,r)}l((o=o.apply(e,n||[])).next())}))}function f(e,n){var t,o,a,i,s={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return i={next:r(0),throw:r(1),return:r(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function r(i){return function(r){return function(i){if(t)throw new TypeError("Generator is already executing.");for(;s;)try{if(t=1,o&&(a=2&i[0]?o.return:i[0]?o.throw||((a=o.return)&&a.call(o),0):o.next)&&!(a=a.call(o,i[1])).done)return a;switch(o=0,a&&(i=[2&i[0],a.value]),i[0]){case 0:case 1:a=i;break;case 4:return s.label++,{value:i[1],done:!1};case 5:s.label++,o=i[1],i=[0];continue;case 7:i=s.ops.pop(),s.trys.pop();continue;default:if(!(a=s.trys,(a=a.length>0&&a[a.length-1])||6!==i[0]&&2!==i[0])){s=0;continue}if(3===i[0]&&(!a||i[1]>a[0]&&i[1]<a[3])){s.label=i[1];break}if(6===i[0]&&s.label<a[1]){s.label=a[1],a=i;break}if(a&&s.label<a[2]){s.label=a[2],s.ops.push(i);break}a[2]&&s.ops.pop(),s.trys.pop();continue}i=n.call(e,s)}catch(e){i=[6,e],o=0}finally{t=a=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,r])}}}var g,y,b=function(){function e(e,n,t){this.alertService=e,this.inventoryService=n,this.client=t,this.microserviceUrl="/service/reporting/schedule",this.headers={"Content-Type":"application/json"}}return e.prototype.getExport=function(e){return v(this,void 0,void 0,(function(){var n,t,o,a;return f(this,(function(i){switch(i.label){case 0:return[4,this.inventoryService.detail(e)];case 1:return t=i.sent(),o=t.data,200!==(a=t.res).status?this.alertService.addServerFailure({data:o,res:a}):n=o||{},[2,n]}}))}))},e.prototype.getScheduleList=function(e){return v(this,void 0,void 0,(function(){var n;return f(this,(function(t){switch(t.label){case 0:return[4,this.getExport(e)];case 1:return n=t.sent(),[2,this.extractScheduleListFromExport(n)]}}))}))},e.prototype.extractScheduleListFromExport=function(e){var n;return e&&(n=e.c8y_ScheduleConfiguration?e.c8y_ScheduleConfiguration:[]),o.orderBy(n,["timestamp"],["desc"])},e.prototype.addSchedule=function(e,n){return v(this,void 0,void 0,(function(){return f(this,(function(t){switch(t.label){case 0:return[4,this.updateSchedules(n,[],[e])];case 1:return[2,t.sent()]}}))}))},e.prototype.updateSchedule=function(e,n,t){return v(this,void 0,void 0,(function(){return f(this,(function(o){switch(o.label){case 0:return[4,this.updateSchedules(t,[e],[n])];case 1:return[2,o.sent()]}}))}))},e.prototype.updateSchedules=function(e,n,t){return void 0===n&&(n=[]),void 0===t&&(t=[]),v(this,void 0,void 0,(function(){var a,i,s,r,l,c;return f(this,(function(u){switch(u.label){case 0:return a=!1,[4,this.getExport(e)];case 1:return i=u.sent(),s=this.extractScheduleListFromExport(i),o.remove(s,(function(e){return o.some(n,(function(n){return o.isEqual(e,n)}))})),s.push.apply(s,t),i.c8y_ScheduleConfiguration=s,[4,this.inventoryService.update(i)];case 2:return r=u.sent(),l=r.data,200!==(c=r.res).status?[3,4]:[4,this.reschedule(e)];case 3:return a=u.sent(),[3,5];case 4:this.alertService.addServerFailure({data:l,res:c}),u.label=5;case 5:return[2,a]}}))}))},e.prototype.reschedule=function(e){return v(this,void 0,void 0,(function(){var n;return f(this,(function(t){switch(t.label){case 0:return n={method:"PUT",headers:this.headers},[4,this.client.fetch(this.microserviceUrl+"/"+e,n)];case 1:return[2,200===t.sent().status]}}))}))},e.prototype.deleteSchedule=function(e,n){return v(this,void 0,void 0,(function(){return f(this,(function(t){switch(t.label){case 0:return[4,this.updateSchedules(n,[e],[])];case 1:return[2,t.sent()]}}))}))},e}();b.decorators=[{type:n.Injectable}],b.ctorParameters=function(){return[{type:t.AlertService},{type:a.InventoryService},{type:a.FetchClient}]},e.ActionType=void 0,(g=e.ActionType||(e.ActionType={})).CREATE="create",g.EDIT="edit",g.DUPLICATE="duplicate",e.Base=void 0,(y=e.Base||(e.Base={}))[y.Initial=1]="Initial",y[y.Hour=2]="Hour",y[y.Day=3]="Day",y[y.Week=4]="Week",y[y.Month=5]="Month",y[y.Year=6]="Year";var S=function(){function n(e){this.translateService=e,this.daysOfWeekPosix=[],this.daysOfMonth=[{value:"1",label:"1."},{value:"2",label:"2."},{value:"3",label:"3."},{value:"4",label:"4."},{value:"5",label:"5."},{value:"6",label:"6."},{value:"7",label:"7."},{value:"8",label:"8."},{value:"9",label:"9."},{value:"10",label:"10."},{value:"11",label:"11."},{value:"12",label:"12."},{value:"13",label:"13."},{value:"14",label:"14."},{value:"15",label:"15."},{value:"16",label:"16."},{value:"17",label:"17."},{value:"18",label:"18."},{value:"19",label:"19."},{value:"20",label:"20."},{value:"21",label:"21."},{value:"22",label:"22."},{value:"23",label:"23."},{value:"24",label:"24."},{value:"25",label:"25."},{value:"26",label:"26."},{value:"27",label:"27."},{value:"28",label:"28."},{value:"29",label:"29."},{value:"30",label:"30."},{value:"31",label:"31."}],this.months=[],this.hours=[],this.minutes=[],this.intervals=[{value:2,label:t.gettext("Hour")},{value:3,label:t.gettext("Day")},{value:4,label:t.gettext("Week")},{value:5,label:t.gettext("Month")},{value:6,label:t.gettext("Year")}];for(var n=0;n<24;n++)this.hours.push({value:n.toString(),label:""+n});for(n=0;n<60;n+=5)this.minutes.push({value:n.toString(),label:""+n});for(n=0;n<7;n++)this.daysOfWeekPosix.push({value:n.toString(),label:this.getWeekDayName({weekday:n})});for(n=1;n<13;n++)this.months.push({value:n.toString(),label:this.getMonthName({month:n})})}return n.prototype.generateCron=function(e){var n="";return n=e.minute?""+e.minute:"*",n+=e.hour?" "+e.hour:" *",n+=e.day?" "+e.day:" *",n+=e.month?" "+e.month:" *",n+=e.weekday?" "+e.weekday:" *"},n.prototype.generateCronConfig=function(e){var n=e.split(/\s+/);return{minute:n[0],hour:n[1],day:n[2],month:n[3],weekday:n[4]}},n.prototype.getBase=function(n){var t=e.Base.Initial;return"*"!==n.minute&&"*"===n.hour&&"*"===n.day&&"*"===n.month&&"*"===n.weekday?t=e.Base.Hour:"*"!==n.minute&&"*"!==n.hour&&"*"===n.day&&"*"===n.month&&"*"===n.weekday?t=e.Base.Day:"*"!==n.minute&&"*"!==n.hour&&"*"===n.day&&"*"===n.month&&"*"!==n.weekday?t=e.Base.Week:"*"!==n.minute&&"*"!==n.hour&&"*"!==n.day&&"*"===n.month&&"*"===n.weekday?t=e.Base.Month:"*"!==n.minute&&"*"!==n.hour&&"*"!==n.day&&"*"!==n.month&&"*"===n.weekday&&(t=e.Base.Year),t},n.prototype.validateModels=function(n,t){var o;switch(n){case e.Base.Initial:o=!1;break;case e.Base.Hour:o="*"!==t.minute;break;case e.Base.Day:o="*"!==t.minute&&"*"!==t.hour;break;case e.Base.Week:o="*"!==t.minute&&"*"!==t.hour&&"*"!==t.weekday;break;case e.Base.Month:o="*"!==t.minute&&"*"!==t.hour&&"*"!==t.day;break;case e.Base.Year:o="*"!==t.minute&&"*"!==t.hour&&"*"!==t.day&&"*"!==t.month;break;default:o=!1}return o},n.prototype.clearNextModels=function(n,t){n===e.Base.Initial?(t.minute="*",t.hour="*",t.day="*",t.month="*",t.weekday="*"):n===e.Base.Hour?(t.minute="*"===t.minute?this.minutes[0].value:t.minute,t.hour="*",t.day="*",t.month="*",t.weekday="*"):n===e.Base.Day?(t.minute="*"===t.minute?this.minutes[0].value:t.minute,t.hour="*"===t.hour?this.hours[0].value:t.hour,t.day="*",t.month="*",t.weekday="*"):n===e.Base.Week?(t.minute="*"===t.minute?this.minutes[0].value:t.minute,t.hour="*"===t.hour?this.hours[0].value:t.hour,t.day="*",t.month="*",t.weekday="*"===t.weekday||"?"===t.weekday?this.daysOfWeekPosix[0].value:t.weekday):n===e.Base.Month?(t.minute="*"===t.minute?this.minutes[0].value:t.minute,t.hour="*"===t.hour?this.hours[0].value:t.hour,t.day="*"===t.day?this.daysOfMonth[0].value:t.day,t.month="*",t.weekday="*"):n===e.Base.Year&&(t.minute="*"===t.minute?this.minutes[0].value:t.minute,t.hour="*"===t.hour?this.hours[0].value:t.hour,t.day="*"===t.day?this.daysOfMonth[0].value:t.day,t.month="*"===t.month?this.months[0].value:t.month,t.weekday="*")},n.prototype.getWeekDayName=function(e){var n=new Date(0),t=n.getDate()+3;return n.setDate(t+parseInt(e.weekday,10)),s.formatDate(n,"EEEE",this.translateService.currentLang)},n.prototype.getMonthDayName=function(e){var n="";return this.daysOfMonth.forEach((function(t){t.value===e.day&&(n=t.label)})),n},n.prototype.getMonthName=function(e){var n=new Date(0);return n.setMonth(parseInt(e.month,10)-1),s.formatDate(n,"LLLL",this.translateService.currentLang)},n}();S.decorators=[{type:n.Injectable}],S.ctorParameters=function(){return[{type:i.TranslateService}]};var x=function(){function a(o,a,i){this.reportsService=o,this.modalRef=a,this.cronService=i,this.emitter=new n.EventEmitter,this.ActionType=e.ActionType,this.cronExpression="* * * * *",this.validCron=!1,this.emitterPayload={success:!1,message:"",schedule:{timestamp:void 0,emailConfig:void 0,cronConfig:void 0}},this.placeholdersInfo=t.gettext("Available placeholders: {tenant-domain}, {host}, {binaryId}. Whole link to downloadable file is: {tenant-domain}/inventory/binaries/{binaryId}.")}return a.prototype.ngOnInit=function(){this.oldSchedule=o.cloneDeep(this.schedule),this.populateEmailFieldsFromSchedule(this.schedule),this.cronExpression=this.cronService.generateCron(this.schedule.cronConfig),this.validCron=this.cronService.validateModels(this.cronService.getBase(this.schedule.cronConfig),this.schedule.cronConfig)},a.prototype.populateEmailFieldsFromSchedule=function(e){e.emailConfig.to&&e.emailConfig.to.length&&(this.emailTo=e.emailConfig.to.toString()),e.emailConfig.cc&&e.emailConfig.cc.length&&(this.emailCc=e.emailConfig.cc.toString()),e.emailConfig.bcc&&e.emailConfig.bcc.length&&(this.emailBcc=e.emailConfig.bcc.toString()),e.emailConfig.replyTo&&(this.emailReplyTo=e.emailConfig.replyTo),e.emailConfig.subject&&(this.emailSubject=e.emailConfig.subject),e.emailConfig.text&&(this.emailText=e.emailConfig.text)},a.prototype.save=function(){if(this.populateScheduleFromCronExpression(),this.populateScheduleFromEmailFields(),this.actionType===e.ActionType.CREATE||this.actionType===e.ActionType.DUPLICATE){var n=(new Date).getTime();this.schedule.timestamp=n}this.emitterPayload.success=!0,this.emitterPayload.schedule=this.schedule,this.modalRef.hide(),this.emitter.emit(this.emitterPayload)},a.prototype.cancel=function(){this.modalRef.hide()},a.prototype.getCron=function(e){this.validCron=e.valid,e.valid&&(this.cronExpression=e.cron)},a.prototype.populateScheduleFromCronExpression=function(){this.schedule.cronConfig=this.cronService.generateCronConfig(this.cronExpression)},a.prototype.convertStringOfEmailsToArray=function(e){var n=[];e&&e.split(",").forEach((function(e){e&&n.push(e)}));return n},a.prototype.populateScheduleFromEmailFields=function(){this.schedule.emailConfig.to=this.emailTo?this.convertStringOfEmailsToArray(this.emailTo):null,this.schedule.emailConfig.cc=this.emailCc?this.convertStringOfEmailsToArray(this.emailCc):null,this.schedule.emailConfig.bcc=this.emailBcc?this.convertStringOfEmailsToArray(this.emailBcc):null,this.schedule.emailConfig.replyTo=this.emailReplyTo,this.schedule.emailConfig.subject=this.emailSubject,this.schedule.emailConfig.text=this.emailText},a}();x.decorators=[{type:n.Component,args:[{selector:"schedule-modal",template:'<div class="modal-header text-center bg-primary">\n <header class="text-white">\n <div style="font-size: 62px;">\n <span c8yIcon="c8y-report"></span>\n </div>\n <h4 class="text-uppercase">\n <span *ngIf="actionType === ActionType.CREATE" translate>New export schedule</span>\n <span *ngIf="actionType === ActionType.EDIT" translate>Edit export schedule</span>\n <span *ngIf="actionType === ActionType.DUPLICATE" translate>Duplicate export schedule</span>\n </h4>\n </header>\n</div>\n\n<div class="modal-body">\n <p class="lead text-center p-t-24 m-b-0" translate>On schedule send export via email</p>\n</div>\n<div class="modal-inner-scroll smart-rule-control">\n <form #scheduleForm="ngForm" class="edit-smart-rule-details">\n <div class="list-group">\n <div class="list-group-item bg-gray-white">\n <div class="smart-list-icon-label">\n <span class="dot bg-primary-light m-r-8">1</span>\n <strong translate>Frequency</strong>\n </div>\n <div class="p-t-16">\n <div class="form-group">\n <cron [cronIn]="cronExpression" (emitter)="getCron($event)" name="cron"></cron>\n </div>\n </div>\n </div>\n <div class="list-group-item">\n <div class="smart-list-icon-label">\n <span class="dot bg-primary-light m-r-8">2</span>\n <div class="d-inline-block">\n <strong translate>Send email</strong>\n <p class="help-block text-muted small p-absolute">\n <i class="text-info m-r-4 text-14" c8yIcon="info-circle"></i>\n <span translate\n >Enter one or more valid email addresses, separated with a comma.</span\n >\n </p>\n </div>\n </div>\n <div class="p-t-24">\n <div class="form-group">\n <label class="control-label" translate>Send to</label>\n <c8y-form-group>\n <input\n emails\n type="text"\n class="form-control"\n name="to"\n [(ngModel)]="emailTo"\n placeholder="{{\n \'e.g. joe.doe@example.com,john.smith@example.com`LOCALIZE`\' | translate\n }}"\n required\n />\n </c8y-form-group>\n </div>\n\n <div class="form-group">\n <label class="control-label" translate>CC</label>\n <c8y-form-group>\n <input\n emails\n type="text"\n class="form-control span"\n name="cc"\n placeholder="{{\n \'e.g. joe.doe@example.com,john.smith@example.com`LOCALIZE`\' | translate\n }}"\n [(ngModel)]="emailCc"\n />\n </c8y-form-group>\n </div>\n\n <div class="form-group">\n <label class="control-label" translate>BCC</label>\n <c8y-form-group>\n <input\n emails\n type="text"\n class="form-control span"\n name="bcc"\n placeholder="{{\n \'e.g. joe.doe@example.com,john.smith@example.com`LOCALIZE`\' | translate\n }}"\n [(ngModel)]="emailBcc"\n />\n </c8y-form-group>\n </div>\n\n <div class="form-group">\n <label class="control-label" translate>Reply to (single email address)</label>\n <c8y-form-group>\n <input\n email\n type="text"\n class="form-control span"\n name="replyTo"\n placeholder="{{ \'e.g. joe.doe@example.com`LOCALIZE`\' | translate }}"\n [(ngModel)]="emailReplyTo"\n />\n </c8y-form-group>\n </div>\n\n <div class="form-group">\n <label class="control-label" translate>Subject</label>\n <c8y-form-group>\n <input\n type="text"\n class="form-control span"\n name="subject"\n [(ngModel)]="emailSubject"\n placeholder="{{ \'e.g. Daily report\' | translate }}"\n required\n />\n </c8y-form-group>\n </div>\n\n <div class="form-group">\n <label class="control-label" translate>Message</label>\n <c8y-form-group>\n <textarea\n class="form-control"\n name="text"\n [(ngModel)]="emailText"\n placeholder="{{ \'Message\' | translate }}"\n rows="4"\n required\n ></textarea>\n <p class="help-block text-muted">\n {{ placeholdersInfo | translate }}\n </p>\n </c8y-form-group>\n </div>\n </div>\n </div>\n </div>\n </form>\n</div>\n\n<div class="modal-footer">\n <button class="btn btn-default" (click)="cancel()" title="{{ \'Cancel\' | translate }}">\n {{ \'Cancel\' | translate }}\n </button>\n <button\n class="btn btn-primary"\n (click)="save()"\n [disabled]="!validCron || !scheduleForm.form.valid"\n >\n <span>\n <span *ngIf="actionType === ActionType.CREATE" title="{{ \'Create\' | translate }}">\n {{ \'Create\' | translate }}\n </span>\n <span *ngIf="actionType === ActionType.EDIT" title="{{ \'Save\' | translate }}">\n {{ \'Save\' | translate }}\n </span>\n <span *ngIf="actionType === ActionType.DUPLICATE" title="{{ \'Duplicate\' | translate }}">\n {{ \'Duplicate\' | translate }}\n </span>\n </span>\n </button>\n</div>\n'}]}],x.ctorParameters=function(){return[{type:b},{type:r.BsModalRef},{type:S}]},x.propDecorators={emitter:[{type:n.Output}]};var C=function(){function a(e,o,a,i,s,r){this.reportsService=e,this.bsModalService=o,this.cronService=a,this.translateService=i,this.userService=s,this.optionsService=r,this.onSchedulesUpdate=new n.EventEmitter,this.scheduleList=[],this.initialSchedule={timestamp:null,emailConfig:{to:[],cc:[],bcc:[],replyTo:"",text:"",subject:""},cronConfig:{minute:"0",hour:"0",day:"1",month:"1",weekday:"?"}},this.listClass="interact-list",this.sortReverse=!1,this.isOpen={},this.isEditMenuOpen=!1,this.currentUserEmail="",this.hasRequiredRole=!1,this.defaultExportEmailTemplate=this.translateService.instant(t.gettext("File with exported data can be downloaded from {tenant-domain}/inventory/binaries/{binaryId}.")),this.loadingStatus={inProgress:!1,done:!1,error:!1}}return Object.defineProperty(a.prototype,"exportId",{set:function(e){this._exportId=e},enumerable:!1,configurable:!0}),a.prototype.ngOnInit=function(){return v(this,void 0,void 0,(function(){var e,n,o,a;return f(this,(function(i){switch(i.label){case 0:return e=this,[4,this.checkRole()];case 1:return e.hasRequiredRole=i.sent(),this.getScheduleList(!0),[4,this.getCurrentUserEmail()];case 2:return n=i.sent(),o=this.initialSchedule.emailConfig,[4,this.optionsService.getTenantOption("configuration","export.data.mail.text",this.defaultExportEmailTemplate)];case 3:return o.text=i.sent(),this.initialSchedule.emailConfig.to=n,a=this,[4,this.reportsService.getExport(this._exportId)];case 4:return a.exp=i.sent(),this.initialSchedule.emailConfig.subject=this.translateService.instant(t.gettext('Export of "{{expName}}"'),{expName:this.exp.name}),[2]}}))}))},a.prototype.ngOnChanges=function(){this.translateButtonTitles()},a.prototype.translateButtonTitles=function(){this.buttonLabels={edit:this.translateService.instant(t.gettext("Edit schedule")),editNoPermission:this.translateService.instant(t.gettext("Edit schedule - no permissions")),duplicate:this.translateService.instant(t.gettext("Duplicate schedule")),duplicateNoPermission:this.translateService.instant(t.gettext("Duplicate schedule - no permissions")),delete:this.translateService.instant(t.gettext("Delete schedule")),deleteNoPermission:this.translateService.instant(t.gettext("Delete schedule - no permissions"))}},a.prototype.getCurrentUserEmail=function(){return v(this,void 0,void 0,(function(){var e;return f(this,(function(n){switch(n.label){case 0:return[4,this.userService.current()];case 1:return[2,(e=n.sent().data)&&e.email?[e.email]:[]]}}))}))},a.prototype.checkRole=function(){return v(this,void 0,void 0,(function(){var e;return f(this,(function(n){switch(n.label){case 0:return[4,this.userService.current()];case 1:return e=n.sent().data,"ROLE_SCHEDULE_REPORT_ADMIN",[2,this.userService.hasRole(e,"ROLE_SCHEDULE_REPORT_ADMIN")]}}))}))},a.prototype.getScheduleList=function(e){return v(this,void 0,void 0,(function(){var n;return f(this,(function(t){switch(t.label){case 0:return e&&(this.loadingStatus.inProgress=!0),n=this,[4,this.reportsService.getScheduleList(this._exportId)];case 1:return n.scheduleList=t.sent(),e&&(this.loadingStatus.inProgress=!1),[2]}}))}))},a.prototype.addSchedule=function(){this.openAddEditModal(this._exportId,this.initialSchedule,e.ActionType.CREATE)},a.prototype.editSchedule=function(n,t,o){this.hasRequiredRole&&(o.preventDefault(),this.openAddEditModal(this._exportId,n,e.ActionType.EDIT,t))},a.prototype.duplicateSchedule=function(n,t){t.preventDefault(),this.openAddEditModal(this._exportId,n,e.ActionType.DUPLICATE)},a.prototype.openAddEditModal=function(e,n,t,a){var i=this,s={class:"modal-sm",initialState:{actionType:t,exportId:e,schedule:o.cloneDeep(n)}};this.modalRef=this.bsModalService.show(x,s),this.modalRef.content.emitter.subscribe((function(e){return i.getMessageFromModal(e,a)}))},a.prototype.getMessageFromModal=function(e,n){e.success&&(void 0!==n?this.scheduleList[n]=e.schedule:this.scheduleList.push(e.schedule),this.onSchedulesUpdate.emit(this.scheduleList))},a.prototype.removeSchedule=function(e,n,t){t.preventDefault(),this.scheduleList.splice(n,1),this.onSchedulesUpdate.emit(this.scheduleList)},a}();C.decorators=[{type:n.Component,args:[{selector:"export-schedules",template:'<div>\n <div *ngIf="loadingStatus.inProgress" class="flex-row">\n <c8y-loading></c8y-loading>\n <span translate>Retrieving schedules…</span>\n </div>\n\n <div *ngIf="!loadingStatus.inProgress && loadingStatus.done && loadingStatus.error">\n <div class="alert alert-warning max-width-100" translate>\n Could not load schedules list.\n </div>\n </div>\n\n <div *ngIf="!loadingStatus.inProgress && !loadingStatus.done && !loadingStatus.error">\n <div class="c8y-empty-state text-center max-width-100" *ngIf="!scheduleList.length">\n <h1 c8yIcon="c8y-report" class="c8y-icon-duocolor"></h1>\n <h3 translate>No export schedules defined.</h3>\n </div>\n\n <div class="c8y-list__group" *ngIf="scheduleList.length">\n <div class="c8y-list__item hidden-xs">\n <div class="c8y-list__item__block">\n <div class="c8y-list__item__icon">\n <i class="p-l-24"></i>\n </div>\n <div class="c8y-list__item__body">\n <div class="flex-row">\n <div class="col-sm-6">\n <label class="m-0">\n {{ \'Description\' | translate }}\n </label>\n </div>\n <div class="col-sm-6 m-r-40">\n <label class="m-0">\n {{ \'Frequency\' | translate }}\n </label>\n </div>\n </div>\n </div>\n <span></span>\n </div>\n </div>\n\n <div\n class="c8y-list__item flex-row pointer"\n *ngFor="let schedule of scheduleList; index as i"\n (click)="editSchedule(schedule, i, $event)"\n >\n <div class="c8y-list__item__block">\n <div class="c8y-list__item__icon">\n <i c8yIcon="c8y-report" class="c8y-icon-duocolor"></i>\n </div>\n <div class="c8y-list__item__body flex-row">\n <div class="col-sm-6 col-xs-6">\n <div class="text-truncate" title="{{ schedule.emailConfig.subject }}">\n {{ schedule.emailConfig.subject }}\n </div>\n </div>\n <div class="col-sm-6 col-xs-6">\n <div class="flex-row a-i-baseline">\n <i c8yIcon="calendar" class="text-muted m-r-4"></i>\n <span class="smart-rule-information">\n <span\n *ngIf="cronService.getBase(schedule.cronConfig) === 2"\n ngNonBindable\n translate\n [translateParams]="{ minutes: schedule.cronConfig.minute | number: \'2.0-0\' }"\n >\n Hourly: {{ minutes }} minute(s) past the hour.\n </span>\n <span\n *ngIf="cronService.getBase(schedule.cronConfig) === 3"\n ngNonBindable\n translate\n [translateParams]="{\n hour: schedule.cronConfig.hour | number: \'2.0-0\',\n minutes: schedule.cronConfig.minute | number: \'2.0-0\'\n }"\n >\n Daily: at {{ hour }}:{{ minutes }}.\n </span>\n <span\n *ngIf="cronService.getBase(schedule.cronConfig) === 4"\n ngNonBindable\n translate\n [translateParams]="{\n weekDay: cronService.getWeekDayName(schedule.cronConfig),\n hour: schedule.cronConfig.hour | number: \'2.0-0\',\n minutes: schedule.cronConfig.minute | number: \'2.0-0\'\n }"\n >\n Weekly: {{ weekDay }}, at {{ hour }}:{{ minutes }}.\n </span>\n <span\n *ngIf="cronService.getBase(schedule.cronConfig) === 5"\n ngNonBindable\n translate\n [translateParams]="{\n monthDay: cronService.getMonthDayName(schedule.cronConfig),\n hour: schedule.cronConfig.hour | number: \'2.0-0\',\n minutes: schedule.cronConfig.minute | number: \'2.0-0\'\n }"\n >\n Monthly: {{ monthDay }} day of the month, at {{ hour }}:{{ minutes }}.\n </span>\n <span\n *ngIf="cronService.getBase(schedule.cronConfig) === 6"\n ngNonBindable\n translate\n [translateParams]="{\n month: cronService.getMonthName(schedule.cronConfig),\n monthDay: cronService.getMonthDayName(schedule.cronConfig),\n hour: schedule.cronConfig.hour | number: \'2.0-0\',\n minutes: schedule.cronConfig.minute | number: \'2.0-0\'\n }"\n >\n Yearly: {{ month }}, {{ monthDay }} day of the month, at {{ hour }}:{{\n minutes\n }}.\n </span>\n </span>\n </div>\n </div>\n </div>\n <div class="c8y-list__item__actions" (click)="$event.stopPropagation()">\n <div class="settings dropdown" dropdown>\n <button\n class="dropdown-toggle c8y-dropdown"\n dropdownToggle\n aria-haspopup="true"\n aria-expanded="false"\n title="{{ \'Actions\' | translate }}"\n >\n <i [c8yIcon]="\'ellipsis-v\'"></i>\n </button>\n <ul class="dropdown-menu dropdown-menu-right" *dropdownMenu>\n <li role="menuitem">\n <button\n [title]="hasRequiredRole ? buttonLabels.edit : buttonLabels.editNoPermission"\n (click)="editSchedule(schedule, i, $event)"\n [disabled]="!hasRequiredRole"\n >\n <i [c8yIcon]="\'pencil\'"></i> {{ \'Edit\' | translate }}\n </button>\n </li>\n <li role="menuitem">\n <button\n [title]="\n hasRequiredRole ? buttonLabels.duplicate : buttonLabels.duplicateNoPermission\n "\n (click)="duplicateSchedule(schedule, $event)"\n [disabled]="!hasRequiredRole"\n >\n <i [c8yIcon]="\'copy\'"></i> {{ \'Duplicate\' | translate }}\n </button>\n </li>\n <li role="menuitem">\n <button\n [title]="\n hasRequiredRole ? buttonLabels.delete : buttonLabels.deleteNoPermission\n "\n (click)="removeSchedule(schedule, i, $event)"\n [disabled]="!hasRequiredRole"\n >\n <i [c8yIcon]="\'trash\'"></i> {{ \'Delete\' | translate }}\n </button>\n </li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class="alert alert-warning max-width-100" *ngIf="!hasRequiredRole" role="alert" translate>\n You don\'t have the permission required to schedule exports.\n </div>\n <button\n type="button"\n class="btn-add-block m-t-16"\n title="{{ \'Add schedule\' | translate }}"\n (click)="addSchedule()"\n [disabled]="!hasRequiredRole"\n >\n <i [c8yIcon]="\'plus-circle\'"></i>\n {{ \'Add schedule\' | translate }}\n </button>\n</div>\n'}]}],C.ctorParameters=function(){return[{type:b},{type:r.BsModalService},{type:S},{type:i.TranslateService},{type:a.UserService},{type:t.OptionsService}]},C.propDecorators={exportId:[{type:n.Input}],onSchedulesUpdate:[{type:n.Output}]};var w=function(){function t(t){this.cronService=t,this.emitter=new n.EventEmitter,this.emittedCron={valid:!1,cron:""},this.base=e.Base.Initial}return t.prototype.ngOnInit=function(){this.daysOfWeekPosix=this.cronService.daysOfWeekPosix,this.daysOfMonth=this.cronService.daysOfMonth,this.months=this.cronService.months,this.hours=this.cronService.hours,this.minutes=this.cronService.minutes,this.intervals=this.cronService.intervals,this.cronConfig=this.cronService.generateCronConfig(this.cronIn),this.base=this.cronService.getBase(this.cronConfig)},t.prototype.onChangeSelect=function(){this.cronService.clearNextModels(this.base,this.cronConfig),this.emittedCron.valid=this.cronService.validateModels(this.base,this.cronConfig),this.emittedCron.cron=this.cronService.generateCron(this.cronConfig),this.emitter.emit(this.emittedCron)},t}();w.decorators=[{type:n.Component,args:[{selector:"cron",template:'<div class="cron-wrap">\n <div class="form-group smart-cron-job-every">\n <label for="smart-cron-job-every" class="control-label" translate>\n Interval\n </label>\n <div class="">\n <div class="c8y-select-wrapper">\n <select\n class="cron-select form-control"\n id="smart-cron-job-every"\n [(ngModel)]="base"\n required="true"\n (change)="onChangeSelect()"\n >\n <option *ngIf="base === 1" value="1" translate>\n Select…\n </option>\n <option *ngFor="let baseInterval of intervals" [ngValue]="baseInterval.value">\n {{ baseInterval.label | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n <div class="row">\n <div class="form-group smart-cron-job-on col-md-6" *ngIf="base == 4">\n <label class="control-label" for="smart-cron-job-on" translate>\n Day\n </label>\n\n <div class="c8y-select-wrapper">\n <select\n class="cron-select form-control day-value"\n id="smart-cron-job-on"\n [(ngModel)]="cronConfig.weekday"\n (change)="onChangeSelect()"\n >\n <option *ngFor="let dayOfWeek of daysOfWeekPosix" [ngValue]="dayOfWeek.value">\n {{ dayOfWeek.label | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n\n <div class="form-group smart-cron-job-of col-md-6" *ngIf="base == 6">\n <label for="smart-cron-job-of" class="control-label" translate>\n Month\n </label>\n <div>\n <div class="c8y-select-wrapper">\n <select\n id="smart-cron-job-of"\n class="cron-select form-control month-value"\n [(ngModel)]="cronConfig.month"\n (change)="onChangeSelect()"\n >\n <option *ngFor="let month of months" [ngValue]="month.value">\n {{ month.label | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n\n <div class="form-group smart-cron-job-on-the col-md-6" *ngIf="base >= 5">\n <label for="smart-cron-job-on-the" class="control-label" translate>\n Day\n </label>\n <div>\n <div class="c8y-select-wrapper">\n <select\n id="smart-cron-job-on-the"\n class="cron-select form-control day-of-month-value"\n [(ngModel)]="cronConfig.day"\n (change)="onChangeSelect()"\n >\n <option *ngFor="let dayOfMonth of daysOfMonth" [ngValue]="dayOfMonth.value">\n {{ dayOfMonth.label | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n </div>\n\n <div class="form-group smart-cron-job-at" *ngIf="base >= 2">\n <label for="smart-cron-job-at-hour" class="control-label">\n <span *ngIf="base >= 3" translate>Time</span>\n <span *ngIf="base < 3" translate>Minutes</span>\n </label>\n <div>\n <div class="form-inline">\n <div class="c8y-select-wrapper" *ngIf="base >= 3">\n <select\n id="smart-cron-job-at-hour"\n class="cron-select form-control hour-value"\n [(ngModel)]="cronConfig.hour"\n (change)="onChangeSelect()"\n >\n <option *ngFor="let hour of hours" [ngValue]="hour.value">\n {{ hour.value | number: \'2.0-0\' }}\n </option>\n </select>\n <span></span>\n </div>\n <span *ngIf="base >= 3"> : </span>\n <div class="c8y-select-wrapper">\n <select\n class="cron-select form-control minute-value"\n id="smart-cron-job-at-minute"\n [(ngModel)]="cronConfig.minute"\n (change)="onChangeSelect()"\n >\n <option *ngFor="let minute of minutes" [ngValue]="minute.value">\n {{ minute.value | number: \'2.0-0\' }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n </div>\n</div>\n'}]}],w.ctorParameters=function(){return[{type:S}]},w.propDecorators={cronIn:[{type:n.Input}],emitter:[{type:n.Output}]};var E=function(){};E.decorators=[{type:n.NgModule,args:[{declarations:[C,x,w],imports:[t.CoreModule,t.FormsModule,l.BsDropdownModule,c.TooltipModule],entryComponents:[C,x,w],providers:[b,S],exports:[C,x,w]}]}];var I=h.downgradeComponent({component:C}),T=h.downgradeInjectable(b),M="c8y.upgrade.reports",k=(m.module(M,[]).directive("c8yExportSchedules",I).service("c8yReportsService",T),[M]);d.registerNgModule(k),e.CronComponent=w,e.CronService=S,e.ExportSchedulesComponent=C,e.ReportsModule=E,e.ReportsService=b,e.ScheduleModalComponent=x,e.ng1Modules=k,Object.defineProperty(e,"__esModule",{value:!0})}));
|
|
15
|
+
***************************************************************************** */function v(e,n,t,o){return new(t||(t=Promise))((function(a,i){function r(e){try{l(o.next(e))}catch(e){i(e)}}function s(e){try{l(o.throw(e))}catch(e){i(e)}}function l(e){var n;e.done?a(e.value):(n=e.value,n instanceof t?n:new t((function(e){e(n)}))).then(r,s)}l((o=o.apply(e,n||[])).next())}))}function f(e,n){var t,o,a,i,r={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(t)throw new TypeError("Generator is already executing.");for(;r;)try{if(t=1,o&&(a=2&i[0]?o.return:i[0]?o.throw||((a=o.return)&&a.call(o),0):o.next)&&!(a=a.call(o,i[1])).done)return a;switch(o=0,a&&(i=[2&i[0],a.value]),i[0]){case 0:case 1:a=i;break;case 4:return r.label++,{value:i[1],done:!1};case 5:r.label++,o=i[1],i=[0];continue;case 7:i=r.ops.pop(),r.trys.pop();continue;default:if(!(a=r.trys,(a=a.length>0&&a[a.length-1])||6!==i[0]&&2!==i[0])){r=0;continue}if(3===i[0]&&(!a||i[1]>a[0]&&i[1]<a[3])){r.label=i[1];break}if(6===i[0]&&r.label<a[1]){r.label=a[1],a=i;break}if(a&&r.label<a[2]){r.label=a[2],r.ops.push(i);break}a[2]&&r.ops.pop(),r.trys.pop();continue}i=n.call(e,r)}catch(e){i=[6,e],o=0}finally{t=a=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,s])}}}var g,y,b=function(){function e(e,n,t){this.alertService=e,this.inventoryService=n,this.client=t,this.microserviceUrl="/service/reporting",this.headers={"Content-Type":"application/json"}}return e.prototype.getExport=function(e){return v(this,void 0,void 0,(function(){var n,t,o,a;return f(this,(function(i){switch(i.label){case 0:return[4,this.inventoryService.detail(e)];case 1:return t=i.sent(),o=t.data,200!==(a=t.res).status?this.alertService.addServerFailure({data:o,res:a}):n=o||{},[2,n]}}))}))},e.prototype.getScheduleList=function(e){return v(this,void 0,void 0,(function(){var n;return f(this,(function(t){switch(t.label){case 0:return[4,this.getExport(e)];case 1:return n=t.sent(),[2,this.extractScheduleListFromExport(n)]}}))}))},e.prototype.extractScheduleListFromExport=function(e){var n;return e&&(n=e.c8y_ScheduleConfiguration?e.c8y_ScheduleConfiguration:[]),o.orderBy(n,["timestamp"],["desc"])},e.prototype.addSchedule=function(e,n){return v(this,void 0,void 0,(function(){return f(this,(function(t){switch(t.label){case 0:return[4,this.updateSchedules(n,[],[e])];case 1:return[2,t.sent()]}}))}))},e.prototype.updateSchedule=function(e,n,t){return v(this,void 0,void 0,(function(){return f(this,(function(o){switch(o.label){case 0:return[4,this.updateSchedules(t,[e],[n])];case 1:return[2,o.sent()]}}))}))},e.prototype.updateSchedules=function(e,n,t){return void 0===n&&(n=[]),void 0===t&&(t=[]),v(this,void 0,void 0,(function(){var a,i,r,s,l,c;return f(this,(function(u){switch(u.label){case 0:return a=!1,[4,this.getExport(e)];case 1:return i=u.sent(),r=this.extractScheduleListFromExport(i),o.remove(r,(function(e){return o.some(n,(function(n){return o.isEqual(e,n)}))})),r.push.apply(r,t),i.c8y_ScheduleConfiguration=r,[4,this.inventoryService.update(i)];case 2:return s=u.sent(),l=s.data,200!==(c=s.res).status?[3,4]:[4,this.reschedule(e)];case 3:return a=u.sent(),[3,5];case 4:this.alertService.addServerFailure({data:l,res:c}),u.label=5;case 5:return[2,a]}}))}))},e.prototype.reschedule=function(e){return v(this,void 0,void 0,(function(){var n;return f(this,(function(t){switch(t.label){case 0:return n={method:"PUT",headers:this.headers},[4,this.client.fetch(this.microserviceUrl+"/schedule/"+e,n)];case 1:return[2,200===t.sent().status]}}))}))},e.prototype.deleteSchedule=function(e,n){return v(this,void 0,void 0,(function(){return f(this,(function(t){switch(t.label){case 0:return[4,this.updateSchedules(n,[e],[])];case 1:return[2,t.sent()]}}))}))},e.prototype.removeConfiguration=function(e){return v(this,void 0,void 0,(function(){var n;return f(this,(function(t){switch(t.label){case 0:return n=this.microserviceUrl+"/config/"+e.id,[4,this.client.fetch(n,{method:"DELETE"})];case 1:return[2,t.sent()]}}))}))},e}();b.decorators=[{type:n.Injectable}],b.ctorParameters=function(){return[{type:t.AlertService},{type:a.InventoryService},{type:a.FetchClient}]},e.ActionType=void 0,(g=e.ActionType||(e.ActionType={})).CREATE="create",g.EDIT="edit",g.DUPLICATE="duplicate",e.Base=void 0,(y=e.Base||(e.Base={}))[y.Initial=1]="Initial",y[y.Hour=2]="Hour",y[y.Day=3]="Day",y[y.Week=4]="Week",y[y.Month=5]="Month",y[y.Year=6]="Year";var S=function(){function n(e){this.translateService=e,this.daysOfWeekPosix=[],this.daysOfMonth=[{value:"1",label:"1."},{value:"2",label:"2."},{value:"3",label:"3."},{value:"4",label:"4."},{value:"5",label:"5."},{value:"6",label:"6."},{value:"7",label:"7."},{value:"8",label:"8."},{value:"9",label:"9."},{value:"10",label:"10."},{value:"11",label:"11."},{value:"12",label:"12."},{value:"13",label:"13."},{value:"14",label:"14."},{value:"15",label:"15."},{value:"16",label:"16."},{value:"17",label:"17."},{value:"18",label:"18."},{value:"19",label:"19."},{value:"20",label:"20."},{value:"21",label:"21."},{value:"22",label:"22."},{value:"23",label:"23."},{value:"24",label:"24."},{value:"25",label:"25."},{value:"26",label:"26."},{value:"27",label:"27."},{value:"28",label:"28."},{value:"29",label:"29."},{value:"30",label:"30."},{value:"31",label:"31."}],this.months=[],this.hours=[],this.minutes=[],this.intervals=[{value:2,label:t.gettext("Hour")},{value:3,label:t.gettext("Day")},{value:4,label:t.gettext("Week")},{value:5,label:t.gettext("Month")},{value:6,label:t.gettext("Year")}];for(var n=0;n<24;n++)this.hours.push({value:n.toString(),label:""+n});for(n=0;n<60;n+=5)this.minutes.push({value:n.toString(),label:""+n});for(n=0;n<7;n++)this.daysOfWeekPosix.push({value:n.toString(),label:this.getWeekDayName({weekday:n})});for(n=1;n<13;n++)this.months.push({value:n.toString(),label:this.getMonthName({month:n})})}return n.prototype.generateCron=function(e){var n="";return n=e.minute?""+e.minute:"*",n+=e.hour?" "+e.hour:" *",n+=e.day?" "+e.day:" *",n+=e.month?" "+e.month:" *",n+=e.weekday?" "+e.weekday:" *"},n.prototype.generateCronConfig=function(e){var n=e.split(/\s+/);return{minute:n[0],hour:n[1],day:n[2],month:n[3],weekday:n[4]}},n.prototype.getBase=function(n){var t=e.Base.Initial;return"*"!==n.minute&&"*"===n.hour&&"*"===n.day&&"*"===n.month&&"*"===n.weekday?t=e.Base.Hour:"*"!==n.minute&&"*"!==n.hour&&"*"===n.day&&"*"===n.month&&"*"===n.weekday?t=e.Base.Day:"*"!==n.minute&&"*"!==n.hour&&"*"===n.day&&"*"===n.month&&"*"!==n.weekday?t=e.Base.Week:"*"!==n.minute&&"*"!==n.hour&&"*"!==n.day&&"*"===n.month&&"*"===n.weekday?t=e.Base.Month:"*"!==n.minute&&"*"!==n.hour&&"*"!==n.day&&"*"!==n.month&&"*"===n.weekday&&(t=e.Base.Year),t},n.prototype.validateModels=function(n,t){var o;switch(n){case e.Base.Initial:o=!1;break;case e.Base.Hour:o="*"!==t.minute;break;case e.Base.Day:o="*"!==t.minute&&"*"!==t.hour;break;case e.Base.Week:o="*"!==t.minute&&"*"!==t.hour&&"*"!==t.weekday;break;case e.Base.Month:o="*"!==t.minute&&"*"!==t.hour&&"*"!==t.day;break;case e.Base.Year:o="*"!==t.minute&&"*"!==t.hour&&"*"!==t.day&&"*"!==t.month;break;default:o=!1}return o},n.prototype.clearNextModels=function(n,t){n===e.Base.Initial?(t.minute="*",t.hour="*",t.day="*",t.month="*",t.weekday="*"):n===e.Base.Hour?(t.minute="*"===t.minute?this.minutes[0].value:t.minute,t.hour="*",t.day="*",t.month="*",t.weekday="*"):n===e.Base.Day?(t.minute="*"===t.minute?this.minutes[0].value:t.minute,t.hour="*"===t.hour?this.hours[0].value:t.hour,t.day="*",t.month="*",t.weekday="*"):n===e.Base.Week?(t.minute="*"===t.minute?this.minutes[0].value:t.minute,t.hour="*"===t.hour?this.hours[0].value:t.hour,t.day="*",t.month="*",t.weekday="*"===t.weekday||"?"===t.weekday?this.daysOfWeekPosix[0].value:t.weekday):n===e.Base.Month?(t.minute="*"===t.minute?this.minutes[0].value:t.minute,t.hour="*"===t.hour?this.hours[0].value:t.hour,t.day="*"===t.day?this.daysOfMonth[0].value:t.day,t.month="*",t.weekday="*"):n===e.Base.Year&&(t.minute="*"===t.minute?this.minutes[0].value:t.minute,t.hour="*"===t.hour?this.hours[0].value:t.hour,t.day="*"===t.day?this.daysOfMonth[0].value:t.day,t.month="*"===t.month?this.months[0].value:t.month,t.weekday="*")},n.prototype.getWeekDayName=function(e){var n=new Date(0),t=n.getDate()+3;return n.setDate(t+parseInt(e.weekday,10)),r.formatDate(n,"EEEE",this.translateService.currentLang)},n.prototype.getMonthDayName=function(e){var n="";return this.daysOfMonth.forEach((function(t){t.value===e.day&&(n=t.label)})),n},n.prototype.getMonthName=function(e){var n=new Date(0);return n.setMonth(parseInt(e.month,10)-1),r.formatDate(n,"LLLL",this.translateService.currentLang)},n}();S.decorators=[{type:n.Injectable}],S.ctorParameters=function(){return[{type:i.TranslateService}]};var C=function(){function a(o,a,i){this.reportsService=o,this.modalRef=a,this.cronService=i,this.emitter=new n.EventEmitter,this.ActionType=e.ActionType,this.cronExpression="* * * * *",this.validCron=!1,this.emitterPayload={success:!1,message:"",schedule:{timestamp:void 0,emailConfig:void 0,cronConfig:void 0}},this.placeholdersInfo=t.gettext("Available placeholders: {tenant-domain}, {host}, {binaryId}. Whole link to downloadable file is: {tenant-domain}/inventory/binaries/{binaryId}.")}return a.prototype.ngOnInit=function(){this.oldSchedule=o.cloneDeep(this.schedule),this.populateEmailFieldsFromSchedule(this.schedule),this.cronExpression=this.cronService.generateCron(this.schedule.cronConfig),this.validCron=this.cronService.validateModels(this.cronService.getBase(this.schedule.cronConfig),this.schedule.cronConfig)},a.prototype.populateEmailFieldsFromSchedule=function(e){e.emailConfig.to&&e.emailConfig.to.length&&(this.emailTo=e.emailConfig.to.toString()),e.emailConfig.cc&&e.emailConfig.cc.length&&(this.emailCc=e.emailConfig.cc.toString()),e.emailConfig.bcc&&e.emailConfig.bcc.length&&(this.emailBcc=e.emailConfig.bcc.toString()),e.emailConfig.replyTo&&(this.emailReplyTo=e.emailConfig.replyTo),e.emailConfig.subject&&(this.emailSubject=e.emailConfig.subject),e.emailConfig.text&&(this.emailText=e.emailConfig.text)},a.prototype.save=function(){if(this.populateScheduleFromCronExpression(),this.populateScheduleFromEmailFields(),this.actionType===e.ActionType.CREATE||this.actionType===e.ActionType.DUPLICATE){var n=(new Date).getTime();this.schedule.timestamp=n}this.emitterPayload.success=!0,this.emitterPayload.schedule=this.schedule,this.modalRef.hide(),this.emitter.emit(this.emitterPayload)},a.prototype.cancel=function(){this.modalRef.hide()},a.prototype.getCron=function(e){this.validCron=e.valid,e.valid&&(this.cronExpression=e.cron)},a.prototype.populateScheduleFromCronExpression=function(){this.schedule.cronConfig=this.cronService.generateCronConfig(this.cronExpression)},a.prototype.convertStringOfEmailsToArray=function(e){var n=[];e&&e.split(",").forEach((function(e){e&&n.push(e)}));return n},a.prototype.populateScheduleFromEmailFields=function(){this.schedule.emailConfig.to=this.emailTo?this.convertStringOfEmailsToArray(this.emailTo):null,this.schedule.emailConfig.cc=this.emailCc?this.convertStringOfEmailsToArray(this.emailCc):null,this.schedule.emailConfig.bcc=this.emailBcc?this.convertStringOfEmailsToArray(this.emailBcc):null,this.schedule.emailConfig.replyTo=this.emailReplyTo,this.schedule.emailConfig.subject=this.emailSubject,this.schedule.emailConfig.text=this.emailText},a}();C.decorators=[{type:n.Component,args:[{selector:"schedule-modal",template:'<div class="modal-header text-center bg-primary">\n <header class="text-white">\n <div style="font-size: 62px;">\n <span c8yIcon="c8y-report"></span>\n </div>\n <h4 class="text-uppercase">\n <span *ngIf="actionType === ActionType.CREATE" translate>New export schedule</span>\n <span *ngIf="actionType === ActionType.EDIT" translate>Edit export schedule</span>\n <span *ngIf="actionType === ActionType.DUPLICATE" translate>Duplicate export schedule</span>\n </h4>\n </header>\n</div>\n\n<div class="modal-body">\n <p class="lead text-center p-t-24 m-b-0" translate>On schedule send export via email</p>\n</div>\n<div class="modal-inner-scroll smart-rule-control">\n <form #scheduleForm="ngForm" class="edit-smart-rule-details">\n <div class="list-group">\n <div class="list-group-item bg-gray-white">\n <div class="smart-list-icon-label">\n <span class="dot bg-primary-light m-r-8">1</span>\n <strong translate>Frequency</strong>\n </div>\n <div class="p-t-16">\n <div class="form-group">\n <cron [cronIn]="cronExpression" (emitter)="getCron($event)" name="cron"></cron>\n </div>\n </div>\n </div>\n <div class="list-group-item">\n <div class="smart-list-icon-label">\n <span class="dot bg-primary-light m-r-8">2</span>\n <div class="d-inline-block">\n <strong translate>Send email</strong>\n <p class="help-block text-muted small p-absolute">\n <i class="text-info m-r-4 text-14" c8yIcon="info-circle"></i>\n <span translate\n >Enter one or more valid email addresses, separated with a comma.</span\n >\n </p>\n </div>\n </div>\n <div class="p-t-24">\n <div class="form-group">\n <label class="control-label" translate>Send to</label>\n <c8y-form-group>\n <input\n emails\n type="text"\n class="form-control"\n name="to"\n [(ngModel)]="emailTo"\n placeholder="{{\n \'e.g. joe.doe@example.com,john.smith@example.com`LOCALIZE`\' | translate\n }}"\n required\n />\n </c8y-form-group>\n </div>\n\n <div class="form-group">\n <label class="control-label" translate>CC</label>\n <c8y-form-group>\n <input\n emails\n type="text"\n class="form-control span"\n name="cc"\n placeholder="{{\n \'e.g. joe.doe@example.com,john.smith@example.com`LOCALIZE`\' | translate\n }}"\n [(ngModel)]="emailCc"\n />\n </c8y-form-group>\n </div>\n\n <div class="form-group">\n <label class="control-label" translate>BCC</label>\n <c8y-form-group>\n <input\n emails\n type="text"\n class="form-control span"\n name="bcc"\n placeholder="{{\n \'e.g. joe.doe@example.com,john.smith@example.com`LOCALIZE`\' | translate\n }}"\n [(ngModel)]="emailBcc"\n />\n </c8y-form-group>\n </div>\n\n <div class="form-group">\n <label class="control-label" translate>Reply to (single email address)</label>\n <c8y-form-group>\n <input\n email\n type="text"\n class="form-control span"\n name="replyTo"\n placeholder="{{ \'e.g. joe.doe@example.com`LOCALIZE`\' | translate }}"\n [(ngModel)]="emailReplyTo"\n />\n </c8y-form-group>\n </div>\n\n <div class="form-group">\n <label class="control-label" translate>Subject</label>\n <c8y-form-group>\n <input\n type="text"\n class="form-control span"\n name="subject"\n [(ngModel)]="emailSubject"\n placeholder="{{ \'e.g. Daily report\' | translate }}"\n required\n />\n </c8y-form-group>\n </div>\n\n <div class="form-group">\n <label class="control-label" translate>Message</label>\n <c8y-form-group>\n <textarea\n class="form-control"\n name="text"\n [(ngModel)]="emailText"\n placeholder="{{ \'Message\' | translate }}"\n rows="4"\n required\n ></textarea>\n <p class="help-block text-muted">\n {{ placeholdersInfo | translate }}\n </p>\n </c8y-form-group>\n </div>\n </div>\n </div>\n </div>\n </form>\n</div>\n\n<div class="modal-footer">\n <button class="btn btn-default" (click)="cancel()" title="{{ \'Cancel\' | translate }}">\n {{ \'Cancel\' | translate }}\n </button>\n <button\n class="btn btn-primary"\n (click)="save()"\n [disabled]="!validCron || !scheduleForm.form.valid"\n >\n <span>\n <span *ngIf="actionType === ActionType.CREATE" title="{{ \'Create\' | translate }}">\n {{ \'Create\' | translate }}\n </span>\n <span *ngIf="actionType === ActionType.EDIT" title="{{ \'Save\' | translate }}">\n {{ \'Save\' | translate }}\n </span>\n <span *ngIf="actionType === ActionType.DUPLICATE" title="{{ \'Duplicate\' | translate }}">\n {{ \'Duplicate\' | translate }}\n </span>\n </span>\n </button>\n</div>\n'}]}],C.ctorParameters=function(){return[{type:b},{type:s.BsModalRef},{type:S}]},C.propDecorators={emitter:[{type:n.Output}]};var x=function(){function a(e,o,a,i,r,s){this.reportsService=e,this.bsModalService=o,this.cronService=a,this.translateService=i,this.userService=r,this.optionsService=s,this.onSchedulesUpdate=new n.EventEmitter,this.scheduleList=[],this.initialSchedule={timestamp:null,emailConfig:{to:[],cc:[],bcc:[],replyTo:"",text:"",subject:""},cronConfig:{minute:"0",hour:"0",day:"1",month:"1",weekday:"?"}},this.listClass="interact-list",this.sortReverse=!1,this.isOpen={},this.isEditMenuOpen=!1,this.currentUserEmail="",this.hasRequiredRole=!1,this.defaultExportEmailTemplate=this.translateService.instant(t.gettext("File with exported data can be downloaded from {tenant-domain}/inventory/binaries/{binaryId}.")),this.loadingStatus={inProgress:!1,done:!1,error:!1}}return Object.defineProperty(a.prototype,"exportId",{set:function(e){this._exportId=e},enumerable:!1,configurable:!0}),a.prototype.ngOnInit=function(){return v(this,void 0,void 0,(function(){var e,n,o,a;return f(this,(function(i){switch(i.label){case 0:return e=this,[4,this.checkRole()];case 1:return e.hasRequiredRole=i.sent(),this.getScheduleList(!0),[4,this.getCurrentUserEmail()];case 2:return n=i.sent(),o=this.initialSchedule.emailConfig,[4,this.optionsService.getTenantOption("configuration","export.data.mail.text",this.defaultExportEmailTemplate)];case 3:return o.text=i.sent(),this.initialSchedule.emailConfig.to=n,a=this,[4,this.reportsService.getExport(this._exportId)];case 4:return a.exp=i.sent(),this.initialSchedule.emailConfig.subject=this.translateService.instant(t.gettext('Export of "{{expName}}"'),{expName:this.exp.name}),[2]}}))}))},a.prototype.ngOnChanges=function(){this.translateButtonTitles()},a.prototype.translateButtonTitles=function(){this.buttonLabels={edit:this.translateService.instant(t.gettext("Edit schedule")),editNoPermission:this.translateService.instant(t.gettext("Edit schedule - no permissions")),duplicate:this.translateService.instant(t.gettext("Duplicate schedule")),duplicateNoPermission:this.translateService.instant(t.gettext("Duplicate schedule - no permissions")),delete:this.translateService.instant(t.gettext("Delete schedule")),deleteNoPermission:this.translateService.instant(t.gettext("Delete schedule - no permissions"))}},a.prototype.getCurrentUserEmail=function(){return v(this,void 0,void 0,(function(){var e;return f(this,(function(n){switch(n.label){case 0:return[4,this.userService.current()];case 1:return[2,(e=n.sent().data)&&e.email?[e.email]:[]]}}))}))},a.prototype.checkRole=function(){return v(this,void 0,void 0,(function(){var e;return f(this,(function(n){switch(n.label){case 0:return[4,this.userService.current()];case 1:return e=n.sent().data,"ROLE_SCHEDULE_REPORT_ADMIN",[2,this.userService.hasRole(e,"ROLE_SCHEDULE_REPORT_ADMIN")]}}))}))},a.prototype.getScheduleList=function(e){return v(this,void 0,void 0,(function(){var n;return f(this,(function(t){switch(t.label){case 0:return e&&(this.loadingStatus.inProgress=!0),n=this,[4,this.reportsService.getScheduleList(this._exportId)];case 1:return n.scheduleList=t.sent(),e&&(this.loadingStatus.inProgress=!1),[2]}}))}))},a.prototype.addSchedule=function(){this.openAddEditModal(this._exportId,this.initialSchedule,e.ActionType.CREATE)},a.prototype.editSchedule=function(n,t,o){this.hasRequiredRole&&(o.preventDefault(),this.openAddEditModal(this._exportId,n,e.ActionType.EDIT,t))},a.prototype.duplicateSchedule=function(n,t){t.preventDefault(),this.openAddEditModal(this._exportId,n,e.ActionType.DUPLICATE)},a.prototype.openAddEditModal=function(e,n,t,a){var i=this,r={class:"modal-sm",initialState:{actionType:t,exportId:e,schedule:o.cloneDeep(n)}};this.modalRef=this.bsModalService.show(C,r),this.modalRef.content.emitter.subscribe((function(e){return i.getMessageFromModal(e,a)}))},a.prototype.getMessageFromModal=function(e,n){e.success&&(void 0!==n?this.scheduleList[n]=e.schedule:this.scheduleList.push(e.schedule),this.onSchedulesUpdate.emit(this.scheduleList))},a.prototype.removeSchedule=function(e,n,t){t.preventDefault(),this.scheduleList.splice(n,1),this.onSchedulesUpdate.emit(this.scheduleList)},a}();x.decorators=[{type:n.Component,args:[{selector:"export-schedules",template:'<div>\n <div *ngIf="loadingStatus.inProgress" class="flex-row">\n <c8y-loading></c8y-loading>\n <span translate>Retrieving schedules…</span>\n </div>\n\n <div *ngIf="!loadingStatus.inProgress && loadingStatus.done && loadingStatus.error">\n <div class="alert alert-warning max-width-100" translate>\n Could not load schedules list.\n </div>\n </div>\n\n <div *ngIf="!loadingStatus.inProgress && !loadingStatus.done && !loadingStatus.error">\n <div class="c8y-empty-state text-center max-width-100" *ngIf="!scheduleList.length">\n <h1 c8yIcon="c8y-report" class="c8y-icon-duocolor"></h1>\n <h3 translate>No export schedules defined.</h3>\n </div>\n\n <div class="c8y-list__group" *ngIf="scheduleList.length">\n <div class="c8y-list__item hidden-xs">\n <div class="c8y-list__item__block">\n <div class="c8y-list__item__icon">\n <i class="p-l-24"></i>\n </div>\n <div class="c8y-list__item__body">\n <div class="flex-row">\n <div class="col-sm-6">\n <label class="m-0">\n {{ \'Description\' | translate }}\n </label>\n </div>\n <div class="col-sm-6 m-r-40">\n <label class="m-0">\n {{ \'Frequency\' | translate }}\n </label>\n </div>\n </div>\n </div>\n <span></span>\n </div>\n </div>\n\n <div\n class="c8y-list__item flex-row pointer"\n *ngFor="let schedule of scheduleList; index as i"\n (click)="editSchedule(schedule, i, $event)"\n >\n <div class="c8y-list__item__block">\n <div class="c8y-list__item__icon">\n <i c8yIcon="c8y-report" class="c8y-icon-duocolor"></i>\n </div>\n <div class="c8y-list__item__body flex-row">\n <div class="col-sm-6 col-xs-6">\n <div class="text-truncate" title="{{ schedule.emailConfig.subject }}">\n {{ schedule.emailConfig.subject }}\n </div>\n </div>\n <div class="col-sm-6 col-xs-6">\n <div class="flex-row a-i-baseline">\n <i c8yIcon="calendar" class="text-muted m-r-4"></i>\n <span class="smart-rule-information">\n <span\n *ngIf="cronService.getBase(schedule.cronConfig) === 2"\n ngNonBindable\n translate\n [translateParams]="{ minutes: schedule.cronConfig.minute | number: \'2.0-0\' }"\n >\n Hourly: {{ minutes }} minute(s) past the hour.\n </span>\n <span\n *ngIf="cronService.getBase(schedule.cronConfig) === 3"\n ngNonBindable\n translate\n [translateParams]="{\n hour: schedule.cronConfig.hour | number: \'2.0-0\',\n minutes: schedule.cronConfig.minute | number: \'2.0-0\'\n }"\n >\n Daily: at {{ hour }}:{{ minutes }}.\n </span>\n <span\n *ngIf="cronService.getBase(schedule.cronConfig) === 4"\n ngNonBindable\n translate\n [translateParams]="{\n weekDay: cronService.getWeekDayName(schedule.cronConfig),\n hour: schedule.cronConfig.hour | number: \'2.0-0\',\n minutes: schedule.cronConfig.minute | number: \'2.0-0\'\n }"\n >\n Weekly: {{ weekDay }}, at {{ hour }}:{{ minutes }}.\n </span>\n <span\n *ngIf="cronService.getBase(schedule.cronConfig) === 5"\n ngNonBindable\n translate\n [translateParams]="{\n monthDay: cronService.getMonthDayName(schedule.cronConfig),\n hour: schedule.cronConfig.hour | number: \'2.0-0\',\n minutes: schedule.cronConfig.minute | number: \'2.0-0\'\n }"\n >\n Monthly: {{ monthDay }} day of the month, at {{ hour }}:{{ minutes }}.\n </span>\n <span\n *ngIf="cronService.getBase(schedule.cronConfig) === 6"\n ngNonBindable\n translate\n [translateParams]="{\n month: cronService.getMonthName(schedule.cronConfig),\n monthDay: cronService.getMonthDayName(schedule.cronConfig),\n hour: schedule.cronConfig.hour | number: \'2.0-0\',\n minutes: schedule.cronConfig.minute | number: \'2.0-0\'\n }"\n >\n Yearly: {{ month }}, {{ monthDay }} day of the month, at {{ hour }}:{{\n minutes\n }}.\n </span>\n </span>\n </div>\n </div>\n </div>\n <div class="c8y-list__item__actions" (click)="$event.stopPropagation()">\n <div class="settings dropdown" dropdown>\n <button\n class="dropdown-toggle c8y-dropdown"\n dropdownToggle\n aria-haspopup="true"\n aria-expanded="false"\n title="{{ \'Actions\' | translate }}"\n >\n <i [c8yIcon]="\'ellipsis-v\'"></i>\n </button>\n <ul class="dropdown-menu dropdown-menu-right" *dropdownMenu>\n <li role="menuitem">\n <button\n [title]="hasRequiredRole ? buttonLabels.edit : buttonLabels.editNoPermission"\n (click)="editSchedule(schedule, i, $event)"\n [disabled]="!hasRequiredRole"\n >\n <i [c8yIcon]="\'pencil\'"></i> {{ \'Edit\' | translate }}\n </button>\n </li>\n <li role="menuitem">\n <button\n [title]="\n hasRequiredRole ? buttonLabels.duplicate : buttonLabels.duplicateNoPermission\n "\n (click)="duplicateSchedule(schedule, $event)"\n [disabled]="!hasRequiredRole"\n >\n <i [c8yIcon]="\'copy\'"></i> {{ \'Duplicate\' | translate }}\n </button>\n </li>\n <li role="menuitem">\n <button\n [title]="\n hasRequiredRole ? buttonLabels.delete : buttonLabels.deleteNoPermission\n "\n (click)="removeSchedule(schedule, i, $event)"\n [disabled]="!hasRequiredRole"\n >\n <i [c8yIcon]="\'trash\'"></i> {{ \'Delete\' | translate }}\n </button>\n </li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class="alert alert-warning max-width-100" *ngIf="!hasRequiredRole" role="alert" translate>\n You don\'t have the permission required to schedule exports.\n </div>\n <button\n type="button"\n class="btn-add-block m-t-16"\n title="{{ \'Add schedule\' | translate }}"\n (click)="addSchedule()"\n [disabled]="!hasRequiredRole"\n >\n <i [c8yIcon]="\'plus-circle\'"></i>\n {{ \'Add schedule\' | translate }}\n </button>\n</div>\n'}]}],x.ctorParameters=function(){return[{type:b},{type:s.BsModalService},{type:S},{type:i.TranslateService},{type:a.UserService},{type:t.OptionsService}]},x.propDecorators={exportId:[{type:n.Input}],onSchedulesUpdate:[{type:n.Output}]};var w=function(){function t(t){this.cronService=t,this.emitter=new n.EventEmitter,this.emittedCron={valid:!1,cron:""},this.base=e.Base.Initial}return t.prototype.ngOnInit=function(){this.daysOfWeekPosix=this.cronService.daysOfWeekPosix,this.daysOfMonth=this.cronService.daysOfMonth,this.months=this.cronService.months,this.hours=this.cronService.hours,this.minutes=this.cronService.minutes,this.intervals=this.cronService.intervals,this.cronConfig=this.cronService.generateCronConfig(this.cronIn),this.base=this.cronService.getBase(this.cronConfig)},t.prototype.onChangeSelect=function(){this.cronService.clearNextModels(this.base,this.cronConfig),this.emittedCron.valid=this.cronService.validateModels(this.base,this.cronConfig),this.emittedCron.cron=this.cronService.generateCron(this.cronConfig),this.emitter.emit(this.emittedCron)},t}();w.decorators=[{type:n.Component,args:[{selector:"cron",template:'<div class="cron-wrap">\n <div class="form-group smart-cron-job-every">\n <label for="smart-cron-job-every" class="control-label" translate>\n Interval\n </label>\n <div class="">\n <div class="c8y-select-wrapper">\n <select\n class="cron-select form-control"\n id="smart-cron-job-every"\n [(ngModel)]="base"\n required="true"\n (change)="onChangeSelect()"\n >\n <option *ngIf="base === 1" value="1" translate>\n Select…\n </option>\n <option *ngFor="let baseInterval of intervals" [ngValue]="baseInterval.value">\n {{ baseInterval.label | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n <div class="row">\n <div class="form-group smart-cron-job-on col-md-6" *ngIf="base == 4">\n <label class="control-label" for="smart-cron-job-on" translate>\n Day\n </label>\n\n <div class="c8y-select-wrapper">\n <select\n class="cron-select form-control day-value"\n id="smart-cron-job-on"\n [(ngModel)]="cronConfig.weekday"\n (change)="onChangeSelect()"\n >\n <option *ngFor="let dayOfWeek of daysOfWeekPosix" [ngValue]="dayOfWeek.value">\n {{ dayOfWeek.label | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n\n <div class="form-group smart-cron-job-of col-md-6" *ngIf="base == 6">\n <label for="smart-cron-job-of" class="control-label" translate>\n Month\n </label>\n <div>\n <div class="c8y-select-wrapper">\n <select\n id="smart-cron-job-of"\n class="cron-select form-control month-value"\n [(ngModel)]="cronConfig.month"\n (change)="onChangeSelect()"\n >\n <option *ngFor="let month of months" [ngValue]="month.value">\n {{ month.label | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n\n <div class="form-group smart-cron-job-on-the col-md-6" *ngIf="base >= 5">\n <label for="smart-cron-job-on-the" class="control-label" translate>\n Day\n </label>\n <div>\n <div class="c8y-select-wrapper">\n <select\n id="smart-cron-job-on-the"\n class="cron-select form-control day-of-month-value"\n [(ngModel)]="cronConfig.day"\n (change)="onChangeSelect()"\n >\n <option *ngFor="let dayOfMonth of daysOfMonth" [ngValue]="dayOfMonth.value">\n {{ dayOfMonth.label | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n </div>\n\n <div class="form-group smart-cron-job-at" *ngIf="base >= 2">\n <label for="smart-cron-job-at-hour" class="control-label">\n <span *ngIf="base >= 3" translate>Time</span>\n <span *ngIf="base < 3" translate>Minutes</span>\n </label>\n <div>\n <div class="form-inline">\n <div class="c8y-select-wrapper" *ngIf="base >= 3">\n <select\n id="smart-cron-job-at-hour"\n class="cron-select form-control hour-value"\n [(ngModel)]="cronConfig.hour"\n (change)="onChangeSelect()"\n >\n <option *ngFor="let hour of hours" [ngValue]="hour.value">\n {{ hour.value | number: \'2.0-0\' }}\n </option>\n </select>\n <span></span>\n </div>\n <span *ngIf="base >= 3"> : </span>\n <div class="c8y-select-wrapper">\n <select\n class="cron-select form-control minute-value"\n id="smart-cron-job-at-minute"\n [(ngModel)]="cronConfig.minute"\n (change)="onChangeSelect()"\n >\n <option *ngFor="let minute of minutes" [ngValue]="minute.value">\n {{ minute.value | number: \'2.0-0\' }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n </div>\n</div>\n'}]}],w.ctorParameters=function(){return[{type:S}]},w.propDecorators={cronIn:[{type:n.Input}],emitter:[{type:n.Output}]};var E=function(){};E.decorators=[{type:n.NgModule,args:[{declarations:[x,C,w],imports:[t.CoreModule,t.FormsModule,l.BsDropdownModule,c.TooltipModule],entryComponents:[x,C,w],providers:[b,S],exports:[x,C,w]}]}];var I=h.downgradeComponent({component:x}),T=h.downgradeInjectable(b),M="c8y.upgrade.reports",k=(m.module(M,[]).directive("c8yExportSchedules",I).service("c8yReportsService",T),[M]);d.registerNgModule(k),e.CronComponent=w,e.CronService=S,e.ExportSchedulesComponent=x,e.ReportsModule=E,e.ReportsService=b,e.ScheduleModalComponent=C,e.ng1Modules=k,Object.defineProperty(e,"__esModule",{value:!0})}));
|
|
16
16
|
//# sourceMappingURL=c8y-ngx-components-reports.umd.min.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../node_modules/tslib/tslib.es6.js","../../reports/export-schedules.interface.ts","../../reports/reports.service.ts","../../reports/cron.service.ts","../../reports/schedule-modal.component.ts","../../reports/export-schedules.component.ts","../../reports/cron.component.ts","../../reports/reports.module.ts","../../reports/ng1/downgraded.components.ts","../../reports/ng1/downgraded.services.ts","../../reports/ng1/index.ts"],"names":["__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","__generator","body","f","y","t","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","this","n","v","op","TypeError","call","pop","length","push","ActionType","Base","ReportsService","alertService","inventoryService","client","microserviceUrl","headers","Content-Type","prototype","getExport","exportId","detail","exportDetail","_a","data","res","status","addServerFailure","exp","getScheduleList","extractScheduleListFromExport","scheduleList","c8y_ScheduleConfiguration","orderBy","addSchedule","schedule","updateSchedules","updateSchedule","oldSchedule","schedulesToRemove","schedulesToAdd","success","_b","schedules","remove","some","scheduleToRemove","isEqual","update","reschedule","options","method","fetch","deleteSchedule","Injectable","AlertService","InventoryService","FetchClient","CronService","translateService","daysOfWeekPosix","daysOfMonth","months","hours","minutes","intervals","gettext","x","toString","getWeekDayName","weekday","getMonthName","month","generateCron","cronConfig","cron","minute","hour","day","generateCronConfig","parts","split","getBase","base","Initial","Hour","Day","Week","Month","Year","validateModels","valid","clearNextModels","date","Date","firstSundayDate","getDate","setDate","parseInt","formatDate","currentLang","getMonthDayName","name","forEach","item","setMonth","TranslateService","ScheduleModalComponent","reportsService","modalRef","cronService","emitter","EventEmitter","cronExpression","validCron","emitterPayload","message","timestamp","undefined","emailConfig","placeholdersInfo","ngOnInit","cloneDeep","populateEmailFieldsFromSchedule","to","emailTo","cc","emailCc","bcc","emailBcc","replyTo","emailReplyTo","subject","emailSubject","text","emailText","save","populateScheduleFromCronExpression","populateScheduleFromEmailFields","actionType","CREATE","DUPLICATE","getTime","hide","emit","cancel","getCron","convertStringOfEmailsToArray","stringOfEmails","arr","Component","args","selector","template","BsModalRef","Output","ExportSchedulesComponent","bsModalService","userService","optionsService","onSchedulesUpdate","initialSchedule","listClass","sortReverse","isOpen","isEditMenuOpen","currentUserEmail","hasRequiredRole","defaultExportEmailTemplate","instant","loadingStatus","inProgress","error","Object","defineProperty","_exportId","checkRole","_d","getCurrentUserEmail","getTenantOption","_c","expName","ngOnChanges","translateButtonTitles","buttonLabels","edit","editNoPermission","duplicate","duplicateNoPermission","delete","deleteNoPermission","current","email","hasRole","withProgress","openAddEditModal","editSchedule","index","event","preventDefault","EDIT","duplicateSchedule","_this","modalOptions","class","initialState","show","content","subscribe","load","getMessageFromModal","payload","removeSchedule","splice","BsModalService","UserService","OptionsService","Input","CronComponent","emittedCron","cronIn","onChangeSelect","NgModule","declarations","imports","CoreModule","FormsModule","BsDropdownModule","TooltipModule","entryComponents","providers","exports","exportSchedulesComponent","downgradeComponent","component","downgradeInjectable","NAME","ng1Modules","angular","module","directive","service","registerNgModule"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","import { IManagedObject } from '@c8y/client';\n\nexport interface Export extends IManagedObject {\n c8y_ScheduleConfiguration: Schedule[];\n}\n\nexport interface Schedule {\n timestamp: number;\n emailConfig: EmailConfig;\n cronConfig: CronConfig;\n}\n\nexport interface EmailConfig {\n to: string[];\n cc: string[];\n bcc: string[];\n replyTo: string;\n text: string;\n subject: string;\n}\n\nexport interface CronConfig {\n month: string;\n hour: string;\n weekday: string;\n day: string;\n minute: string;\n}\n\nexport interface EmittedCron {\n cron: string;\n valid: boolean;\n}\n\nexport interface EmitterPayload {\n success: boolean;\n message: string;\n schedule: Schedule;\n}\n\nexport enum ActionType {\n CREATE = 'create',\n EDIT = 'edit',\n DUPLICATE = 'duplicate'\n}\n\nexport enum Base {\n Initial = 1,\n Hour,\n Day,\n Week,\n Month,\n Year\n}\n","import { Injectable } from '@angular/core';\nimport { Export, Schedule } from './export-schedules.interface';\nimport { AlertService } from '@c8y/ngx-components';\nimport { orderBy, isEqual, remove, some } from 'lodash-es';\nimport { InventoryService, IdReference } from '@c8y/client';\nimport { FetchClient, IFetchOptions } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components';\n\n@Injectable()\nexport class ReportsService {\n microserviceUrl: string;\n headers: any;\n\n constructor(\n private alertService: AlertService,\n private inventoryService: InventoryService,\n private client: FetchClient\n ) {\n this.microserviceUrl = '/service/reporting/schedule';\n this.headers = { 'Content-Type': 'application/json' };\n }\n\n async getExport(exportId: IdReference) {\n let exp: Export;\n const exportDetail = await this.inventoryService.detail(exportId);\n const { data, res } = exportDetail;\n if (res.status !== 200) {\n this.alertService.addServerFailure({ data, res });\n } else {\n exp = data ? ((data as unknown) as Export) : ({} as Export);\n }\n\n return exp;\n }\n\n async getScheduleList(exportId: IdReference) {\n const exp = await this.getExport(exportId);\n\n return this.extractScheduleListFromExport(exp);\n }\n\n extractScheduleListFromExport(exp: Export) {\n let scheduleList: Schedule[];\n if (exp) {\n scheduleList = exp.c8y_ScheduleConfiguration ? exp.c8y_ScheduleConfiguration : [];\n }\n return orderBy(scheduleList, ['timestamp'], ['desc']);\n }\n\n async addSchedule(schedule: Schedule, exportId: IdReference) {\n return await this.updateSchedules(exportId, [], [schedule]);\n }\n\n async updateSchedule(oldSchedule: Schedule, schedule: Schedule, exportId: IdReference) {\n return await this.updateSchedules(exportId, [oldSchedule], [schedule]);\n }\n\n async updateSchedules(\n exportId: IdReference,\n schedulesToRemove: Schedule[] = [],\n schedulesToAdd: Schedule[] = []\n ) {\n let success: boolean = false;\n const exp = await this.getExport(exportId);\n const schedules = this.extractScheduleListFromExport(exp);\n\n remove(schedules, (schedule: Schedule) =>\n some(schedulesToRemove, (scheduleToRemove: Schedule) => isEqual(schedule, scheduleToRemove))\n );\n schedules.push.apply(schedules, schedulesToAdd);\n exp.c8y_ScheduleConfiguration = schedules;\n const { data, res } = await this.inventoryService.update(exp);\n if (res.status === 200) {\n success = await this.reschedule(exportId);\n } else {\n this.alertService.addServerFailure({ data, res });\n }\n\n return success;\n }\n\n async reschedule(exportId: IdReference) {\n const options: IFetchOptions = {\n method: 'PUT',\n headers: this.headers\n };\n const rescheduling = await this.client.fetch(`${this.microserviceUrl}/${exportId}`, options);\n return rescheduling.status === 200;\n }\n\n async deleteSchedule(schedule: Schedule, exportId: IdReference) {\n return await this.updateSchedules(exportId, [schedule], []);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { CronConfig, Base } from './export-schedules.interface';\nimport { TranslateService } from '@ngx-translate/core';\nimport { formatDate } from '@angular/common';\nimport { gettext } from '@c8y/ngx-components';\n\n@Injectable()\nexport class CronService {\n daysOfWeekPosix: any[] = [];\n daysOfMonth = [\n { value: '1', label: '1.' },\n { value: '2', label: '2.' },\n { value: '3', label: '3.' },\n { value: '4', label: '4.' },\n { value: '5', label: '5.' },\n { value: '6', label: '6.' },\n { value: '7', label: '7.' },\n { value: '8', label: '8.' },\n { value: '9', label: '9.' },\n { value: '10', label: '10.' },\n { value: '11', label: '11.' },\n { value: '12', label: '12.' },\n { value: '13', label: '13.' },\n { value: '14', label: '14.' },\n { value: '15', label: '15.' },\n { value: '16', label: '16.' },\n { value: '17', label: '17.' },\n { value: '18', label: '18.' },\n { value: '19', label: '19.' },\n { value: '20', label: '20.' },\n { value: '21', label: '21.' },\n { value: '22', label: '22.' },\n { value: '23', label: '23.' },\n { value: '24', label: '24.' },\n { value: '25', label: '25.' },\n { value: '26', label: '26.' },\n { value: '27', label: '27.' },\n { value: '28', label: '28.' },\n { value: '29', label: '29.' },\n { value: '30', label: '30.' },\n { value: '31', label: '31.' }\n ];\n months: any[] = [];\n hours: any[] = [];\n minutes: any[] = [];\n intervals = [\n { value: 2, label: gettext('Hour') },\n { value: 3, label: gettext('Day') },\n { value: 4, label: gettext('Week') },\n { value: 5, label: gettext('Month') },\n { value: 6, label: gettext('Year') }\n ];\n constructor(private translateService: TranslateService) {\n for (let x = 0; x < 24; x++) {\n this.hours.push({ value: x.toString(), label: `${x}` });\n }\n for (let x = 0; x < 60; x = x + 5) {\n this.minutes.push({ value: x.toString(), label: `${x}` });\n }\n\n for (let x = 0; x < 7; x++) {\n this.daysOfWeekPosix.push({\n value: x.toString(),\n label: this.getWeekDayName(({ weekday: x } as unknown) as CronConfig)\n });\n }\n\n for (let x = 1; x < 13; x++) {\n this.months.push({\n value: x.toString(),\n label: this.getMonthName(({ month: x } as unknown) as CronConfig)\n });\n }\n }\n\n generateCron(cronConfig: CronConfig) {\n let cron: string = '';\n cron = cronConfig.minute ? `${cronConfig.minute}` : '*';\n cron += cronConfig.hour ? ` ${cronConfig.hour}` : ' *';\n cron += cronConfig.day ? ` ${cronConfig.day}` : ' *';\n cron += cronConfig.month ? ` ${cronConfig.month}` : ' *';\n cron += cronConfig.weekday ? ` ${cronConfig.weekday}` : ' *';\n\n return cron;\n }\n\n generateCronConfig(cron: string) {\n const parts = cron.split(/\\s+/);\n const cronConfig: CronConfig = {\n minute: parts[0],\n hour: parts[1],\n day: parts[2],\n month: parts[3],\n weekday: parts[4]\n };\n\n return cronConfig;\n }\n\n getBase(cronConfig: CronConfig) {\n let base: Base = Base.Initial;\n\n if (\n cronConfig.minute !== '*' &&\n cronConfig.hour === '*' &&\n cronConfig.day === '*' &&\n cronConfig.month === '*' &&\n cronConfig.weekday === '*'\n ) {\n base = Base.Hour;\n } else if (\n cronConfig.minute !== '*' &&\n cronConfig.hour !== '*' &&\n cronConfig.day === '*' &&\n cronConfig.month === '*' &&\n cronConfig.weekday === '*'\n ) {\n base = Base.Day;\n } else if (\n cronConfig.minute !== '*' &&\n cronConfig.hour !== '*' &&\n cronConfig.day === '*' &&\n cronConfig.month === '*' &&\n cronConfig.weekday !== '*'\n ) {\n base = Base.Week;\n } else if (\n cronConfig.minute !== '*' &&\n cronConfig.hour !== '*' &&\n cronConfig.day !== '*' &&\n cronConfig.month === '*' &&\n cronConfig.weekday === '*'\n ) {\n base = Base.Month;\n } else if (\n cronConfig.minute !== '*' &&\n cronConfig.hour !== '*' &&\n cronConfig.day !== '*' &&\n cronConfig.month !== '*' &&\n cronConfig.weekday === '*'\n ) {\n base = Base.Year;\n } else {\n // cronConfig invalid\n }\n\n return base;\n }\n\n validateModels(base: Base, cronConfig: CronConfig) {\n let valid: boolean;\n switch (base) {\n case Base.Initial: // Please select\n valid = false;\n break;\n case Base.Hour:\n if (cronConfig.minute !== '*') {\n valid = true;\n } else {\n valid = false;\n }\n break;\n case Base.Day:\n if (cronConfig.minute !== '*' && cronConfig.hour !== '*') {\n valid = true;\n } else {\n valid = false;\n }\n break;\n case Base.Week:\n if (cronConfig.minute !== '*' && cronConfig.hour !== '*' && cronConfig.weekday !== '*') {\n valid = true;\n } else {\n valid = false;\n }\n break;\n case Base.Month:\n if (cronConfig.minute !== '*' && cronConfig.hour !== '*' && cronConfig.day !== '*') {\n valid = true;\n } else {\n valid = false;\n }\n break;\n case Base.Year:\n if (\n cronConfig.minute !== '*' &&\n cronConfig.hour !== '*' &&\n cronConfig.day !== '*' &&\n cronConfig.month !== '*'\n ) {\n valid = true;\n } else {\n valid = false;\n }\n break;\n default:\n valid = false;\n }\n\n return valid;\n }\n\n clearNextModels(base: Base, cronConfig: CronConfig) {\n if (base === Base.Initial) {\n // please select, delete all\n // cron expression: every minute at second 0\n cronConfig.minute = '*';\n cronConfig.hour = '*';\n cronConfig.day = '*';\n cronConfig.month = '*';\n cronConfig.weekday = '*';\n } else if (base === Base.Hour) {\n // hour, don't delete minutes\n // cron expression: every hour, at whatever minute, at second 0\n cronConfig.minute = cronConfig.minute === '*' ? this.minutes[0].value : cronConfig.minute;\n cronConfig.hour = '*';\n cronConfig.day = '*';\n cronConfig.month = '*';\n cronConfig.weekday = '*';\n } else if (base === Base.Day) {\n // day, don't delete minutes and hours\n // cron expression: every day of every month, at whatever hour and minute, at second 0\n cronConfig.minute = cronConfig.minute === '*' ? this.minutes[0].value : cronConfig.minute;\n cronConfig.hour = cronConfig.hour === '*' ? this.hours[0].value : cronConfig.hour;\n cronConfig.day = '*';\n cronConfig.month = '*';\n cronConfig.weekday = '*';\n } else if (base === Base.Week) {\n // week, delete month and day\n // cron expression: every month, at whatever weekday, hour and minute, at second 0\n cronConfig.minute = cronConfig.minute === '*' ? this.minutes[0].value : cronConfig.minute;\n cronConfig.hour = cronConfig.hour === '*' ? this.hours[0].value : cronConfig.hour;\n cronConfig.day = '*';\n cronConfig.month = '*';\n cronConfig.weekday = cronConfig.weekday === '*' || cronConfig.weekday === '?' ? this.daysOfWeekPosix[0].value : cronConfig.weekday ;\n } else if (base === Base.Month) {\n // month, delete month and weekday\n // cron expression: every month, at whatever day of month, hour and minute, at second 0\n cronConfig.minute = cronConfig.minute === '*' ? this.minutes[0].value : cronConfig.minute;\n cronConfig.hour = cronConfig.hour === '*' ? this.hours[0].value : cronConfig.hour;\n cronConfig.day = cronConfig.day === '*' ? this.daysOfMonth[0].value : cronConfig.day;\n cronConfig.month = '*';\n cronConfig.weekday = '*';\n } else if (base === Base.Year) {\n // year, delete weekday\n // cron expression: every year, at whatever month, day of month, hour and minute, at second 0\n cronConfig.minute = cronConfig.minute === '*' ? this.minutes[0].value : cronConfig.minute;\n cronConfig.hour = cronConfig.hour === '*' ? this.hours[0].value : cronConfig.hour;\n cronConfig.day = cronConfig.day === '*' ? this.daysOfMonth[0].value : cronConfig.day;\n cronConfig.month = cronConfig.month === '*' ? this.months[0].value : cronConfig.month;\n cronConfig.weekday = '*';\n }\n }\n\n getWeekDayName(cronConfig: CronConfig) {\n const date = new Date(0);\n const firstSundayDate = date.getDate() + 3; // because we know date 0 was on Thursday...\n date.setDate(firstSundayDate + parseInt(cronConfig.weekday, 10));\n return formatDate(date, 'EEEE', this.translateService.currentLang);\n }\n\n getMonthDayName(cronConfig: CronConfig) {\n let name = '';\n this.daysOfMonth.forEach(item => {\n if (item.value === cronConfig.day) {\n name = item.label;\n }\n });\n\n return name;\n }\n\n getMonthName(cronConfig: CronConfig) {\n const date = new Date(0);\n date.setMonth(parseInt(cronConfig.month, 10) - 1);\n return formatDate(date, 'LLLL', this.translateService.currentLang);\n }\n}\n","import { Component, OnInit, Output, EventEmitter } from '@angular/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { Schedule, ActionType } from './export-schedules.interface';\nimport { EmittedCron, EmitterPayload } from './export-schedules.interface';\nimport { CronService } from './cron.service';\nimport { cloneDeep } from 'lodash-es';\nimport { gettext } from '@c8y/ngx-components';\nimport { ReportsService } from './reports.service';\n\n@Component({\n selector: 'schedule-modal',\n templateUrl: './schedule-modal.component.html'\n})\nexport class ScheduleModalComponent implements OnInit {\n schedule: Schedule;\n oldSchedule: Schedule;\n @Output() emitter: EventEmitter<EmitterPayload> = new EventEmitter();\n exportId: number;\n actionType: ActionType;\n ActionType = ActionType;\n cronExpression: string = '* * * * *';\n validCron: boolean = false;\n emitterPayload: EmitterPayload = {\n success: false,\n message: '',\n schedule: { timestamp: undefined, emailConfig: undefined, cronConfig: undefined }\n };\n\n emailTo: string;\n emailCc: string;\n emailBcc: string;\n emailReplyTo: string;\n emailSubject: string;\n emailText: string;\n\n placeholdersInfo = gettext(\n 'Available placeholders: {tenant-domain}, {host}, {binaryId}. Whole link to downloadable file is: {tenant-domain}/inventory/binaries/{binaryId}.'\n );\n\n constructor(\n public reportsService: ReportsService,\n public modalRef: BsModalRef,\n private cronService: CronService\n ) {}\n\n ngOnInit() {\n this.oldSchedule = cloneDeep(this.schedule);\n this.populateEmailFieldsFromSchedule(this.schedule);\n this.cronExpression = this.cronService.generateCron(this.schedule.cronConfig);\n this.validCron = this.cronService.validateModels(\n this.cronService.getBase(this.schedule.cronConfig),\n this.schedule.cronConfig\n );\n }\n\n populateEmailFieldsFromSchedule(schedule: Schedule) {\n if (schedule.emailConfig.to && schedule.emailConfig.to.length) {\n this.emailTo = schedule.emailConfig.to.toString();\n }\n if (schedule.emailConfig.cc && schedule.emailConfig.cc.length) {\n this.emailCc = schedule.emailConfig.cc.toString();\n }\n if (schedule.emailConfig.bcc && schedule.emailConfig.bcc.length) {\n this.emailBcc = schedule.emailConfig.bcc.toString();\n }\n if (schedule.emailConfig.replyTo) {\n this.emailReplyTo = schedule.emailConfig.replyTo;\n }\n if (schedule.emailConfig.subject) {\n this.emailSubject = schedule.emailConfig.subject;\n }\n if (schedule.emailConfig.text) {\n this.emailText = schedule.emailConfig.text;\n }\n }\n\n save() {\n this.populateScheduleFromCronExpression();\n this.populateScheduleFromEmailFields();\n if (this.actionType === ActionType.CREATE || this.actionType === ActionType.DUPLICATE) {\n const date = new Date();\n const timestamp = date.getTime();\n this.schedule.timestamp = timestamp;\n }\n this.emitterPayload.success = true;\n this.emitterPayload.schedule = this.schedule;\n this.modalRef.hide();\n // signal to the parent component to update list\n this.emitter.emit(this.emitterPayload);\n }\n\n cancel() {\n this.modalRef.hide();\n }\n\n getCron(cron: EmittedCron) {\n this.validCron = cron.valid;\n if (cron.valid) {\n this.cronExpression = cron.cron;\n }\n }\n\n populateScheduleFromCronExpression() {\n this.schedule.cronConfig = this.cronService.generateCronConfig(this.cronExpression);\n }\n\n convertStringOfEmailsToArray(stringOfEmails: string) {\n const arr = [];\n if (stringOfEmails) {\n const parts = stringOfEmails.split(',');\n parts.forEach(item => {\n if (item) {\n arr.push(item);\n }\n });\n }\n return arr;\n }\n\n populateScheduleFromEmailFields() {\n this.schedule.emailConfig.to = this.emailTo\n ? this.convertStringOfEmailsToArray(this.emailTo)\n : null;\n this.schedule.emailConfig.cc = this.emailCc\n ? this.convertStringOfEmailsToArray(this.emailCc)\n : null;\n this.schedule.emailConfig.bcc = this.emailBcc\n ? this.convertStringOfEmailsToArray(this.emailBcc)\n : null;\n this.schedule.emailConfig.replyTo = this.emailReplyTo;\n this.schedule.emailConfig.subject = this.emailSubject;\n this.schedule.emailConfig.text = this.emailText;\n }\n}\n","import { Component, EventEmitter, Input, OnChanges, OnInit, Output } from '@angular/core';\nimport { Export, Schedule, EmitterPayload, ActionType } from './export-schedules.interface';\nimport { ReportsService } from './reports.service';\nimport { BsModalService, BsModalRef, ModalOptions } from 'ngx-bootstrap/modal';\nimport { ScheduleModalComponent } from './schedule-modal.component';\nimport { ConfirmModalComponent, Status, gettext, OptionsService } from '@c8y/ngx-components';\nimport { cloneDeep } from 'lodash-es';\nimport { CronService } from './cron.service';\nimport { IdReference } from '@c8y/client';\nimport { TranslateService } from '@ngx-translate/core';\nimport { UserService } from '@c8y/client';\n@Component({\n selector: 'export-schedules',\n templateUrl: './export-schedules.component.html'\n})\nexport class ExportSchedulesComponent implements OnInit, OnChanges {\n @Input() set exportId(exportId: IdReference) {\n this._exportId = exportId;\n }\n\n @Output() onSchedulesUpdate = new EventEmitter<Schedule[]>();\n\n exp: Export;\n scheduleList: Schedule[] = [];\n initialSchedule: Schedule = {\n timestamp: null,\n emailConfig: {\n to: [],\n cc: [],\n bcc: [],\n replyTo: '',\n text: '',\n subject: ''\n },\n cronConfig: {\n minute: '0',\n hour: '0',\n day: '1',\n month: '1',\n weekday: '?'\n }\n };\n buttonLabels: any;\n listClass: string = 'interact-list';\n loadingStatus: any;\n sortType: string;\n sortReverse: boolean = false;\n isOpen: any = {};\n isFlipped: boolean;\n isEditMenuOpen: boolean = false;\n modalRef: BsModalRef;\n currentUserEmail: string = '';\n hasRequiredRole: boolean = false;\n private _exportId: IdReference;\n private defaultExportEmailTemplate = this.translateService.instant(\n gettext(\n 'File with exported data can be downloaded from {tenant-domain}/inventory/binaries/{binaryId}.'\n )\n );\n\n constructor(\n private reportsService: ReportsService,\n private bsModalService: BsModalService,\n public cronService: CronService,\n private translateService: TranslateService,\n private userService: UserService,\n private optionsService: OptionsService\n ) {\n this.loadingStatus = {\n inProgress: false,\n done: false,\n error: false\n };\n }\n\n async ngOnInit() {\n this.hasRequiredRole = await this.checkRole();\n this.getScheduleList(true);\n const currentUserEmail = await this.getCurrentUserEmail();\n this.initialSchedule.emailConfig.text = await this.optionsService.getTenantOption(\n 'configuration',\n 'export.data.mail.text',\n this.defaultExportEmailTemplate);\n this.initialSchedule.emailConfig.to = currentUserEmail;\n this.exp = await this.reportsService.getExport(this._exportId);\n this.initialSchedule.emailConfig.subject = this.translateService.instant(\n gettext('Export of \"{{expName}}\"'),\n { expName: this.exp.name }\n );\n }\n\n ngOnChanges() {\n this.translateButtonTitles();\n }\n\n translateButtonTitles() {\n this.buttonLabels = {\n edit: this.translateService.instant(gettext('Edit schedule')),\n editNoPermission: this.translateService.instant(gettext('Edit schedule - no permissions')),\n duplicate: this.translateService.instant(gettext('Duplicate schedule')),\n duplicateNoPermission: this.translateService.instant(gettext('Duplicate schedule - no permissions')),\n delete: this.translateService.instant(gettext('Delete schedule')),\n deleteNoPermission: this.translateService.instant(gettext('Delete schedule - no permissions'))\n };\n }\n\n async getCurrentUserEmail() {\n const { data } = await this.userService.current();\n return data && data.email ? [data.email] : [];\n }\n async checkRole() {\n const { data } = await this.userService.current();\n const role = 'ROLE_SCHEDULE_REPORT_ADMIN';\n const hasRole = this.userService.hasRole(data, role);\n return hasRole;\n }\n\n async getScheduleList(withProgress: boolean) {\n if (withProgress) {\n this.loadingStatus.inProgress = true;\n }\n this.scheduleList = await this.reportsService.getScheduleList(this._exportId);\n if (withProgress) {\n this.loadingStatus.inProgress = false;\n }\n }\n\n addSchedule() {\n this.openAddEditModal(this._exportId, this.initialSchedule, ActionType.CREATE);\n }\n\n editSchedule(schedule: Schedule, index: number, event: any) {\n if (this.hasRequiredRole) {\n event.preventDefault();\n this.openAddEditModal(this._exportId, schedule, ActionType.EDIT, index);\n }\n }\n\n duplicateSchedule(schedule: Schedule, event: any) {\n event.preventDefault();\n this.openAddEditModal(this._exportId, schedule, ActionType.DUPLICATE);\n }\n\n openAddEditModal(exportId: IdReference, schedule: Schedule, actionType: ActionType, index?: number) {\n const payload = { actionType, exportId, schedule: cloneDeep(schedule) };\n const modalOptions = { class: 'modal-sm', initialState: payload } as ModalOptions;\n this.modalRef = this.bsModalService.show(ScheduleModalComponent, modalOptions);\n this.modalRef.content.emitter.subscribe((load: EmitterPayload) =>\n this.getMessageFromModal(load, index)\n );\n }\n\n getMessageFromModal(payload: EmitterPayload, index?: number) {\n if (payload.success) {\n if (index !== undefined) {\n this.scheduleList[index] = payload.schedule;\n } else {\n this.scheduleList.push(payload.schedule);\n }\n this.onSchedulesUpdate.emit(this.scheduleList);\n }\n }\n\n removeSchedule(schedule: Schedule, index: number, event: any) {\n event.preventDefault();\n this.scheduleList.splice(index, 1);\n this.onSchedulesUpdate.emit(this.scheduleList);\n }\n}\n","import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';\nimport { EmittedCron, CronConfig, Base } from './export-schedules.interface';\nimport { CronService } from './cron.service';\n\n@Component({\n selector: 'cron',\n templateUrl: './cron.component.html'\n})\nexport class CronComponent implements OnInit {\n @Input() cronIn: string;\n @Output() emitter: EventEmitter<EmittedCron> = new EventEmitter();\n emittedCron: EmittedCron = {\n valid: false,\n cron: ''\n };\n\n base: Base = Base.Initial;\n cronConfig: CronConfig;\n\n daysOfWeekPosix: any[];\n daysOfMonth: any[];\n months: any[];\n hours: any[];\n minutes: any[];\n intervals: any[];\n\n constructor(private cronService: CronService) {\n //\n }\n\n ngOnInit() {\n this.daysOfWeekPosix = this.cronService.daysOfWeekPosix;\n this.daysOfMonth = this.cronService.daysOfMonth;\n this.months = this.cronService.months;\n this.hours = this.cronService.hours;\n this.minutes = this.cronService.minutes;\n this.intervals = this.cronService.intervals;\n\n this.cronConfig = this.cronService.generateCronConfig(this.cronIn);\n this.base = this.cronService.getBase(this.cronConfig);\n }\n\n onChangeSelect() {\n this.cronService.clearNextModels(this.base, this.cronConfig);\n this.emittedCron.valid = this.cronService.validateModels(this.base, this.cronConfig);\n this.emittedCron.cron = this.cronService.generateCron(this.cronConfig);\n this.emitter.emit(this.emittedCron);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CoreModule, FormsModule } from '@c8y/ngx-components';\nimport { ReportsService } from './reports.service';\nimport { CronService } from './cron.service';\nimport { ExportSchedulesComponent } from './export-schedules.component';\nimport { ScheduleModalComponent } from './schedule-modal.component';\nimport { CronComponent } from './cron.component';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\n\n/**\n * The angular module definition for reports.\n * @exports ExportSchedulesComponent\n * @exports ScheduleModalComponent\n * @exports CronComponent\n */\n@NgModule({\n declarations: [ExportSchedulesComponent, ScheduleModalComponent, CronComponent],\n imports: [CoreModule, FormsModule, BsDropdownModule, TooltipModule],\n entryComponents: [ExportSchedulesComponent, ScheduleModalComponent, CronComponent],\n providers: [ReportsService, CronService],\n exports: [ExportSchedulesComponent, ScheduleModalComponent, CronComponent]\n})\nexport class ReportsModule {}\n","import { downgradeComponent } from '@angular/upgrade/static';\nimport { ExportSchedulesComponent } from '../export-schedules.component';\nexport const exportSchedulesComponent = downgradeComponent({\n component: ExportSchedulesComponent\n});\n","import { downgradeInjectable } from '@angular/upgrade/static';\nimport { ReportsService } from '..';\nexport const reportsService = downgradeInjectable(ReportsService);\n","import * as angular from 'angular';\nimport { registerNgModule } from '@c8y/ng1-modules/core/bootstrap';\nimport { exportSchedulesComponent } from './downgraded.components';\nimport { reportsService } from './downgraded.services';\n\nconst NAME = 'c8y.upgrade.reports';\n\nconst angularJsModule = angular\n .module(NAME, [])\n .directive('c8yExportSchedules', exportSchedulesComponent)\n .service('c8yReportsService', reportsService);\n\nexport const ng1Modules = [NAME];\n\nregisterNgModule(ng1Modules);\n"]}
|
|
1
|
+
{"version":3,"sources":["../../node_modules/tslib/tslib.es6.js","../../reports/export-schedules.interface.ts","../../reports/reports.service.ts","../../reports/cron.service.ts","../../reports/schedule-modal.component.ts","../../reports/export-schedules.component.ts","../../reports/cron.component.ts","../../reports/reports.module.ts","../../reports/ng1/downgraded.components.ts","../../reports/ng1/downgraded.services.ts","../../reports/ng1/index.ts"],"names":["__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","__generator","body","f","y","t","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","this","n","v","op","TypeError","call","pop","length","push","ActionType","Base","ReportsService","alertService","inventoryService","client","microserviceUrl","headers","Content-Type","prototype","getExport","exportId","detail","exportDetail","_a","data","res","status","addServerFailure","exp","getScheduleList","extractScheduleListFromExport","scheduleList","c8y_ScheduleConfiguration","orderBy","addSchedule","schedule","updateSchedules","updateSchedule","oldSchedule","schedulesToRemove","schedulesToAdd","success","_b","schedules","remove","some","scheduleToRemove","isEqual","update","reschedule","options","method","fetch","deleteSchedule","removeConfiguration","config","url","id","Injectable","AlertService","InventoryService","FetchClient","CronService","translateService","daysOfWeekPosix","daysOfMonth","months","hours","minutes","intervals","gettext","x","toString","getWeekDayName","weekday","getMonthName","month","generateCron","cronConfig","cron","minute","hour","day","generateCronConfig","parts","split","getBase","base","Initial","Hour","Day","Week","Month","Year","validateModels","valid","clearNextModels","date","Date","firstSundayDate","getDate","setDate","parseInt","formatDate","currentLang","getMonthDayName","name","forEach","item","setMonth","TranslateService","ScheduleModalComponent","reportsService","modalRef","cronService","emitter","EventEmitter","cronExpression","validCron","emitterPayload","message","timestamp","undefined","emailConfig","placeholdersInfo","ngOnInit","cloneDeep","populateEmailFieldsFromSchedule","to","emailTo","cc","emailCc","bcc","emailBcc","replyTo","emailReplyTo","subject","emailSubject","text","emailText","save","populateScheduleFromCronExpression","populateScheduleFromEmailFields","actionType","CREATE","DUPLICATE","getTime","hide","emit","cancel","getCron","convertStringOfEmailsToArray","stringOfEmails","arr","Component","args","selector","template","BsModalRef","Output","ExportSchedulesComponent","bsModalService","userService","optionsService","onSchedulesUpdate","initialSchedule","listClass","sortReverse","isOpen","isEditMenuOpen","currentUserEmail","hasRequiredRole","defaultExportEmailTemplate","instant","loadingStatus","inProgress","error","Object","defineProperty","_exportId","checkRole","_d","getCurrentUserEmail","getTenantOption","_c","expName","ngOnChanges","translateButtonTitles","buttonLabels","edit","editNoPermission","duplicate","duplicateNoPermission","delete","deleteNoPermission","current","email","hasRole","withProgress","openAddEditModal","editSchedule","index","event","preventDefault","EDIT","duplicateSchedule","_this","modalOptions","class","initialState","show","content","subscribe","load","getMessageFromModal","payload","removeSchedule","splice","BsModalService","UserService","OptionsService","Input","CronComponent","emittedCron","cronIn","onChangeSelect","NgModule","declarations","imports","CoreModule","FormsModule","BsDropdownModule","TooltipModule","entryComponents","providers","exports","exportSchedulesComponent","downgradeComponent","component","downgradeInjectable","NAME","ng1Modules","angular","module","directive","service","registerNgModule"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","import { IManagedObject } from '@c8y/client';\n\nexport interface Export extends IManagedObject {\n c8y_ScheduleConfiguration: Schedule[];\n}\n\nexport interface Schedule {\n timestamp: number;\n emailConfig: EmailConfig;\n cronConfig: CronConfig;\n}\n\nexport interface EmailConfig {\n to: string[];\n cc: string[];\n bcc: string[];\n replyTo: string;\n text: string;\n subject: string;\n}\n\nexport interface CronConfig {\n month: string;\n hour: string;\n weekday: string;\n day: string;\n minute: string;\n}\n\nexport interface EmittedCron {\n cron: string;\n valid: boolean;\n}\n\nexport interface EmitterPayload {\n success: boolean;\n message: string;\n schedule: Schedule;\n}\n\nexport enum ActionType {\n CREATE = 'create',\n EDIT = 'edit',\n DUPLICATE = 'duplicate'\n}\n\nexport enum Base {\n Initial = 1,\n Hour,\n Day,\n Week,\n Month,\n Year\n}\n","import { Injectable } from '@angular/core';\nimport { Export, Schedule } from './export-schedules.interface';\nimport { AlertService } from '@c8y/ngx-components';\nimport { orderBy, isEqual, remove, some } from 'lodash-es';\nimport {InventoryService, IdReference, IFetchResponse, IIdentified} from '@c8y/client';\nimport { FetchClient, IFetchOptions } from '@c8y/client';\n\n@Injectable()\nexport class ReportsService {\n microserviceUrl: string;\n headers: any;\n\n constructor(\n private alertService: AlertService,\n private inventoryService: InventoryService,\n private client: FetchClient\n ) {\n this.microserviceUrl = '/service/reporting';\n this.headers = { 'Content-Type': 'application/json' };\n }\n\n async getExport(exportId: IdReference) {\n let exp: Export;\n const exportDetail = await this.inventoryService.detail(exportId);\n const { data, res } = exportDetail;\n if (res.status !== 200) {\n this.alertService.addServerFailure({ data, res });\n } else {\n exp = data ? ((data as unknown) as Export) : ({} as Export);\n }\n\n return exp;\n }\n\n async getScheduleList(exportId: IdReference) {\n const exp = await this.getExport(exportId);\n\n return this.extractScheduleListFromExport(exp);\n }\n\n extractScheduleListFromExport(exp: Export) {\n let scheduleList: Schedule[];\n if (exp) {\n scheduleList = exp.c8y_ScheduleConfiguration ? exp.c8y_ScheduleConfiguration : [];\n }\n return orderBy(scheduleList, ['timestamp'], ['desc']);\n }\n\n async addSchedule(schedule: Schedule, exportId: IdReference) {\n return await this.updateSchedules(exportId, [], [schedule]);\n }\n\n async updateSchedule(oldSchedule: Schedule, schedule: Schedule, exportId: IdReference) {\n return await this.updateSchedules(exportId, [oldSchedule], [schedule]);\n }\n\n async updateSchedules(\n exportId: IdReference,\n schedulesToRemove: Schedule[] = [],\n schedulesToAdd: Schedule[] = []\n ) {\n let success: boolean = false;\n const exp = await this.getExport(exportId);\n const schedules = this.extractScheduleListFromExport(exp);\n\n remove(schedules, (schedule: Schedule) =>\n some(schedulesToRemove, (scheduleToRemove: Schedule) => isEqual(schedule, scheduleToRemove))\n );\n schedules.push.apply(schedules, schedulesToAdd);\n exp.c8y_ScheduleConfiguration = schedules;\n const { data, res } = await this.inventoryService.update(exp);\n if (res.status === 200) {\n success = await this.reschedule(exportId);\n } else {\n this.alertService.addServerFailure({ data, res });\n }\n\n return success;\n }\n\n async reschedule(exportId: IdReference) {\n const options: IFetchOptions = {\n method: 'PUT',\n headers: this.headers\n };\n const rescheduling = await this.client.fetch(`${this.microserviceUrl}/schedule/${exportId}`, options);\n return rescheduling.status === 200;\n }\n\n async deleteSchedule(schedule: Schedule, exportId: IdReference) {\n return await this.updateSchedules(exportId, [schedule], []);\n }\n\n async removeConfiguration(config: IIdentified): Promise<IFetchResponse> {\n const url = `${this.microserviceUrl}/config/${config.id}`;\n return await this.client.fetch(url, { method: 'DELETE' });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { CronConfig, Base } from './export-schedules.interface';\nimport { TranslateService } from '@ngx-translate/core';\nimport { formatDate } from '@angular/common';\nimport { gettext } from '@c8y/ngx-components';\n\n@Injectable()\nexport class CronService {\n daysOfWeekPosix: any[] = [];\n daysOfMonth = [\n { value: '1', label: '1.' },\n { value: '2', label: '2.' },\n { value: '3', label: '3.' },\n { value: '4', label: '4.' },\n { value: '5', label: '5.' },\n { value: '6', label: '6.' },\n { value: '7', label: '7.' },\n { value: '8', label: '8.' },\n { value: '9', label: '9.' },\n { value: '10', label: '10.' },\n { value: '11', label: '11.' },\n { value: '12', label: '12.' },\n { value: '13', label: '13.' },\n { value: '14', label: '14.' },\n { value: '15', label: '15.' },\n { value: '16', label: '16.' },\n { value: '17', label: '17.' },\n { value: '18', label: '18.' },\n { value: '19', label: '19.' },\n { value: '20', label: '20.' },\n { value: '21', label: '21.' },\n { value: '22', label: '22.' },\n { value: '23', label: '23.' },\n { value: '24', label: '24.' },\n { value: '25', label: '25.' },\n { value: '26', label: '26.' },\n { value: '27', label: '27.' },\n { value: '28', label: '28.' },\n { value: '29', label: '29.' },\n { value: '30', label: '30.' },\n { value: '31', label: '31.' }\n ];\n months: any[] = [];\n hours: any[] = [];\n minutes: any[] = [];\n intervals = [\n { value: 2, label: gettext('Hour') },\n { value: 3, label: gettext('Day') },\n { value: 4, label: gettext('Week') },\n { value: 5, label: gettext('Month') },\n { value: 6, label: gettext('Year') }\n ];\n constructor(private translateService: TranslateService) {\n for (let x = 0; x < 24; x++) {\n this.hours.push({ value: x.toString(), label: `${x}` });\n }\n for (let x = 0; x < 60; x = x + 5) {\n this.minutes.push({ value: x.toString(), label: `${x}` });\n }\n\n for (let x = 0; x < 7; x++) {\n this.daysOfWeekPosix.push({\n value: x.toString(),\n label: this.getWeekDayName(({ weekday: x } as unknown) as CronConfig)\n });\n }\n\n for (let x = 1; x < 13; x++) {\n this.months.push({\n value: x.toString(),\n label: this.getMonthName(({ month: x } as unknown) as CronConfig)\n });\n }\n }\n\n generateCron(cronConfig: CronConfig) {\n let cron: string = '';\n cron = cronConfig.minute ? `${cronConfig.minute}` : '*';\n cron += cronConfig.hour ? ` ${cronConfig.hour}` : ' *';\n cron += cronConfig.day ? ` ${cronConfig.day}` : ' *';\n cron += cronConfig.month ? ` ${cronConfig.month}` : ' *';\n cron += cronConfig.weekday ? ` ${cronConfig.weekday}` : ' *';\n\n return cron;\n }\n\n generateCronConfig(cron: string) {\n const parts = cron.split(/\\s+/);\n const cronConfig: CronConfig = {\n minute: parts[0],\n hour: parts[1],\n day: parts[2],\n month: parts[3],\n weekday: parts[4]\n };\n\n return cronConfig;\n }\n\n getBase(cronConfig: CronConfig) {\n let base: Base = Base.Initial;\n\n if (\n cronConfig.minute !== '*' &&\n cronConfig.hour === '*' &&\n cronConfig.day === '*' &&\n cronConfig.month === '*' &&\n cronConfig.weekday === '*'\n ) {\n base = Base.Hour;\n } else if (\n cronConfig.minute !== '*' &&\n cronConfig.hour !== '*' &&\n cronConfig.day === '*' &&\n cronConfig.month === '*' &&\n cronConfig.weekday === '*'\n ) {\n base = Base.Day;\n } else if (\n cronConfig.minute !== '*' &&\n cronConfig.hour !== '*' &&\n cronConfig.day === '*' &&\n cronConfig.month === '*' &&\n cronConfig.weekday !== '*'\n ) {\n base = Base.Week;\n } else if (\n cronConfig.minute !== '*' &&\n cronConfig.hour !== '*' &&\n cronConfig.day !== '*' &&\n cronConfig.month === '*' &&\n cronConfig.weekday === '*'\n ) {\n base = Base.Month;\n } else if (\n cronConfig.minute !== '*' &&\n cronConfig.hour !== '*' &&\n cronConfig.day !== '*' &&\n cronConfig.month !== '*' &&\n cronConfig.weekday === '*'\n ) {\n base = Base.Year;\n } else {\n // cronConfig invalid\n }\n\n return base;\n }\n\n validateModels(base: Base, cronConfig: CronConfig) {\n let valid: boolean;\n switch (base) {\n case Base.Initial: // Please select\n valid = false;\n break;\n case Base.Hour:\n if (cronConfig.minute !== '*') {\n valid = true;\n } else {\n valid = false;\n }\n break;\n case Base.Day:\n if (cronConfig.minute !== '*' && cronConfig.hour !== '*') {\n valid = true;\n } else {\n valid = false;\n }\n break;\n case Base.Week:\n if (cronConfig.minute !== '*' && cronConfig.hour !== '*' && cronConfig.weekday !== '*') {\n valid = true;\n } else {\n valid = false;\n }\n break;\n case Base.Month:\n if (cronConfig.minute !== '*' && cronConfig.hour !== '*' && cronConfig.day !== '*') {\n valid = true;\n } else {\n valid = false;\n }\n break;\n case Base.Year:\n if (\n cronConfig.minute !== '*' &&\n cronConfig.hour !== '*' &&\n cronConfig.day !== '*' &&\n cronConfig.month !== '*'\n ) {\n valid = true;\n } else {\n valid = false;\n }\n break;\n default:\n valid = false;\n }\n\n return valid;\n }\n\n clearNextModels(base: Base, cronConfig: CronConfig) {\n if (base === Base.Initial) {\n // please select, delete all\n // cron expression: every minute at second 0\n cronConfig.minute = '*';\n cronConfig.hour = '*';\n cronConfig.day = '*';\n cronConfig.month = '*';\n cronConfig.weekday = '*';\n } else if (base === Base.Hour) {\n // hour, don't delete minutes\n // cron expression: every hour, at whatever minute, at second 0\n cronConfig.minute = cronConfig.minute === '*' ? this.minutes[0].value : cronConfig.minute;\n cronConfig.hour = '*';\n cronConfig.day = '*';\n cronConfig.month = '*';\n cronConfig.weekday = '*';\n } else if (base === Base.Day) {\n // day, don't delete minutes and hours\n // cron expression: every day of every month, at whatever hour and minute, at second 0\n cronConfig.minute = cronConfig.minute === '*' ? this.minutes[0].value : cronConfig.minute;\n cronConfig.hour = cronConfig.hour === '*' ? this.hours[0].value : cronConfig.hour;\n cronConfig.day = '*';\n cronConfig.month = '*';\n cronConfig.weekday = '*';\n } else if (base === Base.Week) {\n // week, delete month and day\n // cron expression: every month, at whatever weekday, hour and minute, at second 0\n cronConfig.minute = cronConfig.minute === '*' ? this.minutes[0].value : cronConfig.minute;\n cronConfig.hour = cronConfig.hour === '*' ? this.hours[0].value : cronConfig.hour;\n cronConfig.day = '*';\n cronConfig.month = '*';\n cronConfig.weekday = cronConfig.weekday === '*' || cronConfig.weekday === '?' ? this.daysOfWeekPosix[0].value : cronConfig.weekday ;\n } else if (base === Base.Month) {\n // month, delete month and weekday\n // cron expression: every month, at whatever day of month, hour and minute, at second 0\n cronConfig.minute = cronConfig.minute === '*' ? this.minutes[0].value : cronConfig.minute;\n cronConfig.hour = cronConfig.hour === '*' ? this.hours[0].value : cronConfig.hour;\n cronConfig.day = cronConfig.day === '*' ? this.daysOfMonth[0].value : cronConfig.day;\n cronConfig.month = '*';\n cronConfig.weekday = '*';\n } else if (base === Base.Year) {\n // year, delete weekday\n // cron expression: every year, at whatever month, day of month, hour and minute, at second 0\n cronConfig.minute = cronConfig.minute === '*' ? this.minutes[0].value : cronConfig.minute;\n cronConfig.hour = cronConfig.hour === '*' ? this.hours[0].value : cronConfig.hour;\n cronConfig.day = cronConfig.day === '*' ? this.daysOfMonth[0].value : cronConfig.day;\n cronConfig.month = cronConfig.month === '*' ? this.months[0].value : cronConfig.month;\n cronConfig.weekday = '*';\n }\n }\n\n getWeekDayName(cronConfig: CronConfig) {\n const date = new Date(0);\n const firstSundayDate = date.getDate() + 3; // because we know date 0 was on Thursday...\n date.setDate(firstSundayDate + parseInt(cronConfig.weekday, 10));\n return formatDate(date, 'EEEE', this.translateService.currentLang);\n }\n\n getMonthDayName(cronConfig: CronConfig) {\n let name = '';\n this.daysOfMonth.forEach(item => {\n if (item.value === cronConfig.day) {\n name = item.label;\n }\n });\n\n return name;\n }\n\n getMonthName(cronConfig: CronConfig) {\n const date = new Date(0);\n date.setMonth(parseInt(cronConfig.month, 10) - 1);\n return formatDate(date, 'LLLL', this.translateService.currentLang);\n }\n}\n","import { Component, OnInit, Output, EventEmitter } from '@angular/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { Schedule, ActionType } from './export-schedules.interface';\nimport { EmittedCron, EmitterPayload } from './export-schedules.interface';\nimport { CronService } from './cron.service';\nimport { cloneDeep } from 'lodash-es';\nimport { gettext } from '@c8y/ngx-components';\nimport { ReportsService } from './reports.service';\n\n@Component({\n selector: 'schedule-modal',\n templateUrl: './schedule-modal.component.html'\n})\nexport class ScheduleModalComponent implements OnInit {\n schedule: Schedule;\n oldSchedule: Schedule;\n @Output() emitter: EventEmitter<EmitterPayload> = new EventEmitter();\n exportId: number;\n actionType: ActionType;\n ActionType = ActionType;\n cronExpression: string = '* * * * *';\n validCron: boolean = false;\n emitterPayload: EmitterPayload = {\n success: false,\n message: '',\n schedule: { timestamp: undefined, emailConfig: undefined, cronConfig: undefined }\n };\n\n emailTo: string;\n emailCc: string;\n emailBcc: string;\n emailReplyTo: string;\n emailSubject: string;\n emailText: string;\n\n placeholdersInfo = gettext(\n 'Available placeholders: {tenant-domain}, {host}, {binaryId}. Whole link to downloadable file is: {tenant-domain}/inventory/binaries/{binaryId}.'\n );\n\n constructor(\n public reportsService: ReportsService,\n public modalRef: BsModalRef,\n private cronService: CronService\n ) {}\n\n ngOnInit() {\n this.oldSchedule = cloneDeep(this.schedule);\n this.populateEmailFieldsFromSchedule(this.schedule);\n this.cronExpression = this.cronService.generateCron(this.schedule.cronConfig);\n this.validCron = this.cronService.validateModels(\n this.cronService.getBase(this.schedule.cronConfig),\n this.schedule.cronConfig\n );\n }\n\n populateEmailFieldsFromSchedule(schedule: Schedule) {\n if (schedule.emailConfig.to && schedule.emailConfig.to.length) {\n this.emailTo = schedule.emailConfig.to.toString();\n }\n if (schedule.emailConfig.cc && schedule.emailConfig.cc.length) {\n this.emailCc = schedule.emailConfig.cc.toString();\n }\n if (schedule.emailConfig.bcc && schedule.emailConfig.bcc.length) {\n this.emailBcc = schedule.emailConfig.bcc.toString();\n }\n if (schedule.emailConfig.replyTo) {\n this.emailReplyTo = schedule.emailConfig.replyTo;\n }\n if (schedule.emailConfig.subject) {\n this.emailSubject = schedule.emailConfig.subject;\n }\n if (schedule.emailConfig.text) {\n this.emailText = schedule.emailConfig.text;\n }\n }\n\n save() {\n this.populateScheduleFromCronExpression();\n this.populateScheduleFromEmailFields();\n if (this.actionType === ActionType.CREATE || this.actionType === ActionType.DUPLICATE) {\n const date = new Date();\n const timestamp = date.getTime();\n this.schedule.timestamp = timestamp;\n }\n this.emitterPayload.success = true;\n this.emitterPayload.schedule = this.schedule;\n this.modalRef.hide();\n // signal to the parent component to update list\n this.emitter.emit(this.emitterPayload);\n }\n\n cancel() {\n this.modalRef.hide();\n }\n\n getCron(cron: EmittedCron) {\n this.validCron = cron.valid;\n if (cron.valid) {\n this.cronExpression = cron.cron;\n }\n }\n\n populateScheduleFromCronExpression() {\n this.schedule.cronConfig = this.cronService.generateCronConfig(this.cronExpression);\n }\n\n convertStringOfEmailsToArray(stringOfEmails: string) {\n const arr = [];\n if (stringOfEmails) {\n const parts = stringOfEmails.split(',');\n parts.forEach(item => {\n if (item) {\n arr.push(item);\n }\n });\n }\n return arr;\n }\n\n populateScheduleFromEmailFields() {\n this.schedule.emailConfig.to = this.emailTo\n ? this.convertStringOfEmailsToArray(this.emailTo)\n : null;\n this.schedule.emailConfig.cc = this.emailCc\n ? this.convertStringOfEmailsToArray(this.emailCc)\n : null;\n this.schedule.emailConfig.bcc = this.emailBcc\n ? this.convertStringOfEmailsToArray(this.emailBcc)\n : null;\n this.schedule.emailConfig.replyTo = this.emailReplyTo;\n this.schedule.emailConfig.subject = this.emailSubject;\n this.schedule.emailConfig.text = this.emailText;\n }\n}\n","import { Component, EventEmitter, Input, OnChanges, OnInit, Output } from '@angular/core';\nimport { Export, Schedule, EmitterPayload, ActionType } from './export-schedules.interface';\nimport { ReportsService } from './reports.service';\nimport { BsModalService, BsModalRef, ModalOptions } from 'ngx-bootstrap/modal';\nimport { ScheduleModalComponent } from './schedule-modal.component';\nimport { ConfirmModalComponent, Status, gettext, OptionsService } from '@c8y/ngx-components';\nimport { cloneDeep } from 'lodash-es';\nimport { CronService } from './cron.service';\nimport { IdReference } from '@c8y/client';\nimport { TranslateService } from '@ngx-translate/core';\nimport { UserService } from '@c8y/client';\n@Component({\n selector: 'export-schedules',\n templateUrl: './export-schedules.component.html'\n})\nexport class ExportSchedulesComponent implements OnInit, OnChanges {\n @Input() set exportId(exportId: IdReference) {\n this._exportId = exportId;\n }\n\n @Output() onSchedulesUpdate = new EventEmitter<Schedule[]>();\n\n exp: Export;\n scheduleList: Schedule[] = [];\n initialSchedule: Schedule = {\n timestamp: null,\n emailConfig: {\n to: [],\n cc: [],\n bcc: [],\n replyTo: '',\n text: '',\n subject: ''\n },\n cronConfig: {\n minute: '0',\n hour: '0',\n day: '1',\n month: '1',\n weekday: '?'\n }\n };\n buttonLabels: any;\n listClass: string = 'interact-list';\n loadingStatus: any;\n sortType: string;\n sortReverse: boolean = false;\n isOpen: any = {};\n isFlipped: boolean;\n isEditMenuOpen: boolean = false;\n modalRef: BsModalRef;\n currentUserEmail: string = '';\n hasRequiredRole: boolean = false;\n private _exportId: IdReference;\n private defaultExportEmailTemplate = this.translateService.instant(\n gettext(\n 'File with exported data can be downloaded from {tenant-domain}/inventory/binaries/{binaryId}.'\n )\n );\n\n constructor(\n private reportsService: ReportsService,\n private bsModalService: BsModalService,\n public cronService: CronService,\n private translateService: TranslateService,\n private userService: UserService,\n private optionsService: OptionsService\n ) {\n this.loadingStatus = {\n inProgress: false,\n done: false,\n error: false\n };\n }\n\n async ngOnInit() {\n this.hasRequiredRole = await this.checkRole();\n this.getScheduleList(true);\n const currentUserEmail = await this.getCurrentUserEmail();\n this.initialSchedule.emailConfig.text = await this.optionsService.getTenantOption(\n 'configuration',\n 'export.data.mail.text',\n this.defaultExportEmailTemplate);\n this.initialSchedule.emailConfig.to = currentUserEmail;\n this.exp = await this.reportsService.getExport(this._exportId);\n this.initialSchedule.emailConfig.subject = this.translateService.instant(\n gettext('Export of \"{{expName}}\"'),\n { expName: this.exp.name }\n );\n }\n\n ngOnChanges() {\n this.translateButtonTitles();\n }\n\n translateButtonTitles() {\n this.buttonLabels = {\n edit: this.translateService.instant(gettext('Edit schedule')),\n editNoPermission: this.translateService.instant(gettext('Edit schedule - no permissions')),\n duplicate: this.translateService.instant(gettext('Duplicate schedule')),\n duplicateNoPermission: this.translateService.instant(gettext('Duplicate schedule - no permissions')),\n delete: this.translateService.instant(gettext('Delete schedule')),\n deleteNoPermission: this.translateService.instant(gettext('Delete schedule - no permissions'))\n };\n }\n\n async getCurrentUserEmail() {\n const { data } = await this.userService.current();\n return data && data.email ? [data.email] : [];\n }\n async checkRole() {\n const { data } = await this.userService.current();\n const role = 'ROLE_SCHEDULE_REPORT_ADMIN';\n const hasRole = this.userService.hasRole(data, role);\n return hasRole;\n }\n\n async getScheduleList(withProgress: boolean) {\n if (withProgress) {\n this.loadingStatus.inProgress = true;\n }\n this.scheduleList = await this.reportsService.getScheduleList(this._exportId);\n if (withProgress) {\n this.loadingStatus.inProgress = false;\n }\n }\n\n addSchedule() {\n this.openAddEditModal(this._exportId, this.initialSchedule, ActionType.CREATE);\n }\n\n editSchedule(schedule: Schedule, index: number, event: any) {\n if (this.hasRequiredRole) {\n event.preventDefault();\n this.openAddEditModal(this._exportId, schedule, ActionType.EDIT, index);\n }\n }\n\n duplicateSchedule(schedule: Schedule, event: any) {\n event.preventDefault();\n this.openAddEditModal(this._exportId, schedule, ActionType.DUPLICATE);\n }\n\n openAddEditModal(exportId: IdReference, schedule: Schedule, actionType: ActionType, index?: number) {\n const payload = { actionType, exportId, schedule: cloneDeep(schedule) };\n const modalOptions = { class: 'modal-sm', initialState: payload } as ModalOptions;\n this.modalRef = this.bsModalService.show(ScheduleModalComponent, modalOptions);\n this.modalRef.content.emitter.subscribe((load: EmitterPayload) =>\n this.getMessageFromModal(load, index)\n );\n }\n\n getMessageFromModal(payload: EmitterPayload, index?: number) {\n if (payload.success) {\n if (index !== undefined) {\n this.scheduleList[index] = payload.schedule;\n } else {\n this.scheduleList.push(payload.schedule);\n }\n this.onSchedulesUpdate.emit(this.scheduleList);\n }\n }\n\n removeSchedule(schedule: Schedule, index: number, event: any) {\n event.preventDefault();\n this.scheduleList.splice(index, 1);\n this.onSchedulesUpdate.emit(this.scheduleList);\n }\n}\n","import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';\nimport { EmittedCron, CronConfig, Base } from './export-schedules.interface';\nimport { CronService } from './cron.service';\n\n@Component({\n selector: 'cron',\n templateUrl: './cron.component.html'\n})\nexport class CronComponent implements OnInit {\n @Input() cronIn: string;\n @Output() emitter: EventEmitter<EmittedCron> = new EventEmitter();\n emittedCron: EmittedCron = {\n valid: false,\n cron: ''\n };\n\n base: Base = Base.Initial;\n cronConfig: CronConfig;\n\n daysOfWeekPosix: any[];\n daysOfMonth: any[];\n months: any[];\n hours: any[];\n minutes: any[];\n intervals: any[];\n\n constructor(private cronService: CronService) {\n //\n }\n\n ngOnInit() {\n this.daysOfWeekPosix = this.cronService.daysOfWeekPosix;\n this.daysOfMonth = this.cronService.daysOfMonth;\n this.months = this.cronService.months;\n this.hours = this.cronService.hours;\n this.minutes = this.cronService.minutes;\n this.intervals = this.cronService.intervals;\n\n this.cronConfig = this.cronService.generateCronConfig(this.cronIn);\n this.base = this.cronService.getBase(this.cronConfig);\n }\n\n onChangeSelect() {\n this.cronService.clearNextModels(this.base, this.cronConfig);\n this.emittedCron.valid = this.cronService.validateModels(this.base, this.cronConfig);\n this.emittedCron.cron = this.cronService.generateCron(this.cronConfig);\n this.emitter.emit(this.emittedCron);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CoreModule, FormsModule } from '@c8y/ngx-components';\nimport { ReportsService } from './reports.service';\nimport { CronService } from './cron.service';\nimport { ExportSchedulesComponent } from './export-schedules.component';\nimport { ScheduleModalComponent } from './schedule-modal.component';\nimport { CronComponent } from './cron.component';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\n\n/**\n * The angular module definition for reports.\n * @exports ExportSchedulesComponent\n * @exports ScheduleModalComponent\n * @exports CronComponent\n */\n@NgModule({\n declarations: [ExportSchedulesComponent, ScheduleModalComponent, CronComponent],\n imports: [CoreModule, FormsModule, BsDropdownModule, TooltipModule],\n entryComponents: [ExportSchedulesComponent, ScheduleModalComponent, CronComponent],\n providers: [ReportsService, CronService],\n exports: [ExportSchedulesComponent, ScheduleModalComponent, CronComponent]\n})\nexport class ReportsModule {}\n","import { downgradeComponent } from '@angular/upgrade/static';\nimport { ExportSchedulesComponent } from '../export-schedules.component';\nexport const exportSchedulesComponent = downgradeComponent({\n component: ExportSchedulesComponent\n});\n","import { downgradeInjectable } from '@angular/upgrade/static';\nimport { ReportsService } from '..';\nexport const reportsService = downgradeInjectable(ReportsService);\n","import * as angular from 'angular';\nimport { registerNgModule } from '@c8y/ng1-modules/core/bootstrap';\nimport { exportSchedulesComponent } from './downgraded.components';\nimport { reportsService } from './downgraded.services';\n\nconst NAME = 'c8y.upgrade.reports';\n\nconst angularJsModule = angular\n .module(NAME, [])\n .directive('c8yExportSchedules', exportSchedulesComponent)\n .service('c8yReportsService', reportsService);\n\nexport const ng1Modules = [NAME];\n\nregisterNgModule(ng1Modules);\n"]}
|
|
@@ -18224,7 +18224,7 @@
|
|
|
18224
18224
|
if (!this.config.max) {
|
|
18225
18225
|
this.config.max = 100;
|
|
18226
18226
|
}
|
|
18227
|
-
if (this.config.fractionSize) {
|
|
18227
|
+
if (this.config.fractionSize !== undefined) {
|
|
18228
18228
|
this.config.current = parseFloat(this.config.current.toFixed(this.config.fractionSize));
|
|
18229
18229
|
}
|
|
18230
18230
|
return this.sanitizer.bypassSecurityTrustStyle("\n --range-min: " + this.config.min + ";\n --range-max: " + this.config.max + ";\n --full-range: " + (this.config.max - this.config.min) + ";\n --measurement-target: " + ((this.config.target - this.config.min) * 100) /
|
|
@@ -18246,7 +18246,7 @@
|
|
|
18246
18246
|
};
|
|
18247
18247
|
RangeDisplayComponent.prototype.rulerCalc = function (index) {
|
|
18248
18248
|
var num = this.config.min + ((this.config.max - this.config.min) / 10) * index;
|
|
18249
|
-
if (this.config.fractionSize) {
|
|
18249
|
+
if (this.config.fractionSize !== undefined) {
|
|
18250
18250
|
return parseFloat(num.toFixed(this.config.fractionSize));
|
|
18251
18251
|
}
|
|
18252
18252
|
return parseFloat(num.toFixed(2));
|