UpgradeSchema.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362
  1. <?php
  2. /**
  3. * Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved.
  4. *
  5. * Licensed under the Apache License, Version 2.0 (the "License").
  6. * You may not use this file except in compliance with the License.
  7. * A copy of the License is located at
  8. *
  9. * http://aws.amazon.com/apache2.0
  10. *
  11. * or in the "license" file accompanying this file. This file is distributed
  12. * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
  13. * express or implied. See the License for the specific language governing
  14. * permissions and limitations under the License.
  15. */
  16. namespace Amazon\Payment\Setup;
  17. use Amazon\Payment\Api\Data\PendingAuthorizationInterface;
  18. use Amazon\Payment\Api\Data\PendingCaptureInterface;
  19. use Amazon\Payment\Model\ResourceModel\OrderLink;
  20. use Amazon\Payment\Model\ResourceModel\PendingAuthorization;
  21. use Amazon\Payment\Model\ResourceModel\PendingCapture;
  22. use Amazon\Payment\Model\ResourceModel\QuoteLink;
  23. use Amazon\Payment\Api\Data\PendingRefundInterface;
  24. use Magento\Eav\Setup\EavSetup;
  25. use Magento\Framework\App\ObjectManager;
  26. use Magento\Framework\DB\Adapter\AdapterInterface;
  27. use Magento\Framework\DB\Ddl\Table;
  28. use Magento\Framework\Exception\LocalizedException;
  29. use Magento\Framework\Setup\ModuleContextInterface;
  30. use Magento\Framework\Setup\SchemaSetupInterface;
  31. use Magento\Framework\Setup\UpgradeSchemaInterface;
  32. use Magento\Sales\Api\Data\TransactionInterface;
  33. class UpgradeSchema implements UpgradeSchemaInterface
  34. {
  35. const PENDING_REFUND_TABLE_NAME = 'amazon_pending_refund';
  36. /**
  37. * @SuppressWarnings(PHPMD.CyclomaticComplexity)
  38. * @SuppressWarnings(PHPMD.NPathComplexity)
  39. * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
  40. */
  41. public function upgrade(SchemaSetupInterface $setup, ModuleContextInterface $context)
  42. {
  43. if (version_compare($context->getVersion(), '1.4.0', '<')) {
  44. $table = $setup->getConnection()->newTable($setup->getTable(PendingCapture::TABLE_NAME));
  45. $table
  46. ->addColumn(
  47. PendingCaptureInterface::ID,
  48. Table::TYPE_INTEGER,
  49. null,
  50. [
  51. 'identity' => true,
  52. 'unsigned' => true,
  53. 'primary' => true,
  54. 'nullable' => false
  55. ]
  56. )
  57. ->addColumn(
  58. PendingCaptureInterface::CAPTURE_ID,
  59. Table::TYPE_TEXT,
  60. 255,
  61. [
  62. 'nullable' => false
  63. ]
  64. )
  65. ->addColumn(
  66. PendingCaptureInterface::CREATED_AT,
  67. Table::TYPE_DATETIME,
  68. null,
  69. [
  70. 'nullable' => false
  71. ]
  72. )
  73. ->addIndex(
  74. $setup->getIdxName(
  75. PendingCapture::TABLE_NAME,
  76. [PendingCaptureInterface::CAPTURE_ID],
  77. AdapterInterface::INDEX_TYPE_UNIQUE
  78. ),
  79. [PendingCaptureInterface::CAPTURE_ID],
  80. ['type' => AdapterInterface::INDEX_TYPE_UNIQUE]
  81. );
  82. $setup->getConnection()->createTable($table);
  83. }
  84. if (version_compare($context->getVersion(), '1.7.0', '<')) {
  85. $this->addColumnsToPendingCaptureQueue($setup);
  86. }
  87. if (version_compare($context->getVersion(), '1.8.0', '<')) {
  88. $this->createPendingAuthorizationQueueTable($setup);
  89. }
  90. if (version_compare($context->getVersion(), '1.9.0', '<')) {
  91. $this->createPendingRefundTable($setup);
  92. }
  93. if (version_compare($context->getVersion(), '1.10.0', '<')) {
  94. $this->addColumnsToPendingAuthorizationQueue($setup);
  95. }
  96. if (version_compare($context->getVersion(), '1.11.0', '<')) {
  97. $this->addCaptureColumnsToPendingAuthorizationQueue($setup);
  98. }
  99. }
  100. private function addCaptureColumnsToPendingAuthorizationQueue(SchemaSetupInterface $setup)
  101. {
  102. $setup->getConnection()->addColumn(
  103. $setup->getTable(PendingAuthorization::TABLE_NAME),
  104. PendingAuthorizationInterface::CAPTURE,
  105. [
  106. 'unsigned' => true,
  107. 'nullable' => true,
  108. 'default' => 0,
  109. 'type' => Table::TYPE_SMALLINT,
  110. 'comment' => 'Initial authorization has capture'
  111. ]
  112. );
  113. $setup->getConnection()->addColumn(
  114. $setup->getTable(PendingAuthorization::TABLE_NAME),
  115. PendingAuthorizationInterface::CAPTURE_ID,
  116. [
  117. 'nullable' => true,
  118. 'type' => Table::TYPE_TEXT,
  119. 'length' => 255,
  120. 'comment' => 'Initial authorization capture id'
  121. ]
  122. );
  123. }
  124. private function addColumnsToPendingAuthorizationQueue(SchemaSetupInterface $setup)
  125. {
  126. $setup->getConnection()->addColumn(
  127. $setup->getTable(PendingAuthorization::TABLE_NAME),
  128. PendingAuthorizationInterface::PROCESSED,
  129. [
  130. 'unsigned' => true,
  131. 'nullable' => true,
  132. 'default' => 0,
  133. 'type' => Table::TYPE_SMALLINT,
  134. 'comment' => 'Initial authorization processed'
  135. ]
  136. );
  137. }
  138. private function addColumnsToPendingCaptureQueue(SchemaSetupInterface $setup)
  139. {
  140. $setup->getConnection()->addColumn(
  141. $setup->getTable(PendingCapture::TABLE_NAME),
  142. 'order_id',
  143. [
  144. 'unsigned' => true,
  145. 'nullable' => false,
  146. 'type' => Table::TYPE_INTEGER,
  147. 'comment' => 'order id'
  148. ]
  149. );
  150. $setup->getConnection()->addColumn(
  151. $setup->getTable(PendingCapture::TABLE_NAME),
  152. 'payment_id',
  153. [
  154. 'unsigned' => true,
  155. 'nullable' => false,
  156. 'type' => Table::TYPE_INTEGER,
  157. 'comment' => 'payment id'
  158. ]
  159. );
  160. $setup->getConnection()->dropIndex(
  161. $setup->getTable(PendingCapture::TABLE_NAME),
  162. $setup->getIdxName(
  163. PendingCapture::TABLE_NAME,
  164. [PendingCaptureInterface::CAPTURE_ID],
  165. AdapterInterface::INDEX_TYPE_UNIQUE
  166. )
  167. );
  168. $pendingColumns = [
  169. PendingCaptureInterface::ORDER_ID,
  170. PendingCaptureInterface::PAYMENT_ID,
  171. PendingCaptureInterface::CAPTURE_ID
  172. ];
  173. $setup->getConnection()->addIndex(
  174. $setup->getTable(PendingCapture::TABLE_NAME),
  175. $setup->getIdxName(
  176. PendingCapture::TABLE_NAME,
  177. $pendingColumns,
  178. AdapterInterface::INDEX_TYPE_UNIQUE
  179. ),
  180. $pendingColumns,
  181. AdapterInterface::INDEX_TYPE_UNIQUE
  182. );
  183. }
  184. private function createPendingAuthorizationQueueTable(SchemaSetupInterface $setup)
  185. {
  186. $table = $setup->getConnection()->newTable($setup->getTable(PendingAuthorization::TABLE_NAME));
  187. $table
  188. ->addColumn(
  189. PendingAuthorizationInterface::ID,
  190. Table::TYPE_INTEGER,
  191. null,
  192. [
  193. 'identity' => true,
  194. 'unsigned' => true,
  195. 'primary' => true,
  196. 'nullable' => false
  197. ]
  198. )
  199. ->addColumn(
  200. PendingAuthorizationInterface::ORDER_ID,
  201. Table::TYPE_INTEGER,
  202. null,
  203. [
  204. 'unsigned' => true,
  205. 'nullable' => false
  206. ]
  207. )
  208. ->addColumn(
  209. PendingAuthorizationInterface::PAYMENT_ID,
  210. Table::TYPE_INTEGER,
  211. null,
  212. [
  213. 'unsigned' => true,
  214. 'nullable' => false
  215. ]
  216. )
  217. ->addColumn(
  218. PendingAuthorizationInterface::AUTHORIZATION_ID,
  219. Table::TYPE_TEXT,
  220. 255,
  221. [
  222. 'nullable' => true
  223. ]
  224. )
  225. ->addColumn(
  226. PendingAuthorizationInterface::CREATED_AT,
  227. Table::TYPE_DATETIME,
  228. null,
  229. [
  230. 'nullable' => false
  231. ]
  232. )
  233. ->addColumn(
  234. PendingAuthorizationInterface::UPDATED_AT,
  235. Table::TYPE_DATETIME,
  236. null,
  237. [
  238. 'nullable' => true
  239. ]
  240. );
  241. $setup->getConnection()->createTable($table);
  242. $pendingColumns = [
  243. PendingAuthorizationInterface::ORDER_ID,
  244. PendingAuthorizationInterface::PAYMENT_ID,
  245. PendingAuthorizationInterface::AUTHORIZATION_ID
  246. ];
  247. $setup->getConnection()->addIndex(
  248. $setup->getTable(PendingAuthorization::TABLE_NAME),
  249. $setup->getIdxName(
  250. PendingAuthorization::TABLE_NAME,
  251. $pendingColumns,
  252. AdapterInterface::INDEX_TYPE_UNIQUE
  253. ),
  254. $pendingColumns,
  255. AdapterInterface::INDEX_TYPE_UNIQUE
  256. );
  257. }
  258. private function createPendingRefundTable(SchemaSetupInterface $setup)
  259. {
  260. $setup->getConnection()->dropTable(static::PENDING_REFUND_TABLE_NAME);
  261. $table = $setup->getConnection()->newTable($setup->getTable(static::PENDING_REFUND_TABLE_NAME));
  262. $table
  263. ->addColumn(
  264. PendingRefundInterface::ID,
  265. Table::TYPE_INTEGER,
  266. null,
  267. [
  268. 'identity' => true,
  269. 'unsigned' => true,
  270. 'primary' => true,
  271. 'nullable' => false
  272. ]
  273. )
  274. ->addColumn(
  275. PendingRefundInterface::REFUND_ID,
  276. Table::TYPE_TEXT,
  277. 255,
  278. [
  279. 'nullable' => false
  280. ]
  281. )
  282. ->addColumn(
  283. PendingRefundInterface::CREATED_AT,
  284. Table::TYPE_DATETIME,
  285. null,
  286. [
  287. 'nullable' => false
  288. ]
  289. )
  290. ->addColumn(
  291. PendingRefundInterface::ORDER_ID,
  292. Table::TYPE_INTEGER,
  293. null,
  294. [
  295. 'unsigned' => true,
  296. 'nullable' => false,
  297. 'comment' => 'order id'
  298. ]
  299. )
  300. ->addColumn(
  301. PendingRefundInterface::PAYMENT_ID,
  302. Table::TYPE_INTEGER,
  303. null,
  304. [
  305. 'unsigned' => true,
  306. 'nullable' => false,
  307. 'comment' => 'payment id'
  308. ]
  309. );
  310. $setup->getConnection()->createTable($table);
  311. $pendingColumns = [
  312. PendingRefundInterface::ORDER_ID,
  313. PendingRefundInterface::PAYMENT_ID,
  314. PendingRefundInterface::REFUND_ID,
  315. ];
  316. $indexName = $setup->getConnection()->getIndexName(
  317. $setup->getTable(static::PENDING_REFUND_TABLE_NAME),
  318. $pendingColumns,
  319. AdapterInterface::INDEX_TYPE_UNIQUE
  320. );
  321. $setup->getConnection()->addIndex(
  322. $setup->getTable(static::PENDING_REFUND_TABLE_NAME),
  323. $indexName,
  324. $pendingColumns,
  325. AdapterInterface::INDEX_TYPE_UNIQUE
  326. );
  327. }
  328. }