19 require_once DOL_DOCUMENT_ROOT.
'/core/class/commonobjectline.class.php';
29 public $module =
'variants';
34 public $element =
'productattributevalue';
39 public $table_element =
'product_attribute_value';
45 public $ismultientitymanaged = 1;
50 public $isextrafieldmanaged = 0;
81 'rowid' => array(
'type'=>
'integer',
'label'=>
'TechnicalID',
'enabled'=>
'1',
'position'=>1,
'notnull'=>1,
'visible'=>0,
'noteditable'=>
'1',
'index'=>1,
'css'=>
'left',
'comment'=>
"Id"),
82 'fk_product_attribute' => array(
'type'=>
'integer:ProductAttribute:variants/class/ProductAttribute.class.php',
'label'=>
'ProductAttribute',
'enabled'=>1,
'visible'=>0,
'position'=>10,
'notnull'=>1,
'index'=>1,),
83 'ref' => array(
'type'=>
'varchar(255)',
'label'=>
'Ref',
'visible'=>1,
'enabled'=>1,
'position'=>20,
'notnull'=>1,
'index'=>1,
'searchall'=>1,
'comment'=>
"Reference of object",
'css'=>
''),
84 'value' => array(
'type'=>
'varchar(255)',
'label'=>
'Value',
'enabled'=>
'1',
'position'=>30,
'notnull'=>1,
'visible'=>1,
'searchall'=>1,
'css'=>
'minwidth300',
'help'=>
"",
'showoncombobox'=>
'1',),
85 'position' => array(
'type'=>
'integer',
'label'=>
'Rank',
'enabled'=>1,
'visible'=>0,
'default'=>0,
'position'=>200,
'notnull'=>1,),
88 public $fk_product_attribute;
100 global $conf, $langs;
103 $this->entity = $conf->entity;
105 if (empty($conf->global->MAIN_SHOW_TECHNICAL_ID) && isset($this->fields[
'rowid'])) {
106 $this->fields[
'rowid'][
'visible'] = 0;
108 if (!
isModEnabled(
'multicompany') && isset($this->fields[
'entity'])) {
109 $this->fields[
'entity'][
'enabled'] = 0;
113 foreach ($this->fields as $key => $val) {
114 if (isset($val[
'enabled']) && empty($val[
'enabled'])) {
115 unset($this->fields[$key]);
120 if (is_object($langs)) {
121 foreach ($this->fields as $key => $val) {
122 if (!empty($val[
'arrayofkeyval']) && is_array($val[
'arrayofkeyval'])) {
123 foreach ($val[
'arrayofkeyval'] as $key2 => $val2) {
124 $this->fields[$key][
'arrayofkeyval'][$key2] = $langs->trans($val2);
144 $this->fk_product_attribute = $this->fk_product_attribute > 0 ? $this->fk_product_attribute : 0;
146 $this->value = trim($this->value);
149 if (empty($this->fk_product_attribute)) {
150 $this->errors[] = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"ProductAttribute"));
153 if (empty($this->
ref)) {
154 $this->errors[] = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Ref"));
157 if (empty($this->value)) {
158 $this->errors[] = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Value"));
168 $sql =
"INSERT INTO " . MAIN_DB_PREFIX . $this->table_element .
" (";
169 $sql .=
" fk_product_attribute, ref, value, entity, position";
172 $sql .=
" " . ((int) $this->fk_product_attribute);
173 $sql .=
", '" . $this->
db->escape($this->
ref) .
"'";
174 $sql .=
", '" . $this->
db->escape($this->value) .
"'";
175 $sql .=
", " . ((int) $this->entity);
176 $sql .=
", " . ((int) $this->position);
182 $this->errors[] =
"Error " . $this->
db->lasterror();
187 $this->
id = $this->
db->last_insert_id(MAIN_DB_PREFIX . $this->table_element);
190 if (!$error && !$notrigger) {
192 $result = $this->
call_trigger(
'PRODUCT_ATTRIBUTE_VALUE_CREATE', $user);
200 $this->
db->rollback();
220 $id = $id > 0 ? $id : 0;
224 $this->errors[] = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"TechnicalID"));
232 $sql =
"SELECT rowid, fk_product_attribute, ref, value";
233 $sql .=
" FROM " . MAIN_DB_PREFIX . $this->table_element;
234 $sql .=
" WHERE rowid = " . ((int) $id);
235 $sql .=
" AND entity IN (" .
getEntity(
'product') .
")";
240 $this->errors[] =
"Error " . $this->
db->lasterror();
245 $numrows = $this->
db->num_rows(
$resql);
247 $obj = $this->
db->fetch_object(
$resql);
249 $this->
id = $obj->rowid;
250 $this->fk_product_attribute = $obj->fk_product_attribute;
251 $this->
ref = $obj->ref;
252 $this->value = $obj->value;
277 $sql .=
"v.fk_product_attribute, v.rowid, v.ref, v.value FROM " . MAIN_DB_PREFIX .
"product_attribute_value v ";
280 $sql .=
"LEFT JOIN " . MAIN_DB_PREFIX .
"product_attribute_combination2val c2v ON c2v.fk_prod_attr_val = v.rowid ";
281 $sql .=
"LEFT JOIN " . MAIN_DB_PREFIX .
"product_attribute_combination c ON c.rowid = c2v.fk_prod_combination ";
282 $sql .=
"LEFT JOIN " . MAIN_DB_PREFIX .
"product p ON p.rowid = c.fk_product_child ";
285 $sql .=
"WHERE v.fk_product_attribute = " . ((int) $prodattr_id);
288 $sql .=
" AND c2v.rowid IS NOT NULL AND p.tosell = 1";
291 $query = $this->
db->query($sql);
293 while ($result = $this->
db->fetch_object($query)) {
294 if (empty($returnonlydata)) {
297 $tmp =
new stdClass();
300 $tmp->fk_product_attribute = $result->fk_product_attribute;
301 $tmp->id = $result->rowid;
302 $tmp->ref = $result->ref;
303 $tmp->value = $result->value;
324 $this->fk_product_attribute = $this->fk_product_attribute > 0 ? $this->fk_product_attribute : 0;
326 $this->value = trim($this->value);
329 if (empty($this->fk_product_attribute)) {
330 $this->errors[] = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"ProductAttribute"));
333 if (empty($this->
ref)) {
334 $this->errors[] = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Ref"));
337 if (empty($this->value)) {
338 $this->errors[] = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Value"));
348 $sql =
"UPDATE " . MAIN_DB_PREFIX . $this->table_element .
" SET";
350 $sql .=
" fk_product_attribute = " . ((int) $this->fk_product_attribute);
351 $sql .=
", ref = '" . $this->
db->escape($this->
ref) .
"'";
352 $sql .=
", value = '" . $this->
db->escape($this->value) .
"'";
353 $sql .=
", position = " . ((int) $this->position);
355 $sql .=
" WHERE rowid = " . ((int) $this->
id);
360 $this->errors[] =
"Error " . $this->
db->lasterror();
364 if (!$error && !$notrigger) {
366 $result = $this->
call_trigger(
'PRODUCT_ATTRIBUTE_VALUE_MODIFY', $user);
377 $this->
db->rollback();
389 public function delete(
User $user, $notrigger = 0)
395 $this->
id = $this->
id > 0 ? $this->id : 0;
398 if (empty($this->
id)) {
399 $this->errors[] = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"TechnicalID"));
407 $result = $this->
isUsed();
410 } elseif ($result > 0) {
411 $this->errors[] = $langs->trans(
'ErrorAttributeValueIsUsedIntoProduct');
417 if (!$error && !$notrigger) {
419 $result = $this->
call_trigger(
'PRODUCT_ATTRIBUTE_VALUE_DELETE', $user);
427 $sql =
"DELETE FROM " . MAIN_DB_PREFIX . $this->table_element .
" WHERE rowid = " . ((int) $this->
id);
432 $this->errors[] =
"Error " . $this->
db->lasterror();
441 $this->
db->rollback();
457 $this->
id = $this->
id > 0 ? $this->id : 0;
460 if (empty($this->
id)) {
461 $this->errors[] = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"TechnicalID"));
469 $sql =
"SELECT COUNT(*) AS nb FROM " . MAIN_DB_PREFIX .
"product_attribute_combination2val WHERE fk_prod_attr_val = " . ((int) $this->
id);
474 $this->errors[] =
"Error " . $this->
db->lasterror();
479 if ($obj = $this->
db->fetch_object(
$resql)) {
483 return $used ? 1 : 0;
errorsToString()
Method to output saved errors.
call_trigger($triggerName, $user)
Call trigger based on this instance.
Parent class for class inheritance lines of business objects This class is useless for the moment so ...
Class to manage Dolibarr database access.
Class ProductAttributeValue Used to represent a product attribute value.
create(User $user, $notrigger=0)
Creates a value for a product attribute.
fetch($id)
Gets a product attribute value.
update(User $user, $notrigger=0)
Updates a product attribute value.
isUsed()
Test if used by a product.
__construct(DoliDB $db)
Constructor.
fetchAllByProductAttribute($prodattr_id, $only_used=false, $returnonlydata=0)
Returns all product attribute values of a product attribute.
Class to manage Dolibarr users.
if(isModEnabled('facture') &&!empty($user->rights->facture->lire)) if((isModEnabled('fournisseur') &&empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD) && $user->hasRight("fournisseur", "facture", "lire"))||(isModEnabled('supplier_invoice') && $user->hasRight("supplier_invoice", "lire"))) if(isModEnabled('don') &&!empty($user->rights->don->lire)) if(isModEnabled('tax') &&!empty($user->rights->tax->charges->lire)) if(isModEnabled('facture') &&isModEnabled('commande') && $user->hasRight("commande", "lire") &&empty($conf->global->WORKFLOW_DISABLE_CREATE_INVOICE_FROM_ORDER)) $resql
Social contributions to pay.
dol_string_nospecial($str, $newstr='_', $badcharstoreplace='', $badcharstoremove='')
Clean a string from all punctuation characters to use it as a ref or login.
dol_sanitizeFileName($str, $newstr='_', $unaccent=1)
Clean a string to use it as a file name.
isModEnabled($module)
Is Dolibarr module enabled.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
getEntity($element, $shared=1, $currentobject=null)
Get list of entity id to use.
$conf db
API class for accounts.