public ServicesView()
 {
     InitializeComponent();
     newService           = new Service();
     myServicesViewSource = (CollectionViewSource)this.Resources["serviceViewSource"];
     DataContext          = this;
 }
Beispiel #2
0
        public ActionResult Create(Model.Service collection, string IsContinue = "0")
        {
            ReturnMessage rm = new ReturnMessage(false);

            if (ModelState.IsValid)
            {
                try
                {
                    if (!CheckRepeat(collection))
                    {
                        rm.IsSuccess = false;
                        rm.Message   = "已有相同记录存在!";
                    }
                    else
                    {
                        bool res = _bll.Add(collection);
                        rm.IsSuccess = res;
                        if (rm.IsSuccess)
                        {
                            OperateLogHelper.Create(collection);
                            rm.IsContinue = IsContinue == "1";
                        }
                    }
                }
                catch (Exception ex)
                {
                    rm.Message = ex.Message;
                }
            }
            return(Json(rm));
        }
Beispiel #3
0
        public IQueryable <Model.Service> InsertService(Model.Service service)
        {
            int newId;

            //using (ScutexEntities db1 = new ScutexEntities())
            //{
            Service serv = new Service();

            Mapper.CreateMap <Model.Service, Service>();
            serv = Mapper.Map <Model.Service, Service>(service);

            serv.InboundPrivateKey            = service.InboundKeyPair.PrivateKey;
            serv.InboundPublicKey             = service.InboundKeyPair.PublicKey;
            serv.OutboundPrivateKey           = service.OutboundKeyPair.PrivateKey;
            serv.OutboundPublicKey            = service.OutboundKeyPair.PublicKey;
            serv.ManagementInboundPrivateKey  = service.ManagementInboundKeyPair.PrivateKey;
            serv.ManagementInboundPublicKey   = service.ManagementInboundKeyPair.PublicKey;
            serv.ManagementOutboundPrivateKey = service.ManagementOutboundKeyPair.PrivateKey;
            serv.ManagementOutboundPublicKey  = service.ManagementOutboundKeyPair.PublicKey;

            db.AddToServices(serv);
            db.SaveChanges();

            newId = serv.ServiceId;
            //}

            return(GetServiceById(newId));
        }
 private void UpdateCommandHandler(object sender, ExecutedRoutedEventArgs e)
 {
     if (newServiceGrid.IsVisible)
     {
         newService = new Model.Service();
         Model.Service nService = myServicesViewSource.View.CurrentItem as Model.Service;
         if (nService != null)
         {
             newService.ServiceName = nService?.ServiceName;
             if (!string.IsNullOrWhiteSpace(newService?.ServiceName))
             {
                 myServicesViewSource.View.Refresh();
                 myServicesViewSource.View.MoveCurrentTo(newService);
                 context.SaveChanges();
                 Messenger.Default.Send <string>(Utils.ServiceAddedMessage);
             }
             else
             {
                 MessageBox.Show("Service Is Empty.");
             }
         }
         newServiceGrid.Visibility      = Visibility.Collapsed;
         existingServiceGrid.Visibility = Visibility.Visible;
     }
 }
Beispiel #5
0
        public IQueryable <Model.Service> UpdateService(Model.Service service)
        {
            int newId;

            //using (ScutexEntities db1 = new ScutexEntities())
            //{
            var svc = (from s in db.Services
                       where s.ServiceId == service.ServiceId
                       select s).First();

            svc.Name                         = service.Name;
            svc.ClientUrl                    = service.ClientUrl;
            svc.ManagementUrl                = service.ManagementUrl;
            svc.Token                        = service.Token;
            svc.Initialized                  = service.Initialized;
            svc.Tested                       = service.Tested;
            svc.LockToIp                     = service.LockToIp;
            svc.InboundPrivateKey            = service.InboundKeyPair.PrivateKey;
            svc.InboundPublicKey             = service.InboundKeyPair.PublicKey;
            svc.OutboundPrivateKey           = service.OutboundKeyPair.PrivateKey;
            svc.OutboundPublicKey            = service.OutboundKeyPair.PublicKey;
            svc.ManagementInboundPrivateKey  = service.ManagementInboundKeyPair.PrivateKey;
            svc.ManagementInboundPublicKey   = service.ManagementInboundKeyPair.PublicKey;
            svc.ManagementOutboundPrivateKey = service.ManagementOutboundKeyPair.PrivateKey;
            svc.ManagementOutboundPublicKey  = service.ManagementOutboundKeyPair.PublicKey;
            svc.UniquePad                    = service.UniquePad;

            db.SaveChanges();

            newId = svc.ServiceId;
            //}

            return(GetServiceById(newId));
        }
Beispiel #6
0
        public ActionResult Edit(Model.Service collection)
        {
            ReturnMessage rm = new ReturnMessage(false);

            if (ModelState.IsValid)
            {
                try
                {
                    if (!CheckRepeat(collection))
                    {
                        rm.IsSuccess = false;
                        rm.Message   = "已有相同记录存在!";
                    }
                    else
                    {
                        rm.IsSuccess = _bll.Update(collection);
                    }
                }
                catch (Exception ex)
                {
                    rm.Message = ex.Message;
                }
            }
            return(Json(rm));
        }
        private void OnAppointmentsChanged(object sender, PersistentObjectsEventArgs e)
        {
            using (new WaitCursor()) {
                bool bRefreshScheduler = false;

                Model.Service service = new Model.Service(Program.Service);

                foreach (Appointment apt in e.Objects)
                {
                    Model.Appointment obj = apt.GetSourceObject((SchedulerStorage)sender) as Model.Appointment;

                    if (obj != null)
                    {
                        Model.Appointment utc = obj.Clone(DateTimeKind.Utc);

                        service.AttachTo("Appointments", utc);
                        service.UpdateObject(utc);

                        if (!bRefreshScheduler)
                        {
                            if (Filter.Current.User != null && (!obj.AssignedTo.HasValue || obj.AssignedTo.Value != Filter.Current.User.ID))
                            {
                                bRefreshScheduler = true;
                            }
                        }
                    }
                }

                try {
                    service.SaveChanges(System.Data.Services.Client.SaveChangesOptions.Batch);
                } catch (DataServiceRequestException error) {
                    if (error.InnerException is DataServiceClientException &&
                        ((DataServiceClientException)error.InnerException).StatusCode == 404)
                    {
                        return;
                    }

                    if (error.Response.BatchStatusCode == 404)
                    {
                        return;
                    }

#if DEBUG
                    Debugger.Break();
#endif
                    throw;
                }

                gridControl.RefreshDataSource();

                if (bRefreshScheduler)
                {
                    isDirty = true;
                    schedulerControl.RefreshData();
                }
            }
        }
Beispiel #8
0
 public ServiceDetailItem(string saleID, Model.Service service)
 {
     if (service != null)
     {
         SaleID    = saleID;
         Service   = service;
         Number    = 1;
         UnitPrice = service.UnitPrice;
     }
 }
Beispiel #9
0
        private bool CheckRepeat(Model.Service model)
        {
            var query   = Query.And(Query.EQ("Type", model.Type), Query.EQ("Address", model.Address));
            var modelDb = _bll.Get(query);

            if (modelDb == null)
            {
                return(true);
            }
            return(model.Rid == modelDb.Rid);
        }
Beispiel #10
0
        public void Create(Model.Service service, string user = "")
        {
            _serviceRepository.Insert(service);

            _applicationTraceService.create(new ApplicationTrace
            {
                utilisateur = user,
                action      = Parametres.Action.Creation.ToString(),
                description = "Création d'un service",
            });
        }
 private Model.Service CreateServiceDb(Service service)
 {
     Model.Service newServiceDb = new Model.Service()
     {
         ServiceId = service.Id,
         Name      = service.Name
     };
     Uow.Services.Add(newServiceDb);
     Uow.Commit();
     return(newServiceDb);
 }
Beispiel #12
0
        public void Update(Model.Service service, string user = "")
        {
            _serviceRepository.Update(service);

            _applicationTraceService.create(new ApplicationTrace
            {
                utilisateur = user,
                action      = Parametres.Action.Modification.ToString(),
                description = String.Format("Mise à jour d'un service service_id = {0}", service.id),
            });
        }
Beispiel #13
0
        public ActionResult GetServiceList(int page = 1, int rows = 20, Model.Service search = null, string sidx = null, string sord = "asc")
        {
            if (string.IsNullOrEmpty(sidx))
            {
                sidx = "Type";
            }
            var pager = new PageInfo
            {
                PageSize         = rows,
                CurrentPageIndex = page > 0 ? page : 1
            };

            List <IMongoQuery> queryList = null;

            if (search != null)
            {
                queryList = new List <IMongoQuery>();
                if (search.Type.HasValue)
                {
                    queryList.Add(Query <Model.Service> .EQ(t => t.Type, search.Type));
                }
                if (!string.IsNullOrWhiteSpace(search.Address))
                {
                    queryList.Add(Query <Model.Service> .EQ(t => t.Address,
                                                            new BsonRegularExpression(new Regex(search.Address, RegexOptions.IgnoreCase))));
                }
                if (!string.IsNullOrWhiteSpace(search.Description))
                {
                    queryList.Add(Query <Model.Service> .EQ(t => t.Description, search.Description));
                }
                if (!string.IsNullOrWhiteSpace(search.Version))
                {
                    queryList.Add(Query <Model.Service> .EQ(t => t.Version, new BsonRegularExpression(new Regex(search.Version, RegexOptions.IgnoreCase))));
                }
                if (search.Dependency.HasValue)
                {
                    queryList.Add(Query <Model.Service> .EQ(t => t.Dependency, search.Dependency.Value));
                }
            }
            var where = queryList != null && queryList.Any() ? Query.And(queryList) : null;
            long totalCount;
            var  rm = new jqGridData
            {
                page  = pager.CurrentPageIndex,
                rows  = _bll.GetList(out totalCount, page, rows, where, sidx, sord),
                total =
                    (int)
                    (totalCount % pager.PageSize == 0 ? totalCount / pager.PageSize : totalCount / pager.PageSize + 1),
                records = (int)totalCount
            };

            return(Json(rm, JsonRequestBehavior.AllowGet));
        }
 private Model.ServiceStatus CreateServiceStatus(Model.Service serviceDb, Model.Region regionDb, Model.Status status)
 {
     Model.ServiceStatus serviceStatusDb = new Model.ServiceStatus()
     {
         Service    = serviceDb,
         Region     = regionDb,
         Status     = status,
         DateUpdate = DateTime.UtcNow
     };
     Uow.ServicesStatus.Add(serviceStatusDb);
     Uow.Commit();
     return(serviceStatusDb);
 }
        void Delete(Model.Appointment obj)
        {
            if (obj == null)
            {
                return;
            }

            BindingList <Model.Appointment> appointmentDataSource
                = schedulerStorage.Appointments.DataSource as BindingList <Model.Appointment>;

            if (appointmentDataSource != null)
            {
                appointmentDataSource.Remove(obj);
            }

            BindingList <Model.Appointment> taskDataSource
                = gridControl.DataSource as BindingList <Model.Appointment>;

            if (taskDataSource != null)
            {
                taskDataSource.Remove(obj);
            }


            Model.Service service = new Model.Service(Program.Service);

            try {
                Model.Appointment utc = obj.Clone(DateTimeKind.Utc);

                service.AttachTo("Appointments", utc);
                service.DeleteObject(utc);

                service.SaveChanges();
            } catch (DataServiceRequestException e) {
                if (e.InnerException is DataServiceClientException &&
                    ((DataServiceClientException)e.InnerException).StatusCode == 404)
                {
                    return;
                }

                if (e.Response.BatchStatusCode == 404)
                {
                    return;
                }

#if DEBUG
                Debugger.Break();
#endif
                throw;
            }
        }
Beispiel #16
0
        public static Service FromDataRow(DataRow dr)
        {
            if (dr == null)
            {
                return(null);
            }
            var result = new Model.Service()
            {
                ServiceID   = int.Parse(dr[0].ToString()),
                Category    = dr[1].ToString(),
                ServiceName = dr[2].ToString(),
                UnitPrice   = double.Parse(dr[3].ToString()),
            };

            return(result);
        }
Beispiel #17
0
        /// <summary>
        /// Установить даты начала и окончания услуги и количество услуг
        /// </summary>
        /// <param name="service">Услуга, которую требуется обновить</param>
        void SetDates(Model.Service service, RecourseAux ra)
        {
            if (BedDays <= 1)
            {
                Quantity         = 1;
                service.DateFrom = service.DateTill = Date;
            }
            else
            {
                service.DateTill = Date;
#if GKP3
                // Since we are apriori polyclinic
                service.DateFrom = Date.WorkingDaysBefore(BedDays, true);
#else
                bool dayHospital = ra.InternalReason == InternalReason.DayHosp || ra.InternalReason == InternalReason.SurgeryDayHosp;
                service.DateFrom = Date.WorkingDaysBefore(Quantity, dayHospital);
#endif
            }
        }
        private void OnRowUpdated(object sender, DevExpress.XtraGrid.Views.Base.RowObjectEventArgs e)
        {
            using (new WaitCursor()) {
                Model.Service service = new Model.Service(Program.Service);

                Model.Appointment obj = e.Row as Model.Appointment;

                if (obj != null)
                {
                    if (obj.Resource != null)
                    {
                        obj.AssignedTo = obj.Resource.ID;
                        obj.Resource   = null;
                    }

                    if (obj.ID != Guid.Empty)
                    {
                        Model.Appointment utc = obj.Clone(DateTimeKind.Utc);

                        service.AttachTo("Appointments", utc);
                        service.UpdateObject(utc);
                    }
                    else
                    {
                        obj.ID = Guid.NewGuid();

                        if (!obj.AssignedTo.HasValue && Filter.Current.User != null)
                        {
                            obj.AssignedTo = Filter.Current.User.ID;
                        }

                        Model.Appointment utc = obj.Clone(DateTimeKind.Utc);

                        service.AddToAppointments(utc);
                    }
                }

                schedulerStorage.RefreshData();

                service.SaveChanges(System.Data.Services.Client.SaveChangesOptions.Batch);
            }
        }
        public void ProcessAzureStatus()
        {
            try
            {
                AzureStatus azureStatus = AzureStatusEngine.GetAzureStatus();

                foreach (Service service in azureStatus.Services)
                {
                    Model.Service serviceDb = GetServiceDbByServiceId(service.Id);

                    if (serviceDb == null)
                    {
                        serviceDb = CreateServiceDb(service);
                    }

                    foreach (Region region in service.Regions)
                    {
                        Model.Region regionDb = GetRegionDbByRegionId(region.Id);

                        if (regionDb == null)
                        {
                            regionDb = CreateRegionDb(region);
                        }

                        Model.ServiceStatus serviceStatusDb = GetServiceStatusByServiceIdandRegionId(service, region);

                        if (serviceStatusDb == null)
                        {
                            serviceStatusDb = CreateServiceStatus(serviceDb, regionDb, (Model.Status)Enum.Parse(typeof(Model.Status), region.Status));
                        }
                        else
                        {
                            UpdateServiceStatus(serviceStatusDb, (Model.Status)Enum.Parse(typeof(Model.Status), region.Status));
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Console.Write(ex.Message);
            }
        }
Beispiel #20
0
        /// <summary>
        /// Преобразовать данный объект в модель услуги
        /// </summary>
        /// <param name="ra">Вспомогательный объект законченного случая</param>
        public Model.Service ToService(RecourseAux ra)
        {
            Model.Service result = new Model.Service();

            result.Identity         = ServiceId;
            result.Unit             = ra.Unit;
            result.InterventionKind = InterventionKind;
            result.Child            = ra.Child;

            SetDates(result, ra);

            result.Diagnosis      = ra.MainDiagnosis;
            result.ServiceCode    = ServiceCode;
            result.Quantity       = Quantity;
            result.Tariff         = Tariff;
            result.Total          = Total;
            result.SpecialityCode = SpecialityCode;
            result.DoctorCode     = DoctorCode;
            result.Incomplete     = Incomplete;
            result.Refusal        = Refusal;

            return(result);
        }
Beispiel #21
0
        /// <summary>
        /// Загрузить события для законченного случая
        /// </summary>
        /// <remarks>
        /// В настоящий момент одному законченному случаю соответствует одно события (т.к. нет
        /// внутрибольничных переводов). Здесь также загружаются услуги для события и обновляются
        /// поля законченного случая данными, которые удалось получить на этом этапе.
        /// </remarks>
        List <Model.Event> LoadEvents(Model.Recourse rec, RecourseAux ra, Model.OrderSection section)
        {
            // Extract single event from the RecourseAux:
            List <Model.Event> result = new List <Model.Event>();

            Model.Event evt = ra.ToEvent(rec, section);
            result.Add(evt);

            // Load auxilliary service records and service models
            List <ServiceAux> ss = LoadServices(ra, evt).Distinct(new ServiceComparer()).OrderBy(s => s.Date).ToList();

            if (ra.InternalReason == InternalReason.SurgeryDayHosp &&
                ss.Count(s => s.ServiceCode == ra.ServiceCode) > 1)
            {
                // Fix for:
                // Два случая ЦАХ у одного пациента с одним и тем же диагнозом
                //  будут выгружены как два случая, но в каждом ВСЕ услуги из обеих госпитализаций

                // Get main service
                ServiceAux sa = ss.FirstOrDefault(s => s.Date == ra.Date && s.ServiceCode == ra.ServiceCode);

                if (sa != null)
                {
                    // Get hospitalization dates
                    DateTime till = sa.Date;
                    DateTime from = till.WorkingDaysBefore(sa.BedDays, true);

                    // Select only services with relevant dates
                    IEnumerable <ServiceAux> sas = ss.Where(s => s.Date <= till && s.Date >= from);
                    ra.UpdateMedicalAid(rec, sas.Last());
                    evt.Services = sas.Select(s => s.ToService(ra)).ToList();

                    // ...supposedly at least one services is selected: the main one
                }
                else
                {
                    ra.UpdateMedicalAid(rec, ss.Last());
                    evt.Services = ss.Select(s => s.ToService(ra)).ToList();
                }
            }
            else
            {
                ra.UpdateMedicalAid(rec, ss.Last());
                evt.Services = ss.Select(s => s.ToService(ra)).ToList();
            }

            // 20190902 - Блядский вид медицинского вмешательства
            if (ra.InternalReason == InternalReason.SurgeryDayHosp)
            {
                Model.Service service = evt.Services.FirstOrDefault(s => s.ServiceCode / 100000 == 3);
                if (service != null)
                {
                    string interventionKind = GetInterventionKind(service.ServiceCode);
                    if (!string.IsNullOrEmpty(interventionKind))
                    {
                        evt.Services.ForEach(s => s.InterventionKind = interventionKind);
                    }
                }
            }

            // Код врача и специальности должны соответствовать закрывающей записи,
            // приводим в соответствие из ra (где было изменено в UpdateMedicalAid())
            evt.SpecialityCode = ra.SpecialityCode;
            evt.DoctorCode     = ra.DoctorCode;

            if (rec.IsHospitalization)
            {
                // Update profile-shifting transfer and total of the bed days
                ServiceAux serv = ss.Where(s => s.Transfer == Model.Transfer.Transferred).FirstOrDefault();

                // Turn transfer to ProfileShift if there has been bed profile change:
                if (serv != null &&
                    ss.GroupBy(s => s.BedProfile).Count() > 1)
                {
                    serv.Transfer = Model.Transfer.ProfileShift;
                }
                evt.BedDays = ss.Select(s => s.BedDays).Sum();
            }

            // Event dates
            if (ra.InternalReason == InternalReason.Stage1 || ra.InternalReason == InternalReason.Prof)
            {
                evt.DateTill = evt.Services.Max(s => s.DateTill);

                // For DD1 - start of the recourse is an antropometry
                ServiceAux sa = ss.Where(s => s.IsAntropometry()).FirstOrDefault();
                if (sa != null)
                {
                    evt.DateFrom = sa.Date;
                }
                else
                {
                    evt.DateFrom = ss.Min(s => s.Date);
                }

#if FOMS1
            }
            else if (ra.InternalReason == InternalReason.Prof)
            {
                // Work around error "Код способа оплаты не соответствует периоду лечения;
                // Цель обращения не соответствует способу оплаты медицинской помощи"
                // Prof events within a single day are discarded with this error
                evt.DateFrom = ra.Date.ShiftDays(-1);

                if (evt.DateFrom == ra.Date)
                {
                    evt.DateTill = ra.Date.ShiftDays(1);
                    Model.Service s = evt.Services.First();
                    if (s != null)
                    {
                        s.DateFrom = evt.DateTill;
                        s.DateTill = evt.DateTill;
                    }
                }
                else
                {
                    evt.DateTill = ra.Date;
                }
#endif
            }
            else
            {
                // For other cases service with minimal date (mayhap hospitalization - reason why not ss.Min())
                // 2 этап - пустая выборка
                try {
                    evt.DateFrom = evt.Services.Min(s => s.DateFrom);
                } catch (Exception e) {
                    Logger.Log(e.Message + string.Format(" - повод {0}, услуга {1}, S.RECID {2}", ra.InternalReason, ra.ServiceCode, ra.ServiceId));
                }
                evt.DateTill = evt.Services.Max(s => s.DateTill);
            }

#if FOMS
            // Задолбал ФОМС с их дурацкими ошибками: дд раз в 2 года ставит "неправильные даты", если дата начала и окончания не совпадают
            // В подушевой услуге ставим даты начала и окончания как во всем закрытом случае

            // 20190417 Хрен там, теперь не только обрезанная ДД
            Model.Service ser = evt.Services.FirstOrDefault(s => s.ServiceCode / 10000 == 5);
            if (ser != null)
            {
                ser.DateFrom = evt.DateFrom;
                ser.DateTill = evt.DateTill;
            }
#endif

            // May change evt and ra's MainDiagnosis:
            ra.FindConcurrentDiagnoses(evt, ss, section);

            // Service diagnosis as recorse's in case of diagnostics
            if (ra.InternalReason == InternalReason.Diagnostics)
            {
                evt.Services.ForEach(s => s.Diagnosis = ra.MainDiagnosis);
            }

            evt.ComplicationDiagnoses = ServiceAux.GetComplicationDiagnoses(ss);

            // Statistic code
            if (!string.IsNullOrEmpty(ra.MainDiagnosis) && ra.MainDiagnosis.First() != 'Z')
            {
                StatisticCode[] sc = ss
                                     .Select(s => s.StatisticCode)
                                     .Where(s => s > StatisticCode.None && s < StatisticCode.Dispensary)
                                     .ToArray();

                if (sc != null && sc.Count() > 0)
                {
                    evt.StatisticsCode = (((int)sc.Max()) - 1).ToString();
                }
                else
                {
                    evt.StatisticsCode = Dict.StatisticsCode.Instance.Get(ra.MainDiagnosis);
                }
            }

            // Профиль МП случая - по профилю закрывающей записи
            rec.Profile = ss.OrderBy(s => s.Date).Last().AidProfile;

            // Other Event fields which can be taken from the services
            evt.Tariff = evt.Services.Sum(s => s.Tariff);
            evt.Total  = evt.Services.Sum(s => s.Total);

            evt.PrimaryDiagnosis = ss.Max(s => s.PrimaryDiagnosis);
            evt.FirstIdentified  = ss.Any(s => s.FirstIdentified);

            if (ra.InternalReason == InternalReason.DispRegister)
            {
                evt.DispensarySupervision = ss.Max(s => s.DispensarySupervision);
                if (evt.DispensarySupervision == Model.DispensarySupervision.None)
                {
                    evt.DispensarySupervision = Model.DispensarySupervision.Observed;
                }
            }
            else if (section == Model.OrderSection.D3)
            {
                // 20190430 - D3 section: disp supervision is explicit
                evt.DispensarySupervision = ss.Max(s => s.DispensarySupervision);
                // Диагнозы на R ФОМС считает подлежащими Д-учету
                if (evt.DispensarySupervision < Model.DispensarySupervision.Observed ||
                    evt.DispensarySupervision > Model.DispensarySupervision.NotSubject)
                {
                    if ("ZY".Contains(evt.MainDiagnosis.First()))
                    {
                        evt.DispensarySupervision = Model.DispensarySupervision.NotSubject;
                    }
                    else
                    {
                        if (evt.FirstIdentified)
                        {
                            evt.DispensarySupervision = Model.DispensarySupervision.Taken;
                        }
                        else
                        {
                            evt.DispensarySupervision = Model.DispensarySupervision.Observed;
                        }
                    }
                }
            }

            evt.ConcurrentMesCode = ss.Max(s => s.ConcurrentMesCode);

            var d2 = ss.Where(s => s.Transfer != Model.Transfer.None);
            if (d2 != null && d2.Count() > 0)
            {
                evt.Transfer = d2.Min(s => s.Transfer);
            }

            // Other Recourse fields -"-
            rec.UnitShift   = ss.Any(s => s.Transfer == Model.Transfer.ProfileShift);
            rec.BirthWeight = ss.Max(s => s.BirthWeight);

            rec.DateFrom = evt.DateFrom;
            rec.DateTill = evt.DateTill;
            rec.Total    = evt.Total;
            rec.BedDays  = evt.BedDays;

            if (RecourseAux.NeedsDirection(rec))
            {
                // Extract directed-from in case when it is needed
                rec.DirectedFrom = ss.Max(s => s.DirectedFrom);
                if (string.IsNullOrEmpty(rec.DirectedFrom))
                {
                    // TODO: LPU code from local to federal
                    rec.DirectedFrom = Options.LpuCode;
                }
                rec.DirectionDate = rec.DateFrom;
            }

            return(result);
        }
Beispiel #22
0
        public MainWindow(Model.Service service)
        {
            InitializeComponent();

            this.riskSetting = RiskSetting.Default;
            this.service     = service;

            this.viewCheckUpdated = new Subject <object>();

            this.instrumentSelected = new Subject <string>();
            this.selectedInstrument = this.instrumentSelected.ToReadOnlyReactiveProperty();

            this.listView_Instruments.DataContext = this.service.Instruments.Keys.OrderBy(x => x);

            var sampling = Observable.Interval(TimeSpan.FromMilliseconds(1000)).Select <long, object>(_ => null);

            this.orderTabSelected = new Subject <int>();
            var orderTabSelected = this.orderTabSelected.Select <int, object>(_ => null);

            this.selectedOrderTab = this.orderTabSelected.ToReadOnlyReactiveProperty();

            this.lines = new Dictionary <string, Lines>();
            foreach (var instrument in this.service.Instruments.Values)
            {
                var lines = new Lines();
                sampling.Subscribe(_ =>
                {
                    var current = instrument.CurrentLine.Value;
                    try
                    {
                        Dispatcher.Invoke(() =>
                        {
                            var focused   = this.dataGrid_Lines.IsKeyboardFocusWithin;
                            var selected  = this.dataGrid_Lines.SelectedItem as Line;
                            lines.Current = (current == null) ? null : new Line(current);
                            if (instrument.Name == this.selectedInstrument.Value)
                            {
                                this.dataGrid_Lines.SelectedItem = lines[selected?.Identity];
                            }
                            if (focused)
                            {
                                this.dataGrid_Lines.Focus();
                            }
                        });
                    }
                    catch (TaskCanceledException)
                    {
                        // do nothing
                    }
                });
                instrument.ChartLines.Subscribe(charts =>
                {
                    Dispatcher.Invoke(() =>
                    {
                        var focused  = this.dataGrid_Lines.IsKeyboardFocusWithin;
                        var selected = this.dataGrid_Lines.SelectedItem as Line;
                        lines.UpdateLines(charts);
                        if (instrument.Name == this.selectedInstrument.Value)
                        {
                            this.dataGrid_Lines.SelectedItem = lines[selected?.Identity];
                        }
                        if (focused)
                        {
                            this.dataGrid_Lines.Focus();
                        }
                    });
                });
                this.lines.Add(instrument.Name, lines);
            }
            this.dataGrid_Lines.DataContext = this.instrumentSelected
                                              .Select(_ => this.ListItems)
                                              .Do(_ =>
            {
                var current = this.lines[this.selectedInstrument.Value].Current;
                if (current == null)
                {
                    return;
                }
                this.dataGrid_Lines.SelectedItem = current;
                this.dataGrid_Lines.Focus();
            })
                                              .Merge(this.viewCheckUpdated.Select(_ => this.ListItems))
                                              .ToReadOnlyReactiveProperty()
            ;

            this.buyPreview  = new OrderPreviewRecords();
            this.sellPreview = new OrderPreviewRecords();
            this.dataGrid_BuyPreview.DataContext  = this.buyPreview;
            this.dataGrid_SellPreview.DataContext = this.sellPreview;
            Observable
            .Merge(
                this.lines
                .Select(x => x.Value.Items.CollectionChangedAsObservable().Select(_ => x.Key))
                .Merge()
                .Where(x => x == this.selectedInstrument.Value),
                this.instrumentSelected,
                orderTabSelected,
                this.service.Account
                )
            .Where(_ => this.selectedOrderTab.Value == 0)
            .Subscribe(_ => UpdateOrderPreview())
            ;
            this.positions = new Positions();
            this.dataGrid_Positions.DataContext = this.positions.Items;
            Observable
            .Merge(
                sampling,
                this.instrumentSelected,
                orderTabSelected,
                this.service.Positions
                )
            .Where(_ => this.selectedOrderTab.Value == 1)
            .Subscribe(_ => UpdatePositions())
            ;
            UpdateCloseButtonVisiblity();
        }
        void OnAppointmentsInserted(object sender, PersistentObjectsEventArgs e)
        {
            using (new WaitCursor()) {
                Model.Service service = new Model.Service(Program.Service);

                foreach (Appointment apt in e.Objects)
                {
                    Model.Appointment.ItemCode defaultValue = apt.AllDay ?
                                                              Model.Appointment.ItemCode.Task : Model.Appointment.ItemCode.Event;

                    if (apt.CustomFields["ItemType"] == null)
                    {
                        apt.CustomFields["ItemType"] = defaultValue;
                    }

                    if (apt.CustomFields["CompletionStatus"] == null)
                    {
                        apt.CustomFields["CompletionStatus"] = (int)Model.Appointment.CompletionCode.NotStarted;
                    }

                    if (Filter.Current.User != null)
                    {
                        if (apt.ResourceId == null || !(apt.ResourceId is Guid) ||
                            ((Guid)apt.ResourceId == Guid.Empty))
                        {
                            apt.ResourceId = Filter.Current.User.ID;
                        }
                    }

                    Model.Appointment obj
                        = apt.GetSourceObject((SchedulerStorage)sender) as Model.Appointment;

                    if (obj != null)
                    {
                        bool bIsNew = false;

                        if (obj.ID == Guid.Empty)
                        {
                            bIsNew = true;
                            obj.ID = Guid.NewGuid();
                        }

                        if (obj.AssignedTo == null &&
                            Filter.Current.User != null)
                        {
                            obj.AssignedTo = Filter.Current.User.ID;
                        }

                        obj.ItemType         = (int)apt.CustomFields["ItemType"];
                        obj.CompletionStatus = (int)apt.CustomFields["CompletionStatus"];

                        Model.Appointment utc = obj.Clone(DateTimeKind.Utc);

                        if (bIsNew)
                        {
                            service.AddToAppointments(utc);
                        }
                        else
                        {
                            service.AttachTo("Appointments", utc);
                            service.UpdateObject(utc);
                        }

                        BindingList <Model.Appointment> taskDataSource
                            = gridControl.DataSource as BindingList <Model.Appointment>;

                        if (taskDataSource != null)
                        {
                            if (obj != null &&
                                !taskDataSource.Any <Model.Appointment>(it => it.ID == obj.ID) &&
                                obj.AppointmentType == (int)AppointmentType.Normal)
                            {
                                taskDataSource.Add(obj);
                            }
                        }
                    }
                }

                service.SaveChanges(System.Data.Services.Client.SaveChangesOptions.Batch);
            }
        }