public TicketCommitResult CloseTicket(Ticket ticket) { var result = _ticketDao.CheckConcurrency(ticket); Debug.Assert(ticket != null); var changed = !string.IsNullOrEmpty(result.ErrorMessage); var canSumbitTicket = !changed && ticket.CanSubmit; if (canSumbitTicket) { RecalculateTicket(ticket); //ticket.Close(); _applicationState.NotifyEvent(RuleEventNames.BeforeTicketClosing, new { Ticket = ticket, TicketId = ticket.Id, ticket.RemainingAmount, ticket.TotalAmount }); if (ticket.Orders.Count > 0) { var ticketType = _cacheService.GetTicketTypeById(ticket.TicketTypeId); if (ticket.Orders.FirstOrDefault(x => !x.Locked) != null) { var number = _settingService.GetNextNumber(ticketType.OrderNumerator.Id); ticket.MergeOrdersAndUpdateOrderNumbers(number); } if (ticket.Id == 0) { UpdateTicketNumber(ticket, ticketType.TicketNumerator); _ticketDao.Save(ticket); } Debug.Assert(!string.IsNullOrEmpty(ticket.TicketNumber)); Debug.Assert(ticket.Id > 0); _applicationState.NotifyEvent(RuleEventNames.TicketClosing, new { Ticket = ticket, TicketId = ticket.Id, ticket.RemainingAmount, ticket.TotalAmount }); ticket.LockTicket(); } ticket.RemoveZeroAmountAccountTransactions(); if (ticket.Id > 0)// eğer adisyonda satır yoksa ID burada 0 olmalı. _ticketDao.Save(ticket); Debug.Assert(ticket.Orders.Count(x => x.OrderNumber == 0) == 0); } if (ticket.Id > 0) { foreach (var ticketEntity in ticket.TicketEntities) { var entityType = _cacheService.GetEntityTypeById(ticketEntity.EntityTypeId); _applicationState.NotifyEvent(RuleEventNames.EntityUpdated, new { EntityTypeId = ticketEntity.EntityTypeId, EntityId = ticketEntity.EntityId, EntityTypeName = entityType.Name, OpenTicketCount = _ticketServiceBase.GetOpenTicketIds(ticketEntity.EntityId).Count() }); } } result.TicketId = ticket.Id; return result; }