/** * Shows a bug with opportunity as a product relation. The bug is when there is a default customField value * The fix is the use of isReallyModified() to now determine if during save() if the model has really been modified * If it is a new model, then for example 'name' must not be empty, otherwise it is has not really been modified */ public function testEmptyOpportunityGetsCreatedOnProductEdit() { $super = User::getByUsername('super'); Yii::app()->user->userModel = $super; $name = 'Amazing Kid Sample'; $productTemplateName = ProductsDemoDataMaker::getProductTemplateForProduct($name); $productTemplate = ProductTemplateTestHelper::createProductTemplateByName($productTemplateName); $model = new Product(); $name = 'My Simple Product'; $model->name = $name; $model->quantity = 4; $model->stage->value = 'Open'; $model->priceFrequency = $productTemplate->priceFrequency; $model->sellPrice->value = $productTemplate->sellPrice->value; $model->type = $productTemplate->type; $postData = array(); $postData['opportunity'] = array('id' => ''); $model->setAttributes($postData); $model->validate(); $sanitizedOwnerData = array('owner' => array('id' => $super->id)); $model->setAttributes($sanitizedOwnerData); $model->validate(array('owner')); $this->assertTrue($model->opportunity->id < 0); //need to check this to call get first. $this->assertTrue($model->save(false)); $this->assertTrue($model->save(false)); $this->assertTrue($model->opportunity->id < 0); $model->delete(); $productTemplate->delete(); }
public function actionAdmin() { $model = new Product('search'); $model->unsetAttributes(); if (isset($_GET['Product'])) { $model->setAttributes($_GET['Product']); } $this->render('admin', array('model' => $model)); }
public function actionCreate() { $model = new Product(); $description = new ProductDescription(); $image = new XUploadForm(); $userImages = array(); $thumbs = array(); if (!isset($_POST[$this->modelName])) { Yii::app()->user->setState('product_images', NULL); Yii::app()->user->setState('thumbs', NULL); } //$product_option_value = new ProductOptionValue; $this->performAjaxValidation(array($model, $description), 'product-form'); if (isset($_POST[$this->modelName])) { $model->setAttributes($_POST[$this->modelName]); $description->setAttributes($_POST[$this->modelName . 'Description']); $suc = Yii::t('info', 'Product was successfully created'); $err = Yii::t('info', 'Could not create Product'); $description->product_id = 0; $description->locale_code = Yii::app()->getLanguage(); //$description->link = str_replace(' ','-',trim(strtolower(str_replace('_','-',preg_replace('/(?<![A-Z])[A-Z]/', '\0', $description->name))))); $description->link = strtolower(str_replace(' ', '-', preg_replace('!\\s+!', ' ', trim(preg_replace("/[^A-Za-z ]/", ' ', $description->name))))); $userImages = Yii::app()->user->getState('product_images'); $thumbs = Yii::app()->user->getState('thumbs'); if (Yii::app()->user->hasState('thumbs')) { if ($this->validateProduct($model, $description)) { if ($model->save()) { $description->product_id = $model->id; $description->save(); $this->addImages($model->id, 'Image', 'thumbs', 'Product'); $tpath = realpath(UtilityHelper::yiiparam('frontPath') . '/www' . $model->thumbs[0]->source); $timage = Yii::app()->image->load($tpath); $timage->resize(200, 200); $timage->save(); $this->productSave($model); Yii::app()->user->setFlash(TbHtml::ALERT_COLOR_SUCCESS, $suc); if (Yii::app()->getRequest()->getIsAjaxRequest()) { $this->renderPartial('_view', array('model' => $model, 'description' => $description, 'option' => $this->_productoption, 'attribute' => $this->_productattribute), false, true); Yii::app()->end(); } else { $this->redirect(array('view', 'id' => $model->id)); } } else { Yii::app()->user->setFlash(TbHtml::ALERT_COLOR_ERROR, $err); } } } else { Yii::app()->user->setFlash(TbHtml::ALERT_COLOR_ERROR, Yii::t('info', 'Please upload an image')); } } if (Yii::app()->getRequest()->getIsAjaxRequest()) { $this->renderPartial('_form_product', array('model' => $model, 'description' => $description, 'option' => $this->_productoption, 'attribute' => $this->_productattribute, 'thumbs' => $thumbs, 'image' => $image, 'userImages' => $userImages, 'discount' => $this->_productdiscount, 'special' => $this->_productspecial), false, true); Yii::app()->end(); } $this->render('create', array('model' => $model, 'description' => $description, 'option' => $this->_productoption, 'attribute' => $this->_productattribute, 'thumbs' => $thumbs, 'image' => $image, 'userImages' => $userImages, 'discount' => $this->_productdiscount, 'special' => $this->_productspecial)); }
/** * 添加商品 */ public function actionAddProduct() { $this->pageTitle = "添加商品"; $product = new Product(); if (isset($_POST) && isset($_POST['Product'])) { $_POST['Product']['product_user_id'] = Yii::app()->user->getId(); $product->setAttributes($_POST['Product']); if ($product->validate() && $product->save()) { $this->redirect(Yii::app()->createUrl('/wechat/product/changePro/id/' . $product->product_id)); Yii::app()->end(); } } $this->render('product_add', array("product" => $product)); }
/** * Управление товарами. */ public function actionIndex() { $model = new Product('search'); $model->unsetAttributes(); if (Yii::app()->getRequest()->getQuery('Product')) { $model->setAttributes(Yii::app()->getRequest()->getQuery('Product')); } $this->render('index', ['model' => $model]); }
/** * @return null|Product * @throws CDbException */ public function copy() { $transaction = Yii::app()->getDb()->beginTransaction(); $model = new Product(); try { $model->setAttributes($this->getAttributes()); $model->slug = null; $similarNamesCount = Yii::app()->getDb()->createCommand()->select('count(*)')->from($this->tableName())->where("name like :name", [':name' => $this->name . ' [%]'])->queryScalar(); $model->name = $this->name . ' [' . ($similarNamesCount + 1) . ']'; $attributes = $model->attributes; $typeAttributes = $this->getEavAttributes(); $variantAttributes = []; $categoriesIds = []; if ($variants = $this->variants) { foreach ($variants as $variant) { $variantAttributes[] = $variant->getAttributes(['attribute_id', 'attribute_value', 'amount', 'type', 'sku']); } } if ($categories = $this->categories) { foreach ($categories as $category) { $categoriesIds[] = $category->id; } } if (!$model->saveData($attributes, $typeAttributes, $variantAttributes, $categoriesIds)) { throw new CDbException('Error copy product!'); } $transaction->commit(); return $model; } catch (Exception $e) { $transaction->rollback(); } return null; }
echo Yii::app()->createUrl('/wechat/product/addProduct'); ?> " class="btn btn-qys btn-danger btn-block">添加商品</a> </div> <?php } ?> <div class="col-lg-12 qys_col_12" style="margin-top:25px;"> <div class="panel panel-default"> <div class="panel-body"> <?php #获得所有用户的商品 $produtlists = Product::model()->findAll("1=1 order by product_id desc limit 20;"); $product = new Product(); foreach ($produtlists as $key => $value) { $product->setAttributes($value->getAttributes()); if ($key % 2 == 0) { ?> <div class="row qys_product_row_list"> <?php } ?> <div class="col-lg-6 col-md-6 col-sm-6 col-xs-6"> <div><img class="img-rounded" style="width:100%;" src="<?php echo $product->product_s_img; ?> "/></div> <div> <h5><?php echo $product->product_name;
$outputDir = __DIR__ . '/output/'; $templator = new Templator($templateFile, $outputDir, 'document.xlsx'); $settingsData = ['providerName' => 'ИП Сумкин Ф.Ф.', 'clientName' => 'ООО "Рога и копыта"', 'docNumber' => 5485, 'docDate' => date('d.m.Y'), 'totalProductAmount' => 4, 'totalProductSum' => function () { return 1500 + 400 + 100; }]; $settings = new Settings($settingsData); $map = ['productName', 'productArticle', 'productUnit', 'productAmount', 'productPrice', 'productSum']; $source = [['Стол письменный', 'СП-234', 'шт.', 1, 1500, 1500], ['Чернильница', '75332', 'шт.', 2, 200, 400], ['Лампа настольная 12Вт', '6454', 'шт.', 1, 100, 100]]; $loopData = new LoopData(); $loopData->setMap($map); $loopData->setSource($source); $settings->addLoop(1, $loopData); $templator->render($settings); $templator->save(); // ------------------------------------------------------- // Source as an array of objects // ------------------------------------------------------- $templator = new Templator($templateFile, $outputDir, 'document2.xlsx'); $loopData = new LoopData(); $loopData->setMap($map); $sourceArrayOfObjects = []; foreach ($source as $sourceItem) { $product = new Product(); $product->setAttributes($sourceItem); $sourceArrayOfObjects[] = $product; } $loopData->setSource($sourceArrayOfObjects); $settings = new Settings($settingsData); $settings->addLoop(1, $loopData); $templator->render($settings); $templator->save();