00001
00002
00003
00004
00005
00006
00007
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