1 | #!/usr/bin/php |
---|
2 | <?php |
---|
3 | // MultiMag v0.1 - Complex sales system |
---|
4 | // |
---|
5 | // Copyright (C) 2005-2010, BlackLight, TND Team, http://tndproject.org |
---|
6 | // |
---|
7 | // This program is free software: you can redistribute it and/or modify |
---|
8 | // it under the terms of the GNU Affero General Public License as |
---|
9 | // published by the Free Software Foundation, either version 3 of the |
---|
10 | // License, or (at your option) any later version. |
---|
11 | // |
---|
12 | // This program is distributed in the hope that it will be useful, |
---|
13 | // but WITHOUT ANY WARRANTY; without even the implied warranty of |
---|
14 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
---|
15 | // GNU Affero General Public License for more details. |
---|
16 | // |
---|
17 | // You should have received a copy of the GNU Affero General Public License |
---|
18 | // along with this program. If not, see <http://www.gnu.org/licenses/>. |
---|
19 | // |
---|
20 | |
---|
21 | $c=explode('/',__FILE__);$base_path=''; |
---|
22 | for($i=0;$i<(count($c)-2);$i++) $base_path.=$c[$i].'/'; |
---|
23 | include_once("$base_path/config_cli.php"); |
---|
24 | |
---|
25 | include_once($CONFIG['site']['location']."/include/doc.core.php"); |
---|
26 | include_once($CONFIG['site']['location']."/include/doc.nulltype.php"); |
---|
27 | include_once($CONFIG['site']['location']."/include/doc.postuplenie.php"); |
---|
28 | include_once($CONFIG['site']['location']."/include/doc.realizaciya.php"); |
---|
29 | include_once($CONFIG['site']['location']."/include/doc.zayavka.php"); |
---|
30 | include_once($CONFIG['site']['location']."/include/doc.rbank.php"); |
---|
31 | include_once($CONFIG['site']['location']."/include/doc.pbank.php"); |
---|
32 | include_once($CONFIG['site']['location']."/include/doc.rko.php"); |
---|
33 | include_once($CONFIG['site']['location']."/include/doc.pko.php"); |
---|
34 | include_once($CONFIG['site']['location']."/include/doc.peremeshenie.php"); |
---|
35 | include_once($CONFIG['site']['location']."/include/doc.perkas.php"); |
---|
36 | |
---|
37 | |
---|
38 | $mail->FromName = $CONFIG['site']['name'].' - Site Service System'; |
---|
39 | $mail->CharSet = "UTF-8"; |
---|
40 | $mail->AddAddress('all@'.$CONFIG['site']['name'], 'all@'.$CONFIG['site']['name'] ); |
---|
41 | $mail->Subject="DB Check report"; |
---|
42 | |
---|
43 | $mail_text=''; |
---|
44 | |
---|
45 | |
---|
46 | $tim=time(); |
---|
47 | $dtim=time()-60*60*24*365; |
---|
48 | |
---|
49 | mysql_query("REPAIR TABLE `doc_agent`"); |
---|
50 | mysql_query("REPAIR TABLE `doc_base`"); |
---|
51 | mysql_query("REPAIR TABLE `doc_list`"); |
---|
52 | mysql_query("REPAIR TABLE `doc_list_pos`"); |
---|
53 | |
---|
54 | echo"Сброс остатков\n"; |
---|
55 | $res=mysql_query("SELECT `doc_base`.`id`, (SELECT SUM(`doc_list_pos`.`cnt`) FROM `doc_list_pos` |
---|
56 | INNER JOIN `doc_list` ON `doc_list`.`type`='12' AND `doc_list`.`ok`>'0' AND `doc_list`.`id`!='$doc' |
---|
57 | AND `doc_list`.`id`=`doc_list_pos`.`doc` AND `doc_list`.`id` NOT IN (SELECT DISTINCT `p_doc` FROM `doc_list` WHERE `ok` != '0' AND `type`='1' ) |
---|
58 | WHERE `doc_list_pos`.`tovar`=`doc_base`.`id` GROUP BY `doc_list_pos`.`tovar`) FROM `doc_base`"); |
---|
59 | while($nxt=mysql_fetch_row($res)) |
---|
60 | { |
---|
61 | mysql_query("UPDATE `doc_list_pos` SET `tranzit`='$nxt[1]' WHERE `id`='$nxt[0]'"); |
---|
62 | } |
---|
63 | |
---|
64 | |
---|
65 | |
---|
66 | |
---|
67 | |
---|
68 | // ============== Расчет ликвидности =================================================== |
---|
69 | echo"Расчет ликвидности..."; |
---|
70 | $res=mysql_query("SELECT `doc_list_pos`.`tovar`,(SUM(`doc_list_pos`.`tovar`)/`doc_list_pos`.`tovar`) AS `aa` |
---|
71 | FROM `doc_list_pos`, `doc_list` |
---|
72 | WHERE `doc_list_pos`.`doc`= `doc_list`.`id` AND `doc_list`.`type`>'1' AND `doc_list`.`date`>'$dtim' |
---|
73 | GROUP BY `doc_list_pos`.`tovar` |
---|
74 | ORDER BY `aa` DESC"); |
---|
75 | $nxt=mysql_fetch_row($res); |
---|
76 | $max=$nxt[1]/100; |
---|
77 | //echo"$max\n"; |
---|
78 | |
---|
79 | $rs=mysql_query("UPDATE `doc_base` SET `likvid`='0'"); |
---|
80 | $res=mysql_query("SELECT `doc_list_pos`.`tovar`,(SUM(`doc_list_pos`.`tovar`)/`doc_list_pos`.`tovar`) |
---|
81 | FROM `doc_list_pos`, `doc_list` |
---|
82 | WHERE `doc_list_pos`.`doc`= `doc_list`.`id` AND `doc_list`.`type`>'1' AND `doc_list`.`date`>'$dtim' |
---|
83 | GROUP BY `doc_list_pos`.`tovar`"); |
---|
84 | while($nxt=mysql_fetch_row($res)) |
---|
85 | { |
---|
86 | $l=$nxt[1]/$max; |
---|
87 | //if($l>100) $l=100; |
---|
88 | $rs=mysql_query("UPDATE `doc_base` SET `likvid`='$l' WHERE `id`='$nxt[0]'"); |
---|
89 | $ar=mysql_affected_rows(); |
---|
90 | //echo"$nxt[0] - $nxt[1] - $l - $ar\n"; |
---|
91 | } |
---|
92 | echo" готово!\n"; |
---|
93 | global $badpos; |
---|
94 | |
---|
95 | |
---|
96 | function seek_and_up($date,$pos) |
---|
97 | { |
---|
98 | $res=mysql_query("SELECT `doc_list`.`id`, `doc_list`.`date` FROM `doc_list` |
---|
99 | INNER JOIN `doc_list_pos` ON `doc_list_pos`.`tovar`='$pos' AND `doc_list_pos`.`doc`=`doc_list`.`id` |
---|
100 | WHERE `doc_list`.`date`>'$date' AND `doc_list`.`type`='1'"); |
---|
101 | @$doc=mysql_result($res,0,0); |
---|
102 | @$dt=mysql_result($res,0,1); |
---|
103 | |
---|
104 | if($doc) |
---|
105 | { |
---|
106 | $dtn=$date-60; |
---|
107 | mysql_query("UPDATE `doc_list` SET `date`='$dtn' WHERE `id`='$doc'"); |
---|
108 | } |
---|
109 | else return "Не найдено!"; |
---|
110 | return $doc." ".date("d.m.Y H:i:s",$dt); |
---|
111 | } |
---|
112 | |
---|
113 | |
---|
114 | // ================================ Перепроводка документов с коррекцией сумм ============================ |
---|
115 | echo"Перепроводка документов..."; |
---|
116 | $i=0; |
---|
117 | $res=mysql_query("UPDATE `doc_kassa` SET `ballance`='0'"); |
---|
118 | $res=mysql_query("UPDATE `doc_base_cnt` SET `cnt`='0'"); |
---|
119 | $res=mysql_query("SELECT `id`, `type`, `altnum`, `date` FROM `doc_list` WHERE `ok`>'0' AND `type`!='3' AND `mark_del`='0' ORDER BY `date`"); |
---|
120 | while($nxt=mysql_fetch_row($res)) |
---|
121 | { |
---|
122 | //if( ($nxt[1]>2) && ($nxt[1]!=8) && ($nxt[1]!=4) && ($nxt[1]!=5) ) continue; |
---|
123 | //DocSumUpdate($nxt[0]); |
---|
124 | $dt=date("d.m.Y H:i:s",$nxt[3]); |
---|
125 | $typename=$doc_types[$nxt[1]]."N $nxt[2] от $dt";; |
---|
126 | $document=AutoDocumentType($nxt[1],$nxt[0]); |
---|
127 | if($err=$document->Apply($nxt[0],1)) |
---|
128 | { |
---|
129 | $text="$nxt[0]($typename): Списание в минус! ($err) ЭТО КРИТИЧЕСКАЯ ОШИБКА! ОСТАТКИ НА СКЛАДЕ НЕВЕРНЫ!\n"; |
---|
130 | echo $text; |
---|
131 | $mail_text.=$text; |
---|
132 | //echo " ---------- ".seek_and_up($nxt[3],$badpos)."\n"; |
---|
133 | |
---|
134 | $i++; |
---|
135 | } |
---|
136 | |
---|
137 | //else echo "$nxt[0]($typename): ok!\n"; |
---|
138 | } |
---|
139 | if($i) |
---|
140 | { |
---|
141 | $text="-----------------------\nИтого: $i документов в минус!\n"; |
---|
142 | echo $text; |
---|
143 | $mail_text.=$text; |
---|
144 | } |
---|
145 | else echo"Ошибки последовательности документов не найдены!\n"; |
---|
146 | echo "Удаление помеченных на удаление...\n"; |
---|
147 | // ============================= Удаление помеченных на удаление ========================================= |
---|
148 | $tim_minus=time()-60*60*24*7; |
---|
149 | $res=mysql_query("SELECT `id`, `type` FROM `doc_list` WHERE `mark_del`<'$tim_minus' AND `mark_del`>'0'"); |
---|
150 | while($nxt=mysql_fetch_row($res)) |
---|
151 | { |
---|
152 | $document=AutoDocumentType($nxt[1], $nxt[0]); |
---|
153 | if($document->DelExec($nxt[0],1)) |
---|
154 | { |
---|
155 | $text="$nxt[1] ID:$nxt[0], попытка удаления документа, имеющего не удалённые подчинённые документы!\n"; |
---|
156 | echo $text; |
---|
157 | $mail_text.=$text; |
---|
158 | } |
---|
159 | else |
---|
160 | { |
---|
161 | $text="$nxt[1] ID:$nxt[0] удалён!\n"; |
---|
162 | echo $text; |
---|
163 | $mail_text.=$text; |
---|
164 | } |
---|
165 | } |
---|
166 | |
---|
167 | $res=mysql_query("SELECT `doc_list_pos`.`tovar`, `doc_list`.`id`, `doc_agent`.`name`, `doc_list_pos`.`id`, `doc_base`.`name` FROM `doc_list_pos` |
---|
168 | INNER JOIN `doc_list` ON `doc_list`.`id`=`doc_list_pos`.`doc` AND `doc_list`.`type`='1' AND `doc_list`.`ok`>'0' |
---|
169 | LEFT JOIN `doc_base` ON `doc_base`.`id`=`doc_list_pos`.`tovar` |
---|
170 | LEFT JOIN `doc_agent` ON `doc_agent`.`id`=`doc_list`.`agent` |
---|
171 | WHERE `doc_list_pos`.`cost`<='0' "); |
---|
172 | while($nxt=mysql_fetch_row($res)) |
---|
173 | { |
---|
174 | $text="Поступление ID:$nxt[1], товар $nxt[0]($nxt[4]) - нулевая цена! Агент $nxt[2]\n"; |
---|
175 | echo $text; |
---|
176 | $mail_text.=$text; |
---|
177 | |
---|
178 | } |
---|
179 | |
---|
180 | |
---|
181 | |
---|
182 | |
---|
183 | |
---|
184 | |
---|
185 | // if($mail->Send()) |
---|
186 | |
---|
187 | if($mail_text) |
---|
188 | { |
---|
189 | $mail_text="При автоматической проверке базы данных сайта найдены следующие проблемы:\n****\n\n".$mail_text."\n\n**** |
---|
190 | Необходимо срочно исправить найденные ошибки!"; |
---|
191 | |
---|
192 | $mail->Body=$mail_text; |
---|
193 | if($mail->Send()) |
---|
194 | echo "Почта отправлена!"; |
---|
195 | else echo"ошибка почты!".$mail->ErrorInfo; |
---|
196 | } |
---|
197 | |
---|
198 | |
---|
199 | ?> |
---|