PHP - Банк любит ежемесячные транзакции - PullRequest
0 голосов
/ 08 июня 2011

Я не уверен, какие условия поиска ввести.

Я создаю базовую систему, позволяющую агентам регистрировать уплаченную арендную плату. Я сделал это без проблем.

Следующим шагом является выполнение повторяющихся транзакций, когда наступает срок аренды, есть ли у них какие-либо учебные пособия или советы о том, как мне выполнить это умение?

Например:

Арендатор 1 должен платить арендную плату в размере £ 2 первого числа каждого месяца.

Арендатор 2 должен платить арендную плату в размере £ 1 каждые четыре недели.

Ответы [ 3 ]

1 голос
/ 08 июня 2011

В таблице у вас будет

T1:
Tenant_id | repeatable | next_due

А в другой таблице у вас будет

T2:
Tenant_id | Rent_date

Использование запроса типа:

SELECT 
  *
FROM
T1 JOIN
  (SELECT
    tenant_id, MAX(Rent_date) LastRent
  FROM
    T2
  GROUP BY 
    tenant_id
  ) MaxT2 on T1.tenant_id = MaxT2.tenant_id
WHERE
  MaxT2.LastRent + repeatable > T1.next_due

Когда вынайдите что-нибудь в этом SELECT, вставьте в T2 транзакцию для текущего курса и в T1 обновите next_due с Rent_date + repeatable

Поместите этот скрипт в файл и, используя cron - сделайте его запущенным ежедневно (желательно утром).

Это всего лишь быстрый ответ.Вам нужно будет позаботиться о повторяемом поле (например, для представления количества дней или недель или каждого 10-го числа месяца).

0 голосов
/ 08 июня 2011

Вы можете оставить четыре поля - payment_date, recurring_days_interval, owe, price для каждой записи о платеже.Затем в cronjob, который выполняется каждый день, вы проверяете, попал ли мы в интервал дней, и если да, то добавьте price к текущему owe.Как только человек оплатит весь или весь счет, вы уменьшите его с owe.

. Ежедневный запрос должен выглядеть примерно так:

UPDATE payments SET owe=COALESCE(owe, 0)+COALESCE(price, 0) WHERE recurring_days_interval IS NOT NULL AND DATE_ADD(payment_date, INTERVAL recurring_days_interval DAY) > NOW()

Если вы хотите остановить повторение, просто установите recurring_days_interval на NULL.

0 голосов
/ 08 июня 2011

Вы должны использовать crontabs для этой самой задачи,

# m h dom mon dow user  command
17 *    * * *   root    php /path/to/hourly.php
25 6    * * *   root    php daily.php
47 6    * * 7   root    php weekly.php
52 6    1 * *   root    php monthly.php

что-то вроде этого ...

...