1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim:set ts=2 sw=2 sts=2 et cindent tw=79 ft=cpp: */
4 * Copyright (C) 2007 Sergey Yanovich <ynvich@gmail.com>
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License as
8 * published by the Free Software Foundation; either version 2 of the
9 * License, or (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * General Public License for more details.
16 * You should have received a copy of the GNU General Public
17 * License along with this program; if not, write to the
18 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19 * Boston, MA 02111-1307, USA.
22 #include "xpcom-config.h"
25 #include "nsComponentManagerUtils.h"
27 #include "nsStringAPI.h"
30 #include "mozIStorageConnection.h"
32 /* Project includes */
33 #include "nsStringUtils.h"
35 #include "aaIBalance.h"
36 #include "aaIFilter.h"
37 #include "aaIStateFilter.h"
38 #include "aaBaseLoaders.h"
39 #include "aaAccountLoaders.h"
40 #include "aaStorageUtils.h"
41 #include "aaTranscript.h"
43 aaTranscript::aaTranscript(nsISupports
*aOuter
)
45 nsCOMPtr
<mozIStorageConnection
> connection
= do_QueryInterface(aOuter
);
47 mOpeningBalance
= do_CreateInstance(AA_LOADBALANCE_CONTRACT_ID
, connection
);
48 mOpeningIncome
= do_CreateInstance(AA_LOADINCOME_CONTRACT_ID
, connection
);
49 mOpening
= mOpeningBalance
;
53 mClosingBalance
= do_CreateInstance(AA_LOADBALANCE_CONTRACT_ID
, connection
);
54 mClosingIncome
= do_CreateInstance(AA_LOADINCOME_CONTRACT_ID
, connection
);
55 mClosing
= mClosingBalance
;
59 mOpeningFilter
= do_CreateInstance(AA_STATEFILTER_CONTRACT_ID
);
63 mClosingFilter
= do_CreateInstance(AA_STATEFILTER_CONTRACT_ID
);
67 mList
= do_CreateInstance(AA_LOADFACTLIST_CONTRACT_ID
, connection
);
71 mConnection
= connection
;
74 aaTranscript::~aaTranscript()
78 NS_IMPL_ISUPPORTS4(aaTranscript
,
88 NS_ENSURE_TRUE(mFlow
, NS_ERROR_NOT_INITIALIZED
);
90 if (mFlow
->PickId()) {
91 mOpening
= mOpeningBalance
;
92 mClosing
= mClosingBalance
;
94 mOpening
= mOpeningIncome
;
95 mClosing
= mClosingIncome
;
97 mOpeningFilter
->SetFlow( mFlow
);
98 mOpeningFilter
->SetDate( mStart
);
99 mOpening
->SetFilter( mOpeningFilter
);
101 mClosingFilter
->SetFlow( mFlow
);
102 mClosingFilter
->SetDate( mEnd
);
103 mClosing
->SetFilter( mClosingFilter
);
106 rv
= mOpening
->Load();
107 NS_ENSURE_SUCCESS(rv
, rv
);
109 rv
= mClosing
->Load();
110 NS_ENSURE_SUCCESS(rv
, rv
);
112 mList
->SetFilter(this);
114 mList
->SetFilter(nsnull
);
115 NS_ENSURE_SUCCESS(rv
, rv
);
122 aaTranscript::GetFilter(aaIFilter
* * aFilter
)
124 return NS_ERROR_NOT_IMPLEMENTED
;
127 aaTranscript::SetFilter(aaIFilter
* aFilter
)
129 return NS_ERROR_NOT_IMPLEMENTED
;
132 aaTranscript::PickFilter()
139 aaTranscript::GetFlow(aaIFlow
* *aFlow
)
141 NS_ENSURE_ARG_POINTER(aFlow
);
142 NS_IF_ADDREF(*aFlow
= mFlow
);
146 aaTranscript::SetFlow(aaIFlow
* aFlow
)
152 aaTranscript::PickLoadedFlow()
158 aaTranscript::GetStart(PRTime
*aStart
)
160 NS_ENSURE_ARG_POINTER(aStart
);
165 aaTranscript::SetStart(PRTime aStart
)
172 aaTranscript::GetEnd(PRTime
*aEnd
)
174 NS_ENSURE_ARG_POINTER(aEnd
);
179 aaTranscript::SetEnd(PRTime aEnd
)
186 aaTranscript::GetOpening(aaIBalance
* *aOpen
)
189 NS_ENSURE_ARG_POINTER(aOpen
);
190 NS_ENSURE_TRUE(mOpening
, NS_ERROR_UNEXPECTED
);
193 rv
= mOpening
->GetLength(&count
);
194 NS_ENSURE_SUCCESS(rv
, rv
);
196 return mOpening
->QueryElementAt(0, NS_GET_IID(aaIBalance
), (void **) aOpen
);
204 aaTranscript::GetClosing(aaIBalance
* *aClose
)
207 NS_ENSURE_ARG_POINTER(aClose
);
208 NS_ENSURE_TRUE(mClosing
, NS_ERROR_UNEXPECTED
);
211 rv
= mClosing
->GetLength(&count
);
212 NS_ENSURE_SUCCESS(rv
, rv
);
214 return mClosing
->QueryElementAt(0, NS_GET_IID(aaIBalance
), (void **) aClose
);
223 aaTranscript::GetExpression(nsACString
& aExpression
)
225 NS_ENSURE_TRUE(mFlow
, NS_ERROR_NOT_INITIALIZED
);
227 if (mFlow
->PickId()) {
228 aExpression
.Assign(" WHERE txn.day>");
229 AppendInt(aExpression
, aa_julian_day(mOpeningFilter
->PickDate()));
230 aExpression
.Append(" AND txn.day<=");
231 AppendInt(aExpression
, aa_julian_day(mClosingFilter
->PickDate()));
232 aExpression
.Append(" AND (toF.flow_id=");
233 AppendInt(aExpression
, mOpeningFilter
->PickFlow()->PickId());
234 aExpression
.Append(" OR fromF.flow_id=");
235 AppendInt(aExpression
, mOpeningFilter
->PickFlow()->PickId());
236 aExpression
.Append(")");
238 aExpression
.Assign(" WHERE txn.day>");
239 AppendInt(aExpression
, aa_julian_day(mOpeningFilter
->PickDate()));
240 aExpression
.Append(" AND txn.day<=");
241 AppendInt(aExpression
, aa_julian_day(mClosingFilter
->PickDate()));
242 aExpression
.Append(" AND txn.status=1");