public void  GetJournalDetails(string JNo)
        {
            OptionsEntity oData = new OptionsEntity();
            ISalesOrderListRepository purchaseRepository = new SalesOrderListRepository();
            oData = purchaseRepository.GetOptionSettings();
            string obj = JNo.ToString();
            JournalForm JObj = journalRepository.GetJournalDetails(obj);
            this.JournalNo = JObj.JournalData.JournalNo;
            DateTime Dateinstr = (DateTime)JObj.JournalData.JournalDate;
            this.JournalDateStr = Dateinstr.ToString(oData.DateFormat);
            this.JournalDetailsEntity = new ObservableCollection<JGridViewModel>();
            this.sumCredit =Convert.ToString(JObj.JournalaDataDetails.Sum(x => x.Credit));
            this.sumDebit = Convert.ToString(JObj.JournalaDataDetails.Sum(x => x.Debit));

            foreach (var item in JObj.JournalaDataDetails)
            {
                JGridViewModel pqEntity = new JGridViewModel(JournalList);
                pqEntity.ID = item.ID;
                pqEntity.JournalDateStr = item.JournalDateStr;
                pqEntity.Credit = item.Credit;
                pqEntity.Debit = item.Debit;
                
                JournalDetailsEntity.Add(pqEntity);
            }
        }
        public void GetNewJpornal(object param)
        {
            this.JournalNo = "JO-" + journalRepository.GetLatestInvoiceNo();

            IsNew = true;
           
            if (JournalDetailsEntity != null)
            {
                if (JournalDetailsEntity.Count > 0)
                {
                    JournalDetailsEntity.Clear();
                    // var row = new CollectAmountDataGridViewModel();
                    //  PQDetailsEntity.Add(row);
                    OnPropertyChanged("JournalDetailsEntity");
                }
            }
            var row = new JGridViewModel(JournalList);
            //row.SelectedPSID = 0;

            JournalDetailsEntity.Add(row);
            OnPropertyChanged("JournalDetailsEntity");
            TempList = JournalDetailsEntity;
            sumCredit = null;
            sumDebit = null;
        }
        public int ManageDuplicateJournalData()
        {
            int rowFocusindex = -1;
            //ShowAllCount = PSDetailsEntity.Where(e => e.SelectedPSID != 0).Count();
            TempList = new ObservableCollection<JGridViewModel>();
            TempList = JournalDetailsEntity;

            var query = TempList.GroupBy(x => x.ID)
              .Where(g => g.Count() > 1)
              .ToList();
            if (query.Count > 0 && JournalDetailsEntity.Count > 1)
            {

                var obj1 = query[0].ElementAt(0);
                var obj2 = query[0].ElementAt(1);
                int? qty = 1;
                
                qty = query[0].ElementAt(0).CountQty + query[0].ElementAt(1).CountQty;
               
                var index1 = TempList.IndexOf(query[0].ElementAt(0));
                var index2 = TempList.IndexOf(query[0].ElementAt(1));
                OnPropertyChanged("JournalDetailsEntity");
                TempList = JournalDetailsEntity;
            }
            else
            {
                int count = JournalDetailsEntity.Count(x => x.ID == 0);
                if (count == 0)
                {
                    var row = new JGridViewModel(JournalList);
                    // row.CountQty = 0;
                    //   row.GSTRate = TaxRate;

                    JournalDetailsEntity.Add(row);
                    OnPropertyChanged("JournalDetailsEntity");
                    TempList = JournalDetailsEntity;
                    rowFocusindex = -1;
                }
                else
                {
                    var emptyRow = TempList.Where(y => y.ID == 0).FirstOrDefault();
                    rowFocusindex = JournalDetailsEntity.IndexOf(emptyRow);
                }

            }        
            return rowFocusindex;
        }
        public string ValidateJournal()
        {
            
            string msg = string.Empty;

            var RequiredJournalList = JournalDetailsEntity.Take(JournalDetailsEntity.Count - 1);
            sumDebit =Convert.ToString(JournalDetailsEntity.Sum(x => x.Debit));
            sumCredit =Convert.ToString(JournalDetailsEntity.Sum(y => y.Credit));
            //var journalid = JournalDetailsEntity.Select(x => x.ID);
            //var creditamt = JournalDetailsEntity.Select(x => x.Credit);
           // var debitamt = JournalDetailsEntity.Select(x => x.Debit);
            if (sumCredit != sumDebit)
            {
                msg = "Total Amount of Debit and Credit should be balance";
            }
            
            foreach (var item in RequiredJournalList)
            {
                var journalid = item.ID;
                var creditamt = item.Credit;
                var debitamt = item.Debit;
               
                if (journalid == null)
                {
                    msg = "Data Cannot be Empty";
                }
                else if (creditamt < 0 && debitamt == null)
                {
                    msg = "Amount Shouldn't be negative";
                }
                else if (debitamt < 0 && creditamt == null)
                {
                    msg = "Amount Shouldn't be negative";
                }
                else if (sumDebit == "0.00" && sumCredit == "0.00")
                {
                    if(creditamt == null || debitamt == null)
                    {
                        msg = "Amount Shouldn't be empty";
                    }
                }
            }
            if(RequiredJournalList.Count() == 0)
            {
                foreach (var item in JournalDetailsEntity)
                {
                    var journalid = item.ID;
                    var creditamt = item.Credit;
                    var debitamt = item.Debit;

                    if (journalid == null)
                    {
                        msg = "Data Cannot be Empty";
                    }
                    else if (creditamt < 0 && debitamt == null)
                    {
                        msg = "Amount Shouldn't be negative";
                    }
                    else if (debitamt < 0 && creditamt == null)
                    {
                        msg = "Amount Shouldn't be negative";
                    }
                    else if (sumDebit == "0.00" && sumCredit == "0.00")
                    {
                        if (creditamt == null || debitamt == null)
                        {
                            msg = "Amount Shouldn't be empty";
                        }
                    }
                }
            }
            if (IsNew == true)
            {
                if (!string.IsNullOrEmpty(JournalNo))
                {
                    if (journalRepository.IsChequeNoPresent(JournalNo))
                    {
                        return msg = "Entry against Cheque No is already done";
                    }
                }
            }


            return msg;
        }