Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.01.2024, 17:54   #1
rownong
Форумчанин
 
Регистрация: 06.11.2012
Сообщений: 105
По умолчанию Создать PHP скрипт или сделать SQL запрос для вычисления цикла сделки (в днях)?

Здравствуйте.

Для продажи товаров на маркетплейсе нужно рассчитать для заказов цикла сделки (в днях).
Началом сделки считаю день закупки товара для заказа, окончанием перечислением денег за заказ на расчётный счет от маркетплейса.

Вопрос 1. Подскажите нужно ли для этого создавать PHP скрипт (т.к. стек на PHP) или можно решить задачу только SQL запросом?

Вопрос 2. При расчете как учитывать "вторник, четверг, выходной, праздничный"?
Надо ли для этого создавать отдельную таблицу в БД с перечислением всех эти дней в году (чтобы их учитывал скрипт /sql запрос)?

Условия:
1. Выплаты производятся в дни месяца 4, 12, 20, 28.
2. Если товары выкуплены до даты выплаты, то деньги будут перечислен в ближайшую дату выплаты.
3. Если заказ перешёл в статус «Доставлен» за 1 день до выплаты, то выплата перенесётся уже на следующий раз. К примеру, заказ был доставлен покупателю 3-го числа, выплата за него будет не 4-го, а уже 12-го
4. Если дата выплаты выпадает на вторник, четверг, выходной, праздничный, то переносится на следующий за ним рабочий день.

Таблицы:
- "4_1_orders_yandex_market" (Заказы)
> order_number (Номер Заказа)

- "4_3_status_yandex_market" (Статусы)
> "number_order_yandex_market" (Номер Заказа)
> "status" (Статус)
> "data_time" (Дата-время наступления статуса)

- "11_2_shipments_yandex_market" (Отгрузки)
> "number_shipment" (№ Отгрузки)
> "start_plan_interval_shipments" (дата Отгрузки)

- "11_3_orders_yandex_market_from_shi pments" (Заказы из Отгрузок)
> "number_shipment" (№ Отгрузки)
> "number_order_yandex_market" (Номер заказа)

SQL запрос:
1. Выбрать из таблицы "4_1_orders_yandex_market" Заказы
для которых в таблице "4_3_status_yandex_market" отсутствует статус="CANCELLED"
и присутствует статус="DELIVERED"

2. Вывести столбцы

- Номер заказа

- Дата закупки товара
* В таблице "11_3_orders_yandex_market_from_shi pments" найти (Отгрузки Яндекс.Маркет) Заказ и в таблице "11_2_shipments_yandex_market" (Отгрузки Яндекс.Маркет) для него проверить поле start_plan_interval_shipments (дата Отгрузки), из этой даты вычесть 1 день.

- Дата вручения
* В таблице "4_3_status_yandex_market" (Статусы) статус "status" (Статус)= "DELIVERED", поле "data_time".

- Дата выплаты плановая.
* Ближайшая дата выплаты относительно "Дата вручения"

- Дата выплаты итоговая
* Ближайшая дата выплаты с соблюдением всех условий из раздела " Условия".

- Цикл сделки (дн)
(Дата выплаты итоговая) – (Дата закупки товара)
Цитата:
Примеры.
Пример 1. Обычный.
- Дата закупка товара: 01.12.2023
- Дата вручения товара: 02.12.2023
- Условия:
"1.", "2." => ближайшая дата выплаты 04.12.2023
"3." => выкуплен раньше, чем 1 день до 04.12.2023
"4." => дата выплаты (04.12.2023) НЕ вторник, четверг, выходной/праздничный день
- Дата выплаты итоговая: 04.12.2023
- Цикл сделки: (04.12.2023) – (01.12.2023) = 3дн

Пример 2. День выплаты вторник.
- Дата закупка товара: 01.12.2023
- Дата вручения товара: 11.12.2023
- Условия:
"1.", "2." => ближайшая дата выплаты 12.12.2023
"3." => выкуплен за 1 день до 12.12.2023 => перенос на 20.12.2023
"4." => дата выплаты (20.12.2023) НЕ вторник, четверг, выходной/праздничный день
- Дата выплаты итоговая: 20.12.2023
- Цикл сделки: (20.12.2023) – (01.12.2023) = 19дн

Пример 3. День выплаты выходной.
- Дата закупка товара: 01.11.2023
- Дата вручения товара: 02.11.2023
- Условия:
"1.", "2." => ближайшая дата выплаты 04.11.2023 (суббота) переносится на рабочий день 06.11.2023 (понедельник)
"3." => выкуплен раньше, чем 1 день до 04.14.2023
"4." => дата выплаты 06.11.2023 (понедельник), праздничный день, переносится на рабочий день => 07.11.2023 (вторник), по вторникам не выплачивают, переносится на 08.11.2023 (среду)

Последний раз редактировалось rownong; 02.01.2024 в 18:02.
rownong вне форума Ответить с цитированием
Старый 03.01.2024, 11:18   #2
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию

Начну со 2-го вопроса, да нужна таблица праздничных дней на год... никакими средствами php, sql этого не узнать, в том числе лучше и выходных, так как бывают всякие переносы, объединения выходных итд... все это решается постановление правительства ежегодно. То что вторник/четверг - это можно определять посредством SQL

по 1-му, скорее всего можно сделать на чистом SQL запросе... сильно не вникал, но препятствий не вижу
ADSoft вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создать абстрактный класс (кривые) для вычисления координаты для некоторой x. Создать производные классы: прямая, эллипс, гипербола со своими функциями вычисления y в зависимости от входного Apels1nka Помощь студентам 0 30.04.2022 12:30
Оператор цикла для вычисления суммы ряда emalf Visual C++ 4 11.05.2017 11:09
Операторы цикла для вычисления функции Юлия2013 Помощь студентам 5 15.04.2013 14:26
С использованием цикла для вычисления суммы ряда решить уравнение ben74 Помощь студентам 0 15.03.2012 10:00
Решить уравнение с использованием цикла для вычисления суммы ряда ben74 Помощь студентам 1 05.02.2012 12:48