CREATE TABLE bill_data_$mid
(
	id int(10) NOT NULL auto_increment, 
    cid int(10) NOT NULL,
    type int(11) NOT NULL,
    account_id int(11) NOT NULL,
	npid INTEGER DEFAULT 1,
    number int(11) NOT NULL,
    number_in_month int(11) NOT NULL,
    number_in_year int(11) NOT NULL,
    format_number varchar(15) NOT NULL,
    uid int(11) NOT NULL,
    yy int(11) NOT NULL,
    mm int(11) NOT NULL,
    create_dt date,
    pay_dt date,
    status tinyint(2) NOT NULL,
    unload_status int(11) NOT NULL, 
    summ decimal(12,2) NOT NULL, 
    xml MEDIUMBLOB NOT NULL, 
    PRIMARY KEY id (id), 
    KEY cid (cid), 
    KEY create_dt (create_dt),
    KEY yy(yy),
    KEY mm(mm),
    KEY (npid,number),
    KEY (npid,number_in_month),
    KEY (npid,number_in_year)
);

CREATE TABLE bill_invoice_data_$mid
(
	id int(10) NOT NULL auto_increment,
    cid int(10) NOT NULL,
    type int(11) NOT NULL,
    number int(11) NOT NULL,
    number_in_month int(11) NOT NULL,
    number_in_year int(11) NOT NULL,
    format_number varchar(15) NOT NULL,
    yy int(11) NOT NULL,
    mm int(11) NOT NULL,
    create_dt date,
    unload_status int(11) NOT NULL, 
    summ decimal(12,2) NOT NULL,
    show_ready TINYINT NOT NULL, 
    xml MEDIUMBLOB NOT NULL, 
    PRIMARY KEY id (id), 
    KEY cid (cid), 
    KEY create_dt (create_dt),
    KEY yy (yy),
    KEY mm (mm)
);

CREATE TABLE bill_attribute_$mid 
(
	id int(10) NOT NULL auto_increment,
	cid int(10) NOT NULL, 
    name varchar(255) NOT NULL, 
	value varchar(255) NOT NULL,
    start date, 
    end date,
	PRIMARY KEY id (id), 
    KEY cid (cid)
);

CREATE TABLE IF NOT EXISTS `bill_account_$mid` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `org_id` int(11) NOT NULL DEFAULT 0,
  `title` varchar(255) NOT NULL DEFAULT '',
  `bank_title` varchar(255) NOT NULL DEFAULT '',
  `account` varchar(30) NOT NULL DEFAULT '',
  `bik` varchar(30) NOT NULL DEFAULT '',
  `corr_account` varchar(30) NOT NULL DEFAULT '',
  `pid` int(11) NOT NULL DEFAULT 0,
  `gr` bigint(20) NOT NULL DEFAULT 0,
  `comment` text DEFAULT NULL,
  `default_account` tinyint(1) NOT NULL DEFAULT 0,
  `in_use` tinyint(1) NOT NULL DEFAULT 1,
  PRIMARY KEY (`id`)
);

CREATE TABLE bill_contract_doc_type_$mid
(
	id int(11) NOT NULL auto_increment,
    cid int(11) NOT NULL default '0',
    doc_type int(11) NOT NULL default '0',
    PRIMARY KEY  (id),
    KEY cid (cid)
);

CREATE TABLE bill_doc_type_$mid
(
	id int(11) NOT NULL auto_increment,
    type tinyint(4) NOT NULL default '0',
    title varchar(200) NOT NULL default '',
    pos_list varchar(100) NOT NULL default '',
    comment varchar(250) NOT NULL default '',
    PRIMARY KEY (id) 
);

CREATE TABLE IF NOT EXISTS `bill_link_$mid` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` char(10) NOT NULL DEFAULT '',
  `user_id` int(11) NOT NULL DEFAULT 0,
  `lm` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  `data` text NOT NULL DEFAULT '',
  PRIMARY KEY (`id`)
);

CREATE TABLE IF NOT EXISTS `bill_link_doc_$mid` (
  `link_datetime` bigint(20) NOT NULL DEFAULT 0,
  `link_secret` char(10) NOT NULL DEFAULT '',
  `link_id` int(11) NOT NULL DEFAULT 0,
  `doc_type` tinyint(4) NOT NULL DEFAULT 0,
  `doc_id` int(11) NOT NULL DEFAULT 0,
  PRIMARY KEY (`link_datetime`,`link_secret`)
);

CREATE TABLE IF NOT EXISTS `bill_organization_$mid` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL DEFAULT '',
  `comment` varchar(255) NOT NULL DEFAULT '',
  `data` text NOT NULL,
  `default_org` tinyint(1) NOT NULL DEFAULT 0,
  `in_use` tinyint(1) NOT NULL DEFAULT 0,
  PRIMARY KEY (`id`)
);

CREATE TABLE IF NOT EXISTS `bill_position_$mid` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL,
  `data` text NOT NULL,
  PRIMARY KEY (`id`)
);

CREATE TABLE IF NOT EXISTS `bill_invoice_position_$mid` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL,
  `data` text NOT NULL,
  PRIMARY KEY (`id`)
);

ALTER TABLE bill_invoice_data_$mid ADD show_ready TINYINT NOT NULL AFTER summ;

ALTER TABLE bill_data_$mid ADD `type` INT NOT NULL DEFAULT '0';
ALTER TABLE bill_invoice_data_$mid ADD `type` INT NOT NULL DEFAULT '0';
ALTER TABLE bill_doc_type_$mid ADD pattern VARCHAR(200)  NOT NULL AFTER title;

ALTER TABLE bill_doc_type_$mid ADD opt TINYINT NOT NULL AFTER pos_list;

ALTER TABLE bill_data_$mid change xml xml MEDIUMBLOB NOT NULL;
ALTER TABLE bill_invoice_data_$mid change xml xml MEDIUMBLOB NOT NULL;

ALTER TABLE bill_data_$mid MODIFY summ DECIMAL(12,2) NOT NULL;
ALTER TABLE bill_invoice_data_$mid MODIFY summ DECIMAL(12,2) NOT NULL;
ALTER TABLE bill_doc_type_$mid ADD setup TEXT;
ALTER TABLE `bill_data_$mid` ADD COLUMN `payment_id` INTEGER  NOT NULL;
ALTER TABLE bill_doc_type_$mid MODIFY COLUMN pos_list TEXT NOT NULL;

ALTER TABLE bill_doc_type_$mid ADD COLUMN npid INTEGER DEFAULT 1;
UPDATE bill_doc_type_$mid SET npid=2 WHERE type=2;
ALTER TABLE bill_data_$mid ADD COLUMN npid INTEGER DEFAULT 1;
ALTER TABLE bill_invoice_data_$mid ADD COLUMN npid INTEGER DEFAULT 2;

-- #BLOCK#
CREATE TABLE bill_numeration_pool_$mid
(
  id int(11) NOT NULL AUTO_INCREMENT,
  title varchar(50) DEFAULT NULL,
  pattern varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
);
INSERT INTO bill_numeration_pool_$mid(title, pattern) VALUES('По умолчанию (счета)', '');
INSERT INTO bill_numeration_pool_$mid(title, pattern) VALUES('По умолчанию (счета-фактуры)', '');
-- #ENDB#

ALTER TABLE bill_data_$mid MODIFY format_number VARCHAR(30) NOT NULL;
ALTER TABLE bill_invoice_data_$mid MODIFY format_number VARCHAR(30) NOT NULL;

ALTER TABLE bill_data_$mid	ADD COLUMN pay_uid int(11) NULL;

ALTER TABLE bill_invoice_data_$mid	ADD COLUMN uid int(11) NOT NULL AFTER format_number;

CREATE TABLE IF NOT EXISTS `bill_attribute_type_$mid` 
(
  `id` INT NOT NULL auto_increment,
  `name` VARCHAR(45) NOT NULL,
  `title` VARCHAR(45) NOT NULL,
  `check` VARCHAR(90) NULL,
  PRIMARY KEY (`id`),
  UNIQUE INDEX `name_UNIQUE` (`name`)
);

ALTER TABLE `bill_doc_type_$mid` ADD COLUMN `xmlConsist` MEDIUMTEXT NULL AFTER `npid`;
ALTER TABLE `bill_data_$mid` ADD INDEX `number`(`number`), ADD INDEX `number_in_month`(`number_in_month`), ADD INDEX `number_in_year`(`number_in_year`), ADD INDEX `npid`(`npid`);
ALTER TABLE `bill_invoice_data_$mid` ADD INDEX `number`(`number`), ADD INDEX `number_in_month`(`number_in_month`), ADD INDEX `number_in_year`(`number_in_year`), ADD INDEX `npid`(`npid`);
ALTER TABLE `bill_account_$mid` ADD COLUMN `default_account` tinyint(1) NOT NULL DEFAULT 0;
ALTER TABLE `bill_account_$mid` ADD COLUMN `in_use` tinyint(1) NOT NULL DEFAULT 1;
ALTER TABLE `bill_account_$mid` ADD COLUMN `org_id` int(11) NOT NULL DEFAULT 0 AFTER `id`;
ALTER TABLE `bill_organization_$mid` CHANGE COLUMN `defaultOrg` `default_org` tinyint(1) NOT NULL DEFAULT 0;
ALTER TABLE `bill_organization_$mid` CHANGE COLUMN `inUse` `in_use` tinyint(1) NOT NULL DEFAULT 0;
ALTER TABLE `bill_organization_$mid` ADD COLUMN `comment` varchar(255) NOT NULL DEFAULT '' AFTER `title`;
ALTER TABLE `bill_data_$mid` ADD KEY (`npid`,`number`);
ALTER TABLE `bill_data_$mid` ADD KEY (`npid`,`number_in_month`);
ALTER TABLE `bill_data_$mid` ADD KEY (`npid`,`number_in_year`);

-- Пусть события идут всегда в конце
-- #BLOCK#
DELETE FROM script_event_type WHERE mid=$mid;

SET @mid=$mid, @old_event_id=1, @new_event_id='ru.bitel.bgbilling.modules.bill.server.event.BillCreatedEvent', @event_title='Создан счет';
INSERT INTO script_event_type (mid, event_id, event_mode, title) VALUES (@mid, @new_event_id, 1, @event_title);
INSERT INTO script_function_event_type(fid, mid, event_id) SELECT sfet1.fid, sfet1.mid, @new_event_id FROM script_function_event_type AS sfet1 LEFT JOIN script_function_event_type AS sfet2 ON sfet1.fid=sfet2.fid AND sfet1.mid=sfet2.mid AND sfet2.event_id=@new_event_id WHERE sfet1.mid=@mid AND sfet1.event_id=@old_event_id AND sfet2.fid IS NULL;

SET @mid=$mid, @old_event_id=2, @new_event_id='ru.bitel.bgbilling.modules.bill.server.event.InvoiceCreatedEvent', @event_title='Создан счет-фактура';
INSERT INTO script_event_type (mid, event_id, event_mode, title) VALUES (@mid, @new_event_id, 1, @event_title);
INSERT INTO script_function_event_type(fid, mid, event_id) SELECT sfet1.fid, sfet1.mid, @new_event_id FROM script_function_event_type AS sfet1 LEFT JOIN script_function_event_type AS sfet2 ON sfet1.fid=sfet2.fid AND sfet1.mid=sfet2.mid AND sfet2.event_id=@new_event_id WHERE sfet1.mid=@mid AND sfet1.event_id=@old_event_id AND sfet2.fid IS NULL;
-- #ENDB#

