Skip to content

Commit

Permalink
Fix: first scheduled_task date is incorrect
Browse files Browse the repository at this point in the history
Closes #73
  • Loading branch information
alxndrsn committed Jun 28, 2018
1 parent f8c1323 commit 5ca201c
Show file tree
Hide file tree
Showing 2 changed files with 3 additions and 3 deletions.
4 changes: 2 additions & 2 deletions src/lib/compile-nools-rules.js
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ function compileWithDefaultLayout(projectDir) {
if(event.dueDate) {
dueDate = event.dueDate(r, event, scheduledTaskIdx);
} else if(scheduledTaskIdx) {
} else if(scheduledTaskIdx !== undefined) {
dueDate = new Date(Utils.addDate(new Date(r.scheduled_tasks[scheduledTaskIdx].due), event.days));
} else {
dueDate = new Date(Utils.addDate(new Date(r.reported_date), event.days));
Expand All @@ -106,7 +106,7 @@ function compileWithDefaultLayout(projectDir) {
actions: schedule.actions.map(initActions),
};
if(scheduledTaskIdx) {
if(scheduledTaskIdx !== undefined) {
task._id += '-' + scheduledTaskIdx;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"contact_summary": "",
"tasks": {
"rules": "define Target {_id: null,deleted: null,type: null,pass: null,date: null}define Contact {contact: null,reports: null}define Task {_id: null,deleted: null,doc: null,contact: null,icon: null,date: null,title: null,fields: null,resolved: null,priority: null,priorityLabel: null,reports: null,actions: null}rule GenerateEvents {when {c: Contact}then {var idx1,idx2,r,target,now=Utils.now(),targets=[{id:'active-pregnancies',appliesToType:'report',appliesIf:function(e,t){return'D'===t.form},date:'now'},{id:'imm-children-registered-this-month',appliesToType:'person',appliesIf:function(e){return e.age_in_months<=60},date:function(e){return e.contact.reported_date}}],tasks=[];if(c.contact&&'person'===c.contact.type){for(idx1=0;idx1<targets.length;++idx1)switch((target=targets[idx1]).appliesToType){case'person':emitPersonBasedTargetFor(c,target);break;case'report':for(idx2=0;idx2<c.reports.length;++idx2)r=c.reports[idx2],emitReportBasedTargetFor(c,r,target);break;default:throw new Error('unrecognised target type: '+target.type)}for(idx1=0;idx1<tasks.length;++idx1)for(idx2=0;idx2<c.reports.length;++idx2)r=c.reports[idx2],emitTasksForSchedule(c,r,tasks[idx1])}function emitTasksForSchedule(d,n,o){var e;if((!o.appliesToForms||-1!==o.appliesToForms.indexOf(n.form))&&(!o.appliesIf||o.appliesIf(d,n)))if(o.appliesToScheduledTaskIf){if(!n.scheduled_tasks)return;for(e=0;e<n.scheduled_tasks.length;e++)o.appliesToScheduledTaskIf(n,e)&&t(e)}else t();function t(e){var t,a,r,i,s;for(t=0;t<o.events.length;t++)a=(r=o.events[t]).dueDate?r.dueDate(n,r,e):e?new Date(Utils.addDate(new Date(n.scheduled_tasks[e].due),r.days)):new Date(Utils.addDate(new Date(n.reported_date),r.days)),Utils.isTimely(a,r)&&(s={_id:n._id+'-'+r.id,deleted:!!(d.contact&&d.contact.deleted||n.deleted),doc:d,contact:d.contact,icon:o.icon,date:a,title:o.title,resolved:o.resolvedIf(d,n,r,a,e),actions:o.actions.map(c)},e&&(s._id+='-'+e),'function'==typeof(i=o.priority)&&(i=i(d,n)),i&&(s.priority=i.level,s.priorityLabel=i.label),emit('task',new Task(s)))}function c(e){return{type:'report',form:e.form,label:e.label||'Follow up',content:{source:'task',source_id:n._id,contact:d.contact}}}}function emitPersonBasedTargetFor(e,t){if(!t.appliesIf||t.appliesIf(e)){var a=!t.passesIf||!!t.passesIf(e),r=createTargetInstance(t.id,e.contact,a);r.date=t.date?t.date(e):now.getTime(),emitTargetInstance(r)}}function emitReportBasedTargetFor(e,t,a){var r,i;if(!a.appliesIf||a.appliesIf(e,t))if(a.emitCustom)a.emitCustom(e,t);else switch(i=!a.passesIf||!!a.passesIf(e,t),(r=createTargetInstance(a.id,t,i))._id=('report'===a.idType?t._id:e.contact._id)+'-'+a.id,emitTargetInstance(r),a.date){case'now':r.date=now.getTime()}}function createTargetInstance(e,t,a){return new Target({_id:t._id+'-'+e,deleted:!!t.deleted,type:e,pass:a,date:t.reported_date})}function createTargetInstance(e,t,a){return new Target({_id:t._id+'-'+e,deleted:!!t.deleted,type:e,pass:a,date:t.reported_date})}function emitTargetInstance(e){emit('target',e)}emit('_complete',{_id:!0});}}",
"rules": "define Target {_id: null,deleted: null,type: null,pass: null,date: null}define Contact {contact: null,reports: null}define Task {_id: null,deleted: null,doc: null,contact: null,icon: null,date: null,title: null,fields: null,resolved: null,priority: null,priorityLabel: null,reports: null,actions: null}rule GenerateEvents {when {c: Contact}then {var idx1,idx2,r,target,now=Utils.now(),targets=[{id:'active-pregnancies',appliesToType:'report',appliesIf:function(e,t){return'D'===t.form},date:'now'},{id:'imm-children-registered-this-month',appliesToType:'person',appliesIf:function(e){return e.age_in_months<=60},date:function(e){return e.contact.reported_date}}],tasks=[];if(c.contact&&'person'===c.contact.type){for(idx1=0;idx1<targets.length;++idx1)switch((target=targets[idx1]).appliesToType){case'person':emitPersonBasedTargetFor(c,target);break;case'report':for(idx2=0;idx2<c.reports.length;++idx2)r=c.reports[idx2],emitReportBasedTargetFor(c,r,target);break;default:throw new Error('unrecognised target type: '+target.type)}for(idx1=0;idx1<tasks.length;++idx1)for(idx2=0;idx2<c.reports.length;++idx2)r=c.reports[idx2],emitTasksForSchedule(c,r,tasks[idx1])}function emitTasksForSchedule(o,d,n){var e;if((!n.appliesToForms||-1!==n.appliesToForms.indexOf(d.form))&&(!n.appliesIf||n.appliesIf(o,d)))if(n.appliesToScheduledTaskIf){if(!d.scheduled_tasks)return;for(e=0;e<d.scheduled_tasks.length;e++)n.appliesToScheduledTaskIf(d,e)&&t(e)}else t();function t(e){var t,a,i,r,s;for(t=0;t<n.events.length;t++)a=(i=n.events[t]).dueDate?i.dueDate(d,i,e):void 0!==e?new Date(Utils.addDate(new Date(d.scheduled_tasks[e].due),i.days)):new Date(Utils.addDate(new Date(d.reported_date),i.days)),Utils.isTimely(a,i)&&(s={_id:d._id+'-'+i.id,deleted:!!(o.contact&&o.contact.deleted||d.deleted),doc:o,contact:o.contact,icon:n.icon,date:a,title:n.title,resolved:n.resolvedIf(o,d,i,a,e),actions:n.actions.map(c)},void 0!==e&&(s._id+='-'+e),'function'==typeof(r=n.priority)&&(r=r(o,d)),r&&(s.priority=r.level,s.priorityLabel=r.label),emit('task',new Task(s)))}function c(e){return{type:'report',form:e.form,label:e.label||'Follow up',content:{source:'task',source_id:d._id,contact:o.contact}}}}function emitPersonBasedTargetFor(e,t){if(!t.appliesIf||t.appliesIf(e)){var a=!t.passesIf||!!t.passesIf(e),i=createTargetInstance(t.id,e.contact,a);i.date=t.date?t.date(e):now.getTime(),emitTargetInstance(i)}}function emitReportBasedTargetFor(e,t,a){var i,r;if(!a.appliesIf||a.appliesIf(e,t))if(a.emitCustom)a.emitCustom(e,t);else switch(r=!a.passesIf||!!a.passesIf(e,t),(i=createTargetInstance(a.id,t,r))._id=('report'===a.idType?t._id:e.contact._id)+'-'+a.id,emitTargetInstance(i),a.date){case'now':i.date=now.getTime()}}function createTargetInstance(e,t,a){return new Target({_id:t._id+'-'+e,deleted:!!t.deleted,type:e,pass:a,date:t.reported_date})}function emitTargetInstance(e){emit('target',e)}emit('_complete',{_id:!0});}}",
"schedules": {
"test": true
},
Expand Down

0 comments on commit 5ca201c

Please sign in to comment.