#!/usr/bin/perl use strict; use warnings; use JSON; use Data::Dumper; use CGI::Lazy; our $q = CGI::Lazy->new('/var/cache/apache2/cgi-conf/cscMarketing.conf'); our $var = undef; our $id = \$var; our $stuff = $q->widget->composite({ id => 'stuff', type => 'parentChild', relationship => { parent => { name => 'advertiser', searchLike => '%?%', searchDiv => 1, }, children => { activity => { parentKey => 'advertiser.ID', childKey => 'advertiserID', parentKeyHandle => $id, }, }, }, members => [ $q->widget->dataset({ id => 'advertiser', type => 'single', multiType => 'list', containerId => 'stuff', template => 'cscAdvertiser.tmpl', searchLike => 1, multipleTemplate => 'cscAdvertiserMulti.tmpl', # lookups => { # salesrepLookup => { # sql => 'select ID, country from countryCodeLookup', # preload => 1, # orderby => ['ID'], # output => 'hash', # primarykey => 'ID', # }, # }, extravars => { advertiserID => { value => $id, }, }, recordset => $q->db->recordset({ table => 'advertiser', fieldlist => [ {name => 'advertiser.ID', label => 'Adv#', handle => $id}, {name => 'advertiser.companyname', label => 'Company:', multi => 1}, {name => 'advertiser.repid', label => 'Account Rep:', multi => 1}, {name => 'advertiser.address', label => 'Address:', multi => 1}, {name => 'advertiser.city', label => 'City:', multi => 1}, {name => 'advertiser.state', label => 'State:'}, {name => 'advertiser.postalcode', label => 'Zip:'}, {name => 'advertiser.country', label => 'Country'}, {name => 'advertiser.contactphone', label => 'Phone:'}, {name => 'advertiser.contactfax', label => 'Fax:'}, {name => 'advertiser.contactnamefirst', label => 'Contact:' }, {name => 'advertiser.contactnamelast', label => '', noLabel => 1}, {name => 'advertiser.contactemail', label => 'Email:'}, {name => 'advertiser.website', label => 'Website:'}, {name => 'advertiser.notes', label => 'Notes:'}, {name => 'salesrep.namefirst', noLabel => 1}, {name => 'salesrep.namelast', noLabel => 1} ], basewhere => '', orderby => 'advertiser.ID', primarykey => 'advertiser.ID', joins => [ {type => 'inner', table => 'salesrep', field1 => 'salesrep.ID', field2 => 'advertiser.repid',}, ], insertadditional => { advertiserID => { sql => 'select LAST_INSERT_ID()', handle => $id, }, }, }), }), $q->widget->dataset({ id => 'activity', type => 'multi', template => "cscActivity.tmpl", recordset => $q->db->recordset({ table => 'activity', fieldlist => [ {name => 'advertiserID', hidden => 1}, {name => 'activity.ID', label => 'Item#'}, {name => 'sortdate', label => 'RunDate'}, {name => 'issue', label => 'Location'}, {name => 'page', label => 'Page'}, {name => 'description', label => 'Description', nolabel => 1}, {name => 'type', label => 'Type', nolabel => 1}, {name => 'activity.notes', label => 'Notes', nolabel => 1}, ], basewhere => '', orderby => 'activity.ID', primarykey => 'activity.ID', }), }), ] }); my %nav = ( dbwrite => \&dbwrite, ); if ($q->param('nav')) { $nav{$q->param('nav')}->(); } elsif ($q->param('POSTDATA')) { ajaxHandler(); } else { display('blank'); } #---------------------------------------------------------------------------------------- sub ajaxHandler { my $incoming = from_json($q->param('POSTDATA') || $q->param('keywords')); if ($incoming->{delete}) { doFullDelete($incoming); return; } print $q->header, $stuff->ajaxSelect(); # my $advertiser = $stuff->members->{advertiser}; # my $advertiserOutput = $advertiser->ajaxSelect(incoming => $incoming, div => 1, like => '%?%', vars => {'advertiser.ID' => {handle => $id}}); #has to be a separate step to populate the multi attribute # my $activity = $stuff->members->{activity}; # # if ($advertiser->multi) { # print $q->header, $stuff->ajaxReturn($advertiser, $advertiserOutput); # } else { # print $q->header, # $stuff->ajaxReturn( # [$advertiser, $activity], # [$advertiserOutput, $activity->ajaxSelect(incoming => {advertiserID => $id}, div => 1)] # ); # } } #---------------------------------------------------------------------------------------- sub display { my $mode = shift; print $q->header, $q->start_html({-style => {src => '/css/cscMarketing.css'}}), $q->start_html(), $q->javascript->modules($stuff); #javascript functions needed by widget #header section print $q->template('topbanner1.tmpl')->process({ mainTitle => 'Main Title', secondaryTitle => 'Secondary Title', versionTitle => 'version 0.1', messageTitle => 'Nik rocks', }); print $q->div({-id => "buttons"}, $q->table({-align => 'center'}, $q->Tr( $q->td({-align => 'center'}, $q->button({ -name => 'Submit Data', -onclick => "if (pageValidate()) {document.getElementById('mainForm').submit()} " }) ), $q->td({-align => 'center'}, $q->button({ -name => 'Validate', -onclick => "pageValidate();" }) ), $q->td({-align => 'center'}, $q->button({ -name => 'Clear', -onclick => "window.location='".$q->url."';", }) ), $q->td({-align => 'center'}, $q->button({ -name => 'Search', -onclick => "search();", }) ), ) )); #help block section # print $q->template('UsbInternalPOCHelpBlock.tmpl')->process({ helpMessage1 => ' ', helpMessage2 => ' ', }); #composite widget section print $q->start_form({ -id => 'mainForm'}), $q->hidden({-name => 'nav', -value => 'dbwrite'}); print $stuff->display(mode => $mode); print $q->javascript->load('cscMarketing.js'); print $q->end_form; print $q->template('footer1.tmpl')->process({version => $q->lazyversion}); return; } #---------------------------------------------------------------------------------------- sub doFullDelete { my $incoming = shift; my $advertiserid = $incoming->{delete}->{advertiserID}; # $q->db->do('delete from activity where advertiserID = ?', $advertiserID); # $q->db->do('delete from advertiser where ID = ?', $advertiserID); my $advertiser = $stuff->members->{advertiser}; my $activity = $stuff->members->{activity}; print $q->header, $stuff->ajaxReturn( [$advertiser, $activity], [$advertiser->ajaxBlank, $activity->ajaxBlank], ); } #---------------------------------------------------------------------------------------- sub dbwrite { $$id = $q->param('advertiser-advertiserID'); $stuff->dbwrite(); # $stuff->members->{advertiser}->dbwrite( # insert => {id => {handle => $id}}, # update => {id => {handle => $id}}, # ); # $stuff->members->{activity}->dbwrite( # insert => {advertiserID => {value => $id}}, # update => {advertiserID => {value => $id}}, # ); display('blank'); }