152def invoiceToDict(invoice):
153
154 if invoice is None:
155 return None
156 else:
157 simple_invoice = {}
158 simple_invoice['id'] = invoice.GetID()
159 simple_invoice['type'] = invoice.GetType()
160 simple_invoice['date_opened'] = invoice.GetDateOpened().strftime(
161 '%Y-%m-%d')
162 if invoice.GetDatePosted().strftime('%Y-%m-%d') == '1970-01-01':
163 simple_invoice['date_posted'] = None
164 else:
165 simple_invoice['date_posted'] = invoice.GetDatePosted().strftime(
166 '%Y-%m-%d')
167 if not invoice.GetDateDue() or invoice.GetDateDue().strftime('%Y-%m-%d') == '1970-01-01':
168 simple_invoice['date_due'] = None
169 else:
170 simple_invoice['date_due'] = invoice.GetDateDue().strftime(
171 '%Y-%m-%d')
172 simple_invoice['notes'] = invoice.GetNotes()
173 simple_invoice['active'] = invoice.GetActive()
174 simple_invoice['currency'] = invoice.GetCurrency().get_mnemonic()
175 owner = invoice.GetOwner()
176 if type(owner) == gnucash.gnucash_business.Job:
177 owner = owner.GetOwner()
178 simple_invoice['owner'] = vendorToDict(owner)
179 simple_invoice['owner_type'] = invoice.GetOwnerType()
180 simple_invoice['billing_id'] = invoice.GetBillingID()
181 simple_invoice['to_charge_amount'] = invoice.GetToChargeAmount().to_double()
182 simple_invoice['posted_txn'] = transactionToDict(invoice.GetPostedTxn(), [])
183 simple_invoice['total'] = invoice.GetTotal().to_double()
184 simple_invoice['total_subtotal'] = invoice.GetTotalSubtotal(
185 ).to_double()
186 simple_invoice['total_tax'] = invoice.GetTotalTax().to_double()
187
188 simple_invoice['entries'] = []
189 for n, entry in enumerate(invoice.GetEntries()):
190 if type(entry) != Entry:
191 entry=Entry(instance=entry)
192 simple_invoice['entries'].append(entryToDict(entry))
193
194 simple_invoice['posted'] = invoice.IsPosted()
195 simple_invoice['paid'] = invoice.IsPaid()
196
197 return simple_invoice
198