1 package breadcrumbs
::Controller
::UserAds
;
5 use breadcrumbs
::Controller
::BcController
;
6 use base
'breadcrumbs::Controller::BcController';
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
;
19 breadcrumbs::Controller::UserAds - Catalyst Controller
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);
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"]);
73 my ($self, $c, $ad_type) = @_;
75 my $wizard_caption = "Nuovo ";
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
};
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;
139 sub create_presence_ok
: Local
{
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;
157 sub choose_presence_ok
: Local
{
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;
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;
180 sub review_data_on_ok
: Local
{
182 #ok, at last I can create a new ad...
184 #let's see, first of all if I must create a presencee.
186 if( $c->session->{steps
}->{create_presence
} eq "1"){
187 #ok, I must create a presence.
190 my $loc = $c->session->{steps
}->{ad_loc_type
};
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";
199 #it is a special site
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
};
209 if (!defined($c->session->{steps
}->{request
})){
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)){
225 #ok, I have created a presence
226 $presence_id = $res->{presence_id
};
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)){
249 sub choose_trusts_on_ok
: Local
{
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)){
269 $c->stash->{ad_price
} = $res->{price
};
270 $c->stash->{credit_ants
} = $res->{reachable_ants
};
271 $c->stash->{debug_res
} = $res;
275 sub choose_price_on_ok
: Local
{
278 my $result = $c->stash->{result
};
279 my $tao = breadcrumbs
::Dialogs
::TaoImportDialog
->get_amount($result);
280 $c->session->{steps
}->{tao_import
} = $tao;
285 sub entered_locality_on_ok
: Local
{
288 my $loc = $c->req->param("flag");
289 $c->session->{steps
}->{ad_loc_type
} = $loc;
290 if ($loc eq "an_point"){
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;
305 $c->session->{steps
}->{create_presence
} = 0;
311 sub _hashify_the_presences
{
312 my ($self, $presences) = @_;
315 foreach(@
{$presences}){
318 on_request
=> $_->{on_request
},
319 presence
=> $_->{presence
},
326 sub entered_ad_text_on_ok
: Local
{
329 my $text = $c->req->param("ad_text");
330 $c->session->{steps
}->{ad_text
} = $text;
335 sub choose_activity_on_ok
: Local
{
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;
347 sub choose_loc_ok
: Local
{
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;
368 $c->session->{steps
}->{create_presence
} = 0;
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';
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/);
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);
432 Pasqualino Ferrentino,,,
436 This library is free software, you can redistribute it and/or modify
437 it under the same terms as Perl itself.