my @props = webshop::Coupon->new($keeper)->structure;
52
my ($prop_status) = grep { $_->{attr} eq 'status' } @props;
53
54
my @coupons = ('' => 'без учета купонов');
55
my $sql = "select id, name from webshop_coupons where class = 'webshop::Coupon' and ( status in (0, 4) or (status in (1,3) and pid = 0) ) order by status = 1 desc, status, dtime desc";
<p>В данном диапазоне дат с учетом выбранных условий купоны не найдены</p>
80
% } else {
81
В данном диапазоне дат с учетом выбранных условий купоны не найдены
82
% }
83
% }
84
% }
85
86
% if ( $show eq 'html' ) {
87
</body>
88
</html>
89
% }
90
<%args>
91
92
$show => 'html'
93
$status => undef
94
95
$from_day => undef
96
$from_month => undef
97
$from_year => undef
98
99
$to_day => undef
100
$to_month => undef
101
$to_year => undef
102
103
</%args>
104
<%init>
105
106
if ( $show eq 'html' ) {
107
$r->content_type ("text/html; charset=utf-8");
108
} else {
109
$r->content_type ("text/plain; charset=utf-8");
110
}
111
my ($from, $to);
112
113
my $errstr;
114
my @props = webshop::Coupon->new( $keeper )->structure;
115
my ($status_prop) = grep { $_->{attr} eq 'status' } @props;
116
my %status_opts = map { $_->[0] => $_->[1] } @{$status_prop->{cases}};
117
my $now = Contenido::DateTime->new;
118
if ( $from_day && $from_month && $from_year ) {
119
eval { $from = Contenido::DateTime->new( datetime => { day => $from_day, month => $from_month, year => $from_year } ) };
120
}
121
if ( $to_day && $to_month && $to_year ) {
122
eval { $to = Contenido::DateTime->new( datetime => { day => $to_day, month => $to_month, year => $to_year } ) };
123
}
124
$from = $now unless ref $from;
125
$to = $now unless ref $to;
126
if ( $from > $to ) {
127
$errstr = 'Неверно указан диапазон дат';
128
}
129
my %opts = ( interval => [$from->ymd, $to->ymd] );
130
if ( $status ) {
131
$opts{status} = $status;
132
}
133
134
my @coupons;
135
unless ( $errstr ) {
136
@coupons = $keeper->get_documents(
137
class => 'webshop::Coupon',
138
%opts,
139
order_by => 'etime desc',
140
);
141
foreach my $coupon ( @coupons ) {
142
my $orders = $keeper->get_documents(
143
class => 'webshop::Order',
144
lclass => 'webshop::OrderCouponLink',
145
lsource => 'positive',
146
ldest => $coupon->id,
147
no_limit => 1,
148
order_by => 'ctime desc',
149
return_mode => 'array_ref',
150
);
151
my ($sum, $discount) = (0,0);
152
foreach my $order( @$orders ) {
153
$sum += $order->sum;
154
$discount += $order->sum_discount;
155
156
}
157
$coupon->{order_amount} = scalar @$orders;
158
$coupon->{sum_total} = $sum;
159
$coupon->{discount_total} = $discount;
160
}
161
}
162
163
</%init>
Небольшая справка по веткам
cnddist – контейнер, в котором хранятся все дистрибутивы всех библиотек и программных пакетов, которые использовались при построении различных версий Contenido. Если какой-то библиотеки в данном хранилище нет, инсталлятор сделает попытку "подтянуть" ее с веба (например, с CPAN). Если библиотека слишком старая, есть очень большая вероятность, что ее там уже нет. Поэтому мы храним весь хлам от всех сборок. Если какой-то дистрибутив вдруг отсутствует в cnddist - напишите нам, мы положим его туда.
koi8 – отмирающая ветка, чей код, выдача и все внутренние библиотеки заточены на кодировку KOI8-R. Вносятся только те дополнения, которые касаются внешнего вида и функционала админки, баги ядра, обязательные обновления портов и мелочи, которые легко скопипастить. В дальнейшем планируется полная остановка поддержки по данной ветке.
utf8 – актуальная ветка, заточенная под UTF-8.
Внутри каждой ветки: core – исходники ядра; install – скрипт установки инсталляции; plugins – плагины; samples – "готовые к употреблению" проекты, которые можно поставить, запустить и посмотреть, как они работают.