Example #1
0
        public async Task <InvoiceItemResult> InvoiceItemUpdated(InvoiceItem invoiceItem)
        {
            _logger.LogInformation(GetLogMessage("Item ID: {0}; Invoice ID: {1}"), invoiceItem.Id,
                                   invoiceItem.InvoiceId);

            var retVal = new InvoiceItemResult()
            {
                InvoiceItemId = invoiceItem.Id
            };

            var inv = _invoices
                      .Queryable()
                      .Any(x => x.Id == invoiceItem.InvoiceId);


            _logger.LogDebug(GetLogMessage("Invoice Found Locally: {0}"), inv);

            if (inv)
            {
                var entity = await _items.Queryable()
                             .Where(x => x.Id == invoiceItem.Id)
                             .FirstAsync();

                if (invoiceItem.Metadata.ContainsKey("contract-id"))
                {
                    _logger.LogDebug(GetLogMessage("contract id found in metadata: {0}"),
                                     invoiceItem.Metadata["contract-id"]);


                    var contractId = Guid.Parse(invoiceItem.Metadata["contract-id"]);
                    retVal.ContractId = contractId;
                }
                else
                {
                    _logger.LogDebug(GetLogMessage("Contract id not found in metadata"));
                }


                entity.InjectFrom(invoiceItem);

                entity.InvoiceId = invoiceItem.InvoiceId;
                entity.IsDeleted = invoiceItem.Deleted.GetValueOrDefault();

                entity.ObjectState = ObjectState.Modified;

                var result = _items.InsertOrUpdateGraph(entity, true);

                _logger.LogDebug(GetLogMessage("{0} results updated"), result);

                if (result > 0)
                {
                    retVal.Succeeded = true;
                }
            }

            return(retVal);
        }
Example #2
0
        public async Task <InvoiceItemResult> InvoiceItemDeleted(InvoiceItem invoiceItem)
        {
            _logger.LogInformation(GetLogMessage("Item: {0}"), invoiceItem.Id);

            var retVal = new InvoiceItemResult()
            {
                InvoiceItemId = invoiceItem.Id
            };

            if (invoiceItem.Metadata.ContainsKey("contract-id"))
            {
                _logger.LogDebug(GetLogMessage("contract id found in metadata: {0}"),
                                 invoiceItem.Metadata["contract-id"]);

                retVal.ContractId = Guid.Parse(invoiceItem.Metadata["contract-id"]);

                var entity = await _items.Queryable()
                             .Where(x => x.Id == invoiceItem.Id)
                             .FirstAsync();

                entity.IsDeleted   = true;
                entity.Updated     = DateTimeOffset.Now;
                entity.ObjectState = ObjectState.Modified;

                var records = _items.InsertOrUpdateGraph(entity, true);
                _logger.LogDebug(GetLogMessage("{0} records updated"), records);

                if (records > 0)
                {
                    retVal.Succeeded = true;
                }
            }
            else
            {
                _logger.LogDebug(GetLogMessage("Contract id not found in metadata"));
            }

            return(retVal);
        }
Example #3
0
        public async Task <InvoiceItemResult> InvoiceItemCreated(InvoiceItem invoiceItem)
        {
            _logger.LogInformation(GetLogMessage("Item Id: {0}"), invoiceItem.Id);

            var retVal = new InvoiceItemResult()
            {
                InvoiceItemId = invoiceItem.Id
            };


            var entity = new StripeInvoiceItem
            {
                ObjectState = ObjectState.Added,
                Id          = invoiceItem.Id,
                Created     = invoiceItem.Date,
                PeriodStart = invoiceItem.Period.Start,
                PeriodEnd   = invoiceItem.Period.End,
                IsDeleted   = invoiceItem.Deleted.GetValueOrDefault()
            };

            entity.InjectFrom(invoiceItem);


            if (invoiceItem.Metadata.ContainsKey("contract-id"))
            {
                _logger.LogDebug(GetLogMessage("contract id found in metadata: {0}"),
                                 invoiceItem.Metadata["contract-id"]);


                entity.ContractId = Guid.Parse(invoiceItem.Metadata["contract-id"]);
                retVal.ContractId = entity.ContractId.Value;
            }
            else
            {
                _logger.LogDebug(GetLogMessage("Contract id not found in metadata"));
            }


            var entityRecords = _items.InsertOrUpdateGraph(entity, true);

            _logger.LogDebug(GetLogMessage("{0} records updated"), entityRecords);

            if (entityRecords > 0)
            {
                retVal.Succeeded = true;
            }

            var contract = await _contracts
                           .Queryable()
                           .Include(x => x.TimeEntries)
                           .Where(x => x.Id == retVal.ContractId)
                           .FirstAsync();

            var timeEntriesToProcess = contract
                                       .TimeEntries
                                       .Where(x => x.Status == TimeStatus.Approved && x.InvoiceItemId == null)
                                       .ToList();

            _logger.LogDebug(GetLogMessage("Ready to process {0} time entries"), timeEntriesToProcess.Count);


            foreach (var entry in timeEntriesToProcess)
            {
                _logger.LogDebug(GetLogMessage("Entry: {0}; Invoice Item: {1}"), entry.Id, invoiceItem.Id);

                entry.InvoiceItemId = invoiceItem.Id;
                entry.ObjectState   = ObjectState.Modified;
                entry.Updated       = DateTimeOffset.UtcNow;
            }

            if (timeEntriesToProcess.Count > 0)
            {
                _logger.LogDebug(GetLogMessage("Preparing to update database with updated data"));

                retVal.TimeEntriesUpdated = timeEntriesToProcess.Count;
                var records = _contracts.InsertOrUpdateGraph(contract, true);
                _logger.LogDebug(GetLogMessage("{0} Records Updated"), records);
            }

            return(retVal);
        }