Charts (jqm1000)

De Wiki1000

Ce support permet d'afficher des graphique Google chart dans une page de l'application.

Format de requête

La requête doit retourner les données du graphique au format Google.

Elle peut retourner soit un graphique, soit un ensemble de graphique.

chart Structure ou tableau de structure
title Titre du graphique
options Options Google du graphique.
cols Données du graphique (Colonnes)
rows Données du graphique (Lignes)
details Des éléments détails actions qui seront affichés sous le graphique.

Exemple de structure JSON à retourner :

<source lang="javascript"> {

  "chart":{
     "title":"Frais de Février (2014)",
     "options":{
        "pieSliceText":"value"
     },
     "cols":[
        {
           "name":"Statut",
           "type":"string"
        },
        {
           "name":"Montant",
           "type":"number"
        }
     ],
     "rows":[
        [
           "En attente1",
           2736.29
        ],
        [
           "Comptabilisées",
           385.56
        ],
        [
           "Refusées",
           1164.61
        ]
     ]
  }

} </source>

Exemple de code générant un graphique :

<source lang="delphi"> //Procedure getDashboard(req:TJson; var resp:TObject); Type

 ExpenseSumView = viewOf(TNoteFrais)
  aYear:Integer = year(nDate);
  aMonth:Integer = month(nDate);
  aAmount:Currency = sum(MontantRetenu);
  aUser:string = Salarie.Operateur.oidutilisateur;
  aStatus:Integer = Statut;
 end;

var json:TJson; ls:TSelector; inst:ExpenseSumView; indx,idc:Integer; begin

 json := TJson.Create();
 resp := json;
 //
 json.chart.title := Format(_TP('Frais de %s (%d)'),[NameOfMonth(ThisMonth),ThisYear]);
 json.chart.options.pieSliceText := 'value';
 json.chart.cols[0].name := _TP('Statut');
 json.chart.cols[0].type := 'string';
 json.chart.cols[1].name := _TP('Montant');
 json.chart.cols[1].type := 'number';
 //
 ls := ExpenseSumView.CreateSelector('(aUser=%1) and (aYear=%2) and (aMonth=%3)','-aYear,-aMonth',true,[GlbUserName,ThisYear,ThisMonth]);
 foreachP inst in ls.AsCursor index indx do
  begin
    case inst.aStatus of
     StatutNF_Valide       : json.chart.rows[indx][0] := _TP('Validées');
     StatutNF_Comptabilise : json.chart.rows[indx][0] := _TP('Comptabilisées');
     StatutNF_Regle        : json.chart.rows[indx][0] := _TP('Réglées');
     StatutNF_Refuse       : json.chart.rows[indx][0] := _TP('Refusées');
     else                    json.chart.rows[indx][0] := _TP('En attente')+inttostr(inst.aStatus);
    end;
    json.chart.rows[indx][1] := inst.aAmount;
  end;
 if not json.Exists('chart.rows') then
   begin
     // google don't like empty rows
     json.chart.rows[0][0] := _TP('Aucune note');
     json.chart.rows[0][1] := 1;
   end;

end; </source>

Exemple de code générant 3 graphiques avec prise en charge des couleurs:

<source lang="delphi"> //Procedure getDashboard(req:TJson; var resp:TObject); Type

 ExpenseSumView = viewOf(TNoteFrais)
  aYear:Integer = year(nDate);
  aMonth:Integer = month(nDate);
  aAmount:Currency = sum(MontantRetenu);
  aUser:string = Salarie.Operateur.oidutilisateur;
  aStatus:Integer = Statut;
 end;

var json:TJson; ls:TSelector; inst:ExpenseSumView; indx,idc,aMonth,aYear:Integer; begin

 json := TJson.Create();
 resp := json;
 //
 idc := 0; aYear := ThisYear; aMonth := ThisMonth;
 while (idc<3) do
  begin
    json.chart[idc].title := Format(_TP('Frais de %s (%d)'),[NameOfMonth(aMonth),aYear]);
    json.chart[idc].options.pieSliceText := 'value';
    json.chart[idc].cols[0].name := _TP('Statut');
    json.chart[idc].cols[0].type := 'string';
    json.chart[idc].cols[1].name := _TP('Montant');
    json.chart[idc].cols[1].type := 'number';
    json.chart[idc].cols[2].role := 'style';
    json.chart[idc].cols[2].type := 'string';
    //
    ls := ExpenseSumView.CreateSelector('(aUser=%1) and (aYear=%2) and (aMonth=%3)','-aYear,-aMonth',true,[GlbUserName,aYear,aMonth]);
    foreachP inst in ls.AsCursor index indx do
     begin
       case inst.aStatus of
        StatutNF_Valide       : json.chart[idc].rows[indx][0] := _TP('Validées');
        StatutNF_Comptabilise : json.chart[idc].rows[indx][0] := _TP('Comptabilisées');
        StatutNF_Regle        : json.chart[idc].rows[indx][0] := _TP('Réglées');
        StatutNF_Refuse       : json.chart[idc].rows[indx][0] := _TP('Refusées');
        else                    json.chart[idc].rows[indx][0] := _TP('En attente')+inttostr(inst.aStatus);
       end;
       json.chart[idc].rows[indx][1] := inst.aAmount;
       case inst.aStatus of
        StatutNF_Valide       : json.chart[idc].rows[indx][2] := 'color:#FFFF66';
        StatutNF_Comptabilise : json.chart[idc].rows[indx][2] := 'color:#0066FF';
        StatutNF_Regle        : json.chart[idc].rows[indx][2] := 'color:#00FF66';
        StatutNF_Refuse       : json.chart[idc].rows[indx][2] := 'color:#FF3300';
        else                    json.chart[idc].rows[indx][2] := 'color:#FDFDF0';
       end;
     end;
    //
    if not json.Exists(Format('chart[%d].rows',[idc])) then
     begin
       // google don't like empty rows
       json.chart[idc].rows[0][0] := _TP('Aucune note');
       json.chart[idc].rows[0][1] := 1;
       json.chart[idc].rows[0][2] := 'color:#808080';
     end;
    //
    idc := idc+1;
    if aMonth=1 then
     begin
       aMonth := 12;
       aYear := aYear -1;
     end
     else
     begin
       aMonth := aMonth-1;
     end;
  end;

end; </source>

Référence

Méthode Usage
$.mobApp.showChart(method, req, options) Execute une requête et affiche un ou plusieurs graphique(s) en fonction de la réponse