Line # Revision Author
1 198 ahitrov %# vim:syn=mason
2 <& "/contenido/components/header.msn" &>
3 <& "/contenido/components/naviline.msn", sect_id => $owner->id &>
4
5 % if ($error) {
6 <div align="center" style="font-size:110%; color:red;">
7 <% $error %>
8 </div>
9 <br><br>
10 % }
11
12 % if (!ref($document)) {
13 % if ($id) {
14 <div align="center" style="font-size:110%; color:red;">
15 Документ с идентификатором <% $id %> не найден
16 </div>
17 <br><br>
18 % } elsif ($class) {
19 <!-- Блок с выбором нового документа для создания -->
20 <table width="50%" border="0"><tr><td>
21 <fieldset>
22 <legend>Выберите тип документа для создания</legend>
23 <& "/contenido/components/new_objects_form.msn", proto => 'documents', sect_id => $owner->id &>
24 </fieldset>
25 </td></tr></table>
26 % } else {
27 <div align="center" style="font-size:110%; color:red;">
28 Неверный вызов документа!!! (отсутствуют id и class одновременно)
29 </div>
30 <br><br>
31 % }
32
33 % } else {
34 303 ahitrov % if ( $document->postman_id == $user->id || $active_rights == 0 ) {
35 198 ahitrov <& "/contenido/components/obj_list_js.msn", object => $document &>
36 <& "/contenido/webshop/components/order_form.msn",
37 context => 'post',
38 object => $document,
39 proto => 'documents',
40 sect_id => $owner->id,
41 clone => $clone,
42 filter_params => \%filter_params,
43 &>
44 % } else {
45 % my $profile = $keeper->get_user_by_id( $document->postman_id );
46 <div style="padding:10px;">
47 <b style="font-size:110%">Доставка ЗАКАЗА</b>
48 <p style="color:red"><b>Внимание!</b> Доставку заказа осуществляет <% $profile->name %></p>
49 <p><a href="./?ost=3">&lt;&lt; Вернуться в список доставки</a></p>
50 </div>
51 % }
52 % }
53
54 </body>
55 </html>
56 <%ARGS>
57 $p => 1
58 $class => 'webshop::Order'
59 $sect_id => undef
60 $s_alias => undef
61 $id => undef
62 $delete => undef
63 $save => undef
64 $clone => undef
65 $activate => undef
66 $deactivate => undef
67 </%ARGS>
68 <%INIT>
69
70 &abort404 unless $class;
71 my $error='';
72 ### !!! При добавлении переменных в ARGS их надо внести в список исключений в структуре ниже
73
74 my $filter = $m->comp('/contenido/components/context.msn', name => 'filter');
75
76 my $document;
77 my $new;
78 my $now = Contenido::DateTime->new;
79
80 304 ahitrov my $active_rights = $m->comp('/contenido/webshop/subs/user_rights.msn');
81
82 198 ahitrov if ($id && ($id !~ /\D/) && ($id > 0)) {
83 $document = $keeper->get_document_by_id($id, class=>$class);
84 if ( $clone && exists $document->{'attributes'}->{'dtime'} ) {
85 $document->dtime(undef);
86 }
87 } elsif ( ($class) && (length($class)>0) && (! ref($document)) ) {
88 $document = new $class ($keeper);
89 $new = 1;
90 my @properties = $document->structure();
91 foreach my $prop ( @properties ) {
92 my $attr = $prop->{attr};
93 ### !!! Если не стандартная переменная, то можем инициализировать
94 if ( exists $ARGS{$attr} && ! grep { $prop->{attr} eq $_ } qw( class sect_id id delete save clone s_alias activate deactivate p s use_section alpha alpha_search search_by search ) ) {
95 $document->$attr($ARGS{$attr});
96 }
97 }
98 }
99 &abort404 unless ref $document;
100
101 my @props = $document->structure();
102 my %filter_params;
103 if ($ARGS{use_section} && !grep { $_->{attr} eq 'use_section' } @props ) {
104 $filter_params{use_section} = $ARGS{use_section};
105 $filter_params{class} = $document->class;
106 }
107 $filter_params{alpha} = $ARGS{alpha} if $ARGS{alpha} && !grep { $_->{attr} eq 'alpha' } @props;
108 $filter_params{alpha_search} = $ARGS{alpha_search} if $ARGS{alpha_search} && !grep { $_->{attr} eq 'alpha_search' } @props;
109 $filter_params{search_by} = $ARGS{search_by} if $ARGS{search_by} && !grep { $_->{attr} eq 'search_by' } @props;
110 $filter_params{search} = $ARGS{search} if $ARGS{search} && !grep { $_->{attr} eq 'search' } @props;
111 $filter_params{s} = $ARGS{s} if $ARGS{s} && !grep { $_->{attr} eq 's' } @props;
112 $filter_params{p} = $p if $p > 1;
113 my $return_params = join ('&', map { $_.'='.$filter_params{$_} } grep { $_ ne 's' } keys %filter_params );
114
115
116 if ($s_alias) {
117 $sect_id = $project->s_alias->{$s_alias};
118 }
119
120 if ( (! $sect_id) && (ref($document)) && ($document->id) ) {
121 $sect_id = $document->section();
122 }
123 my $owner = $keeper->get_section_by_id ($sect_id || $Contenido::Section::ROOT || 1);
124
125 if (! ref($owner)) {
126 $owner = $keeper->get_section_by_id ($Contenido::Section::ROOT || 1);
127 }
128 if (! ref($owner)) {
129 warn "Contenido Die: Не могу найти корневую секцию\n";
130 return undef;
131 }
132
133 if ( ref $document && !$document->postman_id ) {
134 $document->postman_id( $user->id );
135 $document->store;
136 }
137 if (ref($document) && $document->id() && $document->section()) {
138 my $document_access = $user->section_accesses($user, $owner);
139 if ($document_access != 2) {
140 $m->clear_buffer;
141 $m->abort(403);
142 }
143 }
144
145 # Удаление...
146 if (defined($id) && ($id > 0) && $delete) {
147 $document->status( 5 );
148 $document->store;
149
150 $m->redirect("./?ost=3".($return_params ? '&'.$return_params : ''));
151 }
152
153 # Сохранение существующего документа или создание нового...
154 # Кстати, пока никак не обрабатываются связи...
155 elsif ( $save == 1 )
156 {
157 my $clonesource;
158 if ( $clone ) {
159 $clonesource = $keeper->get_document_by_id ($clone,
160 class => $document->class,
161 );
162 }
163 if ($m->comp('/contenido/webshop/components/set_properties.msn', object => $document, SETS => \%ARGS, context => 'post') != 1)
164 {
165 # Ошибка, надо бы обработать...
166 warn "Contenido Warning: Не могу установить значения полей!\n";
167 }
168 if ( $clone ) {
169 $m->comp('/contenido/components/clone_attachments.msn', object => $document, source => $clonesource );
170 $document->sections( $clonesource->sections );
171 } elsif ( $new ) {
172 $document->sections( $owner->id, $filter > 0 ? ($filter) : ());
173 }
174
175 if ( $ARGS{_save_and_deliver} ) {
176 $document->status(4);
177 $document->postman_id( $user->id );
178 $document->etime( $now->ymd('-').' '.$now->hms );
179 353 ahitrov if ( $m->comp_exists('/comps/letters/order_delivered.msn') ) {
180 355 ahitrov my $profile = $keeper->{users}->get_profile( id => $document->uid );
181 353 ahitrov my $mailfrom = ref $project->params && $project->params->{mailfrom} ? $project->params->{mailfrom} : undef;
182 if ( $profile && $mailfrom ) {
183 my $sendmail = {
184 to => $profile->name.' <'.$profile->email.'>',
185 from => 'Интернет-магазин <'.$mailfrom.'>',
186 subject => 'Подтверждение доставки',
187 355 ahitrov body => $m->scomp('/comps/letters/order_delivered.msn', profile => $profile, order => $document),
188 353 ahitrov };
189 $m->comp('/inc/sendmail.msn', email => $sendmail);
190 }
191 }
192 198 ahitrov } elsif ( $ARGS{_ret_manager} ) {
193 $document->status(1);
194 } elsif ( $ARGS{_ret_facility} ) {
195 $document->status(2);
196 } elsif ( $ARGS{_save_and_leave} ) {
197 }
198
199 unless ($document->store()) {
200 # Ошибка, надо бы обработать...
201 $error="Ошибка сохранения ($keeper->{last_error})";
202 } else {
203
204 if ($ARGS{_save_and_deliver}) {
205 $m->redirect("./?ost=3");
206 } elsif ($ARGS{_ret_manager}) {
207 $m->redirect("./?ost=3");
208 } elsif ($ARGS{_ret_facility}) {
209 $m->redirect("./?ost=3");
210 } elsif ($ARGS{_save_and_leave}) {
211 $m->redirect("./?ost=1".($return_params ? '&'.$return_params : ''));
212 }
213
214 $m->redirect("delivery.html?id=".$document->id.($return_params ? '&'.$return_params : ''));
215 }
216 }
217
218 </%INIT>