1 /*************************************************************************** 2 docposition.h - a position in a document 3 ------------------- 4 begin : Fri Jan 20 2006 5 copyright : (C) 2006 by Klaas Freitag 6 email : freitag@kde.org 7 ***************************************************************************/ 8 9 /*************************************************************************** 10 * * 11 * This program is free software; you can redistribute it and/or modify * 12 * it under the terms of the GNU General Public License as published by * 13 * the Free Software Foundation; either version 2 of the License, or * 14 * (at your option) any later version. * 15 * * 16 ***************************************************************************/ 17 #ifndef DOCPOSITION_H 18 #define DOCPOSITION_H 19 20 // include files for Qt 21 #include <QPointer> 22 #include <QObject> 23 24 #include <QList> 25 26 // application specific includes 27 #include "dbids.h" 28 #include "calcpart.h" 29 #include "attribute.h" 30 #include "einheit.h" 31 32 /** 33 @author Klaas Freitag 34 */ 35 class QString; 36 class QDomElement; 37 class QDomDocument; 38 class Geld; 39 class dbID; 40 class QLocale; 41 class PositionViewWidget; 42 43 class DocPositionBase : public QObject 44 { 45 public: 46 enum PositionType { Position, ExtraDiscount }; 47 enum TaxType { TaxInvalid = 0, TaxNone = 1, TaxReduced = 2, TaxFull = 3, TaxIndividual = 4 }; 48 49 DocPositionBase(); 50 DocPositionBase( const PositionType& ); ~DocPositionBase()51 ~DocPositionBase() {} 52 53 DocPositionBase(const DocPositionBase&); 54 setDbId(int id)55 void setDbId( int id ) { m_dbId = id; } dbId()56 dbID dbId() { return dbID( m_dbId ); } 57 58 void setAttribute( const Attribute& ); 59 void removeAttribute( const QString& ); 60 void loadAttributes(); 61 QString attribute(const QString& ) const; 62 63 AttributeMap attributes(); 64 void setAttributeMap( AttributeMap ); 65 setText(const QString & string)66 void setText( const QString& string ) { m_text = string; } text()67 QString text() const { return m_text; } 68 69 void setTag( const QString& ); 70 void removeTag( const QString& ); 71 bool hasTag( const QString& ); 72 QStringList tags(); 73 74 int taxTypeNumeric(); 75 TaxType taxType(); 76 void setTaxType( DocPositionBase::TaxType ); 77 void setTaxType( int ); 78 79 /** 80 * Position means the number in the document 81 */ positionNumber()82 virtual int positionNumber() { return m_position; } setPositionNumber(const int & pos)83 virtual void setPositionNumber( const int& pos ) { m_position = pos; } setToDelete(bool doit)84 virtual void setToDelete( bool doit ) { mToDelete = doit; } toDelete()85 virtual bool toDelete() { return mToDelete; } type()86 PositionType type() { return mType; } 87 88 DocPositionBase& operator=( const DocPositionBase& ); 89 90 protected: 91 int m_dbId; 92 int m_position; 93 QString m_text; 94 bool mToDelete; 95 TaxType mTaxType; 96 PositionType mType; 97 AttributeMap mAttribs; 98 }; 99 100 101 class DocPosition : public DocPositionBase 102 { 103 public: 104 DocPosition(); 105 DocPosition( const PositionType& ); ~DocPosition()106 ~DocPosition(){}; 107 108 setUnit(const Einheit & unit)109 void setUnit( const Einheit& unit ) { m_unit = unit; } unit()110 Einheit unit() const { return m_unit; } 111 setUnitPrice(const Geld & g)112 void setUnitPrice( const Geld& g ) { m_unitPrice = g; } unitPrice()113 Geld unitPrice() const { return m_unitPrice; } 114 Geld overallPrice(); 115 setAmount(double amount)116 void setAmount( double amount ) { m_amount = amount; } amount()117 double amount() { return m_amount; } 118 associatedWidget()119 PositionViewWidget* associatedWidget() { return mWidget; } setAssociatedWidget(PositionViewWidget * w)120 void setAssociatedWidget( PositionViewWidget *w ) { mWidget = w; } 121 122 static const QString Kind; 123 static const QString Discount; 124 static const QString Tags; 125 static const QString ExtraDiscountTagRequired; 126 127 private: 128 Einheit m_unit; 129 Geld m_unitPrice; 130 double m_amount; 131 PositionViewWidget *mWidget; 132 133 // No calculation yet 134 135 }; 136 137 class DocPositionList : public QList<DocPositionBase*> 138 { 139 public: 140 DocPositionList(); 141 142 QDomElement domElement( QDomDocument& ); 143 DocPositionBase *positionFromId( int id ); 144 QString posNumber( DocPositionBase* ); 145 146 Geld nettoPrice(); 147 Geld bruttoPrice( double fullTax, double reducedTax ); 148 Geld taxSum(double fullTax, double redTax ); 149 Geld fullTaxSum( double fullTax ); 150 Geld reducedTaxSum( double reducedTax ); 151 152 protected: 153 int compareItems ( DocPosition *dp1, DocPosition *dp2 ); 154 155 private: 156 QDomElement xmlTextElement( QDomDocument&, const QString& , const QString& ); 157 }; 158 159 typedef QListIterator<DocPositionBase*> DocPositionListIterator; 160 161 typedef QPointer<DocPositionBase> DocPositionGuardedPtr; 162 #endif 163