I can view my ads, first version
[breadcrumbs.git] / web-site / breadcrumbs / lib / breadcrumbs / Controller / UserAds.pm
blob142507af0588a462e9be87c223f60ccc4223d449
1 package breadcrumbs::Controller::UserAds;
3 use strict;
4 use warnings;
5 use breadcrumbs::Controller::BcController;
6 use base 'breadcrumbs::Controller::BcController';
7 use NEXT;
9 use breadcrumbs::Dialogs::AdTextDialog;
10 use breadcrumbs::Dialogs::AdLocalityDialog;
11 use breadcrumbs::Dialogs::AdTrustsDialog;
12 use breadcrumbs::Dialogs::SelectPublicSiteDialog;
13 use breadcrumbs::Dialogs::SelectPresenceInSiteDialog;
14 use breadcrumbs::Dialogs::PresenceInPublicSiteDialog;
15 use Bcd::Data::Trust;
17 =head1 NAME
19 breadcrumbs::Controller::UserAds - Catalyst Controller
21 =head1 DESCRIPTION
23 Catalyst Controller.
25 =head1 METHODS
27 =cut
30 =head2 index
32 =cut
34 sub new{
36 my $class = shift;
37 my $self = $class->NEXT::new(@_);
39 $self->_register_action_href
40 ("u_ads_new_service", "new_service", "Voglio offrire un servizio");
42 $self->_register_action_href
43 ("u_ads_new_used_item", "new_used", "Voglio vendere un oggetto usato");
45 $self->_register_action_href
46 ("u_ads_new_homemade_item", "new_homemade", "Voglio vendere una mia creazione");
49 bless ($self, $class);
50 return $self;
53 sub new_homemade : Local {
54 my ( $self, $c ) = @_;
56 $c->forward('new_ad', ["homemade"]);
59 sub new_used : Local {
60 my ( $self, $c ) = @_;
62 $c->forward('new_ad', ["object"]);
65 sub new_service : Local {
66 my ( $self, $c ) = @_;
69 $c->forward('new_ad', ["service"]);
72 sub new_ad : Local {
73 my ($self, $c, $ad_type) = @_;
75 my $wizard_caption = "Nuovo ";
77 my $res;
78 my $tao_caption;
79 if ($ad_type eq "service"){
80 $wizard_caption .= "servizio";
81 $res = $c->model("BcdModel")->get_services_tree();
82 $tao_caption = "Tao all'ora:";
83 } elsif ($ad_type eq "object"){
84 $wizard_caption .= "oggetto usato";
85 $res = $c->model("BcdModel")->get_used_tree();
86 $tao_caption = "Tao:";
87 } elsif ($ad_type eq "homemade"){
88 $wizard_caption .= "oggetto fatto in casa";
89 $res = $c->model("BcdModel")->get_homemade_tree();
90 $tao_caption = "Tao al pezzo:";
93 #I should get the public sites of this dialog
94 my $pub_res = $c->model("BcdModel")->get_public_sites($c);
95 my $public_sites_ar = $pub_res->{public_sites};
97 my %public_sites;
98 foreach(@{$public_sites_ar}){
99 $public_sites{$_->{id}} = $_->{name};
102 #this is the generic function to create a new ad.
103 my $dlg1 = breadcrumbs::Dialogs::AdTextDialog ->new($c, 1);
104 my $dlg2 = breadcrumbs::Dialogs::AdLocalityDialog->new($c, 1);
106 my $dlg3 = breadcrumbs::Dialogs::SelectPublicSiteDialog->new($c, 1, \%public_sites);
107 my $dlg4 = breadcrumbs::Dialogs::SelectPresenceInSiteDialog->new($c, 1);
108 my $dlg5 = breadcrumbs::Dialogs::PresenceInPublicSiteDialog->new($c, 1);
111 my $dlg6 = breadcrumbs::Dialogs::TaoImportDialog->new($c, 1, $tao_caption);
112 my $dlg7 = breadcrumbs::Dialogs::AdTrustsDialog->new($c, 1);
114 #ok, I should make a wizard!
115 my @step0 = (undef, "new_ad_choose_activity.tt", "choose_activity_on_ok");
116 my @step1 = ($dlg1, "new_ad_enter_text.tt", "entered_ad_text_on_ok");
117 my @step2 = ($dlg2, "new_ad_enter_locality.tt", "entered_locality_on_ok");
118 my @step3 = ($dlg3, "new_ad_choose_loc.tt", "choose_loc_ok");
119 my @step4 = ($dlg4, "new_ad_choose_presence.tt", "choose_presence_ok");
120 my @step5 = ($dlg5, "new_ad_create_presence.tt", "create_presence_ok");
121 my @step6 = ($dlg6, "new_ad_choose_price.tt", "choose_price_on_ok");
122 my @step7 = ($dlg7, "new_ad_choose_trusts.tt", "choose_trusts_on_ok");
123 my @step8 = (undef, "new_ad_review_data.tt", "review_data_on_ok");
124 my @step9 = (undef, "new_ad_done.tt");
126 my @steps = (\@step0, \@step1, \@step2, \@step3, \@step4,
127 \@step5, \@step6, \@step7, \@step8, \@step9);
129 #I take the tree from the model
131 $self->_make_wizard($c, \@steps, '', $wizard_caption);
133 $c->session->{steps}->{act_tree} = $res->{act_tree};
134 $c->session->{steps}->{ad_type} = $ad_type;
135 $c->session->{steps}->{public_sites} = \%public_sites;
136 return 1;
139 sub create_presence_ok : Local {
140 my ($self, $c) = @_;
142 my $presence_text = $c->req->param("available_hours");
143 $c->session->{steps}->{available_hours} = $presence_text;
144 my $request = $c->req->param("request");
145 $c->session->{steps}->{request} = $request;
147 if ($request eq "on"){
148 $presence_text .= " a richiesta";
151 $c->session->{steps}->{create_presence} = 1;
152 $c->session->{steps}->{presence_text} = $presence_text;
154 return 1;
157 sub choose_presence_ok : Local {
158 my ($self, $c) = @_;
160 my $presence = $c->req->param('presence');
161 $c->session->{steps}->{presence_id} = $presence;
163 if ($presence eq "NULL"){
164 #ok, the user wants to create a presence
165 $c->session->{steps}->{create_presence} = 1;
166 return 1;
167 } else {
168 $c->session->{steps}->{create_presence} = 0;
169 my $presence_text = $c->session->{steps}->{presences}->{$presence}->{presence};
171 if ($c->session->{steps}->{presences}->{$presence}->{on_request} eq "1"){
172 $presence_text .= " a richiesta";
175 $c->session->{steps}->{presence_text} = $presence_text;
176 return 2;
180 sub review_data_on_ok : Local {
181 my ($self, $c) = @_;
182 #ok, at last I can create a new ad...
184 #let's see, first of all if I must create a presencee.
185 my $presence_id;
186 if( $c->session->{steps}->{create_presence} eq "1"){
187 #ok, I must create a presence.
189 #the id of the site,
190 my $loc = $c->session->{steps}->{ad_loc_type};
192 my $id_site;
193 my $id_special_site;
194 if ($loc eq "an_point"){
195 #ok, it is a ant nest point
196 $id_site = $c->session->{steps}->{public_site};
197 $id_special_site = "NULL";
198 } else {
199 #it is a special site
200 $id_site = "NULL";
201 $id_special_site = $loc;
204 #ok, now I should have the rel type, which is simply the ad type
205 my $rel_type = $c->session->{steps}->{ad_type};
207 #then the request
208 my $request;
209 if (!defined($c->session->{steps}->{request})){
210 $request = '0';
211 } else {
212 $request = '1';
215 #then the presence
216 my $presence = $c->session->{steps}->{available_hours};
218 my $res = $c->model("BcdModel")->create_presence
219 ($c, $id_site, $id_special_site, $rel_type, $request, $presence);
221 if (!$self->_is_valid_res($c, $res)){
222 return 0;
225 #ok, I have created a presence
226 $presence_id = $res->{presence_id};
227 } else {
228 #ok, now I can create an ad...
229 $presence_id = $c->session->{steps}->{presence_id};
232 my $p_min = $c->session->{steps}->{tao_import};
234 my $res = $c->model("BcdModel")->create_ad
235 ($c, $c->session->{steps}->{act_id}, $c->session->{steps}->{ad_text},
236 $presence_id, $p_min, $p_min,
237 $c->session->{steps}->{t_e},
238 $c->session->{steps}->{t_c});
240 $c->session->{steps}->{debug_res} = $res;
242 if (!$self->_is_valid_res($c, $res)){
243 return 0;
244 } else {
245 return 1;
249 sub choose_trusts_on_ok : Local {
250 my ($self, $c) = @_;
252 my $result = $c->stash->{result};
253 my $t_e = breadcrumbs::Dialogs::AdTrustsDialog->get_trust_emit($result);
254 my $t_c = breadcrumbs::Dialogs::AdTrustsDialog->get_trust_credit($result);
256 $c->session->{steps}->{t_e} = $t_e;
257 $c->session->{steps}->{t_c} = $t_c;
259 #I can compute here the percentage of ants which can pay by credit
260 my $p_min = $c->session->{steps}->{tao_import};
262 my $res = $c->model("BcdModel")->get_price_for_ad
263 ($c, $p_min, $p_min, $t_e, $t_c);
265 if (!$self->_is_valid_res($c, $res)){
266 return 0;
269 $c->stash->{ad_price} = $res->{price};
270 $c->stash->{credit_ants} = $res->{reachable_ants};
271 $c->stash->{debug_res} = $res;
272 return 1;
275 sub choose_price_on_ok : Local {
276 my ($self, $c) = @_;
278 my $result = $c->stash->{result};
279 my $tao = breadcrumbs::Dialogs::TaoImportDialog->get_amount($result);
280 $c->session->{steps}->{tao_import} = $tao;
282 return 1;
285 sub entered_locality_on_ok : Local {
286 my ($self, $c) = @_;
288 my $loc = $c->req->param("flag");
289 $c->session->{steps}->{ad_loc_type} = $loc;
290 if ($loc eq "an_point"){
291 return 1;
292 } else {
293 #I should get the presences for this special point
294 my $res = $c->model("BcdModel")->get_presences
295 ($c, "NULL", $loc, $c->session->{steps}->{ad_type});
297 my $presences = $res->{presences};
298 my $presences_hashified = $self->_hashify_the_presences($presences);
299 $c->session->{steps}->{presences} = $presences_hashified;
301 if (scalar(keys(%{$presences_hashified})) == 0){
302 $c->session->{steps}->{create_presence} = 1;
303 return 3;
304 } else {
305 $c->session->{steps}->{create_presence} = 0;
306 return 2;
311 sub _hashify_the_presences{
312 my ($self, $presences) = @_;
314 my %hash;
315 foreach(@{$presences}){
316 $hash{$_->{id}} =
318 on_request => $_->{on_request},
319 presence => $_->{presence},
323 return \%hash;
326 sub entered_ad_text_on_ok : Local {
327 my ($self, $c) = @_;
329 my $text = $c->req->param("ad_text");
330 $c->session->{steps}->{ad_text} = $text;
332 return 1;
335 sub choose_activity_on_ok : Local {
336 my ($self, $c) = @_;
338 my $act = $c->req->param("act_id");
339 my $act_name = $c->req->param("act_name");
341 $c->session->{steps}->{act_id} = $act;
342 $c->session->{steps}->{act_name} = $act_name;
344 return 1;
347 sub choose_loc_ok : Local {
348 my ($self, $c) = @_;
350 my $public_site_id = $c->req->param("public_site");
351 $c->session->{steps}->{public_site} = $public_site_id;
352 $c->session->{steps}->{public_site_name} =
353 $c->session->{steps}->{public_sites}->{$public_site_id};
355 #ok, now I should get the presences in this site
357 my $res = $c->model("BcdModel")->get_presences
358 ($c, $public_site_id, "NULL", $c->session->{steps}->{ad_type});
360 my $presences = $res->{presences};
361 my $presences_hashified = $self->_hashify_the_presences($presences);
362 $c->session->{steps}->{presences} = $presences_hashified;
364 if (scalar(keys(%{$presences_hashified})) == 0){
365 $c->session->{steps}->{create_presence} = 1;
366 return 2;
367 } else {
368 $c->session->{steps}->{create_presence} = 0;
369 return 1;
374 sub index : Private {
375 my ( $self, $c ) = @_;
377 #Ok, let's get the ads of this user.
378 my $res = $c->model("BcdModel")->get_my_ads($c);
380 my $ads = $res->{my_ads};
381 $c->session->{sack}->{my_ads} = $ads;
382 $c->session->{hold_the_sack} = 1;
384 $c->response->redirect($c->uri_for("/userads/view_ads_table"));
387 sub view_ads_table : Local {
388 my ( $self, $c ) = @_;
390 $self->_process_table_sorting_orders($c);
392 $self->_put_action_in_stash($c, "u_ads_new_homemade_item");
393 $self->_put_action_in_stash($c, "u_ads_new_used_item");
394 $self->_put_action_in_stash($c, "u_ads_new_service");
396 $c->stash->{ads} = $c->session->{sack}->{my_ads};
397 $c->session->{hold_the_sack} = 1;
399 $c->stash->{template} = 'user_ads.tt';
402 sub auto : Private {
403 my ( $self, $c) = @_;
405 if (! $c->user_exists()){
406 $c->flash->{status_msg} = "Scollegato, o sezione scaduta; per favore ricollegati, grazie.";
407 $c->stash->{template} = "exists_current_ant_nest.tt";
408 $c->forward(qw/authentication login/);
409 #$c->detach('');
410 return 0;
411 } else {
413 my $trails = $c->stash->{"trails"};
414 my $an_id = $c->session->{current_ant_nest_id};
415 my $name = $c->user->name();
418 #I shouold find another method to put the trails
419 breadcrumbs::util::MenuUtils->add_trail("/antnestscontroller", "I Formicai", $trails, $c);
420 breadcrumbs::util::MenuUtils->add_trail("/antnest/view_$an_id", "Formicaio $an_id", $trails, $c);
421 breadcrumbs::util::MenuUtils->add_trail("/user", "$name", $trails, $c);
422 breadcrumbs::util::MenuUtils->add_trail("/userads", "I miei annunci", $trails, $c);
424 return 1;
430 =head1 AUTHOR
432 Pasqualino Ferrentino,,,
434 =head1 LICENSE
436 This library is free software, you can redistribute it and/or modify
437 it under the same terms as Perl itself.
439 =cut