Übercart Conditional Actions összekapcsolása a CCK-val.

mapdesign15 képe

Sziasztok!

Abba a problémában találtam magam, hogy van egy termék adatbázisom és minden terméknél megvan adva egy CCK mezőbe az áfa értéke (15%,20%,25%,stb).

Nekem ebből az értékekből kellene kiszámolnom az ÁFA-t, így gondoltam erre megfelelő lesz az Übercart egyik alapmodulja a Conditional Actions.

Igen ám, de csak termék tulajdonságokat tudok összekötni, viszont CCK mezőt nem. Így a helyzet problémás!

Az lenne a kérdésem, hogy van-e erre valahol megoldás? Drupal 6-os Core-t használok.

Köszönettel,
Daniel

Drupal verzió: 
mapdesign15 képe

Hello!

Nekifogtam egy modulnak, ami a fent leírtakat megtudná csinálni. Már csak egy problémám van: Nem tudom kompatibilisen kiszedni sehogy összehasonlítani a CCK mező értékét.

Íme a kód:

<?php
//$Id: ca_cck.module,v 1.4 2011/08/05 13:19:58 daniel Exp $
 
/**
 * Implements of hook_ca_condition()
 */
function ca_cck_ca_condition() {
    $conditions['ca_cck_check_field'] = array(
	'#category' => t("Order: Product"),
	'#title' => t("Megállapítás CCK mező alapján"),
	'#callback' => 'ca_cck_check_field',
	'#arguments' => array(
	    'order' => array(
		'#entity' => 'uc_order',
	    ),
	),
    );    
    return $conditions;
}
 
/**
 * Implements of hook_form()
 * @param $form_state (array)
 * @param $settings (array) settings from the ca condition
 */
function ca_cck_check_field_form($form_state, $settings = array()) {
    // Available fields
    $sql = db_query("SELECT * FROM {content_node_field_instance} WHERE `widget_active` = 1;");    
    while($row = db_fetch_object($sql)) {
	$options[$row->field_name] = $row->label . ' ['.$row->field_name.'] ('.$row->widget_type.')';
    }
 
    // Form
    $form['cck_field'] = array(
	'#type'          => 'select',
	'#title'         => t('CCK mező'),
	'#options'       => $options,
	'#default_value' => $settings['cck_field'],
	'#description'   => t('Válaszd ki azt a CCK mezőt, amelyet összeszeretnél hasonlítani.'),
	'#required'      => true,
    );
 
    $form['compare_action'] = array(
	'#type'		 => 'select',
	'#title'	 => t('Összehasonlítás módja'),
	'#options'	 => array(
				0 => '==', 1 => '!=',
				2 => '>',  3 => '<',
				4 => '=>', 5 => '=<',
	),
	'#default_value' => $settings['compare_action'],
	'#required'	 => true,
    );
 
    $form['needed_value'] = array(
	'#type'		 => 'textfield',
	'#title'	 => t('Szükséges érték'),
	'#default_value' => $settings['needed_value'],
    );
 
  return $form;
}
 
/**
 * Implements of hook_check_field()
 * @param $order (object) uc_order order object
 * @param $settings (array) settings from the ca condition
 */
function ca_cck_check_field($order, $settings) {
 
    $this	= $settings['needed_value'];
    $bythis	= ''; // ???  Ide kellene valahogy bejuttatni azt a drága CCK
		      // mező értékét. A szívás az, hogy az $order-ből nem
		      // tudok kiszedni semmit, a $settings pedig csak az
		      // alapértelmezett értékeket tartalmazza.
 
    switch($settings['compare_action']) {
	case 0: if ($this == $bythis) { return true; } break;
	case 1: if ($this != $bythis) { return true; } break;
	case 2: if ($this >  $bythis) { return true; } break;
	case 3: if ($this <  $bythis) { return true; } break;
	case 4: if ($this => $bythis) { return true; } break;
	case 5: if ($this =< $bythis) { return true; } break;	
    }
 
    return false;
}

Íme az info fájl:

; $Id: ca_cck.info,v 1.1 2011/08/05 13:19:34 daniel Exp $
 
name = UC CCK Conditional Actions
description = "Provides conditional actions conditions to cck fields"
package = "Ubercart - extra"
core = 6.0
dependencies[] = uc_catalog
version = "6.x-1.x-dev"
core = "6.x"

Remélem lesz valakinek valami jó ötlete. :-)

0
0
mapdesign15 képe

Senki többet 3x?

0
0
dj képe

uc_vat modul?

1
0

Üdv!
Dudás József

mapdesign15 képe

Sajnos nem egészen jó, mert a VAT modul csak globálisan képes kezelni az ÁFA-t, viszont használom a számításhoz. Nekem termékenként kellene elvégeznem a számítást, amire úgy látom a Conditional Actions tökéletes lenne, csak nem képes összedolgozni a CCK-val.

Tehát adott egy CCK field, aminek az értéke egyező az ÁFA-val. Ha a Conditional Actions talál egyezést a CCK-ban, akkor lefutna és kiszámolná mondjuk a 18% ÁFA-t.

A fent elkészített modul ezt megtudná valósítani, csak az az alap hiányzik nekem, ami a termék adatait (vagyis a node-t) tartalmazná. Nem is tudom, hogyan hagyhatták ezt ki! (vagy csak én nem értem)

0
0
mapdesign15 képe

Átnéztem az UC_VAT modul kódjait és az 534-edik sorban van egy kis érdekesség:

  // Run CA rules against the order.
  $predicates = ca_load_trigger_predicates('calculate_taxes');
  $arguments = array(
    'order' => array(
      '#entity' => 'uc_order',
      '#title' => t('Order'),
      '#data' => $order,
    ),
    'tax' => array(
      '#entity' => 'tax',
      '#title' => t('Tax rule'),
    ),
    'account' => array(
      '#entity' => 'user',
      '#title' => t('User'),
      '#data' => $account,
    ),
  );

Itt ha hozzádom a NODE entity-t valamiért nem nagyon ad át semmit a modulom számára. Valamint a node betöltését is itt valahogy meg kellene oldani.

Lenne-e ötlet arra, hogy itt hogyan legyen "belehackelva" a node betöltés és értékeinek átadása a fentebb írt modulom ca_cck_check_field() függvény számára?

0
0
mapdesign15 képe

Elvileg az $order változónak tartalmaznia kellene egy $order->product részt is. Ennek ellenére nekem csak az alábbi jelenik meg:

stdClass Object
(
    [uid] => 1
    [order_id] => 0
    [order_status] => in_checkout
    [billing_country] => 840
    [delivery_country] => 840
)

A "$order->product"-nak nyoma sincs. Viszont az alábbi API-ban létezik, nos akkor most mi van?

http://www.ubercart.org/docs/api/hook_ca_condition

Szerintetek mi lehet a probléma?

0
0
mapdesign15 képe

Sajnos rossz irányba haladtam, de sikerült találnom egy megoldást a problémámra.

Találtam egy issue-t az ubercart.org-on, ami megoldotta a problémát (http://www.ubercart.org/issue/15097/conditionally_tax_products_based_tax...).

Ez a uc_vat modul egy kicsit átfejlesztve, így az uc_vat_with_taxonomy nevet kapta.

Lényege, hogy az ÁFA-t (taxes) taxonómia szótárhoz köthetem, így az adókulcsok felvétele, a taxonómia szótár és értékeinek felvétele után a termékeket egyedi ÁFA-hoz rendelhetem.

Extra beállítás ként érdemes az alábbi beállításokat még kipipálni (admin/store/settings/taxes/vat):

* Add "including VAT" to tax inclusive product prices.
* Show VAT amounts in the cart and at checkout.
* Show VAT amounts in separate columns at checkout.

Így az ÁFA látható lesz a termék oldalon + a megrendelésnél is.

Innen letölthető: http://www.ubercart.org/files/issues/uc_vat_with_taxonomy.tar.gz

2
0