Revision 638
Date:
2017/01/12 12:34:10
Author:
ahitrov
Revision Log:
Orders by coupon functionality. Context table and browse mode table.
Files:
Legend:
Added
Removed
Modified
utf8/plugins/webshop/comps/contenido/webshop/autohandler
2
2
3
3
$r->content_type('text/html');
4
4
$request->{cookie_filter_company} = 'filter_company';
5
6
my $company_filter_value;
7
if ( exists $ARGS{order_company_filter} ) {
8
$company_filter_value = $ARGS{order_company_filter};
9
$m->comp( '/contenido/components/cookies.msn', name => $request->{cookie_filter_company}, value => $company_filter_value );
10
if ( defined $company_filter_value && $company_filter_value ne '' ) {
11
$request->{company_id_filter} = $company_filter_value;
12
}
13
} else {
14
$company_filter_value = $m->comp( '/contenido/components/cookies.msn', name => $request->{cookie_filter_company} );
15
if ( defined $company_filter_value && $company_filter_value ne '' ) {
16
$request->{company_id_filter} = $company_filter_value;
17
}
18
}
19
5
20
$m->call_next();
6
21
7
22
</%init>
utf8/plugins/webshop/comps/contenido/webshop/components/block_coupon_orders.msn
1
<fieldset style="background:white; margin:5px;">
2
<legend>Последние заказы (<% scalar @orders %>)</legend>
3
% if ( @orders ) {
4
<table width="100%" border="0" cellpadding="3" cellspacing="0" class="tlistdocs">
5
% foreach my $order ( @orders ) {
6
% my ($href, $action, $user_id);
7
% my $status = $order->status;
8
% if ( ($status == 1 || $status == 6 || $status == 7 || $status == 8) && (!$active_rights || $active_rights == 1) ) {
9
% $href = 'take_care.html';
10
% $action = { href => $href, name => 'обработать' };
11
% $user_id = 'manager_id';
12
% } elsif ( $status == 2 && (!$active_rights || $active_rights == 2) ) {
13
% $href = 'facility.html';
14
% $action = { href => $href, name => 'собрать' };
15
% $user_id = 'vault_id';
16
% } elsif ( $status == 3 && (!$active_rights || $active_rights == 3) ) {
17
% $href = 'delivery.html';
18
% $action = { href => $href, name => 'доставить' };
19
% $user_id = 'postman_id';
20
% } elsif ( $status == 4 && !$active_rights ) {
21
% $href = 'delivery.html';
22
% $action = { href => $href, name => 'просмотр' };
23
% } elsif ( $status == 5 && !$active_rights ) {
24
% $href = 'delivery.html';
25
% $action = { href => $href, name => 'просмотр' };
26
% }
27
% my $url = $href.'?id='.$order->id;
28
% my $status_name = exists $status_options{$order->status} ? $status_options{$order->status} : 'unknown';
29
<tr>
30
<td><a href="<% $url %>"><% $order->id %></a></td>
31
<td><a href="<% $url %>"><% $order->name %></a></td>
32
<td><% $status_name %></td>
33
<td><a href="<% $url %>"><% $action->{name} %></a></td>
34
</tr>
35
% }
36
</table>
37
<a href="/contenido/webshop/?coupon_id=<% $object->id %>">Все заказы (<% $total %>)</a>
38
% }
39
</fieldset>
40
<%args>
41
42
$object => undef
43
44
</%args>
45
<%init>
46
47
return unless ref $object && $object->id;
48
49
my $total = $keeper->get_documents(
50
class => 'webshop::OrderCouponLink',
51
dest_id => $object->id,
52
source_id => 'positive',
53
count => 1,
54
);
55
my (@links, @orders);
56
if ( $total ) {
57
@links = $keeper->get_documents(
58
class => 'webshop::OrderCouponLink',
59
dest_id => $object->id,
60
source_id => 'positive',
61
order_by => 'ctime desc',
62
limit => 10,
63
);
64
my @ids = map { $_->source_id } @links;
65
@orders = $keeper->get_documents(
66
id => \@ids,
67
class => 'webshop::Order',
68
order_by => 'ctime desc',
69
);
70
}
71
my %props = map { $_->{attr} => $_ } webshop::Order->new( $keeper )->structure;
72
my $prop = $props{status};
73
my %status_options = map { $_->[0] => $_->[1] } @{$prop->{cases}};
74
my $active_rights = $m->comp('/contenido/webshop/subs/user_rights.msn');
75
76
</%init>
utf8/plugins/webshop/comps/contenido/webshop/components/block_order_company_filter.msn
25
25
);
26
26
27
27
</%once>
28
<%args>
28
<%init>
29
29
30
$value => undef
30
my $value;
31
if ( exists $request->{company_id_filter} ) {
32
$value = $request->{company_id_filter};
33
}
31
34
32
</%args>
35
</%init>
utf8/plugins/webshop/comps/contenido/webshop/components/order_browse.msn
32
32
<tr><td align="center" colspan="<% scalar @$columns %>">Документы не найдены</td></tr>
33
33
% }
34
34
% foreach my $document (@$documents) {
35
%
35
% unless ( defined $status ) {
36
% if ( ($document->status == 1 || $document->status == 6 || $document->status == 7 || $document->status == 8) && (!$active_rights || $active_rights == 1) ) {
37
% $href = 'take_care.html';
38
% @actions = { href => $href, name => 'обработать' };
39
% $user_id = 'manager_id';
40
% } elsif ( $document->status == 2 && (!$active_rights || $active_rights == 2) ) {
41
% $href = 'facility.html';
42
% @actions = { href => $href, name => 'собрать' };
43
% $user_id = 'vault_id';
44
% } elsif ( $document->status == 3 && (!$active_rights || $active_rights == 3) ) {
45
% $href = 'delivery.html';
46
% @actions = { href => $href, name => 'доставить' };
47
% $user_id = 'postman_id';
48
% } elsif ( $document->status == 4 && !$active_rights ) {
49
% $href = 'delivery.html';
50
% @actions = { href => $href, name => 'просмотр' };
51
% $user_id = 'postman_id';
52
% } elsif ( $document->status == 5 && !$active_rights ) {
53
% $href = 'delivery.html';
54
% @actions = { href => $href, name => 'просмотр' };
55
% $user_id = 'postman_id';
56
% }
57
% }
36
58
% next unless ref($document);
37
59
% my $document_access = $user->section_accesses($user, $document->section);
38
60
% my $style = $document->contenido_status_style ? ' style="'.$document->contenido_status_style.'"' : '';
…
…
138
160
% }
139
161
% }
140
162
% if ( $active_rights == 0 ) {
141
% if ( $document->$user_id && $document->$user_id != $user->id ) {
163
% if ( $user_id && $user_id eq 'manager_id' && $document->$user_id && $document->$user_id != $user->id ) {
142
164
% $actions .= ' (<a href="/contenido/webshop/?drop_owner=1&id='.$document->id.($params_unclassed ? '&'.$params_unclassed : '').'&field='.$user_id.'">unlock</a>)'
143
165
% } else {
144
166
% $actions = join (' | ', map { '<a href="./'.$_->{href}.'?id='.$document->id.($params_unclassed ? '&'.$params_unclassed : '').'">'.$_->{name}.'</a>' } @actions);
…
…
224
246
return unless ref $documents eq 'ARRAY';
225
247
return unless ref $columns eq 'ARRAY';
226
248
227
@$columns = grep { $_->{attr} ne 'status' } @$columns;
228
249
my $toopi = $project->documents();
229
250
my $inline_status = 0;
230
251
my $delete_status = 0;
…
…
236
257
237
258
my %users;
238
259
my ($href, @actions, $user_id);
239
if ( ($status == 1 || $status == 6 || $status == 7 || $status == 8) && (!$active_rights || $active_rights == 1) ) {
240
$href = 'take_care.html';
241
@actions = { href => $href, name => 'обработать' };
242
$user_id = 'manager_id';
243
} elsif ( $status == 2 && (!$active_rights || $active_rights == 2) ) {
244
$href = 'facility.html';
245
@actions = { href => $href, name => 'собрать' };
246
$user_id = 'vault_id';
247
} elsif ( $status == 3 && (!$active_rights || $active_rights == 3) ) {
248
$href = 'delivery.html';
249
@actions = { href => $href, name => 'доставить' };
250
$user_id = 'postman_id';
251
} elsif ( $status == 4 && !$active_rights ) {
252
$href = 'delivery.html';
253
@actions = { href => $href, name => 'просмотр' };
254
} elsif ( $status == 5 && !$active_rights ) {
255
$href = 'delivery.html';
256
@actions = { href => $href, name => 'просмотр' };
260
if ( defined $status ) {
261
@$columns = grep { $_->{attr} ne 'status' } @$columns;
262
if ( ($status == 1 || $status == 6 || $status == 7 || $status == 8) && (!$active_rights || $active_rights == 1) ) {
263
$href = 'take_care.html';
264
@actions = { href => $href, name => 'обработать' };
265
$user_id = 'manager_id';
266
} elsif ( $status == 2 && (!$active_rights || $active_rights == 2) ) {
267
$href = 'facility.html';
268
@actions = { href => $href, name => 'собрать' };
269
$user_id = 'vault_id';
270
} elsif ( $status == 3 && (!$active_rights || $active_rights == 3) ) {
271
$href = 'delivery.html';
272
@actions = { href => $href, name => 'доставить' };
273
$user_id = 'postman_id';
274
} elsif ( $status == 4 && !$active_rights ) {
275
$href = 'delivery.html';
276
@actions = { href => $href, name => 'просмотр' };
277
$user_id = 'postman_id';
278
} elsif ( $status == 5 && !$active_rights ) {
279
$href = 'delivery.html';
280
@actions = { href => $href, name => 'просмотр' };
281
$user_id = 'postman_id';
282
}
257
283
}
258
284
259
285
</%init>
utf8/plugins/webshop/comps/contenido/webshop/components/orders_by_coupon.msn
1
<fieldset>
2
<legend>Заказы с купоном "<span style="color:yellow"><% $object->name %></span>"</legend>
3
4
<& /contenido/webshop/components/order_browse.msn, documents => \@documents, columns => \@columns, filter => \%filter_params, no_inline => 1, %ARGS &>
5
6
</td>
7
<td width="1%"> </td>
8
</tr>
9
</table>
10
11
</body>
12
</html>
13
<%args>
14
15
$id => undef
16
17
</%args>
18
<%init>
19
20
return unless $id && $id =~ /^\d+/;
21
22
my $object = $keeper->get_document_by_id( $id, class => 'webshop::Coupon' );
23
my ($links, @documents);
24
if ( ref $object ) {
25
$links = $keeper->get_documents(
26
class => 'webshop::OrderCouponLink',
27
dest_id => $object->id,
28
source_id => 'positive',
29
order_by => 'ctime desc',
30
return_mode => 'array_ref',
31
);
32
my @ids = map { $_->source_id } @$links;
33
@documents = @ids ? $keeper->get_documents(
34
id => \@ids,
35
class => 'webshop::Order',
36
order_by => 'ctime desc',
37
) : ();
38
} else {
39
return;
40
}
41
42
my %filter_params;
43
my $size = 40;
44
45
my %opts;
46
my $company_filter_value;
47
if ( exists $ARGS{order_company_filter} ) {
48
$company_filter_value = $ARGS{order_company_filter};
49
$m->comp( '/contenido/components/cookies.msn', name => $request->{cookie_filter_company}, value => $company_filter_value );
50
if ( defined $company_filter_value && $company_filter_value ne '' ) {
51
$opts{company_id} = $company_filter_value;
52
}
53
} else {
54
$company_filter_value = $m->comp( '/contenido/components/cookies.msn', name => $request->{cookie_filter_company} );
55
if ( defined $company_filter_value && $company_filter_value ne '' ) {
56
$opts{company_id} = $company_filter_value;
57
}
58
}
59
60
my @structure = webshop::Order->new( $keeper->{webshop} )->structure;
61
my @columns = sort { $a->{column} <=> $b->{column} }
62
grep { $_->{column} } @structure;
63
push @columns, {attr => '_act_', rusname => 'Действия'};
64
my ($status_map) = grep { $_->{attr} eq 'status' } @structure;
65
66
my $active_rights = $m->comp('/contenido/webshop/subs/user_rights.msn');
67
68
</%init>
utf8/plugins/webshop/comps/contenido/webshop/coupon.html
157
157
158
158
</td>
159
159
<td valign="top" bgcolor="#efefef">
160
<% spacer(w=>270) %>
160
<% spacer(w=>330) %>
161
161
<div><iframe name="DocFinder" id="DocFinder" src="/contenido/find_document.html" frameborder="0"
162
162
marginheight="0" marginwidth="0" width="100%" height="0"></iframe></div>
163
163
% if ( ref $object && $object->id ) {
164
<& /contenido/webshop/components/block_coupon_orders.msn, object => $object &>
165
% }
164
166
</td>
165
167
</tr>
166
168
</table>
utf8/plugins/webshop/comps/contenido/webshop/index.html
13
13
<tr valign="top">
14
14
<td width="35%">
15
15
16
<& /contenido/webshop/components/block_order_company_filter.msn, value => $company_filter_value &>
16
<& /contenido/webshop/components/block_order_company_filter.msn &>
17
17
<& /contenido/webshop/components/block_order_id_finder.msn &>
18
18
<& /contenido/webshop/components/block_order_status_changer.msn, status => $ost &>
19
19
…
…
26
26
<td width="65%">
27
27
28
28
<div id="search-by-id-found"></div>
29
<div id="search-by-coupon-found"><& /contenido/webshop/components/orders_by_coupon.msn, id => $coupon_id &></div>
29
30
30
31
<fieldset>
31
32
<legend>Заказы со статусом "<span style="color:yellow"><% $current_status->[1] %></span>"</legend>
…
…
61
62
$p => 1
62
63
$delete => undef
63
64
$drop_owner => undef
65
$coupon_id => undef
64
66
65
67
</%args>
66
68
<%init>
…
…
72
74
my $size = 40;
73
75
74
76
my %opts;
75
my $company_filter_value;
76
if ( exists $ARGS{order_company_filter} ) {
77
$company_filter_value = $ARGS{order_company_filter};
78
$m->comp( '/contenido/components/cookies.msn', name => $request->{cookie_filter_company}, value => $company_filter_value );
79
if ( defined $company_filter_value && $company_filter_value ne '' ) {
80
$opts{company_id} = $company_filter_value;
81
}
82
} else {
83
$company_filter_value = $m->comp( '/contenido/components/cookies.msn', name => $request->{cookie_filter_company} );
84
if ( defined $company_filter_value && $company_filter_value ne '' ) {
85
$opts{company_id} = $company_filter_value;
86
}
77
if ( exists $request->{company_id_filter} ) {
78
$opts{company_id} = $request->{company_id_filter};
87
79
}
88
80
89
81
@documents = $keeper->get_documents(
Небольшая справка по веткам
cnddist – контейнер, в котором хранятся все дистрибутивы всех библиотек и программных пакетов, которые использовались при построении различных версий Contenido. Если какой-то библиотеки в данном хранилище нет, инсталлятор сделает попытку "подтянуть" ее с веба (например, с CPAN). Если библиотека слишком старая, есть очень большая вероятность, что ее там уже нет. Поэтому мы храним весь хлам от всех сборок. Если какой-то дистрибутив вдруг отсутствует в cnddist - напишите нам, мы положим его туда.
koi8 – отмирающая ветка, чей код, выдача и все внутренние библиотеки заточены на кодировку KOI8-R. Вносятся только те дополнения, которые касаются внешнего вида и функционала админки, баги ядра, обязательные обновления портов и мелочи, которые легко скопипастить. В дальнейшем планируется полная остановка поддержки по данной ветке.
utf8 – актуальная ветка, заточенная под UTF-8.
Внутри каждой ветки: core – исходники ядра; install – скрипт установки инсталляции; plugins – плагины; samples – "готовые к употреблению" проекты, которые можно поставить, запустить и посмотреть, как они работают.