1 |
260 |
ahitrov |
<%once> |
2 |
|
|
|
3 |
|
|
use JSON::XS; |
4 |
|
|
my $json = JSON::XS->new->utf8; |
5 |
|
|
|
6 |
|
|
</%once> |
7 |
|
|
<%args> |
8 |
|
|
|
9 |
|
|
$name => undef |
10 |
|
|
$rusname => undef |
11 |
|
|
$check => undef |
12 |
|
|
|
13 |
|
|
</%args> |
14 |
|
|
<%init> |
15 |
|
|
|
16 |
|
|
my $fields = $check ? $json->decode($check) : {}; |
17 |
|
|
my @fields; |
18 |
|
|
while ( my ($reg_id, $cost) = each %$fields ) { |
19 |
|
|
push @fields, { region => $reg_id, cost => $cost }; |
20 |
|
|
} |
21 |
|
|
@fields = sort { int($a->{cost}) <=> int($b->{cost}) } @fields; |
22 |
|
|
|
23 |
|
|
my $regions = $keeper->get_documents ( |
24 |
|
|
class => 'webshop::Area', |
25 |
|
|
status => 1, |
26 |
|
|
order_by => 'name', |
27 |
|
|
return_mode => 'array_ref', |
28 |
|
|
); |
29 |
|
|
my %pid = map { $_->pid => 1 } @$regions; |
30 |
|
|
my @pid = keys %pid; |
31 |
|
|
my $countries = @pid ? $keeper->get_documents ( |
32 |
|
|
id => \@pid, |
33 |
|
|
class => 'webshop::Country', |
34 |
|
|
return_mode => 'hash_ref', |
35 |
|
|
) : {}; |
36 |
|
|
$m->out(''); |
37 |
|
|
$m->out('<table width="95%" style="margin:5px 0;padding:5 6 5 6;border:1px solid #ccc;font-size:70%;font-family:Tahoma;background-color:#f5f5f5;color:#000;">'); |
38 |
|
|
$m->out('<tr bgcolor="silver" valign="top"><th width="40%"><h5 style="margin:0; padding:4px; font-size:11px; color:blue;">Регион:</h5></th>'); |
39 |
|
|
$m->out('<th width="60%"><h5 style="margin:0; padding:4px; font-size:11px; color:blue;">Стоимость доставки (число):</h5></th></tr>'); |
40 |
|
|
|
41 |
|
|
my $max = scalar @fields + 4; |
42 |
|
|
for my $i ( 1..$max ) { |
43 |
|
|
my $rusname = "$rusname N$i"; |
44 |
|
|
my $object = $fields[$i-1]; |
45 |
|
|
$m->comp('.field', |
46 |
|
|
name => $name, |
47 |
|
|
object => $object, |
48 |
|
|
number => $i, |
49 |
|
|
regions => $regions, |
50 |
|
|
countries => $countries, |
51 |
|
|
); |
52 |
|
|
} |
53 |
|
|
$m->out('</table>'); |
54 |
|
|
|
55 |
|
|
</%init> |
56 |
|
|
<%def .field> |
57 |
|
|
<%args> |
58 |
|
|
|
59 |
|
|
$name => undef |
60 |
|
|
$object => undef |
61 |
|
|
$number => undef |
62 |
|
|
$regions => [] |
63 |
|
|
$countries => {} |
64 |
|
|
|
65 |
|
|
</%args> |
66 |
|
|
<%init> |
67 |
|
|
</%init> |
68 |
|
|
<tr valign="top"> |
69 |
|
|
<td> |
70 |
|
|
<select name="<% $name.'_area_'.$number %>" style="width:97%"> |
71 |
|
|
<option value="">--- не выбран ---</option> |
72 |
|
|
% foreach my $region ( @$regions ) { |
73 |
|
|
% my $selected = ref $object && $object->{region} == $region->id ? ' selected' : ''; |
74 |
|
|
% my $country = $region->pid && exists $countries->{$region->pid} ? $countries->{$region->pid} : undef; |
75 |
|
|
<option value="<% $region->id %>"<% $selected %>><% $region->name.( ref $country ? ' ('.$country->name.')' : '' ) %></option> |
76 |
|
|
% } |
77 |
|
|
</select> |
78 |
|
|
</td> |
79 |
|
|
<td><input type="text" name="<% $name.'_cost_'.$number %>" value="<% (ref $object ? $object->{cost} : '') |h %>" style="width:97%;"></td> |
80 |
|
|
</tr> |
81 |
|
|
</%def> |