GnuCashew ~ GnuCash Enabled Web
GCW
EditWidget.cpp
Go to the documentation of this file.
1 #line 2 "src/Gui/BillPay/EditWidget.cpp"
2 
3 #include <Wt/WMenuItem.h>
4 #include <Wt/WVBoxLayout.h>
5 
6 #include "../../Eng/AccountComboModel.h"
7 #include "../../Glb/Core.h"
8 #include "BillPay.h"
9 
11 ComboBox()
12 {
13  setModel( std::make_shared< GCW::Eng::AccountComboModel >() );
14  setModelColumn( 1 );
15 
16 } // endComboBox()
17 
18 auto
20 valueGuid()-> std::string
21 {
22  return
23  Wt::asString( model()-> data( currentIndex(), 0 ) ).toUTF8() ;
24 
25 } // endselectedGuid()-> std::string
26 
27 
29 EditWidget( const std::string & _bpGuid )
30 : Wt::WContainerWidget(),
31  m_bpGuid( _bpGuid )
32 {
33  addStyleClass( "EditWidget" );
34 
35  /*
36  ** use a layout.
37  */
38  auto lw = setLayout( std::make_unique< Wt::WVBoxLayout >() );
39 
40  /*
41  ** This is a complex widget, with a header area with a
42  ** handful of fields, then a tab widget with a couple
43  ** pages.
44  **
45  */
46  auto templtMain =
47  lw->
48  addWidget
49  (
50  std::make_unique< Wt::WTemplate >( TR("gcw_gui.billpay.editwidget.form.main") )
51  );
52 
53  /*
54  ** add all the widgets
55  **
56  */
57  m_pbSave = templtMain-> bindNew< Wt::WPushButton >( "save" , TR("gcw.billPay.pb.save") );
58  m_pbCancel = templtMain-> bindNew< Wt::WPushButton >( "cancel" , TR("gcw.billPay.pb.cancel") );
59  m_pbDelete = templtMain-> bindNew< Wt::WPushButton >( "delete" , TR("gcw.billPay.pb.delete") );
60  m_account = templtMain-> bindNew< ComboBox >( "account" );
61  m_dueDay = templtMain-> bindNew< Wt::WSpinBox >( "dueDay" );
62  m_minimum = templtMain-> bindNew< Wt::WLineEdit >( "minimum" );
63  m_budget = templtMain-> bindNew< Wt::WLineEdit >( "budget" );
64  m_nickname = templtMain-> bindNew< Wt::WLineEdit >( "nickname" );
65  m_group = templtMain-> bindNew< Wt::WSpinBox >( "group" );
66  m_limit = templtMain-> bindNew< Wt::WLineEdit >( "limit" );
67  m_actual = templtMain-> bindNew< Wt::WLineEdit >( "actual" );
68  m_ap = templtMain-> bindNew< Wt::WCheckBox >( "ap" , TR("gcw.billPay.pb.ap") );
69  m_isActive = templtMain-> bindNew< Wt::WCheckBox >( "isActive" , TR("gcw.billPay.pb.isActive") );
70  m_isVisible = templtMain-> bindNew< Wt::WCheckBox >( "isVisible" , TR("gcw.billPay.pb.isVisible") );
71  m_autoPay = templtMain-> bindNew< Wt::WCheckBox >( "autoPay" , TR("gcw.billPay.pb.autoPay") );
72  m_payNow = templtMain-> bindNew< Wt::WCheckBox >( "payNow" , TR("gcw.billPay.pb.payNow") );
73 
74  m_account -> setToolTip( TR("gcw.billPay.account.toolTip" ) );
75  m_dueDay -> setToolTip( TR("gcw.billPay.dueDay.toolTip" ) );
76  m_minimum -> setToolTip( TR("gcw.billPay.minimum.toolTip" ) );
77  m_budget -> setToolTip( TR("gcw.billPay.budget.toolTip" ) );
78  m_nickname -> setToolTip( TR("gcw.billPay.nickname.toolTip" ) );
79  m_group -> setToolTip( TR("gcw.billPay.group.toolTip" ) );
80  m_limit -> setToolTip( TR("gcw.billPay.limit.toolTip" ) );
81  m_actual -> setToolTip( TR("gcw.billPay.actual.toolTip" ) );
82  m_ap -> setToolTip( TR("gcw.billPay.pb.ap.toolTip" ) );
83  m_isActive -> setToolTip( TR("gcw.billPay.pb.isActive.toolTip" ) );
84  m_isVisible -> setToolTip( TR("gcw.billPay.pb.isVisible.toolTip" ) );
85  m_autoPay -> setToolTip( TR("gcw.billPay.pb.autoPay.toolTip" ) );
86  m_payNow -> setToolTip( TR("gcw.billPay.pb.payNow.toolTIp" ) );
87 
88  m_dueDay -> setRange( 1, 31 );
89  m_group -> setRange( 0, 30 );
90  m_group -> setSingleStep( 5 );
91 
92  templtMain-> bindString( "accountLabel" , TR("gcw.billPay.account.label" ) );
93  templtMain-> bindString( "dueDayLabel" , TR("gcw.billPay.dueDay.label" ) );
94  templtMain-> bindString( "minimumLabel" , TR("gcw.billPay.minimum.label" ) );
95  templtMain-> bindString( "budgetLabel" , TR("gcw.billPay.budget.label" ) );
96  templtMain-> bindString( "nicknameLabel" , TR("gcw.billPay.nickname.label" ) );
97  templtMain-> bindString( "groupLabel" , TR("gcw.billPay.group.label" ) );
98  templtMain-> bindString( "limitLabel" , TR("gcw.billPay.limit.label" ) );
99  templtMain-> bindString( "actualLabel" , TR("gcw.billPay.actual.label" ) );
100 
101  /*
102  ** this is the tab widget. It takes up the remaining bottom space
103  ** on the form.
104  */
105  m_tabWidget = lw-> addWidget( std::make_unique< Wt::WTabWidget >(), 1 );
106 
107  /*
108  ** This is the payment template. It will get added to
109  ** the first page of the tab widget.
110  **
111  */
112  Wt::WTemplate * templtPayment;
113  {
114  auto u_ = std::make_unique< Wt::WTemplate >( TR( "gcw_gui.billpayeditor.form.tab1" ) );
115  templtPayment = u_.get();
116  m_tabWidget-> addTab( std::move( u_ ), TR("gcw.billPay.tabName.payment") );
117 
118  for( int cb = 0; cb < 12; cb++ )
119  m_cbx.push_back( templtPayment-> bindNew< Wt::WCheckBox >( "cb" + toString( cb+1 ), toString( cb+1 ) ) );
120 
121  auto pbgo = templtPayment-> bindNew< Wt::WPushButton >( "go", TR("gcw.billPay.pb.go") );
122 // pbgo-> setStyleClass( "btn-xs" );
123 
124  m_url = templtPayment-> bindNew< Wt::WLineEdit >( "url" );
125  m_last4 = templtPayment-> bindNew< Wt::WLineEdit >( "last4" );
126  m_note = templtPayment-> bindNew< Wt::WTextArea >( "note" );
127 // m_note = templtPayment-> bindNew< Wt::WTextEdit >( "note" );
128  m_label = templtPayment-> bindNew< Wt::WLabel >( "image", "image" );
129  m_label-> setMinimumSize( "160px", "160px" );
130  m_label-> resize( "160px", "160px" );
131 
132  m_note-> setRows( 20 );
133 // m_note-> resize( Wt::WLength::Auto, Wt::WLength( 200 ) );
134 
135  auto pbClear = templtPayment-> bindNew< Wt::WPushButton >( "clear", TR("gcw.billPay.pb.clear") );
136  pbClear-> setToolTip( TR("gcw.billPay.pb.clear.toolTip") );
137  pbClear->
138  clicked().connect( [&]()
139  {
140  for( auto cb : m_cbx )
141  cb-> setValueText( "no" );
142  });
143 
144  } // endWt::WTemplate * templtPayment;
145 
146  /*
147  ** This is the history widget. It contains
148  ** a registry table for this widget. It gets added to
149  ** the second page of the tab widget.
150  **
151  */
152  Wt::WTemplate * templtHistory;
153  {
154  /*
155  ** This does a better job of honoring the layout, but we still have
156  ** to set the widget height.
157  **
158  */
159  auto w_ = std::make_unique< GCW::Gui::AccountRegister >();
160  m_register = w_.get();
161  auto tab = m_tabWidget-> addTab( std::move( w_ ), TR("gcw.billPay.tabName.history") );
162 // tab-> contents()-> setMaximumSize( Wt::WLength::Auto, "300px" );
163 
164  } // endWt::WTemplate * templtHistory;
165 
166  m_pbSave -> clicked().connect( [&](){ saveData(); });
167  m_pbCancel-> clicked().connect( [&](){ m_cancel.emit(); });
168  m_pbDelete-> clicked().connect( [&](){ m_delete.emit(); });
169 
170  /*
171  ** get all the data loaded
172  */
173  loadData();
174 
175 } // endEditWidget( const std::string & _accountGuid )
176 
177 auto
179 loadData()-> void
180 {
181  /*
182  ** be safe
183  */
184  if( m_bpGuid == "" )
185  return;
186 
187  /*
188  ** Get the item that carries the bill-pay info
189  */
190  auto bpItem = GCW::Gui::BillPay::bpItem( m_bpGuid );
191 
192  /*
193  ** format the 'name' to be something readable
194  */
195  auto fullName = GCW::Dbo::Accounts::fullName( bpItem.accountGuid() );
196 
197  /*
198  ** populate the form
199  */
200  Wt::Dbo::Transaction t( GCW::app()-> gnucashew_session() );
201  m_account -> setValueText( fullName );
202  m_dueDay -> setValueText( bpItem.dueDay () );
203  m_minimum -> setValueText( bpItem.minimum () );
204  m_budget -> setValueText( bpItem.budget () );
205  m_nickname -> setValueText( bpItem.nickname () );
206  m_group -> setValueText( bpItem.group () );
207  m_limit -> setValueText( bpItem.limit () );
208  m_actual -> setValueText( bpItem.actual () );
209  m_url -> setValueText( bpItem.url () );
210  m_ap -> setValueText( bpItem.ap () );
211  m_isActive -> setValueText( bpItem.isActive () );
212  m_isVisible -> setValueText( bpItem.isVisible () );
213  m_autoPay -> setValueText( bpItem.autoPay () );
214  m_payNow -> setValueText( bpItem.payNow () );
215  m_last4 -> setValueText( bpItem.last4 () );
216  m_note -> setValueText( bpItem.note () );
217 
218  int i = 1;
219  for( auto cb : m_cbx )
220  cb-> setValueText( bpItem.cb( i++ ) );
221 
222  m_register-> setAccountGuid( bpItem.accountGuid() );
223 
224 } // endloadData()-> void
225 
226 auto
228 saveData()-> void
229 {
230  /*
231  ** little bit of housekeeping before we begin
232  */
233  if( m_bpGuid == "" )
234  m_bpGuid = GCW::Core::newGuid();
235 
236  /*
237  ** load the bpItem, if we had to create a new guid above,
238  ** then we'll end up with a 'new' bpItem.
239  **
240  */
241  auto bpItem = GCW::Gui::BillPay::bpItem( m_bpGuid );
242 
243  /*
244  ** save everything
245  */
246  Wt::Dbo::Transaction t( GCW::app()-> gnucashew_session() );
247  bpItem.set_accountGuid ( m_account -> valueGuid() );
248  bpItem.set_dueDay ( m_dueDay -> valueText() );
249  bpItem.set_minimum ( m_minimum -> valueText() );
250  bpItem.set_budget ( m_budget -> valueText() );
251  bpItem.set_nickname ( m_nickname -> valueText() );
252  bpItem.set_group ( m_group -> valueText() );
253  bpItem.set_limit ( m_limit -> valueText() );
254  bpItem.set_actual ( m_actual -> valueText() );
255  bpItem.set_url ( m_url -> valueText() );
256  bpItem.set_ap ( m_ap -> valueText() );
257  bpItem.set_isActive ( m_isActive -> valueText() );
258  bpItem.set_isVisible ( m_isVisible -> valueText() );
259  bpItem.set_autoPay ( m_autoPay -> valueText() );
260  bpItem.set_payNow ( m_payNow -> valueText() );
261  bpItem.set_last4 ( m_last4 -> valueText() );
262  bpItem.set_note ( m_note -> valueText() );
263 
264  int i = 1;
265  for( auto cb : m_cbx )
266  bpItem.set_cb( i++, cb-> valueText() );
267 
268  m_save.emit();
269 
270 } // endsaveData()-> void
271 
272 
274 EditWidgetDialog( const std::string & _accountGuid )
275 {
276  addStyleClass( "EditWidgetDialog" );
277  setWindowTitle( "Bill Pay Account" );
278 
279  setClosable( true );
280  rejectWhenEscapePressed( true );
281 
282  auto editWidget = contents()-> addNew< EditWidget >( _accountGuid );
283 
284  editWidget-> save ().connect( [&](){ accept(); });
285  editWidget-> cancel ().connect( [&](){ reject(); });
286 
287 } // endEditWidgetDialog( const std::string & _accountGuid )
288 
289 
290 
EditWidgetDialog(const std::string &_accountGuid)
Definition: EditWidget.cpp:274
Wt::WPushButton * m_pbDelete
Definition: EditWidget.h:64
Wt::WPushButton * m_pbSave
Definition: EditWidget.h:62
GCW::Gui::AccountRegister * m_register
Definition: EditWidget.h:61
Wt::WLineEdit * m_budget
Definition: EditWidget.h:68
std::vector< Wt::WCheckBox * > m_cbx
Definition: EditWidget.h:85
Wt::WCheckBox * m_isActive
Definition: EditWidget.h:75
Wt::WTabWidget * m_tabWidget
Definition: EditWidget.h:84
Wt::WCheckBox * m_payNow
Definition: EditWidget.h:78
Wt::WCheckBox * m_isVisible
Definition: EditWidget.h:76
Wt::WPushButton * m_pbCancel
Definition: EditWidget.h:63
Wt::WLineEdit * m_minimum
Definition: EditWidget.h:67
Wt::WLineEdit * m_nickname
Definition: EditWidget.h:69
EditWidget(const std::string &_bpGuid)
Definition: EditWidget.cpp:29
Wt::WCheckBox * m_autoPay
Definition: EditWidget.h:77
Wt::WLineEdit * m_actual
Definition: EditWidget.h:72
#define TR(X)
Definition: define.h:17
auto newGuid() -> std::string
Generate new GUID string value.
Definition: Core.cpp:235
auto fullName(const std::string &_guid) -> std::string
Account Fullname via GUID.
Definition: Accounts.cpp:282
auto bpItem(const std::string &_guid) -> GCW::Gui::BillPay::Item
Bill Pay Item.
Definition: BillPay.cpp:19
std::string asString(Status _status)
Get Status as String.
Definition: Status.cpp:7
auto toString(int _value) -> std::string
Convert Integer to String.
Definition: BillPay.cpp:41
App * app()
Definition: App.cpp:67
Definition: GncLock.h:6