On the bright side, it rained!

I had big plans for today – I was going to get caught up on Quicken, wine bookkeeping, refill the wine refrigerator, and work on the High Holidays honors for Shir Hadash.

I got caught up on Quicken and put the wines we bought yesterday into CellarTracker, but the rest of the plans will have to wait.

I wrote a program a while ago to help me pick which wines to move into the wine refrigerator (based on how far along in the drinking window a wine is and how many bottles I have of it), but I noticed that the list showed the same wine in several places. I’d reworked the program a few months ago to take the inventory information I get from CellarTracker and put it into a simple sqlite3 database to figure out which bottles to move. It seemed to work well, but today I realized that CellarTracker returns the information in order of acquisition, so that if I bought the same wine a few times, it wouldn’t be consolidated.

It should be easy to consolidate the data in the database – all it would need is a few GROUP BY clauses in my query. I looked at the statement I was using to query the database:

select
  type,
  ready,
  whereitis,
  b.label,
  beginconsume,
  endconsume
from
  (
    select
      min(n, n * (now - bc) / (ec - bc)) as ready,
      label,
      beginconsume,
      endconsume
    from
      (
        select
          count(*) as n,
          julianday(beginconsume || '-01-01') as bc,
          julianday(date(endconsume || '-12-31')) as ec,
          beginconsume,
          endconsume,
          julianday('now') as now,
          vintage || ' ' || wine as label,
          type
        from
          wines
        group by
          label
      )
    order by
      ready
  ) r
  inner join (
    select
      type,
      vintage || ' ' || wine as label,
      location,
      location || ' ' || bin as whereitis
    from
      wines
  ) b on b.label = r.label
where
  ready > 0
order by
  ready desc;

and I realized that it would be a whole lot easier to rewrite the logic in simple Python than it would be to figure out how to fix the query.

So I did.

Doing the work in Python may mean that the program runs slower than doing it in the database – on the other hand, I only run the program once a month or so, and it only takes a couple of seconds when I do run it. And next time, I might be able to figure out what I’m doing!