Builder.php 2.6 KB
<?php
    
    namespace artbox\odoo\components;
    
    use yii\base\Object;
    
    class Builder extends Object
    {
        protected $db;
        
        protected $parameters = [
            [],
            [],
        ];
        
        /**
         * Builder constructor.
         *
         * @param \artbox\odoo\components\Connection $connection
         * @param array                              $config
         */
        public function __construct(Connection $connection, array $config = [])
        {
            $this->db = $connection;
            parent::__construct($config);
        }
        
        /**
         * Select ID of model, which will be modified or deleted
         *
         * @param int $id
         *
         * @return \artbox\odoo\components\Builder
         */
        public function addId(int $id): Builder
        {
            $this->parameters[ 0 ][] = $id;
            return $this;
        }
        
        /**
         * Set $param of model, which will be created or modified
         *
         * @param string       $param
         * @param string|array $value
         *
         * @return \artbox\odoo\components\Builder
         */
        public function setParam(string $param, $value): Builder
        {
            $this->parameters[ 1 ][ $param ] = $value;
            return $this;
        }
        
        /**
         * Generate create command
         *
         * @param string $model
         *
         * @return \artbox\odoo\components\Command
         */
        public function create(string $model): Command
        {
            return $this->db->createCommand($model, 'create', [ $this->parameters[ 1 ] ]);
        }
        
        /**
         * Generate update model
         *
         * @param string $model
         *
         * @return \artbox\odoo\components\Command
         */
        public function update(string $model): Command
        {
            return $this->db->createCommand($model, 'write', $this->parameters);
        }
        
        /**
         * Generate delete model
         *
         * @param string $model
         *
         * @return \artbox\odoo\components\Command
         */
        public function delete(string $model): Command
        {
            return $this->db->createCommand($model, 'unlink', [ $this->parameters[ 0 ] ]);
        }
        
        /**
         * Clear builder
         *
         * @return \artbox\odoo\components\Builder
         */
        public function clear(): Builder
        {
            $this->parameters = [
                [],
                [],
            ];
            return $this;
        }
    }