Wtx ~ Wt Extension Library
WtxLib
Lookup.cpp
1 
2 #include <Wtx/Util.h>
3 #include <Wtx/Dbo/QueryModel.h>
4 #include <Wtx/Core/Core.h>
5 
6 #include "Lookup.h"
7 #include "ItemDelegate.h"
8 
9 void Wtx::Sys::Lookup::mapClasses( Wtx::Dbo::Session & session )
10 {
11  Wtx::Sys::Lookup::Item::MapClass( session );
12 }
13 
14 void Wtx::Sys::Lookup::postCreateTables( Wtx::Dbo::Session & session )
15 {
17 
18 // Wt::Dbo::Transaction t(session);
19 // auto sysLookup = session.addNew< Wtx::Sys::Lookup::Item >( "" );
20 // sysLookup.modify()-> cfyField().setValue( "*" );
21 
22 }
23 
30 Wtx::Sys::Lookup::Item::Ptr Wtx::Sys::Lookup::add( const std::string & key, const std::string & group, Wtx::Dbo::Session & session )
31 {
36  auto item = ifind( key, session );
37 
42  if( !item )
43  {
44  Wt::Dbo::Transaction t(session);
45  item = session.addNew<Wtx::Sys::Lookup::Item>( key, group );
46  }
47 
55  if( item )
56  {
57  auto v = item-> cfyField().value();
58  if( v.find(group) == std::string::npos )
59  {
60  if( v != "" )
61  v += ",";
62  v += group;
63  Wt::Dbo::Transaction t(session);
64  item.modify()-> cfyField().setValue( v );
65  }
66 
67  }
68 
69  return item;
70 
71 } // endWtx::Sys::Lookup::Item::Ptr Wtx::Sys::Lookup::add( const std::string & key, const std::string & group, Wtx::Dbo::Session & session )
72 
73 Wtx::Sys::Lookup::Item::Ptr Wtx::Sys::Lookup::load( int id, Wtx::Dbo::Session & session )
74 {
75  return find( id, session );
76 }
77 
78 Wtx::Sys::Lookup::Item::Ptr Wtx::Sys::Lookup::load( const std::string & id, Wtx::Dbo::Session & session )
79 {
80  return load( Wtx::stof( id ) , session );
81 }
82 
83 Wtx::Sys::Lookup::Item::Ptr Wtx::Sys::Lookup::load( const Wt::WString & id, Wtx::Dbo::Session & session )
84 {
85  return load( id.toUTF8() , session );
86 }
87 
88 Wtx::Sys::Lookup::Item::Ptr Wtx::Sys::Lookup::find( int id, Wtx::Dbo::Session & session )
89 {
90 
91  Wt::Dbo::Transaction t(session);
92  auto retVal = session.template load<Wtx::Sys::Lookup::Item>(id);
93  return retVal;
94 
95 }
96 
97 Wtx::Sys::Lookup::Item::Ptr Wtx::Sys::Lookup::find( const std::string & key, Wtx::Dbo::Session & session )
98 {
99  Wtx::Sys::Lookup::Item::Ptr retVal;
100 
101  if( key != "" && key != "[null]" )
102  {
103  if( key.at(0) == '[' )
104  {
105  auto v = Wtx::Core::split( key, ':' );
106  int idVal = std::stoi(v.at(1));
107 
108  if( idVal != -1 )
109  {
110  Wt::Dbo::Transaction t(session);
111  retVal = session.template load<Wtx::Sys::Lookup::Item>(idVal);
112  }
113  }
114  else
115  {
116 // retVal = cache[key];
117 
118  if( !retVal )
119  {
120  Wt::Dbo::Transaction t(session);
121  retVal =
122  session.find<Wtx::Sys::Lookup::Item>()
123  .where( "\"keyField\" = ?")
124  .bind( key )
125  .resultValue()
126  ;
127 // cache[key] = retVal;
128  }
129  }
130 
131  }
132 
133  return retVal;
134 }
135 
136 Wtx::Sys::Lookup::Item::Ptr Wtx::Sys::Lookup::ifind( const std::string & key, Wtx::Dbo::Session & session )
137 {
138  Wtx::Sys::Lookup::Item::Ptr retVal;
139 
140  if( key != "" )
141  {
142  if( !retVal )
143  {
144  Wt::Dbo::Transaction t(session);
145  retVal =
146  session.find<Wtx::Sys::Lookup::Item>()
147  .where( "UPPER(\"keyField\") = UPPER(?)")
148  .bind( key )
149  .resultValue()
150  ;
151  }
152 
153  }
154 
155  return retVal;
156 }
157 
158 Wtx::Sys::Lookup::Item::Ptr Wtx::Sys::Lookup::xfind( const std::string & xid, Wtx::Dbo::Session & session )
159 {
160  Wtx::Sys::Lookup::Item::Ptr retVal;
161 
162  if( xid != "" )
163  {
164  Wt::Dbo::Transaction t(session);
165  retVal =
166  session.find< Wtx::Sys::Lookup::Item >()
167  .where( "UPPER(\"xid\") = UPPER(?)")
168  .bind( xid )
169  .resultValue()
170  ;
171 
172  }
173 
174  return retVal;
175 }
176 
177 
178 Wtx::Sys::Lookup::Item::Vector Wtx::Sys::Lookup::vectorGroup( const std::string & group, Wtx::Dbo::Session & session )
179 {
180  Wt::Dbo::Transaction t(session);
181  auto items =
182  session.find< Wtx::Sys::Lookup::Item >()
183  .where
184  (
185  Wt::WString("\"cfyField\" LIKE '%{1}%'")
186  .arg( group )
187  .toUTF8()
188  )
189  .orderBy( "id desc" )
190  .resultList()
191  ;
192 
193  Wtx::Sys::Lookup::Item::Vector retVal( items.begin(), items.end() );
194 
195  return retVal;
196 
197 }
198 
213 std::shared_ptr<Wt::WAbstractItemModel> Wtx::Sys::Lookup::getComboBoxModel( int tid, const std::string & group, Wtx::Dbo::Session & session, bool includeBlank )
214 {
215  auto retVal = std::make_shared< Wtx::Dbo::QueryModel< Wtx::Sys::Lookup::Item::Ptr > >();
216 
217  Wt::Dbo::Transaction t(session);
218 
219  if( tid == -1 )
220  {
221  if( includeBlank )
222  {
223  typedef std::tuple< int, std::string > Tuple;
224 
225  auto retVal = std::make_shared< Wtx::Dbo::QueryModel< Tuple > >();
226 
227  auto sql =
228  Wt::WString::tr( "Wtx.sysLookup.combobox.sql" )
229  .toUTF8()
230  ;
231 
232  auto query =
233  session.query< Tuple >( sql )
234  ;
235 
236  retVal-> setQuery( query );
237 
238  retVal-> addAllFieldsAsColumns();
239 
240  return retVal;
241  }
242 
243  else
244  {
245  auto query =
246  session.find<Wtx::Sys::Lookup::Item>()
247  .where("\"isActive\" is true AND (UPPER(\"cfyField\") LIKE UPPER(?) OR \"cfyField\" LIKE '%%*%%')")
248  .bind( Wt::WString("%%{1}%%").arg(group) )
249  .orderBy("\"keyField\"")
250  ;
251 
252  retVal-> setQuery( query );
253  retVal-> addColumn("id");
254  retVal-> addColumn("keyField");
255  }
256 
257  }
258 
259  else
260  {
261  auto query =
262  session.find<Wtx::Sys::Lookup::Item>()
263  .where("id = ?")
264  .bind( tid )
265  ;
266 
267  retVal-> setQuery( query );
268  retVal-> addColumn("id");
269  retVal-> addColumn("keyField");
270 
271  }
272 
273  return retVal;
274 }
275 
276 
277 Wt::WItemDelegate * Wtx::Sys::Lookup::delegate( Wtx::Dbo::Session * s )
278 {
279  auto retVal = Wtx::Sys::Lookup::ItemDelegate::create(s);
280 
281  return retVal;
282 }
283 
284 
285 
static void PostCreateTable(Wt::Dbo::Session &session)
Post Table Create.
Definition: BaseItemTpl.h:141
double stof(const std::string &value)
Convert a String to Float.
Definition: Util.cpp:320
std::shared_ptr< Wt::WAbstractItemModel > getComboBoxModel(int tid, const std::string &group, Wtx::Dbo::Session &session, bool includeBlank=false)
Get a Combo-Box Model.
Definition: Lookup.cpp:213
Wtx::Sys::Lookup::Item::Ptr add(const std::string &key, const std::string &group, Wtx::Dbo::Session &session)
Add an item to the lookup table.
Definition: Lookup.cpp:30