[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [skrooge/Feature] /: feature: Merge of trackers by drag & drop
From:       Stephane Mankowski <stephane () mankowski ! fr>
Date:       2011-08-19 19:49:53
Message-ID: 20110819194953.097DFA6078 () git ! kde ! org
[Download RAW message or body]

Git commit eb4ae4a60474b2fbef367cf8c18fd570fba66cde by Stephane Mankowski.
Committed on 19/08/2011 at 21:49.
Pushed by smankowski into branch 'Feature'.

feature: Merge of trackers by drag & drop

M  +23   -3    skgbankgui/skgobjectmodel.cpp
M  +18   -0    skgbankmodeler/skgtrackerobject.cpp
M  +8    -0    skgbankmodeler/skgtrackerobject.h
M  +1    -0    CHANGELOG

http://commits.kde.org/skrooge/eb4ae4a60474b2fbef367cf8c18fd570fba66cde

diff --git a/CHANGELOG b/CHANGELOG
index 8525367..4e9ce28 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -2,6 +2,7 @@ skrooge (1.0.0)
   *Correction bug 280362: Skrooge is not accepting dots or commas
   *Correction: Better performances in check box of operation, account, tracker pages
   *New feature: Addition of "Once a week" for scheduled operations  
+  *New feature: Merge of trackers by drag & drop  
 
  -- maintainer Stephane MANKOWSKI <stephane@mankowski.fr>  xxx
  
diff --git a/skgbankgui/skgobjectmodel.cpp b/skgbankgui/skgobjectmodel.cpp
index 9ff4766..343779e 100644
--- a/skgbankgui/skgobjectmodel.cpp
+++ b/skgbankgui/skgobjectmodel.cpp
@@ -766,7 +766,7 @@ Qt::ItemFlags SKGObjectModel::flags(const QModelIndex & index) \
                const
         if(att == "t_bookmarked" || m_ruleTable || m_recurrentoperationTable) flags \
= flags & ~Qt::ItemIsEditable;  }
 
-    if(m_categoryTable || m_payeeTable || m_accountTable || m_unitTable) {
+    if(m_categoryTable || m_payeeTable || m_accountTable || m_unitTable || \
                m_trackerTable) {
         if(index.isValid()) flags |= Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled;
         else flags |= Qt::ItemIsDropEnabled;
     }
@@ -776,13 +776,13 @@ Qt::ItemFlags SKGObjectModel::flags(const QModelIndex & index) \
const  
 Qt::DropActions SKGObjectModel::supportedDragActions() const
 {
-    if(m_categoryTable || m_payeeTable || m_accountTable || m_unitTable) return \
Qt::MoveAction; +    if(m_categoryTable || m_payeeTable || m_accountTable || \
m_unitTable || m_trackerTable) return Qt::MoveAction;  return \
SKGObjectModelBase::supportedDragActions();  }
 
 Qt::DropActions SKGObjectModel::supportedDropActions() const
 {
-    if(m_categoryTable || m_payeeTable || m_accountTable || m_unitTable) return \
Qt::MoveAction; +    if(m_categoryTable || m_payeeTable || m_accountTable || \
m_unitTable || m_trackerTable) return Qt::MoveAction;  return \
SKGObjectModelBase::supportedDropActions();  }
 
@@ -796,6 +796,7 @@ bool SKGObjectModel::dropMimeData(const QMimeData * data,
     if(!data || !(data->hasFormat("application/skg.category.ids") ||
                   data->hasFormat("application/skg.payee.ids") ||
                   data->hasFormat("application/skg.account.ids") ||
+                  data->hasFormat("application/skg.refund.ids") ||
                   data->hasFormat("application/skg.unit.ids")
                  )) return false;
     if(column > 0) return false;
@@ -883,6 +884,25 @@ bool SKGObjectModel::dropMimeData(const QMimeData * data,
                 if(!err) err = parentUnit.merge(child);
             }
         }
+    } else if(data->hasFormat("application/skg.refund.ids")) {
+        QByteArray encodedData = data->data("application/skg.refund.ids");
+        QDataStream stream(&encodedData, QIODevice::ReadOnly);
+        QStringList newItems;
+
+        if(parent.isValid()) {
+            SKGBEGINTRANSACTION(*getDocument(), i18nc("Noun, name of the user \
action", "Merge trackers"), err); +            SKGTrackerObject trackerUnit = \
getObject(parent); +            while(!stream.atEnd() && !err) {
+                int o_id;
+                QString o_table;
+                stream >> o_table;
+                stream >> o_id;
+
+                SKGTrackerObject child(getDocument(), o_id);
+                err = child.load();
+                if(!err) err = trackerUnit.merge(child);
+            }
+        }
     }
     SKGMainPanel::displayErrorMessage(err);
     return !err;
diff --git a/skgbankmodeler/skgtrackerobject.cpp \
b/skgbankmodeler/skgtrackerobject.cpp index 588ba8c..df6a320 100644
--- a/skgbankmodeler/skgtrackerobject.cpp
+++ b/skgbankmodeler/skgtrackerobject.cpp
@@ -20,6 +20,7 @@
  * @author Stephane MANKOWSKI / Guillaume DE BURE
  */
 #include "skgtrackerobject.h"
+#include "skgsuboperationobject.h"
 #include "skgdocumentbank.h"
 #include "skgtraces.h"
 
@@ -115,4 +116,21 @@ double SKGTrackerObject::getCurrentAmount() const
     return SKGServices::stringToDouble(getAttribute("f_CURRENTAMOUNT"));
 }
 
+SKGError SKGTrackerObject::merge(const SKGTrackerObject& iTracker)
+{
+    SKGError err;
+
+    SKGObjectBase::SKGListSKGObjectBase ops;
+    if(!err) err = iTracker.getSubOperations(ops);
+    int nb = ops.count();
+    for(int i = 0; !err && i < nb; ++i) {
+        SKGSubOperationObject op = ops.at(i);
+        err = op.setTracker(*this);
+        if(!err) err = op.save(true, false);
+    }
+
+    if(!err) err = iTracker.remove();
+    return err;
+}
+
 #include "skgtrackerobject.moc"
diff --git a/skgbankmodeler/skgtrackerobject.h b/skgbankmodeler/skgtrackerobject.h
index 79d9748..7c2fef3 100644
--- a/skgbankmodeler/skgtrackerobject.h
+++ b/skgbankmodeler/skgtrackerobject.h
@@ -119,6 +119,14 @@ public:
      * @return the current amount
      */
     virtual double getCurrentAmount() const;
+
+    /**
+     * Merge iTracker in current tracker
+     * @param iTracker the tracker. All operations will be transferred into this \
tracker. The tracker will be removed +     * @return an object managing the error
+     *   @see SKGError
+     */
+    virtual SKGError merge(const SKGTrackerObject& iTracker);
 };
 /**
  * Declare the class


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic