%PDF- %PDF-
| Direktori : /home/bitrix/www/bitrix/modules/sale/lib/internals/ |
| Current File : /home/bitrix/www/bitrix/modules/sale/lib/internals/orderarchive.php |
<?php
/**
* Bitrix Framework
* @package bitrix
* @subpackage sale
* @copyright 2001-2016 Bitrix
*/
namespace Bitrix\Sale\Internals;
use Bitrix\Main;
use Bitrix\Sale;
class OrderArchiveTable extends Main\Entity\DataManager
{
/**
* Returns DB table name for entity.
*
* @return string
*/
public static function getTableName()
{
return 'b_sale_order_archive';
}
/**
* Returns entity map definition.
*
* @return array
*/
public static function getMap()
{
return array(
new Main\Entity\IntegerField(
'ID',
array(
'autocomplete' => true,
'primary' => true,
)
),
new Main\Entity\StringField(
'LID',
array(
'required' => true,
)
),
new Main\Entity\IntegerField(
'ORDER_ID',
array(
'required' => true,
)
),
new Main\Entity\StringField(
'ACCOUNT_NUMBER',
array(
'size' => 100,
'required' => true,
)
),
new Main\Entity\StringField(
'USER_ID',
array(
'required' => true,
)
),
new Main\Entity\ReferenceField(
'USER',
'\Bitrix\Main\User',
array('=this.USER_ID' => 'ref.ID'),
array('join_type' => 'INNER')
),
new Main\Entity\StringField(
'PERSON_TYPE_ID',
array(
'required' => true,
)
),
new Main\Entity\StringField('STATUS_ID'),
new Main\Entity\ReferenceField(
'STATUS',
'Bitrix\Sale\Internals\StatusLang',
array(
'=this.STATUS_ID' => 'ref.STATUS_ID',
'=ref.LID' => array('?', LANGUAGE_ID)
)
),
new Main\Entity\BooleanField(
'PAYED',
array(
'values' => array('N', 'Y')
)
),
new Main\Entity\BooleanField(
'DEDUCTED',
array(
'values' => array('N','Y')
)
),
new Main\Entity\BooleanField(
'CANCELED',
array(
'values' => array('N', 'Y')
)
),
new Main\Entity\FloatField(
'PRICE',
array(
'default_value' => '0.0000'
)
),
new Main\Entity\FloatField(
'SUM_PAID',
array(
'default_value' => '0.0000'
)
),
new Main\Entity\StringField(
'CURRENCY',
array(
'required' => true,
'size' => 3
)
),
new Main\Entity\IntegerField(
'VERSION',
array(
'required' => true,
)
),
new Main\Entity\IntegerField('XML_ID'),
new Main\Entity\IntegerField('ID_1C'),
new Main\Entity\DatetimeField('DATE_ARCHIVED'),
new Main\Entity\DatetimeField('DATE_INSERT'),
new Main\Entity\IntegerField('RESPONSIBLE_ID'),
new Main\Entity\IntegerField('COMPANY_ID'),
new Main\Entity\StringField('ORDER_DATA'),
new Main\Entity\ReferenceField(
'ORDER_PACKED',
'Bitrix\Sale\Internals\OrderArchivePacked',
array('=this.ID' => 'ref.ORDER_ARCHIVE_ID'),
array('join_type' => 'INNER')
)
);
}
/**
* Adds row to entity table
*
* @param array $data An array with fields like
* array(
* "fields" => array(
* "FIELD1" => "value1",
* "FIELD2" => "value2",
* ),
* "auth_context" => \Bitrix\Main\Authentication\Context object
* )
* or just a plain array of fields.
*
* @return Main\Entity\AddResult Contains ID of inserted row
*
* @throws \Exception
*/
public static function add(array $data)
{
$orderData = $data['ORDER_DATA'];
unset($data['ORDER_DATA']);
$result = parent::add($data);
if ($result->isSuccess())
{
OrderArchivePackedTable::add(array(
"ORDER_ARCHIVE_ID" => $result->getId(),
"ORDER_DATA" => $orderData
));
}
return $result;
}
/**
* Deletes row in entity table by primary key
*
* @param mixed $primary
*
* @return Main\Entity\DeleteResult
*
* @throws \Exception
*/
public static function delete($primary)
{
$result = parent::delete($primary);
if ($result->isSuccess())
{
$checkOrderData = OrderArchivePackedTable::getById($primary);
if ($checkOrderData->fetch())
{
OrderArchivePackedTable::delete($primary);
}
}
return $result;
}
/**
* Renew table records from serialized data.
*
* @param array $filter. Filter for selection updating entries.
*
* @return Main\Result
*/
public static function renew(array $filter = array())
{
$result = new Main\Result();
$parameters = array("select" => array('ID'));
if (!empty($filter))
$parameters['filter'] = $filter;
$idList = array();
$archivedOrderData = self::getList($parameters);
while ($archiveRow = $archivedOrderData->fetch())
{
$idList[] = $archiveRow['ID'];
}
if (empty($idList))
return $result;
$idListChunk = array_chunk($idList, 1000);
foreach ($idListChunk as $chunk)
{
$packedData = OrderArchivePackedTable::getList(array(
"filter" => array("ORDER_ARCHIVE_ID" => $chunk)
));
while ($packed = $packedData->fetch())
{
$orderData = unserialize($packed['ORDER_DATA']);
if (is_array($orderData['ORDER']))
{
$preparedOrderData = array_intersect_key($orderData['ORDER'], array_flip(Sale\Archive\Manager::getOrderFieldNames()));
$result = self::update($packed['ORDER_ARCHIVE_ID'], $preparedOrderData);
if (!$result->isSuccess())
return $result;
}
}
}
return $result;
}
}