/**
  * Get a hash from the primary key
  *
  * @param string $id The primary key value
  *
  * @return array The hash
  */
 protected function getHash($id)
 {
     $id = $this->getDS()->escape($id);
     $sep = "|";
     $key = $this->_key;
     $key_multi = strpos($key, $sep) !== false;
     $values_multi = "";
     if (!$key_multi) {
         $where = "{$key} = '{$id}'";
     } else {
         $cols = array_combine(explode($sep, $key), explode($sep, $id));
         $values_multi = implode("|", $cols);
         $where = array();
         foreach ($cols as $_col => $_value) {
             $where[] = "{$_col} = '{$_value}'";
         }
         $where = implode(" AND ", $where);
     }
     $query = $this->getSelectQuery($where);
     $hash = $this->_ds->loadHash($query);
     if ($hash && $key_multi) {
         $hash[$key] = $values_multi;
     }
     if ($hash == false) {
         return $hash;
     }
     return $hash;
 }
Beispiel #2
0
 /**
  * @see parent::__construct()
  */
 function __construct()
 {
     parent::__construct();
     $this->mod_name = 'dPstock';
     $this->makeRevision('all');
     $query = 'CREATE TABLE `product` (
    `product_id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, 
    `name` VARCHAR(50) NOT NULL, 
    `description` TEXT, 
    `code` VARCHAR(32) NULL,
    `category_id` INT(11) UNSIGNED NOT NULL, 
    `societe_id` INT(11) UNSIGNED NOT NULL, 
   PRIMARY KEY (`product_id`)) /*! ENGINE=MyISAM */;';
     $this->addQuery($query);
     $query = 'ALTER TABLE `product`
   ADD UNIQUE INDEX (code),
   ADD INDEX (category_id),
   ADD INDEX (societe_id)';
     $this->addQuery($query);
     $query = 'CREATE TABLE `product_category` (
    `category_id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, 
    `name` VARCHAR(50) NOT NULL, 
   PRIMARY KEY (`category_id`)) /*! ENGINE=MyISAM */;';
     $this->addQuery($query);
     $query = 'CREATE TABLE `product_delivery` (
  `delivery_id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, 
  `product_id` INT(11) UNSIGNED NOT NULL, 
  `date` DATETIME NOT NULL, 
  `target_class` VARCHAR(25) NOT NULL, 
  `target_id` INT(11) UNSIGNED NOT NULL, 
  `code` VARCHAR(32) NULL, 
  `description` TEXT, 
 PRIMARY KEY (`delivery_id`)) /*! ENGINE=MyISAM */;';
     $this->addQuery($query);
     $query = 'ALTER TABLE `product_delivery`
   ADD INDEX (code),
   ADD INDEX (product_id),
   ADD INDEX (target_id),
   ADD INDEX (target_class),
   ADD INDEX (date)';
     $this->addQuery($query);
     $query = 'CREATE TABLE `product_order` (
  `order_id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, 
  `date_ordered` DATETIME, 
  `societe_id` INT(11) UNSIGNED NOT NULL, 
  `group_id` INT(11) UNSIGNED NOT NULL, 
  `locked` BOOL NULL DEFAULT \'0\',
  `cancelled` BOOL NULL DEFAULT \'0\',
  `deleted` BOOL NULL DEFAULT \'0\',
  `order_number` VARCHAR(64) NOT NULL, 
 PRIMARY KEY (`order_id`)) /*! ENGINE=MyISAM */;';
     $this->addQuery($query);
     $query = 'ALTER TABLE `product_order`
   ADD UNIQUE INDEX (order_number),
   ADD INDEX (societe_id),
   ADD INDEX (group_id),
   ADD INDEX (date_ordered)';
     $this->addQuery($query);
     $query = 'CREATE TABLE `product_order_item` (
  `order_item_id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, 
  `reference_id` INT(11) UNSIGNED NOT NULL, 
  `order_id` INT(11) UNSIGNED NOT NULL, 
  `quantity` INT(11) UNSIGNED NOT NULL, 
  `unit_price` FLOAT, 
  `date_received` DATETIME, 
  `quantity_received` INT(11) UNSIGNED DEFAULT \'0\',
 PRIMARY KEY (`order_item_id`)) /*! ENGINE=MyISAM */;';
     $this->addQuery($query);
     $query = 'ALTER TABLE `product_order_item`
   ADD INDEX (reference_id),
   ADD INDEX (order_id),
   ADD INDEX (date_received)';
     $this->addQuery($query);
     $query = 'CREATE TABLE `product_reference` (
  `reference_id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, 
  `product_id` INT(11) UNSIGNED NOT NULL, 
  `societe_id` INT(11) UNSIGNED NOT NULL, 
  `quantity` INT(11) UNSIGNED NOT NULL, 
  `code` VARCHAR(32) NULL, 
  `price` FLOAT NOT NULL, 
 PRIMARY KEY (`reference_id`)) /*! ENGINE=MyISAM */;';
     $this->addQuery($query);
     $query = 'ALTER TABLE `product_reference`
   ADD UNIQUE INDEX (code),
   ADD INDEX (product_id),
   ADD INDEX (societe_id)';
     $this->addQuery($query);
     $query = 'CREATE TABLE `product_stock` (
  `stock_id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, 
  `product_id` INT(11) UNSIGNED NOT NULL, 
  `group_id` INT(11) UNSIGNED NOT NULL, 
  `quantity` INT(11) UNSIGNED NOT NULL, 
  `order_threshold_critical` INT(11) UNSIGNED, 
  `order_threshold_min` INT(11) UNSIGNED NOT NULL, 
  `order_threshold_optimum` INT(11) UNSIGNED, 
  `order_threshold_max` INT(11) UNSIGNED NOT NULL, 
 PRIMARY KEY (`stock_id`)) /*! ENGINE=MyISAM */;';
     $this->addQuery($query);
     $query = 'ALTER TABLE `product_stock`
   ADD INDEX (product_id),
   ADD INDEX (group_id)';
     $this->addQuery($query);
     $query = 'CREATE TABLE `societe` (
  `societe_id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, 
  `name` VARCHAR(50) NOT NULL, 
  `address` VARCHAR(255), 
  `postal_code` INT(11), 
  `city` VARCHAR(255), 
  `phone` VARCHAR(255), 
  `email` VARCHAR(50), 
  `fax` VARCHAR(16) NULL,
  `siret` VARCHAR(14) NULL,
  `contact_name` VARCHAR(50), 
  `contact_surname` VARCHAR(50), 
 PRIMARY KEY (`societe_id`)) /*! ENGINE=MyISAM */;';
     $this->addQuery($query);
     $query = 'CREATE TABLE `product_stock_out` (
  `stock_out_id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, 
  `stock_id` INT(11) UNSIGNED NOT NULL, 
  `date` DATETIME NOT NULL, 
  `quantity` INT(11) NOT NULL, 
  `code` VARCHAR(32), 
  `function_id` INT(11) UNSIGNED, 
 PRIMARY KEY (`stock_out_id`)) /*! ENGINE=MyISAM */;';
     $this->addQuery($query);
     $query = 'ALTER TABLE `product_stock_out` 
   ADD INDEX (code),
   ADD INDEX (stock_id),
   ADD INDEX (function_id)';
     $this->addQuery($query);
     $this->makeRevision('0.2');
     $query = 'CREATE TABLE `product_stock_service` (
   `stock_id` INT (11) UNSIGNED NOT NULL auto_increment PRIMARY KEY,
   `product_id` INT (11) UNSIGNED NOT NULL,
   `function_id` INT (11) UNSIGNED NOT NULL,
   `quantity` INT (11) NOT NULL
 ) /*! ENGINE=MyISAM */;';
     $this->addQuery($query);
     $query = 'ALTER TABLE `product_stock_service` 
   ADD INDEX (`product_id`),
   ADD INDEX (`function_id`);';
     $this->addQuery($query);
     $query = 'RENAME TABLE `product_stock` TO `product_stock_group` ;';
     $this->addQuery($query);
     $this->makeRevision('0.3');
     $query = 'DROP TABLE `product_delivery`;';
     $this->addQuery($query);
     $this->makeRevision('0.4');
     $query = 'RENAME TABLE `product_stock_out` TO `product_delivery`;';
     $this->addQuery($query);
     $this->makeRevision('0.5');
     $query = 'ALTER TABLE `product_delivery` 
         CHANGE `stock_out_id` `delivery_id` INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT';
     $this->addQuery($query);
     $query = 'ALTER TABLE `product_delivery` CHANGE `function_id` `service_id` INT( 11 ) UNSIGNED NULL DEFAULT NULL';
     $this->addQuery($query);
     $query = 'ALTER TABLE `product_stock_service` CHANGE `function_id` `service_id` INT( 11 ) UNSIGNED NOT NULL';
     $this->addQuery($query);
     $this->makeRevision('0.6');
     $query = 'ALTER TABLE `product_delivery` 
   ADD `status` ENUM (\'planned\',\'done\') NOT NULL,
   ADD INDEX (`date`);';
     $this->addQuery($query);
     $this->makeRevision('0.7');
     $query = 'ALTER TABLE `product_delivery` 
   CHANGE `date` `date_dispensation` DATETIME NOT NULL';
     $this->addQuery($query);
     $query = 'ALTER TABLE `product_delivery` 
   ADD `date_delivery` DATETIME NULL AFTER `date_dispensation`,
   DROP `status`,
   CHANGE `service_id` `service_id` INT( 11 ) UNSIGNED NOT NULL,
   ADD INDEX (`date_delivery`);';
     $this->addQuery($query);
     $this->makeRevision('0.8');
     $query = 'ALTER TABLE `product_delivery` ADD `patient_id` INT( 11 ) UNSIGNED NULL ;';
     $this->addQuery($query);
     $this->makeRevision('0.9');
     $query = 'ALTER TABLE `product_delivery` ADD `date_reception` DATETIME NULL AFTER `date_delivery`;';
     $this->addQuery($query);
     $this->makeRevision('0.91');
     $query = 'ALTER TABLE `product_order_item` 
   DROP `date_received`,
   DROP `quantity_received`';
     $this->addQuery($query);
     $query = 'CREATE TABLE `product_order_item_reception` (
   `order_item_reception_id` INT (11) UNSIGNED NOT NULL auto_increment PRIMARY KEY,
   `order_item_id` INT (11) UNSIGNED NULL,
   `quantity` INT (11) NOT NULL,
   `code` VARCHAR (255),
   `date` DATETIME NOT NULL
 ) /*! ENGINE=MyISAM */;';
     $this->addQuery($query);
     $query = 'ALTER TABLE `product_order_item_reception` 
   ADD INDEX (`order_item_id`),
   ADD INDEX (`date`),
   ADD INDEX (`code`)';
     $this->addQuery($query);
     $this->makeRevision('0.92');
     $query = 'CREATE TABLE `product_delivery_trace` (
   `delivery_trace_id` INT (11) UNSIGNED NOT NULL auto_increment PRIMARY KEY,
   `delivery_id` INT (11) UNSIGNED NOT NULL,
   `quantity` INT (11) NOT NULL,
   `code` VARCHAR (255),
   `date_delivery` DATETIME NOT NULL,
   `date_reception` DATETIME) /*! ENGINE=MyISAM */;';
     $this->addQuery($query);
     $query = 'ALTER TABLE `product_delivery_trace` 
   ADD INDEX (`delivery_id`),
   ADD INDEX (`code`),
   ADD INDEX (`date_delivery`),
   ADD INDEX (`date_reception`);';
     $this->addQuery($query);
     $query = 'INSERT INTO `product_delivery_trace`
   SELECT \'\', product_delivery.delivery_id, 
                product_delivery.quantity, 
                product_delivery.code, 
                product_delivery.date_delivery, 
                product_delivery.date_reception
   FROM product_delivery';
     $this->addQuery($query);
     $query = 'ALTER TABLE `product_delivery`
   DROP `code`, 
   DROP `date_delivery`,
   DROP `date_reception`';
     $this->addQuery($query);
     $query = 'ALTER TABLE `product_reference` CHANGE `price` `price` DECIMAL(10, 5) NOT NULL';
     $this->addQuery($query);
     $query = 'ALTER TABLE `product_stock_service`
   ADD `order_threshold_critical` INT(11) UNSIGNED, 
   ADD `order_threshold_min` INT(11) UNSIGNED NOT NULL, 
   ADD `order_threshold_optimum` INT(11) UNSIGNED, 
   ADD `order_threshold_max` INT(11) UNSIGNED NOT NULL';
     $this->addQuery($query);
     $this->makeRevision('0.93');
     $query = 'CREATE TABLE `product_discrepancy` (
   `discrepancy_id` INT (11) UNSIGNED NOT NULL auto_increment PRIMARY KEY,
   `quantity` INT (11) NOT NULL,
   `date` DATETIME NOT NULL,
   `description` TEXT,
   `object_id` INT (11) UNSIGNED NOT NULL,
   `object_class` ENUM (\'CProductStockGroup\',\'CProductStockService\') NOT NULL) /*! ENGINE=MyISAM */;';
     $this->addQuery($query);
     $query = 'ALTER TABLE `product_discrepancy` 
   ADD INDEX (`date`),
   ADD INDEX (`object_id`);';
     $this->addQuery($query);
     $query = 'ALTER TABLE `product_delivery_trace` CHANGE `date_delivery` `date_delivery` DATETIME NULL';
     $this->addQuery($query);
     $this->makeRevision('0.94');
     $query = 'ALTER TABLE `product` 
   CHANGE `societe_id` `societe_id` INT (11) UNSIGNED,
   ADD `quantity` INT (10) UNSIGNED NOT NULL,
   ADD `item_title` VARCHAR (255),
   ADD `unit_quantity` DECIMAL (10,4) UNSIGNED,
   ADD `unit_title` VARCHAR (255),
   ADD `packaging` VARCHAR (255)';
     $this->addQuery($query);
     $this->makeRevision('0.95');
     $query = 'ALTER TABLE `product_order_item_reception` ADD `lapsing_date` DATE NOT NULL AFTER `code`';
     $this->addQuery($query);
     $query = "ALTER TABLE `product` ADD `renewable` ENUM( '0', '1', '2' ) NOT NULL";
     $this->addQuery($query);
     $query = "ALTER TABLE `product_order_item_reception` ADD `barcode_printed` ENUM( '0', '1' ) NOT NULL";
     $this->addQuery($query);
     $this->makeRevision("0.96");
     $query = "ALTER TABLE `product` ADD `code_lpp` INT (7) UNSIGNED ZEROFILL";
     $this->addQuery($query);
     $this->makeRevision("0.97");
     $query = "ALTER TABLE `product_stock_group` ADD `location_id` INT (11) UNSIGNED;";
     $this->addQuery($query);
     $query = "ALTER TABLE `product_stock_group` ADD INDEX (`location_id`);";
     $this->addQuery($query);
     $query = "CREATE TABLE `product_stock_location` (\r\n            `stock_location_id` INT (11) UNSIGNED NOT NULL auto_increment PRIMARY KEY,\r\n            `name` VARCHAR (255) NOT NULL,\r\n            `desc` TEXT,\r\n            `position` INT (11),\r\n            `group_id` INT (11) UNSIGNED NOT NULL\r\n          ) /*! ENGINE=MyISAM */;";
     $this->addQuery($query);
     $query = "ALTER TABLE `product_stock_location` ADD INDEX (`group_id`);";
     $this->addQuery($query);
     $this->makeRevision('0.98');
     $query = "ALTER TABLE `product_delivery` ADD `order` ENUM('0','1')";
     $this->addQuery($query);
     $this->makeRevision('0.99');
     $query = "ALTER TABLE `product` ADD `cancelled` ENUM ('0','1') NOT NULL DEFAULT '0'";
     $this->addQuery($query);
     $this->makeRevision('1.00');
     $query = "ALTER TABLE `product_stock_service` ADD `common` ENUM ('0','1') NOT NULL DEFAULT '0'";
     $this->addQuery($query);
     $this->makeRevision('1.01');
     $query = "ALTER TABLE `product_delivery` \r\n              ADD INDEX (`patient_id`);";
     $this->addQuery($query);
     $query = "ALTER TABLE `product_order_item_reception` \r\n              ADD INDEX (`lapsing_date`)";
     $this->addQuery($query);
     $this->makeRevision('1.02');
     $query = "UPDATE `product_stock_service` SET `common` = '1' WHERE `common` IS NULL OR `common` = ''";
     $this->addQuery($query);
     $this->makeRevision('1.03');
     $query = "ALTER TABLE `product_order_item` CHANGE `order_id` `order_id` INT (11) UNSIGNED";
     $this->addQuery($query);
     $this->makeRevision('1.04');
     $query = "CREATE TABLE `product_reception` (\r\n              `reception_id` INT (11) UNSIGNED NOT NULL auto_increment PRIMARY KEY,\r\n              `date` DATETIME,\r\n              `societe_id` INT (11) UNSIGNED NOT NULL,\r\n              `group_id` INT (11) UNSIGNED NOT NULL,\r\n              `reference` VARCHAR (255) NOT NULL\r\n            ) /*! ENGINE=MyISAM */;";
     $this->addQuery($query);
     $query = "ALTER TABLE `product_reception` \r\n              ADD INDEX (`date`),\r\n              ADD INDEX (`societe_id`),\r\n              ADD INDEX (`group_id`);";
     $this->addQuery($query);
     $this->makeRevision('1.05');
     $query = "ALTER TABLE `product_stock_group` CHANGE `order_threshold_max` `order_threshold_max` INT(11) UNSIGNED";
     $this->addQuery($query);
     $query = "ALTER TABLE `product_stock_service` CHANGE `order_threshold_max` `order_threshold_max` INT(11) UNSIGNED";
     $this->addQuery($query);
     $this->makeRevision('1.06');
     $query = "ALTER TABLE `product_delivery` ADD `comments` TEXT;";
     $this->addQuery($query);
     $this->makeRevision('1.07');
     $query = "ALTER TABLE `societe` \r\n              CHANGE `address` `address` TEXT,\r\n              CHANGE `postal_code` `postal_code` VARCHAR (5),\r\n              CHANGE `contact_name` `contact_name` VARCHAR (255),\r\n              DROP `contact_surname`,\r\n              ADD `code` VARCHAR (80),\r\n              ADD `carriage_paid` VARCHAR (255),\r\n              ADD `delivery_time` VARCHAR (255);";
     $this->addQuery($query);
     $this->makeRevision('1.08');
     $query = "ALTER TABLE `product_order` CHANGE `societe_id` `societe_id` INT( 11 ) UNSIGNED NULL";
     $this->addQuery($query);
     $query = "ALTER TABLE `product` CHANGE `name` `name` VARCHAR( 255 ) NOT NULL";
     $this->addQuery($query);
     $this->makeRevision('1.09');
     $query = "ALTER TABLE `societe` ADD `department` INT (11) UNSIGNED";
     $this->addQuery($query);
     $this->makeRevision('1.10');
     $query = "ALTER TABLE `societe` \r\n              CHANGE `department` `departments` TEXT";
     $this->addQuery($query);
     $query = "ALTER TABLE `product_order_item_reception` \r\n              CHANGE `order_item_id` `order_item_id` INT (11) UNSIGNED NOT NULL,\r\n              ADD `reception_id` INT (11) UNSIGNED NOT NULL,\r\n              CHANGE `lapsing_date` `lapsing_date` DATE,\r\n              CHANGE `barcode_printed` `barcode_printed` ENUM ('0','1') DEFAULT '0';";
     $this->addQuery($query);
     $query = "ALTER TABLE `product_order_item_reception` \r\n              ADD INDEX (`reception_id`)";
     $this->addQuery($query);
     $query = "ALTER TABLE `product` DROP `code_lpp`";
     $this->addQuery($query);
     $this->makeRevision('1.11');
     $query = "ALTER TABLE `product_order` \r\n              ADD `received` ENUM ('0','1') NOT NULL DEFAULT '0';";
     $this->addQuery($query);
     $query = "ALTER TABLE `product_reception` \r\n              CHANGE `societe_id` `societe_id` INT (11) UNSIGNED";
     $this->addQuery($query);
     $this->makeRevision('1.12');
     $query = "ALTER TABLE `product_order` \r\n              CHANGE `societe_id` `societe_id` INT (11) UNSIGNED NOT NULL";
     $this->addQuery($query);
     $this->makeRevision('1.13');
     $query = "ALTER TABLE `product_reference` \r\n              ADD `mdq` INT (11);";
     $this->addQuery($query);
     $this->makeRevision('1.14');
     $query = "ALTER TABLE `societe` \r\n              ADD `distributor_for_id` INT (11) UNSIGNED,\r\n              ADD INDEX (`distributor_for_id`)";
     $this->addQuery($query);
     $this->makeRevision('1.15');
     $query = "ALTER TABLE `societe` \r\n              DROP `distributor_for_id`,\r\n              ADD `distributor_code` VARCHAR (80)";
     $this->addQuery($query);
     $query = "ALTER TABLE `product_reference` \r\n              ADD `supplier_code` VARCHAR (80)";
     $this->addQuery($query);
     $this->makeRevision('1.16');
     $query = "ALTER TABLE `product` ADD `classe_comptable` INT (7) UNSIGNED";
     $this->addQuery($query);
     $query = "ALTER TABLE `product_reference` ADD `tva` FLOAT UNSIGNED DEFAULT '0';";
     $this->addQuery($query);
     $this->makeRevision('1.17');
     $query = "ALTER TABLE `product_order` ADD `comments` TEXT";
     $this->addQuery($query);
     $this->makeRevision('1.18');
     $query = "ALTER TABLE `product_delivery` \r\n              CHANGE `stock_id` `stock_id` INT (11) UNSIGNED,\r\n              ADD `date_delivery` DATETIME,\r\n              ADD INDEX (`date_delivery`);";
     $this->addQuery($query);
     $this->makeRevision('1.19');
     $query = "ALTER TABLE `product_reference`\r\n              CHANGE `code` `code` VARCHAR (20),\r\n              CHANGE `supplier_code` `supplier_code` VARCHAR (40),\r\n              CHANGE `mdq` `mdq` INT (11) UNSIGNED,\r\n              ADD `cancelled` ENUM ('0','1');";
     $this->addQuery($query);
     $this->makeRevision('1.20');
     $query = "ALTER TABLE `societe` \r\n              ADD `customer_code` VARCHAR (80);";
     $this->addQuery($query);
     $this->makeRevision("1.21");
     $query = "CREATE TABLE `product_equivalence` (\r\n              `equivalence_id` INT (11) UNSIGNED NOT NULL auto_increment PRIMARY KEY,\r\n              `name` VARCHAR (255) NOT NULL\r\n            ) /*! ENGINE=MyISAM */;";
     $this->addQuery($query);
     $query = "ALTER TABLE `product` \r\n              ADD `equivalence_id` INT (11) UNSIGNED,\r\n              ADD INDEX (`equivalence_id`)";
     $this->addQuery($query);
     $query = "CREATE TABLE `product_selection` (\r\n              `selection_id` INT (11) UNSIGNED NOT NULL auto_increment PRIMARY KEY,\r\n              `name` VARCHAR (255) NOT NULL\r\n            ) /*! ENGINE=MyISAM */;";
     $this->addQuery($query);
     $query = "CREATE TABLE `product_selection_item` (\r\n              `selection_item_id` INT (11) UNSIGNED NOT NULL auto_increment PRIMARY KEY,\r\n              `product_id` INT (11) UNSIGNED NOT NULL,\r\n              `selection_id` INT (11) UNSIGNED NOT NULL\r\n            ) /*! ENGINE=MyISAM */;";
     $this->addQuery($query);
     $query = "ALTER TABLE `product_selection_item` \r\n              ADD INDEX (`product_id`),\r\n              ADD INDEX (`selection_id`);";
     $this->addQuery($query);
     $query = "CREATE TABLE `product_endowment` (\r\n              `endowment_id` INT (11) UNSIGNED NOT NULL auto_increment PRIMARY KEY,\r\n              `name` VARCHAR (255) NOT NULL,\r\n              `service_id` INT (11) UNSIGNED NOT NULL\r\n            ) /*! ENGINE=MyISAM */;";
     $this->addQuery($query);
     $query = "ALTER TABLE `product_endowment` ADD INDEX (`service_id`);";
     $this->addQuery($query);
     $query = "CREATE TABLE `product_endowment_item` (\r\n              `endowment_item_id` INT (11) UNSIGNED NOT NULL auto_increment PRIMARY KEY,\r\n              `quantity` INT (11) UNSIGNED NOT NULL,\r\n              `endowment_id` INT (11) UNSIGNED NOT NULL,\r\n              `product_id` INT (11) UNSIGNED NOT NULL\r\n            ) /*! ENGINE=MyISAM */;";
     $this->addQuery($query);
     $query = "ALTER TABLE `product_endowment_item` \r\n              ADD INDEX (`endowment_id`),\r\n              ADD INDEX (`product_id`);";
     $this->addQuery($query);
     $this->makeRevision("1.22");
     $query = "CREATE TABLE `product_bill` (\r\n              `bill_id` INT (11) UNSIGNED NOT NULL auto_increment PRIMARY KEY,\r\n              `date` DATETIME,\r\n              `societe_id` INT (11) UNSIGNED NOT NULL,\r\n              `group_id` INT (11) UNSIGNED NOT NULL,\r\n              `reference` VARCHAR (80) NOT NULL\r\n            ) /*! ENGINE=MyISAM */;";
     $this->addQuery($query);
     $query = "ALTER TABLE `product_bill` \r\n              ADD INDEX (`date`),\r\n              ADD INDEX (`societe_id`),\r\n              ADD INDEX (`group_id`);";
     $this->addQuery($query);
     $query = "CREATE TABLE `product_reception_bill_item` (\r\n              `reception_bill_item_id` INT (11) UNSIGNED NOT NULL auto_increment PRIMARY KEY,\r\n              `bill_id` INT (11) UNSIGNED,\r\n              `reception_item_id` INT (11) UNSIGNED,\r\n              `quantity` INT (11) UNSIGNED,\r\n              `unit_price` DECIMAL  (12,5)\r\n            ) /*! ENGINE=MyISAM */;";
     $this->addQuery($query);
     $query = "ALTER TABLE `product_reception_bill_item` \r\n              ADD INDEX (`bill_id`),\r\n              ADD INDEX (`reception_item_id`);";
     $this->addQuery($query);
     $this->makeRevision("1.23");
     $query = "ALTER TABLE `product` ADD `auto_dispensed` ENUM ('0','1') DEFAULT '0';";
     $this->addQuery($query);
     $this->makeRevision("1.24");
     $query = "ALTER TABLE `product_order` \r\n              ADD `object_id` INT (11) UNSIGNED,\r\n              ADD `object_class` VARCHAR (255);";
     $this->addQuery($query);
     $query = "ALTER TABLE `product_order`\r\n              ADD INDEX (`object_id`),\r\n              ADD INDEX (`object_class`)";
     $this->addQuery($query);
     $this->makeRevision("1.25");
     $query = "ALTER TABLE `product_delivery` \r\n              CHANGE `service_id` `service_id` INT (11) UNSIGNED NULL";
     $this->addQuery($query);
     $this->makeRevision("1.26");
     $query = "ALTER TABLE `product_delivery` ADD `manual` ENUM ('0','1') DEFAULT '0';";
     $this->addQuery($query);
     $query = "UPDATE `product_delivery` SET `manual` = '1' WHERE \r\n              `service_id` IS NULL OR \r\n              `service_id` = '' OR \r\n              `service_id` = '0'";
     $this->addQuery($query);
     $this->makeRevision("1.27");
     $query = "ALTER TABLE `product_stock_group` CHANGE `quantity` `quantity` INT( 11 ) NOT NULL";
     $this->addQuery($query);
     $this->makeRevision("1.29");
     $query = "ALTER TABLE `product` ADD `scc_code` BIGINT (10) UNSIGNED ZEROFILL";
     $this->addQuery($query);
     $query = "ALTER TABLE `product` ADD INDEX (`scc_code`)";
     $this->addQuery($query);
     $query = "ALTER TABLE `societe` ADD `manufacturer_code` INT (5) UNSIGNED ZEROFILL";
     $this->addQuery($query);
     $query = "ALTER TABLE `societe` ADD INDEX (`manufacturer_code`)";
     $this->addQuery($query);
     $this->makeRevision("1.30");
     $query = "ALTER TABLE `product_order` ADD `bill_number` VARCHAR (64)";
     $this->addQuery($query);
     $this->makeRevision("1.31");
     $query = "ALTER TABLE `product` ADD `code_canonical` VARCHAR (32) AFTER `code`";
     $this->addQuery($query);
     $query = "ALTER TABLE `product` ADD INDEX (`code_canonical`)";
     $this->addQuery($query);
     $chars = str_split('-+*/\\\'\\"$_\\.\\ -()[]&|#@%!?;,:=`~');
     $query = "UPDATE `product` SET `code_canonical` = " . CMySQLDataSource::getReplaceQuery($chars, "", '`code`');
     $this->addQuery($query);
     $this->makeRevision("1.32");
     $query = "ALTER TABLE `product_reception` \r\n              ADD `locked` ENUM ('0','1') NOT NULL DEFAULT '0';";
     $this->addQuery($query);
     $this->makeRevision("1.33");
     $query = "ALTER TABLE `product_order_item` ADD `lot_id` INT (11) UNSIGNED";
     $this->addQuery($query);
     $query = "ALTER TABLE `product_order_item` ADD INDEX (`lot_id`)";
     $this->addQuery($query);
     $this->makeRevision("1.34");
     $query = "ALTER TABLE `product_order_item` ADD `renewal` ENUM ('0','1') NOT NULL DEFAULT '1'";
     $this->addQuery($query);
     $query = "ALTER TABLE `product_order_item` ADD INDEX (`renewal`)";
     $this->addQuery($query);
     $this->makeRevision("1.35");
     $query = "ALTER TABLE `product_order_item` ADD `septic` ENUM ('0','1') NOT NULL DEFAULT '0'";
     $this->addQuery($query);
     $query = "ALTER TABLE `product_order_item` ADD INDEX (`septic`)";
     $this->addQuery($query);
     $this->makeRevision("1.36");
     $query = "ALTER TABLE `product_order_item` ADD `tva` FLOAT";
     $this->addQuery($query);
     $query = "UPDATE `product_order_item` \r\n              LEFT JOIN `product_reference` ON `product_reference`.`reference_id` = `product_order_item`.`reference_id`\r\n              SET `product_order_item`.`tva` = `product_reference`.`tva`";
     $this->addQuery($query);
     $this->makeRevision("1.37");
     $query = "ALTER TABLE `product` CHANGE `scc_code` `scc_code` VARCHAR( 10 )";
     $this->addQuery($query);
     $this->makeRevision("1.38");
     $query = "ALTER TABLE `product_order_item_reception` \r\n              ADD `cancelled` ENUM ('0','1') NOT NULL DEFAULT '0';";
     $this->addQuery($query);
     $this->makeRevision("1.39");
     $query = "ALTER TABLE `product_delivery` \r\n              ADD `type` ENUM ('other','expired','breakage','loss','gift','discrepancy','notused','toomany');";
     $this->addQuery($query);
     $query = "ALTER TABLE `product_delivery` ADD INDEX (`type`)";
     $this->addQuery($query);
     $this->makeRevision("1.40");
     $query = "ALTER TABLE `product_stock_location` \r\n              ADD `object_class` VARCHAR (255) NOT NULL,\r\n              ADD `object_id` INT (11) UNSIGNED NOT NULL;";
     $this->addQuery($query);
     $query = "ALTER TABLE `product_stock_location` \r\n              ADD INDEX (`object_class`),\r\n              ADD INDEX (`object_id`);";
     $this->addQuery($query);
     $query = "UPDATE `product_stock_location` SET\r\n              `object_class` = 'CGroups'";
     $this->addQuery($query);
     $query = "UPDATE `product_stock_location` SET\r\n              `object_id` = `product_stock_location`.`group_id`";
     $this->addQuery($query);
     $query = "ALTER TABLE `product_stock_service` \r\n              ADD `location_id` INT (11) UNSIGNED;";
     $this->addQuery($query);
     $query = "ALTER TABLE `product_stock_service` \r\n              ADD INDEX (`location_id`);";
     $this->addQuery($query);
     $this->makeRevision("1.41");
     $query = "UPDATE `product_stock_location` SET\r\n              `object_class` = 'CGroups' WHERE `object_class` = ''";
     $this->addQuery($query);
     $query = "ALTER TABLE `product_delivery` \r\n              CHANGE `service_id` `service_id` INT( 11 ) UNSIGNED NULL DEFAULT NULL;";
     $this->addQuery($query);
     $query = "UPDATE `product_delivery` \r\n              SET `product_delivery`.`service_id` = NULL WHERE `product_delivery`.`service_id` = 0;";
     $this->addQuery($query);
     $query = "UPDATE `product` \r\n              SET `product`.`quantity` = 1 WHERE `product`.`quantity` = 0;";
     $this->addQuery($query);
     $this->makeRevision("1.42");
     $query = "ALTER TABLE `product_delivery` \r\n              ADD `stock_class` VARCHAR (80) NOT NULL AFTER `stock_id`";
     $this->addQuery($query);
     $query = "ALTER TABLE `product_delivery` \r\n              ADD INDEX (`stock_class`)";
     $this->addQuery($query);
     $query = "UPDATE `product_delivery` \r\n              SET `stock_class` = 'CProductStockGroup'";
     $this->addQuery($query);
     $this->makeRevision("1.43");
     $query = "ALTER TABLE `product_delivery_trace` \r\n              ADD `target_location_id` INT (11) UNSIGNED;";
     $this->addQuery($query);
     $query = "ALTER TABLE `product_delivery_trace` \r\n              ADD INDEX (`target_location_id`)";
     $this->addQuery($query);
     // creation des emplacements par defaut pour chaque service et etablissement
     // Emplacements de CGroups
     $this->makeRevision("1.44");
     $query = "INSERT INTO product_stock_location (\r\n       name, position, group_id, object_class, object_id\r\n    ) SELECT 'Lieu par défaut', 1, groups_mediboard.group_id, 'CGroups', groups_mediboard.group_id \r\n      FROM groups_mediboard";
     $this->addQuery($query);
     // Emplacements de CService
     $this->addDependency("dPhospi", "0.16");
     $query = "INSERT INTO product_stock_location (\r\n       name, position, group_id, object_class, object_id\r\n    ) SELECT 'Lieu par défaut', 1, service.group_id, 'CService', service.service_id \r\n      FROM service";
     $this->addQuery($query);
     // Association des emplacements aux stocks sans emplacement
     $query = "UPDATE `product_stock_group` SET `location_id` = (\r\n       SELECT `product_stock_location`.`stock_location_id` \r\n       FROM `product_stock_location` \r\n       WHERE \r\n         `product_stock_group`.`group_id` = `product_stock_location`.`object_id` AND\r\n         `product_stock_location`.`object_class` = 'CGroups' AND\r\n         `product_stock_location`.`position` = 1 AND\r\n         `product_stock_location`.`name` = 'Lieu par défaut'\r\n       LIMIT 1\r\n    ) WHERE`product_stock_group`.`location_id` IS NULL";
     $this->addQuery($query);
     $query = "UPDATE `product_stock_service` SET `location_id` = (\r\n       SELECT `product_stock_location`.`stock_location_id` \r\n       FROM `product_stock_location` \r\n       WHERE \r\n         `product_stock_service`.`service_id` = `product_stock_location`.`object_id` AND\r\n         `product_stock_location`.`object_class` = 'CService' AND\r\n         `product_stock_location`.`position` = 1 AND\r\n         `product_stock_location`.`name` = 'Lieu par défaut'\r\n       LIMIT 1\r\n    ) WHERE `product_stock_service`.`location_id` IS NULL";
     $this->addQuery($query);
     $query = "ALTER TABLE `product_stock_group` \r\n              CHANGE `location_id` `location_id` INT (11) UNSIGNED NOT NULL;";
     $this->addQuery($query);
     $query = "ALTER TABLE `product_stock_service` \r\n              CHANGE `location_id` `location_id` INT (11) UNSIGNED NOT NULL;";
     $this->addQuery($query);
     //ALTER TABLE `product_delivery_trace` CHANGE `code` `code` CHAR( 40 ) NULL;
     //ALTER TABLE `product_order_item_reception` CHANGE `code` `code` CHAR( 40 ) NULL;
     //ALTER TABLE `product_reference`
     // CHANGE `code` `code` CHAR( 20 ) NULL,
     // CHANGE `supplier_code` `supplier_code` CHAR( 40 ) NULL;
     //ALTER TABLE `product_reception` CHANGE `reference` `reference` CHAR( 40 ) NOT NULL;
     $this->makeRevision("1.45");
     // CProductOrderItemReception
     $query = "ALTER TABLE `product_order_item_reception` \r\n              ADD `units_fixed` ENUM ('0','1') DEFAULT '1',\r\n              ADD `orig_quantity` INT (11);";
     $this->addQuery($query);
     $query = "UPDATE `product_order_item_reception` SET \r\n              `orig_quantity` = `quantity`,\r\n              `units_fixed` = '0'";
     $this->addQuery($query);
     // CProductOrderItem
     $query = "ALTER TABLE `product_order_item` \r\n              CHANGE `unit_price` `unit_price` DECIMAL (12,5),\r\n              ADD `units_fixed` ENUM ('0','1') DEFAULT '1',\r\n              ADD `orig_quantity` INT (11),\r\n              ADD `orig_unit_price` DECIMAL (12,5);";
     $this->addQuery($query);
     $query = "UPDATE `product_order_item` SET \r\n              `orig_quantity` = `quantity`,\r\n              `orig_unit_price` = `unit_price`,\r\n              `units_fixed` = '0'";
     $this->addQuery($query);
     // CProductReference
     $query = "ALTER TABLE `product_reference` \r\n              CHANGE `price` `price` DECIMAL (12,5) NOT NULL,\r\n              ADD `units_fixed` ENUM ('0','1') DEFAULT '1',\r\n              ADD `orig_quantity` INT (11),\r\n              ADD `orig_price` DECIMAL (12,5);";
     $this->addQuery($query);
     $query = "UPDATE `product_reference` SET \r\n              `units_fixed` = '0',\r\n              `orig_quantity` = `quantity`,\r\n              `orig_price` = `price`";
     $this->addQuery($query);
     $query = "UPDATE `product_reference` \r\n              LEFT JOIN `product` ON `product_reference`.`product_id` = `product`.`product_id`\r\n              SET \r\n              `product_reference`.`price` = `product_reference`.`orig_price` / ( `product`.`quantity` * `product_reference`.`orig_quantity`),\r\n              `product_reference`.`quantity` = `product_reference`.`orig_quantity` * `product`.`quantity`";
     $this->addQuery($query);
     $this->makeRevision("1.46");
     $query = "ALTER TABLE `product` CHANGE `classe_comptable` `classe_comptable` INT (9) UNSIGNED";
     $this->addQuery($query);
     $query = "UPDATE `product` SET `classe_comptable` = RPAD(`classe_comptable`, 9, '0')\r\n              WHERE LENGTH(`classe_comptable`) < 9";
     $this->addQuery($query);
     $this->makeRevision("1.47");
     $query = "ALTER TABLE `product_stock_service` \r\n              ADD `object_class` CHAR (80) NOT NULL AFTER `object_id`,\r\n              CHANGE `service_id` `object_id` INT (11) UNSIGNED NOT NULL";
     $this->addQuery($query);
     $query = "ALTER TABLE `product_stock_service` \r\n              ADD INDEX (`object_id`)";
     $this->addQuery($query);
     $query = "UPDATE `product_stock_service` SET \r\n              `object_class` = 'CService'";
     $this->addQuery($query);
     $this->makeRevision("1.48");
     $query = "ALTER TABLE `product_delivery` \r\n              ADD `datetime_min` DATETIME NOT NULL,\r\n              ADD `datetime_max` DATETIME NOT NULL";
     $this->addQuery($query);
     $query = "UPDATE `product_delivery` SET \r\n              `datetime_min` = `date_dispensation`,\r\n              `datetime_max` = ADDDATE(`date_dispensation`, 1)";
     $this->addQuery($query);
     $this->makeRevision("1.49");
     $query = "ALTER TABLE `product` \r\n              ADD `cladimed` VARCHAR (7);";
     $this->addQuery($query);
     $this->makeRevision("1.50");
     $query = "ALTER TABLE `product_order_item_reception` \r\n              ADD `serial` CHAR (40) AFTER `code`";
     $this->addQuery($query);
     $this->makeRevision("1.51");
     $query = "ALTER TABLE `product_delivery` \r\n              ADD INDEX (`datetime_min`),\r\n              ADD INDEX (`datetime_max`)";
     $this->addQuery($query);
     $query = "ALTER TABLE `product_delivery` \r\n              CHANGE `quantity` `quantity` FLOAT NOT NULL";
     $this->addQuery($query);
     $query = "ALTER TABLE `product_delivery_trace` \r\n              CHANGE `quantity` `quantity` FLOAT NOT NULL";
     $this->addQuery($query);
     $query = "ALTER TABLE `product_stock_service` \r\n              CHANGE `quantity` `quantity` FLOAT NOT NULL";
     $this->addQuery($query);
     $query = "ALTER TABLE `product_stock_group` \r\n              CHANGE `quantity` `quantity` FLOAT NOT NULL";
     $this->addQuery($query);
     $this->makeRevision("1.52");
     $query = "ALTER TABLE `product_reception` \r\n              ADD `bill_number` VARCHAR (64),\r\n              ADD `bill_date` DATE;";
     $this->addQuery($query);
     $query = "ALTER TABLE `product_reception` \r\n              ADD INDEX (`bill_date`);";
     $this->addQuery($query);
     $this->makeRevision("1.53");
     $query = "ALTER TABLE `societe` \r\n                CHANGE `fax` `fax` VARCHAR (20);";
     $this->addQuery($query);
     $this->makeRevision("1.54");
     $query = "ALTER TABLE `product_delivery` \r\n                ADD `endowment_quantity` FLOAT,\r\n                ADD `endowment_item_id` INT (11) UNSIGNED,\r\n                ADD `comments_deliver` TEXT AFTER `comments`";
     $this->addQuery($query);
     $query = "ALTER TABLE `product_delivery` \r\n                ADD INDEX (`endowment_item_id`)";
     $this->addQuery($query);
     $query = "ALTER TABLE `product_endowment_item` \r\n                ADD `cancelled` ENUM ('0','1') NOT NULL DEFAULT '0';";
     $this->addQuery($query);
     $this->makeRevision("1.55");
     $query = "ALTER TABLE `product_delivery`\r\n                ADD `sejour_id` INT (11) UNSIGNED AFTER `patient_id`;";
     $this->addQuery($query);
     $query = "ALTER TABLE `product_delivery`\r\n                ADD INDEX (`sejour_id`);";
     $this->addQuery($query);
     // Add address_id to CProductOrder
     $this->makeRevision("1.56");
     $query = "ALTER TABLE `product_order`\r\n                ADD `address_id` INT (11) UNSIGNED NOT NULL DEFAULT '0',\r\n                ADD `address_class` VARCHAR(80) NOT NULL;";
     $this->addQuery($query);
     // Adresse = pharmacie
     $query = "UPDATE `product_order`\r\n                SET `address_id` = (\r\n                  SELECT `pharmacie_id`\r\n                  FROM `groups_mediboard`\r\n                  WHERE `group_id` = `product_order`.`group_id`\r\n                  LIMIT 1\r\n                )";
     $this->addQuery($query);
     $query = "UPDATE `product_order`\r\n                SET `address_class` = 'CFunctions'\r\n                WHERE `address_id` != 0";
     $this->addQuery($query);
     // Adresse = Etablissement
     $query = "UPDATE `product_order`\r\n                SET\r\n                  `address_id` = `product_order`.`group_id`,\r\n                  `address_class` = 'CGroups'\r\n                WHERE `address_id` = 0";
     $this->addQuery($query);
     $this->makeRevision("1.57");
     $query = "ALTER TABLE `product_delivery`\r\n                ADD `preparateur_id` INT (11) UNSIGNED;";
     $this->addQuery($query);
     $query = "ALTER TABLE `product_delivery_trace`\r\n                ADD `preparateur_id` INT (11) UNSIGNED;";
     $this->addQuery($query);
     $this->mod_version = "1.58";
 }
 /**
  * Load the CSejour to send from the linked CService objects
  *
  * @param CService[] $linked_objects The linked CService objects
  *
  * @return CSejour[]
  */
 protected static function loadSejoursFromLinkedObjects($linked_objects)
 {
     $services = array();
     foreach ($linked_objects as $_linked_object) {
         $services[] = $_linked_object->object_id;
     }
     $sejour = new CSejour();
     $ljoin = array('affectation' => 'affectation.sejour_id = sejour.sejour_id');
     $date = CMbDT::date();
     $where = array('affectation.entree' => " <= '{$date} 23:59:59'", 'affectation.sortie' => " >= '{$date} 00:00:00'", 'affectation.service_id' => CMySQLDataSource::prepareIn($services), 'affectation.effectue' => " = '0'", 'sejour.type' => " != 'exte'", 'sejour.annule' => " = '0'");
     $sejours = $sejour->loadList($where, null, null, array('sejour.sejour_id'), $ljoin);
     $ljoin = array('affectation' => 'sejour.sejour_id = affectation.sejour_id');
     $where = array('sejour.group_id' => " = '" . CGroups::loadCurrent()->_id . "'", 'sejour.entree_prevue' => " <= '{$date} 23:59:59'", 'sejour.sortie_prevue' => " >= '{$date} 00:00:00'", 'sejour.type' => " != 'exte'", 'sejour.annule' => " = '0'", 'affectation.affectation_id' => ' IS NULL');
     $sejours = array_merge($sejours, $sejour->loadList($where, null, null, array('sejour.sejour_id'), $ljoin));
     CMbObject::massLoadFwdRef($sejours, 'patient_id');
     CMbObject::massLoadFwdRef($sejours, 'praticien_id');
     return $sejours;
 }