00001 /**************************************************************************** 00002 ** ui.h extension file, included from the uic-generated form implementation. 00003 ** 00004 ** If you wish to add, delete or rename functions or slots use 00005 ** Qt Designer which will update this file, preserving your code. Create an 00006 ** init() function in place of a constructor, and a destroy() function in 00007 ** place of a destructor. 00008 *****************************************************************************/ 00009 00010 00011 void productDetailDialog::init() 00012 { 00013 prodsCurs = new QSqlCursor( "Inv_products", TRUE ) ; 00014 partsCurs = new QSqlCursor( "Inv_parts", TRUE ) ; 00015 taxes = new QSqlCursor( "System_taxrates", TRUE ) ; 00016 taxes->setFilter( "" ) ; 00017 taxes->index( "recid" ) ; 00018 taxes->select() ; 00019 while ( taxes->next() ) { 00020 vatCombo->insertItem( taxes->value( "tax_name" ).toString() ) ; 00021 } 00022 partsTable->setLeftMargin( 0 ) ; 00023 } 00024 00025 void productDetailDialog::changeCategory() 00026 { 00027 QlabCategorySelector * dialog = new QlabCategorySelector( this, "CatSel" ) ; 00028 dialog->setType( "inv" ) ; 00029 if ( dialog->exec() == QDialog::Accepted ) { 00030 buffer->setValue( "main_category", dialog->getID() ) ; 00031 } 00032 } 00033 00034 00035 void productDetailDialog::checkRef() 00036 { 00037 QString wid = QObject::sender()->name() ; 00038 if ( !inInit ) { 00039 inInit = TRUE ; 00040 QString value = ( (QLineEdit *)QObject::sender() )->text().upper().stripWhiteSpace() ; 00041 buffer->setValue( wid, value ) ; 00042 ( (QLineEdit *)QObject::sender() )->setText( value ) ; 00043 inInit = FALSE ; 00044 } 00045 } 00046 00047 00048 void productDetailDialog::setField( const QString & val ) 00049 { 00050 QString wid = QObject::sender()->name() ; 00051 buffer->setValue( wid, val ) ; 00052 } 00053 00054 00055 void productDetailDialog::recalc() 00056 { 00057 if ( !inInit ) { 00058 inInit = TRUE ; 00059 QString wid = QObject::sender()->name() ; 00060 if ( wid == "vatCombo" ) { 00061 setVat( vatCombo->currentText() ) ; 00062 buffer->setValue( "prod_base_retail", buffer->value( "base_sell_price" ).toDouble() + 00063 ( buffer->value( "base_sell_price" ).toDouble() * curr_tax / 100 ) ) ; 00064 prod_base_retail->setText( QString( "" ).number( buffer->value( "prod_base_retail" ).toDouble(), 'f', 2 ) ) ; 00065 } else if ( wid == "quick_rate" ) { 00066 buffer->setValue( "quick_rate", quick_rate->text().toDouble() ) ; 00067 buffer->setValue( "base_sell_price", buffer->value( "base_buy_price" ).toDouble() * 00068 buffer->value( "quick_rate" ).toDouble() ) ; 00069 buffer->setValue( "prod_base_retail", buffer->value( "base_sell_price" ).toDouble() + 00070 ( buffer->value( "base_sell_price" ).toDouble() * curr_tax / 100 ) ) ; 00071 quick_rate->setText( QString( "" ).number( buffer->value( "quick_rate" ).toDouble(), 'f', 3 ) ) ; 00072 base_sell_price->setText( QString( "" ).number( buffer->value( "base_sell_price" ).toDouble(), 'f', 2 ) ) ; 00073 prod_base_retail->setText( QString( "" ).number( buffer->value( "prod_base_retail" ).toDouble(), 'f', 2 ) ) ; 00074 } else if ( wid == "base_buy_price" ) { 00075 buffer->setValue( "base_buy_price", base_buy_price->text().toDouble() ) ; 00076 buffer->setValue( "base_sell_price", base_buy_price->text().toDouble() * 00077 buffer->value( "quick_rate" ).toDouble() ) ; 00078 buffer->setValue( "quick_rate", buffer->value( "base_sell_price" ).toDouble() / 00079 buffer->value( "base_buy_price" ).toDouble() ) ; 00080 buffer->setValue( "prod_base_retail", buffer->value( "base_sell_price" ).toDouble() + 00081 ( buffer->value( "base_sell_price" ).toDouble() * curr_tax / 100 ) ) ; 00082 quick_rate->setText( QString( "" ).number( buffer->value( "quick_rate" ).toDouble(), 'f', 3 ) ) ; 00083 base_buy_price->setText( QString( "" ).number( buffer->value( "base_buy_price" ).toDouble(), 'f', 2 ) ) ; 00084 base_sell_price->setText( QString( "" ).number( buffer->value( "base_sell_price" ).toDouble(), 'f', 2 ) ) ; 00085 prod_base_retail->setText( QString( "" ).number( buffer->value( "prod_base_retail" ).toDouble(), 'f', 2 ) ) ; 00086 00087 } else if ( wid == "base_sell_price" ) { 00088 buffer->setValue( "base_sell_price", base_sell_price->text().toDouble() ) ; 00089 if ( buffer->value( "base_buy_price" ).toDouble() > 0.0 ) { 00090 buffer->setValue( "quick_rate", buffer->value( "base_sell_price" ).toDouble() / 00091 buffer->value( "base_buy_price" ).toDouble() ) ; 00092 } else { 00093 buffer->setValue( "base_buy_price", buffer->value( "base_sell_price" ).toDouble() / 00094 buffer->value( "quick_rate" ).toDouble() ) ; 00095 } 00096 buffer->setValue( "prod_base_retail", buffer->value( "base_sell_price" ).toDouble() + 00097 ( buffer->value( "base_sell_price" ).toDouble() * curr_tax / 100 ) ) ; 00098 quick_rate->setText( QString( "" ).number( buffer->value( "quick_rate" ).toDouble(), 'f', 3 ) ) ; 00099 base_sell_price->setText( QString( "" ).number( buffer->value( "base_sell_price" ).toDouble(), 'f', 2 ) ) ; 00100 prod_base_retail->setText( QString( "" ).number( buffer->value( "prod_base_retail" ).toDouble(), 'f', 2 ) ) ; 00101 } else if ( wid == "prod_base_retail" ) { 00102 buffer->setValue( "prod_base_retail", prod_base_retail->text().toDouble() ) ; 00103 buffer->setValue( "base_sell_price", prod_base_retail->text().toDouble() - 00104 ( prod_base_retail->text().toDouble() * curr_tax / 100 ) ) ; 00105 buffer->setValue( "quick_rate", buffer->value( "base_sell_price" ).toDouble() / 00106 buffer->value( "base_buy_price" ).toDouble() ) ; 00107 quick_rate->setText( QString( "" ).number( buffer->value( "quick_rate" ).toDouble(), 'f', 3 ) ) ; 00108 base_sell_price->setText( QString( "" ).number( buffer->value( "base_sell_price" ).toDouble(), 'f', 2 ) ) ; 00109 prod_base_retail->setText( QString( "" ).number( buffer->value( "prod_base_retail" ).toDouble(), 'f', 2 ) ) ; 00110 } 00111 inInit = FALSE ; 00112 } 00113 } 00114 00115 00116 void productDetailDialog::printProd() 00117 { 00118 00119 } 00120 00121 00122 void productDetailDialog::partAdd() 00123 { 00124 QlabPartEditor * dialog = new QlabPartEditor( this, "PartEdit", TRUE ) ; 00125 partsCurs->setFilter( "" ) ; 00126 partsCurs->select() ; 00127 partsCurs->next() ; 00128 QSqlRecord * pbuff = partsCurs->primeInsert() ; 00129 dialog->setProduct( prod_name->text() ) ; 00130 dialog->setDefaultRate( quick_rate->text() ) ; 00131 pbuff->setValue( "recid", 0 ) ; 00132 pbuff->setValue( "isstd_buy_unit", 0 ) ; 00133 pbuff->setValue( "savings", 0 ) ; 00134 pbuff->setValue( "Taxid", buffer->value( "tax_id" ).toInt() ) ; 00135 pbuff->setValue( "costupdate", QDateTime::currentDateTime() ) ; 00136 pbuff->setValue( "priceupdate", QDateTime::currentDateTime() ) ; 00137 pbuff->setValue( "created", QDateTime::currentDateTime() ) ; 00138 pbuff->setValue( "lastchanged", QDateTime::currentDateTime() ) ; 00139 pbuff->setValue( "lastchangedID", LabUser->value( "recid" ).toInt() ) ; 00140 pbuff->setValue( "lastchangedreason", tr( "Creation" ) ) ; 00141 00142 dialog->setBuffer( pbuff ) ; 00143 if ( dialog->exec() == QDialog::Accepted ) { 00144 pbuff->setValue( "recid", SequenceGetNextValue( "Inv_parts" ).toInt() ) ; 00145 pbuff->setValue( "prodid", buffer->value( "recid" ).toInt() ) ; 00146 QSqlCursor * cats = new QSqlCursor( "System_categories", TRUE ) ; 00147 int actcat ; 00148 cats->setFilter( QString( "recid='%1'" ).arg( buffer->value( "main_category" ).toString() ) ) ; 00149 cats->select() ; 00150 cats->next() ; 00151 pbuff->setValue( "main_cat", cats->value( "recid" ).toString() ) ; 00152 actcat = cats->value( "cat_parent" ).toInt() ; 00153 while ( actcat > 0 ) { 00154 cats->setFilter( QString( "recid='%1'" ).arg( actcat ) ) ; 00155 cats->select() ; 00156 cats->next() ; 00157 actcat = cats->value( "cat_parent" ).toInt() ; 00158 pbuff->setValue( "main_cat", cats->value( "recid" ).toString() ) ; 00159 } 00160 partsCurs->insert() ; 00161 partsTable->refresh() ; 00162 } 00163 delete dialog ; 00164 00165 editPart->setEnabled( partsTable->numRows() > 0 ) ; 00166 delPart->setEnabled( partsTable->numRows() > 0 ) ; 00167 } 00168 00169 00170 void productDetailDialog::partEdit() 00171 { 00172 QlabPartEditor * dialog = new QlabPartEditor( this, "PartEdit", TRUE ) ; 00173 qDebug( "Grabbing info" ) ; 00174 QSqlRecord * b = partsTable->currentRecord() ; 00175 qDebug( "Grabbing product" ) ; 00176 partsCurs->setFilter( QString( "recid='%1'" ).arg( b->value( "recid" ).toString() ) ) ; 00177 partsCurs->select() ; 00178 qDebug( partsCurs->lastQuery() ) ; 00179 partsCurs->next() ; 00180 QSqlRecord * pbuff = partsCurs->primeUpdate() ; 00181 dialog->setProduct( prod_name->text() ) ; 00182 dialog->setDefaultRate( quick_rate->text() ) ; 00183 dialog->setBuffer( pbuff ) ; 00184 if ( dialog->exec() == QDialog::Accepted ) { 00185 pbuff->setValue( "lastchanged", QDateTime::currentDateTime() ) ; 00186 pbuff->setValue( "laschangedID", LabUser->value( "recid" ).toInt() ) ; 00187 partsCurs->update() ; 00188 partsTable->refresh() ; 00189 } 00190 delete dialog ; 00191 } 00192 00193 00194 void productDetailDialog::partDel() 00195 { 00196 if ( QMessageBox::question( this, tr( "Delete Part?" ), 00197 tr( "You asked for a record deletion\n" 00198 "This action will disable this record and all " 00199 "associated values.\n" 00200 "Are you really sure you want to doo this?" ), 00201 tr( "No" ), tr( "Yes" ), 0, 0, 0 ) == 1 ) { 00202 QSqlRecord * pbuff = partsTable->currentRecord() ; 00203 QSqlQuery q( QString( "UPDATE Inv_parts SET active=0 WHERE recid='%1' ;" ) 00204 .arg( pbuff->value( "recid" ).toString() ) ) ; 00205 partsTable->refresh() ; 00206 } 00207 editPart->setEnabled( partsTable->numRows() > 0 ) ; 00208 delPart->setEnabled( partsTable->numRows() > 0 ) ; 00209 } 00210 00211 00212 void productDetailDialog::setBuffer( QSqlRecord * buff ) 00213 { 00214 buffer = buff ; 00215 inInit = TRUE ; 00216 taxes->setFilter( QString( "recid='%1'" ).arg( buffer->value( "tax_id" ).toString() ) ) ; 00217 taxes->select() ; 00218 taxes->next() ; 00219 curr_tax= taxes->value( "tax_rate" ).toDouble() ; 00220 catPath->setText( BuildCategoryPath( buffer->value( "main_category" ).toString() ) ) ; 00221 prod_ref->setText( buffer->value( "prod_ref" ).toString() ) ; 00222 prod_vendor_ref->setText( buffer->value( "prod_vendor_ref" ).toString() ) ; 00223 prod_name->setText( buffer->value( "prod_name" ).toString() ) ; 00224 prod_description->setText( buffer->value( "prod_description" ).toString() ) ; 00225 vendorCombo->setActive( buffer->value( "vendor_id" ).toInt() ) ; 00226 vatCombo->setCurrentText( taxes->value( "tax_name" ).toString() ) ; 00227 quick_rate->setText( QString( "" ).number( buffer->value( "quick_rate" ).toDouble(), 'f', 3 ) ) ; 00228 base_buy_price->setText( QString( "" ).number( buffer->value( "base_buy_price" ).toDouble(), 'f', 3 ) ) ; 00229 base_sell_price->setText( QString( "" ).number( buffer->value( "base_sell_price" ).toDouble(), 'f', 3 ) ) ; 00230 prod_base_retail->setText( QString( "" ).number( buffer->value( "prod_base_retail" ).toDouble(), 'f', 3 ) ) ; 00231 partsTable->setFilter( QString( "prodid='%1 AND active=1'" ).arg( buffer->value( "recid" ).toString() ) ) ; 00232 partsTable->refresh() ; 00233 editPart->setEnabled( partsTable->numRows() > 0 ) ; 00234 delPart->setEnabled( partsTable->numRows() > 0 ) ; 00235 inInit = FALSE ; 00236 } 00237 00238 00239 00240 void productDetailDialog::saveDescription() 00241 { 00242 if ( !inInit ) { 00243 buffer->setValue( "prod_description", prod_description->text() ) ; 00244 } 00245 } 00246 00247 00248 void productDetailDialog::setVendor( int vnd ) 00249 { 00250 if ( !inInit ) { 00251 buffer->setValue( "vendor_id", vnd ) ; 00252 } 00253 } 00254 00255 00256 void productDetailDialog::setVat( const QString & vatc ) 00257 { 00258 if ( !inInit ) { 00259 taxes->setFilter( QString( "tax_name='%1'" ).arg( vatc ) ) ; 00260 taxes->select() ; 00261 taxes->next() ; 00262 buffer->setValue( "tax_id", taxes->value( "recid" ).toInt() ) ; 00263 curr_tax = taxes->value( "tax_rate" ).toDouble() ; 00264 recalc() ; 00265 } 00266 } 00267