From c58b498f7060665e286b1b7eb978cebeed9e8655 Mon Sep 17 00:00:00 2001 From: dakkar Date: Mon, 13 Feb 2006 15:53:39 +0000 Subject: merge dalla branch git-svn-id: svn://luxion/repos/IscrittiGroLUG/trunk@191 fcb26f47-9200-0410-b104-b98ab5b095f3 --- GroLUG/Makefile.PL | 7 + GroLUG/grolug.yml | 15 ++ GroLUG/lib/Catalyst/Engine/Null.pm | 32 +++ GroLUG/lib/GroLUG.pm | 1 + GroLUG/lib/GroLUG/C/Iscritto.pm | 278 ++++++++++++++++++++---- GroLUG/lib/GroLUG/M/DB/Pagamento.pm | 4 +- GroLUG/lib/GroLUG/V/Email.pm | 18 ++ GroLUG/lib/HTML/Widget/Constraint/EuroAmount.pm | 9 + GroLUG/lib/HTML/Widget/Constraint/ISODate.pm | 18 ++ GroLUG/root/lib/site/header | 8 +- GroLUG/root/lib/site/mail-wrapper | 4 + GroLUG/root/src/cancella-pagamento.tt2 | 4 + GroLUG/root/src/due-settimane.tt2 | 7 + GroLUG/root/src/edit-iscritto.tt2 | 9 +- GroLUG/root/src/edit-pagamento.tt2 | 1 + GroLUG/root/src/lista-iscritti.tt2 | 4 +- GroLUG/root/src/nuovo-iscritto.tt2 | 7 - GroLUG/root/src/nuovo-pagamento.tt2 | 9 - GroLUG/root/src/scaduto.tt2 | 7 + GroLUG/root/src/scheda-iscritto.tt2 | 8 +- GroLUG/root/src/un-mese.tt2 | 7 + GroLUG/script/grolug_email.pl | 14 ++ 22 files changed, 400 insertions(+), 71 deletions(-) create mode 100644 GroLUG/lib/Catalyst/Engine/Null.pm create mode 100644 GroLUG/lib/GroLUG/V/Email.pm create mode 100644 GroLUG/lib/HTML/Widget/Constraint/EuroAmount.pm create mode 100644 GroLUG/lib/HTML/Widget/Constraint/ISODate.pm create mode 100644 GroLUG/root/lib/site/mail-wrapper create mode 100644 GroLUG/root/src/cancella-pagamento.tt2 create mode 100644 GroLUG/root/src/due-settimane.tt2 create mode 100644 GroLUG/root/src/edit-pagamento.tt2 delete mode 100644 GroLUG/root/src/nuovo-iscritto.tt2 delete mode 100644 GroLUG/root/src/nuovo-pagamento.tt2 create mode 100644 GroLUG/root/src/scaduto.tt2 create mode 100644 GroLUG/root/src/un-mese.tt2 create mode 100755 GroLUG/script/grolug_email.pl diff --git a/GroLUG/Makefile.PL b/GroLUG/Makefile.PL index 94d0d9e..307e29e 100644 --- a/GroLUG/Makefile.PL +++ b/GroLUG/Makefile.PL @@ -9,6 +9,7 @@ requires Catalyst::Plugin::StackTrace => 0; requires Catalyst::Plugin::ConfigLoader => 0; requires Catalyst::Plugin::Static::Simple => 0; requires Catalyst::Plugin::DefaultEnd => 0; +requires Catalyst::Plugin::HTML::Widget => 0; requires Catalyst::Plugin::Session => 0; requires Catalyst::Plugin::Session::Store::DBI => 0; requires Catalyst::Plugin::Session::State::Cookie => 0; @@ -20,10 +21,16 @@ requires Catalyst::Log::Log4perl => 0; requires Log::Log4perl::Appender::DBI => 0; requires DateTime => 0; requires DateTime::Format::Pg => 0; +requires DateTime::Format::Strptime => 0; requires DBIx::Class => 0; requires Catalyst::Model::DBIC::Plain => 0; requires Catalyst::View::TT => 0; requires Module::Find => 0; +requires Email::MIME => 0; +requires Email::MIME::Creator => 0; +requires Email::Send => 0; +requires Encode => 0; +requires Encode::MIME::Header => 0; catalyst; diff --git a/GroLUG/grolug.yml b/GroLUG/grolug.yml index 589c0f8..96ff9ec 100644 --- a/GroLUG/grolug.yml +++ b/GroLUG/grolug.yml @@ -1,5 +1,6 @@ --- name: GroLUG +view: GroLUG::V::TT stacktrace: verbose: 1 session: @@ -10,3 +11,17 @@ iscrizione: prezzo: 50 durata: years: 1 +scadenze: + - anticipo: + months: 1 + messaggio: un-mese.tt2 + - anticipo: + days: 14 + messaggio: due-settimane.tt2 + - anticipo: + days: 0 + messaggio: scaduto.tt2 +email: + - SMTP + - localhost +email-from: iscritti@grolug.org diff --git a/GroLUG/lib/Catalyst/Engine/Null.pm b/GroLUG/lib/Catalyst/Engine/Null.pm new file mode 100644 index 0000000..2b910c2 --- /dev/null +++ b/GroLUG/lib/Catalyst/Engine/Null.pm @@ -0,0 +1,32 @@ +package Catalyst::Engine::Null; + +use strict; +use base 'Catalyst::Engine'; +use Catalyst::Utils; +use NEXT; +use URI; + +sub finalize_body { print STDERR "finalize_body\n"}; +sub finalize_cookies { print STDERR "finalize_cookies\n"}; +sub finalize_error { print STDERR "finalize_error\n"}; +sub finalize_read { print STDERR "finalize_read\n"}; +sub finalize_uploads { print STDERR "finalize_uploads\n"}; + +sub prepare_request { print STDERR "prepare_request\n"}; +sub prepare_query_parameters { print STDERR "prepare_query_parameters\n"}; +sub prepare_read { print STDERR "prepare_read\n"}; +sub prepare_uploads { print STDERR "prepare_uploads\n"}; +sub prepare_path { + print STDERR "prepare_path\n"; + my ($self,$c)=@_; + $c->request->uri(URI->new('/')); + $c->request->base(URI->new('/')); +} + +sub read { print STDERR "read\n"; '' }; +sub read_chunk { print STDERR "read_chunk\n"; '' }; + +sub write { print STDERR "write\n"}; + +1; + diff --git a/GroLUG/lib/GroLUG.pm b/GroLUG/lib/GroLUG.pm index 65a76a5..3f26f8c 100644 --- a/GroLUG/lib/GroLUG.pm +++ b/GroLUG/lib/GroLUG.pm @@ -8,6 +8,7 @@ use Catalyst qw{ Session Session::Store::DBI Session::State::Cookie Authentication Authentication::Store::Htpasswd Authentication::Credential::Password Authorization::Roles + HTML::Widget }; use Catalyst::Log::Log4perl; diff --git a/GroLUG/lib/GroLUG/C/Iscritto.pm b/GroLUG/lib/GroLUG/C/Iscritto.pm index f3b9975..adae5dc 100644 --- a/GroLUG/lib/GroLUG/C/Iscritto.pm +++ b/GroLUG/lib/GroLUG/C/Iscritto.pm @@ -4,6 +4,12 @@ use strict; use warnings; use base 'Catalyst::Controller'; use DateTime; +use DateTime::Duration; +use Data::Dumper; +use Email::MIME; +use Email::MIME::Creator; +use Email::Send (); +use Encode; sub auto :Private { my ( $self, $c ) = @_; @@ -19,50 +25,152 @@ sub iscritti :Global { my ( $self, $c ) = @_; $c->stash->{iscritti}=GroLUG::M::DB->resultset('Iscritto')->search({attivo=>1}); + $c->stash->{mode}='attivi'; $c->stash->{template}='lista-iscritti.tt2'; } +sub cessati :Global { + my ( $self, $c ) = @_; + + $c->stash->{iscritti}=GroLUG::M::DB->resultset('Iscritto')->search({attivo=>0}); + $c->stash->{mode}='cessati'; + $c->stash->{template}='lista-iscritti.tt2'; +} + +sub widget_for_iscr { + my ($self,$c,$id)=@_; + + my $iscritto= defined($id) + ? GroLUG::M::DB->resultset('Iscritto')->find($id) + : GroLUG::M::DB::Iscritto->new(); + my $widget=$c->widget('iscritto'); + $widget->method('post'); + $widget->element('Textfield','nome')->label('Nome')->value($iscritto->nome); + $widget->element('Textfield','email')->label('E-mail')->value($iscritto->email); + $widget->element('Textarea','note')->label('Note')->value($iscritto->note); + $widget->element('Submit','ok')->value('Ok'); + + $widget->filter('TrimEdges','nome','email','note'); + + $widget->constraint('All','nome','email'); + $widget->constraint('Email','email'); + $widget->constraint('Printable','nome'); + + $widget->indicator('email'); + + return wantarray?($widget,$iscritto):$widget; +} + sub scheda :Local { my ($self,$c,$id)=@_; $c->log->info($c->user->id,"scheda iscritto $id"); - $c->stash->{iscritto}=GroLUG::M::DB->resultset('Iscritto')->find($id); - + my $iscritto=GroLUG::M::DB->resultset('Iscritto')->find($id); + $c->stash->{iscritto}=$iscritto; + $c->stash->{pagato}=$self->check_pagato($iscritto); $c->stash->{template}='scheda-iscritto.tt2'; } sub edit :Local { my ($self,$c,$id)=@_; - $c->log->info($c->user->id,"edit iscritto $id"); + my ($widget,$iscritto)=$self->widget_for_iscr($c,$id); + $widget->action($c->uri_for('edit',$id)); + my $result=$c->widget_result($widget->name); - $c->stash->{iscritto}=my $iscritto=GroLUG::M::DB->resultset('Iscritto')->find($id); - - if ($c->req->method eq 'POST') { # ho i dati, li uso - my %data=map {$_ => $c->req->params->{$_}} qw(nome email note); - $iscritto->set_columns(\%data); - $iscritto->update(); - $c->res->redirect($c->uri_for('scheda',$iscritto->id)); - } - else { - $c->stash->{template}='edit-iscritto.tt2'; + if ($c->req->method eq 'POST') { # l'utente ci ha mandato dei dati + my @errors=$result->has_errors(); + if (@errors==0) { + my %data=map {$_ => $result->params->{$_}} qw(nome email note); + if (defined $id) { + $c->log->info($c->user->id,"edit iscritto $id"); + $iscritto->set_columns(\%data); + $iscritto->update(); + } + else { + $c->log->info($c->user->id,'nuovo iscritto'); + # non ha pagato: non è attivo + $data{attivo}=0; + $iscritto=GroLUG::M::DB->resultset('Iscritto')->create(\%data); + } + $c->res->redirect($c->uri_for('scheda',$iscritto->id)); + return; + } } + $c->stash->{mode}= (defined $id) ? 'edit' : 'nuovo'; + $c->stash->{widget}=$result; + $c->stash->{template}='edit-iscritto.tt2'; } -sub nuovo :Local { +sub cessa :Local { my ($self,$c,$id)=@_; - $c->log->info($c->user->id,"nuovo iscritto"); + my $iscritto=GroLUG::M::DB->resultset('Iscritto')->find($id); + $iscritto->attivo(0);$iscritto->update(); - if ($c->req->method eq 'POST') { # ho i dati, li uso - my %data=map {$_ => $c->req->params->{$_}} qw(nome email note); - my $iscritto=GroLUG::M::DB->resultset('Iscritto')->create(\%data); - $c->res->redirect('/iscritti'); - } - else { - $c->stash->{template}='nuovo-iscritto.tt2'; + $c->res->redirect($c->uri_for('scheda',$id)); +} + +sub attiva :Local { + my ($self,$c,$id)=@_; + + my $iscritto=GroLUG::M::DB->resultset('Iscritto')->find($id); + $iscritto->attivo(1);$iscritto->update(); + + $c->res->redirect($c->uri_for('scheda',$id)); +} + +sub strdate { + my ($date)=@_; + + return (defined $date ? $date->strftime('%F') : ''); +} + +sub widget_for_pag { + my ($self,$c,$pag,$iscr_id)=@_; + + my $pagamento=defined($pag) + ? ref($pag) + ? $pag + : GroLUG::M::DB->resultset('Pagamento')->find($pag) + : GroLUG::M::DB::Pagamento->new(); + + my $widget=$c->widget('pagamento'); + $widget->method('post'); + $widget->element('Textfield','data_pagamento')->label('Data del pagamento')->value(strdate($pagamento->data_pagamento)); + $widget->element('Textfield','data_iscrizione')->label('Data di iscrizione')->value(strdate($pagamento->data_iscrizione)); + $widget->element('Textfield','data_scadenza')->label('Data di scadenza')->value(strdate($pagamento->data_scadenza)); + $widget->element('Textfield','prezzo')->label('Importo pagato')->value($pagamento->prezzo); + $widget->element('Hidden','iscr_id')->value($iscr_id || (defined $pag ? $pagamento->iscritto->id : '')); + + $widget->element('Submit','ok')->value('Ok'); + + $widget->filter('TrimEdges','data_scadenza','data_pagamento','data_iscrizione','prezzo'); + + $widget->constraint('All','data_scadenza','data_pagamento','data_iscrizione','prezzo'); + $widget->constraint('ISODate','data_scadenza','data_pagamento','data_iscrizione'); + $widget->constraint('EuroAmount','prezzo'); + + $widget->indicator('iscr_id'); + + return wantarray?($widget,$pagamento):$widget; +} + +sub check_pagato { + my ($self,$iscritto)=@_; + + unless (ref $iscritto) { + $iscritto=GroLUG::M::DB->resultset('Iscritto')->find($iscritto); } + + my $pagamento_per_oggi=$iscritto->pagamenti->count({ + data_iscrizione => {'<=',DateTime->today()}, + data_scadenza => {'>=',DateTime->today()}, + }); + + return 1 if $pagamento_per_oggi > 0; + return; } sub rinnova :Local { @@ -72,40 +180,128 @@ sub rinnova :Local { $c->stash->{iscritto}=my $iscritto=GroLUG::M::DB->resultset('Iscritto')->find($id); my $last_pag=$iscritto->pagamenti()->next(); - my $scadenza=($last_pag ? $last_pag->data_scadenza() : DateTime->now()); - - $c->stash->{pagamento}={ - data_pagamento => DateTime->now(), + my $today=DateTime->today();$today->set_time_zone('UTC'); + my $scadenza=($last_pag ? $last_pag->data_scadenza() : $today); + $c->log->debug('creo pagamento nuovo'); + my $pag=GroLUG::M::DB::Pagamento->new({ + iscritto => $iscritto, + data_pagamento => $today, data_iscrizione => $scadenza->clone()->add(days => 1), data_scadenza => $scadenza->clone()->add($c->config->{iscrizione}->{durata}), prezzo => $c->config->{iscrizione}->{prezzo}, - }; + }); + my $widget=$self->widget_for_pag($c,$pag,$id); + $widget->action($c->uri_for('pagamento')); - $c->stash->{template}='nuovo-pagamento.tt2'; + $c->stash->{widget}=$c->widget_result($widget->name); + $c->stash->{template}='edit-pagamento.tt2'; } sub pagamento :Local { - my ($self,$c)=@_; + my ($self,$c,$id)=@_; - my $params=$c->req->parameters; + my ($widget,$pagamento)=$self->widget_for_pag($c,$id); + $widget->action($c->uri_for('pagamento',$id)); + my $result=$c->widget_result($widget->name); - my $iscritto=GroLUG::M::DB->resultset('Iscritto')->find($params->{iscr_id}); + if ($c->req->method eq 'POST') { # l'utente ci ha mandato dei dati + my @errors=$result->has_errors(); + if (@errors==0) { + my %data=map {$_ => $result->params->{$_}} qw(data_pagamento data_iscrizione data_scadenza prezzo); - $c->log->info($c->user->id,'pagamento iscritto '.($iscritto->id)); + if (defined $id) { + $c->log->info($c->user->id, + 'modifica pagamento ' + .($result->params->{pag_id}) + .' per iscritto ' + .($result->params->{iscr_id})); + $pagamento->set_columns(\%data); + $pagamento->update(); + } + else { + $c->log->info($c->user->id, + 'nuovo pagamento per iscritto ' + .($result->params->{iscr_id})); + $data{iscritto}=$result->params->{iscr_id}; + GroLUG::M::DB->resultset('Pagamento')->create(\%data); + } - my %data=map {$_ => $params->{$_}} qw(data_pagamento data_iscrizione data_scadenza prezzo); - $data{iscritto}=$iscritto->id; + $c->res->redirect($c->uri_for('scheda',$result->params->{iscr_id})); + return; + } + } + $c->stash->{widget}=$result; + $c->stash->{template}='edit-pagamento.tt2'; +} - if ($params->{pag_id} eq '') { - GroLUG::M::DB->resultset('Pagamento')->create(\%data); +sub cancella_pag :Local { + my ($self,$c,$id)=@_; + + my $pagamento=GroLUG::M::DB->resultset('Pagamento')->find($id); + my $iscritto=$pagamento->iscritto; + + if ($c->req->method eq 'POST') { + $pagamento->delete(); + $c->res->redirect($c->uri_for('scheda',$iscritto->id)); + return; } - else { - my $pag=GroLUG::M::DB->resultset('Pagamento')->find($params->{pag_id}); - $pag->set_columns(\%data); - $pag->update(); + $c->stash->{iscritto}=$iscritto; + $c->stash->{pagamento}=$pagamento; + $c->stash->{template}='cancella-pagamento.tt2'; +} + +sub send_email :Private { + my ($self,$c)=@_; + + my $iscritti=GroLUG::M::DB->resultset('Iscritto'); + my @scadenze=map { + +{ + anticipo => DateTime::Duration->new($_->{anticipo}), + messaggio => $_->{messaggio}, + } + } @{$c->config->{scadenze}}; + my $today=DateTime->today(); + + while (my $iscritto=$iscritti->next()) { + $c->log->debug('testo '.($iscritto->id)); + next if !$iscritto->attivo or !$iscritto->scadenza; + my $scadenza=$iscritto->scadenza; + + for my $termine (@scadenze) { + if ($today + $termine->{anticipo} == $scadenza) { + $c->stash->{iscritto}=$iscritto; + $c->stash->{template}=$termine->{messaggio}; + $c->forward('GroLUG::V::Email'); + my $body=$c->res->body; + my $subject='message'; + $subject=$1 if $body=~s{^ Subject: \s+ ([^\n]+) \n+}{}smx; + $subject=encode('MIME-Header',decode('utf-8',$subject)); + $c->log->debug("Invio email"); + my $message=Email::MIME->create( + header=>[ + From => $c->config->{'email-from'}, + To => $iscritto->email, + #To => 'dakkar@thenautilus.net', + Subject => $subject, + ], + attributes => { + content_type => 'text/plain', + charset => 'utf-8', + }, + body=>$body, + ); + my ($mailer,@mail_args)=@{$c->config->{email}}; + $c->log->debug("mailer: $mailer, args: @mail_args"); + my $sent=Email::Send->new({ + mailer=>$mailer, + mailer_args=>\@mail_args, + })->send($message); + $c->log->debug("inviato, $sent"); + } + } } - $c->res->redirect($c->uri_for('scheda',$iscritto->id())); + return; } 1; diff --git a/GroLUG/lib/GroLUG/M/DB/Pagamento.pm b/GroLUG/lib/GroLUG/M/DB/Pagamento.pm index 23ee176..7c6f939 100644 --- a/GroLUG/lib/GroLUG/M/DB/Pagamento.pm +++ b/GroLUG/lib/GroLUG/M/DB/Pagamento.pm @@ -12,8 +12,8 @@ for my $col (qw(data_pagamento data_iscrizione data_scadenza)) { __PACKAGE__->inflate_column( $col, { - inflate => sub { DateTime::Format::Pg->parse_datetime(shift) }, - deflate => sub { DateTime::Format::Pg->format_datetime(shift) }, + inflate => sub { DateTime::Format::Pg->parse_date(shift) }, + deflate => sub { DateTime::Format::Pg->format_date(shift) }, }); } diff --git a/GroLUG/lib/GroLUG/V/Email.pm b/GroLUG/lib/GroLUG/V/Email.pm new file mode 100644 index 0000000..5eb4189 --- /dev/null +++ b/GroLUG/lib/GroLUG/V/Email.pm @@ -0,0 +1,18 @@ +package GroLUG::V::Email; + +use strict; +use base 'Catalyst::View::TT'; + +__PACKAGE__->config({ + CATALYST_VAR => 'Catalyst', + INCLUDE_PATH => [ + GroLUG->path_to( 'root', 'src' ), + GroLUG->path_to( 'root', 'lib' ) + ], + PRE_PROCESS => 'config/main', + WRAPPER => 'site/mail-wrapper', + ERROR => 'error.tt2', + TIMER => 0 +}); + +1; diff --git a/GroLUG/lib/HTML/Widget/Constraint/EuroAmount.pm b/GroLUG/lib/HTML/Widget/Constraint/EuroAmount.pm new file mode 100644 index 0000000..7e80265 --- /dev/null +++ b/GroLUG/lib/HTML/Widget/Constraint/EuroAmount.pm @@ -0,0 +1,9 @@ +package HTML::Widget::Constraint::EuroAmount; + +use warnings; +use strict; +use base 'HTML::Widget::Constraint::Regex'; + +sub regex { qr{^\d+(?:\.\d{0,2})?$} }; + +1; diff --git a/GroLUG/lib/HTML/Widget/Constraint/ISODate.pm b/GroLUG/lib/HTML/Widget/Constraint/ISODate.pm new file mode 100644 index 0000000..f5680d2 --- /dev/null +++ b/GroLUG/lib/HTML/Widget/Constraint/ISODate.pm @@ -0,0 +1,18 @@ +package HTML::Widget::Constraint::ISODate; + +use warnings; +use strict; +use base 'HTML::Widget::Constraint'; +use DateTime::Format::Strptime; + +my $format=DateTime::Format::Strptime->new(pattern=>'%F'); + +sub validate { + my ($self,$value)=@_; + + my $val=$format->parse_datetime($value); + + return defined($val); +} + +1; diff --git a/GroLUG/root/lib/site/header b/GroLUG/root/lib/site/header index 8781856..2c89e2f 100644 --- a/GroLUG/root/lib/site/header +++ b/GroLUG/root/lib/site/header @@ -1,4 +1,10 @@

[% template.title or site.title %]

-[% IF Catalyst.user_exists %]

logout

[% END %] +

+ [%- IF Catalyst.user_exists -%] + logout + [%- END %] + elenco iscritti + elenco iscritti cessati +

diff --git a/GroLUG/root/lib/site/mail-wrapper b/GroLUG/root/lib/site/mail-wrapper new file mode 100644 index 0000000..257446b --- /dev/null +++ b/GroLUG/root/lib/site/mail-wrapper @@ -0,0 +1,4 @@ +[% content %] + +-- + Servizio iscrizioni GroLUG diff --git a/GroLUG/root/src/cancella-pagamento.tt2 b/GroLUG/root/src/cancella-pagamento.tt2 new file mode 100644 index 0000000..0d0a1c1 --- /dev/null +++ b/GroLUG/root/src/cancella-pagamento.tt2 @@ -0,0 +1,4 @@ +

Cancellazione pagamento

+
+

Confermi?

+
diff --git a/GroLUG/root/src/due-settimane.tt2 b/GroLUG/root/src/due-settimane.tt2 new file mode 100644 index 0000000..a436686 --- /dev/null +++ b/GroLUG/root/src/due-settimane.tt2 @@ -0,0 +1,7 @@ +Subject: La tua iscrizione al GroLUG scade tra due settimane + +Salve [% iscritto.nome %], + +la tua iscrizione scade tra due settimane. + +Rinnovala! diff --git a/GroLUG/root/src/edit-iscritto.tt2 b/GroLUG/root/src/edit-iscritto.tt2 index e75765d..e26f264 100644 --- a/GroLUG/root/src/edit-iscritto.tt2 +++ b/GroLUG/root/src/edit-iscritto.tt2 @@ -1,7 +1,2 @@ -

Modifica [% iscritto.nome %]

-
-

-

-

-

-
+

[% IF mode=='edit' %]Modifica[% ELSE %]Nuovo[% END %] iscritto

+[% widget %] diff --git a/GroLUG/root/src/edit-pagamento.tt2 b/GroLUG/root/src/edit-pagamento.tt2 new file mode 100644 index 0000000..1a03775 --- /dev/null +++ b/GroLUG/root/src/edit-pagamento.tt2 @@ -0,0 +1 @@ +[% widget %] diff --git a/GroLUG/root/src/lista-iscritti.tt2 b/GroLUG/root/src/lista-iscritti.tt2 index 1f733b6..9618520 100644 --- a/GroLUG/root/src/lista-iscritti.tt2 +++ b/GroLUG/root/src/lista-iscritti.tt2 @@ -1,5 +1,5 @@ -

Lista iscritti

-

Nuovo iscritto

+

Lista iscritti [% IF mode=='cessati' %]non attivi[% END %]

+

Nuovo iscritto

    [% WHILE (iscr = iscritti.next()) %]
  1. diff --git a/GroLUG/root/src/nuovo-iscritto.tt2 b/GroLUG/root/src/nuovo-iscritto.tt2 deleted file mode 100644 index 91bbfb9..0000000 --- a/GroLUG/root/src/nuovo-iscritto.tt2 +++ /dev/null @@ -1,7 +0,0 @@ -

    Nuovo iscritto

    -
    -

    -

    -

    -

    -
    diff --git a/GroLUG/root/src/nuovo-pagamento.tt2 b/GroLUG/root/src/nuovo-pagamento.tt2 deleted file mode 100644 index 743f06f..0000000 --- a/GroLUG/root/src/nuovo-pagamento.tt2 +++ /dev/null @@ -1,9 +0,0 @@ -
    - - -

    -

    -

    -

    -

    -
    \ No newline at end of file diff --git a/GroLUG/root/src/scaduto.tt2 b/GroLUG/root/src/scaduto.tt2 new file mode 100644 index 0000000..1a97312 --- /dev/null +++ b/GroLUG/root/src/scaduto.tt2 @@ -0,0 +1,7 @@ +Subject: La tua iscrizione al GroLUG è scaduta oggi + +Salve [% iscritto.nome %], + +la tua iscrizione è scaduta oggi. + +Rinnovala! diff --git a/GroLUG/root/src/scheda-iscritto.tt2 b/GroLUG/root/src/scheda-iscritto.tt2 index 30f0d29..835b22a 100644 --- a/GroLUG/root/src/scheda-iscritto.tt2 +++ b/GroLUG/root/src/scheda-iscritto.tt2 @@ -2,15 +2,19 @@

    Operazioni:

    Indirizzo:
    [% iscritto.email %]
    Note:
    [% iscritto.note %]
    Pagamenti:
      [%- FOREACH pag IN iscritto.pagamenti %] -
    1. [% pag.prezzo %] il [% pag.data_pagamento %]
    2. +
    3. [% pag.prezzo %] il [% pag.data_pagamento %] edit elimina
    4. [% END -%]
    diff --git a/GroLUG/root/src/un-mese.tt2 b/GroLUG/root/src/un-mese.tt2 new file mode 100644 index 0000000..e214b86 --- /dev/null +++ b/GroLUG/root/src/un-mese.tt2 @@ -0,0 +1,7 @@ +Subject: La tua iscrizione al GroLUG scade tra un mese + +Salve [% iscritto.nome %], + +la tua iscrizione scade tra un mese. + +Rinnovala! diff --git a/GroLUG/script/grolug_email.pl b/GroLUG/script/grolug_email.pl new file mode 100755 index 0000000..44b5f4b --- /dev/null +++ b/GroLUG/script/grolug_email.pl @@ -0,0 +1,14 @@ +#!/usr/bin/perl + +BEGIN { + $ENV{CATALYST_ENGINE} ||= 'Null'; + $ENV{CATALYST_SCRIPT_GEN} = 27; +} +use strict; +use FindBin; +use lib "$FindBin::Bin/../lib"; +use GroLUG; + +my $c=GroLUG->prepare(); +$c->{stats}=(GroLUG->debug) ? Tree::Simple->new() : ''; +$c->forward('/iscritto/send_email'); -- cgit v1.2.3