This is not going to work.
Don't do that.

If you're trying to build something that will serialize out, use the
Posting's price.
Unfortunately you can't build a Posting that will output a total amount at
the moment, since that field gets converted on parsing.
You could always just use good old print()...




On Tue, Nov 9, 2021 at 9:56 AM Joost Brok <joostb...@gmail.com> wrote:

> Thanks for your reply! After fiddling around and looking at the docs it
> seemed only the currency arg is not validated and allows any string. Also
> number couldn't been set to None. So I'm now using a creative solution to
> put the base decimal amount in number (e.g. -139.99)and the rest of the
> string in currency (e.g. EUR @@ -119.04 GBP). It's a bit of a hack but
> works for now (using amount.Amount(D(local_amt), implicit_formatted).
>
> *Hacky solution:*
> def implicit_amount(self, base_amt, local_amt, local_cur):
> implicit_formatted = local_cur + " @@ " + str(D(base_amt)) + " " +
> self.currency
> return amount.Amount(D(base_amt), self.currency) if (base_amt,
> self.currency) == (local_amt, local_cur) else amount.Amount(D(local_amt),
> implicit_formatted)
>
> From the docs:
> beancount.core.amount.Amount.__new__(cls, number, currency)
> Args: number: A string or Decimal instance. *Will get converted
> automatically.* currency: A string, the currency symbol to use. """
>
> Any thoughts on making it less hacky and more in line with the api? :)
>
> Op dinsdag 9 november 2021 om 14:19:41 UTC+1 schreef bl...@furius.ca:
>
>> units has to be of type 'Amount()' when you create the posting.
>> It looks like you might have set it to a str.
>> (Python doesn't offer much help, there's a type validation
>> function somewhere in beancount.core.data.)
>>
>>
>> On Tue, Nov 9, 2021 at 8:05 AM Joost Brok <joos...@gmail.com> wrote:
>>
>>> Hello everyone, I'm really learning beancount and building my importers.
>>> We're an international family so the multi-currency support trough fava
>>> makes our life easier to keep track of expenses against our two base
>>> account currencies. After doing some research I found out I can simplify
>>> currency reporting quite a bit by adding implicit prices. One of our main
>>> banks exposes the following fields in their export csv: amount, currency,
>>> local amount, local currency. I;m trying to write an importer with explicit
>>> prices (e.g. Expenses:Foo 100 GBP @@ 110 EUR) however I'm having trouble
>>> using the data.Posting function to validate it.
>>>
>>> from my *importers/bank_name.py*:
>>> def implicit_amount(self, base_amount, local_amt, local_cur):
>>> implicit_formatted = "" + local_amt + local_cur + " @@ " + amount +
>>> self.currency # try to see if we hardcode the string...
>>> return amount.Amount(D(base_amount), self.currency) if (base_amount,
>>> self.currency) == (local_amt, local_cur) else implicit_formatted
>>> [....]
>>> amount = self.implicit_amount(row['Amount'], row['Local amount'],
>>> row['Local currency'])
>>> [....]
>>> postings = [data.Posting(self.account, amount, None, None, None, None),]
>>>
>>> *Gives..*
>>> ...r.py", line 31, in _process
>>>     if entry.postings[0].units.number > 0:
>>> AttributeError: 'str' object has no attribute 'number'
>>>
>>> How do I build an importer that supports implicit prices? I couldn't
>>> find any example/existing importers that support that and where I could
>>> re-use code from.
>>>
>>> Thanks a lot!
>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "Beancount" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to beancount+...@googlegroups.com.
>>> To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/beancount/d27098b1-c32a-4ea6-b2c2-0eb07ee2a710n%40googlegroups.com
>>> <https://groups.google.com/d/msgid/beancount/d27098b1-c32a-4ea6-b2c2-0eb07ee2a710n%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>> --
> You received this message because you are subscribed to the Google Groups
> "Beancount" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to beancount+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/beancount/46412d0c-cd1f-49b0-a2ed-2d8899e4709fn%40googlegroups.com
> <https://groups.google.com/d/msgid/beancount/46412d0c-cd1f-49b0-a2ed-2d8899e4709fn%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>

-- 
You received this message because you are subscribed to the Google Groups 
"Beancount" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beancount+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beancount/CAK21%2BhOohBpJ2qA67qRNDnXo-tCF3tYc016P%3Dih5y8dEAoOiMw%40mail.gmail.com.

Reply via email to