Completed
Push — master ( d7a3f6...44e45d )
by
unknown
10:44
created

AddMultiCurrencyFields::setRenameExtension()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 1
1
<?php
2
3
namespace OroCRM\Bundle\SalesBundle\Migrations\Schema\v1_27;
4
5
use Doctrine\DBAL\Schema\Schema;
6
use Doctrine\DBAL\Types\Type;
7
8
use Oro\Bundle\MigrationBundle\Migration\Migration;
9
use Oro\Bundle\MigrationBundle\Migration\SqlMigrationQuery;
10
use Oro\Bundle\MigrationBundle\Migration\ParametrizedSqlMigrationQuery;
11
use Oro\Bundle\MigrationBundle\Migration\OrderedMigrationInterface;
12
use Oro\Bundle\MigrationBundle\Migration\QueryBag;
13
use Oro\Bundle\MigrationBundle\Migration\Extension\RenameExtension;
14
use Oro\Bundle\MigrationBundle\Migration\Extension\RenameExtensionAwareInterface;
15
16
use Oro\Bundle\CurrencyBundle\DependencyInjection\Configuration as CurrencyConfiguration;
17
18
class AddMultiCurrencyFields implements
19
    Migration,
20
    OrderedMigrationInterface,
21
    RenameExtensionAwareInterface
22
{
23
    /**
24
     * @var RenameExtension
25
     */
26
    protected $renameExtension;
27
28
    /**
29
     * {@inheritdoc}
30
     */
31
    public function getOrder()
32
    {
33
        return 1;
34
    }
35
36
    /**
37
     * {@inheritdoc}
38
     */
39
    public function setRenameExtension(RenameExtension $renameExtension)
40
    {
41
        $this->renameExtension =$renameExtension;
42
    }
43
44
    /**
45
     * {@inheritdoc}
46
     */
47
    public function up(Schema $schema, QueryBag $queryBag)
48
    {
49
        self::addColumnsForMultiCurrency($schema, $queryBag, $this->renameExtension);
50
    }
51
52
    /**
53
     * @param Schema $schema
54
     * @param QueryBag $queryBag
55
     * @param RenameExtension $renameExtension
56
     */
57
    public static function addColumnsForMultiCurrency(
58
        Schema $schema,
59
        QueryBag $queryBag,
60
        RenameExtension $renameExtension
61
    ) {
62
        $table = $schema->getTable('orocrm_sales_opportunity');
63
64
        //Rename columns for new type
65
        self::renameOpportunityFields($schema, $queryBag, $renameExtension);
66
67
        //Add columns for new type
68
        $table->addColumn(
69
            'budget_amount_currency',
70
            'currency',
71
            ['length' => 3, 'notnull' => false, 'comment' => '(DC2Type:currency)']
72
        );
73
        $table->addColumn(
74
            'close_revenue_currency',
75
            'currency',
76
            ['length' => 3, 'notnull' => false, 'comment' => '(DC2Type:currency)']
77
        );
78
79
        self::fillCurrencyFieldsWithDefaultValue($queryBag);
80
    }
81
82
    /**
83
     * @param Schema $schema
84
     * @param QueryBag $queries
85
     * @param RenameExtension $renameExtension
86
     */
87
    public static function renameOpportunityFields(
88
        Schema $schema,
89
        QueryBag $queries,
90
        RenameExtension $renameExtension
91
    ) {
92
        $table = $schema->getTable('orocrm_sales_opportunity');
93
94
        $renameExtension->renameColumn(
95
            $schema,
96
            $queries,
97
            $table,
98
            'budget_amount',
99
            'budget_amount_value'
100
        );
101
102
        $renameExtension->renameColumn(
103
            $schema,
104
            $queries,
105
            $table,
106
            'close_revenue',
107
            'close_revenue_value'
108
        );
109
    }
110
111
    /**
112
     * @param QueryBag $queries
113
     */
114
    public static function fillCurrencyFieldsWithDefaultValue(QueryBag $queries)
115
    {
116
         $queries->addPostQuery(
117
             new ParametrizedSqlMigrationQuery(
118
                 'UPDATE orocrm_sales_opportunity SET budget_amount_currency = :currency_code, 
119
                                 close_revenue_currency = :currency_code',
120
                 [
121
                     'currency_code' => CurrencyConfiguration::DEFAULT_CURRENCY
122
                 ],
123
                 [
124
                     'currency_code'     => Type::STRING,
125
                 ]
126
             )
127
         );
128
    }
129
}
130