initial commit
[namibia] / public / js / app / portal-workspace / dealerview.js
1 ;(function(){
2
3         window._w.dealerview = {
4
5                 itemId : null,
6                 itemData : null,
7                 formMeta : null,
8                 ti : null,
9                 limited : false,
10                 newItem : false,
11                 ownAccount : true,
12
13                 onViewTemplateReady : function( template, event, eventData )
14                 {
15                         _w.dealerview.ti = _t[template];
16                         _w.dealerview.limited = ('limiteddealerview' == template)
17                                 ? true
18                                 : false;
19
20                         App.DataStore.setData('companytypes', [
21                            {"value":"Limited", "label":"Limited"},
22                            {"value":"PTY Limited", "label":"PTY Limited"},
23                            {"value":"Closed Corporation", "label":"Closed Corporation"},
24                            {"value":"Sole Proprietor", "label":"Sole Proprietor"}
25                            ]);
26                         App.DataStore.loadSelectListData('countries', true, 'Location', 'Country.SelectList');
27
28
29
30                         _w.dealerview.setCompanyViewFormMeta();
31                         _w.dealerview.ti.hydrate(_w.dealerview.formMeta);
32
33                         // Retrieve initial view data.
34                         _w.dealerview.itemId = App.companyData.id;
35                         _w.dealerview.newItem = false;
36                         App.API.getTask(
37                                 'updateCompany:' + _w.dealerview.itemId, 'Company', 'Company.Update', _w.dealerview.itemId,
38                                 {'id':_w.dealerview.itemId}, $.proxy( _w.dealerview._onCompanyViewDataReceived, this ), _w.taskContractError
39                         );
40
41                 },
42
43                 onViewPublished : function( template, event, eventData )
44                 {
45                         if (null != _w.dealerview.itemData)
46                         {
47                                 _w.dealerview._setupValidation();
48                         }
49                 },
50
51                 setCompanyViewFormMeta : function( data )
52                 {
53                         if (!data)
54                         {
55                                 data = {};
56                         }
57                         _w.dealerview.formMeta = {
58                                 'firstName' : {
59                                         type  : 'input',
60                                         id    : 'firstName',
61                                         title : 'Name',
62                                         value : data.contact ? data.contact.firstName : ''
63                                 },
64                                 'familyName' : {
65                                         type  : 'input',
66                                         id    : 'familyName',
67                                         title : 'Surname',
68                                         value : data.contact ? data.contact.familyName : ''
69                                 },
70                                 'office' : {
71                                         type  : 'input',
72                                         id    : 'office',
73                                         title : 'Landline',
74                                         value : data.contact ? data.contact.office : ''
75                                 },
76                                 'mobile' : {
77                                         type  : 'mobile',
78                                         id    : 'mobile',
79                                         title : 'Mobile',
80                                         value : data.contact ? data.contact.mobile : ''
81                                 },
82                                 'email' : {
83                                         type  : 'input',
84                                         id    : 'email',
85                                         title : 'Email',
86                                         value : data.contact ? data.contact.email : ''
87                                 },
88
89                                 'name' : {
90                                         type  : 'input',
91                                         id    : 'name',
92                                         title : 'Name',
93                                         value : data.name ? data.name : ''
94                                 },
95                                 'businessName' : {
96                                         type  : 'input',
97                                         id    : 'businessName',
98                                         title : 'Business name',
99                                         value : data.businessName ? data.businessName : ''
100                                 },
101                                 'companyRegistrationNumber' : {
102                                         type  : 'input',
103                                         id    : 'companyRegistrationNumber',
104                                         title : 'Company Reg no',
105                                         value : data.companyRegistrationNumber ? data.companyRegistrationNumber : ''
106                                 },
107                                 'vatNumber' : {
108                                         type  : 'input',
109                                         id    : 'vatNumber',
110                                         title : 'Vat no',
111                                         value : data.vatNumber ? data.vatNumber : ''
112                                 },
113                                 'dealerStockNumber' : {
114                                         type  : 'input',
115                                         id    : 'dealerStockNumber',
116                                         title : 'Dealer stock no',
117                                         value : data.dealerStockNumber ? data.dealerStockNumber : ''
118                                 },
119                                 'companyType' : {
120                                         type        : 'select',
121                                         id          : 'companyType',
122                                         title       : 'Company type',
123                                         dataStoreId : 'companytypes',
124                                         value       : data.companyType ? data.companyType : ''
125                                 },
126
127                                 'country' : {
128                                         type        : 'select',
129                                         id          : 'country',
130                                         title       : 'Country',
131                                         dataStoreId : 'countries',
132                                         value       : data.city ? data.city.region.country.id : '',
133                                         onChange    : function () {
134                                                 if (!App.DataStore.getItem('BuildSelect:country', false))
135                                                 {
136                                                         _w.dealerview.itemData.city.region.country.id = $('#country').val();
137                                                         _w.dealerview._listRegionTown();
138                                                 }
139                                         }
140                                 },
141                                 'region' : {
142                                         type        : 'select',
143                                         id          : 'region',
144                                         title       : 'Region',
145                                         dataStoreId : 'regions',
146                                         value       : data.city ? data.city.region.id : '',
147                                         onChange    : function () {
148                                                 if (!App.DataStore.getItem('BuildSelect:region', false))
149                                                 {
150                                                         _w.dealerview.itemData.city.region.id = $('#region').val();
151                                                         _w.dealerview._listRegionTown();
152
153                                                 }
154                                         }
155                                 },
156                                 'city' : {
157                                         type        : 'select',
158                                         id          : 'city',
159                                         title       : 'Town',
160                                         dataStoreId : 'cities',
161                                         value       : data.city ? data.city.id : ''
162                                 },
163                                 'street' : {
164                                         type  : 'input',
165                                         id    : 'street',
166                                         title : 'Street',
167                                         value : data.street ? data.street : ''
168                                 },
169                                 'postalCode' : {
170                                         type  : 'input',
171                                         id    : 'postalCode',
172                                         title : 'Code',
173                                         value : data.postalCode ? data.postalCode : ''
174                                 }
175                         };
176                 },
177
178                 _listRegionTown : function()
179                 {
180                         App.DataStore.loadSelectListData(
181                                         'regions', false, 'Location', 'Region.SelectList', null,
182                                         {"Filter": {
183                                                 "country" : _w.dealerview.itemData.city.region.country.id
184                                                 }}
185                                         );
186                         App.DataStore.loadSelectListData(
187                                         'cities', false, 'Location', 'Town.SelectList', null,
188                                         {"Filter": {
189                                                 "region" : _w.dealerview.itemData.city.region.id
190                                                 }}
191                                         );
192                 },
193
194                 _onCompanyViewDataReceived : function( response )
195                 {
196                         _w.dealerview.itemId = response.Data.id;
197                         _w.dealerview.itemData = response.Data;
198                         _w.dealerview._listRegionTown();
199                         _w.dealerview.setCompanyViewFormMeta(response.Data);
200                         _w.dealerview.ti.hydrate(_w.dealerview.formMeta);
201                         if (_w.dealerview.ti.published)
202                         {
203                                 _w.dealerview._setupValidation();
204                         }
205                 },
206
207                 _setupValidation : function ()
208                 {
209                         $('#frmDealerView').validate({
210                                 rules: {
211                                         name: {required: true},
212                                         street: {required: true},
213                                         postalCode: {required: true, digits: true},
214                                         firstName: {required: true},
215                                         familyName: {required: true},
216                                         mobile: {required: true, mobile: true},
217                                         office: {required: true},
218                                         email: {required: true, email: true},
219                                         country: "required",
220                                         region: "required",
221                                         city: "required"
222                                 },
223                                 messages: {
224                                         email: {
225                                                 email: "Must be a valid email address."
226                                         },
227                                         country : "This field is required.",
228                                         region : "This field is required.",
229                                         city : "This field is required."
230                                 },
231                                 submitHandler: function( form ) {
232                                         $('#btnUpdate').prop('disabled', true);
233                                         var data = _w.dealerview._prepCompanyUpdateData();
234                                         App.API.execTask(
235                                                         'updateCompany:' + _w.dealerview.itemId, data, {},
236                                                         _w.dealerview._onCompanyUpdated, _w.taskExecError
237                                                 );
238                                 }
239                         });
240                         $('#btnUpdate').prop('disabled', false);
241                 },
242
243                 _prepCompanyUpdateData : function()
244                 {
245                         var data = _w.dealerview.ti.harvest();
246                         var postData = {Company:{}, Contact:{}};
247                         var contactFields = ["firstName","familyName","office","mobile","email"];
248                         for (var field in data)
249                         {
250                                 if (-1 == contactFields.indexOf(field))
251                                 {
252                                         postData.Company[field] = data[field];
253                                 }
254                                 else
255                                 {
256                                         postData.Contact[field] = data[field];
257                                 }
258                         }
259                         return postData;
260                 },
261
262                 _onCompanyUpdated : function( response )
263                 {
264                         if (_w.dealerview.ownAccount)
265                         {
266                                 App.API.getTask(
267                                                 'updateOffer:' + _w.offerview.offerId, 'User', 'Profile.ActiveAccount', null,
268                                                 {}, function (response) {
269                                         App.permissions = response.Data.permissions;
270                                                         delete response.Data.permissions;
271                                                         App.companyData = response.Data.company;
272                                                         delete response.Data.company;
273                                                         App.userData = response.Data;
274                                                         window.location.hash = '/settings';
275                                                 }, _w.onActiveAccountFailure
276                                         );
277                         }
278                         else
279                         {
280                                 window.location.hash = '/settings';
281                         }
282                 }
283
284         };
285
286 })();