InvoiceDao.sql.stg

56 lines | 1.641 kB Blame History Raw Download
group InvoiceDao;

getInvoicesByAccount() ::= <<
  SELECT id, account_id, invoice_date, target_date, currency, amount_paid, last_payment_attempt
  FROM invoices
  WHERE account_id = :accountId
  ORDER BY invoice_date ASC;
>>

getInvoicesBySubscription() ::= <<
  SELECT i.id, i.account_id, i.invoice_date, i.target_date, i.currency, i.amount_paid, i.last_payment_attempt
  FROM invoices i
  INNER JOIN invoice_items ii ON i.id = ii.invoice_id
  WHERE ii.subscription_id = :subscriptionId;
>>

getInvoicesForPayment() ::= <<
  SELECT i.id
  FROM invoices i
  INNER JOIN invoice_items ii ON i.id = ii.invoice_id
  WHERE DATEDIFF(:targetDate, i.last_payment_attempt) >= :numberOfDays OR (i.last_payment_attempt IS NULL)
  GROUP BY i.id, i.amount_paid
  HAVING SUM(ii.amount) > (i.amount_paid);
>>

getById() ::= <<
  SELECT id, account_id, invoice_date, target_date, currency, amount_paid, last_payment_attempt
  FROM invoices
  WHERE id = :id;
>>

save() ::= <<
  INSERT INTO invoices(id, account_id, invoice_date, target_date, currency, amount_paid, last_payment_attempt)
  VALUES (:id, :accountId, :invoiceDate, :targetDate, :currency, :amountPaid, :lastPaymentAttempt)
  ON DUPLICATE KEY UPDATE
    invoice_date = :invoiceDate, target_date = :targetDate, currency = :currency,
    amount_paid = :amountPaid, last_payment_attempt = :lastPaymentAttempt;
>>

notifySuccessfulPayment() ::= <<
  UPDATE invoices
  SET amount_paid = amount_paid + :paymentAmount, last_payment_attempt = :paymentDate
  WHERE id = :id;
>>

notifyFailedPayment() ::= <<
  UPDATE invoices
  SET last_payment_attempt = :paymentAttemptDate
  WHERE id = :id;
>>

test() ::= <<
  SELECT 1
  FROM invoices;
>>
;