UNPKG

intervention-pages

Version:
91 lines (90 loc) 3.99 kB
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 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; return c > 3 && r && Object.defineProperty(target, key, r), r; }; import { convertDate } from '../../../utils/date-utils'; import { property } from '@polymer/decorators'; /** * @polymer * @mixinFunction */ function GenerateQuarterlyReportingRequirementsMixin(baseClass) { class GenerateQuarterlyRepReqClass extends baseClass { constructor() { super(...arguments); this.DUE_DATE_DAYS_TO_ADD = 30; this.datesFormat = 'YYYY-MM-DD'; } /** * Used to generate (one time) QPR first dates set. * Generation method: * - get pd start date and calculate end date * - end date = last day of the month where month = * (start date day <= 15 ? (start date month + 2) : (start date month + 3)) * - calculate due date = end date + 30 days * - move to next start date = end date + 1 day * - repeat until entire PD timeline is covered * - last QPR end date === intervention end date * @param pdStartDateStr * @param pdEndDateStr * @returns {Array} */ generateQPRData(pdStartDateStr, pdEndDateStr) { const qprData = []; let start = String(pdStartDateStr); let end = this._generateEndDate(start, pdEndDateStr); while (this._generatedEndIsBeforePdEnd(end.format(this.datesFormat), pdEndDateStr)) { // add dates to qpr data list qprData.push(this._getQPRDatesSet(start, end)); // recalculate next dates set start = this._getNextStartDateStr(end); end = this._generateEndDate(start, pdEndDateStr); } // add one more to cover entire PD timeline qprData.push(this._getQPRDatesSet(start, end)); return qprData; } _getQPRDatesSet(start, end) { return { start_date: start, end_date: end.format(this.datesFormat), due_date: this._generateDueDate(end).format(this.datesFormat) }; } _generatedEndIsBeforePdEnd(endDateStr, pdEndStr) { return moment(endDateStr).isBefore(pdEndStr); } _generateEndDate(startStr, pdEndStr) { const d = moment.utc(convertDate(startStr)); let month = d.get('M'); if (d.get('D') <= 15) { month += 2; } else { month += 3; } d.set('M', month); d.endOf('month'); if (d.isAfter(pdEndStr)) { return moment.utc(convertDate(pdEndStr)); } return d; } _generateDueDate(momentEndDate) { return moment(momentEndDate).add(this.DUE_DATE_DAYS_TO_ADD, 'd'); } _getNextStartDateStr(momentEndDate) { return moment(momentEndDate).add(1, 'd').format(this.datesFormat); } } __decorate([ property({ type: Number }) ], GenerateQuarterlyRepReqClass.prototype, "DUE_DATE_DAYS_TO_ADD", void 0); __decorate([ property({ type: String }) ], GenerateQuarterlyRepReqClass.prototype, "datesFormat", void 0); return GenerateQuarterlyRepReqClass; } export default GenerateQuarterlyReportingRequirementsMixin;