meraproject/themes/merakomis/dictionary/contractor/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

227 lines
8.3 KiB
PHP
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?
namespace themes\merakomis\dictionary;
use core\columns\structure\eFilterType;
use core\db\structure\Column as C;
use core\db\structure\eColumnType;
use core\lang\structure\LangVariable as V;
use ModuleBZ\Form\Input\Select;
use ModuleBZ\Layout\Column;
use ms\ms\structure\msModuleTable;
use common\Image;
use ModuleBZ\Form\Input\ImagePicker;
use ModuleBZ\Form\Input\Switcher;
use ModuleBZ\Form\Input\Text;
use ModuleBZ\Form\Input\Textarea;
use ModuleBZ\Layout\Row;
use themes\Merakomis;
use themes\merakomis\dictionary\contractor\Status;
use themes\merakomis\dictionary\contractor\structure\lang as Vars;
use themes\merakomis\structure\merakomisModuleTable;
use themes\vhl\Stat;
use themes\merakomis\input\Save as InputSave;
class Contractor extends merakomisModuleTable {
static $self;
static $cache = [];
static $table_name = 'tMerakomisDContractor';
static $controller = 'themes.merakomis.dictionary.contractor';
static $ID = 'id';
static $NAME = 'name';
static $INN = 'inn';
static $GROUP = 'group';
static $STATUS = 'status';
static $TEXT = 'text';
static $VIS = 'vis';
static $PORTAL = 'portal';
static $ACCOUNT = 'account';
static function getTitle(){return V::get(Vars::$MODULE_NAME);}
static function getSystemLangValues():array{ return Vars::getArray(); }
public static function beforeUadd(array $values = []): array {
$res = [];
$id = $values[self::$ID];
$r = self::select([
\Query::WHERE => new \Where(\Where::_and([
\Where::_operator(self::$INN,'=',$values[self::$INN]),
\Where::_operator(self::$STATUS,'=',$values[self::$STATUS]),
])),
\Query::COUNT => 1,
]);
if($l = \DB::fetch($r)){
if($l[self::$ID] != $id){
$res[self::$INN][] = 'Такой ИНН уже есть с таким статусом';
}
}
return $res;
}
static function format($v){
return [
'id' => $id = intval($v[self::$ID]),
'name' => self::getName($v),
'text' => $v[self::$TEXT],
'inn' => $v[self::$INN],
'group' => $v[self::$GROUP],
'status' => Status::getName(Status::getByID(intval($v[self::$STATUS]))),
'download_link' => '/api/themes.merakomis.download/contractor/?id='.$id,
];
}
static function getFormInputs(\ModuleBZ\Form &$form, array $data, $C, bool $isEdit) {
$form->addRow((new Row())
->addColumn((new Column())->setClassAll('c-40 ')->addRow((new Row())))
->addColumn(
(new Column())->setClassAll('c-20 ')
->addRow((new Row())
->addColumn(((new Text())
->setName(self::$NAME)
->setValue($C[self::$NAME])
->setClassAll('c-100')
->setLabel($c = V::get(Vars::$NAME))
->setPlaceholder($c)
))
->addColumn(((new Text())
->setName(self::$INN)
->setValue($C[self::$INN])
->setClassAll('c-50')
->setLabel($c = V::get(Vars::$INN))
->setPlaceholder($c)
))
->addColumn(((new Select())
->setName(self::$STATUS)
->setValue(intval($C[self::$STATUS]))
->setClassAll('c-50')
->setLabel($c = V::get(Vars::$STATUS))
->setPlaceholder($c)
->setOptions(Status::getNameList([
'zero'=>true,
\Query::WHERE=> new \Where(\Where::_or([
\Where::_operator(Status::$VIS,'=',1),
$isEdit ? \Where::_operator(Status::$ID,'=',$C[self::$STATUS]) : null,
]))
]))
))
->addColumn(((new Text())
->setName(self::$GROUP)
->setValue($C[self::$GROUP])
->setClassAll('c-50')
->setLabel($c = V::get(Vars::$GROUP))
->setPlaceholder($c)
))
->addColumn(((new Switcher())
->setName(self::$VIS)
->setClassAll('c-50 green_switcher')
->setPlaceholder($c = V::get(Vars::$VIS))
->setLabel(' ')
->setChecked($isEdit ? boolval($C[self::$VIS]) : true)
))
)->addRow((new Row())
->addColumn(((new Textarea())
->setName(self::$TEXT)
->setValue($C[self::$TEXT])
->setClassAll('c-100')
->setLabel($c = V::get(Vars::$TEXT))
->setPlaceholder($c)
->setAutoHeight(true)
))
)->addRow((new Row())
->addColumn(((new InputSave())->setClassAll('c-100')->setName('save')))
)
))
;
}
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::$NAME,
C::TYPE => eColumnType::VARCHAR,
C::FILTER_TYPE => eFilterType::TEXT,
C::LENGTH => 1023,
C::TH => V::get(Vars::$NAME),
]),
new C([
C::VAR_NAME => &self::$INN,
C::TYPE => eColumnType::VARCHAR,
C::FILTER_TYPE => eFilterType::TEXT,
C::LENGTH => 31,
C::TH => V::get(Vars::$INN),
]),
new C([
C::VAR_NAME => &self::$TEXT,
C::TYPE => eColumnType::TEXT,
C::TH => V::get(Vars::$TEXT),
C::HIDDEN => true,
]),
new C([
C::VAR_NAME => &self::$GROUP,
C::TYPE => eColumnType::TEXT,
C::FILTER_TYPE => eFilterType::TEXT,
C::TH => V::get(Vars::$GROUP),
]),
new C([
C::VAR_NAME => &self::$STATUS,
C::TYPE => eColumnType::INT,
C::FILTER_TYPE => eFilterType::SELECT,
C::TH => V::get(Vars::$STATUS),
C::FUNC_VALUE_DATA => function($v){
return Status::getName(Status::getByID(intval($v[self::$STATUS])));
},
C::FUNC_FILTER_SELECT_OPTIONS => function(){
return Status::getNameList();
},
]),
new C([
C::VAR_NAME => &self::$VIS,
C::TYPE => eColumnType::TINYINT,
C::TH => V::get(Vars::$VIS),
C::FILTER_TYPE => eFilterType::BOOLEAN,
//C::DEFAULT => 1,
C::COL_DEFAULT => 1,
C::FUNC_VALUE_DATA => function($v){
return Merakomis::fbool($v[self::$VIS]);
}
]),
new C([
C::VAR_NAME => &self::$PORTAL,
C::TYPE => eColumnType::INT,
C::DEFAULT => intval(\Site::$portal_id),
c::HIDDEN => true,
]),
new C([
C::VAR_NAME => &self::$ACCOUNT,
C::TYPE => eColumnType::INT,
C::DEFAULT => intval(\Site::$owner_id),
//C::TH => V::get(Vars::$ACCOUNT),
c::HIDDEN => true,
]),
];
}
}
new Contractor();