/********************************* CRubList.h ************************************
 *                                                                                *
 *   #include "CRubList.h"                                                        *
 *   Project: MedinTux                                                            *
 *   Copyright (C) 2003 2004 2005 by Sevin Roland  and Data Medical Design        *
 *   E-Mail: data.medical.design@club-internet.fr                                 *
 *                                                                                *
 *   This program is free software; you can redistribute it and/or modify         *
 *   it under the terms of the CeCILL Version 1 du 21/06/2004                     *
 *   License (GPL compatible)                                                     *
 *                              http://www.cecill.info/                           *
 *   as published by :                                                            *
 *                                                                                *
 *   Commissariat à l'Energie Atomique                                            *
 *   - CEA,                                                                       *
 *                            31-33 rue de la Fédération, 75752 PARIS cedex 15.   *
 *                            FRANCE                                              *
 *   Centre National de la Recherche Scientifique                                 *
 *   - CNRS,                                                                      *
 *                            3 rue Michel-Ange, 75794 Paris cedex 16.            *
 *                            FRANCE                                              *
 *   Institut National de Recherche en Informatique et en Automatique             *
 *   - INRIA,                                                                     *
 *                            Domaine de Voluceau, Rocquencourt, BP 105, 78153    *
 *                            FRANCE                                              *
 *                                                                                *
 *         This program is distributed in the hope that it will be useful,        *
 *         but WITHOUT ANY WARRANTY; without even the implied warranty of         *
 *         MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.                   *
 *         CeCILL  License (GPL compatible) for more details.                     *
 *                                                                                *
 **********************************************************************************/
#ifndef  CRUBLIST_H
#define  CRUBLIST_H
#include <qvaluelist.h>
#include <qstring.h>
#include <qcstring.h>
#include <qdatetime.h>

/*! \class CRubRecord
 *  \brief Classe de données pour les documents du dossier médical. Hérite de QByteArray. 
 *  Pointeur this = contenu du blob (données compilées ou brutes).
 *
 *  Exemple les Documents de la rubrique Prescription de type ordonnance contiennent :
 *  - un code XML avec le texte de l'ordonnance
 *  - un code XML avec les paramètres de l'ordonnance (médicaments utilisés, posologie...) qui seront récupérés dans les classes appropriées.
 *
 *  Exemple les Documents de la rubrique Documents contiennent :
 *  - un code XML avec le texte de permettant la gestion de l'affichage des documents multimédia
 *  - un code XML avec les documents multimédias encodés en base64.
 *

*/

//====================================== CRubRecord =========================================================================
class CRubRecord : public QByteArray
{
    //................... constructeur destructeur ..................................
public:
    CRubRecord(){}
    CRubRecord(    const char* primKey,
                   const char* libelle,
                   const char* type,
                   const char* subType,
                   const char* date,
                   const char* user,
                   const char* sign_user,
                   const char* data       = 0,
                   long        len_data   = 0,
                   const char* refBlobsPk = ""
                  )
              {m_PrimKey        = primKey;               // peut etre à zero lors de nouveaux documents dans liste et non enregistrés
               m_Libelle        = libelle;
               m_Type           = type;
               m_SubType        = subType;
               m_Date           = date;
               m_User           = user;
               m_SignUser       = sign_user;
               m_Ref_Blobs_PK   = refBlobsPk;
               m_State          = 0;
               //  plantage à cause du delete[] dans la classe !!!!! normal car
               //  QMemArray<type> & QMemArray::assign ( const type * data, uint size )
               //  This is an overloaded member function, provided for convenience. It behaves essentially like the above function.
               //  Shallow copy. Dereferences the current array and references the array data data, which contains size elements. Returns a reference to this array.
               //  Do not delete data later; QMemArray will call free() on it at the right time.
               SetData(data, len_data);
              }
    ~CRubRecord()
              {
              }
    //................... methodes ..................................................
    /*! \brief Définit le contenu des données brutes du document. Données qui seront sauvegardées dans le blob correspondant. Gestion de la mémoire au passage. */
    void SetData (const char* data, long len_data)
            { if (len_data)
                 {resize ( len_data +1);
                  memcpy( this->data(), data, len_data);
                          this->data()[len_data]=0;
                 }
              else resize (0);
            }

    /*! \brief retourne la date de la rubrique au format QDate. */
    QDateTime getDateTime() { return QDateTime::fromString(m_Date, Qt::ISODate); }

    //................... data ......................................................
public:
    QString       m_PrimKey;		/*!< clé primaire du document ? */
    QString       m_Ref_Blobs_PK;	/*!< clé primaire du blob */
    QString       m_Date;		/*!< date du document */
    QString       m_Libelle;		/*!< libelle du document */
    QString       m_Type;		/*!< Type du document */
    QString       m_SubType;		/*!< Sous-type du document */
    QString       m_User;		/*!< Utilisateur */
    QString       m_SignUser;		/*!< Signataire */
    int           m_State;		/*!< Etat du document */
};

//..................... Liste de la classe definie au dessus .........................................................
typedef QValueList<CRubRecord> RUBREC_LIST; /*!< Liste des documents constituant le dossier médical */

#endif

