Je travaille sur un point de vente pour une quincaillerie développée avec le framework codeigniter.
Je veux créer un relevé de compte détaillé comme dans l'image ci-dessous
J'ai deux tableaux qui sont les ventes et le paiement, je veux obtenir des données de ces deux tableaux afin de pouvoir générer un relevé de compte d'un client spécifique.
Cela aidera puisque le client peut être en mesure de voir tous les articles qu'il / elle a achetés au comptant ou à crédit et également montrer combien il a payé groupé par date.
Il sera également possible de calculer le montant dû.
Je peux être en mesure de lister séparément (ventes et paiement) en utilisant le code ci-dessous et ainsi calculer le montant dû.
Ventes
<?php
$salestotal = 0;
if (is_array($sales) || is_object($sales))
{
foreach ($sales as $key=>$sale): {?>
<tr>
<td>
<?php echo $sale->date; ?>
</td>
<td>
<?php echo $sale->id; ?>
</td>
<td>
<?php echo $sale->grand_total; ?>
</td>
<td>
<?php echo $sale->paid; ?>
</td>
<td></td>
</tr>
<?php
if(isset($sale->grand_total))
$salestotal += $sale->grand_total;
} endforeach ; }?>
Paiements
<?php
$paymentstotal = 0;
if (is_array($payments) || is_object($payments))
{
foreach ($payments as $key=>$payment): {?>
<tr>
<td>
<?php echo $payment->date; ?>
</td>
<td class="text-center">
<?php echo $payment->sale_id; ?>
</td>
<td class="text-center">
<?php echo $payment->paid_by; ?>
</td>
<td class="text-center">
<?php echo $payment->cheque_no; ?>
</td>
<td class="text-center">
<?php echo $payment->amount; ?>
</td>
<td class="text-center">
<?php echo $this->customers_model->getUserna($payment->created_by); ?>
</td>
<td class="text-center">
<?php echo $payment->pos_paid; ?>
</td>
<td class="text-center">
<?php echo $payment->pos_balance; ?>
</td>
<td class="text-right">
<?php echo $this->customers_model->getStorename($payment->store_id); ?>
</td>
</tr>
<?php
if(isset($payment->amount))
$paymentstotal += $payment->amount;
} endforeach ;}?>
Mon contrôleur
function statement($id = NULL)
{
if (!$this->Admin) {
$this->session->set_flashdata('error', $this->lang->line('access_denied'));
redirect('pos');
}
if($this->input->get('id')) { $id = $this->input->get('id', TRUE); }
$this->data['sales'] = $this->customers_model->getSales($id);
$this->data['payments'] = $this->customers_model->getPayments($id);
$this->data['customer'] = $this->customers_model->getCustomername($id);
$this->data['customer_id'] = $id;
$this->page_cons('customers/statement', $this->data);
}
Mon modele
public function getSales($id)
{
$q = $this->db->get_where('sales', array('customer_id' => $id));
if( $q->num_rows() > 0 ) {
return $q->result();
}
return FALSE;
}
public function getPayments($id)
{
$q = $this->db->get_where('payments', array('customer_id' => $id));
if( $q->num_rows() > 0 ) {
return $q->result();
}
return FALSE;
}
Comment combiner ces deux tableaux?
J'espère être assez clair sur cette question, j'ai essayé de Google mais je n'ai pas de chance.
J'apprécierai toute aide. Merci
Éditer
Tables MYSQL
Paiements
3 réponses
Vous pouvez réutiliser les méthodes données getSales()
et getPayments()
dans une nouvelle méthode getSalesWithPayments()
pour combiner les deux résultats:
public function getSalesWithPayments($customerId) {
$sales = [];
foreach ($this->getSales($customerId) as $sale) {
$sale->payment = null;
$sales[$sale->id] = $sale;
}
foreach ($this->getPayments($customerId) as $payment) {
$sales[$payment->sale_id]->payment = $payment;
}
return $sales;
}
Dans la première boucle, vous initialisez $sale->payment
(pour le cas où une vente n'a pas encore de paiement) et remplissez le tableau $sales
, qui est indexé par la colonne id
. De cette façon, vous pouvez facilement accéder à n'importe quelle vente par son identifiant sans une recherche coûteuse.
Dans la deuxième boucle, vous affectez les paiements aux ventes correspondantes.
Notez que vous devrez peut-être ajouter une logique pour gérer les résultats vides (ce qui ne serait pas nécessaire si vous renvoyiez simplement un tableau vide au lieu de FALSE
).
Vous pouvez maintenant l'utiliser comme ..
Manette:
$this->data['sales'] = $this->customers_model->getSalesWithPayments($id);
Vue:
<?php foreach ($sales as $sale): ?>
<tr>
<td><?php echo $sale->date; ?></td>
<td><?php echo $sale->id; ?></td>
...
<?php if($sale->payment !== null): ?>
<td><?php echo $sale->payment->date; ?></td>
<td><?php echo $sale->payment->amount; ?></td>
...
<?php else: // empty cells if no payment ?>
<td></td>
<td></td>
...
<?php endif; ?>
</tr>
<?php endforeach; ?>
Essaye ça:
$this->db->select('*')
->from('sales')
->join('payments', 'payments.sales_id = sales.id', 'right')
->where(array('sales.customer_id' => $id));
$results = $this->db->get();
Si vous publiez les tableaux sales
et payments
, la réponse sera meilleure et exacte. Vous pouvez utiliser MySQL Join pour obtenir des données combinées à partir de 2 tables.
De nouvelles questions
php
PHP est un langage de script largement utilisé, de haut niveau, dynamique, orienté objet et interprété, principalement conçu pour le développement Web côté serveur. Utilisé pour les questions sur le langage PHP.