Changes between Version 20 and Version 21 of Store


Ignore:
Timestamp:
Jun 19, 2012 12:22:33 PM (13 years ago)
Author:
tolix
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Store

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