00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef Report_Params_ui_h
00012 #define Report_Params_ui_h
00013
00014 #include <iostream>
00015 #include <iomanip>
00016 #include "cgiTemplates.h"
00017 #include "connectstring"
00018 #include "forms.h"
00019 #include "ocTypes.h"
00020 #include "ocString.h"
00021 #include "cgiTemplates.h"
00022 #include "Report_Parameters.hpp"
00023 #include "list_base.hpp"
00024 #include "forms_base.hpp"
00025
00026 #include "Session.hpp"
00027
00028
00029 #include "openLogger.h"
00030
00031
00032
00033
00034
00035 string multivalLookup ( string sql )
00036 {
00037 string ret;
00038 quickQuery qqry;
00039 openRS & rs = qqry.getData(sql);
00040 bool opened = qqry.opened;
00041 while( opened )
00042 {
00043 if( ret.length() > 0 )
00044 ret += ", ";
00045 ret += rs.getField(0).format();
00046 opened = rs.next();
00047 }
00048 rs.close();
00049 return ret;
00050 }
00051
00052
00053
00054
00055
00056
00057 class Report_Parameters
00058 {
00059
00060 public:
00061 identifier Id;
00062 llong Report_Id;
00063 string Display_Label;
00064
00065 string Data_Element;
00066
00067
00068 string Tag_Name;
00069 string Choices_Query;
00070 string Parameter_Type;
00071 int List_Order;
00072 string Pre_Content;
00073 string Post_Content;
00074
00075
00076
00077
00078
00079
00080 string value_str;
00081 money value_mny;
00082 oc_date value_ocd;
00083 time_date value_td;
00084
00085
00086 Report_Parameters():
00087 Id(0LL),
00088 Report_Id(0LL),
00089 Display_Label(""),
00090 Data_Element(""),
00091 Tag_Name(""),
00092 Choices_Query(""),
00093 Parameter_Type(""),
00094 List_Order(0),
00095 Pre_Content(""),
00096 Post_Content("")
00097 {
00098
00099 }
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118 Report_Parameters( const Report_Parameters & in):
00119 Id(in.Id),
00120 Report_Id(in.Report_Id),
00121 Display_Label(in.Display_Label),
00122 Data_Element(in.Data_Element),
00123 Tag_Name(in.Tag_Name),
00124 Choices_Query(in.Choices_Query),
00125 Parameter_Type(in.Parameter_Type),
00126 List_Order(in.List_Order),
00127 Pre_Content(in.Pre_Content),
00128 Post_Content(in.Post_Content)
00129 {
00130 value_str=in.value_str;
00131 value_mny=in.value_mny;
00132 value_ocd=in.value_ocd;
00133 value_td=in.value_td;
00134 }
00135
00136 virtual ~Report_Parameters()
00137 {
00138 ;
00139 }
00140
00141
00142 Report_Parameters & operator = ( const Report_Parameters & in )
00143 {
00144 Id=in.Id;
00145 Report_Id=in.Report_Id;
00146 Display_Label=in.Display_Label;
00147 Data_Element=in.Data_Element;
00148 Tag_Name=in.Tag_Name;
00149 Choices_Query=in.Choices_Query;
00150 Parameter_Type=in.Parameter_Type;
00151 List_Order = in.List_Order;
00152 Pre_Content = in.Pre_Content;
00153 Post_Content = in.Post_Content;
00154 value_str=in.value_str;
00155 value_mny=in.value_mny;
00156 value_ocd=in.value_ocd;
00157 value_td=in.value_td;
00158 return *this;
00159 }
00160
00161 Report_Parameters & operator = ( const Report_Parameters_Obj & in )
00162 {
00163 Id=in.Id;
00164 Report_Id=in.Report_Id;
00165 Display_Label=in.Display_Label;
00166 Data_Element=in.Data_Element;
00167 Tag_Name=in.Tag_Name;
00168 Choices_Query=in.Choices_Query;
00169 Parameter_Type=in.Parameter_Type;
00170 List_Order = in.List_Order;
00171 Pre_Content = in.Pre_Content;
00172 Post_Content = in.Post_Content;
00173 return *this;
00174 }
00175 void getClientData(cgiInput & clientArgs)
00176 {
00177 writelog2("Looking for", Data_Element);
00178 if( clientArgs.count(Data_Element.c_str()) > 0 )
00179 {
00180 writelog2("Found", Data_Element);
00181 value_str = clientArgs[Data_Element.c_str()].c_str();
00182 writelog2("Set to",value_str);
00183 if( Parameter_Type == "DATE" ) value_ocd.parse(value_str.c_str());
00184 }
00185 }
00186
00187 void preHasValueCheckInit( void )
00188 {
00189
00190
00191
00192
00193 ocString nChoices_Query = Choices_Query;
00194 Choices_Query = nChoices_Query
00195 .replaceAll( "{{login}}", oLogin.Id() )
00196 .replaceAll( "{{group}}", oLogin.GroupId())
00197 .replaceAll( "{{staff}}", oLogin.myStaff());
00198
00199 if(Parameter_Type == "AUTO" )
00200 {
00201 value_str = multivalLookup( Choices_Query );
00202 }
00203 }
00204
00205 bool hasValue ( void )
00206 {
00207 bool bret = false;
00208 if( value_str.length() ) bret = true;
00209 return bret;
00210 }
00211
00212 string uiGroup( forms_base & fb )
00213 {
00214 string ret;
00215
00216 if( Parameter_Type == "AUTO" ) if(!hasValue())
00217 { ret = "Error! You may not have the permissions to run this report <!-- ";
00218 ret += Choices_Query + "-->";
00219 }
00220 if( Parameter_Type == "STRING") ret = fb.makeTextBox(Display_Label, Data_Element, value_str ,"255","25");
00221 else if( Parameter_Type == "DATE" ) ret = fb.makeDateBox( Display_Label, Data_Element, value_str, "10");
00222 else if( Parameter_Type == "SELECT" ) ret = fb.makeComboBox(Display_Label, Data_Element, value_str ,Choices_Query);
00223 if( ret.length() )
00224 {
00225 ret +=
00226 "<script type='text/javascript'>createUserVal( '" +
00227 Data_Element +
00228 "' , '" +
00229 Display_Label +
00230 "' );</script>";
00231 ret += "<br class='clearall'>";
00232 }
00233 return ret;
00234 }
00235
00236
00237 string formattedValue( void )
00238 {
00239 string ret;
00240
00241 if( Parameter_Type == "STRING") ret = value_str;
00242 else if( Parameter_Type == "DATE" ) ret = dynamic_cast<time_date&>(value_ocd).format("%Y-%m-%d");
00243 else if( Parameter_Type == "SELECT" ) ret = value_str;
00244 else if( Parameter_Type == "AUTO" ) ret = value_str;
00245 return ret;
00246 }
00247
00248 string filter( ocString temp )
00249 {
00250 ocString value = formattedValue();
00251
00252
00253
00254
00255 if( (Parameter_Type == "SELECT" || Parameter_Type == "AUTO") &&
00256 value.find("|") != string::npos )
00257 {
00258 string tok = value.parse("|");
00259 while( tok.length() )
00260 {
00261 temp = temp.replace(Tag_Name,tok.c_str());
00262 tok = value.parse("|");
00263 }
00264 }
00265 else
00266 {
00267 temp = temp.replaceAll(Tag_Name,value.c_str());
00268 }
00269 return temp;
00270 }
00271
00272 };
00273
00274
00275 typedef map< string, Report_Parameters> rep_params;
00276 typedef vector< string > param_order;
00277
00278 using namespace std;
00279
00280
00281
00282
00283
00284
00285
00286
00287
00288
00289
00290
00291
00292
00293 class Report_Parameters_form: public Report_Parameters_Obj, public forms_base
00294 {
00295 public:
00296 rep_params rps;
00297 param_order rpo;
00298
00299 string reportName;
00300 static bool hasParamValues;
00301
00302 Report_Parameters_form(cgiScript & script):Report_Parameters_Obj(),forms_base(script)
00303 {
00304 setKey(*this);
00305 }
00306
00307 virtual ~Report_Parameters_form(){;}
00308
00309 void form_id_transfer( void )
00310 {
00311 llongFXfer( "Id", Id );
00312 }
00313
00314 void form_data_transfer( void )
00315 {
00316 llongFXfer( "Report_Id", Report_Id);
00317 stringFXfer( "Display_Label", Display_Label);
00318 stringFXfer( "Data_Element", Data_Element);
00319 stringFXfer( "Tag_Name", Tag_Name);
00320 stringFXfer( "Choices_Query", Choices_Query);
00321 stringFXfer( "Parameter_Type", Parameter_Type);
00322 }
00323
00324
00325
00326
00327 bool dbf_action( string mode, changeMap & changes )
00328 {
00329 return true;
00330 }
00331
00332
00333
00334 bool get( void )
00335 {
00336 bool bret = false;
00337
00338 if( Report_Id )
00339 {
00340
00341 ocString clause = " Report_Id = ";
00342 clause.append(Report_Id);
00343 writelog("opening rp data...");
00344 bool isOpen = get_data(clause, "List_Order" );
00345 writelog2("opened rp data with ret", isOpen);
00346 cgiInput & args = script.ClientArguments();
00347 while( isOpen )
00348 {
00349 Report_Parameters rp;
00350 rp=*this;
00351 rp.getClientData(args);
00352
00353 writelog3("Data Elem. and Data: ", rp.Data_Element, rp.value_str);
00354 rpo.push_back(Data_Element);
00355 rps.insert( make_pair(Data_Element,rp) );
00356 writelog("Getting Next");
00357 isOpen=next();
00358 writelog2("Next Returned", isOpen );
00359 }
00360 bret = true;
00361 }
00362 return bret;
00363 }
00364
00365 bool haveFormValues( void )
00366 {
00367 bool bret = true;
00368 rep_params::iterator pos = rps.begin();
00369
00370
00371
00372
00373
00374 while( pos != rps.end() )
00375 {
00376
00377 pos->second.preHasValueCheckInit();
00378
00379 if( pos->second.hasValue() == false )
00380 {
00381 bret = false;
00382 break;
00383 }
00384 ++pos;
00385 }
00386 hasParamValues = bret;
00387 return bret;
00388 }
00389
00390
00391 bool form_display( void )
00392 {
00393 bool breturn = true;
00394 string Title = "<h2>";
00395 Title += reportName;
00396 Title += "</h2>\n";
00397 Title += "<h5>Please enter the following to run the report:</h5>";
00398 script << makeTop("", Title);
00399
00400 script << "<br class='clearall'>" << endl;
00401
00402 for( int x=0; x < rpo.size(); ++x)
00403 {
00404 rep_params::iterator pos = rps.find(rpo[x]);
00405 if( pos !=rps.end() )
00406 {
00407 Report_Parameters & rp = pos->second;
00408 if( rp.Pre_Content.length() )
00409 script << rp.Pre_Content;
00410 script << rp.uiGroup(*this);
00411 if( rp.Post_Content.length() )
00412 script << rp.Post_Content;
00413 }
00414 }
00415 script << formButtons( "", " Run Report ", "");
00416
00417 script << makeBottom( "--" ) << endl;
00418 return breturn;
00419 }
00420 string paramFilters( string temp )
00421 {
00422 rep_params::iterator pos;
00423 for( pos=rps.begin(); pos!=rps.end(); ++pos)
00424 {
00425 Report_Parameters & rp = pos->second;
00426 temp = rp.filter(temp);
00427 }
00428
00429 if( script.ClientArguments().count("doParamFilter") == 0 )
00430 saveToSession();
00431 return temp;
00432 }
00433
00434 void saveToSession( void )
00435 {
00436 rep_params::iterator pos = rps.begin();
00437 Session_Obj sess;
00438 string rep_params = "";
00439 while( pos != rps.end() )
00440 {
00441 rep_params += pos->second.Tag_Name;
00442 rep_params += "~";
00443 rep_params += pos->second.formattedValue();
00444 rep_params += "`";
00445 ++pos;
00446 }
00447 sess.SetData("rep_params",rep_params);
00448 sess.Synch();
00449
00450 }
00451
00452
00453
00454 string filterList( string repTemplate )
00455 {
00456 string temp;
00457 if( script.ClientArguments().count("rep_params") )
00458 {
00459 loadControlTemplates(repTemplate);
00460 ocString paramHeading = formTemplate.getParagraph("param_heading");
00461 ocString paramItem = formTemplate.getParagraph("param_item");
00462 ocString paramEnding = formTemplate.getParagraph("param_ending");
00463 if( paramItem.length() )
00464 {
00465 temp = paramHeading;
00466 ocString params = script.ClientArguments()["rep_params"].c_str();
00467 ocString parseItem = params.parse("`");
00468 while( parseItem.length() )
00469 {
00470 string label = parseItem.parse("~");
00471 string value = parseItem.remainder();
00472 temp += paramItem.replace("$label$",label).replace("$value$",value);
00473 parseItem = params.parse("`");
00474 }
00475 temp += paramEnding;
00476 }
00477 }
00478 return temp;
00479 }
00480 };
00481
00482
00483 #endif