[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Склад
Kusss
К моему стыду, только начал загружаться ООП.
Вот класс, и оно даже работает.
Нужный функционал : добавить/списать (товар, брак, заготовку).
Вопрос в том, что я не правильно сделал. В общем советы нужны по реализации. может я вообще что-то не так сделал.

сам класс

class Sklad 
{
private $type = '';
private $fail = false;
private $half = false;

private $plus = array(
'up',
'fail_up',
'half_up',
);

private $minus = array(
'down',
'fail_down',
'half_down',
);

private $update = '';

/*
Запрос остатков на складе.
Если передан массив, вытаскиваем только эти позиции
*/

public function ostatki($array_in = array())
{
$where = '1';
if (count($array_in) > 0){
foreach ($array_in AS $value){
$tovar[] = $value['tovar'];
}
$where = "tovar IN (".implode(',',$tovar).") ";
}

$sql = "
SELECT
tovar, number
FROM
`sklad_sklad`
WHERE

$where
ORDER BY
tovar
"
;
$sql = mysql_query($sql);
while ($ostatki = mysql_fetch_assoc($sql)) {
$sklad_tovar[$ostatki['tovar']] = $ostatki['number'];
}
return $sklad_tovar;
}

/*
Добавить/Списать со склада во время добавления
$array = array('tovar'=>$value['tovar'],'number'=>$value['number']);
*/

public function plus_minus($array, $type)
{
$this->type = $type;

if (!is_array($array))
return false;

$sklad_tovar = $this->ostatki($array);
$plus_minus = $this->skladType($array);

if (empty($plus_minus))
return false;

$update_tovar = array();
$add_array = array();
foreach ($plus_minus AS $tovar=>$number) {
if (isset($sklad_tovar[$tovar])) {
$update_tovar[] = $tovar;
$update .= " WHEN `tovar` = $tovar THEN `". $this->update ."` +$number";
} else {
if (empty($this->fail) AND empty($this->half))
$add_array[] = "('".mysql_real_escape_string($tovar)."', '$number', 0, 0)";
if (!empty($this->fail))
$add_array[] = "('".mysql_real_escape_string($tovar)."', 0, '$number', 0)";
if (!empty($this->half))
$add_array[] = "('".mysql_real_escape_string($tovar)."', 0, 0,'$number')";
}

}


// Обновляем что есть
if (count($update_tovar) > 0){
$sql = "UPDATE `sklad_sklad` SET ". $this->update ." = CASE ";
$sql .= $update ." END WHERE tovar IN (".implode(',',$update_tovar).")";
$result[] = $sql;
//mysql_query($sql);
}

// Добавляем новые позиции
if (count($add_array) > 0){
$sql = "INSERT INTO `sklad_sklad` (`tovar`, `number`, `fail`, `half`) VALUE ". implode(',',$add_array);
$result[] = $sql;
//mysql_query($sql);
}

return $result;
//return true;
}

/*
$type = up, down, fail_up, fail_down, half_up, half_down
*/

private function skladType($array)
{
switch ($this->type) {
// Количество
case 'up':
case 'down':
$this->update = 'number';
break;
// Брак
case 'fail_up':
case 'fail_down':
$this->update = 'fail';
$this->fail = true;
break;
// Заготовка
case 'half_up':
case 'half_down':
$this->update = 'half';
$this->half = true;
break;
default:
return false;
}

foreach ($array AS $value){
if (in_array($this->type, $this->plus)){
$plus_minus[$value['tovar']] += $value['number'];
}
if (in_array($this->type, $this->minus)){
$plus_minus[$value['tovar']] -= $value['number'];
}
}

return $plus_minus;
}

}



тестовый вызов класса

	$type = 'down';
$array_test = array('0650100', '0890000', '0900000', '0910000', '0950000', '0990000', '8000000', '8100000');
$array = array();
foreach ($array_test AS $tovar){
$add_product[] = array(
'tovar'=>$tovar,
'number'=>rand(1,10),
);

}

$sklad = new sklad();
$return = $sklad->plus_minus($add_product, $type);
if (empty($return)){
echo 'False';
}
if (is_array($return)){
echo '<pre>';
print_r($return);
echo '</pre>';
}



Результат выполнения

Array
(
[0] => UPDATE `sklad_sklad` SET number = CASE WHEN `tovar` = 0650100 THEN `number` +-6 WHEN `tovar` = 0890000 THEN `number` +-4 WHEN `tovar` = 0900000 THEN `number` +-6 WHEN `tovar` = 0910000 THEN `number` +-10 WHEN `tovar` = 0950000 THEN `number` +-4 WHEN `tovar` = 0990000 THEN `number` +-1 END WHERE tovar IN (0650100,0890000,0900000,0910000,0950000,0990000)
[1] => INSERT INTO `sklad_sklad` (`tovar`, `number`, `fail`, `half`) VALUE ('8000000', '-5', 0, 0),('8100000', '-3', 0, 0)
)

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.