13 onTemplateReady : function( template, event, eventData )
15 _w.register.ti = _t[template];
16 _w.register.limited = ('limitedregister' == template)
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"}
26 App.DataStore.setData('dealertypes', [
27 {"value":"Dealer", "label":"Dealer"},
28 {"value":"Wholesale / Trader", "label":"Wholesale / Trader"},
29 {"value":"Trade Center", "label":"Trade Center"}
31 App.DataStore.setData('clienttypes', [
32 {"value":"Buyer", "label":"Buyer"},
33 {"value":"Buyer & Seller", "label":"Buyer & Seller"}
35 App.DataStore.setData('companyturnover', [
36 {"value":"Turnover > R500,000", "label":"Turnover > R500,000"},
37 {"value":"Turnover > R2,000,000", "label":"Turnover > R2,000,000"},
38 {"value":"Turnover > R3,000,000", "label":"Turnover > R3,000,000"}
40 App.DataStore.loadSelectListData('permissions', true, 'User', 'Permissions.SelectList');
41 App.DataStore.loadSelectListData('countries', true, 'Location', 'Country.SelectList');
42 App.DataStore.loadSelectListData('groups', true, 'Company', 'Group.SelectList');
43 App.DataStore.loadSelectListData('foundmethods', true, 'Company', 'FoundMethod.SelectList');
47 _w.register.setRegisterViewFormMeta();
48 _w.register.ti.hydrate(_w.register.formMeta);
50 'register', 'User', 'Registration.RegisterFull', null,
51 {}, function() {}, _w.taskContractError
56 onTemplatePublished : function( template, event, eventData )
58 _w.register.ti = _t[template];
59 _w.register.setRegisterViewFormMeta();
60 _w.register.ti.hydrate(_w.register.formMeta);
61 _w.register._setupValidation();
62 $('#btnAddOwner').click(_w.register.addOwner);
65 setRegisterViewFormMeta : function( data )
71 _w.register.formMeta = {
92 dataStoreId : 'permissions'
97 title : 'Email address',
104 title : 'Confirm email address',
111 title : '4 Digit pin',
118 title : 'Confirm 4 digit pin',
128 onChange : function() {
129 var dig = $(this).val().substring(0, 6);
130 $('#dateOfBirth').val(
131 '19' + dig.substring(0, 2) +
132 '-' + dig.substring(2, 4) +
133 '-' + dig.substring(4, 6)
140 title : 'Date of birth',
141 style : 'datepicker',
147 title : 'Mobile number',
152 // Dealership contact
153 'contactFirstName' : {
155 id : 'contactFirstName',
160 'contactFamilyName' : {
162 id : 'contactFamilyName',
169 id : 'contactOffice',
176 id : 'contactMobile',
177 title : 'Mobile number',
189 // Dealership details
193 title : 'Registration type',
195 dataStoreId : 'dealertypes'
200 title : 'Register as',
202 dataStoreId : 'clienttypes'
207 title : 'Group Member',
209 dataStoreId : 'groups',
210 onChange : function () {
211 if (!App.DataStore.getItem('BuildSelect:group', false))
213 var groupId = $('#group').val();
214 App.DataStore.loadSelectListData(
215 'groupdivisions', false, 'Company', 'GroupDivision.SelectList',
216 null, {Filter: {group: groupId}}
223 id : 'groupDivision',
224 title : 'Group Division',
226 dataStoreId : 'groupdivisions'
231 title : 'Company type',
233 dataStoreId : 'companytypes',
234 onChange : function() {
235 if (!App.DataStore.getItem('BuildSelect:companyType', false))
237 if ('Sole Proprietor' == $(this).val())
239 $('#' + _w.register.ti.tid + '_docCopyOfDirectorId').hide();
240 $('#' + _w.register.ti.tid + '_docCompanyRegistration').hide();
241 $('#' + _w.register.ti.tid + '_docStockCertificate').show();
242 $('#' + _w.register.ti.tid + '_docCopyOfId').show();
243 $('#' + _w.register.ti.tid + '_docAddressProof').show();
247 $('#' + _w.register.ti.tid + '_docStockCertificate').hide();
248 $('#' + _w.register.ti.tid + '_docCopyOfId').hide();
249 $('#' + _w.register.ti.tid + '_docAddressProof').show();
250 $('#' + _w.register.ti.tid + '_docCopyOfDirectorId').show();
251 $('#' + _w.register.ti.tid + '_docCompanyRegistration').show();
259 title : 'Registered business name',
266 title : 'Trading name',
270 'companyRegistrationNumber' : {
272 id : 'companyRegistrationNumber',
273 title : 'Company Reg no',
275 mask : '9999/999999/99',
288 title : 'TransUnion membership no',
292 'dealerStockNumber' : {
294 id : 'dealerStockNumber',
295 title : 'Dealer stock no',
304 dataStoreId : 'companyturnover'
309 title : 'Where did you find us?',
311 dataStoreId : 'foundmethods',
312 onChange : function () {
313 if (!App.DataStore.getItem('BuildSelect:foundMethod', false))
315 var foundId = $('#foundMethod').val();
316 App.DataStore.loadSelectListData(
317 'foundmethoddetails', false, 'Company', 'FoundMethodDetail.SelectList',
318 null, {Filter: {foundMethod: foundId}}
323 'foundMethodDetail' : {
325 id : 'foundMethodDetail',
328 dataStoreId : 'foundmethoddetails'
332 // Adresses and billing contact
337 dataStoreId : 'countries',
339 onChange : function () {
340 if (!App.DataStore.getItem('BuildSelect:country', false))
342 App.DataStore.loadSelectListData(
343 'regions', false, 'Location', 'Region.SelectList', null,
345 "country" : $(this).val()
348 App.DataStore.setData('cities', []);
349 if ($('#sameAsBusinessAddress').prop('checked'))
351 $('#billingCountry').selectpicker('val', $('#country').val());
360 dataStoreId : 'regions',
362 onChange : function () {
363 if (!App.DataStore.getItem('BuildSelect:region', false))
365 App.DataStore.loadSelectListData(
366 'cities', false, 'Location', 'Town.SelectList', null,
368 "region" : $(this).val()
371 if ($('#sameAsBusinessAddress').prop('checked'))
373 $('#billingRegion').selectpicker('val', $('#region').val());
382 dataStoreId : 'cities',
399 'sameAsBusinessAddress' : {
401 id : 'sameAsBusinessAddress',
402 title : 'Same as business address',
404 onChange : function() {
405 if ($(this).prop('checked'))
407 App.DataStore.setItem('BuildSelect:migrateCountry', true);
408 $('#billingCountry').selectpicker('val', $('#country').val());
409 App.DataStore.removeItem('BuildSelect:migrateCountry');
410 App.DataStore.setItem('BuildSelect:migrateRegion', true);
411 App.DataStore.loadSelectListData(
412 'billregions', false, 'Location', 'Region.SelectList', null,
414 "country" : $('#country').val()
416 $('#billingRegion').selectpicker('val', $('#region').val());
417 App.DataStore.removeItem('BuildSelect:migrateRegion');
420 App.DataStore.setItem('BuildSelect:migrateTown', true);
421 App.DataStore.loadSelectListData(
422 'billcities', false, 'Location', 'Town.SelectList', null,
424 "region" : $('#region').val()
426 $('#billingCity').selectpicker('val', $('#city').val());
429 $('#billingStreet').val($('#street').val());
430 $('#billingPostalCode').val($('#postalCode').val());
434 $('#billingCountry').selectpicker('val', '');
435 App.DataStore.setData('billregions', []);
436 App.DataStore.setData('billcities', []);
437 $('#billingStreet').val('');
438 $('#billingPostalCode').val('');
444 id : 'billingCountry',
446 dataStoreId : 'countries',
448 onChange : function () {
449 if (!App.DataStore.getItem('BuildSelect:billingCountry', false)
450 && !App.DataStore.getItem('BuildSelect:migrateCountry', false))
452 App.DataStore.loadSelectListData(
453 'billregions', false, 'Location', 'Region.SelectList', null,
455 "country" : $(this).val()
458 App.DataStore.setData('billcities', []);
464 id : 'billingRegion',
466 dataStoreId : 'billregions',
468 onChange : function () {
469 if (!App.DataStore.getItem('BuildSelect:billingRegion', false)
470 && !App.DataStore.getItem('BuildSelect:migrateRegion', false))
472 App.DataStore.loadSelectListData(
473 'billcities', false, 'Location', 'Town.SelectList', null,
475 "region" : $(this).val()
485 dataStoreId : 'billcities',
490 id : 'billingStreet',
495 'billingPostalCode' : {
497 id : 'billingPostalCode',
503 'sameAsDealerContact' : {
505 id : 'sameAsDealerContact',
506 title : 'Same as dealership contact',
508 onChange : function() {
509 if ($(this).prop('checked'))
511 $('#billingFirstName').val($('#contactFirstName').val());
512 $('#billingFamilyName').val($('#contactFamilyName').val());
513 $('#billingOffice').val($('#contactOffice').val());
514 $('#billingMobile').val($('#contactMobile').val());
515 $('#billingEmail').val($('#contactEmail').val());
519 $('#billingFirstName').val('');
520 $('#billingFamilyName').val('');
521 $('#billingOffice').val('');
522 $('#billingMobile').val('');
523 $('#billingEmail').val('');
527 'billingFirstName' : {
529 id : 'billingFirstName',
534 'billingFamilyName' : {
536 id : 'billingFamilyName',
543 id : 'billingOffice',
550 id : 'billingMobile',
551 title : 'Mobile number',
566 id : 'ownerFirstName',
571 'ownerFamilyName' : {
573 id : 'ownerFamilyName',
580 id : 'ownerIdNumber',
592 'docStockCertificate' : {
594 id : 'docStockCertificate',
595 title : 'Dealer stock certificate',
598 'docAddressProof' : {
600 id : 'docAddressProof',
601 title : 'Proof of business address',
607 title : 'Copy of ID document',
610 'docCopyOfDirectorId' : {
612 id : 'docCopyOfDirectorId',
613 title : 'Copy of directors ID document',
616 'docCompanyRegistration' : {
618 id : 'docCompanyRegistration',
619 title : 'Company registration document',
623 'subscribeNewsletter' : {
625 id : 'subscribeNewsletter',
626 title : 'Sign me up for the monthly newsletter abd Bid4Cars updates.',
629 'acceptTermsAndConditions' : {
631 id : 'acceptTermsAndConditions',
632 title : 'I agree to the Terms & Conditions, Website Terms & Conditions and Privacy Policy of Bid4Cars.',
634 onChange : function() {
635 $('#btnUpdate').prop('disabled', !$(this).prop('checked'));
641 addOwner : function()
643 var name = $('#ownerFirstName').val();
644 var surname = $('#ownerFamilyName').val();
645 var idnum = $('#ownerIdNumber').val();
646 if ('' == name || '' == surname || !$('#ownerIdNumber').valid())
648 alert('Please provide Name, Surname and ID number.');
651 _w.register.owners['colItem' + _w.register.counter] = {
653 familyName : surname,
656 var html = '<div class="accordion-group" id="colItem' + _w.register.counter + '">';
657 html += '<div class="accordion-heading">';
658 html += '<a class="accordion-toggle" data-toggle="collapse" data-parent="#owners" href="#collapse' + _w.register.counter + '">';
659 html += name + ' ' + surname;
662 html += '<div id="collapse' + _w.register.counter + '" class="accordion-body collapse in">';
663 html += '<div class="accordion-inner">';
664 html += name + ' ' + surname + ' (' + idnum + ')';
665 html += '<br/><button type="button" class="btn pull-right" onClick="_w.register.removeOwner(' + _w.register.counter + ');">Remove</button>';
669 $('#owners').append(html);
670 $('#collapse' + _w.register.counter).collapse('toggle');
671 _w.register.counter++;
672 _w.register.ownerCount++;
674 $('#ownerFirstName').val('');
675 $('#ownerFamilyName').val('');
676 $('#ownerIdNumber').val('');
679 removeOwner : function( id )
681 delete _w.register.owners['colItem' + id];
682 $('#colItem' + id).remove();
683 _w.register.ownerCount--;
686 _setupValidation : function ()
688 $('#frmRegister').validate({
690 firstName: {required: true},
691 familyName: {required: true},
692 permissions: {required: true},
693 email: {required: true, email: true, remote: {
694 url: "/workspace/check-unique-email",
697 confirmEmail: {required: true, email: true, equalTo: "#email"},
698 pin: {required: true, digits: true},
699 confirmPin: {required: true, digits: true, equalTo: "#pin"},
700 idNumber: {required: true, minlength: 13, maxlength: 13, digits: true},
701 dateOfBirth: {required: true, dateISO: true},
702 mobile: {required: true, mobile: true},
704 contactFirstName: {required: true},
705 contactFamilyName: {required: true},
706 contactOffice: {required: true, digits: true},
707 contactMobile: {required: true, mobile: true},
708 contactEmail: {required: true, email: true},
710 dealerType: {required: true},
711 clientType: {required: true},
712 companyType: {required: true},
713 businessName: {required: true},
714 name: {required: true, remote: {
715 url: "/workspace/check-unique-company",
718 companyRegistrationNumber: {companyReg: true},
719 vatNumber: {digits: true},
721 country: {required: true},
722 region: {required: true},
723 city: {required: true},
724 street: {required: true},
725 postalCode: {required: true, digits: true},
726 billingCountry: {required: true},
727 billingRegion: {required: true},
728 billingCity: {required: true},
729 billingStreet: {required: true},
730 billingPostalCode: {required: true, digits: true},
731 billingFirstName: {required: true},
732 billingFamilyName: {required: true},
733 billingOffice: {required: true, digits: true},
734 billingMobile: {required: true, mobile: true},
735 billingEmail: {required: true, email: true},
737 ownerIdNumber: {minlength: 13, maxlength: 13, digits: true}
740 email: { email: "Must be a valid email address.", remote: "Email address already in use."},
741 confirmEmail: { equalTo: "Values are not the same." },
742 confirmPin: { equalTo: "Values are not the same." },
743 contactEmail: { email: "Must be a valid email address." },
744 billingEmail: { email: "Must be a valid email address." },
745 country : "This field is required.",
746 region : "This field is required.",
747 city : "This field is required.",
748 billingCountry : "This field is required.",
749 billingRegion : "This field is required.",
750 billingCity : "This field is required.",
751 permissions : "This field is required.",
752 companyType : "This field is required.",
753 dealerType : "This field is required.",
754 clientType : "This field is required."
756 submitHandler: function( form ) {
757 if (0 == _w.register.ownerCount) {
758 $('#ownerFirstName').addClass('error');
759 $('#ownerFamilyName').addClass('error');
760 $('#ownerIdNumber').addClass('error');
761 alert('At least 1 owner / director required.');
764 $('#ownerFirstName').removeClass('error');
765 $('#ownerFamilyName').removeClass('error');
766 $('#ownerIdNumber').removeClass('error');
768 $('#btnUpdate').prop('disabled', true);
769 var data = _w.register._prepRegisterUpdateData();
771 'register', data, {},
772 _w.register._onRegisterUpdated, _w.taskExecError
776 $('#frmRegister').valid();
777 $('label.error').remove();
778 $('.valid').removeClass('valid');
781 _prepRegisterUpdateData : function()
783 var data = _w.register.ti.harvest();
790 var profileFields = [
791 "firstName","familyName","permissions","email","confirmEmail",
792 "pin","confirmPin","idNumber","dateOfBirth","mobile", "subscribeNewsletter"
794 var companyFields = [
795 "dealerType","clientType","group","groupDivision","companyType",
796 "businessName","name","companyRegistrationNumber","vatNumber","turmiNumber",
797 "dealerStockNumber","turnover","foundMethod","foundMethodDetail",
798 "country","region","city","street","postalCode",
799 "billingCountry","billingRegion","billingCity","billingStreet","billingPostalCode",
800 "docStockCertificate","docAddressProof","docCopyOfId",
801 "docCopyOfDirectorId","docCompanyRegistration"
803 var contactFields = {
804 "contactFirstName" : "firstName",
805 "contactFamilyName" : "familyName",
806 "contactOffice" : "office",
807 "contactMobile" : "mobile",
808 "contactEmail" : "email"
810 var billingContactFields = {
811 "billingFirstName" : "firstName",
812 "billingFamilyName" : "familyName",
813 "billingOffice" : "office",
814 "billingMobile" : "mobile",
815 "billingEmail" : "email"
817 for (var field in data)
819 if (-1 != companyFields.indexOf(field))
821 postData.Company[field] = '' != data[field] ? data[field] : null;
823 else if (-1 != profileFields.indexOf(field))
825 postData.Profile[field] = '' != data[field] ? data[field] : null;
827 else if (contactFields[field])
829 postData.Contact[contactFields[field]] = '' != data[field] ? data[field] : null;
831 else if (billingContactFields[field])
833 postData.BillingContact[billingContactFields[field]] = '' != data[field] ? data[field] : null;
836 postData.Profile.password = postData.Profile.pin;
837 postData.Company.owners = _w.register.owners;
841 _onRegisterUpdated : function( response )
843 window.location.hash = '/registered';