Multimag  0.2.992
komplekt_zp.php
См. документацию.
1 <?php
2 
3 // MultiMag v0.2 - Complex sales system
4 //
5 // Copyright (C) 2005-2018, 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 
23 
24  function getName($short = 0) {
25  if ($short) {
26  return "По комплектующим с З/П";
27  } else {
28  return "Отчёт по комплектующим (с зарплатой)";
29  }
30  }
31 
32  function Form() {
33  global $tmpl, $db;
34  $tmpl->addContent("<h1>" . $this->getName() . "</h1>
35  <form action='' method='post'>
36  <input type='hidden' name='mode' value='komplekt_zp'>
37  <input type='hidden' name='opt' value='make'>
38  Группа товаров:<br>" .
39  selectGroupPos('group', 0, 1, '', '')
40  . "<button type='submit'>Создать отчет</button></form>");
41  }
42 
43  function MakeHTML() {
44  global $tmpl, $CONFIG, $db;
45  $tmpl->loadTemplate('print');
46  $group = rcvint('group');
47  $date = date('Y-m-d');
48  $sel = $group ? "AND `group`='$group'" : '';
49  // Получение id свойства зарплаты
50  $zres = $db->query("SELECT `id` FROM `doc_base_params` WHERE `codename`='ZP'");
51  if ($zres->num_rows == 0) {
52  throw new Exception("Данные о зарплате за сборку в базе не найдены. Необходим дополнительный параметр 'ZP'");
53  }
54  list($zp_id) = $zres->fetch_row();
55  switch (@$CONFIG['doc']['sklad_default_order']) {
56  case 'vc': $order = '`doc_base`.`vc`';
57  break;
58  case 'cost': $order = '`doc_base`.`cost`';
59  break;
60  default: $order = '`doc_base`.`name`';
61  }
62  $res = $db->query("SELECT `doc_base`.`id`, `doc_base`.`vc`, `doc_group`.`printname`, `doc_base`.`name`, `doc_base`.`proizv`,
63  `doc_base_values`.`value` AS `zp`
64  FROM `doc_base`
65  LEFT JOIN `doc_group` ON `doc_group`.`id`=`doc_base`.`group`
66  LEFT JOIN `doc_base_values` ON `doc_base_values`.`id`=`doc_base`.`id` AND `doc_base_values`.`param_id`='$zp_id'
67  WHERE 1 $sel
68  ORDER BY $order");
69  $tmpl->setContent("<h1>Отчёт по комплектующим с зарплатой для группы $group на $date</h1><table width='100%'>
70  <tr><th rowspan='2'>ID<th rowspan='2'>Код<br>произв.<th rowspan='2'>Наименование<th rowspan='2'>Зар. плата<th colspan='5'>Комплектующие<th rowspan='2'>Стоимость сборки<th rowspan='2'>Стоимость с зарплатой
71  <tr><th>Код<th>Наименование<th>Цена<th>Количество<th>Стоимость");
72  $zp_sum = $kompl_sum = $all_sum = 0;
73  while ($nxt = $res->fetch_assoc()) {
74  settype($nxt['zp'], 'double');
75  $cnt = $sum = 0;
76  $kompl_data1 = $kompl_data = '';
77  $rs = $db->query("SELECT `doc_base_kompl`.`kompl_id` AS `id`, `doc_base`.`name`, `doc_base`.`cost`, `doc_base_kompl`.`cnt`, `doc_base`.`vc`
78  FROM `doc_base_kompl`
79  LEFT JOIN `doc_base` ON `doc_base`.`id`=`doc_base_kompl`.`kompl_id`
80  WHERE `doc_base_kompl`.`pos_id`='{$nxt['id']}'");
81  while ($nx = $rs->fetch_row()) {
82  $cnt++;
83  $cost = sprintf("%0.2f", getInCost($nx[0], 0, 1));
84  $cc = $cost * $nx[3];
85  $sum+=$cc;
86  if (!$kompl_data1) {
87  $kompl_data1 = "<td>$nx[4]<td>$nx[1]<td>$cost<td>$nx[3]<td>$cc";
88  } else {
89  $kompl_data.="<tr><td>$nx[4]<td>$nx[1]<td>$cost<td>$nx[3]<td>$cc";
90  }
91  }
92  if(!$cnt) {
93  continue;
94  }
95  $sum = round($sum, 2);
96 
97  $span = ($cnt > 1) ? "rowspan='$cnt'" : '';
98  if (!$kompl_data1) {
99  $kompl_data1 = "<td><td><td><td><td>";
100  }
101  $zsum = round($nxt['zp'] + $sum, 2);
102 
103  $tmpl->addContent("<tr style='border-top: 2px solid #000'><td $span>{$nxt['id']}<td $span>{$nxt['vc']}<td $span>{$nxt['printname']} {$nxt['name']} / {$nxt['proizv']}<td $span>{$nxt['zp']} $kompl_data1<td $span>$sum<td $span>$zsum
104  $kompl_data");
105  $zp_sum+=$nxt['zp'];
106  $kompl_sum+=$sum;
107  $all_sum+=$zsum;
108  }
109  $tmpl->addContent("<tr><td colspan='3'><b>Итого:</b><td>$zp_sum<td colspan='5'><td>$kompl_sum<td>$all_sum</table>");
110  }
111 
112  function Run($opt) {
113  if ($opt == '') {
114  $this->Form();
115  } else {
116  $this->MakeHTML();
117  }
118  }
119 
120 }
$res
Definition: fixer.php:178
rcvint($varname, $def=0)
Безопасное получение целого значения
Definition: core.php:208
selectGroupPos($select_name, $selected=0, $not_select=false, $select_id= '', $select_class= '', $leaf_only=false)
Definition: doc.core.php:648
getInCost($pos_id, $limit_date=0, $serv_mode=0)
Definition: doc.core.php:470
$sel
$db
$tmpl
$sum
Definition: gpb_check.php:80
$opt
Definition: adm.php:65
$CONFIG['site']['admin_name']