X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=js%2Fangular-crmMailingAB%2Fservices.js;h=e23c905b1feab15f1aedd091497d84679e1bdc1e;hb=a740a53116a223821ca8a3d9041b098c44ff5630;hp=becabe19fae5adccdf92f04fb052e3340897dfdb;hpb=86c3a3270e4fe2e54f3e81da26fe98eb6465c6a8;p=civicrm-core.git diff --git a/js/angular-crmMailingAB/services.js b/js/angular-crmMailingAB/services.js index becabe19fa..e23c905b1f 100644 --- a/js/angular-crmMailingAB/services.js +++ b/js/angular-crmMailingAB/services.js @@ -1,5 +1,19 @@ (function (angular, $, _) { + function OptionGroup(values) { + this.get = function get(value) { + var r = _.where(values, {value: '' + value}); + return r.length > 0 ? r[0] : null; + }; + this.getByName = function get(name) { + var r = _.where(values, {name: '' + name}); + return r.length > 0 ? r[0] : null; + }; + this.getAll = function getAll() { + return values; + }; + } + angular.module('crmMailingAB').factory('crmMailingABCriteria', function () { // TODO Get data from server var values = { @@ -7,15 +21,17 @@ '2': {value: '2', name: 'From names', label: ts('Test different "From" lines')}, '3': {value: '3', name: 'Two different emails', label: ts('Test entirely different emails')} }; - return { - get: function get(value) { - var r = _.where(values, {value: '' + value}); - return r.length > 0 ? r[0] : null; - }, - getAll: function getAll() { - return values; - } + return new OptionGroup(values); + }); + + angular.module('crmMailingAB').factory('crmMailingABStatus', function () { + // TODO Get data from server + var values = { + '1': {value: '1', name: 'Draft', label: ts('Draft')}, + '2': {value: '2', name: 'Testing', label: ts('Testing')}, + '3': {value: '3', name: 'Final', label: ts('Final')} }; + return new OptionGroup(values); }); // CrmMailingAB is a data-model which combines an AB test (APIv3 "MailingAB"), three mailings (APIv3 "Mailing"), @@ -26,7 +42,7 @@ // abtest.load().then(function(){ // alert("Mailing A is named "+abtest.mailings.a.name); // }); - angular.module('crmMailingAB').factory('CrmMailingAB', function (crmApi, crmMailingMgr, $q, CrmAttachments) { + angular.module('crmMailingAB').factory('CrmMailingAB', function (crmApi, crmMailingMgr, $q, CrmAttachments, crmNow) { function CrmMailingAB(id) { this.id = id; this.mailings = {}; @@ -40,6 +56,7 @@ if (!crmMailingAB.id) { crmMailingAB.ab = { name: 'Example', // FIXME + status: 'Draft', mailing_id_a: null, mailing_id_b: null, mailing_id_c: null, @@ -54,13 +71,13 @@ crmMailingAB.mailings.b = crmMailingMgr.create(); crmMailingAB.mailings.c = crmMailingMgr.create(); crmMailingAB.attachments.a = new CrmAttachments(function () { - return {entity_table: 'civicrm_mailing', entity_id: crmMailingAB.ab['mailing_id_a']}; + return {entity_table: 'civicrm_mailing', entity_id: crmMailingAB.ab.mailing_id_a}; }); crmMailingAB.attachments.b = new CrmAttachments(function () { - return {entity_table: 'civicrm_mailing', entity_id: crmMailingAB.ab['mailing_id_b']}; + return {entity_table: 'civicrm_mailing', entity_id: crmMailingAB.ab.mailing_id_b}; }); crmMailingAB.attachments.c = new CrmAttachments(function () { - return {entity_table: 'civicrm_mailing', entity_id: crmMailingAB.ab['mailing_id_c']}; + return {entity_table: 'civicrm_mailing', entity_id: crmMailingAB.ab.mailing_id_c}; }); var dfr = $q.defer(); @@ -81,18 +98,49 @@ // @return Promise CrmMailingAB save: function save() { var crmMailingAB = this; - return crmMailingAB._saveMailings() .then(function () { return crmApi('MailingAB', 'create', crmMailingAB.ab) .then(function (abResult) { - crmMailingAB.ab.id = abResult.id; + crmMailingAB.id = crmMailingAB.ab.id = abResult.id; }); }) .then(function () { return crmMailingAB; }); }, + // Schedule the test + // @return Promise CrmMailingAB + // Note: Submission may cause the server state to change. Consider abtest.submit().then(...abtest.load()...) + submitTest: function submitTest() { + var crmMailingAB = this; + var params = { + id: this.ab.id, + status: 'Testing', + approval_date: crmNow(), + scheduled_date: this.mailings.a.scheduled_date ? this.mailings.a.scheduled_date : crmNow() + }; + return crmApi('MailingAB', 'submit', params) + .then(function () { + return crmMailingAB; + }); + }, + // Schedule the final mailing + // @return Promise CrmMailingAB + // Note: Submission may cause the server state to change. Consider abtest.submit().then(...abtest.load()...) + submitFinal: function submitFinal() { + var crmMailingAB = this; + var params = { + id: this.ab.id, + status: 'Final', + approval_date: crmNow(), + scheduled_date: this.mailings.c.scheduled_date ? this.mailings.c.scheduled_date : crmNow() + }; + return crmApi('MailingAB', 'submit', params) + .then(function () { + return crmMailingAB; + }); + }, // @param mailing Object (per APIv3) // @return Promise 'delete': function () { @@ -137,6 +185,7 @@ _saveMailings: function _saveMailings() { var crmMailingAB = this; var todos = {}; + var p = $q.when(true); _.each(['a', 'b', 'c'], function (mkey) { if (!crmMailingAB.mailings[mkey]) { return; @@ -145,13 +194,15 @@ // paranoia: in case caller forgot to manage id on mailing crmMailingAB.mailings[mkey].id = crmMailingAB.ab['mailing_id_' + mkey]; } - todos[mkey] = crmMailingMgr.save(crmMailingAB.mailings[mkey]) - .then(function () { - crmMailingAB.ab['mailing_id_' + mkey] = crmMailingAB.mailings[mkey].id; - return crmMailingAB.attachments[mkey].save(); - }); + p = p.then(function(){ + return crmMailingMgr.save(crmMailingAB.mailings[mkey]) + .then(function () { + crmMailingAB.ab['mailing_id_' + mkey] = crmMailingAB.mailings[mkey].id; + return crmMailingAB.attachments[mkey].save(); + }); + }); }); - return $q.all(todos).then(function () { + return p.then(function () { return crmMailingAB; }); }