| Line # | Revision | Author | |
|---|---|---|---|
| 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> |