/**
  * @return Market_ProductModel
  * @throws Exception
  */
 private function _setProductFromPost()
 {
     $productId = craft()->request->getPost('productId');
     if ($productId) {
         $product = craft()->market_product->getById($productId);
         if (!$product) {
             throw new Exception(Craft::t('No product with the ID “{id}”', ['id' => $productId]));
         }
     } else {
         $product = new Market_ProductModel();
     }
     $availableOn = craft()->request->getPost('availableOn');
     $expiresOn = craft()->request->getPost('expiresOn');
     $product->availableOn = $availableOn ? DateTime::createFromString($availableOn, craft()->timezone) : $product->availableOn;
     $product->expiresOn = $expiresOn ? DateTime::createFromString($expiresOn, craft()->timezone) : null;
     $product->typeId = craft()->request->getPost('typeId');
     $product->enabled = craft()->request->getPost('enabled');
     $product->promotable = craft()->request->getPost('promotable');
     $product->freeShipping = craft()->request->getPost('freeShipping');
     $product->authorId = craft()->userSession->id;
     $product->taxCategoryId = craft()->request->getPost('taxCategoryId', $product->taxCategoryId);
     if (!$product->availableOn) {
         $product->availableOn = new DateTime();
     }
     $product->getContent()->title = craft()->request->getPost('title', $product->title);
     $product->slug = craft()->request->getPost('slug', $product->slug);
     $product->setContentFromPost('fields');
     return $product;
 }