/// <summary>
 /// Recuperam ultima lucrare primita de la o clinica anume
 /// </summary>
 /// <param name="pIdClinica"></param>
 /// <param name="pTranzactie"></param>
 /// <returns></returns>
 public static BClientiComenziHeader GetUltimaLucrare(int pIdClinica, IDbTransaction pTranzactie)
 {
     using (DataSet ds = DClientiComenziHeader.GetUltimaLucrare(pIdClinica, pTranzactie))
     {
         foreach (DataRow dr in ds.Tables[0].Rows)
         {
             return(new BClientiComenziHeader(dr));
         }
     }
     return(null);
 }
        /// <summary>
        /// Recuperam ultimele lucrari ale tuturor clinicilor din baza de date
        /// </summary>
        /// <param name="pTranzactie"></param>
        /// <returns></returns>
        public static BColectieClientiComenziHeader GetUltimeleLucrariPerClinica(IDbTransaction pTranzactie)
        {
            BColectieClientiComenziHeader lstDClientiComenzi = new BColectieClientiComenziHeader();

            using (DataSet ds = DClientiComenziHeader.GetUltimeleLucrariPerClinica(pTranzactie))
            {
                foreach (DataRow dr in ds.Tables[0].Rows)
                {
                    lstDClientiComenzi.Add(new BClientiComenziHeader(dr));
                }
            }
            return(lstDClientiComenzi);
        }
        public static BColectieClientiComenziHeader GetListByParamIntrePerioada(int pIdTehnician, DateTime pDataInceput, DateTime pDataSfarsit, CDefinitiiComune.EnumStare pStare, BComportamentAplicatie.Enum_TablouDeBord_DataInteres pDataInteres, IDbTransaction pTranzactie)
        {
            BColectieClientiComenziHeader lstDClientiComenzi = new BColectieClientiComenziHeader();

            using (DataSet ds = DClientiComenziHeader.GetListByParamSiPerioada(getDataInteres(pDataInteres), pIdTehnician, pDataInceput, pDataSfarsit, pStare, pTranzactie))
            {
                foreach (DataRow dr in ds.Tables[0].Rows)
                {
                    lstDClientiComenzi.Add(new BClientiComenziHeader(dr));
                }
            }
            return(lstDClientiComenzi);
        }
        /// <summary>
        /// Metoda de clasa pentru obtinerea unei liste de obiecte de tipul BClientiComenzi
        /// </summary>
        /// <param name="pId"></param>
        /// <returns>Lista ce corespunde parametrilor</returns>
        /// <remarks></remarks>
        public static BColectieClientiComenziHeader GetListByParam(int pIdClient, int pIdReprezentant, int pIdCabinet, CDefinitiiComune.EnumStare pStare, IDbTransaction pTranzactie)
        {
            BColectieClientiComenziHeader lstDClientiComenzi = new BColectieClientiComenziHeader();

            using (DataSet ds = DClientiComenziHeader.GetListByParam(pIdClient, pIdReprezentant, pIdCabinet, pStare, pTranzactie))
            {
                foreach (DataRow dr in ds.Tables[0].Rows)
                {
                    lstDClientiComenzi.Add(new BClientiComenziHeader(dr));
                }
            }
            return(lstDClientiComenzi);
        }
        /// <summary>
        /// Metoda de instanta ce permite actualizarea informatiilor din baza de date pentru a fi conforme cu informatiile actuale ale obiectului
        /// </summary>
        /// <param name="pTranzactie">Tranzactia</param>
        /// <returns>True daca inregistrarea a fost modificata; False in caz contrar</returns>
        /// <remarks>Exceptie daca nu avem initializate proprietatile ce permit identificarea obiectului in baza</remarks>

        public bool UpdateAll(int pIdClient, int pIdCabinet, int pIdReprezentantClient, int pIdPacient, DateTime pDataCreare, DateTime pDataInchidere, string pCodComanda, string pObservatii, string pMotivInchidere, IDbTransaction pTranzactie)
        {
            IDbTransaction Tranzactie = null;

            try
            {
                if (pTranzactie == null)
                {
                    Tranzactie = CCerereSQL.GetTransactionOnConnection();
                }
                else
                {
                    Tranzactie = pTranzactie;
                }
                //Facem actualizarea in baza
                bool succesModificare = false;

                if (!this.ExistaProprietatiModificate())
                {
                    succesModificare = true;
                }
                else
                {
                    succesModificare = DClientiComenziHeader.UpdateById(getDictProprietatiModificate(), this.Id, Tranzactie);
                }

                if (pTranzactie == null)
                {
                    //Facem Comit tranzactiei doar daca aceasta nu a fost transmisa in parametru. Altfel comitul va fi gestionat de functia apelanta
                    CCerereSQL.CloseTransactionOnConnection(Tranzactie, true);
                }
                return(succesModificare);
            }
            catch (Exception)
            {
                if ((pTranzactie == null) && (Tranzactie != null))
                {
                    CCerereSQL.CloseTransactionOnConnection(Tranzactie, false);
                }
                throw;
            }
            finally
            {
                //Reinitializam obiectul pentru a recupera, printre altele, data de actualizare generata de baza de date
                this.Refresh(pTranzactie);
            }
        }
 /// <summary>
 /// Metoda de clasa pentru obtinerea DataRow-ului corespunzator obiectului in baza de date
 /// </summary>
 /// <param name="pId"></param>
 /// <returns>Un DataRow ce contine informatiile corespunzatoare obiectului</returns>
 /// <remarks></remarks>
 private static DataRow GetDataRowForObjet(int pId, IDbTransaction pTranzactie)
 {
     if (pId <= 0)
     {
         throw new IdentificareBazaImposibilaException("BClientiComenziHeader");
     }
     using (DataSet ds = DClientiComenziHeader.GetById(pId, pTranzactie))
     {
         if (ds.Tables[0].Rows.Count > 0)
         {
             return(ds.Tables[0].Rows[0]);
         }
         else
         {
             throw new IdentificareBazaImposibilaException("BClientiComenziHeader");
         }
     }
 }
        /// <summary>
        /// Metoda de instanta ce permite inchiderea(dezactivarea) obiectului
        /// </summary>
        /// <param name="pInchidere">inchidem sau activam?</param>
        /// <param name="pMotivInchidere">Motivul inchiderii</param>
        /// <param name="pTranzactie">Tranzactia</param>
        /// <remarks>Exceptie daca nu se poate identifica obiectul</remarks>
        public void Close(bool pInchidere, string pMotivInchidere, IDbTransaction pTranzactie)
        {
            if (this.Id <= 0)
            {
                throw new IdentificareBazaImposibilaException("BClientiComenziHeader");
            }
            IDbTransaction Tranzactie = null;

            try
            {
                if (pTranzactie == null)
                {
                    Tranzactie = CCerereSQL.GetTransactionOnConnection();
                }
                else
                {
                    Tranzactie = pTranzactie;
                }
                //Inchidem obiectul in baza de date
                DClientiComenziHeader.CloseById(BUtilizator.GetIdUtilizatorConectat(Tranzactie), this.Id, pInchidere, pMotivInchidere, Tranzactie);

                if (pTranzactie == null)
                {
                    //Facem Comit tranzactiei doar daca aceasta nu a fost transmisa in parametru. Altfel comitul va fi gestionat de functia apelanta
                    CCerereSQL.CloseTransactionOnConnection(Tranzactie, true);
                }
            }
            catch (Exception)
            {
                if ((pTranzactie == null) && (Tranzactie != null))
                {
                    CCerereSQL.CloseTransactionOnConnection(Tranzactie, false);
                }
                throw;
            }
            finally
            {
                //Reinitializam obiectul pentru a recupera, printre altele, data de inchidere generata de baza de date
                this.Refresh(pTranzactie);
            }
        }
        /// <summary>
        /// Metoda de clasa ce permite adaugarea unui obiect de tip DClientiComenziHeader
        /// </summary>
        /// <param name="pIdClient"></param>
        /// <param name="pIdCabinet"></param>
        /// <param name="pIdPacient"></param>
        /// <param name="pIdReprezentantClient"></param>
        /// <param name="pObservatii"></param>
        /// <param name="pCodComanda"></param>
        /// <param name="pDataCreare"></param>
        /// <param name="pDataInchidere"></param>
        /// <param name="pnUtilizatorCreare"></param>
        /// <param name="pnUtilizatorInchidere"></param>
        /// <param name="pMotivInchidere"></param>
        /// <param name="pObservatii"></param>
        /// <returns></returns>
        /// <remarks></remarks>

        public static int Add(int pIdClient, int pIdCabinet, int pIdReprezentantClient, int pIdPacient, string pCodComanda, string pMotivInchidere, string pObservatii, IDbTransaction pTranzactie)
        {
            int id = DClientiComenziHeader.Add(BUtilizator.GetIdUtilizatorConectat(pTranzactie), pIdClient, pIdCabinet, pIdReprezentantClient, pIdPacient, pCodComanda, pMotivInchidere, pObservatii, pTranzactie);

            return(id);
        }