meraproject/module/soft/subscribe/group/soft/model.php
keboss-m 5c21d25d45 Initial commit: Merakomis portal, Docker stack and user-reader API.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-24 11:04:05 +03:00

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();
///