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