Code Duplication    Length = 85-86 lines in 2 locations

src/OroCRM/Bundle/ContactBundle/Controller/ContactAddressController.php 1 location

@@ 16-100 (lines=85) @@
13
use OroCRM\Bundle\ContactBundle\Entity\ContactAddress;
14
use OroCRM\Bundle\ContactBundle\Entity\Contact;
15
16
class ContactAddressController extends Controller
17
{
18
    /**
19
     * @Route("/address-book/{id}", name="orocrm_contact_address_book", requirements={"id"="\d+"})
20
     * @Template
21
     * @AclAncestor("orocrm_contact_view")
22
     */
23
    public function addressBookAction(Contact $contact)
24
    {
25
        return array(
26
            'entity' => $contact,
27
            'address_edit_acl_resource' => 'orocrm_contact_update'
28
        );
29
    }
30
31
    /**
32
     * @Route(
33
     *      "/{contactId}/address-create",
34
     *      name="orocrm_contact_address_create",
35
     *      requirements={"contactId"="\d+"}
36
     * )
37
     * @Template("OroCRMContactBundle:ContactAddress:update.html.twig")
38
     * @AclAncestor("orocrm_contact_create")
39
     * @ParamConverter("contact", options={"id" = "contactId"})
40
     */
41
    public function createAction(Contact $contact)
42
    {
43
        return $this->update($contact, new ContactAddress());
44
    }
45
46
    /**
47
     * @Route(
48
     *      "/{contactId}/address-update/{id}",
49
     *      name="orocrm_contact_address_update",
50
     *      requirements={"contactId"="\d+","id"="\d+"},defaults={"id"=0}
51
     * )
52
     * @Template
53
     * @AclAncestor("orocrm_contact_update")
54
     * @ParamConverter("contact", options={"id" = "contactId"})
55
     */
56
    public function updateAction(Contact $contact, ContactAddress $address)
57
    {
58
        return $this->update($contact, $address);
59
    }
60
61
    /**
62
     * @param Contact $contact
63
     * @param ContactAddress $address
64
     * @return array
65
     * @throws BadRequestHttpException
66
     */
67
    protected function update(Contact $contact, ContactAddress $address)
68
    {
69
        $responseData = array(
70
            'saved' => false,
71
            'contact' => $contact
72
        );
73
74
        if ($this->getRequest()->getMethod() == 'GET' && !$address->getId()) {
75
            $address->setFirstName($contact->getFirstName());
76
            $address->setLastName($contact->getLastName());
77
            if (!$contact->getAddresses()->count()) {
78
                $address->setPrimary(true);
79
            }
80
        }
81
82
        if ($address->getOwner() && $address->getOwner()->getId() != $contact->getId()) {
83
            throw new BadRequestHttpException('Address must belong to contact');
84
        } elseif (!$address->getOwner()) {
85
            $contact->addAddress($address);
86
        }
87
88
        // Update contact's modification date when an address is changed
89
        $contact->setUpdatedAt(new \DateTime('now', new \DateTimeZone('UTC')));
90
91
        if ($this->get('orocrm_contact.form.handler.contact_address')->process($address)) {
92
            $this->getDoctrine()->getManager()->flush();
93
            $responseData['entity'] = $address;
94
            $responseData['saved'] = true;
95
        }
96
97
        $responseData['form'] = $this->get('orocrm_contact.contact_address.form')->createView();
98
        return $responseData;
99
    }
100
}
101

src/OroCRM/Bundle/SalesBundle/Controller/LeadAddressController.php 1 location

@@ 19-104 (lines=86) @@
16
/**
17
 * @Route("/lead")
18
 */
19
class LeadAddressController extends Controller
20
{
21
    /**
22
     * @Route("/address-book/{id}", name="orocrm_sales_lead_address_book", requirements={"id"="\d+"})
23
     * @Template
24
     * @AclAncestor("orocrm_sales_lead_view")
25
     */
26
    public function addressBookAction(Lead $lead)
27
    {
28
        return array(
29
            'entity' => $lead,
30
            'address_edit_acl_resource' => 'orocrm_sales_lead_update'
31
        );
32
    }
33
34
    /**
35
     * @Route(
36
     *      "/{leadId}/address-create",
37
     *      name="orocrm_sales_lead_address_create",
38
     *      requirements={"leadId"="\d+"}
39
     * )
40
     * @Template("OroCRMSalesBundle:LeadAddress:update.html.twig")
41
     * @AclAncestor("orocrm_sales_lead_update")
42
     * @ParamConverter("lead", options={"id" = "leadId"})
43
     */
44
    public function createAction(Lead $lead)
45
    {
46
        return $this->update($lead, new LeadAddress());
47
    }
48
49
    /**
50
     * @Route(
51
     *      "/{leadId}/address-update/{id}",
52
     *      name="orocrm_sales_lead_address_update",
53
     *      requirements={"leadId"="\d+","id"="\d+"},defaults={"id"=0}
54
     * )
55
     * @Template
56
     * @AclAncestor("orocrm_sales_lead_update")
57
     * @ParamConverter("lead", options={"id" = "leadId"})
58
     */
59
    public function updateAction(Lead $lead, LeadAddress $address)
60
    {
61
        return $this->update($lead, $address);
62
    }
63
64
    /**
65
     * @param Lead $lead
66
     * @param LeadAddress $address
67
     * @return array
68
     * @throws BadRequestHttpException
69
     */
70
    protected function update(Lead $lead, LeadAddress $address)
71
    {
72
        $responseData = array(
73
            'saved' => false,
74
            'lead' => $lead
75
        );
76
77
        if ($this->getRequest()->getMethod() == 'GET' && !$address->getId()) {
78
            $address->setFirstName($lead->getFirstName());
79
            $address->setLastName($lead->getLastName());
80
            if (!$lead->getAddresses()->count()) {
81
                $address->setPrimary(true);
82
            }
83
        }
84
85
        if ($address->getOwner() && $address->getOwner()->getId() != $lead->getId()) {
86
            throw new BadRequestHttpException('Address must belong to lead');
87
        } elseif (!$address->getOwner()) {
88
            $lead->addAddress($address);
89
        }
90
91
        // Update lead's modification date when an address is changed
92
        $lead->setUpdatedAt(new \DateTime('now', new \DateTimeZone('UTC')));
93
94
        if ($this->get('orocrm_sales.lead_address.form.handler')->process($address)) {
95
            $this->getDoctrine()->getManager()->flush();
96
            $responseData['entity'] = $address;
97
            $responseData['saved'] = true;
98
        }
99
100
        $responseData['form'] = $this->get('orocrm_sales.lead_address.form')->createView();
101
102
        return $responseData;
103
    }
104
}
105