private function addOrUpdate($type, $data)
 {
     if ($type == "update") {
         $sm = $this;
     } else {
         $sm = new self();
     }
     $sm->setBaseRate($data['baseRate']);
     $sm->setRateType($data['rateType']);
     $sm->setPerItemRate($data['perItemRate']);
     $sm->setPerWeightRate($data['perWeightRate']);
     $sm->setMinimumAmount($data['minimumAmount']);
     $sm->setMaximumAmount($data['maximumAmount']);
     $sm->setMinimumWeight($data['minimumWeight']);
     $sm->setMaximumWeight($data['maximumWeight']);
     $sm->setCountries($data['countries']);
     if ($data['countriesSelected']) {
         $countriesSelected = implode(',', $data['countriesSelected']);
     }
     $sm->setCountriesSelected($countriesSelected);
     $em = Database::get()->getEntityManager();
     $em->persist($sm);
     $em->flush();
     return $sm;
 }