meraproject/module/soft/subscribe/group/model.php

355 lines
13 KiB
PHP
Raw Permalink Normal View History

<?
namespace soft\subscribe;
use common\Image;
use core\db\structure\Column as C;
use core\db\structure\eColumnType;
use core\site\Theme;
use ModuleBZ\Form\Input\ImagePicker;
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;
use soft\subscribe\group\Soft as GroupSoft;
use soft\soft;
use core\lang\structure\LangVariable as V;
use ms\ms\structure\msModuleTable;
use soft\subscribe\group\structure\softSubscribeGroupLang as Vars;
use soft\Subscribe\structure\ESoftSubscribeStatus;
class Group extends msModuleTable {
static $self;
static $table_name = 'softSubscribeGroup';
static $controller = 'soft.subscribe.group';
static $easy_left_joins;
static $ID = 'id';
static $NAME = 'name';
static $IMAGE = 'image';
static $TEXT_ID = 'text_id';
static $ANNOTATION = 'annotation';
static $DESCRIPTION = 'description';
static $ACTIVE = 'active';
static $SUPER = 'super';
static $OLD = 'old'; // Старая цена
static $TOTAL = 'total'; // Общая стоимость
static $PORTAL = 'portal';
static $ARCHIVE = 'archive';
static $ACCOUNT = 'account';
static $CREATED = 'created';
static $UPDATED = 'updated';
// Псевдостолбцы
static $SALE = 'sale';
static function getTitle(){return V::get(Vars::$MODULE_NAME);}
static function getSystemLangValues():array{ return Vars::getArray(); }
public function _update(\Where $w, array $values) {
$values[self::$UPDATED] = time();
return parent::_update($w, $values);
}
public function __construct($install_id = null) {
parent::__construct($install_id);
static::$easy_left_joins =[
[Image::$table_name,image::$ID,self::$IMAGE]
];
}
public function _deleteByIDS(array $ids) {
self::updateByIds($ids,[self::$ARCHIVE=>1]);
}
static function remath($id){
$id = intval($id);
$C = self::getByID($id);
if($C[self::$SUPER]) return;
$r = GroupSoft::select([
\Query::SELECT => [
'SUM('.Soft::$PRICE.') as old',
'SUM('.GroupSoft::$PRICE.') as total',
],
\Query::WHERE => new \Where(\Where::_and([
\Where::_operator(GroupSoft::$GROUP,'=',$id)
])),
]);
$l = \DB::fetch($r);
self::updateById($id,[
self::$OLD => cfloatval($l['old']),
self::$TOTAL => cfloatval($l['total']),
]);
}
public static function afterUadd($values, $id, $result) {
parent::afterUadd($values, $id, $result);
self::remath($id);
}
static function isSubscribed($group_id,$pid = PID):bool{
$group_id = intval($group_id);
$pid = intval($pid);
$r = Subscribe::select([
\Query::SELECT => ['COUNT('.Subscribe::$ID.') as cc'],
\Query::WHERE => new \Where(\Where::_and([
\Where::_operator(Subscribe::$PROFILE,'=',$pid),
\Where::_operator(Subscribe::$GROUP,'=',$group_id),
\Where::_in(Subscribe::$ARCHIVE,[
ESoftSubscribeStatus::ACTIVE,
ESoftSubscribeStatus::PAUSE,
])
]))
]);
$l = \DB::fetch($r);
return intval($l['cc'])>0;
}
static function canSubscribe($v,$pid = PID){
$errors = [];
if(!IF_PROFILE) {
//$errors[] = "Вы не авторизованы";
}
else{
if(Subscribe::hasSuperSubscribe($pid)){
$errors[] = 'У вас есть супер подписка, которая даёт доступ ко всем программам';
}
}
if(!$v[self::$ACTIVE]){
$errors[] = 'Набор программ пока формируется и ещё не доступна для продажи';
}
if($v[self::$ARCHIVE]){
$errors[] = 'Набор программ находится в архиве и уже не доступен для продажи';
}
return [
'result' => count($errors)==0,
'errors' => $errors,
];
}
public static function getFormInputs(\ModuleBZ\Form &$form, array $data, $C, bool $isEdit) {
$img = null;
if($c = $C[self::$IMAGE]) $img = Image::getByID($c);
$form
->addInput((new ImagePicker())
->setName(self::$IMAGE)
->setLabel(V::get(Vars::$IMAGE))
->setClassAll('c-1-3')
->setUploadUrl(\Site::sectionUrl(substr(Image::UPLOAD_URL_ACCOUNT,1),true))
// TODO: Удалить
->setAjaxData(['token'=>1])
->setSrc($img?$img[Image::$URL]:'')
->setValue($C[self::$IMAGE])
)
->addRow((new Row())
->addColumn(((new Text())
->setName(self::$NAME)
->setValue($C[self::$NAME])
->setClassAll('c-50')
->setLabel(V::get(Vars::$NAME))
->setPlaceholder(V::get(Vars::$NAME))
))
->addColumn(((new Text())
->setName(self::$TEXT_ID)
->setValue($C[self::$TEXT_ID])
->setClassAll('c-50')
->setLabel(V::get(Vars::$TEXT_ID))
->setPlaceholder(V::get(Vars::$TEXT_ID))
))
)
->addRow((new Row())
->addColumn(((new Switcher())
->setName(self::$ACTIVE)
->setChecked(boolval($C[self::$ACTIVE]))
->setClassAll('c')
->setPlaceholder(V::get(Vars::$ACTIVE))
))
->addColumn(((new Switcher())
->setName(self::$ARCHIVE)
->setChecked(boolval($C[self::$ARCHIVE]))
->setClassAll('c')
->setPlaceholder(V::get(Vars::$ARCHIVE))
))
->addColumn(((new Switcher())
->setName(self::$SUPER)
->setChecked(boolval($C[self::$SUPER]))
->setClassAll('c')
->setPlaceholder(V::get(Vars::$SUPER))
))
)
->addRow((new Row())
->addColumn(((new Text())
->setName(self::$OLD)
->setValue($C[self::$OLD])
->setClassAll('c-50')
->setLabel(V::get(Vars::$OLD))
->setPlaceholder(V::get(Vars::$OLD))
))
->addColumn(((new Text())
->setName(self::$TOTAL)
->setValue($C[self::$TOTAL])
->setClassAll('c-50')
->setLabel(V::get(Vars::$TOTAL))
->setPlaceholder(V::get(Vars::$TOTAL))
))
)
->addInput((new Textarea())
->setName(self::$ANNOTATION)
->setLabel(V::get(Vars::$ANNOTATION))
->setValue($C[self::$ANNOTATION])
//->setIsHtmlEditor(true)
//->setTinyMCEImageUploadUrl(\Site::$theme::getTinyMCEImageUploadUrl())
//->setTinyMCEApiKey(\Site::$theme::getTinyMCEApiKey())
)
->addInput((new Textarea())
->setName(self::$DESCRIPTION)
->setLabel(V::get(Vars::$DESCRIPTION))
->setValue($C[self::$DESCRIPTION])
->setIsHtmlEditor(true)
->setTinyMCEImageUploadUrl(\Site::$theme::getTinyMCEImageUploadUrl())
->setTinyMCEApiKey(\Site::$theme::getTinyMCEApiKey())
)
;
}
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::$IMAGE,
C::TYPE => eColumnType::INT,
C::TH => V::get(Vars::$IMAGE),
C::FUNC_VALUE_DATA => function($v){
return Image::imageResize($v[Image::$URL],40,40,90,['crop'=>'center']);
}
]),
new C([
C::VAR_NAME => &self::$NAME,
C::TYPE => eColumnType::VARCHAR,
C::LENGTH => 1023,
C::TH => V::get(Vars::$NAME),
]),
new C([
C::VAR_NAME => &self::$TEXT_ID,
C::TYPE => eColumnType::VARCHAR,
C::LENGTH => 63,
C::TH => V::get(Vars::$TEXT_ID),
]),
new C([
C::VAR_NAME => &self::$ANNOTATION,
C::TYPE => eColumnType::TEXT,
C::HIDDEN => true,
C::TH => V::get(Vars::$ANNOTATION),
]),
new C([
C::VAR_NAME => &self::$DESCRIPTION,
C::TYPE => eColumnType::LONGTEXT,
C::HIDDEN => true,
C::TH => V::get(Vars::$DESCRIPTION),
]),
new C([
C::VAR_NAME => &self::$ACTIVE,
C::TYPE => eColumnType::TINYINT,
C::DEFAULT => 0,
C::LENGTH => 1,
C::TH => V::get(Vars::$ACTIVE),
]),
new C([
C::VAR_NAME => &self::$SUPER,
C::TYPE => eColumnType::TINYINT,
C::DEFAULT => 0,
C::LENGTH => 1,
C::TH => V::get(Vars::$SUPER),
]),
new C([
C::VAR_NAME => &self::$OLD,
C::TYPE => eColumnType::DOUBLE,
C::LENGTH => '10,2',
C::TH => V::get(Vars::$OLD),
]),
new C([
C::VAR_NAME => &self::$TOTAL,
C::TYPE => eColumnType::DOUBLE,
C::LENGTH => '10,2',
C::TH => V::get(Vars::$TOTAL),
]),
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::$TOTAL]/$v[self::$OLD])*100,0).'%';
}
]),
new C([
C::VAR_NAME => &self::$PORTAL,
C::TYPE => eColumnType::INT,
C::HIDDEN => true,
C::DEFAULT => intval(\Site::$portal_id)
]),
new C([
C::VAR_NAME => &self::$ARCHIVE,
C::TYPE => eColumnType::TINYINT,
C::DEFAULT => 0,
C::TH => V::get(Vars::$ARCHIVE),
]),
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 C([
C::VAR_NAME => &self::$CREATED,
C::TYPE => eColumnType::INT,
C::LENGTH => 11,
C::TH => V::get(Vars::$CREATED),
C::DEFAULT => time(),
c::FUNC_VALUE => function($v){return self::formatDate($v[self::$CREATED]);},
c::HIDDEN=>true,
]),
new C([
C::VAR_NAME => &self::$UPDATED,
C::TYPE => eColumnType::INT,
C::DEFAULT => time(),
C::TH => V::get(Vars::$UPDATED),
c::FUNC_VALUE => function($v){return self::formatDate($v[self::$UPDATED]);},
c::HIDDEN=>true,
]),
];
}
}
new Group();
///