2016-11-10 1 views
1

J'ai essayé d'implémenter MPDF sur la fonction de recherche du modèle avancé Yii2 mais ne semble pas donner le résultat que je voulais. Ce que je veux, c'est quand je mets la valeur à l'intérieur du textField(sales_id), je devrais pouvoir utiliser le bouton d'impression en utilisant l'extension MPDF où la condition est que les données montrées dans mpdf ne doivent contenir qu'une valeur de sales_id similaire dans ses champs, comme ceci image ci-dessous:Comment imprimer/afficher les critères de recherche en cours en PDF en utilisant Yii2 et mpdf?

view example

J'ai fait la méthode dans mon contrôleur comme ceci:

public function actionPrintPerSales() 
    { 
     // trying to get the sales_id post value 
     $request = Yii::$app->request; 
     $sales_id = $request->post('sales_id'); 
     $model = new PiutangCustomer(); 



    // Your SQL query filter here 
    $dataProvider = new ActiveDataProvider([ 
     'query' => PiutangCustomer::find() 
      ->where(['status_piutang' => '0']) 
      ->andWhere(['sales_id'] => $sales_id) 
      ->orderBy(['customer_id' => SORT_ASC]) 
    ]); 

    $content = $this->renderPartial('_print-per-sales', ['model', 'dataProvider' => $dataProvider]); 

    // setup kartik\mpdf\Pdf component 
    $pdf = new Pdf([ 
    // set to use core fonts only 
    'mode' => Pdf::MODE_CORE, 
    // A4 paper format 
    'format' => Pdf::FORMAT_A4, 
    // portrait orientation 
    'orientation' => Pdf::ORIENT_PORTRAIT, 
    // stream to browser inline 
    'destination' => Pdf::DEST_BROWSER, 
    // your html content input 
    'content' => $content, 
    // format content from your own css file if needed or use the 
    // enhanced bootstrap css built by Krajee for mPDF formatting 
    'cssFile' => '@vendor/kartik-v/yii2-mpdf/assets/kv-mpdf-bootstrap.min.css', 
    // any css to be embedded if required 
    'cssInline' => '.kv-heading-1{font-size:18px}', 
    // set mPDF properties on the fly 
    'options' => ['title' => 'Cetak Laporan Piutang Menurut Customer'], 
    // call mPDF methods on the fly 
    'methods' => [ 
    'SetHeader'=>['Laporan Piutang - NAMA TOKO/PERUSAHAAN/CV'], 
    'SetFooter'=>['Powered by PFSOFT | {PAGENO}'], 
    ] 
    ]); 

    /*------------------------------------*/ 
    Yii::$app->response->format = \yii\web\Response::FORMAT_RAW; 
    $headers = Yii::$app->response->headers; 
    $headers->add('Content-Type', 'application/pdf'); 
    /*------------------------------------*/ 

    // return the pdf output as per the destination setting 
    return $pdf->render(); 
    } 

Pour la vue, je fait quelque chose comme ceci:

<?php echo $this->render('_search-per-sales', ['model' => $searchModel]); ?> 

Et sous forme _search-per-vente Voir:

<?php $form = ActiveForm::begin([ 
     'action' => ['print-per-sales'], 
     'method' => 'post', 
    ]); ?> 

<?= $form->field($model, 'sales_id')->textInput() ?> 

<div class="form-group"> 
    <?= Html::submitButton(Yii::t('app', 'PRINT'), ['class' => 'fa fa-print btn btn-warning']) ?> 
</div> 

<?php ActiveForm::end(); ?> 

Et comme pour la vue rendu des actionPrintPerSales (_print-par-vente):

<?= GridView::widget([ 
     'dataProvider' => $dataProvider, 
     //'filterModel' => $searchModel, 
     'columns' => [ 
      ['class' => 'yii\grid\SerialColumn'], 
      // 'customer_id', 
      [ 
       'label' => 'Nama Customer', 
       'value' => 'customer.first_name', 
      ], 
      [ 
       'attribute' => 'nilai_piutang', 
       'contentOptions' => ['style' => 'text-align:right'], 
       'format'=>['decimal',0], 
      ], 
      [ 
       'attribute' => 'total_bayar', 
       'contentOptions' => ['style' => 'text-align:right'], 
       'format'=>['decimal',0] 
      ], 
      [ 
       'attribute' => 'sisa_piutang', 
       'contentOptions' => ['style' => 'text-align:right'], 
       'format'=>['decimal',0] 
      ], 
      'faktur', 
      [ 
       'attribute' => 'tanggal_jatuh_tempo', 
       'contentOptions' => ['style' => 'text-align:center'], 
       'format' => ['date', 'php:d-M-Y'] 
      ], 
      'sales_id', 
      [ 
       'label' => 'Nama Sales', 
       'value' => function ($data){ return $data->kodeSales->nama; }, 
      ], 
     ], 
    ]); ?> 

Il y a Quelque chose ne va pas avec mon filtre de requête SQL, à l'intérieur du contrôleur. Je peux dire à mon MPDF travaille parce que quand je commente la clause where:

// ->andWhere('sales_id' = $sales_id) 

Le pdf fonctionne, seulement il montre toutes les données sans filtrage sales_id.

Répondre

1

Essayez utilisation

->andFilterWhere(['sales_id' => $model->sales_id ]) 

pourrait être que vous $sales_id = $request->post('sales_id'); ne chargez pas la valeur que vous attendiez ..

+0

merci pour l'aide, mais j'ai tout réussi en corrigeant la clause where -> andWhere (['sales_id'] => $ model-> sales_id) en -> etWhere (['sales_id' => $ model- > sales_id]) – JoenMarz

+0

@JoenMarz. est ma réponse est juste alors marquer comme accepté .. sinon si la marque utile est utile .. – scaisEdge

+0

le tableau doit être -> andFilterWhere (['sales_id' => $ model-> sales_id]) – JoenMarz

0

En raison de l'utilisation de ActiveForm la variable est passée dans votre message en tant que modelName[salesid] et non sales_id. Vous pouvez remplir le modèle des attributs d'un formulaire à l'aide load:

$model->load(Yii::$app->request->post()); 

Vous pouvez ensuite filtrer les valeurs via:

$dataProvider = new ActiveDataProvider([ 
    'query' => PiutangCustomer::find() 
     ->where(['status_piutang' => '0']) 
     ->andWhere(['sales_id'] => $model->sales_id) 
     ->orderBy(['customer_id' => SORT_ASC]) 
]); 

Vous devez passer $model dans renderPartial:

$content = $this->renderPartial('_print-per-sales', ['model' => $model, 'dataProvider' => $dataProvider]); 

Et puis passez le $model dans votre formulaire:

<?php echo $this->render('_search-per-sales', ['model' => $model]); ?> 
+0

comme vous pouvez le voir dans mon contrôleur, je l'ai déjà fait ça. Mon mpdf s'affiche normalement. Ma question ci-dessus est, comment afficher le mpdf où la valeur de sales_id est égale à ma valeur textField. – JoenMarz

+0

Vous passez la chaîne '' model'' à la place de l'objet '$ model', c'est-à-dire' ['model', ...] 'au lieu de' ['model' => $ model ']. J'ai mis à jour la réponse avec d'autres questions. – topher

+0

merci pour l'aide, mais j'ai tout obtenu en corrigeant la clause where -> andWhere (['sales_id'] => $ model-> sales_id) en -> etWhere (['sales_id' => $ model-> sales_id ]) – JoenMarz