Code Duplication    Length = 115-115 lines in 2 locations

src/OroCRM/Bundle/SalesBundle/Migrations/Schema/v1_22/UpdateOpportunityStatus.php 1 location

@@ 16-130 (lines=115) @@
13
use Oro\Bundle\MigrationBundle\Migration\ParametrizedSqlMigrationQuery;
14
use Oro\Bundle\MigrationBundle\Migration\QueryBag;
15
16
class UpdateOpportunityStatus implements
17
    Migration,
18
    ContainerAwareInterface,
19
    OrderedMigrationInterface
20
{
21
    /** @var ContainerInterface */
22
    protected $container;
23
24
    /**
25
     * {@inheritdoc}
26
     */
27
    public function getOrder()
28
    {
29
        return 2;
30
    }
31
32
    /**
33
     * {@inheritdoc}
34
     */
35
    public function setContainer(ContainerInterface $container = null)
36
    {
37
        $this->container = $container;
38
    }
39
40
    /**
41
     * {@inheritdoc}
42
     */
43
    public function up(Schema $schema, QueryBag $queries)
44
    {
45
        $defaultStatuses = [
46
            'in_progress',
47
            'won',
48
            'lost'
49
        ];
50
        $connection = $this->container->get('doctrine')->getConnection();
51
        $oldStatuses = $connection->fetchAll('SELECT name, label FROM orocrm_sales_opport_status');
52
        $newStatuses = $connection->fetchAll('SELECT id, priority FROM oro_enum_opportunity_status');
53
        $oldStatuses = $this->buildOneDimensionArray($oldStatuses, 'name', 'label');
54
        $newStatuses = $this->buildOneDimensionArray($newStatuses, 'id', 'priority');
55
        $oldStatusesToAdd = array_diff_key($oldStatuses, $newStatuses);
56
57
        if (is_array($oldStatusesToAdd) && count($oldStatusesToAdd)) {
58
            $defaultStatuses = array_merge($defaultStatuses, array_keys($oldStatusesToAdd));
59
        }
60
61
        $priority = 1;
62
        if (is_array($newStatuses) && count($newStatuses)) {
63
            $priority = max($newStatuses) + 1;
64
        }
65
66
        $this->updateOpportunityStatusTable($queries, $oldStatusesToAdd, $priority);
67
        $this->updateOpportunityTable($queries, $defaultStatuses);
68
    }
69
70
    /**
71
     * @param QueryBag $queries
72
     * @param array $statuses
73
     * @param int $priority
74
     */
75
    protected function updateOpportunityStatusTable($queries, $statuses, $priority)
76
    {
77
        foreach ($statuses as $id => $name) {
78
            $query  = 'INSERT INTO oro_enum_opportunity_status (id, name, priority, is_default)
79
                       VALUES (:id, :name, :priority, 0)';
80
            $params = ['id' => $id, 'name' => $name, 'priority' => $priority];
81
            $types  = ['id' => Type::STRING, 'name' => Type::STRING, 'priority' => Type::INTEGER];
82
83
            $migrationQuery = new ParametrizedSqlMigrationQuery();
84
            $migrationQuery->addSql(
85
                $query,
86
                $params,
87
                $types
88
            );
89
            $queries->addPostQuery($migrationQuery);
90
91
            $priority++;
92
        }
93
    }
94
95
    /**
96
     * @param QueryBag $queries
97
     * @param array $statuses
98
     */
99
    protected function updateOpportunityTable($queries, $statuses)
100
    {
101
        $query = 'UPDATE orocrm_sales_opportunity SET status_id = :status_id WHERE status_name = :status_name';
102
        foreach ($statuses as $status) {
103
            $migrationQuery = new ParametrizedSqlMigrationQuery();
104
            $migrationQuery->addSql(
105
                $query,
106
                ['status_id' => $status, 'status_name' => $status],
107
                ['status_id' => Type::STRING, 'status_name' => Type::STRING]
108
            );
109
            $queries->addPostQuery($migrationQuery);
110
        }
111
    }
112
113
    /**
114
     * @param array $rows
115
     * @param string $key
116
     * @param string $value
117
     *
118
     * @return array
119
     */
120
    protected function buildOneDimensionArray($rows, $key, $value)
121
    {
122
        $result = [];
123
124
        foreach ($rows as $row) {
125
            $result[$row[$key]] = $row[$value];
126
        }
127
128
        return $result;
129
    }
130
}
131

src/OroCRM/Bundle/SalesBundle/Migrations/Schema/v1_24/UpdateLeadStatus.php 1 location

@@ 16-130 (lines=115) @@
13
use Oro\Bundle\MigrationBundle\Migration\ParametrizedSqlMigrationQuery;
14
use Oro\Bundle\MigrationBundle\Migration\QueryBag;
15
16
class UpdateLeadStatus implements
17
    Migration,
18
    ContainerAwareInterface,
19
    OrderedMigrationInterface
20
{
21
    /** @var ContainerInterface */
22
    protected $container;
23
24
    /**
25
     * {@inheritdoc}
26
     */
27
    public function getOrder()
28
    {
29
        return 2;
30
    }
31
32
    /**
33
     * {@inheritdoc}
34
     */
35
    public function setContainer(ContainerInterface $container = null)
36
    {
37
        $this->container = $container;
38
    }
39
40
    /**
41
     * {@inheritdoc}
42
     */
43
    public function up(Schema $schema, QueryBag $queries)
44
    {
45
        $defaultStatuses = [
46
            'new',
47
            'qualified',
48
            'canceled'
49
        ];
50
        $connection = $this->container->get('doctrine')->getConnection();
51
        $oldStatuses = $connection->fetchAll('SELECT name, label FROM orocrm_sales_lead_status');
52
        $newStatuses = $connection->fetchAll('SELECT id, priority FROM oro_enum_lead_status');
53
        $oldStatuses = $this->buildOneDimensionArray($oldStatuses, 'name', 'label');
54
        $newStatuses = $this->buildOneDimensionArray($newStatuses, 'id', 'priority');
55
        $oldStatusesToAdd = array_diff_key($oldStatuses, $newStatuses);
56
57
        if (count($oldStatusesToAdd) > 0) {
58
            $defaultStatuses = array_merge($defaultStatuses, array_keys($oldStatusesToAdd));
59
        }
60
61
        $priority = 1;
62
        if (is_array($newStatuses) && count($newStatuses)) {
63
            $priority = max($newStatuses) + 1;
64
        }
65
66
        $this->updateLeadStatusTable($queries, $oldStatusesToAdd, $priority);
67
        $this->updateLeadTable($queries, $defaultStatuses);
68
    }
69
70
    /**
71
     * @param QueryBag $queries
72
     * @param array $statuses
73
     * @param int $priority
74
     */
75
    protected function updateLeadStatusTable($queries, $statuses, $priority)
76
    {
77
        foreach ($statuses as $id => $name) {
78
            $query  = 'INSERT INTO oro_enum_lead_status (id, name, priority, is_default)
79
                       VALUES (:id, :name, :priority, 0)';
80
            $params = ['id' => $id, 'name' => $name, 'priority' => $priority];
81
            $types  = ['id' => Type::STRING, 'name' => Type::STRING, 'priority' => Type::INTEGER];
82
83
            $migrationQuery = new ParametrizedSqlMigrationQuery();
84
            $migrationQuery->addSql(
85
                $query,
86
                $params,
87
                $types
88
            );
89
            $queries->addPostQuery($migrationQuery);
90
91
            $priority++;
92
        }
93
    }
94
95
    /**
96
     * @param QueryBag $queries
97
     * @param array $statuses
98
     */
99
    protected function updateLeadTable($queries, $statuses)
100
    {
101
        $query = 'UPDATE orocrm_sales_lead SET status_id = :status_id WHERE status_name = :status_name';
102
        foreach ($statuses as $status) {
103
            $migrationQuery = new ParametrizedSqlMigrationQuery();
104
            $migrationQuery->addSql(
105
                $query,
106
                ['status_id' => $status, 'status_name' => $status],
107
                ['status_id' => Type::STRING, 'status_name' => Type::STRING]
108
            );
109
            $queries->addPostQuery($migrationQuery);
110
        }
111
    }
112
113
    /**
114
     * @param array $rows
115
     * @param string $key
116
     * @param string $value
117
     *
118
     * @return array
119
     */
120
    protected function buildOneDimensionArray($rows, $key, $value)
121
    {
122
        $result = [];
123
124
        foreach ($rows as $row) {
125
            $result[$row[$key]] = $row[$value];
126
        }
127
128
        return $result;
129
    }
130
}
131