00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 void QlabProductManager::init()
00011 {
00012 defFilter = "active='1'" ;
00013 activeFlag = TRUE ;
00014 srchFlds << "prod_ref" << "prod_name" ;
00015 vndr = new QSqlCursor( "Contacts", TRUE ) ;
00016 prodsDataTable->setLeftMargin( 0 ) ;
00017 prodsDataTable->setColumnWidth( 1, 150 ) ;
00018 prodsDataTable->setFilter( "recid='0'" ) ;
00019 prodsDataTable->refresh( QDataTable::RefreshAll ) ;
00020 }
00021
00022 void QlabProductManager::searchIt( const QString & srch )
00023 {
00024 if ( !srch.stripWhiteSpace().isEmpty() ) {
00025 QString srlist = "active ='1' AND ( " ;
00026 QString needle = srch.stripWhiteSpace().upper() ;
00027
00028 qDebug( needle ) ;
00029 bool start = FALSE ;
00030 if ( !needle.isEmpty() ) {
00031 for ( QStringList::Iterator it = srchFlds.begin(); it != srchFlds.end(); ++it ) {
00032 QString fl = *it ;
00033 if ( start ) {
00034 srlist.append( " OR " ) ;
00035 } else {
00036 start = TRUE ;
00037 }
00038 srlist.append( QString( " %1 LIKE '%" ).arg( fl ) ) ;
00039 srlist.append( needle ) ;
00040 srlist.append( "%'" ) ;
00041 }
00042 srlist.append( " )" ) ;
00043 qDebug( srlist ) ;
00044 prodsDataTable->setFilter( srlist ) ;
00045 prodsDataTable->refresh() ;
00046 } else {
00047 resetFilter() ;
00048 }
00049 }
00050 }
00051
00052
00053 void QlabProductManager::resetFilter()
00054 {
00055 prodsDataTable->setFilter( defFilter ) ;
00056 prodsDataTable->refresh() ;
00057 searcher->setText( "" ) ;
00058 if ( prodsDataTable->numRows() > 0 ) {
00059 prodsDataTable->selectRow( 0 ) ;
00060 prodsDataTable->setCurrentCell( 0, 0 ) ;
00061 prodsDataTable->ensureVisible( 0, 0 ) ;
00062 productChanged( prodsDataTable->currentRecord() ) ;
00063 } else {
00064 catPath->setText( BuildCategoryPath( QString( "%1" ).arg( activecat ) ) ) ;
00065 prod_ref->setText( "" ) ;
00066 prod_vendor_ref->setText( "" ) ;
00067 prod_name->setText( "" ) ;
00068 prod_description->setText( "" ) ;
00069 vendorName->setText( "" ) ;
00070 quick_rate->setText( "1.000" ) ;
00071 base_buy_price->setText( currency( 0 ) ) ;
00072 base_sell_price->setText( currency( 0 ) ) ;
00073 prod_base_retail->setText( currency( 0 ) ) ;
00074 }
00075 }
00076
00077
00078 void QlabProductManager::setCatFilter( int catid )
00079 {
00080 activecat = catid ;
00081 defFilter = QString( "active='%1' AND main_category='%2'" ).arg( activeFlag ? 1 : 0 ).arg( catid ) ;
00082 resetFilter() ;
00083 }
00084
00085
00086 void QlabProductManager::productChanged( QSqlRecord * buffer )
00087 {
00088 catPath->setText( BuildCategoryPath( QString( "%1" ).arg( buffer->value( "main_category" ).toString() ) ) ) ;
00089 prod_ref->setText( buffer->value( "prod_ref" ).toString() ) ;
00090 prod_vendor_ref->setText( buffer->value( "prod_vendor_ref" ).toString() ) ;
00091 prod_name->setText( buffer->value( "prod_name" ).toString() ) ;
00092 prod_description->setText( buffer->value( "prod_description" ).toString() ) ;
00093 vendorName->setText( getVendor( buffer->value( "vendor_id" ).toInt() ) ) ;
00094 prod_description->setText( buffer->value( "prod_description" ).toString() ) ;
00095 quick_rate->setText( QString( "" ).setNum( buffer->value( "quick_rate" ).toDouble(), 'f', 3 ) ) ;
00096 base_buy_price->setText( currency( buffer->value( "base_buy_price" ).toDouble() ) ) ;
00097 base_sell_price->setText( currency( buffer->value( "base_sell_price" ).toDouble() ) ) ;
00098 prod_base_retail->setText( currency( buffer->value( "prod_base_retail" ).toDouble() ) ) ;
00099 }
00100
00101
00102 void QlabProductManager::evalAction()
00103 {
00104 QString action = QObject::sender()->name() ;
00105 qDebug( action ) ;
00106 if ( action == "prodNew" ) {
00107
00108 QSqlCursor * what = new QSqlCursor( "Inv_products", TRUE ) ;
00109 QSqlCursor * catopts = new QSqlCursor( "System_categories", TRUE ) ;
00110 catopts->setFilter( QString( "recid='%1'" ).arg( activecat ) ) ;
00111 catopts->select() ;
00112 catopts->next() ;
00113 QString options = catopts->value( "cat_data" ).toString() ;
00114 QString vat = options.section( '\n', 0, 0 ) ;
00115 QString defrate = options.section( '\n', 1, 1 ) ;
00116 vat = vat.section( '|', 2, 2 ) ;
00117 vat = vat.section( "=", 1, 1 ) ;
00118 defrate = defrate.section( '|', 2, 2 ) ;
00119 defrate = defrate.section( '=', 1, 1 ) ;
00120 qDebug( vat ); qDebug( defrate ) ;
00121 what->select() ;
00122 QSqlRecord * buffer = what->primeInsert() ;
00123 buffer->setValue( "recid", SequenceGetNextValue( "Inv_products" ) ) ;
00124 buffer->setValue( "main_category", activecat ) ;
00125 buffer->setValue( "quick_rate", defrate.toDouble() ) ;
00126 buffer->setValue( "currency_id", 1 ) ;
00127 buffer->setValue( "tax_id", vat.toInt() ) ;
00128 buffer->setValue( "created", QDateTime::currentDateTime() ) ;
00129 productDetailDialog * dialog = new productDetailDialog( this, "ProductDetail", TRUE ) ;
00130 dialog->setBuffer( buffer ) ;
00131 if ( dialog->exec() == QDialog::Accepted ) {
00132 buffer->setValue( "lastchanged", QDateTime::currentDateTime() ) ;
00133 buffer->setValue( "lastchangedID", LabUser->value( "recid" ).toInt() ) ;
00134 buffer->setValue( "lastchangedreason", tr( "Creation" ) ) ;
00135 what->insert() ;
00136 qDebug( what->lastQuery() ) ;
00137 prodsDataTable->refresh() ;
00138 }
00139 delete dialog ;
00140 } else if ( action == "prodEdit" ) {
00141
00142 QSqlCursor * what = new QSqlCursor( "Inv_products", TRUE ) ;
00143 what->setFilter( QString( "recid='%1'" ).arg( prodsDataTable->currentRecord()->value( "recid" ).toString() ) ) ;
00144 what->select() ;
00145 what->next() ;
00146 qDebug( what->lastQuery() ) ;
00147 QSqlRecord * buffer = what->primeUpdate() ;
00148 productDetailDialog * dialog = new productDetailDialog( this, "ProductDetail", TRUE ) ;
00149 dialog->setBuffer( buffer ) ;
00150 if( dialog->exec() == QDialog::Accepted ) {
00151 buffer->setValue( "lastchanged", QDateTime::currentDateTime() ) ;
00152 buffer->setValue( "lastchangedID", LabUser->value( "recid" ).toInt() ) ;
00153 buffer->setValue( "lastchangedreason", tr( "Modification" ) ) ;
00154 what->update() ;
00155 qDebug( what->lastQuery() ) ;
00156 prodsDataTable->refresh() ;
00157 }
00158 delete dialog ;
00159 } else if ( action == "prodDel" ) {
00160
00161 if ( QMessageBox::question( this, tr( "Delete Product?" ),
00162 tr( "You asked for a record deletion\n"
00163 "This action will disable this record and all "
00164 "associated parts.\n"
00165 "Are you really sure you want to doo this?" ),
00166 tr( "No" ), tr( "Yes" ), 0, 0, 0 ) == 1 ) {
00167 QSqlRecord * buffer = prodsDataTable->currentRecord() ;
00168 QSqlQuery q( QString( "UPDATE Inv_products SET active=0 WHERE recid='%1' ;" )
00169 .arg( buffer->value( "recid" ).toString() ) ) ;
00170 prodsDataTable->refresh() ;
00171 }
00172 }
00173 }
00174
00175
00176 QString QlabProductManager::currency( double val )
00177 {
00178 return QString( "" ).setNum( val, 'f', 2 ) ;
00179 }
00180
00181
00182 QString QlabProductManager::getVendor( int vid )
00183 {
00184 vndr->setFilter( QString( "recid='%1'" ).arg( vid ) ) ;
00185 vndr->select() ;
00186 if ( vndr->next() ) {
00187 return vndr->value( "contact_name" ).toString() ;
00188 } else {
00189 return tr( "Unknown" ) ;
00190 }
00191 }
00192
00193
00194 void QlabProductManager::printList()
00195 {
00196 QString bgcolor = "#e9fffe" ;
00197 bool odd = FALSE ;
00198 QString resultTable ;
00199 resultTable.append( "<table width=\"100%\" border=\"0\">" ) ;
00200 int nrows = prodsDataTable->numRows() ;
00201 for ( int i = 0; i < nrows; i++ ) {
00202 odd = !odd ;
00203 if ( odd ) {
00204 resultTable.append( QString( "<tr bgcolor=\"%1\">" ).arg( bgcolor ) ) ;
00205 } else {
00206 resultTable.append( "<tr>" ) ;
00207 }
00208 resultTable.append( QString( "<td width=\"20%\">%1</td>" ).arg( prodsDataTable->text( i, 0 ) ) ) ;
00209 resultTable.append( QString( "<td width=\"50%\">%1</td>" ).arg( prodsDataTable->text( i, 1 ) ) ) ;
00210 resultTable.append( QString( "<td width=\"10%\" align=\"right\">%1</td>" ).arg( prodsDataTable->text( i, 2 ) ) ) ;
00211 resultTable.append( QString( "<td width=\"10%\" align=\"right\">%1</td>" ).arg( prodsDataTable->text( i, 3 ) ) ) ;
00212 resultTable.append( "<td width=\"10%\" align=\"right\"> </td>" ) ;
00213 resultTable.append( "</tr>" ) ;
00214 }
00215 resultTable.append( "</table>" ) ;
00216 QPrinter * printer = new QPrinter( QPrinter::ScreenResolution ) ;
00217 printer->setFullPage( TRUE ) ;
00218 if ( printer->setup( this ) ) {
00219 QPainter p ;
00220 if ( !p.begin( printer ) ) {
00221 return ;
00222 }
00223 QPaintDeviceMetrics metrics( p.device() ) ;
00224 int dpiy = metrics.logicalDpiY() ;
00225 margin = (int)( ( 1 / 2.54 ) * dpiy ) ;
00226 QRect body( margin, margin * 3,
00227 metrics.width() - 2 * margin,
00228 metrics.height() - 5 * margin ) ;
00229 QSimpleRichText richText( resultTable,
00230 prodsDataTable->font(),
00231 0, 0, 0, body.height() ) ;
00232 richText.setWidth( &p, body.width() ) ;
00233 QRect view( body ) ;
00234
00235 page = 1;
00236 do {
00237
00238 richText.draw( &p, body.left(), body.top(), view, colorGroup() ) ;
00239 printHeader( p, view ) ;
00240 printFooter( p, view ) ;
00241 if ( view.top() >= richText.height() )
00242 break ;
00243 printer->newPage() ;
00244 page++ ;
00245 } while (TRUE) ;
00246
00247 }
00248 }
00249
00250
00251 void QlabProductManager::printHeader( QPainter &p, QRect & view )
00252 {
00253 QString header = "Le Maryland" ;
00254 QString reportTitle = QString( tr( "Result List " ) ) ;
00255 QString rhead = QString( "%1: %2" )
00256 .arg( reportTitle )
00257 .arg( QDateTime::currentDateTime().toString( "dddd dd MMMM yyyy" ) ) ;
00258 QString tblh = "<table width=\"100%\">" ;
00259 tblh.append( QString( "<tr bgcolor=\"#e0e0e0\"><td width=\"20%\">%1</td><td width=\"50%\">%2</td>"
00260 "<td width=\"10%\">%3</td><td width=\"10%\">%4</td><td width=\"10%\">%5</td></tr></table>" )
00261 .arg( tr( "Reference" ) ).arg( tr( "Designation" ) )
00262 .arg( tr( "Public" ) ).arg( tr( "Available" ) ).arg( tr( "Notes" ) ) ) ;
00263 view.moveBy( 0, view.height() ) ;
00264 p.translate( 0 , - view.height() ) ;
00265 QSimpleRichText richtext( tblh, prodsDataTable->font(), 0, 0, 0, p.fontMetrics().ascent() + 20 ) ;
00266 richtext.setWidth( &p, view.width() ) ;
00267
00268 p.drawText( view.left() ,
00269 view.top() - ( 2 * p.fontMetrics().ascent() ) - 10,
00270 header ) ;
00271 p.drawText( view.right() - p.fontMetrics().width( rhead ) ,
00272 view.top() - ( 2 * p.fontMetrics().ascent() ) - 10,
00273 rhead ) ;
00274 QPaintDeviceMetrics metrics( p.device() ) ;
00275 QRect titlerect( view.left(), view.top() - p.fontMetrics().ascent() - 20,
00276 metrics.width() - 2 * margin, p.fontMetrics().ascent() + 20 ) ;
00277 richtext.draw( &p, view.left(), view.top() - p.fontMetrics().ascent() - 20, titlerect, colorGroup() ) ;
00278
00279
00280
00281
00282
00283
00284
00285
00286 }
00287
00288
00289 void QlabProductManager::printFooter( QPainter & p, QRect & view )
00290 {
00291 view.moveBy( 0, view.height() ) ;
00292 p.translate( 0 , - view.height() ) ;
00293 p.drawText( view.left(),
00294 view.bottom() + margin - p.fontMetrics().ascent() - 5,
00295 QString( tr( "Printed on: " ) +
00296 QDateTime::currentDateTime().toString( "dddd dd MMMM yyyy - hh:mm:ss" ) ) ) ;
00297
00298 p.drawText( view.right() - p.fontMetrics().width( QString( "Page: " ) + QString::number( page ) ),
00299 view.bottom() + margin - p.fontMetrics().ascent() - 5,
00300 QString( "Page: " ) + QString::number( page ) ) ;
00301
00302 }