219 lines
7.2 KiB
PHP
219 lines
7.2 KiB
PHP
<?
|
|
namespace soft\subscribe\group;
|
|
|
|
use core\db\structure\Column as C;
|
|
use core\db\structure\eColumnType;
|
|
use ModuleBZ\Form\Input\Hidden;
|
|
use ModuleBZ\Form\Input\Select;
|
|
use ModuleBZ\Form\Input\Switcher;
|
|
use ModuleBZ\Form\Input\Text;
|
|
use ModuleBZ\Form\Input\Textarea;
|
|
use ModuleBZ\Layout\Row;
|
|
use soft\subscribe\Group;
|
|
use ui\form\structure\eInputType;
|
|
use ui\Form;
|
|
use ui\input\Input;
|
|
use core\lang\structure\LangVariable as V;
|
|
use ms\ms\structure\msModuleTable;
|
|
use soft\subscribe\group\soft\structure\softSubscribeGroupSoftLang as Vars;
|
|
use soft\soft as OriginalSoft;
|
|
|
|
|
|
|
|
|
|
class Soft extends msModuleTable {
|
|
static $self;
|
|
static $table_name = 'softSubscribeGroupSoft';
|
|
static $controller = 'common.soft.subscribe.group.soft';
|
|
|
|
static $easy_left_joins;
|
|
|
|
static $ID = 'id';
|
|
static $SOFT = 'soft';
|
|
static $GROUP = 'group';
|
|
static $POS = 'pos';
|
|
static $PRICE = 'price';
|
|
static $PORTAL = 'portal';
|
|
static $ACCOUNT = 'account';
|
|
|
|
// Псевдостолбцы
|
|
static $OLD_PRICE = 'old_price';
|
|
static $SALE = 'sale';
|
|
|
|
|
|
static function getTitle(){return V::get(Vars::$MODULE_NAME);}
|
|
static function getSystemLangValues():array{ return Vars::getArray(); }
|
|
|
|
public function __construct($install_id = null) {
|
|
parent::__construct($install_id);
|
|
static::$easy_left_joins = [
|
|
[OriginalSoft::$table_name,OriginalSoft::$ID,self::$SOFT],
|
|
];
|
|
}
|
|
|
|
|
|
static function getByGroup($group_id,$isAssoc = true){
|
|
$group_id = intval($group_id);
|
|
return self::select([
|
|
\Query::WHERE => new \Where(\Where::_and([
|
|
\Where::_operator(self::$GROUP,'=',$group_id)
|
|
]))
|
|
],$isAssoc);
|
|
}
|
|
|
|
|
|
public static function beforeUadd(array $values = []): array {
|
|
$errors = [];
|
|
$id = $values[self::$ID];
|
|
if(!$values[self::$SOFT]){
|
|
$errors[self::$SOFT][] = 'Выберите программу';
|
|
} else if($group = intval($values[self::$GROUP]) && !$id) {
|
|
$r = self::select([
|
|
\Query::WHERE => new \Where(\Where::_and([
|
|
\Where::_operator(self::$GROUP, '=', $group),
|
|
\Where::_operator(self::$SOFT, '=', $values[self::$SOFT]),
|
|
])),
|
|
\Query::COUNT=>1,
|
|
]);
|
|
if(\DB::numRows($r)){
|
|
$errors[self::$SOFT][] = 'Такая программа уже есть в этой группе';
|
|
}
|
|
}
|
|
return $errors;
|
|
}
|
|
|
|
|
|
|
|
public function _deleteByIDS(array $ids) {
|
|
$group_ids = [];
|
|
$a = self::getByIDS($ids);
|
|
foreach ($a as $v){
|
|
$group_ids[] = $v[self::$GROUP];
|
|
}
|
|
parent::_deleteByIDS($ids);
|
|
foreach ($group_ids as $group_id){
|
|
Group::remath($group_id);
|
|
}
|
|
}
|
|
|
|
public static function afterUadd($values, $id, $result) {
|
|
$C = self::getByID($id);
|
|
Group::remath($C[self::$GROUP]);
|
|
parent::afterUadd($values, $id, $result);
|
|
}
|
|
|
|
public static function getFormInputs(\ModuleBZ\Form &$form, array $data, $C, bool $isEdit) {
|
|
$soft = OriginalSoft::getNameList([
|
|
\Query::WHERE => new \Where(\Where::_and([
|
|
\Where::_operator(OriginalSoft::$PORTAL,'=',\Site::$portal_id)
|
|
]))
|
|
]);
|
|
$form
|
|
->addInput((new Hidden())
|
|
->setName(self::$GROUP)
|
|
->setValue($C[self::$GROUP] ? : intval($data['group']))
|
|
)
|
|
->addRow((new Row())
|
|
->addColumn(((new Select())
|
|
->setName(self::$SOFT)
|
|
->setValue($C[self::$SOFT])
|
|
->setClassAll('c-50')
|
|
->setLabel(V::get(Vars::$SOFT))
|
|
->setPlaceholder(V::get(Vars::$SOFT))
|
|
->setOptions($soft)
|
|
))
|
|
->addColumn(((new Text())
|
|
->setName(self::$PRICE)
|
|
->setValue($C[self::$PRICE])
|
|
->setClassAll('c-50')
|
|
->setLabel(V::get(Vars::$PRICE))
|
|
->setPlaceholder(V::get(Vars::$PRICE))
|
|
))
|
|
)
|
|
;
|
|
}
|
|
|
|
static function columnInfo() : array {
|
|
return [
|
|
new C([
|
|
C::VAR_NAME =>&self::$ID,
|
|
C::TYPE =>eColumnType::INT,
|
|
C::AUTO_INCREMENT =>true,
|
|
C::PRIMARY =>true,
|
|
C::DEFAULT =>0,
|
|
C::HIDDEN =>true,
|
|
C::TH =>V::get(Vars::$ID),
|
|
]),
|
|
|
|
new C([
|
|
C::VAR_NAME => &self::$SOFT,
|
|
C::TYPE => eColumnType::INT,
|
|
C::TH => V::get(Vars::$SOFT),
|
|
C::FUNC_VALUE_DATA => function($v){
|
|
return OriginalSoft::getName($v);
|
|
}
|
|
]),
|
|
new C([
|
|
C::VAR_NAME => &self::$GROUP,
|
|
C::TYPE => eColumnType::VARCHAR,
|
|
C::HIDDEN => true,
|
|
]),
|
|
new C([
|
|
C::VAR_NAME => &self::$POS,
|
|
C::TYPE => eColumnType::INT,
|
|
C::DEFAULT => time(),
|
|
C::HIDDEN => true,
|
|
]),
|
|
new C([
|
|
C::VAR_NAME => &self::$OLD_PRICE,
|
|
C::TYPE => eColumnType::NONE,
|
|
C::TH => V::get(Vars::$OLD_PRICE),
|
|
C::FUNC_VALUE_DATA => function($v){
|
|
return $v[OriginalSoft::$PRICE];
|
|
}
|
|
]),
|
|
new C([
|
|
C::VAR_NAME => &self::$PRICE,
|
|
C::TYPE => eColumnType::DOUBLE,
|
|
C::LENGTH => '10,2',
|
|
C::TH => V::get(Vars::$PRICE),
|
|
]),
|
|
new C([
|
|
C::VAR_NAME => &self::$SALE,
|
|
C::TYPE => eColumnType::NONE,
|
|
C::TH => V::get(Vars::$SALE),
|
|
C::FUNC_VALUE_DATA => function($v){
|
|
return number_format((1 - $v[self::$PRICE]/$v[OriginalSoft::$PRICE])*100,0).'%';
|
|
}
|
|
]),
|
|
new C([
|
|
C::VAR_NAME => &self::$PORTAL,
|
|
C::TYPE => eColumnType::VARCHAR,
|
|
C::DEFAULT => intval(\Site::$portal_id),
|
|
C::HIDDEN => true,
|
|
]),
|
|
|
|
new C([
|
|
C::VAR_NAME => &self::$ACCOUNT,
|
|
C::TYPE => eColumnType::INT,
|
|
C::LENGTH => 11,
|
|
C::TH => V::get(Vars::$ACCOUNT),
|
|
C::DEFAULT => intval(\Site::$owner_id),
|
|
c::HIDDEN=>true,
|
|
c::FUNC_VALUE => function($v){
|
|
if($id = $v[self::$ACCOUNT]) {
|
|
return \Account::getName( \Account::getByID($id) );
|
|
} else return '-';
|
|
},
|
|
]),
|
|
];
|
|
}
|
|
|
|
}
|
|
new Soft();
|
|
|
|
|
|
///
|
|
|
|
|