Revision 638 (by ahitrov, 2017/01/12 12:34:10) Orders by coupon functionality. Context table and browse mode table.

<& "/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>&nbsp;/</td>
	<td align="right" nowrap><font color="#888888" size="-1">&nbsp;name="<% $prop->{attr} %>"</font></td>
%	if( $prop->{readonly} ) {
	<td align="right" nowrap>&nbsp;/&nbsp;<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=>330) %>
<div><iframe name="DocFinder" id="DocFinder" src="/contenido/find_document.html" frameborder="0"
 marginheight="0" marginwidth="0" width="100%" height="0"></iframe></div>
% if ( ref $object && $object->id ) {
<& /contenido/webshop/components/block_coupon_orders.msn, object => $object &>
% }
</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>