Revision 274 (by ahitrov, 2013/02/07 18:18:11) |
Coupon workaround
|
<& "/contenido/components/header.msn" &>
<% spacer(h=>10) %>
% if ($error) {
<div align="center" style="font-size:110%; color:red;">
<% $error %>
</div>
<br><br>
% }
<!-- Форма для редактирования объекта -->
<a name="top"></a>
<form action="" method="POST" name="form" onSubmit="">
<table border="0" width="100%" cellspacing="0" cellpadding="6">
<tr>
<td style="font-size:110%;">
<b><% $object->id ? 'Редактирование' : 'Регистрация нового' %> купона</b>
</td>
<td align="right">
<input type="submit" value="Сохранить" class="input_btn">
</td>
</tr>
</table>
<center>
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td bgcolor="#999999">
<table width="100%" cellpadding="0" cellspacing="1" border="0">
<tr><td valign="top" bgcolor="#ffffff" width="80%">
<center>
<table width="98%" cellpadding="1" cellspacing="0" border="0">
% foreach my $prop ( @props ) {
% next if $prop->{hidden} == 1;
% next if $prop->{attr} eq 'uid_proto' || $prop->{attr} eq 'uid_condition';
% my $name = $prop->{attr};
% my $type = $prop->{type};
<tr><td height="8"></td></tr>
<tr><td nowrap>
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td nowrap><b><% $prop->{rusname} %></b> /</td>
<td align="right" nowrap><font color="#888888" size="-1"> name="<% $prop->{attr} %>"</font></td>
% if( $prop->{readonly} ) {
<td align="right" nowrap> / <font color="#CC0000" size="-1">Значение нельзя изменить</font></td>
% }
</tr>
</table>
</td></tr>
% if ( $prop->{attr} eq 'uid' ) {
% #### Прототипирование
% ###################################################################
<script type="text/javascript">
<!--
function change_uid_proto ( oSelect ) {
var sUidDiv = document.getElementById('uid_block');
var sUidEq = document.getElementById('uid_equation');
if ( oSelect.value == '3' ) {
sUidDiv.style.display = 'block';
} else {
sUidDiv.style.display = 'none';
uid_undo();
}
if ( oSelect.value == '2' ) {
sUidEq.style.display = 'block';
} else {
sUidEq.style.display = 'none';
uid_undo();
}
}
//-->
</script>
<tr><td style="border:1px solid gray; padding:5px; background:#e0ffe0">
<select name="uid_proto" onchange="change_uid_proto(this)">
<option value="0">Купон доступен всем пользователям</option>
<option value="1" <% $object->uid_proto == 1 ? 'selected' : '' %>>Одноразовый купон, создается для всех зарегистрированных пользователей</option>
<option value="2" <% $object->uid_proto == 2 ? 'selected' : '' %>>Одноразовый купон, пользователи по выбору</option>
<option value="3" <% $object->uid_proto == 3 ? 'selected' : '' %>>Одноразовый купон для одного пользователя</option>
</select>
<div id="uid_block" style="padding-top:10px; display:<% $object->uid_proto == 3 ? 'block' : 'none' %>;">
<fieldset>
<legend>Выберите пользователя, нажав на знак бинокля</legend>
<& "/contenido/components/inputs/$type.msn", prop => $prop, object => $object, name => $name,
options => $options, id => ($object->id() || 0),
check => ($object->$name || $object->{$name}),
&>
</fieldset>
</div>
<div id="uid_equation" style="padding-top:10px; display:<% $object->uid_proto == 2 ? 'block' : 'none' %>;">
<fieldset>
<legend>Выберите условие:</legend>
<table width="100%" cellspacing="0" cellpadding="3">
<tr valign="top" bgcolor="white">
<td width="1%"><input type="radio" name="uid_condition" value="positive"
<% $object->uid_condition && $object->uid_condition eq 'loyal' ? 'checked' : '' %>></td>
<td width="49%">Все пользователи с позитивной историей</td>
<td width="50%"></td>
</tr>
<tr valign="top" bgcolor="#e0e0e0">
<td><input type="radio" name="uid_condition" value="total"
<% $object->uid_condition && $object->uid_condition =~ /^from/ ? 'checked' : '' %>></td>
<td>Все пользователи, купившие на сумму более:</td>
<td><input type="text" name="uid_condition.total" style="width:95%"
value="<% $object->uid_condition && $object->uid_condition =~ /^from (\d+)/ ? $1 : '' %>"></td>
</tr>
<tr valign="top" bgcolor="white">
<td><input type="radio" name="uid_condition" value="activity"
<% $object->uid_condition && $object->uid_condition =~ /^last/ ? 'checked' : '' %>></td>
<td>Все пользователи, проявлявшие активность за:</td>
% my $activity = $object->uid_condition && $object->uid_condition =~ /^last (\w+)/ ? $1 : '';
<td><select name="uid_condition.period">
<option value="month">месяц</option>
<option value="quarter" <% $activity eq 'quarter' ? 'selected' : '' %>>3 месяца</option>
<option value="half" <% $activity eq 'half' ? 'selected' : '' %>>6 месяцев</option>
<option value="year" <% $activity eq 'year' ? 'selected' : '' %>>год</option>
</select></td>
</tr>
</table>
</fieldset>
</div>
</div></td></tr>
% #### /Прототипирование
% } else {
<tr><td><& "/contenido/components/inputs/$type.msn", prop => $prop, object => $object, name => $name,
options => $options, id => ($object->id() || 0),
check => ($object->$name || $object->{$name}),
&></td></tr>
% }
% }
<tr>
<td><br>
% foreach my $prop ( @props ) {
% next if $prop->{hidden} != 1;
<input type="hidden" name="<% $prop->{attr} %>" value="<% html_escape($object->{ $prop->{attr} }) %>">
% }
<input type="hidden" name="save" value="1">
</td>
</tr>
</table>
</td>
<td valign="top" bgcolor="#efefef">
<% spacer(w=>270) %>
<div><iframe name="DocFinder" id="DocFinder" src="/contenido/find_document.html" frameborder="0"
marginheight="0" marginwidth="0" width="100%" height="0"></iframe></div>
</td>
</tr>
</table>
</center>
</td></tr></table>
</center>
<div align="center">
<input type="submit" value="Сохранить" class="input_btn">
% while ( my ($key, $value) = each %filter_params ) {
% next if exists $props{$key};
<input type="hidden" name="<% $key %>" value="<% $value %>">
% }
<input type="hidden" name="control_charset" value="Контроль">
<input type="submit" name="_save_and_leave" value="Сохранить и выйти" class="input_btn">
</div>
</form>
% if (ref($object) && ($object->id)) {
<!-- Связи и привязки к рубрикам -->
<br>
<table width="100%" cellspacing="5" cellpadding="0" border="0">
<tr>
<td width=50% valign=top>\
<iframe id="links" src="/contenido/document_links.html?id=<% $object->id() %>&class=<% $object->class() %>" width="100%" height="700" frameborder="0"></iframe>
% if ( $m->comp_exists ("/contenido/components/pbase_rubrics.msn") ) {
<& "/contenido/components/pbase_rubrics.msn", document => $object &>\
% }
</td>
<td width=50% valign=top>
% if ( $object->pid == 0 && $m->comp_exists ("/contenido/webshop/components/pbase_links.msn") ) {
<& "/contenido/webshop/components/pbase_links.msn", document => $object &>\
% }
</td>
</tr>
</table>
<!-- / Связи и привязки к рубрикам -->
% }
%#<pre><% Dumper($object) %></pre>
</body>
</html>
<%args>
$id => undef
$save => undef
</%args>
<%INIT>
my $error='';
my %filter_params;
my $return_params = join ('&', map { $_.'='.$filter_params{$_} } grep { $_ ne 's' } keys %filter_params );
my $object = $id ? webshop::Coupon->new( $keeper, $id ) : webshop::Coupon->new( $keeper );
my @props = $object->structure;
my %props = map { $_->{attr} => $_ } @props;
my $toopi = $project->documents();
my $options = {};
if ($toopi && (ref($toopi) eq 'HASH') && (exists($toopi->{ $object->class }))) {
%{ $options } = %{ $toopi->{ $object->class } };
}
if ( $save ) {
foreach my $prop ( @props ) {
my $name = $prop->{attr};
my $type = $prop->{type};
next if ($name eq 'sections' || $name eq 'id' || $name eq 'uid' || $name eq 'uid_condition');
if ( $name eq 'uid_proto' ) {
my $uid_proto = $ARGS{uid_proto} || 0;
$object->uid_proto( $uid_proto );
if ( $uid_proto == 3 ) {
$object->uid( $ARGS{uid} );
} elsif ( $uid_proto == 1 ) {
$object->uid( 0 );
$object->uid_condition( 'all' );
} elsif ( $uid_proto == 2 ) {
$object->uid( 0 );
if ( $ARGS{uid_condition} eq 'total' ) {
$object->uid_condition( 'from '.($ARGS{"uid_condition.total"} || 0) );
} elsif ( $ARGS{uid_condition} eq 'activity' ) {
$object->uid_condition( 'last '.($ARGS{"uid_condition.period"} || 'month') );
} else {
$object->uid_condition( 'loyal' );
}
}
} elsif ($m->comp_exists("/contenido/components/outputs/$type.msn")) {
$object->{$name} = $m->comp("/contenido/components/outputs/$type.msn", SETS => \%ARGS, name => $name, object => $object );
} else {
$object->{$name} = $m->comp('/contenido/components/filter.msn', str => $ARGS{$name} );
}
}
$object->pid( 0 ) unless defined $object->pid;
unless ( $object->id ) {
$object->status( 2 ) if $object->status && $object->uid_proto;
}
if ( !$object->code && ($object->uid_proto == 3 || $object->uid_proto == 0 ) ) {
my $code = `apg -q -d -a 1 -m 8 -x 8 -M nc -n 1`;
$object->code( $code );
}
unless ( $object->store ) {
$error="Ошибка сохранения ($keeper->{last_error})";
} else {
if ($ARGS{_save_and_leave}) {
$m->redirect('/contenido/webshop/coupons.html?cst='.$object->status);
} else {
$m->redirect('coupon.html?id='.$object->id.($return_params ? '&'.$return_params : ''));
}
}
}
</%INIT>