http://www.oscommerceitalia.com/modules ... pic&t=1086ego2012 ha scritto:
a) sul pannello ADMIN di osC in > moduli > pagamento > cod > modifica
credo di non poter settare un costo aggiuntivo da sommare al costo della spedizione
'iao
Sergio
Moderatore: mod Generali
http://www.oscommerceitalia.com/modules ... pic&t=1086ego2012 ha scritto:
a) sul pannello ADMIN di osC in > moduli > pagamento > cod > modifica
credo di non poter settare un costo aggiuntivo da sommare al costo della spedizione
ego2012 ha scritto:scusate, ma fino a che non ho capito continuo a batterci il capo.
spero di non risultare molesto.
ho finalmente visto dov'è il COD (grazie Bass) ma ho due problemi:
a) sul pannello ADMIN di osC in > moduli > pagamento > cod > modifica
credo di non poter settare un costo aggiuntivo da sommare al costo della spedizione
b) con le poste mi pare (ma non ne sono sicuro) che il contrassegno sia un servizio aggiuntivo di alcuni tipi di spedizione es: posta assicurata e i vari pacco celere impresa
insomma, dubito che quel modulo sia adatto a gestire le casistiche delle poste italiane... "non sò se mi sono capito?"
Grazie ancora
Diego
Ciao grenda,grenda ha scritto: si hai ragione, per aggiungere il costo del contrassegno c'è una contrib apposita
vai su www.oscommerce.com ->contribution e cerca la contrib con questo nome:
ot_fixed_payment_chg
hozone ha scritto:è vero, in effetti se il peso massimo (anche di un sono prodotto) è > del massimo peso del modulo di spezione, non dovrebbe essere attivato il metodogrenda ha scritto:hozone ha scritto:scusate il ritardo ho letto solo ora questi post.
non so come si possa risolvere il problema, perchè la variabile peso, è passata come 1 solo parametro.
si potrebbe fare in questo modo però (faccio un esempio):
limite_max: 30Kg
costo_di_spedizione: 5Euro
prodotti_da_spedire: 2 (40Kg + 10Kg)
peso_spedizione: 50Kg
---
costo_di_spedizione = costo_di_spedizione * tetto(peso_spedizione / limite_max)
nell'esempio verrebbe: costo totale di spedione 5Euro * 2
Scusa Hozone,
Se non ho capito male, Questo calcolo che tu dici, è quello che oscommerce fa già,
il problema non è il calcolo del costo, che è corretto, ma il fatto che non posso spedire un prodotto di 40 kg con paccocelere.
Scusa la mia insistenza
aspita.. allora non so come fare.. appunto perchè il metodo viene attivato sul peso_totale della merce aquistata.. non ho variabili che mi specifichino il peso parziale dei prodotti. tuttavia si può tentare di leggere dalle variabili globali, magari rimane l'id dei prodotti, e da li risalire ai pesi... solo che ora non ho tempo di provarci
Codice: Seleziona tutto
if ($shipping_weight > SHIPPING_MAX_WEIGHT) { // Split into many boxes
$shipping_num_boxes = ceil($shipping_weight/SHIPPING_MAX_WEIGHT);
$shipping_weight = $shipping_weight/$shipping_num_boxes;
}
Codice: Seleziona tutto
if ($dest_zone == 0) {
$error = true;
$error_text = MODULE_SHIPPING_POSTEPACCOORDINARIO_INVALID_ZONE;
} else {
$shipping = -1;
$postepaccoordinario_cost = constant('MODULE_SHIPPING_POSTEPACCOORDINARIO_COST_' . $dest_zone);
$postepaccoordinario_table = split("[:,]" , $postepaccoordinario_cost);
$size = sizeof($postepaccoordinario_table);
for ($i=0; $i<$size; $i+=2) {
if ($shipping_weight <= $postepaccoordinario_table[$i]) {
$shipping = $postepaccoordinario_table[$i+1];
$shipping_method = MODULE_SHIPPING_POSTEPACCOORDINARIO_TEXT_WAY;
break;
}
}
if ($shipping == -1) {
$shipping_cost = 0;
$error = true;
$error_text = MODULE_SHIPPING_POSTEPACCOORDINARIO_UNDEFINED_RATE;
} else {
$shipping_cost = ($shipping * $shipping_num_boxes) + constant('MODULE_SHIPPING_POSTEPACCOORDINARIO_HANDLING_' . $dest_zone);
}
}
Codice: Seleziona tutto
if ($dest_zone == 0) {
$error = true;
$error_text = MODULE_SHIPPING_POSTEPACCOORDINARIO_INVALID_ZONE;
} else {
$postepaccoordinario_cost = constant('MODULE_SHIPPING_POSTEPACCOORDINARIO_COST_' . $dest_zone);
$postepaccoordinario_table = split("[:,]" , $postepaccoordinario_cost);
$size = sizeof($postepaccoordinario_table);
$zones_max_weight = $postepaccoordinario_table[$size-2];
foreach ($order->products as $prodotto) {
if ($prodotto['weight'] > $zones_max_weight) {
$error = true;
$error_text = MODULE_SHIPPING_CORRIERE1_UNDEFINED_RATE;
}
}
if (!$error) {
$shipping = -1;
$shipping_num_boxes = 1;
$shipping_weight_postepaccoordinario = $shipping_weight;
if ($shipping_weight_postepaccoordinario > $zones_max_weight) { // Split into many boxes
$shipping_num_boxes = ceil($shipping_weight_postepaccoordinario/$zones_max_weight);
$shipping_weight_postepaccoordinario = $shipping_weight_postepaccoordinario/$shipping_num_boxes;
}
for ($i=0; $i<$size; $i+=2) {
if ($shipping_weight_postepaccoordinario <= $postepaccoordinario_table[$i]) {
$shipping = $postepaccoordinario_table[$i+1];
$shipping_method = MODULE_SHIPPING_POSTEPACCOORDINARIO_TEXT_WAY;
break;
}
}
if ($shipping == -1) {
$shipping_cost = 0;
$error = true;
$error_text = MODULE_SHIPPING_POSTEPACCOORDINARIO_UNDEFINED_RATE;
} else {
$shipping_cost = ($shipping * $shipping_num_boxes) + constant('MODULE_SHIPPING_POSTEPACCOORDINARIO_HANDLING_' . $dest_zone);
}
}
}
Codice: Seleziona tutto
if ($dest_zone == 0) {
$error = true;
$error_text = MODULE_SHIPPING_CORRIERE1_INVALID_ZONE;
} else {
$shipping = -1;
$zones_cost = constant('MODULE_SHIPPING_CORRIERE1_COST_' . $dest_zone);
$zones_table = split("[:,]" , $zones_cost);
$size = sizeof($zones_table);
for ($i=0; $i<$size; $i+=2) {
if ($shipping_weight <= $zones_table[$i]) {
$shipping = $zones_table[$i+1];
$shipping_method = MODULE_SHIPPING_CORRIERE1_TEXT_WAY;
break;
}
}
if ($shipping == -1) {
$shipping_cost = 0;
$error = true;
$error_text = MODULE_SHIPPING_CORRIERE1_UNDEFINED_RATE;
} else {
$shipping_cost = ($shipping * $shipping_num_boxes) + constant('MODULE_SHIPPING_CORRIERE1_HANDLING_' . $dest_zone);
}
}
Codice: Seleziona tutto
if ($dest_zone == 0) {
$error = true;
$error_text = MODULE_SHIPPING_CORRIERE1_INVALID_ZONE;
} else {
$zones_cost = constant('MODULE_SHIPPING_CORRIERE1_COST_' . $dest_zone);
$zones_table = split("[:,]" , $zones_cost);
$size = sizeof($zones_table);
$zones_max_weight = $zones_table[$size-2];
foreach ($order->products as $prodotto) {
if ($prodotto['weight'] > $zones_max_weight) {
$error = true;
$error_text = MODULE_SHIPPING_CORRIERE1_UNDEFINED_RATE;
}
}
if (!$error) {
$shipping = -1;
$shipping_num_boxes = 1;
$shipping_weight_corriere1 = $shipping_weight;
if ($shipping_weight > $zones_max_weight) { // Split into many boxes
$shipping_num_boxes = ceil($shipping_weight_corriere1/$zones_max_weight);
$shipping_weight_corriere1 = $shipping_weight_corriere1/$shipping_num_boxes;
}
for ($i=0; $i<$size; $i+=2) {
if ($shipping_weight_corriere1 <= $zones_table[$i]) {
$shipping = $zones_table[$i+1];
$shipping_method = MODULE_SHIPPING_CORRIERE1_TEXT_WAY;
break;
}
}
if ($shipping == -1) {
$shipping_cost = 0;
$error = true;
$error_text = MODULE_SHIPPING_CORRIERE1_UNDEFINED_RATE;
} else {
$shipping_cost = ($shipping * $shipping_num_boxes) + constant('MODULE_SHIPPING_CORRIERE1_HANDLING_' . $dest_zone);
}
}
}
Codice: Seleziona tutto
if ($dest_zone == 0) {
$error = true;
$error_text = MODULE_SHIPPING_POSTEPACCOCELERE3_INVALID_ZONE;
} else {
$zones_cost = constant('MODULE_SHIPPING_POSTEPACCOCELERE3_COST_' . $dest_zone);
$zones_table = split("[:,]" , $zones_cost);
$size = sizeof($zones_table);
$zones_max_weight = $zones_table[$size-2];
foreach ($order->products as $prodotto) {
if ($prodotto['weight'] > $zones_max_weight) {
$error = true;
$error_text = MODULE_SHIPPING_POSTEPACCOCELERE3_UNDEFINED_RATE;
}
}
if (!$error) {
$shipping = -1;
$shipping_num_boxes = 1;
$shipping_weight_postepaccocelere3 = $shipping_weight;
if ($shipping_weight > $zones_max_weight) { // Split into many boxes
$shipping_num_boxes = ceil($shipping_weight_postepaccocelere3/$zones_max_weight);
$shipping_weight_postepaccocelere3 = $shipping_weight_postepaccocelere3/$shipping_num_boxes;
}
for ($i=0; $i<$size; $i+=2) {
if ($shipping_weight_postepaccocelere3 <= $zones_table[$i]) {
$shipping = $zones_table[$i+1];
$shipping_method = MODULE_SHIPPING_POSTEPACCOCELERE3_TEXT_WAY;
break;
}
}
if ($shipping == -1) {
$shipping_cost = 0;
$error = true;
$error_text = MODULE_SHIPPING_POSTEPACCOCELERE3_UNDEFINED_RATE;
} else {
$shipping_cost = ($shipping * $shipping_num_boxes) + constant('MODULE_SHIPPING_POSTEPACCOCELERE3_HANDLING_' . $dest_zone);
}
}
}
Scusami io avrei un'altro tipo di esigenza, il mio problema non è il peso ma la quantità visto che vendo prodotti di pocho peso, si potrebbe fare una modifica che da più di 10 pezzi ordinati non sia visibile la postaraccomandata ma solo i pacco celere? Ho il problema che se metto più di 10 pezzi in un ordine vado fuori misura accettabile dalle poste per le raccomandate.VideoVideoDoc ha scritto:Sorry, ho letto il post solo ieri. Ed in effetti serviva anche a me risolvere il problema, prima spedivamo solo con corriere espresso, adesso invece abbiamo introdotto anche poste italiane-pacco ordinario. Così ieri mi son messo un paio d'ore sul codice.
Riassumiamo i vari problemi:
- Osc utilizza un'unica variabile per il peso. E se supera il massimo spedibile semplicemente divide il peso totale in più pacchi. Ma se ho un prodotto che da solo supera il peso massimo, mi deve scrivere che non posso spedire quel pacco Invece Osc fa partire ugualmente la spedizione.
- Da admin -> Configurazione -> Shipping/Packaging posso impostare la variabile "Peso massimo". Ma non va bene solo una variabile per tutti i tipi di spedizioni. Ad esempio il pacco ordinario è fino a 20 kg per italia e resto del mondo. SDA invece ha come limite 30 kg per l'Italia e 10 per il resto del mondo. Bel casino.
Ecco come risolvere tutti i problemi.
Prima però qualche appunto:
- Osc non gestisce il peso di più pacchi (peso inteso come imballaggio). Lo aggiunge solo una volta, oppure se il peso totale dei prodotti va oltre un certo valore aggiunge al peso dei prodotti una percentuale che indicate voi. Secondo me pessimo metodo. SE NON AVETE CAPITO COSA HO APPENA SCRITTO, impostate a 0 la variabile "Larger packages - percentage increase" e la variabile "Package Tare Weight" (In questo modo vale solo il peso dei prodotti e Osc non fa schifezze con il peso degli imballaggi).
Considerate che i miei file sono pesantemente modificati, cercherò comunque di spiegare dove e cosa modificare.
Nel file /includes/classes/shipping.php
trovate (a me riga 61):commentate tutte le righe.Codice: Seleziona tutto
if ($shipping_weight > SHIPPING_MAX_WEIGHT) { // Split into many boxes $shipping_num_boxes = ceil($shipping_weight/SHIPPING_MAX_WEIGHT); $shipping_weight = $shipping_weight/$shipping_num_boxes; }
Nel file /includes/modules/shipping/postepaccoordinario.php
riga 66 del file originario sostituite questo codice:con questo:Codice: Seleziona tutto
if ($dest_zone == 0) { $error = true; $error_text = MODULE_SHIPPING_POSTEPACCOORDINARIO_INVALID_ZONE; } else { $shipping = -1; $postepaccoordinario_cost = constant('MODULE_SHIPPING_POSTEPACCOORDINARIO_COST_' . $dest_zone); $postepaccoordinario_table = split("[:,]" , $postepaccoordinario_cost); $size = sizeof($postepaccoordinario_table); for ($i=0; $i<$size; $i+=2) { if ($shipping_weight <= $postepaccoordinario_table[$i]) { $shipping = $postepaccoordinario_table[$i+1]; $shipping_method = MODULE_SHIPPING_POSTEPACCOORDINARIO_TEXT_WAY; break; } } if ($shipping == -1) { $shipping_cost = 0; $error = true; $error_text = MODULE_SHIPPING_POSTEPACCOORDINARIO_UNDEFINED_RATE; } else { $shipping_cost = ($shipping * $shipping_num_boxes) + constant('MODULE_SHIPPING_POSTEPACCOORDINARIO_HANDLING_' . $dest_zone); } }
Stessa cosa con il file /includes/modules/shipping/corriere1.phpCodice: Seleziona tutto
if ($dest_zone == 0) { $error = true; $error_text = MODULE_SHIPPING_POSTEPACCOORDINARIO_INVALID_ZONE; } else { $postepaccoordinario_cost = constant('MODULE_SHIPPING_POSTEPACCOORDINARIO_COST_' . $dest_zone); $postepaccoordinario_table = split("[:,]" , $postepaccoordinario_cost); $size = sizeof($postepaccoordinario_table); $zones_max_weight = $postepaccoordinario_table[$size-2]; foreach ($order->products as $prodotto) { if ($prodotto['weight'] > $zones_max_weight) { $error = true; $error_text = MODULE_SHIPPING_CORRIERE1_UNDEFINED_RATE; } } if (!$error) { $shipping = -1; $shipping_num_boxes = 1; $shipping_weight_postepaccoordinario = $shipping_weight; if ($shipping_weight_postepaccoordinario > $zones_max_weight) { // Split into many boxes $shipping_num_boxes = ceil($shipping_weight_postepaccoordinario/$zones_max_weight); $shipping_weight_postepaccoordinario = $shipping_weight_postepaccoordinario/$shipping_num_boxes; } for ($i=0; $i<$size; $i+=2) { if ($shipping_weight_postepaccoordinario <= $postepaccoordinario_table[$i]) { $shipping = $postepaccoordinario_table[$i+1]; $shipping_method = MODULE_SHIPPING_POSTEPACCOORDINARIO_TEXT_WAY; break; } } if ($shipping == -1) { $shipping_cost = 0; $error = true; $error_text = MODULE_SHIPPING_POSTEPACCOORDINARIO_UNDEFINED_RATE; } else { $shipping_cost = ($shipping * $shipping_num_boxes) + constant('MODULE_SHIPPING_POSTEPACCOORDINARIO_HANDLING_' . $dest_zone); } } }
Sostituite questo pezzocon questo:Codice: Seleziona tutto
if ($dest_zone == 0) { $error = true; $error_text = MODULE_SHIPPING_CORRIERE1_INVALID_ZONE; } else { $shipping = -1; $zones_cost = constant('MODULE_SHIPPING_CORRIERE1_COST_' . $dest_zone); $zones_table = split("[:,]" , $zones_cost); $size = sizeof($zones_table); for ($i=0; $i<$size; $i+=2) { if ($shipping_weight <= $zones_table[$i]) { $shipping = $zones_table[$i+1]; $shipping_method = MODULE_SHIPPING_CORRIERE1_TEXT_WAY; break; } } if ($shipping == -1) { $shipping_cost = 0; $error = true; $error_text = MODULE_SHIPPING_CORRIERE1_UNDEFINED_RATE; } else { $shipping_cost = ($shipping * $shipping_num_boxes) + constant('MODULE_SHIPPING_CORRIERE1_HANDLING_' . $dest_zone); } }
Se avete impostati altri metodi di spedizione dovete fare lo stesso per tutti i moduli impostati.Codice: Seleziona tutto
if ($dest_zone == 0) { $error = true; $error_text = MODULE_SHIPPING_CORRIERE1_INVALID_ZONE; } else { $zones_cost = constant('MODULE_SHIPPING_CORRIERE1_COST_' . $dest_zone); $zones_table = split("[:,]" , $zones_cost); $size = sizeof($zones_table); $zones_max_weight = $zones_table[$size-2]; foreach ($order->products as $prodotto) { if ($prodotto['weight'] > $zones_max_weight) { $error = true; $error_text = MODULE_SHIPPING_CORRIERE1_UNDEFINED_RATE; } } if (!$error) { $shipping = -1; $shipping_num_boxes = 1; $shipping_weight_corriere1 = $shipping_weight; if ($shipping_weight > $zones_max_weight) { // Split into many boxes $shipping_num_boxes = ceil($shipping_weight_corriere1/$zones_max_weight); $shipping_weight_corriere1 = $shipping_weight_corriere1/$shipping_num_boxes; } for ($i=0; $i<$size; $i+=2) { if ($shipping_weight_corriere1 <= $zones_table[$i]) { $shipping = $zones_table[$i+1]; $shipping_method = MODULE_SHIPPING_CORRIERE1_TEXT_WAY; break; } } if ($shipping == -1) { $shipping_cost = 0; $error = true; $error_text = MODULE_SHIPPING_CORRIERE1_UNDEFINED_RATE; } else { $shipping_cost = ($shipping * $shipping_num_boxes) + constant('MODULE_SHIPPING_CORRIERE1_HANDLING_' . $dest_zone); } } }
Con queste modifichè però sarà tutto automatico, in teoria potreste anche eliminare la variabile generale "peso massimo" di osc. Il peso se lo va a prendere direttamente dal tipo di spedizione.
IMPORTANTE: questo codice funziona solo se avete impostato in modo crescente i costi della spedizione.
Esempio (10€ fino ad 1kg, 20€ fino a 3kg e 50€ fino a 5kg:
1:10,3:20,5:50
Ciao