synergy 0.50.0 → 0.60.0.RC1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|