Перейти к содержимому


Массовое редактирование


Сообщений в теме: 42

#1 Dinara

    Активный участник

  • Пользователи
  • PipPipPip
  • 527 сообщений
  • Пол:Женщина
  • Город:Уфа

Отправлено 20 Август 2013 - 09:14

Добрый день!
Скажите как можно прописать вычисление при массовом редактировании в следующем случае:
- Если меняется поле "Сотрудник" (пользователь) при массовом редактировании и соответствует прописанным условиям-выполнять массовое редактирование у тех карточек, которые соответствуют условиям. Если же какая-то карточка не соответствует прописанным условиям-выводить сообщение с названием этих карточек.

Если меняем просто сотрудника в карточке (без массового редактирования) то эти правила не должны учитываться

#2 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 20 Август 2013 - 09:33

Вычислений отдельно для массового редактирования не существует. При массовом редактировании запускаются стандартные вычисления на изменения полей.

#3 Dinara

    Активный участник

  • Пользователи
  • PipPipPip
  • 527 сообщений
  • Пол:Женщина
  • Город:Уфа

Отправлено 20 Август 2013 - 11:35

if (($line['Оплачено до']<curdate()) and ($line['Дата последнего комментария']=curdate() - interval 3 month))
$line['Сотрудник']=$line['Менеджер'];
Можете подсказать где ошибка?)
syntax error, unexpected T_LNUMBER

#4 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 20 Август 2013 - 12:04

Конструкция "curdate() - interval 3 month" применяется в SQL, а не в PHP. Не сводите с ума компилятор)

if (($line['Оплачено до'] < date("Y-m-d 00:00:00")) and ($line['Дата последнего комментария'] == date("Y-m-d 00:00:00", mktime(0,0,0,date("n")-3,date("j"),date("Y")))))


#5 Dinara

    Активный участник

  • Пользователи
  • PipPipPip
  • 527 сообщений
  • Пол:Женщина
  • Город:Уфа

Отправлено 20 Август 2013 - 20:35

Порадовало последнее предложение))
Только что-то не работает у меня((
Даты,которые учитываются в вычислении поставила даже 2012 года http://take.ms/agTHV
Меняю менеджера, а поле сотрудник меняться не хочет >.<
if (($line['Оплачено до'] < date("Y-m-d 00:00:00")) and ($line['Дата последнего комментария'] == date("Y-m-d 00:00:00", mktime(0,0,0,date("n")-3,date("j"),date("Y")))))
$line['Сотрудник']=$line['Менеджер'];
это же вряд ли связано с тем, кто в коде указано время,а тут у меня нет его нигде?
Причем не срабатывает второе условие, я первое переделала как
if (($line['Оплачено до']) < (date ("Y-m-d")) )
Так работает, пытаюсь проверить второе условие-уже не выполняется

Сообщение отредактировал Dinara: 21 Август 2013 - 07:21


#6 Dinara

    Активный участник

  • Пользователи
  • PipPipPip
  • 527 сообщений
  • Пол:Женщина
  • Город:Уфа

Отправлено 21 Август 2013 - 07:37

if (($line['Дата последнего комментария']) == (date("Y-m-d", mktime(0,0,0,date("m")-3,date("d"),date("Y")))))
$line['Сотрудник']=$line['Менеджер'];
Убрала время из даты и поменяла символы, потому что у меня же вроде используются даты с нулями..и все равно..(

#7 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 21 Август 2013 - 09:32

Цитата

Меняю менеджера, а поле сотрудник меняться не хочет

Может дело не условии? Попробуйте убрать условие вообще и изменить Менеджера, поменяется ли Сотрудник?

Само условие вроде верно составлено. Время пишется по той причине, что именно так в БД хранится дата без времени. Поэтому убирать и заменять ничего не надо.

#8 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 21 Август 2013 - 09:36

Цитата

Даты,которые учитываются в вычислении поставила даже 2012 года http://take.ms/agTHV

Так у вас в условии "Дата последнего комментария" должна быть равна текущей дате минус 3 месяца, т.е. для сегодня это должно быть 21 мая 2013, для вчера - 20 мая. А на картинке - 16.08.2012.

#9 Dinara

    Активный участник

  • Пользователи
  • PipPipPip
  • 527 сообщений
  • Пол:Женщина
  • Город:Уфа

Отправлено 21 Август 2013 - 09:42

фуух,<= должно было быть))
Благодарю)) Буду допиливать))

#10 Dinara

    Активный участник

  • Пользователи
  • PipPipPip
  • 527 сообщений
  • Пол:Женщина
  • Город:Уфа

Отправлено 21 Август 2013 - 09:46

Кстати,прописала условие <=, а 21 мая если стоит-не выполняется условие, или он как-то по-другому считает?

#11 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 21 Август 2013 - 09:50

Условие то какое, ваше измененное, или мое оригинальное? С моим должно работать все, с вашим (там где "Y-m-d") - нет. Посмотрите выше что я написал насчет времени.

#12 Dinara

    Активный участник

  • Пользователи
  • PipPipPip
  • 527 сообщений
  • Пол:Женщина
  • Город:Уфа

Отправлено 21 Август 2013 - 09:57

Просмотр сообщенияCbCoder (21 Август 2013 - 09:50) писал:

Условие то какое, ваше измененное, или мое оригинальное? С моим должно работать все, с вашим (там где "Y-m-d") - нет. Посмотрите выше что я написал насчет времени.
С моим корявым,конечно же)
Простите, упустила первый ответ..да,теперь все отлично работает))
А если нужно указать не просто 3 месяца,а например за 3 рабочих дня?

#13 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 21 Август 2013 - 09:59

Цитата

А если нужно указать не просто 3 месяца,а например за 3 рабочих дня?

Не совсем понял.

#14 Dinara

    Активный участник

  • Пользователи
  • PipPipPip
  • 527 сообщений
  • Пол:Женщина
  • Город:Уфа

Отправлено 21 Август 2013 - 10:04

ну вот мы обычно указываем например
date("d")-3
Что будет означать-за 3 дня.
А если у меня условие не просто за 3 дня, а именно за 3 рабочих дня, без учета выходных?

Сообщение отредактировал Dinara: 21 Август 2013 - 10:04


#15 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 21 Август 2013 - 10:23

Это так просто не задашь в одной формуле. Нужен специальный алгоритм прохода по дням и проверки каждого из дней на день недели. День недели смотрится по date("w"): 6 -суббота, 0 - воскресенье.

#16 Dinara

    Активный участник

  • Пользователи
  • PipPipPip
  • 527 сообщений
  • Пол:Женщина
  • Город:Уфа

Отправлено 21 Август 2013 - 13:07

Хм, получается нужно прописать
if (($line['Смена менеджера']=="Да")  and ( $line['Дата смены менеджера']) <= (date("Y-m-d", mktime(0,0,0,date("m"),date("d")-4,date("Y")))))
И еще что-то добавить, где проверяются рабочие дни?)

#17 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 21 Август 2013 - 13:13

Цитата

Это так просто не задашь в одной формуле

Описание алгоритма боюсь выходит за рамки бесплатной техподдержки (требуется время для написания).

#18 Dinara

    Активный участник

  • Пользователи
  • PipPipPip
  • 527 сообщений
  • Пол:Женщина
  • Город:Уфа

Отправлено 21 Август 2013 - 13:42

блин..то есть вообще нигде даже примеров не было как это сделать? По сути ведь нужная вещь для организаций,где учитываются только рабочие дни...
И еще вопрос, мне нужно,чтобы не учитывались карточки, где дата меньше 01.01.2006, будет ли корректно прописать следующим образом:
if (($line['Дата контакта'] )>= (date("01.01.2006")))

Сама дата контакта в системе прописывается Дата контакта : 18.07.2013 08:15

Сообщение отредактировал Dinara: 21 Август 2013 - 13:43


#19 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 21 Август 2013 - 14:18

Цитата

будет ли корректно прописать следующим образом:
if (($line['Дата контакта'] )>= (date("01.01.2006")))

Нет.

if ($line['Дата контакта'] >= "2006-01-01 00:00:00")


#20 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 21 Август 2013 - 14:37

Цитата

блин..то есть вообще нигде даже примеров не было как это сделать?

Можно попробовать в интернете поискать.

В принципе, подумал, в данном случае наверное есть более простой вариант, без проходов:

if (($line['Смена менеджера']=="Да") and (
	((date("w")==1 or date("w")==2 or date("w")==3) and $line['Дата смены менеджера'] <= date("Y-m-d", mktime(0,0,0,date("m"),date("d")-5,date("Y")))) or // если понедельник, вторник или среда - отнимаем 5 дней (2 вых. + 3 раб.)
	((date("w")==4 or date("w")==5) and $line['Дата смены менеджера'] <= date("Y-m-d", mktime(0,0,0,date("m"),date("d")-3,date("Y")))) // если четверг или пятница - отнимаем 3 дня
   ))






Количество пользователей, читающих эту тему: 2

0 пользователей, 2 гостей, 0 анонимных