synergy 0.50.0 → 0.60.0.RC1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +6 -2
- data/app/controllers/admin/base_controller_decorator.rb +16 -0
- data/app/controllers/admin/orders_controller_decorator.rb +6 -0
- data/app/controllers/admin/products_controller_decorator.rb +5 -4
- data/app/controllers/checkout_controller_decorator.rb +1 -2
- data/app/controllers/orders_controller_decorator.rb +7 -0
- data/app/helpers/checkout_helper.rb +32 -0
- data/app/models/payment_method/sber_bank_invoice.rb +14 -0
- data/app/views/admin/orders/courier_instruction.html.erb +68 -0
- data/app/views/admin/payments/source_forms/_sberbankinvoice.html.erb +0 -0
- data/app/views/admin/payments/source_views/_sberbankinvoice.html.erb +0 -0
- data/app/views/admin/shared/_tabs.html.erb +6 -0
- data/app/views/checkout/payment/_sberbankinvoice.html.erb +0 -0
- data/app/views/errors/404.html.erb +11 -0
- data/app/views/orders/sberbank_invoice.html.erb +74 -0
- data/app/views/orders/show.html.erb +17 -0
- data/app/views/user_mailer/reset_password_instructions.text.erb +11 -0
- data/config/locales/ru.yml +63 -0
- data/config/locales/sberbank_ru.yml +10 -0
- data/config/routes.rb +2 -0
- data/lib/ext/number_helper.rb +2 -0
- data/lib/synergy.rb +21 -4
- data/lib/synergy_hooks.rb +6 -0
- data/public/500.html +28 -0
- data/public/javascripts/admin/inline_help.js +5 -2
- data/public/stylesheets/admin/inline_help.css +1 -1
- data/public/stylesheets/admin/synergy.css +9 -0
- data/public/stylesheets/courier_instruction.css +136 -0
- data/public/stylesheets/reset.css +42 -0
- data/synergy.gemspec +10 -10
- metadata +45 -25
data/README.md
CHANGED
@@ -19,7 +19,8 @@ Synergy
|
|
19
19
|
1. Добавьте в Gemfile следующие строки:
|
20
20
|
|
21
21
|
gem 'mysql2', '0.2.7'
|
22
|
-
gem '
|
22
|
+
gem 'russian', :git => 'git://github.com/yaroslav/russian.git'
|
23
|
+
gem 'spree', '~> 0.60.0'
|
23
24
|
gem 'spree_i18n', :git => 'git://github.com/spree/spree_i18n.git'
|
24
25
|
gem 'spree_static_content'
|
25
26
|
gem 'spree_editor'
|
@@ -28,7 +29,8 @@ Synergy
|
|
28
29
|
gem 'spree_yandex_market'
|
29
30
|
gem 'spree_address_book'
|
30
31
|
gem 'spree_dynamic_sitemaps'
|
31
|
-
gem 'synergy', '~> 0.50.0
|
32
|
+
gem 'synergy', '~> 0.50.0'
|
33
|
+
gem 'synergy_default_theme', '1.0.1'
|
32
34
|
|
33
35
|
1. Выполните следующие команды:
|
34
36
|
|
@@ -36,8 +38,10 @@ Synergy
|
|
36
38
|
rails g spree:site -f
|
37
39
|
rake spree:install
|
38
40
|
rake synergy:install
|
41
|
+
rake synergy_default_theme:install
|
39
42
|
rake db:migrate
|
40
43
|
rake db:seed db:sample
|
44
|
+
rake db:admin:create
|
41
45
|
rails s
|
42
46
|
|
43
47
|
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
Admin::BaseController.class_eval do
|
3
|
+
def flash_message_for(object, event_sym)
|
4
|
+
resource_i18n_class_name = object.class.model_name.human.mb_chars
|
5
|
+
resource_desc = resource_i18n_class_name
|
6
|
+
resource_desc += " \"#{object.name}\"" if object.respond_to?(:name)
|
7
|
+
|
8
|
+
if (resource_i18n_class_name =~ /[ое](\s|$)/)
|
9
|
+
I18n.t("it_#{event_sym}", :resource => resource_desc)
|
10
|
+
elsif (resource_i18n_class_name =~ /[ая](\s|$)/)
|
11
|
+
I18n.t("she_#{event_sym}", :resource => resource_desc)
|
12
|
+
else
|
13
|
+
I18n.t(event_sym, :resource => resource_desc)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -26,9 +26,9 @@ Admin::ProductsController.class_eval do
|
|
26
26
|
end
|
27
27
|
|
28
28
|
taxon_name = doc.css(".b-breadcrumbs a").last.content
|
29
|
-
price = doc.css(".
|
29
|
+
price = doc.css(".b-model-prices__avg span").first.content.gsub(nbsp, '')
|
30
30
|
image_urls = doc.css("#model-pictures a").map{|link| link['href'] }
|
31
|
-
name = doc.css("
|
31
|
+
name = doc.css(".b-page-title").first.content
|
32
32
|
|
33
33
|
p = Product.new(:name => name, :price => price)
|
34
34
|
p.available_on = Time.now if params[:available]
|
@@ -50,8 +50,9 @@ Admin::ProductsController.class_eval do
|
|
50
50
|
flash[:notice] = "Данные о товаре \"#{p.name}\" успешно скачены с Яндекс.Маркет"
|
51
51
|
end
|
52
52
|
end
|
53
|
-
rescue
|
54
|
-
flash[:
|
53
|
+
rescue Exception => error
|
54
|
+
flash[:notice] = "Данные о товаре не удалось взять с Яндекс.Маркет, проверьте ID товара и наличие полной информации о нём по ссылке #{market_url}."
|
55
|
+
flash[:error] = error.backtrace.find{|line| line =~ /#{__FILE__}/}.to_s + "(#{$!})"
|
55
56
|
end
|
56
57
|
redirect_to admin_products_path
|
57
58
|
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module CheckoutHelper
|
2
|
+
|
3
|
+
def checkout_states
|
4
|
+
%w(address delivery payment confirm)
|
5
|
+
end
|
6
|
+
|
7
|
+
# TODO: this can be deleted from extension after Spree 0.70.0 release
|
8
|
+
def checkout_progress
|
9
|
+
states = checkout_states
|
10
|
+
items = states.map do |state|
|
11
|
+
text = t("order_state.#{state}").titleize
|
12
|
+
|
13
|
+
css_classes = []
|
14
|
+
current_index = states.index(@order.state)
|
15
|
+
state_index = states.index(state)
|
16
|
+
|
17
|
+
if state_index < current_index
|
18
|
+
css_classes << 'completed'
|
19
|
+
text = link_to text, checkout_state_path(state)
|
20
|
+
end
|
21
|
+
|
22
|
+
css_classes << 'next' if state_index == current_index + 1
|
23
|
+
css_classes << 'current' if state == @order.state
|
24
|
+
css_classes << 'first' if state_index == 0
|
25
|
+
css_classes << 'last' if state_index == states.length - 1
|
26
|
+
# It'd be nice to have separate classes but combining them with a dash helps out for IE6 which only sees the last class
|
27
|
+
content_tag('li', content_tag('span', text), :class => css_classes.join('-'))
|
28
|
+
end
|
29
|
+
content_tag('ol', raw(items.join("\n")), :class => 'progress-steps', :id => "checkout-step-#{@order.state}")
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class PaymentMethod::SberBankInvoice < PaymentMethod::Check
|
2
|
+
preference :recipient, :string
|
3
|
+
preference :inn, :string
|
4
|
+
preference :kpp, :string
|
5
|
+
preference :corr, :string
|
6
|
+
preference :bik, :string
|
7
|
+
preference :settlement_acc, :string
|
8
|
+
preference :recipient_bank, :string
|
9
|
+
preference :recipient_bank_city, :string
|
10
|
+
|
11
|
+
def desc
|
12
|
+
"<p>#{I18n.t('sberbank_invoice')}</p>".html_safe
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>Товарный чек</title>
|
5
|
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
6
|
+
|
7
|
+
<link rel="shortcut icon" type="image/vnd.microsoft.icon" href="/favicon.ico">
|
8
|
+
<link rel="icon" type="image/png" href="/favicon.png"/>
|
9
|
+
|
10
|
+
<%= stylesheet_link_tag 'reset' %>
|
11
|
+
<%= stylesheet_link_tag 'courier_instruction', :media => :all %>
|
12
|
+
|
13
|
+
</head>
|
14
|
+
<body>
|
15
|
+
<div id="main">
|
16
|
+
<header>
|
17
|
+
<div id="header">
|
18
|
+
<h1><%= Spree::Config[:site_name] %></h1>
|
19
|
+
|
20
|
+
<div class="site_url"><%= Spree::Config[:site_url] %></div>
|
21
|
+
<div class="store_email"><%= Spree::Config[:store_email] %></div>
|
22
|
+
<div class="store_phone"><%= Spree::Config[:store_phone] %></div>
|
23
|
+
|
24
|
+
</div>
|
25
|
+
</header>
|
26
|
+
<section>
|
27
|
+
<div id="content">
|
28
|
+
<h1>Заказ №<%= @order.number %> от <%= Russian::strftime(@order.completed_at, "%d %B %Y г.") %></h1>
|
29
|
+
|
30
|
+
<h2>Адрес доставки:</h2>
|
31
|
+
<div><%= @order.ship_address.address1 %></div>
|
32
|
+
|
33
|
+
<h2>Контактное лицо:</h2>
|
34
|
+
<div><%= @order.ship_address.full_name %></div>
|
35
|
+
<div><%= @order.ship_address.phone %></div>
|
36
|
+
|
37
|
+
<table class="order_line_items" cellspacing="0" cellpadding="0" style="border-collapse: collapse;">
|
38
|
+
<colgroup>
|
39
|
+
<col width="50"/>
|
40
|
+
<col/>
|
41
|
+
<col width="100"/>
|
42
|
+
</colgroup>
|
43
|
+
<tr>
|
44
|
+
<th>№</th>
|
45
|
+
<th>Наименование товара</th>
|
46
|
+
<th>Кол-во</th>
|
47
|
+
</tr>
|
48
|
+
<% if @order.line_items.any? %>
|
49
|
+
<% @order.line_items.each_with_index do |li, index| %>
|
50
|
+
<tr>
|
51
|
+
<td><%= index + 1 %></td>
|
52
|
+
<td><%= li.product.name %></td>
|
53
|
+
<td style="text-align: right"><%= li.quantity %></td>
|
54
|
+
</tr>
|
55
|
+
<% end %>
|
56
|
+
<% end %>
|
57
|
+
</table>
|
58
|
+
<div id="total_desc">Всего наименований: <%= @order.line_items.count %></div>
|
59
|
+
<div id="seller">
|
60
|
+
<div id="order_delivered">Заказ доставил ________________/______________/ "___" __________ 2011</div>
|
61
|
+
<div id="order_recieved">Заказ получил ________________/______________/ "___" __________ 2011</div>
|
62
|
+
</div>
|
63
|
+
</div>
|
64
|
+
</section>
|
65
|
+
</div>
|
66
|
+
<script type="text/javascript"> window.print(); </script>
|
67
|
+
</body>
|
68
|
+
</html>
|
File without changes
|
File without changes
|
@@ -0,0 +1,6 @@
|
|
1
|
+
<%= tab :overview, :route => :admin %>
|
2
|
+
<%= tab :orders, :payments, :creditcard_payments, :shipments, :creditcards, :return_authorizations %>
|
3
|
+
<%= tab :products , :option_types, :properties, :prototypes, :variants, :product_properties, :taxons, :product_groups, :reviews, :vasia %>
|
4
|
+
<%= tab :reports %>
|
5
|
+
<%= tab :configurations, :general_settings, :mail_methods, :tax_categories, :zones, :states, :payment_methods, :inventory_settings, :taxonomies, :shipping_methods, :trackers, :editor_settings, :online_support_settings, :authentication_methods, :label => 'configuration' %>
|
6
|
+
<%= tab :users %>
|
File without changes
|
@@ -1,5 +1,16 @@
|
|
1
1
|
<h1><%= t(:page_not_found) %></h1>
|
2
2
|
|
3
|
+
<p>Запрошенному вами URL не соответствует ни одна страница сайта.</p>
|
4
|
+
<p>Возможные причины:</p>
|
5
|
+
<ul>
|
6
|
+
<li>Вам могли прислать неверную ссылку.</li>
|
7
|
+
<li>Вы могли набрать адрес с ошибкой.</li>
|
8
|
+
<li>Страница могла быть удалена с изменением структуры сайта.</li>
|
9
|
+
<li>Товар более недоступен для продажи.</li>
|
10
|
+
</ul>
|
11
|
+
|
12
|
+
<p>Если вы уверены, что адрес правильный, попробуйте начать поиск информации с <%= link_to 'главной страницы сайта', '/' %></p>
|
13
|
+
|
3
14
|
<% content_for :sidebar do %>
|
4
15
|
<%= hook :taxon_sidebar_navigation do %>
|
5
16
|
<%= render :partial => "shared/taxonomies" %>
|
@@ -0,0 +1,74 @@
|
|
1
|
+
<html>
|
2
|
+
<header>
|
3
|
+
<style>
|
4
|
+
td{font:normal 12px/140% Verdana,Geneva, sans-serif;
|
5
|
+
color:#000;
|
6
|
+
padding:5px;
|
7
|
+
text-align:left;}
|
8
|
+
.kvit{border:1px solid #000;
|
9
|
+
border-collapse:collapse;
|
10
|
+
width:650px;}
|
11
|
+
.kvit .dashed{border:1px solid #000;
|
12
|
+
border-bottom:1px dashed #000;
|
13
|
+
border-collapse:collapse;}
|
14
|
+
.kvit .nodashed{border:1px solid #000;
|
15
|
+
border-top:none;
|
16
|
+
border-collapse:collapse;}
|
17
|
+
table{border:1px solid #8a8a8a;
|
18
|
+
border-collapse:collapse;
|
19
|
+
width:415px;}
|
20
|
+
table td{border:1px solid #8a8a8a;
|
21
|
+
border-collapse:collapse;}
|
22
|
+
.comment{border-top:1px solid #8a8a8a;
|
23
|
+
margin:3px 0 10px;}
|
24
|
+
</style>
|
25
|
+
</header>
|
26
|
+
<body>
|
27
|
+
<table cellpadding="3" class="kvit">
|
28
|
+
<% 2.times do %>
|
29
|
+
<tr>
|
30
|
+
<td align="left" width="230" class="dashed">
|
31
|
+
<b>КВИТАНЦИЯ</b>
|
32
|
+
<%== '<br />' * 14 %>
|
33
|
+
Кассир<br /><br />
|
34
|
+
</td>
|
35
|
+
<td align="right" width="415" class="dashed">
|
36
|
+
<table border="0" cellpadding="0">
|
37
|
+
</tr>
|
38
|
+
<td colspan="3">
|
39
|
+
Получатель платежа: <%= @preferences['recipient'] %><br />
|
40
|
+
ИНН <%= @preferences['inn'] %> / КПП <%= @preferences['kpp'] %><br />
|
41
|
+
Корр.сч. <%= @preferences['corr'] %> БИК <%= @preferences['bik'] %><br />
|
42
|
+
Расч. сч. <%= @preferences['settlement_acc'] %> в <%= @preferences['recipient_bank'] %>, г. <%= @preferences['recipient_bank_city'] %>
|
43
|
+
</td>
|
44
|
+
</tr>
|
45
|
+
<tr>
|
46
|
+
<td COLSPAN="3"><%= @order.ship_address.zipcode %>, г. <%= @order.ship_address.city %>, <%= [@order.ship_address.address1, @order.ship_address.address2].join %>
|
47
|
+
<div align="center" class="comment"><small>Адрес плательщика</small></div>
|
48
|
+
</td>
|
49
|
+
</tr>
|
50
|
+
<tr>
|
51
|
+
<td align="center">Вид платежа</td>
|
52
|
+
<td align="center">Дата</td>
|
53
|
+
<td align="center">Сумма</td>
|
54
|
+
</tr>
|
55
|
+
<tr>
|
56
|
+
<td align="left">Оплата заказа № <%= @order.number %></td>
|
57
|
+
<td width="" valign="bottom"><%= Time.now.strftime("%d.%m.%Y") %></td>
|
58
|
+
<td width="" valign="bottom"><%= @order.total.to_i %> руб. 00 коп.</td>
|
59
|
+
</tr>
|
60
|
+
<tr>
|
61
|
+
<td colspan="3" valign="center"><br><small>Плательщик (ФИО, подпись):</small> <em><%= [@order.ship_address.lastname, @order.shipment.address.firstname, @order.shipment.address.secondname].join(' ') %></em></td>
|
62
|
+
</tr>
|
63
|
+
</table>
|
64
|
+
</td>
|
65
|
+
</tr>
|
66
|
+
<% end %>
|
67
|
+
</table><script language="JavaScript" type="text/JavaScript">
|
68
|
+
//setTimeout('window.print()',1000);
|
69
|
+
</script>
|
70
|
+
</body>
|
71
|
+
</html>
|
72
|
+
|
73
|
+
|
74
|
+
|
@@ -0,0 +1,17 @@
|
|
1
|
+
<h1><%= accurate_title %></h1>
|
2
|
+
|
3
|
+
<div id="order">
|
4
|
+
<% if params.has_key? :checkout_complete %>
|
5
|
+
<h3><%= t('thank_you_for_your_order') %></h3>
|
6
|
+
<% end %>
|
7
|
+
<%= render :partial => 'shared/order_details', :locals => {:order => @order} %>
|
8
|
+
<p>
|
9
|
+
<%= link_to t('back_to_store'), root_path %>
|
10
|
+
<% unless params.has_key? :checkout_complete %>
|
11
|
+
| <%= link_to t('my_account'), account_path if current_user%>
|
12
|
+
<% end %>
|
13
|
+
</p>
|
14
|
+
<% if @order.payment_method.is_a?(PaymentMethod::SberBankInvoice) %>
|
15
|
+
<%= link_to t('print_sberbank_invoice'), orders_sberbank_invoice_path %>
|
16
|
+
<% end %>
|
17
|
+
</div>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
Добрый день.
|
2
|
+
|
3
|
+
С вашего адреса был сделан запрос на сброс пароля.
|
4
|
+
Если вы этого не делали, проигнорируйте это письмо.
|
5
|
+
|
6
|
+
Если вы действительно запрашивали сброс пароля, перейдите по ссылке ниже:
|
7
|
+
|
8
|
+
<%= @edit_password_reset_url %>
|
9
|
+
|
10
|
+
Если ссылка не открывается, попробуйте скопировать ее и вставить в адресную строку вашего браузера.
|
11
|
+
Если вам не удалось сбросить пароль, свяжитесь пожалуйста с администрацией магазина.
|
data/config/locales/ru.yml
CHANGED
@@ -1,6 +1,16 @@
|
|
1
1
|
ru:
|
2
2
|
cash_on_delivery: "Наложенный платёж"
|
3
|
+
sberbank_invoice: "Квитанция СберБанка"
|
3
4
|
page_not_found: "Страница не найдена"
|
5
|
+
courier_instructions: "Поручение курьеру"
|
6
|
+
|
7
|
+
it_successfully_created: "%{resource} успешно создано!"
|
8
|
+
it_successfully_removed: "%{resource} успешно удалено!"
|
9
|
+
it_successfully_updated: "%{resource} успешно обновлено!"
|
10
|
+
|
11
|
+
she_successfully_created: "%{resource} успешно создана!"
|
12
|
+
she_successfully_removed: "%{resource} успешно удалена!"
|
13
|
+
she_successfully_updated: "%{resource} успешно обновлена!"
|
4
14
|
|
5
15
|
activerecord:
|
6
16
|
attributes:
|
@@ -18,6 +28,59 @@ ru:
|
|
18
28
|
one: "Адрес"
|
19
29
|
few: "Адреса"
|
20
30
|
other: "Адресов"
|
31
|
+
|
32
|
+
adjustment:
|
33
|
+
one: Надбавка
|
34
|
+
other: Надбавки
|
35
|
+
calculator:
|
36
|
+
one: Калькулятор
|
37
|
+
other: Калькуляторы
|
38
|
+
configuration:
|
39
|
+
one: Конфигурация
|
40
|
+
other: Конфигурации
|
41
|
+
mail_method:
|
42
|
+
one: Метод отправки почты
|
43
|
+
other: Методы отправки почты
|
44
|
+
option_type:
|
45
|
+
one: Тип опции
|
46
|
+
other: Типы опций
|
47
|
+
option_value:
|
48
|
+
one: Значение опции
|
49
|
+
other: Значения опции
|
50
|
+
page:
|
51
|
+
one: Страница
|
52
|
+
other: Страницы
|
53
|
+
payment_method:
|
54
|
+
one: Способ оплаты
|
55
|
+
other: Способы оплаты
|
56
|
+
preference:
|
57
|
+
one: Настройка
|
58
|
+
other: Настройки
|
59
|
+
product_option_type:
|
60
|
+
one: Тип опции продукта
|
61
|
+
other: Типы опций продукта
|
62
|
+
product_property:
|
63
|
+
one: Свойство товара
|
64
|
+
other: Свойства товара
|
65
|
+
product_scope:
|
66
|
+
one: Фильтр
|
67
|
+
other: Фильтры
|
68
|
+
promotion:
|
69
|
+
one: Промо-акция
|
70
|
+
other: Промо-акции
|
71
|
+
promotion_rule:
|
72
|
+
one: Правило промо-акции
|
73
|
+
other: Правила промо-акции
|
74
|
+
shipping_method:
|
75
|
+
one: Способ доставки
|
76
|
+
other: Способы доставки
|
77
|
+
tracker:
|
78
|
+
one: Трекер
|
79
|
+
other: Трекеры
|
80
|
+
|
81
|
+
errors:
|
82
|
+
messages:
|
83
|
+
blank: "не может быть пустым"
|
21
84
|
|
22
85
|
errors_prohibited_this_record_from_being_saved:
|
23
86
|
one: "1 ошибка не позволяет сохранить запись в базе"
|
data/config/routes.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
Rails.application.routes.draw do
|
2
2
|
# Add your extension routes here
|
3
3
|
match "/admin/products/import_from_yandex_market" => "admin/products#import_from_yandex_market", :as => :import_from_yandex_market
|
4
|
+
match "/admin/orders/:id/courier_instruction" => "admin/orders#courier_instruction", :as => :orders_courier_instruction
|
5
|
+
match "/orders/:id/sberbank_invoice" => "orders#sberbank_invoice", :as => :orders_sberbank_invoice
|
4
6
|
end
|
data/lib/ext/number_helper.rb
CHANGED
data/lib/synergy.rb
CHANGED
@@ -27,6 +27,12 @@ module Synergy
|
|
27
27
|
Spree::Config.set(:admin_interface_logo => "admin/logo.png")
|
28
28
|
checkout_zone = Zone.first
|
29
29
|
Spree::Config.set(:checkout_zone => checkout_zone.name) if checkout_zone
|
30
|
+
# store email address
|
31
|
+
Spree::Config.set(:store_email => 'test@site.ru') unless Spree::Config[:store_email]
|
32
|
+
# store phone
|
33
|
+
Spree::Config.set(:store_phone => '+7 (495) 1234567') unless Spree::Config[:store_phone]
|
34
|
+
# store address
|
35
|
+
#Spree::Config.set(:store_address => 'Somewhere st. Nowhere')
|
30
36
|
end
|
31
37
|
|
32
38
|
ADDRESS_FIELDS.clear << ["lastname", "firstname", "secondname", "country", "state", "city", "zipcode", "address1", "phone"]
|
@@ -41,10 +47,21 @@ module Synergy
|
|
41
47
|
# зарегистрировать калькулятор для доставки наложенным платежём
|
42
48
|
Calculator::CashOnDelivery.register
|
43
49
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
Order.state_machine
|
50
|
+
PaymentMethod::SberBankInvoice.register
|
51
|
+
|
52
|
+
# добавить событие для перехода от шага доставки к шагу подтверждения, минуя шаг оплаты
|
53
|
+
confirm_event = StateMachine::Event.new(Order.state_machine, :confirm_without_payment)
|
54
|
+
confirm_event.transition :to => 'confirm'
|
55
|
+
Order.state_machine.events << confirm_event
|
56
|
+
|
57
|
+
# переопределение события :next для отображения шага подтверждения в любом случае
|
58
|
+
next_event = StateMachine::Event.new(Order.state_machine, :next)
|
59
|
+
next_event.transition :from => 'cart', :to => 'address'
|
60
|
+
next_event.transition :from => 'address', :to => 'delivery'
|
61
|
+
next_event.transition :from => 'delivery', :to => 'payment'
|
62
|
+
next_event.transition :from => 'payment', :to => 'confirm'
|
63
|
+
next_event.transition :from => 'confirm', :to => 'complete'
|
64
|
+
Order.state_machine.events << next_event
|
48
65
|
end
|
49
66
|
|
50
67
|
config.to_prepare &method(:activate).to_proc
|
data/lib/synergy_hooks.rb
CHANGED
@@ -1,4 +1,10 @@
|
|
1
1
|
class SecointHooks < Spree::ThemeSupport::HookListener
|
2
|
+
insert_before :admin_order_show_buttons do
|
3
|
+
%(
|
4
|
+
<%= button_link_to t("courier_instructions"), orders_courier_instruction_path(@order) if @order.completed_at %>
|
5
|
+
)
|
6
|
+
end
|
7
|
+
|
2
8
|
insert_after :admin_inside_head do
|
3
9
|
%(
|
4
10
|
<%= javascript_include_tag 'admin/inline_help.js', 'admin/jquery.simpletip-1.3.1.pack.js' %>
|
data/public/500.html
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>500 Internal Server Error</title>
|
5
|
+
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
6
|
+
<style type="text/css">
|
7
|
+
body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
|
8
|
+
div.dialog {
|
9
|
+
width: 25em;
|
10
|
+
padding: 0 4em;
|
11
|
+
margin: 4em auto 0 auto;
|
12
|
+
border: 1px solid #ccc;
|
13
|
+
border-right-color: #999;
|
14
|
+
border-bottom-color: #999;
|
15
|
+
}
|
16
|
+
h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
|
17
|
+
</style>
|
18
|
+
</head>
|
19
|
+
|
20
|
+
<body>
|
21
|
+
<!-- This file lives in public/500.html -->
|
22
|
+
<div class="dialog">
|
23
|
+
<h1>500 Internal Server Error</h1>
|
24
|
+
<p>В процессе обработки вашего запроса произошла неожиданная ошибка сервера.</p>
|
25
|
+
<p><a href='/'>Вернуться в интернет-магазин</a></p>
|
26
|
+
</div>
|
27
|
+
</body>
|
28
|
+
</html>
|
@@ -34,8 +34,11 @@ fields = {
|
|
34
34
|
|
35
35
|
function register_help() {
|
36
36
|
jQuery.each(fields, function(element_id, help_msg) {
|
37
|
-
jQuery('
|
38
|
-
|
37
|
+
if (jQuery('#help_'+element_id).length == 0)
|
38
|
+
{
|
39
|
+
jQuery('label[for='+element_id+']').append(" <span class='help' id='help_"+element_id+"'><img src='/images/admin/icons/help.png' alt='help' /></span>");
|
40
|
+
jQuery('#help_'+element_id).simpletip({ position: 'right', offset: [-10, -230], content: help_msg});
|
41
|
+
}
|
39
42
|
});
|
40
43
|
}
|
41
44
|
|
@@ -9,6 +9,7 @@ ul#shipping-specs li {
|
|
9
9
|
|
10
10
|
#content {
|
11
11
|
position: relative;
|
12
|
+
min-height: 640px;
|
12
13
|
}
|
13
14
|
|
14
15
|
input.format-y-m-d { width: 90% }
|
@@ -96,3 +97,11 @@ h2 {
|
|
96
97
|
border-right-color: #999;
|
97
98
|
border-bottom-color: #999;
|
98
99
|
}
|
100
|
+
|
101
|
+
a.button span, .actions a {
|
102
|
+
white-space: nowrap;
|
103
|
+
}
|
104
|
+
|
105
|
+
.toolbar {
|
106
|
+
margin-bottom: 0;
|
107
|
+
}
|
@@ -0,0 +1,136 @@
|
|
1
|
+
/* ----- */
|
2
|
+
|
3
|
+
html, body {
|
4
|
+
height: 100%;
|
5
|
+
}
|
6
|
+
body {
|
7
|
+
font-family: 'Verdana', sans-serif;
|
8
|
+
color: black;
|
9
|
+
font-size: 15px;
|
10
|
+
line-height: 1.4em;
|
11
|
+
}
|
12
|
+
|
13
|
+
div, img {
|
14
|
+
position: relative;
|
15
|
+
}
|
16
|
+
|
17
|
+
#main {
|
18
|
+
width: 900px;
|
19
|
+
margin: 0 auto;
|
20
|
+
}
|
21
|
+
|
22
|
+
@media print {
|
23
|
+
|
24
|
+
#main {
|
25
|
+
width: 100%;
|
26
|
+
margin: 0 auto;
|
27
|
+
}
|
28
|
+
|
29
|
+
}
|
30
|
+
|
31
|
+
h1, h2, h3, h4, h5, h6 {
|
32
|
+
font-family: "Times New Roman", serif
|
33
|
+
}
|
34
|
+
h1 { font-size: 24px; text-align: center; font-weight: bold; }
|
35
|
+
h2 { font-size: 18px; }
|
36
|
+
h3 { font-size: 16px; }
|
37
|
+
h4 { font-size: 14px; }
|
38
|
+
h5 { font-size: 12px; }
|
39
|
+
h6 { font-size: 10px; }
|
40
|
+
|
41
|
+
h1, h2, h3, h4, h5, h6, p, hr, ul, ol {
|
42
|
+
margin: 15px 0 10px 0;
|
43
|
+
}
|
44
|
+
|
45
|
+
a {
|
46
|
+
text-decoration: underline;
|
47
|
+
color: #0000ff;
|
48
|
+
outline-style: none;
|
49
|
+
}
|
50
|
+
a:hover {
|
51
|
+
text-decoration: none;
|
52
|
+
}
|
53
|
+
|
54
|
+
b, strong {
|
55
|
+
font-weight: bold;
|
56
|
+
}
|
57
|
+
|
58
|
+
#content table {
|
59
|
+
width: 100%;
|
60
|
+
}
|
61
|
+
|
62
|
+
#content td, #content th {
|
63
|
+
border: 1px solid #000;
|
64
|
+
border-collapse: collapse;
|
65
|
+
border-spacing: 0;
|
66
|
+
}
|
67
|
+
|
68
|
+
#content td {
|
69
|
+
padding: 3px 8px;
|
70
|
+
}
|
71
|
+
#content th {
|
72
|
+
font-weight: bold;
|
73
|
+
font-size: 16px;
|
74
|
+
padding: 3px 8px;
|
75
|
+
}
|
76
|
+
|
77
|
+
#content .default, #content .default th, #content .default td {
|
78
|
+
margin: 0;
|
79
|
+
padding: 0;
|
80
|
+
border-style: none;
|
81
|
+
}
|
82
|
+
|
83
|
+
#header {
|
84
|
+
height: 140px;
|
85
|
+
}
|
86
|
+
|
87
|
+
#header h1 {
|
88
|
+
text-align: left;
|
89
|
+
}
|
90
|
+
#logo {
|
91
|
+
position: absolute;
|
92
|
+
left: 5px;
|
93
|
+
top: 45px;
|
94
|
+
}
|
95
|
+
#header_adress {
|
96
|
+
position: absolute;
|
97
|
+
left: 134px;
|
98
|
+
top: 44px;
|
99
|
+
font-size: 18px;
|
100
|
+
}
|
101
|
+
|
102
|
+
#total {
|
103
|
+
text-align: right;
|
104
|
+
font-size: 16px;
|
105
|
+
font-weight: bold;
|
106
|
+
padding: 3px 8px 3px 0;
|
107
|
+
}
|
108
|
+
#total span {
|
109
|
+
padding-right: 25px;
|
110
|
+
}
|
111
|
+
#total_desc {
|
112
|
+
font-size: 16px;
|
113
|
+
}
|
114
|
+
#total_words {
|
115
|
+
margin: 5px 0 20px 0;
|
116
|
+
font-weight: bold;
|
117
|
+
font-size: 16px;
|
118
|
+
}
|
119
|
+
#seller_line {
|
120
|
+
position: absolute;
|
121
|
+
left: 70px;
|
122
|
+
bottom: 3px;
|
123
|
+
width: 230px;
|
124
|
+
border-bottom: 1px solid #000;
|
125
|
+
}
|
126
|
+
.order_line_items {
|
127
|
+
margin: 1em 0;
|
128
|
+
}
|
129
|
+
|
130
|
+
#seller {
|
131
|
+
margin-top: 2em;
|
132
|
+
}
|
133
|
+
|
134
|
+
#seller div {
|
135
|
+
margin: 1em 0;
|
136
|
+
}
|
@@ -0,0 +1,42 @@
|
|
1
|
+
html, body, div, span, applet, object, iframe,
|
2
|
+
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
|
3
|
+
a, abbr, acronym, address, big, cite, code,
|
4
|
+
del, dfn, em, img, ins, kbd, q, s, samp,
|
5
|
+
small, strike, strong, sub, sup, tt, var,
|
6
|
+
b, u, i, center,
|
7
|
+
dl, dt, dd, ol, ul, li,
|
8
|
+
fieldset, form, label, legend,
|
9
|
+
table, caption, tbody, tfoot, thead, tr, th, td,
|
10
|
+
article, aside, canvas, details, embed,
|
11
|
+
figure, figcaption, footer, header, hgroup,
|
12
|
+
menu, nav, output, ruby, section, summary,
|
13
|
+
time, mark, audio, video {
|
14
|
+
margin: 0;
|
15
|
+
padding: 0;
|
16
|
+
border: 0;
|
17
|
+
font-size: 100%;
|
18
|
+
font: inherit;
|
19
|
+
}
|
20
|
+
/* HTML5 display-role reset for older browsers */
|
21
|
+
article, aside, details, figcaption, figure,
|
22
|
+
footer, header, hgroup, menu, nav, section {
|
23
|
+
display: block;
|
24
|
+
}
|
25
|
+
body {
|
26
|
+
line-height: 1;
|
27
|
+
}
|
28
|
+
ol, ul {
|
29
|
+
list-style: none;
|
30
|
+
}
|
31
|
+
blockquote, q {
|
32
|
+
quotes: none;
|
33
|
+
}
|
34
|
+
blockquote:before, blockquote:after,
|
35
|
+
q:before, q:after {
|
36
|
+
content: '';
|
37
|
+
content: none;
|
38
|
+
}
|
39
|
+
table {
|
40
|
+
border-collapse: collapse;
|
41
|
+
border-spacing: 0;
|
42
|
+
}
|
data/synergy.gemspec
CHANGED
@@ -1,28 +1,28 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.platform = Gem::Platform::RUBY
|
3
3
|
s.name = 'synergy'
|
4
|
-
s.version = '0.
|
4
|
+
s.version = '0.60.0.RC1'
|
5
5
|
s.summary = 'Russian e-commerce solution based on Spree'
|
6
|
-
|
6
|
+
s.description = ''
|
7
7
|
s.required_ruby_version = '>= 1.8.7'
|
8
8
|
|
9
9
|
s.author = 'Roman Smirnov'
|
10
10
|
s.email = 'roman@railsdog.com'
|
11
11
|
s.homepage = 'https://github.com/secoint/synergy'
|
12
|
-
|
12
|
+
s.rubyforge_project = 'synergy'
|
13
13
|
|
14
14
|
s.files = `git ls-files`.split("\n")
|
15
15
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
16
16
|
s.require_path = 'lib'
|
17
17
|
s.requirements << 'none'
|
18
18
|
|
19
|
-
s.add_dependency('
|
20
|
-
s.add_dependency('json', '1.5.1')
|
21
|
-
s.add_dependency('nokogiri', '1.4.4')
|
22
|
-
s.add_dependency('spree', '
|
23
|
-
s.add_dependency('spree_static_content', '~> 0.
|
24
|
-
s.add_dependency('spree_editor', '~> 0.50.
|
25
|
-
s.add_dependency('spree_robokassa', '~> 0.50.
|
19
|
+
s.add_dependency('synergy_russian', '0.2.8')
|
20
|
+
s.add_dependency('json', '~> 1.5.1')
|
21
|
+
s.add_dependency('nokogiri', '~> 1.4.4')
|
22
|
+
s.add_dependency('spree', '~> 0.60.0')
|
23
|
+
s.add_dependency('spree_static_content', '~> 0.60.1')
|
24
|
+
s.add_dependency('spree_editor', '~> 0.50.1')
|
25
|
+
s.add_dependency('spree_robokassa', '~> 0.50.2')
|
26
26
|
s.add_dependency('spree_yandex_market', '~> 1.2.0')
|
27
27
|
s.add_dependency('spree_online_support', '~> 0.50.0')
|
28
28
|
s.add_dependency('spree_address_book', '~> 0.50.1')
|
metadata
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: synergy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
prerelease:
|
4
|
+
prerelease: true
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
7
|
+
- 60
|
8
8
|
- 0
|
9
|
-
|
9
|
+
- RC1
|
10
|
+
version: 0.60.0.RC1
|
10
11
|
platform: ruby
|
11
12
|
authors:
|
12
13
|
- Roman Smirnov
|
@@ -14,11 +15,11 @@ autorequire:
|
|
14
15
|
bindir: bin
|
15
16
|
cert_chain: []
|
16
17
|
|
17
|
-
date: 2011-
|
18
|
+
date: 2011-06-25 00:00:00 +04:00
|
18
19
|
default_executable:
|
19
20
|
dependencies:
|
20
21
|
- !ruby/object:Gem::Dependency
|
21
|
-
name:
|
22
|
+
name: synergy_russian
|
22
23
|
prerelease: false
|
23
24
|
requirement: &id001 !ruby/object:Gem::Requirement
|
24
25
|
requirements:
|
@@ -27,8 +28,8 @@ dependencies:
|
|
27
28
|
segments:
|
28
29
|
- 0
|
29
30
|
- 2
|
30
|
-
-
|
31
|
-
version: 0.2.
|
31
|
+
- 8
|
32
|
+
version: 0.2.8
|
32
33
|
type: :runtime
|
33
34
|
version_requirements: *id001
|
34
35
|
- !ruby/object:Gem::Dependency
|
@@ -36,7 +37,7 @@ dependencies:
|
|
36
37
|
prerelease: false
|
37
38
|
requirement: &id002 !ruby/object:Gem::Requirement
|
38
39
|
requirements:
|
39
|
-
- -
|
40
|
+
- - ~>
|
40
41
|
- !ruby/object:Gem::Version
|
41
42
|
segments:
|
42
43
|
- 1
|
@@ -50,7 +51,7 @@ dependencies:
|
|
50
51
|
prerelease: false
|
51
52
|
requirement: &id003 !ruby/object:Gem::Requirement
|
52
53
|
requirements:
|
53
|
-
- -
|
54
|
+
- - ~>
|
54
55
|
- !ruby/object:Gem::Version
|
55
56
|
segments:
|
56
57
|
- 1
|
@@ -64,13 +65,13 @@ dependencies:
|
|
64
65
|
prerelease: false
|
65
66
|
requirement: &id004 !ruby/object:Gem::Requirement
|
66
67
|
requirements:
|
67
|
-
- -
|
68
|
+
- - ~>
|
68
69
|
- !ruby/object:Gem::Version
|
69
70
|
segments:
|
70
71
|
- 0
|
71
|
-
-
|
72
|
-
-
|
73
|
-
version: 0.
|
72
|
+
- 60
|
73
|
+
- 0
|
74
|
+
version: 0.60.0
|
74
75
|
type: :runtime
|
75
76
|
version_requirements: *id004
|
76
77
|
- !ruby/object:Gem::Dependency
|
@@ -82,9 +83,9 @@ dependencies:
|
|
82
83
|
- !ruby/object:Gem::Version
|
83
84
|
segments:
|
84
85
|
- 0
|
85
|
-
-
|
86
|
-
-
|
87
|
-
version: 0.
|
86
|
+
- 60
|
87
|
+
- 1
|
88
|
+
version: 0.60.1
|
88
89
|
type: :runtime
|
89
90
|
version_requirements: *id005
|
90
91
|
- !ruby/object:Gem::Dependency
|
@@ -97,8 +98,8 @@ dependencies:
|
|
97
98
|
segments:
|
98
99
|
- 0
|
99
100
|
- 50
|
100
|
-
-
|
101
|
-
version: 0.50.
|
101
|
+
- 1
|
102
|
+
version: 0.50.1
|
102
103
|
type: :runtime
|
103
104
|
version_requirements: *id006
|
104
105
|
- !ruby/object:Gem::Dependency
|
@@ -111,8 +112,8 @@ dependencies:
|
|
111
112
|
segments:
|
112
113
|
- 0
|
113
114
|
- 50
|
114
|
-
-
|
115
|
-
version: 0.50.
|
115
|
+
- 2
|
116
|
+
version: 0.50.2
|
116
117
|
type: :runtime
|
117
118
|
version_requirements: *id007
|
118
119
|
- !ruby/object:Gem::Dependency
|
@@ -171,7 +172,7 @@ dependencies:
|
|
171
172
|
version: 0.50.1
|
172
173
|
type: :runtime
|
173
174
|
version_requirements: *id011
|
174
|
-
description:
|
175
|
+
description: ""
|
175
176
|
email: roman@railsdog.com
|
176
177
|
executables: []
|
177
178
|
|
@@ -184,20 +185,33 @@ files:
|
|
184
185
|
- LICENSE.txt
|
185
186
|
- README.md
|
186
187
|
- Rakefile
|
188
|
+
- app/controllers/admin/base_controller_decorator.rb
|
189
|
+
- app/controllers/admin/orders_controller_decorator.rb
|
187
190
|
- app/controllers/admin/products_controller_decorator.rb
|
188
191
|
- app/controllers/checkout_controller_decorator.rb
|
192
|
+
- app/controllers/orders_controller_decorator.rb
|
189
193
|
- app/controllers/spree/base_controller_decorator.rb
|
190
194
|
- app/controllers/user_sessions_controller_decorator.rb
|
195
|
+
- app/helpers/checkout_helper.rb
|
191
196
|
- app/models/calculator/cash_on_delivery.rb
|
192
197
|
- app/models/order_decorator.rb
|
198
|
+
- app/models/payment_method/sber_bank_invoice.rb
|
193
199
|
- app/models/taxon_decorator.rb
|
200
|
+
- app/views/admin/orders/courier_instruction.html.erb
|
194
201
|
- app/views/admin/overview/index.html.erb
|
202
|
+
- app/views/admin/payments/source_forms/_sberbankinvoice.html.erb
|
203
|
+
- app/views/admin/payments/source_views/_sberbankinvoice.html.erb
|
195
204
|
- app/views/admin/products/index.html.erb
|
205
|
+
- app/views/admin/shared/_tabs.html.erb
|
206
|
+
- app/views/checkout/payment/_sberbankinvoice.html.erb
|
196
207
|
- app/views/errors/404.html.erb
|
197
208
|
- app/views/order_mailer/cancel_email.text.erb
|
198
209
|
- app/views/order_mailer/confirm_email.text.erb
|
210
|
+
- app/views/orders/sberbank_invoice.html.erb
|
211
|
+
- app/views/orders/show.html.erb
|
199
212
|
- app/views/shared/_filters.html.erb
|
200
213
|
- app/views/shipment_mailer/shipped_email.text.erb
|
214
|
+
- app/views/user_mailer/reset_password_instructions.text.erb
|
201
215
|
- config/initializers/secoint.rb
|
202
216
|
- config/locales/affiliate_ru.yml
|
203
217
|
- config/locales/devise.ru.yml
|
@@ -205,6 +219,7 @@ files:
|
|
205
219
|
- config/locales/reviews_ru.yml
|
206
220
|
- config/locales/robokassa_ru.yml
|
207
221
|
- config/locales/ru.yml
|
222
|
+
- config/locales/sberbank_ru.yml
|
208
223
|
- config/locales/wishlist_ru.yml
|
209
224
|
- config/routes.rb
|
210
225
|
- db/default/countries.yml
|
@@ -223,6 +238,7 @@ files:
|
|
223
238
|
- lib/synergy_hooks.rb
|
224
239
|
- lib/tasks/install.rake
|
225
240
|
- lib/tasks/synergy.rake
|
241
|
+
- public/500.html
|
226
242
|
- public/images/admin/bg/admin_menu_back.png
|
227
243
|
- public/images/admin/bg/admin_sub_menu_back.png
|
228
244
|
- public/images/admin/icons/help.png
|
@@ -231,6 +247,8 @@ files:
|
|
231
247
|
- public/javascripts/admin/jquery.simpletip-1.3.1.pack.js
|
232
248
|
- public/stylesheets/admin/inline_help.css
|
233
249
|
- public/stylesheets/admin/synergy.css
|
250
|
+
- public/stylesheets/courier_instruction.css
|
251
|
+
- public/stylesheets/reset.css
|
234
252
|
- spec/spec_helper.rb
|
235
253
|
- synergy.gemspec
|
236
254
|
has_rdoc: true
|
@@ -253,14 +271,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
253
271
|
version: 1.8.7
|
254
272
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
255
273
|
requirements:
|
256
|
-
- - "
|
274
|
+
- - ">"
|
257
275
|
- !ruby/object:Gem::Version
|
258
276
|
segments:
|
259
|
-
-
|
260
|
-
|
277
|
+
- 1
|
278
|
+
- 3
|
279
|
+
- 1
|
280
|
+
version: 1.3.1
|
261
281
|
requirements:
|
262
282
|
- none
|
263
|
-
rubyforge_project:
|
283
|
+
rubyforge_project: synergy
|
264
284
|
rubygems_version: 1.3.6
|
265
285
|
signing_key:
|
266
286
|
specification_version: 3
|