Webylon 3.1 API Docs
  • Package
  • Class
  • Tree
  • Deprecated
  • Download
Version: current
  • 3.2
  • 3.1

Packages

  • auth
  • Booking
  • cart
    • shipping
    • steppedcheckout
  • Catalog
  • cms
    • assets
    • batchaction
    • batchactions
    • bulkloading
    • comments
    • content
    • core
    • export
    • newsletter
    • publishers
    • reports
    • security
    • tasks
  • Dashboard
  • DataObjectManager
  • event
  • faq
  • forms
    • actions
    • core
    • fields-basic
    • fields-dataless
    • fields-datetime
    • fields-files
    • fields-formatted
    • fields-formattedinput
    • fields-relational
    • fields-structural
    • transformations
    • validators
  • googlesitemaps
  • guestbook
  • installer
  • newsletter
  • None
  • photo
    • gallery
  • PHP
  • polls
  • recaptcha
  • sapphire
    • api
    • bulkloading
    • control
    • core
    • cron
    • dev
    • email
    • fields-formattedinput
    • filesystem
    • formatters
    • forms
    • i18n
    • integration
    • misc
    • model
    • parsers
    • search
    • security
    • tasks
    • testing
    • tools
    • validation
    • view
    • widgets
  • seo
    • open
      • graph
  • sfDateTimePlugin
  • spamprotection
  • stealth
    • captha
  • subsites
  • userform
    • pagetypes
  • userforms
  • webylon
  • widgets

Classes

  • Address
  • AddSubsiteTask
  • Announcement
  • AnnouncementDecorator
  • AnnouncementHolder
  • AssociatedFolderDecorator
  • AttachedFiles
  • AudioPhpCaptcha
  • AutoCompleteField
  • BaseMediawebImportParser
  • BookingOrder_StatusLog
  • CalendarUtil
  • CalendarWidgetExtention
  • CatalogCatalogLinkedDecorator
  • CatalogImportTask
  • CatalogOldFieldsDecorator
  • CatalogProductLinkedDecorator
  • CheckoutStep_ShippingMethod
  • ChequePayment
  • ClearHistoryTask
  • ClientEmailOrderNotification_SiteConfig
  • ClientVKOrderNotification_SiteConfig
  • CommentsSiteConfig
  • ContactsPage
  • CookieExtention
  • CostTableShippingRate
  • CustomMenu
  • CustomMenuAdmin
  • CustomMenuDecorator
  • CustomMenuHolder
  • CustomMenuItem
  • CustomPayment
  • DataObjectLoggerExtension
  • DataObjectSubsites
  • DefaultCMSActionDecorator
  • DeleteOldAssociatedFoldersTask
  • DocPage
  • DocumentDirection
  • DocumentHaving
  • DocumentSearchForm
  • DocumentSiteConfig
  • DocumentsPage
  • DocumentType
  • DOMUtil
  • ExtendPageAnnouncement
  • ExtendPageNews
  • ExtendPagePoll
  • FileOversizeDecorator
  • FindCyrillicSiteConfig
  • FolderRenameTask
  • GDMergeAlpha
  • HomePage
  • ImageAutoResize
  • ImageResizeTask
  • ImportAdmin
  • ImportAutoStartTask
  • ImportCatalogMessage
  • ImportConfig
  • ImportLog
  • ImportSiteConfig
  • ImportTask
  • LoggerAdmin
  • LogItem
  • ManagerEmailOrderNotification_SiteConfig
  • MapObject
  • MapObjectGroup
  • MapPage
  • MediawebForm
  • MediawebImportParser
  • MemberLoggerExtension
  • MultiUploadConfig
  • NearestEventExtention
  • NewDocumentsAdmin
  • News_Controller
  • NewsEntry
  • NewsEntry_Controller
  • NewsHolder
  • NewsHolder_Controller
  • NewsLiveCalendarWidget
  • NewsSiteConfig
  • Order_StatusLog
  • Orders1CExchange
  • PageHideFieldsExtension
  • PageInformerRates
  • PageInformerWeather
  • Payment_Failure
  • Payment_Processing
  • Payment_Result
  • Payment_Success
  • PaymentMethod
  • PaymentSiteConfig
  • PayPalPayment
  • PayPalPayment_Handler
  • PhoneField
  • PhotoAlbumExtentions
  • PhpCaptcha
  • PhpCaptchaColour
  • PhpCaptchaField
  • phpMorphy
  • phpMorphy_AncodesResolver_AsIs
  • phpMorphy_AncodesResolver_Proxy
  • phpMorphy_AncodesResolver_ToDialingAncodes
  • phpMorphy_AncodesResolver_ToText
  • phpMorphy_AnnotDecoder_Base
  • phpMorphy_AnnotDecoder_Common
  • phpMorphy_AnnotDecoder_Factory
  • phpMorphy_AnnotDecoder_Predict
  • phpMorphy_FilesBundle
  • phpMorphy_Fsa
  • phpMorphy_Fsa_Decorator
  • phpMorphy_Fsa_Proxy
  • phpMorphy_Fsa_Sparse_File
  • phpMorphy_Fsa_Sparse_Mem
  • phpMorphy_Fsa_Sparse_Shm
  • phpMorphy_Fsa_Tree_File
  • phpMorphy_Fsa_Tree_Mem
  • phpMorphy_Fsa_Tree_Shm
  • phpMorphy_Fsa_WordsCollector
  • phpMorphy_GramInfo
  • phpMorphy_GramInfo_AncodeCache
  • phpMorphy_GramInfo_Decorator
  • phpMorphy_Graminfo_File
  • phpMorphy_Graminfo_Mem
  • phpMorphy_GramInfo_Proxy
  • phpMorphy_GramInfo_Proxy_WithHeader
  • phpMorphy_GramInfo_RuntimeCaching
  • phpMorphy_Graminfo_Shm
  • phpMorphy_GrammemsProvider_Base
  • phpMorphy_GrammemsProvider_Decorator
  • phpMorphy_GrammemsProvider_Empty
  • phpMorphy_GrammemsProvider_Factory
  • phpMorphy_GrammemsProvider_ForFactory
  • phpMorphy_GrammemsProvider_ru_RU
  • phpMorphy_GramTab
  • phpMorphy_GramTab_Empty
  • phpMorphy_GramTab_Proxy
  • phpMorphy_Link
  • phpMorphy_Link_Annot
  • phpMorphy_Link_Base
  • phpMorphy_Morphier_Base
  • phpMorphy_Morphier_Bulk
  • phpMorphy_Morphier_Common
  • phpMorphy_Morphier_Empty
  • phpMorphy_Morphier_Finder_Base
  • phpMorphy_Morphier_Finder_Common
  • phpMorphy_Morphier_Finder_Predict_Databse
  • phpMorphy_Morphier_Finder_Predict_Suffix
  • phpMorphy_Morphier_Helper
  • phpMorphy_Morphier_Predict_Database
  • phpMorphy_Morphier_Predict_Suffix
  • phpMorphy_Morphier_PredictCollector
  • phpMorphy_Semaphore
  • phpMorphy_Semaphore_Empty
  • phpMorphy_Semaphore_Nix
  • phpMorphy_Semaphore_Win
  • phpMorphy_Shm_Cache
  • phpMorphy_Shm_Cache_FileDescriptor
  • phpMorphy_Shm_Header
  • phpMorphy_Source_Dba
  • phpMorphy_Source_Fsa
  • phpMorphy_State
  • phpMorphy_Storage
  • phpMorphy_Storage_Factory
  • phpMorphy_Storage_File
  • phpMorphy_Storage_Mem
  • phpMorphy_Storage_Proxy
  • phpMorphy_Storage_Shm
  • phpMorphy_UnicodeHelper
  • phpMorphy_UnicodeHelper_Base
  • phpMorphy_UnicodeHelper_MultiByteFixed
  • phpMorphy_UnicodeHelper_singlebyte
  • phpMorphy_UnicodeHelper_ucs_2be
  • phpMorphy_UnicodeHelper_ucs_2le
  • phpMorphy_UnicodeHelper_ucs_4be
  • phpMorphy_UnicodeHelper_ucs_4le
  • phpMorphy_UnicodeHelper_utf_16_Base
  • phpMorphy_UnicodeHelper_utf_16be
  • phpMorphy_UnicodeHelper_utf_16le
  • phpMorphy_UnicodeHelper_utf_32_Base
  • phpMorphy_UnicodeHelper_utf_32be
  • phpMorphy_UnicodeHelper_utf_32le
  • phpMorphy_UnicodeHelper_utf_8
  • phpMorphy_WordDescriptor
  • phpMorphy_WordDescriptor_Collection
  • phpMorphy_WordDescriptor_Collection_Serializer
  • phpMorphy_WordForm
  • ProductImportV1Decorator
  • ProductOldFieldsDecorator
  • ProductProductLinkedDecorator
  • PublHolder
  • Publication
  • PublicationSiteTree
  • RatingDataObject
  • RatingExtension
  • RealtySiteConfigDecorator
  • RecentComments
  • RecentFiles
  • RecentPages
  • RelatedPageLink
  • RepairImportTask
  • RoomRate_PriceField
  • RussianUpLower
  • SberbankPayment
  • SberbankPayment_Handler
  • SetMainSiteHomePageTypeTask
  • ShippingEstimator
  • ShippingPackage
  • ShowUserFromExtension
  • SiteConfigDecorator
  • SiteConfigSubsites
  • SiteTreeSubsites
  • SMSCOrderNotification_SiteConfig
  • SMSOrderNotification_SiteConfig
  • SortCMSActionDecorator
  • SS_Report_FakeQuery
  • SSMorphy
  • SSNController
  • SteppedCheckout_PageMessages
  • SubpageListField
  • SubscribeFormAllPagesExtension
  • SubsiteDropdownField
  • SubsiteReportWrapper
  • TableShippingRate
  • UnitellerPayment
  • UnitellerPayment_Handler
  • UnmoderatedComments
  • VideoManager
  • VideoSiteConfig
  • WatermarkImage
  • WatermarkSiteConfig
  • WebylonImportAdmin
  • WebylonImportCatalog
  • WeightTableShippingRate
  • XMLValidate
  • YaMoneyPayment
  • YaMoneyPayment_Handler
  • YMLExporter
  • YMLSiteConfig

Interfaces

  • ImportInterface
  • PaymentObjectInterface
  • phpMorphy_AncodesResolver_Interface
  • phpMorphy_AnnotDecoder_Interface
  • phpMorphy_Fsa_Interface
  • phpMorphy_GramInfo_Interace
  • phpMorphy_GrammemsProvider_Interface
  • phpMorphy_GramTab_Interface
  • phpMorphy_Morphier_Finder_Interface
  • phpMorphy_Morphier_Interface
  • phpMorphy_Shm_Cache_Interface
  • phpMorphy_Source_Interface

Exceptions

  • phpMorphy_Exception

Functions

  • column_sort
  • column_sort_callback_basic
  • encodeFileForEmail
  • encodeMultipart
  • getMimeType
  • htmlEmail
  • loadMimeTypes
  • phpmorphy_overload_mb_funcs
  • plaintextEmail
  • processHeaders
  • QuotedPrintable_encode
  • supressOutput
  • validateError
  • validEmailAddr
  • wrapImagesInline
  • wrapImagesInline_rewriter
  1 <?php
  2 
  3 class Orders1CExchange {
  4     //Unpaid,Paid,Processing,Complete
  5     static $statuses1C = array(
  6         'Unpaid' => 'Новый',
  7         'Query' => 'В работе',
  8         'Paid' => 'Оплачен',
  9         'Processing' => 'В обработке',
 10         'Sent' => 'Отправлен',
 11         'Complete' => 'Завершен',
 12         'AdminCancelled' => 'Отменен магазином',
 13         'MemberCancelled' => 'Отменен пользователем',       
 14     );  
 15     
 16     function exportOrders() {
 17         $document = array();
 18         $statusesExportFrom = SiteConfig::current_site_config()->StatusesToExport();
 19         $orders = DataObject::get('Order', 'IsExported = 0 AND Status IN(' . implode(', ', $statusesExportFrom) . ')', 'ID DESC');
 20         if ($orders) {
 21             $sc = SiteConfig::current_site_config();            
 22             $document_counter = 0;          
 23             foreach ($orders as $order) {
 24                 $date = date('Y-m-d', strtotime($order->Created));
 25                 $time = date('H:i:s', strtotime($order->Created));
 26 
 27                 $document['Документ' . $document_counter] = array(
 28                     'Ид'          => $order->ID,
 29                     'Номер'       => $order->ID,
 30                     'Дата'        => $date,
 31                     'Время'       => $time,
 32                     'Валюта'      => $sc->CatalogCurrency,
 33                     'Курс'        => 1,
 34                     'ХозОперация' => 'Заказ товара',
 35                     'Роль'        => 'Продавец',
 36                     'Сумма'       => $order->GrandTotal,
 37                     'Комментарий' => $order->ClientNotes
 38                 );
 39                 // обратно скидка приходит не по всему заказау а по каждому товару отдельно (1С вычисляет по общей сикдке скидку по каждому товару)                
 40                 if ($order->Discount) {
 41                     $document['Документ' . $document_counter]['Скидки']['Скидка'] = array(
 42                         'Наименование' => 'Скидка',
 43                         'Сумма' => $order->Discount,
 44                         'УчтеноВСумме' => 1,
 45                     );
 46                 }
 47                 $document['Документ' . $document_counter]['Контрагенты']['Контрагент'] = array(
 48                     'Ид'                 => $order->MemberID . '#' . $order->Email, // !!! непонятно, что указывать - должен быть уникальный ID контрагента
 49                     'Наименование'          => trim($order->ClientName), // по имени - в Order есть только ClientName, но Order может быть расширен (добавлена Фамилия, Отчество)
 50                     'Роль'               => 'Покупатель',
 51                     'ПолноеНаименование'  => trim($order->ClientName), // по имени ...                 
 52                     'Имя'                      => $order->ClientName,// по имени ...
 53                     
 54                     /*  Контакты
 55                         Коды:
 56                             Телефон внутренний
 57                             Телефон рабочий
 58                             Телефон мобильный
 59                             Телефон домашний
 60                             Пейджер
 61                             Факс
 62                             Почта
 63                             ICQ
 64                             ВебСайт
 65                             Координаты на карте
 66                             Прочее
 67                     */
 68                     'Контакты' => array( // тип КонтактТип
 69                         'Контакт1' => array(
 70                             'Тип' => 'ТелефонРабочий'
 71                             ,'Значение' => $order->Phone
 72                         )
 73                         ,'Контакт2'  => array(
 74                              'Тип' => 'Почта'
 75                             ,'Значение' => $order->Email
 76                         )
 77                     )
 78                 );
 79                 /* !!!!нету у Order поля LastName
 80                 if ($order->LastName) {
 81                     $document['Документ' . $document_counter]['Контрагенты']['Контрагент']['Фамилия'] = $order->LastName;
 82                 }
 83                 */
 84                 
 85                 
 86                 $address = array();
 87                 if ($order->Address)
 88                     $address[] = $order->Address;
 89                 if ($order->City)
 90                     $address[] = $order->City;
 91                 if ($order->PostalCode)
 92                     $address[] = $order->PostalCode;
 93                 if ($order->Country)
 94                     $address[] = $order->Country;
 95                 if (count($address)) {
 96                     // в примере АдресРегистрации и несколько АдресноеПоле с "Почтовый индекс", "Улица" и т.д. (тип АдресТип)
 97                     $document['Документ' . $document_counter]['Контрагенты']['Контрагент']['Адрес'] = array(
 98                         'Представление'    => implode(', ', $address)
 99                     );
100                 }
101 
102                 // Товары
103                 $products = $order->Items();
104 
105                 $product_counter = 0;
106                 foreach ($products as $product) {
107                     if (!$product->getProduct()) {
108                         continue;
109                     }
110                     $id = $product->ImportID;                   
111                     
112                     $document['Документ' . $document_counter]['Товары']['Товар' . $product_counter] = array(
113                         'Ид'             => $id,
114                         'ИдКаталога'     => $product->getProduct()->Parent()->ImportID,
115                         'Артикул'      => $product->ImportID, // может SKU
116                         'Наименование'   => $product->Title,
117                         'БазоваяЕдиница' => 'шт', // должно быть <БазоваяЕдиница Код="796" НаименованиеПолное="Штука" МеждународноеСокращение="PCE">шт</БазоваяЕдиница>
118                         'ЦенаЗаЕдиницу'  => $product->Price,
119                         'Количество'     => $product->Quantity,
120                         'Сумма'          => $product->TotalPrice,
121                     );
122                     // добавить 'БазоваяЕдиница' - Имя базовой единицы измерения товара по ОКЕИ (вроде как обязательно)              
123                     
124                     $document['Документ' . $document_counter]['Товары']['Товар' . $product_counter]['ЗначенияРеквизитов']['ЗначениеРеквизита0']= array(                         
125                         'Наименование' => 'ВидНоменклатуры',
126                         'Значение'=> 'Товар',                      
127                     );
128                     $document['Документ' . $document_counter]['Товары']['Товар' . $product_counter]['ЗначенияРеквизитов']['ЗначениеРеквизита1']= array(                         
129                         'Наименование' => 'ТипНоменклатуры',
130                         'Значение'=> 'Товар',                      
131                     );              
132                     
133                     $product_counter++;
134                 }               
135                 
136                 if ($product_counter == 0) {
137                     unset($document['Документ' . $document_counter]);
138                     continue;
139                 }
140 
141                 //Доставка
142                 //  Доставка выводится как отдельный товар с Ид ORDER_DELIVERY
143                 if ($order->ShippingTotal) {
144                     $document['Документ' . $document_counter]['Товары']['Товар' . $product_counter] = array(
145                          'Ид'         => 'ORDER_DELIVERY'
146                         ,'Наименование' => 'Доставка заказа'
147                         ,'ЦенаЗаЕдиницу'=> $order->ShippingTotal
148                         ,'Количество' => 1
149                         ,'Сумма'       => $order->ShippingTotal
150                     );
151                     $document['Документ' . $document_counter]['Товары']['Товар' . $product_counter]['ЗначенияРеквизитов']['ЗначениеРеквизита0']= array(                         
152                         'Наименование' => 'ВидНоменклатуры',
153                         'Значение'=> 'Услуга',
154                     );
155                     $document['Документ' . $document_counter]['Товары']['Товар' . $product_counter]['ЗначенияРеквизитов']['ЗначениеРеквизита1'] = array(
156                         'Наименование' => 'ТипНоменклатуры',
157                         'Значение'=> 'Услуга',
158                     );
159                 }
160 
161                 //Статус
162                 $document['Документ' . $document_counter]['ЗначенияРеквизитов']['ЗначениеРеквизита0'] = array(
163                     'Наименование' => 'Статус заказа',
164                     'Значение'=> self::$statuses1C[$order->Status],
165                 );
166 
167                 //Метод оплаты
168                 if ($order->hasMethod('PaymentType')) {
169                     $method = $order->PaymentType();
170                     if ($method) {
171                         $document['Документ' . $document_counter]['ЗначенияРеквизитов']['ЗначениеРеквизита1'] = array(
172                             'Наименование' => 'Метод оплаты',
173                             'Значение'=> $method->Title,
174                         );
175                     }
176                 }
177 
178                 //Способ доставки
179                 // !! Пока под вопросом !!!
180                 if ($order->hasMethod('ShippingMethod')) {
181                     $method = $order->ShippingMethod();
182                     if ($method) {
183                         $document['Документ' . $document_counter]['ЗначенияРеквизитов']['ЗначениеРеквизита2'] = array(
184                             'Наименование' => 'Способ доставки',
185                             'Значение'=> $method->Name,
186                         );
187                     }
188                 }
189                 
190                 $document['Документ' . $document_counter]['ЗначенияРеквизитов']['ЗначениеРеквизита3'] = array(
191                     'Наименование' => 'Заказ оплачен',
192                     'Значение'=> (in_array($order->Status, array('Paid','Processing', 'Sent','Complete')) ? 'true' : 'false'),
193                 );
194                 
195                 $document['Документ' . $document_counter]['ЗначенияРеквизитов']['ЗначениеРеквизита4'] = array(
196                     'Наименование' => 'Отменен',
197                     'Значение'=> (in_array($order->Status, array('AdminCancelled','MemberCancelled')) ? 'true' : 'false'),
198                 );
199                 
200                 $document['Документ' . $document_counter]['ЗначенияРеквизитов']['ЗначениеРеквизита5']= array(                    
201                     'Наименование' => 'Финальный статус',
202                     'Значение'=> 'false', // пока всегда false
203                 );
204                 $document_counter++;
205             }
206             
207             $root = '<?xml version="1.0" encoding="utf-8"?><КоммерческаяИнформация ВерсияСхемы="2.04" ДатаФормирования="' . date('Y-m-d', time()) . '" />';
208             $xml = $this->array_to_xml($document, new SimpleXMLElement($root));
209             file_put_contents(ASSETS_PATH . '/export_orders.xml', $xml->asXML());
210             return $xml->asXML();
211         }   
212         return false;
213     }
214     
215     function array_to_xml($data, &$xml) {
216         foreach($data as $key => $value) {
217             if (is_array($value)) {
218                 if (!is_numeric($key)) {
219                     $subnode = $xml->addChild(preg_replace('/\d/', '', $key));
220                     $this->array_to_xml($value, $subnode);
221                 }
222             }
223             else {
224                 $xml->addChild($key, $value);
225             }
226         }
227         return $xml;
228     }
229     
230     function setOrdersExported() {
231         $statusesExportFrom = SiteConfig::current_site_config()->StatusesToExport();
232         $orders = DataObject::get('Order', 'IsExported = 0 AND Status IN(' . implode(', ', $statusesExportFrom) . ')');
233         if ($orders) {
234             foreach($orders as $order) {
235                 $order->IsExported = 1;
236                 $order->Update1C = 1;
237                 $order->write();
238             }
239         }
240     }
241     
242     function importOrders($filePath) {
243         $file = simplexml_load_file($filePath);
244         foreach($file->Документ as $orderData) {
245             
246             $order = DataObject::get_by_id('Order', (int)$orderData->Номер);
247             if (!$order) {
248                 // кидаем ошибку
249                 continue;
250             }
251             foreach($orderData->ЗначенияРеквизитов->ЗначениеРеквизита as $entry) {
252                 if ($entry->Наименование == 'Статуса заказа ИД') {
253                     $order->Status = (string)$entry->Значение;
254                     $order->Update1C = 1;
255                     $order->write();
256                     file_put_contents(ASSETS_PATH . '/export_order_status_'.((int)$orderData->Номер).'.dat', $order->Status);
257                 }
258             }           
259         }
260     }
261     
262 }
[Raise a SilverStripe Framework issue/bug](https://github.com/silverstripe/silverstripe-framework/issues/new)
- [Raise a SilverStripe CMS issue/bug](https://github.com/silverstripe/silverstripe-cms/issues/new)
- Please use the Silverstripe Forums to ask development related questions. -
Webylon 3.1 API Docs API documentation generated by ApiGen 2.8.0