Changes between Version 9 and Version 10 of Store


Ignore:
Timestamp:
Jun 19, 2012 11:20:58 AM (12 years ago)
Author:
tolix
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Store

    v9 v10  
    33{{{
    44#!html
     5
     6<script language="javascript">
     7
     8        Ext.BLANK_IMAGE_URL = 'icons/s.gif';
     9        Ext.ns('Application');
     10
     11        // Localization support
     12        function _ (msgid) { return msgid; }
     13
     14        function comfortShift(w) {
     15                var pos = w.getPosition();
     16                pos[1] *= 0.66;
     17                // pos[0] += Math.round(Math.random() * 100) - 50;
     18                // pos[1] += Math.round(Math.random() * 100) - 50;
     19                w.setPosition(pos);
     20        }
     21
     22        function purchase()
     23        {
     24                var w;
     25
     26                var cardNav = function(incr) {
     27                    var l = Ext.getCmp('card-wizard-panel').getLayout();
     28                    var i = l.activeItem.id.split('card-')[1];
     29                    var next = parseInt(i, 10) + incr;
     30
     31                        if(i == 0 || i == 1) {
     32                                var form = l.activeItem.items.item(1).getForm();
     33                                if(! form.isValid()) {
     34                                        // TODO: highlight first invalid field
     35                                        return;
     36                                }
     37                        }
     38
     39                        if(next >= 4) {
     40                                w.close();
     41                                return;
     42                        }
     43
     44                    l.setActiveItem(next);
     45
     46                    Ext.getCmp('card-prev').setDisabled(next == 0);
     47
     48                        if(next == 2) {
     49                                Ext.getCmp('card-next').setText(_('Зарегистрировать'));
     50                        }
     51                        else if(next == 3) {
     52                                Ext.getCmp('card-next').setText(_('Завершить'));
     53                        }
     54                        else {
     55                                Ext.getCmp('card-next').setText(_('Далее') + ' &rarr;');
     56                        }
     57                };
     58
     59                w = new Ext.Window({
     60                        id: 'card-wizard-panel',
     61                        title: _('Оформление интернет-заказа'),
     62                        minWidth: 600,
     63                        width: 600,
     64                        minHeight: 500,
     65                        height: 500,
     66                        modal: true,
     67                        layout: 'card',
     68                        stateful: false,
     69                        activeItem: 0,
     70                        defaults: {
     71                                border: false
     72                        },
     73                        items: [
     74                                {
     75                                        id: 'card-0',
     76                                        layout: 'border',
     77                                        defaults: {
     78                                                border: true,
     79                                                padding: '5px 10px 5px 10px'
     80                                        },
     81                                        items: [
     82                                                {
     83                                                        region: 'north',
     84                                                        height: 84,
     85                                                        split: false,
     86                                                        bodyStyle: 'border-bottom: 0px;',
     87                                                        html: '<img style="vertical-align: middle; padding: 5px 20px 0px 15px;" src="../../site/shopping cart/tango-styled-shopping-cart-icon-cut_64x64.png"><b>'
     88                                                                        + _('Выбор способа оплаты')
     89                                                                        + '</b><div style="float: right; color: gray;">'
     90                                                                        + _('Шаг 1 из 3 - Выбор способа оплаты') + '</div>'
     91                                                },
     92                                                {
     93                                                        region: 'center',
     94                                                        xtype: 'form',
     95                                                        labelWidth: 150,
     96                                                        defaultType: 'textfield',
     97                                                        padding: '20px 30px 30px 30px',
     98                                                        items: [
     99/*
     100                                                                {
     101                                                                        fieldLabel: '<b>' + _('Имя учетной записи (логин)') + '</b>',
     102                                                                        name: 'login',
     103                                                                        allowBlank: false,
     104                                                                        regex: new RegExp('^[a-z][a-z0-9\\.\\-\\@]*$', 'i'),
     105                                                                        regexText: _('Имя учетной записи должно начинаться с латинской буквы и содержать только латинские буквы, цифры, точки, дефисы'),
     106                                                                        anchor: '100%'
     107                                                                },
     108*/
     109                                                                {
     110                                                                        fieldLabel: _('Сумма заказа, руб'),
     111                                                                        name: 'amount',
     112                                                                        readOnly: true,
     113                                                                        value: 350.00,
     114                                                                        // anchor: '100%'
     115                                                                        width: 200
     116                                                                },
     117                                                                {
     118                                                                        fieldLabel: _('Способ оплаты'),
     119                                                                        name: 'currency',
     120                                                                        xtype: 'combo',
     121                                                                        // anchor: '100%'
     122                                                                        width: 200
     123                                                                },
     124                                                                {
     125                                                                        fieldLabel: _('Сумма к списанию'),
     126                                                                        name: 'amount',
     127                                                                        readOnly: true,
     128                                                                        value: 350.00,
     129                                                                        // anchor: '100%'
     130                                                                        width: 200
     131                                                                },
     132                                                                {
     133                                                                        fieldLabel: _('E-mail'),
     134                                                                        name: 'email',
     135                                                                        allowBlank: false,
     136                                                                        regex: new RegExp('^[a-z0-9\\.\\-\\_]+\@(?:[a-z0-9\\-]+\\.)+[a-z]+$', 'i'),
     137                                                                        regexText: _('Такой почтовый адрес не может существовать'),
     138                                                                        anchor: '100%'
     139                                                                },
     140                                                                {       
     141                                                                        xtype: 'label',
     142                                                                        html: '<div style="padding: 0 0 15px 155px;">сюда будут направляться серийные номера, коды активации</div>'
     143                                                                },
     144                                                                {
     145                                                                        fieldLabel: _('Имя'),
     146                                                                        name: 'name',
     147                                                                        allowBlank: true,
     148                                                                        anchor: '100%'
     149                                                                },
     150                                                                {
     151                                                                        fieldLabel: _('Телефон'),
     152                                                                        name: 'phone',
     153                                                                        allowBlank: true,
     154                                                                        // maskRe: new RegExp('[^\\d\\+]', 'ig'),
     155                                                                        stripCharsRe: new RegExp('[^\\d\\+]+', 'ig'),
     156                                                                        regex: new RegExp('^\\+?[0-9]{10,}$', 'i'),
     157                                                                        regexText: _('Пожалуйста, укажите номер телефона в федеральном формате, используйте только цифры, знак +'),
     158                                                                        // anchor: '100%',
     159                                                                        width: 200
     160                                                                }
     161                                                        ]
     162                                                }
     163                                        ]
     164                                },
     165                                {
     166                                        id: 'card-1',
     167                                        layout: 'border',
     168                                        defaults: {
     169                                                border: true,
     170                                                padding: '5px 10px 5px 10px'
     171                                        },
     172                                        items: [
     173                                                {
     174                                                        region: 'north',
     175                                                        height: 60,
     176                                                        split: false,
     177                                                        bodyStyle: 'border-bottom: 0px;',
     178                                                        html: '<img style="vertical-align: middle;" src="icons/wizard-wand.jpg"><b>'
     179                                                                        + _('Объекты мониторинга')
     180                                                                        + '</b><div style="float: right; color: gray;">'
     181                                                                        + _('Шаг 2 из 3 - Объекты мониторинга')
     182                                                                        + '</div>'
     183                                                },
     184                                                {
     185                                                        region: 'center',
     186                                                        xtype: 'form',
     187                                                        labelWidth: 150,
     188                                                        defaultType: 'textfield',
     189                                                        padding: '20px 30px 30px 30px',
     190                                                        items: [
     191                                                                {
     192                                                                        xtype: 'panel',
     193                                                                        baseCls: 'x-plain',
     194                                                                        layout: 'column',
     195                                                                        defaults: {
     196                                                                                border: false
     197                                                                        },
     198                                                                        items: [
     199                                                                                {
     200                                                                                        columnWidth: 0.5,
     201                                                                                        xtype: 'fieldset',
     202                                                                                        labelWidth: 120,
     203                                                                                        defaults: {
     204                                                                                                xtype: 'textfield'
     205                                                                                        },
     206                                                                                        items: [
     207                                                                                                {
     208                                                                                                        fieldLabel: _('Трекер 1 (код/IMEI)'),
     209                                                                                                        name: 'modemid1',
     210                                                                                                        maskRe: new RegExp('\\d'),
     211                                                                                                        allowBlank: true,
     212                                                                                                        anchor: '-10'
     213                                                                                                },
     214                                                                                                {
     215                                                                                                        fieldLabel: _('Трекер 2 (код/IMEI)'),
     216                                                                                                        name: 'modemid2',
     217                                                                                                        maskRe: new RegExp('\\d'),
     218                                                                                                        allowBlank: true,
     219                                                                                                        anchor: '-10'
     220                                                                                                },
     221                                                                                                {
     222                                                                                                        fieldLabel: _('Трекер 3 (код/IMEI)'),
     223                                                                                                        name: 'modemid3',
     224                                                                                                        maskRe: new RegExp('\\d'),
     225                                                                                                        allowBlank: true,
     226                                                                                                        anchor: '-10'
     227                                                                                                }
     228                                                                                        ]
     229                                                                                },
     230                                                                                {
     231                                                                                        columnWidth: 0.5,
     232                                                                                        xtype: 'fieldset',
     233                                                                                        labelWidth: 140,
     234                                                                                        defaults: {
     235                                                                                                xtype: 'textfield'
     236                                                                                        },
     237                                                                                        items: [
     238                                                                                                {
     239                                                                                                        fieldLabel: _('Тел. номер SIM-карты'),
     240                                                                                                        name: 'phone1',
     241                                                                                                        maskRe: new RegExp('[\\d\\+]'),
     242                                                                                                        allowBlank: true,
     243                                                                                                        stripCharsRe: new RegExp('[^\\d\\+]+', 'ig'),
     244                                                                                                        regex: new RegExp('^\\+?[0-9]{10,}$', 'i'),
     245                                                                                                        regexText: _('Пожалуйста, укажите номер телефона в федеральном формате, используйте только цифры, знак +'),
     246                                                                                                        anchor: '100%'
     247                                                                                                },
     248                                                                                                {
     249                                                                                                        fieldLabel: _('Тел. номер SIM-карты'),
     250                                                                                                        name: 'phone2',
     251                                                                                                        maskRe: new RegExp('[\\d\\+]'),
     252                                                                                                        allowBlank: true,
     253                                                                                                        stripCharsRe: new RegExp('[^\\d\\+]+', 'ig'),
     254                                                                                                        regex: new RegExp('^\\+?[0-9]{10,}$', 'i'),
     255                                                                                                        regexText: _('Пожалуйста, укажите номер телефона в федеральном формате, используйте только цифры, знак +'),
     256                                                                                                        anchor: '100%'
     257                                                                                                },
     258                                                                                                {
     259                                                                                                        fieldLabel: _('Тел. номер SIM-карты'),
     260                                                                                                        name: 'phone3',
     261                                                                                                        maskRe: new RegExp('[\\d\\+]'),
     262                                                                                                        allowBlank: true,
     263                                                                                                        stripCharsRe: new RegExp('[^\\d\\+]+', 'ig'),
     264                                                                                                        regex: new RegExp('^\\+?[0-9]{10,}$', 'i'),
     265                                                                                                        regexText: _('Пожалуйста, укажите номер телефона в федеральном формате, используйте только цифры, знак +'),
     266                                                                                                        anchor: '100%'
     267                                                                                                }
     268                                                                                        ]
     269                                                                                }
     270                                                                        ]
     271                                                                }
     272                                                        ]
     273                                                }
     274                                        ]
     275                                },
     276                                {
     277                                        id: 'card-2',
     278                                        layout: 'border',
     279                                        defaults: {
     280                                                border: true,
     281                                                padding: '5px 10px 5px 10px'
     282                                        },
     283                                        items: [
     284                                                {
     285                                                        region: 'north',
     286                                                        height: 60,
     287                                                        split: false,
     288                                                        bodyStyle: 'border-bottom: 0px;',
     289                                                        html: '<img style="vertical-align: middle;" src="icons/wizard-wand.jpg"><b>'
     290                                                                        + _('Подтверждение')
     291                                                                        + '</b><div style="float: right; color: gray;">'
     292                                                                        + _('Шаг 3 из 3 - Подтверждение')
     293                                                                        + '</div>'
     294                                                },
     295                                                {
     296                                                        region: 'center',
     297                                                        padding: '20px 30px 30px 30px',
     298                                                        bodyStyle: 'font-size: 1.1em;'
     299                                                }
     300                                        ],
     301                                        listeners: {
     302                                                activate: function(p) {
     303                                                        var card1 = p.ownerCt.items.item(0);
     304                                                        var form1 = card1.items.item(1).getForm();
     305                                                        var personalInfo = form1.getValues();
     306                                                        personalInfo.login = personalInfo.login ? personalInfo.login : personalInfo.email;
     307                                                        var personalInfoTpl = new Ext.Template(_('Зарегистрировать учетную запись с именем <b>{login}</b> (пароль будет сгенерирован автоматически и выслан на e-mail <b>{email}</b>) для <b>{name}</b>, часовой пояс <b>{timezone}</b>'));
     308                                                        p.items.item(1).body.dom.innerHTML = personalInfoTpl.apply(personalInfo);
     309
     310                                                        if(personalInfo.phone) {
     311                                                                p.items.item(1).body.dom.innerHTML += _(', телефон <b>') + personalInfo.phone + '</b>';
     312                                                        }
     313
     314                                                        p.items.item(1).body.dom.innerHTML += '<br><br>';
     315
     316                                                        var card2 = p.ownerCt.items.item(1);
     317                                                        var form2 = card2.items.item(1).getForm();
     318                                                        modems = form2.getValues();
     319                                                        if( modems.modem_id1 || modems.modem_id2 || modems.modem_id3 ) {
     320                                                                p.items.item(1).body.dom.innerHTML += _('и подключить следующие трекеры (список может быть изменен в последующем): <ul>');
     321                                                                if( modems.modem_id1 ) {
     322                                                                        p.items.item(1).body.dom.innerHTML += '<li><b>' + modems.modem_id1 + '</b>';
     323                                                                }
     324                                                                if( modems.modem_id2 ) {
     325                                                                        p.items.item(1).body.dom.innerHTML += '<li><b>' + modems.modem_id2 + '</b>';
     326                                                                }
     327                                                                if( modems.modem_id3 ) {
     328                                                                        p.items.item(1).body.dom.innerHTML += '<li><b>' + modems.modem_id3 + '</b>';
     329                                                                }
     330                                                                p.items.item(1).body.dom.innerHTML += '</ul>';
     331                                                        }
     332
     333                                                        p.items.item(1).body.dom.innerHTML += '<br>';
     334                                                        p.items.item(1).body.dom.innerHTML += _('Регистрация означает согласие с <a href="EULA.html" target="blank">Условиями использования</a> сервиса.');
     335                                                }
     336                                        }
     337                                },
     338                                {
     339                                        id: 'card-3',
     340                                        layout: 'border',
     341                                        defaults: {
     342                                                border: true,
     343                                                padding: '5px 10px 5px 10px'
     344                                        },
     345                                        items: [
     346                                                {
     347                                                        region: 'north',
     348                                                        height: 60,
     349                                                        split: false,
     350                                                        bodyStyle: 'border-bottom: 0px;',
     351                                                        html: '<img style="vertical-align: middle;" src="icons/wizard-wand.jpg"><b>'
     352                                                                        + _('Регистрация')
     353                                                                        + '</b><div style="float: right; color: gray;">'
     354                                                                        + _('Завершение')
     355                                                                        + '</div>'
     356                                                },
     357                                                {
     358                                                        region: 'center',
     359                                                        padding: '20px 30px 30px 30px',
     360                                                        bodyStyle: 'font-size: 1.1em;'
     361                                                }
     362                                        ],
     363                                        listeners: {
     364                                                activate: function(p) {
     365                                                        var card1 = p.ownerCt.items.item(0);
     366                                                        var form1 = card1.items.item(1).getForm();
     367                                                        var personalInfo = form1.getValues();
     368
     369                                                        var card2 = p.ownerCt.items.item(1);
     370                                                        var form2 = card2.items.item(1).getForm();
     371                                                        modems = form2.getValues();
     372
     373                                                        p.items.item(1).body.dom.innerHTML = '<div id="signupProgress"><img src="ext/resources/images/default/shared/loading-balls.gif" style="vertical-align: middle; padding: 10px;">' + _('Создание нового пользователя и объектов мониторинга...') + '</div>';
     374
     375                                                        modemsArray = [];
     376
     377                                                        for(var n = 1; modems['modemid' + n] != undefined; n++) {
     378                                                                if(modems['modemid' + n]) {
     379                                                                        modemsArray.push({
     380                                                                                modemid: modems['modemid' + n],
     381                                                                                phone: modems['phone' + n]
     382                                                                        });
     383                                                                }
     384                                                        }
     385
     386                                                        Ext.Ajax.request({
     387                                                                url: '/obj/operator/signup',
     388                                                                params: {
     389                                                                        login: personalInfo.login ? personalInfo.login : personalInfo.email,
     390                                                                        name: personalInfo.name,
     391                                                                        email: personalInfo.email,
     392                                                                        phone: personalInfo.phone,
     393                                                                        timezone: personalInfo.timezone,
     394                                                                        objects: Ext.util.JSON.encode(modemsArray)
     395                                                                },
     396                                                                callback: function(options, success, response) {
     397                                                                        Ext.fly('signupProgress').remove();
     398                                                                        var err = _('Возникли трудности, возможно, нет связи с сервером, попробуйте еще раз через 3-5 минут.');
     399                                                                        if(success) {
     400                                                                                if(response.status > 0) {
     401                                                                                        if(response.getResponseHeader('Content-Type') == 'text/x-json') {
     402                                                                                                var responseObject = Ext.util.JSON.decode(response.responseText);
     403                                                                                                if( responseObject.success ) {
     404                                                                                                        p.items.item(1).body.dom.innerHTML += '<table width="100%"><tr><td><img src="ext/resources/images/default/tree/drop-yes.gif" style="vertical-align: middle; padding-right: 10px;"></td><td>' + _('Регистрация завершена успешно, пароль выслан на указанный почтовый адрес.') + '</td></tr></table>';
     405                                                                                                        return;
     406                                                                                                }
     407                                                                                                else {
     408                                                                                                        err = responseObject.msg;
     409                                                                                                }
     410                                                                                        }
     411                                                                                }
     412                                                                        }
     413                                                                        p.items.item(1).body.dom.innerHTML += '<table width="100%"><tr><td><img src="ext/resources/images/default/shared/warning.gif" style="vertical-align: middle;"></td><td>' + err + '</td></tr></table>';
     414                                                                }
     415                                                        });
     416                                                }
     417                                        }
     418                                }
     419                        ],
     420                        bbar: [
     421                                '->',
     422                                {
     423                                        id: 'card-prev',
     424                                        width: 80,
     425                                        text: '&larr; ' + _('Назад'),
     426                                        handler: cardNav.createDelegate(this, [-1]),
     427                                        disabled: true
     428                                },
     429                                '-',
     430                                {
     431                                        id: 'card-next',
     432                                        width: 80,
     433                                        text: _('Далее') + ' &rarr;',
     434                                        handler: cardNav.createDelegate(this, [1]),
     435                                }
     436                        ]
     437                });
     438
     439                w.show();
     440                comfortShift(w);
     441        }
     442
     443        Ext.onReady(function() {
     444                Ext.QuickTips.init();
     445
     446                var cp = new Ext.state.CookieProvider({
     447                        expires: new Date(new Date().getTime() + (1000 * 60 * 60 * 24 * 30)) // 30 days
     448                });
     449
     450                Ext.state.Manager.setProvider(cp);
     451        });
     452
     453</script>
     454
    5455
    6456<form>
     
    102552<tr>
    103553 <td colspan="3" align="right">
    104   <button style="padding: 10px 20px 10px 20px; margin: 10px; align: right;">Оформить...</button>
     554  <button style="padding: 10px 20px 10px 20px; margin: 10px; align: right;" onClick="javascript:purchase()">Оформить...</button>
    105555 </td>
    106556</tr>