Синхронизация остатков по нескольким складам для дополнения mSync 1.1.0

Добрый день!
Может делал кто плагин для выгрузки остатков из 1с по нескольким складам?
Станислав
22 октября 2018, 15:31
1
89
0

Комментарии: 3

Станислав
22 октября 2018, 15:45
0
есть вот такой плагин на событие mSyncBeforeProductOffers но он не работает
<?php
/**
   * @var modX             $modx
   * @var msProduct        $resource
   * @var SimpleXMLElement $xml
   * */

// опция - склад
$stockStore = [
    'butovo_count' => 'Бутово',
    'postav_count' => 'Склад поставщик',
    'osn_count'    => 'Основной склад',
    'jelezo_count' => 'Планета Железяка',
];

if ($modx->event->name === 'mSyncOnProductOffers') {
    /** @var array $scriptProperties */
    /** @var Sync $Sync */
    $corePath = $modx->getOption('sync_core_path', null,
        $modx->getOption('core_path', null, MODX_CORE_PATH) . 'components/msync/');
    if (!$Sync = $modx->getService('msync', 'mSync', $corePath . 'model/msync/',
        ['core_path' => $corePath])
    ) {
        return;
    }
    $service = 'msync';
    if (!$Sync->loadSyncTools($service)) {
        return;
    }

    /** @var xPDOObject $object */
    $object = $modx->getOption('object', $scriptProperties, null, true);
    if (!$object OR !$Sync->isSyncObject($object, $service)) {
        return;
    }
    $syncType = $object->get('sync_type');
    $syncAction = $object->get('sync_action');
    $syncData = $object->get('sync_data');
    if ($syncType === 'product' AND $syncAction === 'import') {
        $response = $Sync->SyncTools->getData(['stock', 'bystore'], ['product.id=' . $object->get('sync_id'), 'groupBy' => 'variant']);
        if ($response->isSuccessful()) {
            $tmp = $response->getResponseBody();
            $tmp = isset($tmp['rows']) ? $tmp['rows'] : [];
            $tmp = reset($tmp);
            $tmp = isset($tmp['stockByStore']) ? $tmp['stockByStore'] : [];
            $keys = array_flip($stockStore);
            foreach ($tmp as $row) {
                if (in_array($row['name'], $stockStore)) {
                    $syncData[$keys[$row['name']]] = $row['stock'];
                }
            }
            $object->set('sync_data', $syncData);
        }
    }
}


if ($modx->event->name === 'OnBeforeDocFormSave') {
    if (!$syncData = $resource->get('sync_data')) {
        return;
    }
    foreach ($stockStore as $k => $v) {
        if (isset($syncData[$k])) {
            $resource->set($k, $syncData[$k]);
        }
    }
}
    Володя
    22 октября 2018, 16:10
    0
    Это код плагина для другого компонента. Естественно с компонентом mSync он не будет работать.
Станислав
22 октября 2018, 16:16
0
Да для мой склад(ваш компонент, вы же его и исправляли не так давно), как то его надо поменять, но с синтаксисом проблема, может конечно он совсем не подходит