text:
Saturday, December 26, 2015. 7:20am. Christmas Past.
The Week Ahead…..
No events scheduled.
There are no events. All is calm.
Hill East Community Pays Tribute to Activist Will Hill: 1939 – 2015
Councilmember Charles Allen pays tribute to Hill East activist Will Hill. (click to enlarge)
Memorabilia. Will's Orange Hat and Ornaments sold to raise funds to oppose the Boys' Town Project.
More than 50 friends, family members turned out to honor Will Hill at Liberty Baptist Church.
The Reverend Anthony Owens, Pastor, Liberty Baptist Church. "Leave the comfort of your homes and go out into the community and make a difference."
"Leave the comfort of your homes and go out into the community and make a difference." – Pastor Anthony Owens
Last night, Councilmember Charles Allen led a group of community stakeholders who gathered at Liberty Baptist Church in Hill East to remember and pay tribute to Hill East activist Will Hill who passed away November 24. More than 50 of Will Hill's friends and family were in attendance.
Allen remembered Hill's contributions to the community and said he would support a suitable memorial after consultation with the community and ANC6B. Mayor Bowser's Ward 6 representative Seth Shapiro read a letter from the Mayor recalling Hill's service as an Orange Hat Patrol leader, as Chair of the MPD's First District Citizen's Advisory Council, his presidency of the Capitol Hill Garden Club, and his 21 years of service on ANC6B.
David Healey, past president of the Garden Club and Past President of the National Capital Area Garden Clubs, related how Hill became the first African American to integrate the Capitol Hill Garden Club, and served two terms from 1982 to 1986 as its president. Healey said, that he thought that Hill's presidency "was a turning point for the club," and credited Hill for playing a major part in keeping the club going.
Former ANC6B Chair Peter Waldron remembered Hill's dauntless work on the Orange Hat patrols and his role in mentoring Waldron as he sought election to be chair of the ANC.
MPD Assistant Chief Diane Groomes said she had met Hill in his capacity as Orange Hat Patrol leader when she was still a sergeant in the First District. Robert Pittman, current Chair of the MPD First District Citizens' Advisory Council called Hill a hero who will be missed for his work in and dedication to the community.
Longtime colleague, friend and community activist Ellen Opper-Weiner cited Hill's leadership role in the Southeast Citizens for Smart Development that led the five year community effort to prevent the planned Boys' Town project from being built where Harris Teeter now stands Opper-Weiner told the crowd that when Boys' Town sued the two of them, Hill was prepared to sell his house to cover legal fees "before the ACLU stepped up and volunteered to represent us."
But it was the members of the community whose lives were directly touched by Hill that provided the most poignant view of the depth of Hill's impact on the community. Peter Bug Matthews said that at a point in his life when he was "on the borderline of the fence, Will Hill pulled me back, saying "You want to be on this side. He always kept me straight – always kept me in line." Matthews said he would carry on Hill's tradition of mentoring youths in the community. Finally, Zachary Jenkins, a long time neighbor of Hill's tearfully called Hill "his best friend for forty years: When I met him, I was lost. He gave me my first job in his print shop….He saved my life."
At program's end, the Reverend Anthony Owens – Pastor of Liberty Baptist Church – said Hill's life of leading by example was a message to the community, and the message was: "Leave the comfort of your homes and go out into the community and make a difference."
The memorial was organized by Will Hill's friend and former Chair of the MPD First District Citizens' Advisory Council, Nancy Rosen.
ANC6B10 Commissioner Denise Krepp and helpers at today's bake sale at Eastern Market. The fundraiser was for the fee DOJ is charging Krepp to release prosecution statistics for DC. Krepp said that she chose a bale sale rather than pursuing a waiver or other funding options in order to call attention to DOJ's and the US Attorney's office lack of transparency.
ANC6A's Alcoholic Beverage Licensing Committee meets at 7pm at Sherwood Recreation Center, 10th and G Streets, NE.
Among items on the agenda:
Update on status of request by Ocopa at 1324 H Street, NE, for an entertainment endorsement.
Update on status of request by Sol Mexican Grill at 1251 H Street, NE, for an extension of hours for operation, alcoholic beverage sales and consumption, and live entertainment.
Discussion of request by Sally's Middle Name at 1320 H Street, NE, for (1) expansion of existing premises by 60 seats on second floor; (2) addition of summer garden endorsement with 22 seats; and (3) class change from a "D" Restaurant to a "C" Restaurant.
Discussion of license application for a Class C Tavern license for Sospeso at 1344 H Street, NE.
Discussion of license application for Mia's Coffee House at 101 15th Street, NE.
ANC6B's Executive Committee meets at 7:00pm at Hill Center, to set the agenda for the ANC6B meeting in January.
ANC6A's Economic Development & Zoning Committee meets at 7:00pm at Sherwood Recreation Center, 10th and G Streets, NE.
1301 H Street, NE, Zoning Relief Application for variances from the off-street parking requirements, parking aisle width requirements, loading berth requirements, and a special exception from the HS Overlay requirements, to convert a vacant church into a new four-story, mixed-use commercial and residential building in the HS-A/C-2-A District.
Informational presentation on proposed H Street Overlay regulations amendment originating from ANC 6C. The amendment seeks to clarify preservation requirements and remove other ambiguities. The goal is to protect buildings from being razed while still claiming preservation and to result in more consistent application of regulations.
1120 Park Street, NE, Historic Preservation Application for the addition of a roof deck to a new garage.
A Celebration of Life for Will Hill (1939 – 2015)
Long time Hill East activist, ANC Commissioner and former President of the Capitol Hill Garden Club died November 24, 2015. A tribute from The Hill Rag is here: http://bit.ly/1SxpDlp
A celebration of his life will be held Wednesday, December 16, from 5:30 to 8:00pm (Formal Program from 6:00 – 7:00pm) at Liberty Baptist Church, Fellowship Hall, 527 Kentucky Avenue, SE.
This informal memorial service is to honor Mr. Hill and his life of public service to the Capitol Hill neighborhood.
The service will feature a short program from 6:00 to 7:00pm with a small group of invited speakers sharing special letters of condolences offered to Will's family. Time will then be offered for anyone wishing to share their own personal memories of Will. In lieu of a guest book, individual note cards will be available for guests to privately share a special memory of Will. If you wish to bring photos and/or memorabilia, a table will be available for display. Light refreshments will be served compliments of Will's close friends and neighbors. Donations to help defray other costs to host the service will be accepted with gratitude.
PSA 108 meets at 7:00pm at Liberty Baptist Church, 527 Kentucky Avenue, SE, featuring Lt. Damion Taylor. A representative of the Office of United Communications will be on hand to explain what is being done to improve 9-1-1 services.
Coat Drive: A coat drive to benefit veteran families continues through Monday, December 18. Gently used winter coats, hats, scarves and gloves can be dropped off at Community Connections Lobby, 801 Pennsylvania Ave SE; Bayou Bakery, 901 Pennsylvania Ave SE; and Starbucks, 401 8th St SE.
Bullfrog Bagels Liquor License Wins ANC6B Approval
Rear View, Bullfrog Bagels
Last week, ANC6B Commissioner Kirsten Oldenburg noted that nearby neighbors of the proposed Bullfrog Bagel shop coming into 7th Street, SE, had filed a protest with the Alcohol Beverage Control Board (ABRA) regarding a request for a liquor license. Oldenburg told the ANC's Alcohol Beverage Control Committee that the ANC had the option of negotiating a settlement agreement regarding the restaurant's operation in accordance with what they thought was good for the neighborhood and the that neighbors' protest could go forward in ABRA. At the full ANC meeting on Tuesday night, that's exactly what happened. In reality, the protest before ABRA has virtually no chance of winning further limitations with respect to the restaurant's operations.
The ANC wrung only a few concessions for the neighbors most affected by the restaurant: sale of alcohol inside and outside Sunday through Thursday was scaled back 30 minutes to 11:30pm and 10:30pm respectively and sale of alcohol inside by 30 minutes to 11:30pm on Friday and Saturday – sale of alcohol outside will remain at 11:00pm on those days.
The issue of deliveries in the alley was left up to the city's official interpretation of laws and regulations which are a matter of dispute between the neighbors and Bullfrog, and the latter has agreed to limit and minimize the impact of any early morning alley deliveries if they are permitted by the city. Finally, the agreement allows Bullfrog to haul trash from the second floor kitchen down exterior stairs in back and into the trash room for interior storage rather than transferring it through the restaurant.
Ellen Opper-Weiner, the attorney for the neighbors who are protesting the liquor license, said the residents were very disappointed. Their biggest concerns remain noise and trash. Opper-Weiner objected that the settlement agreement reached was between the ANC and the owners of Bullfrog Bagels, and said the residents felt left out of the process. Opper-Weiner gave credit to Commissioner Diane Hoskins, who, she said, worked hard on behalf of the residents. Hoskins offered amendments to the settlement agreement to soften the impact on neighbors which were narrowly defeated – one restricting rear deliveries on a tie vote.
Asked to react, Hoskins said, "While there are many encouraging elements of the agreement I'm disappointed because rear deliveries before 7am will be quite disruptive for nearby residential neighbors that surround the rear of the property. There is a reasonable alternative available via 7th Street utilizing the designated commercial loading zone, nearly in front of the property which will be available for early deliveries. This should be exclusively utilized before 7am. I strongly believe this is a reasonable compromise. I hope Bullfrog will reconsider their position on rear deliveries before 7am."
The "roll call" hearing on determining how the protest of the license will play out will be held on Monday, December 14.
Comments Off on Bullfrog Bagels Liquor License Wins ANC6B Approval
Major Developer Floats Rehab/Redevelopment of Potomac Gardens and Hopkins Apartments
1229 G Street would be rehabbed in the initial phase of the six year project
Potomac Gardens – image from Google Maps – click to enlarge
Hopkins Apartments – image courtesy of Google Maps
Tuesday night, Leon Kafele, Chairman/CEO of ICP Group – the major force behind development of Potomac Parc on lower Barracks Row – floated his proposal for rehabilitation and redevelopment of Potomac Gardens and Hopkins Apartments before ANC6B. Kafele says the current 363 residential units could be expanded into as many as 1200 affordable units, thus contributing to the solution for the District's affordable housing crisis.
Kafele's plan would initially involve building a new affordable housing complex near 1229 K Street, currently occupied by elderly low to moderate income residents, move those residents into the new building, and then rehab the existing structure for new tenants. The process would proceed, building by building, across the Potomac Gardens and Hopkins campuses. Kafele says his company has been working for a year or two talking to residents in 1229 G Street, and gathering their signatures on a petition endorsing the move. Most residents, he says, have signed the petition. Kafele thinks the project will cost up to $250 million and take only six years – building with precast concrete.
The ICP Group website envisions the privatization of the project, and states: "Our vision for Potomac Gardens is to create a mixed-use development that will include a combination of apartments, retail space, and parking….The bottom floor will consist of approximately 90,000 square feet of retail space. The type of proposed retailers includes restaurants, coffee shop, local market, copy center, fitness center and clothing stores."
Kafele said he expects to come back to Hill Center in January and conduct a more in-depth briefing for the community. For more information, see the company's website, here: http://bit.ly/1R8YuHV
December 6, 2015 · 10:35 pm
The Week Ahead….Headliners: MPD District 1 Commander at ANC6B – DDOT Chief at ANC6A
Sunday night, circa 6:15pm, NE Triangle of Eastern Market Metro Plaza
Capitol Hill Restoration Society Historic Preservation Committee meets at 6:30pm at Kirby House, 420 10th Street, SE
ANC6B meets at 7:00pm at Hill Center, 921 Pennsylvania Avenue, SE
Presentation: Commander Jeff Brown, 1D MPD
Bullfrog Bagels, 317 7th Street SE, new Retailer's Class "C" Restaurant license
Trader Joe's, 750 Pennsylvania Avenue SE, new Retailer's Class B license
Historic Preservation application for 1220 Potomac Avenue SE, new construction/revised plans for a multi-unit apartment project.
BZA application for 1524 Independence Avenue, SE, to clarify owner's right to use parking spaces for car sharing. (Nearby residents object to the late night activities and disruption that stem from the commercial use of this space.)
PSA 104 meets at 7:00pm at Stuart Hobson Middle School, 410 E Street, NE. (The January meeting on 1/12/16 will be at Sherwood Recreation Center, 640 10th Street, NE.)
Advisory Neighborhood Commission 6C meets at 7:00pm, Heritage Foundation, 214 Massachusetts Avenue, NE
Craft Beer Cellar, 301 H Street, NE, new license, class A liquor store
Addis Ethiopian, 707 H Street, NE, modification to settlement agreement, class C restaurant
Alibi, 237 2nd Street, NW
Toscana Café, 601 2nd Street, NE
XO, 15 K Street, NE
Updates on Po Boy Jim's, 709 H Street, NE, and Sugar Factory, 50 Massachusetts Avenue, NE
NoMa Parks update
Development of a park at 5th and I Streets, NE
NoMa Circulator route
Prostitution on K Street NE—MPD Lt. Cullen
Planned Parenthood, 1200 block of 4th Street, NE, curb cuts, sidewalk, parking, landscape
301 K Street, NE, curb cut and driveway in public space
518 6th Street, NE, status and update of ANC 6C appeal
ANC6A meets at 7:00pm at Miner Elementary, 601 15th Street, NE
Presentation: Courtney Snowden, Deputy Mayor for Greater Economic Opportunity
Presentation: Leif Dormsjo, Director, District Department of Transportation
Sol Mexican Grill's extension of its hours for operation, alcoholic beverage sales and consumption, and live entertainment
Letter of support for 2015 Rock and Roll Marathon, contingent acceptance of certain ANC conditions
Letter to DDOT requesting traffic and pedestrian safety improvements at the intersection of Florida Avenue and K Street, NE and the extension of parking for the entire length of the 1200 block of Florida Avenue NE, with the elimination of curb cuts and addition of appropriate signage
Letter to DDOT requesting the installation of a crosswalk and pedestrian crossing signs on east side of Ninth (9th) Street NE where L Street and West Virginia Avenue NE intersect
Letter to BZA in support of the request for variances at 1313-1323 Linden Court, NE, to allow the construction of five one-family dwellings and a neighborhood-serving retail establishment in the C-2-A District
ANC 6B Constituent Services Task Force meets at 7:00pm at Hill Center, 921 Pennsylvania Avenue, SE
CHRS Zoning Committee meets at 7:00pm Kirby House, 420 10th Street, SE
Comments Off on The Week Ahead….Headliners: MPD District 1 Commander at ANC6B – DDOT Chief at ANC6A
Eastern Market Bullfrog Bagels Liquor License Application Off To Rocky Start
The future home of Bullfrog Bagels at 317 7th Street, SE, near Eastern Market
Rear of Bullfrog Bagels.
Condo complex seen from the rear of Bullfrog Bagels. Owners fear early morning bagel deliveries.
Owner Starts Off on Wrong Foot with Neighbors
Last night, the continuing restaurant-vs-Capitol Hill resident drama was on full display at ANC6B's Alcohol Beverage Committee meeting. Under consideration was the application of a restaurant liquor license for Bullfrog Bagels opening next year at 317th Street, SE, near Eastern Market. The opening was first reported on CHC, here: http://bit.ly/1ylkCr1.
The owner of Bullfrog Bagels – Jeremiah Cohen – didn't help his cause much when he first insulted nearby residents, and then threatened to make their quality of life worse by using even more disruptive delivery practices if he didn't get to deliver bagels through the rear entrance of his 7th Street bagel shop daily between 3am and 4am. One of their main objections is the early morning bagel deliveries.
Nearby neighbors have lawyered up in the person of Capitol Hill attorney Ellen Opper-Weiner to help them negotiate a settlement agreement with Cohen to minimize the impact of the restaurant on their quality of life.
Three major issues concern residents: hours of operation, noise control from mechanicals, and Cohen's insistence that the daily bagel deliveries between 3am and 4am occur through the restaurant's rear door, which is overlooked not only by the bedrooms of living quarters above the adjacent retail shops, but also those of the large condo project across the alley.
As the result of recent meetings with Opper-Weiner, Cohen submitted a proposed settlement agreement detailing restrictions on business practices. Such agreements are a routine part of alcohol beverage licenses and are used to address concerns the ANC and neighbors have regarding the business'operation. Recently, mobilized neighbors have had considerable success in bringing better or best operation practices to food and drink outlets on Barracks Row, 7th Street, SE; and Pennsylvania Avenue, SE.
Cohen characterized the proffered agreement as doing "a good job of trying to address neighbors' concerns." Opper-Weiner said that while some progress has been made the three major concerns listed above remain outstanding. Commissioner Kirsten Oldenburg appeared to have little sympathy for residents, coming down squarely on the side of the restaurant saying, "I think this is a fine settlement agreement from my perspective."
Cohen wants to serve alcohol until midnight on weekends and 11pm on weekdays both inside his restaurant and at a proposed outside café and on a front balcony of the building overlooking the street. Neighbors want him to scale that back to 10pm during the week and 11pm weekends. In addition, neighbors want best practices sound abatement for the roof top mechanicals and they want deliveries through the front of the restaurant, which Cohen says is not possible because his bagel racks cannot negotiate the stairs on the front entrance. Commissioner Diane Hoskins, in whose single member district the restaurant resides, pushed for no deliveries before 7am.
Calling the objections "a classic NIMBY situation" the testy Cohen piled on, adding that the alternative "would be to say, 'screw it. I'll bring a Sysco truck into the alley at 7:01 every day and leave it idling while we unload – it will drive you guys crazy….I'll hire trucks you hate that will result in pollution, noise and traffic jams. I'm offering not to do any of that by bringing a small vehicle into the alley early in the morning. I've made an incredible offer – no Sysco truck – a quiet truck – no vendors in the alley – this is an amazing offer.'"
As to how alcohol will play into the menu of a bagel shop, Cohen was somewhat unclear other than saying that as the bagel demand tapers off around 11am, he hopes to offer lunch and brunch instead of the usual bagel shop practice of switching to subs, pizza, and burgers. Though no mention was made last night, it's been reported elsewhere that dinner will be served as well.
Commissioner Nick Burger suggested a trial period to "see how it goes." Linda Elliott, a resident who has been instrumental in organizing neighbors to push for best practices, pointed out that since the restaurant will not open before the license renewal period next spring, the trial period will be three years and three months.
After the committee voted to take no position regarding a recommendation to the full ANC which meets next Tuesday, pending further meetings between Cohen and neighbors, one of the residents spoke up and referring to Cohen's remarks stated, "…threatening me is not appropriate." Cohen's denied that he was threatening anybody, saying, "I was just pointing out what was better for the neighborhood."
In a subsequent conversation with Opper-Weiner, the attorney told CHC that language restricting early morning deliveries may be moot, citing a conversation earlier today with the Counsel to DDOT in which she says he affirmed that DC regulations prohibit loading and unloading in spaces marked by No Parking/No Standing Anytime signage. Such signage currently exists in the alley behind Bullfrog Bagels. Whether DDOT will enforce the regulations at 3am is uncertain.
Weekend Holiday Tree/Hanukkah Gift Sale To Benefit Brent School
Holiday Tree/Hanukkah Gift Sale To Benefit Brent School
The Brent Elementary School PTA will hold its Fifth Annual Christmas Tree and Holiday Sale, on Friday Dec. 4th (4:00 to 7:00 pm), Saturday Dec. 5th (9:00 am to 5:00 pm), and Sunday Dec. 6th (9:00 am to 5:00 pm) on the Brent Elementary School playground (301 North Carolina Avenue, SE). All of the proceeds go to benefit Brent Elementary for academic and other programing at the school.
A new feature this year is the participation of Brent's feeder school, Jefferson Academy. Members of their band will be playing at 4:30 on Friday and the Jefferson PTA will have a booth selling refreshments and raising money for their PTA all day on Saturday and Sunday.
Among holiday items for sale at the three day event:
~Fraser Fir Christmas Trees (tabletop, 4-5 foot, 5-6 foot, 6-7 foot, 7-8 foot, 8-9 foot, 9-10 foot). Home delivery of your tree (Capitol Hill only) is available for $15.
~Red, Pink, and White Poinsettias
~Boxwood, Cedar, and Fraser Fir Wreaths
~Boxwood, Cedar, and White Pine Roping/Garland
~Winterberry
~Hanukkah candles, dreidels and gelt
~Hanukkah kids crafts
http://brentelementary.org/holidaysale
You can place an online pre-order now and pick up your items at Brent during our sale weekend, December 4-5-6. [Hanukkah begins on December 6th.]
http://brentelementary.org/hanukkah
For more information about the items available and to place your order, please visit the Brent online store at www.brentstore.org.
If you have any questions, please email brent.holiday.sale@gmail.com
Photo Essay – 43 Unit Project Near SE Safeway Headed to Zoning Commission
Sean Ruppert of Opal LLC, holds depiction of aerial view of Watkins Alley looking Northeast. The large white structure at the top of the rendering is Safeway with E Street running between it and the project. Frager's is hidden by the tallest structure with the green roof.
Rendering of the view from E Street. The pass through permits resident and public access to the "North Courtyard." Just visible through the opening is the single carriage house in the project – which Ruppert says zoning officials referred to as the "jewel" of the project. In order to provide the pass through, designers had to eliminate one unit.
The Carriage House represented by the tall narrow grey rectangle just below the center in the first photo above.
View looking north from the North Courtyard near the carriage house. The bridge between the buildings will span the southern end of the "Southern Courtyard" depicted below.
View looking west through the "Southern Courtyard." Residents and public will have access from the entrance opening onto the the narrow alley that bisects the block north to south.
View of Watkins Alley looking north west, showing the entrance to the "Southern Courtyard." The rendering does not show the parking lot for Signature Collision Center which would be on the right of the image. That parcel is scheduled for development of residential units by Insight Development, who is also developing Buchanan School across the street.
Developers See Ground Breaking in Spring, 2017
Monday night, ANC6B's PUD Subcommittee heard a presentation on the latest plans for the 43 residential unit project planned for 1311 E Street, SE, near the SE Capitol Hill Safeway. Developer Sean Ruppert of Opal LLC told the Subcommittee that the project goes before the Zoning Commission next April for zoning relief to permit greater height and density than zoning currently allows. He subsequently told CHC he hopes to break ground in the spring of 2017. Plans for the project were reported first by CHC last January See here: http://bit.ly/14qcnLZ
In return for increased height and density, zoning regulations provide that the community receives compensatory "benefits and amenities" and the PUD Subcommittee chaired by Commissioner Nick Burger is considering a list compiled after consultation with members of the community in subcommittee meetings in recent months. Some of the items on the list include increased affordable housing, improvements to Potomac Avenue Metro Plaza, greenspace improvements, tree canopy improvements, modification of the fence around Potomac Gardens in accordance with Potomac Garden resident wishes, and improvements to Hopkins and Chamberlain School playgrounds.
There are three projects in close proximity seeking zoning relief and community compensation packages will be negotiated with each one by ANC6B on behalf of the community. See here: http://bit.ly/1Ste9jt
The three projects, the developers, and the number of likely residents are as follows:
1300 block of E Street, SE, Opal LLC, Watkins Alley residential project – 100 to 150 residents
1401 Pennsylvania Avenue, CAS Riegler, multi-story residential retail building – 400 residents
1300 block of E Street, SE, Insight Development Group, residential project – 350 to 400 residents

redpajama_set_name: RedPajamaCommonCrawl


I had a 35 mm SLR film camera decades ago, but I've used handheld film or handheld digital cameras since at least 2001.
I tried out my new digital SLR camera this past week.
Then from my front patio, without and with the zoom lens.
Yes, my neighbor developed a brand or logo for her home, a stylized version of our local three crosses icon. It even appears on her flagstone address number plaque.
That hazy day, El Paso's Franklin Mountains loom just inside the Texas border, 35 miles away.
Part of this new camera will be my re-learning techniques such as depth of field, in order to take better photos of my work and what inspires my work. I took a quick tour of my favorite project near my home to critique aspects of.
I'll try not to scare you with the bad maintenance. Again, no zoom and zoom.
Recently seeing Danger Garden's images of Agave neomexicana at one of her local nurseries, those in Oregon look healthier than here, though they grow natively on most of our hills. So, our "dry heat" can be overrated!
At least we don't have a chance at developing SAD, and the light for photos is amazing.
At the entry, the zoom lens reproduces what I see exiting the development. Though it also shortens the close-in view, causing the houses to appear closer than in reality. This is where using depth of field might help on sharpness through the view.
Many Yucca faxoniana, Dasylirion wheeleri, Agave parryi, and Nolina greenei forms going solo, with softening blooms and smaller plants long ago dying or removed. Their green really stands out and brings welcome life in winter dormancy.
The usual brown tips on foliage are evident on many plants (i.e. winters' freezes and summers' legendary "dry heat"), blurring to the left and further back.
Changing my SLR camera's depth of field would sharpen all plants as they recede in this mass. Which is what one sees without a camera.
The structure of that mass facing exiting drivers works as intended, not forming a hard wall. It affords home properties a gentle buffer west towards the development, yet preserving driver views exiting the development, east into the valley and beyond to the Organ Mountains.


<- Weihenstephan, Germany <- ATCC <- R.P. Tittsler <- C.H. Werkman, 53-W (Hitchner, No. 33). Swiss cheese. Type strain. Taxonomy/description (907, 1300, 12748, 25279, 26243). Sequence accession no. complete genome: CP010341. Murein: A31 (909). Produces vitamin B12. (Medium 91, 30°C, anaerobic).


An intermediate level will be created to contain a small museum (see news - in Italian - from Il Mattino).
Linea 3 Station to build.
Linea 4 Station to build.
Linea 6 Station to be built, to open by end 2009. Underground level station.
A tunnel connecting the two stations is planned.
January 9, 2004: The ancient harbour of Neapolis (2nd century after Christ) has been re-descovered thanks to works for station Municipio of Linea 1. Among many other things, archaeologists have found a 13-metre long boat, vases coming from Middle East, amphoras filled with oil, wine and perfumes. The Museum of History of the City should be placed in the station Municipio.
Article (in Italian) from La Repubblica on line, and an article (in Italian) from Il Mattino.
April 21, 2004: portuguese architect Alvaro Siza officially presents to Comune di Napoli his project for a new design of Piazza Municipio: his proposal also contains design of stations of Linea 1 and Linea 6 (see news - in Italian - from Il Mattino).


text:
6 years ago tonight
6 years ago this evening a rare January tornado outbreak hit Louisville and surrounding areas.Louisville had 4 tornado touchdowns. It was the biggest January tornado episode ever in Louisville.EF1 tornadoes with 100 mph winds hit....ShivelyThe University of LouisvilleSt. MatthewsAnchorageBy the way.... U of L has had a number of weather hits in the last 6 years.2008 January tornado damages vehicles on campus.2009 flash flood resulted in over $20 million in damage2011 The tornado that hit Churchill Downs also went across the southern part of the campus.2012 April hailstorm produces baseball size hail on campus damaging many vehicles.2012 Flash flood with about $200,000 in damage to the university.Back to the 2008 tornadoes....THis damage was right across from the Shelbyville Road Plaza.Other tornadoes touchdown near Lexington, IN.Henryville, INand just south of Salem.For more details on all of these tornadoes from the NWS....click HEREI was speaking at a big dinner in Scottsburg, Indiana that evening and was on my way back to Louisville. As I approached Henryville heading south on interstate 65, my car was almost blown off the highway and debris was all over the road. I looked up an the tornado passed right over the interstate. I was probably about 200 feet or less away from the tornado.As the tornado passed to the east of the interstate I could see it come down to the ground. Unfortunately it immediately hit a mobile home killing the person inside. I called the NWS to let them know of the tornado danger to the east of Henryville.It was my closest encounter ever with a twister.....too close.
6 years ago this evening a rare January tornado outbreak hit Louisville and surrounding areas.
Louisville had 4 tornado touchdowns. It was the biggest January tornado episode ever in Louisville.
EF1 tornadoes with 100 mph winds hit....
The University of Louisville
By the way.... U of L has had a number of weather hits in the last 6 years.
2008 January tornado damages vehicles on campus.
2009 flash flood resulted in over $20 million in damage
2011 The tornado that hit Churchill Downs also went across the southern part of the campus.
2012 April hailstorm produces baseball size hail on campus damaging many vehicles.
2012 Flash flood with about $200,000 in damage to the university.
Back to the 2008 tornadoes....
THis damage was right across from the Shelbyville Road Plaza.
Other tornadoes touchdown near Lexington, IN.
Henryville, IN
and just south of Salem.
For more details on all of these tornadoes from the NWS....click HERE
I was speaking at a big dinner in Scottsburg, Indiana that evening and was on my way back to Louisville. As I approached Henryville heading south on interstate 65, my car was almost blown off the highway and debris was all over the road. I looked up an the tornado passed right over the interstate. I was probably about 200 feet or less away from the tornado.
As the tornado passed to the east of the interstate I could see it come down to the ground. Unfortunately it immediately hit a mobile home killing the person inside. I called the NWS to let them know of the tornado danger to the east of Henryville.
It was my closest encounter ever with a twister.....too close.


text:
angular.module( 'coreModels' ).factory( 'Allocation', [ '$http', '$q', '$filter', 'baseUrl', 'session', 'notifications', 'lookup',
		'AllocationItem', 'AllocationSalesItem', 'ShiftDetailCashReport',
	function( $http, $q, $filter, baseUrl, session, notifications, lookup,
			AllocationItem, AllocationSalesItem, ShiftDetailCashReport )
	{
		var id;
		var store_id;
		var business_date;
		var shift_id;
		var station_id;
		var assignee;
		var assignee_type;
		var cashier_id;
		var allocation_status;

		var allocations;
		var cash_allocations;
		var remittances;
		var cash_remittances;
		var ticket_sales;
		var sales;
		var cash_reports;

		var allocationSummary;
		var changeFund = 0.00;
		var grossSales = 0.00;

		var allocationStatus = {
				'1': 'Scheduled',
				'2': 'Allocated',
				'3': 'Completed',
				'4': 'Cancelled'
			};

		/**
		 * Constructor
		 */
		function Allocation( data )
		{
			this.loadData( data );
		};

		Allocation.createFromData = function( data )
			{
				if( data.constructor == Array )
				{
					var n = data.length;
					var allocationsArray = [];

					for( var i = 0; i < n; i++ )
					{
						allocationsArray.push( new Allocation( data[i] ) );
					}

					return allocationsArray;
				}
				else if( data.constructor == Object )
				{
					return new Allocation( data );
				}
			};

		Allocation.prototype.loadData = function( data )
			{
				var me = this;

				me.id = null;
				me.store_id = session.data.currentStore.id;
				me.business_date = new Date();
				me.shift_id = null;
				me.station_id = null;
				me.assignee = null;
				me.assignee_type = null;
				me.cashier_id = null;
				me.allocation_status = 1;

				me.allocations = [];
				me.cash_allocations = [];
				me.remittances = [];
				me.cash_remittances = [];
				me.ticket_sales = [];
				me.sales = [];
				me.cash_reports = [];

				me.allocationSummary = [];
				me.grossSales = 0.00;
				me.changeFund = 0.00;

				if( data )
				{
					var allocationItems = [];
					var allocationCashItems = [];
					var remittanceItems = [];
					var remittanceCashItems = [];
					var ticketSaleItems = [];
					var salesItems = [];
					var cashReports = [];

					if( data.allocations )
					{
						angular.copy( data.allocations, allocationItems );
						delete data.allocations;
					}
					if( data.cash_allocations )
					{
						angular.copy( data.cash_allocations, allocationCashItems );
						delete data.cash_allocations;
					}
					if( data.remittances )
					{
						angular.copy( data.remittances, remittanceItems );
						delete data.remittances;
					}
					if( data.cash_remittances )
					{
						angular.copy( data.cash_remittances, remittanceCashItems );
						delete data.cash_remittances;
					}

					if( data.ticket_sales )
					{
						angular.copy( data.ticket_sales, ticketSaleItems );
						delete data.ticket_sales;
					}

					if( data.sales )
					{
						angular.copy( data.sales, salesItems );
						delete data.sales;
					}

					if( data.cash_reports )
					{
						angular.copy( data.cash_reports, cashReports );
						delete data.cash_reports;
					}

					angular.merge( me, data );

					if( me.business_date )
					{
						if( me.business_date.constructor == String )
						{
							me.business_date = new Date( me.business_date );
						}
					}

					// Allocation items
					if( allocationItems )
					{
						var n = allocationItems.length;
						for( var i = 0; i < n; i++ )
						{
							me.allocations.push( new AllocationItem( allocationItems[i] ) );
						}
					}

					// Cash Allocation items
					if( allocationCashItems )
					{
						var n = allocationCashItems.length;
						for( var i = 0; i < n; i++ )
						{
							me.cash_allocations.push( new AllocationItem( allocationCashItems[i] ) );
						}
					}

					// Remittance items
					if( remittanceItems )
					{
						var n = remittanceItems.length;
						for( var i = 0; i < n; i++ )
						{
							me.remittances.push( new AllocationItem( remittanceItems[i] ) );
						}
					}

					// Remittance items
					if( remittanceCashItems )
					{
						var n = remittanceCashItems.length;
						for( var i = 0; i < n; i++ )
						{
							me.cash_remittances.push( new AllocationItem( remittanceCashItems[i] ) );
							switch( lookup.getX( 'categories', remittanceCashItems[i].allocation_category_id ).cat_name )
							{
								case 'SalesColl':
									me.grossSales += remittanceCashItems[i].allocated_quantity * remittanceCashItems[i].iprice_unit_price;
									break;

								case 'CFundRet':
									me.changeFund += remittanceCashItems[i].allocated_quantity * remittanceCashItems[i].iprice_unit_price;
									break;
							}
						}
					}

					// Ticket sale Items
					if( ticketSaleItems )
					{
						var n = ticketSaleItems.length;
						for( var i = 0; i < n; i++ )
						{
							me.ticket_sales.push( new AllocationItem( ticketSaleItems[i]) );
						}
					}

					// Sales Items
					if( salesItems )
					{
						var n = salesItems.length;
						for( var i = 0; i < n; i++ )
						{
							me.sales.push( new AllocationSalesItem( salesItems[i] ) );
						}
					}

					// Cash Reports
					if( cashReports )
					{
						var n = cashReports.length;
						for( var i = 0; i < n; i++ )
						{
							me.cash_reports.push( new ShiftDetailCashReport( cashReports[i] ) );
						}
					}

					me.updateAllocationSummary();
				}
			};

		Allocation.prototype.get = function( field )
			{
				switch( field )
				{
					case 'allocationStatus':
						if( this.assignee_type == 2 && this.allocation_status == 1 && this.remittances.length > 0 )
						{
							return 'Remitted';
						}
						else
						{
							return allocationStatus[this.allocation_status.toString()];
						}

					default:
						if( this.hasOwnProperty( field ) )
						{
							return this[field];
						}
						else
						{
							console.error( 'The property [' + field + '] does not exist!' );
							return undefined;
						}
				}
			};

		Allocation.prototype.canEdit = function()
			{
				return ( this.allocation_status == 1 || this.allocation_status == 2 ) &&
							 session.checkPermissions( 'allocations', 'edit' ) &&
							 this.store_id == session.data.currentStore.id;
			};

		Allocation.prototype.canAllocate = function( showAction )
			{
				return this.allocation_status == 1 &&
							 session.checkPermissions( 'allocations', 'edit' ) &&
							 ( showAction || this.getValidAllocations().length > 0 || this.getValidCashAllocations().length > 0 ) &&
							 ( showAction || this.assignee );
			};

		Allocation.prototype.canComplete = function( showAction )
			{
				switch( this.assignee_type )
				{
					case 1: // Station Teller
						return this.allocation_status == 2
									 && session.checkPermissions( 'allocations', 'complete' )
									 && ( showAction || !this.hasPendingAllocation() )
									 && ( showAction || this.getValidAllocations().length > 0 || this.getValidCashAllocations().length > 0 )
									 && ( showAction || this.assignee );

					case 2: // TVM
						return ( this.allocation_status == 1 || this.allocation_status == 2 )
									 && session.checkPermissions( 'allocations', 'complete' )
									 && ( showAction || !this.hasPendingAllocation() )
									 && ( showAction || ( this.getValidAllocations().length > 0 || this.getValidCashAllocations().length > 0
											 || this.getValidRemittances().length > 0 || this.getValidCashRemittances().length > 0
											 || this.getValidTicketSales().length > 0 || this.getValidSales().length > 0 ) )
									 && ( showAction || this.assignee );
				}
			};

		Allocation.prototype.canCancel = function()
			{
				return this.allocation_status == 1 && ( this.remittances.length == 0 && this.cash_remittances.length == 0 )
						&& session.checkPermissions( 'allocations', 'edit' );
			};

		Allocation.prototype.canAddCashReport = function()
			{
				return ( this.allocation_status == 1 || this.allocation_status == 2 ) // ALLOCATION_SCHEDULED, ALLOCATION_ALLOCATED
			};

		Allocation.prototype.hasPendingAllocation = function()
			{
				var n = this.allocations.length;
				for( var i = 0; i < n; i++ )
				{
					if( this.allocations[i].allocation_item_status == 10 ) // ALLOCATION_ITEM_SCHEDULED
					{
						return true;
					}
				}

				n = this.cash_allocations.length;
				for( var i = 0; i < n; i++ )
				{
					if( this.cash_allocations[i].allocation_item_status == 10 ) // ALLOCATION_ITEM_SCHEDULED
					{
						return true;
					}
				}

				return false;
			};

		Allocation.prototype.getValidAllocations = function()
			{
				var n = this.allocations.length;
				var validAllocations = [];
				for( var i = 0; i < n; i++ )
				{
					if( ( this.allocations[i].allocation_item_status == 10 || this.allocations[i].allocation_item_status == 11 ) &&
							this.allocations[i].allocated_quantity > 0 &&
							!this.allocations[i].markedVoid )
					{
						validAllocations.push( this.allocations[i] );
					}
				}

				return validAllocations;
			};

		Allocation.prototype.getValidCashAllocations = function()
			{
				var n = this.cash_allocations.length;
				var validCashAllocations = [];
				for( var i = 0; i < n; i++ )
				{
					if( ( this.cash_allocations[i].allocation_item_status == 10 || this.cash_allocations[i].allocation_item_status == 11 ) &&
							this.cash_allocations[i].allocated_quantity > 0 &&
							!this.cash_allocations[i].markedVoid )
					{
						validCashAllocations.push( this.cash_allocations[i] );
					}
				}

				return validCashAllocations;
			};

		Allocation.prototype.getValidRemittances = function()
			{
				var n = this.remittances.length;
				var validRemittances = [];
				for( var i = 0; i < n; i++ )
				{
					if( ( this.remittances[i].allocation_item_status == 20 || this.remittances[i].allocation_item_status == 21 ) &&
							this.remittances[i].allocated_quantity > 0 &&
							!this.remittances[i].markedVoid )
					{
						validRemittances.push( this.remittances[i] );
					}
				}

				return validRemittances;
			};

		Allocation.prototype.getValidCashRemittances = function()
			{
				var n = this.cash_remittances.length;
				var validCashRemittances = [];
				for( var i = 0; i < n; i++ )
				{
					if( ( this.cash_remittances[i].allocation_item_status == 20 || this.cash_remittances[i].allocation_item_status == 21 ) &&
							this.cash_remittances[i].allocated_quantity > 0 &&
							!this.cash_remittances[i].markedVoid )
					{
						validCashRemittances.push( this.cash_remittances[i] );
					}
				}

				return validCashRemittances;
			};

		Allocation.prototype.getValidTicketSales = function()
			{
				var n = this.ticket_sales.length;
				var validTicketSales = [];
				for( var i = 0; i < n; i++ )
				{
					if( ( this.ticket_sales[i].allocation_item_status == 30 || this.ticket_sales[i].allocation_item_status == 31 ) &&
							this.ticket_sales[i].allocated_quantity > 0 &&
							!this.ticket_sales[i].markedVoid )
					{
						validTicketSales.push( this.ticket_sales[i] );
					}
				}

				return validTicketSales;
			};

		Allocation.prototype.getValidSales = function()
			{
				var n = this.sales.length;
				var validSales = [];
				for( var i = 0; i < n; i++ )
				{
					if( ( this.sales[i].alsale_sales_item_status == 10 || this.sales[i].alsale_sales_item_status == 11 ) &&
							this.sales[i].alsale_amount > 0 &&
							!this.sales[i].markedVoid )
					{
						validSales.push( this.sales[i] );
					}
				}

				return validSales;
			};

		Allocation.prototype.addAllocationItem = function( item )
			{
				switch( item.item_class )
				{
					case 'ticket':
						this.allocations.push( item );
						break;

					case 'cash':
						this.cash_allocations.push( item );
						break;
				}

				this.updateAllocationSummary();
			};

		Allocation.prototype.addRemittanceItem = function( item )
			{
				var me = this;
				switch( item.item_class )
				{
					case 'ticket':
						me.remittances.push( item );
						break;

					case 'cash':
						me.cash_remittances.push( item );
						switch( lookup.getX( 'categories', item.allocation_category_id ).cat_name )
						{
							case 'SalesColl':
								me.grossSales += item.allocated_quantity * item.iprice_unit_price;
								break;

							case 'CFundRet':
								me.changeFund += item.allocated_quantity * item.iprice_unit_price;
								break;
						}
						break;
				}

				me.updateAllocationSummary();
			};

		Allocation.prototype.addTicketSaleItem = function( item )
			{
				this.ticket_sales.push( item );
			};

		Allocation.prototype.addSalesItem = function( item )
			{
				var me = this;
				me.sales.push( item );
				if( item.slitem_mode === 0 )
				{
					me.grossSales -= item.alsale_amount;
				}
			};

		Allocation.prototype.updateAllocationSummary = function()
			{
				this.allocationSummary = [];
				var tempObj = {};
				var ignoredStatus = [ 12, 13, 22 ]; // ALLOCATION_ITEM_CANCELLED, ALLOCATION_ITEM_VOIDED, REMITTANCE_ITEM_VOIDED

				var n = this.allocations.length;
				var cn = this.cash_allocations.length;
				var m = this.remittances.length;
				var cm = this.cash_remittances.length;

				switch( this.assignee_type )
				{
					case 1: // Station Teller
						// Ticket allocations
						for( var i = 0; i < n; i++ )
						{
							if( ignoredStatus.indexOf( this.allocations[i].allocation_item_status ) != -1 || this.allocations[i].markedVoid )
							{
								continue;
							}

							if( !tempObj[this.allocations[i].allocated_item_id] )
							{
								tempObj[this.allocations[i].allocated_item_id] = {
										item_name: this.allocations[i].item_name,
										item_description: this.allocations[i].item_description,
										item_class: this.allocations[i].item_class,
										scheduled: 0,
										initial: 0,
										additional: 0,
										remitted: 0
									};
							}

							if( this.allocations[i].allocation_item_status == 10 ) // ALLOCATION_ITEM_SCHEDULED
							{
								tempObj[this.allocations[i].allocated_item_id].scheduled += this.allocations[i].allocated_quantity;
							}
							else if( this.allocations[i].cat_description == 'Initial Allocation' )
							{
								tempObj[this.allocations[i].allocated_item_id].initial += this.allocations[i].allocated_quantity;
							}
							else if( this.allocations[i].cat_description == 'Additional Allocation' )
							{
								tempObj[this.allocations[i].allocated_item_id].additional += this.allocations[i].allocated_quantity;
							}
						}

						// Cash allocations
						for( var i = 0; i < cn; i++ )
						{
							if( ignoredStatus.indexOf( this.cash_allocations[i].allocation_item_status ) != -1 || this.cash_allocations[i].markedVoid )
							{
								continue;
							}

							var rowObject;
							var amount = this.cash_allocations[i].allocated_quantity * this.cash_allocations[i].iprice_unit_price;

							if( ['Initial Change Fund', 'Additional Change Fund'].indexOf( this.cash_allocations[i].cat_description ) != -1 )
							{
								rowObject = 'Change Fund';
							}
							else if( ['Sales Collection'].indexOf( this.cash_allocations[i].cat_description ) != -1 )
							{
								rowObject = 'Sales Collection';
							}

							if( !tempObj[rowObject] )
							{
								tempObj[rowObject] = {
										item_name: rowObject,
										item_description: rowObject,
										//item_class: this.cash_allocations[i].item_class,
										scheduled: 0,
										initial: 0,
										additional: 0,
										remitted: 0,
										item_class: 'cash'
									};
							}

							if( this.cash_allocations[i].allocation_item_status == 10 ) // ALLOCATION_ITEM_SCHEDULED
							{
								tempObj[rowObject].scheduled += amount;
							}
							else if( this.cash_allocations[i].cat_description == 'Initial Change Fund' )
							{
								tempObj[rowObject].initial += amount;
							}
							else if( this.cash_allocations[i].cat_description == 'Additional Change Fund' )
							{
								tempObj[rowObject].additional += amount;
							}
						}

						// Ticket remittances
						for( var i = 0; i < m; i++ )
						{
							if( ignoredStatus.indexOf( this.remittances[i].allocation_item_status ) != -1 )
							{
								continue;
							}

							if( !tempObj[this.remittances[i].allocated_item_id] )
							{
								tempObj[this.remittances[i].allocated_item_id] = {
										item_name: this.remittances[i].item_name,
										item_description: this.remittances[i].item_description,
										item_class: this.remittances[i].item_class,
										scheduled: 0,
										initial: 0,
										additional: 0,
										remitted: 0,
										//item_class: 'ticket'
									};
							}

							tempObj[this.remittances[i].allocated_item_id].remitted += this.remittances[i].allocated_quantity;
						}

						// Cash remittances
						for( var i = 0; i < cm; i++ )
						{
							if( ignoredStatus.indexOf( this.cash_remittances[i].allocation_item_status ) != -1 )
							{
								continue;
							}

							var rowObject;

							if( ['Change Fund Return'].indexOf( this.cash_remittances[i].cat_description ) != -1 )
							{
								rowObject = 'Change Fund';
							}
							else if( ['Sales Collection'].indexOf( this.cash_remittances[i].cat_description ) != -1 )
							{
								rowObject = 'Sales Collection';
							}

							if( !tempObj[rowObject] )
							{
								tempObj[rowObject] = {
										item_name: rowObject,
										item_description: rowObject,
										scheduled: 0,
										initial: 0,
										additional: 0,
										remitted: 0,
										item_class: 'cash'
									};
							}

							if( this.cash_remittances[i].cat_description == 'Change Fund Return' )
							{
								tempObj[rowObject].remitted += this.cash_remittances[i].allocated_quantity * this.cash_remittances[i].iprice_unit_price;
							}
							else if( this.cash_remittances[i].cat_description == 'Sales Collection' )
							{
								tempObj[rowObject].remitted += this.cash_remittances[i].allocated_quantity * this.cash_remittances[i].iprice_unit_price;
							}
						}
						break;

					case 2: //
						// Ticket allocations
						for( var i = 0; i < n; i++ )
						{
							if( ignoredStatus.indexOf( this.allocations[i].allocation_item_status ) != -1 )
							{
								continue;
							}

							var rowObject;

							rowObject = this.allocations[i].item_group;
							/*
							switch( this.allocations[i].cat_description )
							{
								case 'TVM Replenishment':
									rowObject = 'Magazine: ' + this.allocations[i].item_name;
									break;
							}
							*/

							if( !tempObj[rowObject] )
							{
								tempObj[rowObject] = {
										item_name: rowObject,
										item_description: rowObject,
										scheduled: 0,
										replenish: 0,
										pullout: 0,
										rejected: 0,
										item_class: 'ticket'
									};
							}

							if( this.allocations[i].allocation_item_status == 10 )
							{
								tempObj[rowObject].scheduled += this.allocations[i].base_quantity;
							}
							else
							{
								tempObj[rowObject].replenish += this.allocations[i].base_quantity;
							}
						}

						// Coin replenishments
						for( var i = 0; i < cn; i++ )
						{
							if( ignoredStatus.indexOf( this.cash_allocations[i].allocation_item_status ) != -1 || this.cash_allocations[i].markedVoid )
							{
								continue;
							}

							var rowObject;

							switch( this.cash_allocations[i].cat_description )
							{
								case 'Hopper Replenishment':
									switch( this.cash_allocations[i].item_name )
									{
										case 'Bag Php5@100':
										case 'Php5 Coin':
											rowObject = 'Hopper Php5';
											break;

										case 'Bag Php1@100':
										case 'Php1 Coin':
											rowObject = 'Hopper Php1';
											break;
									}
									break;

								case 'Coin Acceptor Replenishment':
									rowObject = 'CA: ' + this.cash_allocations[i].item_name;
									break;
							}

							if( !tempObj[rowObject] )
							{
								tempObj[rowObject] = {
										item_name: rowObject,
										item_description: rowObject,
										//item_class: this.cash_allocations[i].item_class,
										scheduled: 0,
										replenish: 0,
										pullout: 0,
										rejected: 0,
										item_class: 'cash'
									};
							}

							if( [ 'Hopper Replenishment', 'Coin Acceptor Replenishment'].indexOf( this.cash_allocations[i].cat_description ) != -1 )
							{
								tempObj[rowObject].replenish += this.cash_allocations[i].allocated_quantity * this.cash_allocations[i].iprice_unit_price;
							}
						}

						// Ticket pullout
						for( var i = 0; i < m; i++ )
						{
							if( ignoredStatus.indexOf( this.remittances[i].allocation_item_status ) != -1 )
							{
								continue;
							}

							var rowObject = this.remittances[i].item_group;

							if( !tempObj[rowObject] )
							{
								tempObj[rowObject] = {
										item_name: this.remittances[i].item_name,
										item_description: this.remittances[i].item_description,
										scheduled: 0,
										replenish: 0,
										pullout: 0,
										rejected: 0,
										item_class: 'ticket'
									};
							}

							if( this.remittances[i].cat_description == 'Unsold / Loose' )
							{
								tempObj[rowObject].pullout += this.remittances[i].allocated_quantity;
							}
							else if( this.remittances[i].cat_description == 'Reject Bin' )
							{
								tempObj[rowObject].rejected += this.remittances[i].allocated_quantity;
							}
						}

						// Coin and note pullout
						for( var i = 0; i < cm; i++ )
						{
							if( ignoredStatus.indexOf( this.cash_remittances[i].allocation_item_status ) != -1 || this.cash_remittances[i].markedVoid )
							{
								continue;
							}

							var rowObject;

							switch( this.cash_remittances[i].cat_description )
							{
								case 'Sales Collection':
									if( this.cash_remittances[i].item_group == 'coin' )
									{
										rowObject = 'Coin box';
									}
									else if( this.cash_remittances[i].item_group == 'bill' )
									{
										rowObject = 'BNA box';
									}
									break;

								case 'Hopper Pullout':
									if( this.cash_remittances[i].item_name == 'Php1 Coin' )
									{
										rowObject = 'Hopper Php1';
									}
									else if( this.cash_remittances[i].item_name == 'Php5 Coin' )
									{
										rowObject = 'Hopper Php5';
									}
									break;

								case 'Coin Acceptor Pullout':
									rowObject = 'CA: ' + this.cash_remittances[i].item_name;
									break;
							}

							if( !tempObj[rowObject] )
							{
								tempObj[rowObject] = {
										item_name: rowObject,
										item_description: rowObject,
										//item_class: this.cash_remittances[i].item_class,
										scheduled: 0,
										replenish: 0,
										pullout: 0,
										rejected: 0,
										item_class: 'cash'
									};
							}

							if( [ 'Sales Collection', 'Hopper Pullout', 'Coin Acceptor Pullout'].indexOf( this.cash_remittances[i].cat_description ) != -1 )
							{
								tempObj[rowObject].pullout += this.cash_remittances[i].allocated_quantity * this.cash_remittances[i].iprice_unit_price;
							}
						}
						break;

					default:
						// Do nothing
				}

				// Populate the allocation summary removing the keys
				for( var key in tempObj )
				{
					this.allocationSummary.push( tempObj[key] );
				}

				return this.allocationSummary;
			};

		Allocation.prototype.removeAllocationItem = function( item )
			{
				if( item.id == undefined )
				{
					var index;
					switch( item.item_class )
					{
						case 'ticket':
							index = this.allocations.indexOf( item );
							this.allocations.splice( index, 1 );
							break;

						case 'cash':
							index = this.cash_allocations.indexOf( item );
							this.cash_allocations.splice( index, 1 );
							break;
					}
				}
				else
				{
					item.void( !item.void() );
				}

				this.updateAllocationSummary();
			};

		Allocation.prototype.removeRemittanceItem = function( item )
			{
				var me = this;

				if( item.id == undefined )
				{
					var index;
					switch( item.item_class )
					{
						case 'ticket':
							index = this.remittances.indexOf( item );
							me.remittances.splice( index, 1 );
							break;

						case 'cash':
							index = this.cash_remittances.indexOf( item );
							me.cash_remittances.splice( index, 1 );
							switch( lookup.getX( 'categories', item.allocation_category_id ).cat_name )
							{
								case 'SalesColl':
									me.grossSales -= item.allocated_quantity * item.iprice_unit_price;
									break;

								case 'CFundRet':
									me.changeFund -= item.allocated_quantity * item.iprice_unit_price;
									break;
							}
							break;
					}
				}
				else
				{
					item.void( !item.void() );
				}

				this.updateAllocationSummary();
			};

		Allocation.prototype.removeTicketSaleItem = function( item )
			{
				if( item.id == undefined )
				{
					var index = this.ticket_sales.indexOf( item );
					this.ticket_sales.splice( index, 1 );
				}
				else
				{
					item.void( !item.void() );
				}
			};

		Allocation.prototype.removeSalesItem = function( item )
			{
				if( item.id == undefined )
				{
					var index = this.sales.indexOf( item );
					this.sales.splice( index, 1 );
				}
				else
				{
					item.void( !item.void() );
				}

				if( item.slitem_mode === 0 )
				{
					me.grossSales += item.amount;
				}
			};

		Allocation.prototype.removeCashReport = function( item )
			{
				var me = this;
				var index = this.cash_reports.indexOf( item );
				item.remove().then(
					function( response )
					{
						me.cash_reports.splice( index, 1 );
					} );
			};

		Allocation.prototype.checkAllocation = function( action )
			{
				var allocationCount = this.allocations.length;
				var cashAllocationCount = this.cash_allocations.length;
				var remittanceCount = this.remittances.length;
				var cashRemittanceCount = this.cash_remittances.length;
				var ticketSalesCount = this.ticket_sales.length;
				var salesCount = this.sales.length;

				var preAllocationCategories = [ 'Initial Allocation', 'Magazine Load', 'Change Fund' ];
				var postAllocationCategories = [ 'Additional Allocation', 'Magazine Load', 'Change Fund' ];

				var hasValidAllocationItem = this.getValidAllocations().length > 0 || this.getValidCashAllocations().length > 0;
				var hasValidRemittanceItem = this.getValidRemittances().length > 0 || this.getValidCashRemittances().length > 0;
				var hasValidTicketSaleItem = this.getValidTicketSales().length > 0;
				var hasValidSalesItem = this.getValidSales().length > 0;

				switch( action )
				{
					case 'schedule':
					case 'allocate':
						if( this.assignee_type == 1 && allocationCount == 0 && cashAllocationCount == 0 ) // ALLOCATION_ASSIGNEE_TELLER
						{
							notifications.alert( 'Allocation does not contain any items', 'warning' );
							return false;
						}

						if( action == 'schedule' && ! hasValidAllocationItem && ! hasValidRemittanceItem  )
						{
							notifications.alert( 'Record does not contain any valid allocation or remittance items', 'warning' );
							return false;
						}

						if( action == 'allocate' && ! hasValidAllocationItem )
						{
							notifications.alert( 'Allocation does not contain any valid items', 'warning' );
							return false;
						}

						if( action == 'allocate' && ! this.assignee )
						{
							notifications.alert( 'Please enter ' + $scope.data.assigneeLabel, 'warning' );
							return false;
						}

						if( action == 'schedule' && !this.assignee
							&& this.assignee_type == 2 // ALLOCATION_ASSIGNEE_MACHINE
							&& hasValidRemittanceItem )
						{
							notifications.alert( 'Please enter assignee', 'warning' );
							return false;
						}
						break;

					case 'complete':
						// TODO: Do we need to check if allocated item count - sold item count == remitted item count?
						if( !hasValidAllocationItem && !hasValidRemittanceItem && !hasValidTicketSaleItem )
						{
							notifications.alert( 'Record does not contain any valid allocation, remittance or ticket sale items', 'warning' );
							return false;
						}

						if( !this.assignee )
						{
							notifications.alert( 'Please enter assignee', 'warning' );
							return false;
						}
						break;

					default:
						// do nothing
				}

				if( this.assignee_type == 1 && !hasValidAllocationItem ) // ALLOCATION_ASSIGNEE_TELLER
				{ // Tellers must have a valid allocation
					notifications.alert( 'Allocation does not contain any valid items', 'warning' );
					return false;
				}

				switch( this.allocation_status )
				{
					case 1: // scheduled
						break;

					case 2: // allocated
						break;

					case 3: // remitted
						break;

					case 4: // cancelled
						break;

					default:
						notifications.alert( 'Invalid action', 'error' );
						return false;
				}

				return true;
			};

		Allocation.prototype.prepareAllocationData = function()
			{
				var data = {
						id: this.id,
						store_id: this.store_id,
						business_date: this.business_date ? $filter( 'date' )( this.business_date, 'yyyy-MM-dd' ) : null,
						shift_id: this.shift_id,
						station_id: this.station_id,
						assignee: this.assignee,
						assignee_type: this.assignee_type,
						cashier_id: this.cashier_id,
						allocation_status: this.allocation_status,

						allocations: [],
						cash_allocations: [],
						remittances: [],
						cash_remittances: [],
						ticket_sales: [],
						sales: [],
					};

				var allocations = this.allocations;
				var remittances = this.remittances;
				var cash_allocations = this.cash_allocations;
				var cash_remittances = this.cash_remittances;
				var ticket_sales = this.ticket_sales;
				var sales = this.sales;
				var m = allocations.length;
				var n = remittances.length;
				var cm = cash_allocations.length;
				var cn = cash_remittances.length;
				var ts = ticket_sales.length;
				var s = sales.length;

				for( var i = 0; i < m; i++ )
				{
					var allocationData = {
							id: allocations[i].id,
							allocation_id: allocations[i].allocation_id,
							cashier_id: allocations[i].cashier_id,
							allocated_item_id: allocations[i].allocated_item_id,
							allocated_quantity: allocations[i].allocated_quantity,
							allocation_category_id: allocations[i].allocation_category_id,
							allocation_datetime: allocations[i].allocation_datetime ? $filter( 'date' )( allocations[i].allocation_datetime, 'yyyy-MM-dd HH:mm:ss' ) : null,
							allocation_item_status: allocations[i].allocation_item_status,
							allocation_item_type: 1 // ALLOCATION_ITEM_TYPE_ALLOCATION
						};

					// Change item status of voided items
					if( allocations[i].markedVoid )
					{
						allocationData.allocation_item_status = 13 // ALLOCATION_ITEM_VOIDED
					}

					data.allocations.push( allocationData );
				}

				for( var i = 0; i < cm; i++ )
				{
					var allocationData = {
							id: cash_allocations[i].id,
							allocation_id: cash_allocations[i].allocation_id,
							cashier_id: cash_allocations[i].cashier_id,
							allocated_item_id: cash_allocations[i].allocated_item_id,
							allocated_quantity: cash_allocations[i].allocated_quantity,
							allocation_category_id: cash_allocations[i].allocation_category_id,
							allocation_datetime: cash_allocations[i].allocation_datetime ? $filter( 'date' )( cash_allocations[i].allocation_datetime, 'yyyy-MM-dd HH:mm:ss' ) : null,
							allocation_item_status: cash_allocations[i].allocation_item_status,
							allocation_item_type: 1 // ALLOCATION_ITEM_TYPE_ALLOCATION
						};

					// Change item status of voided items
					if( cash_allocations[i].markedVoid )
					{
						allocationData.allocation_item_status = 13 // ALLOCATION_ITEM_VOIDED
					}

					data.cash_allocations.push( allocationData );
				}

				for( var i = 0; i < n; i++ )
				{
					var remittanceData = {
							id: remittances[i].id,
							allocation_id: remittances[i].allocation_id,
							cashier_id: remittances[i].cashier_id,
							allocated_item_id: remittances[i].allocated_item_id,
							allocated_quantity: remittances[i].allocated_quantity,
							allocation_category_id: remittances[i].allocation_category_id,
							allocation_datetime: remittances[i].allocation_datetime ? $filter( 'date' )( remittances[i].allocation_datetime, 'yyyy-MM-dd HH:mm:ss' ) : null,
							allocation_item_status: remittances[i].allocation_item_status,
							allocation_item_type: 2 // ALLOCATION_ITEM_TYPE_REMITTANCE
						};

					// Change item status of voided items
					if( remittances[i].markedVoid )
					{
						remittanceData.allocation_item_status = 22 // REMITTANCE_ITEM_VOIDED
					}

					data.remittances.push( remittanceData );
				}

				for( var i = 0; i < cn; i++ )
				{
					var remittanceData = {
							id: cash_remittances[i].id,
							allocation_id: cash_remittances[i].allocation_id,
							cashier_id: cash_remittances[i].cashier_id,
							allocated_item_id: cash_remittances[i].allocated_item_id,
							allocated_quantity: cash_remittances[i].allocated_quantity,
							allocation_category_id: cash_remittances[i].allocation_category_id,
							allocation_datetime: cash_remittances[i].allocation_datetime ? $filter( 'date' )( cash_remittances[i].allocation_datetime, 'yyyy-MM-dd HH:mm:ss' ) : null,
							allocation_item_status: cash_remittances[i].allocation_item_status,
							allocation_item_type: 2 // ALLOCATION_ITEM_TYPE_REMITTANCE
						};

					// Change item status of voided items
					if( cash_remittances[i].markedVoid )
					{
						remittanceData.allocation_item_status = 22 // REMITTANCE_ITEM_VOIDED
					}

					data.cash_remittances.push( remittanceData );
				}

				for( var i = 0; i < ts; i++ )
				{
					var ticketSaleData = {
							id: ticket_sales[i].id,
							allocation_id: ticket_sales[i].allocation_id,
							cashier_id: ticket_sales[i].cashier_id,
							allocated_item_id: ticket_sales[i].allocated_item_id,
							allocated_quantity: ticket_sales[i].allocated_quantity,
							allocation_category_id: ticket_sales[i].allocation_category_id,
							allocation_datetime: ticket_sales[i].allocation_datetime ? $filter( 'date' )( ticket_sales[i].allocation_datetime, 'yyyy-MM-dd HH:mm:ss' ) : null,
							allocation_item_status: ticket_sales[i].allocation_item_status,
							allocation_item_type: 3 // ALLOCATION_ITEM_TYPE_SALES
						};

					// Change item status of voided items
					if( ticket_sales[i].markedVoid )
					{
						ticketSaleData.allocation_item_status = 32 // TICKET_SALE_ITEM_VOIDED
					}

					data.ticket_sales.push( ticketSaleData );
				}

				for( var i = 0; i < s; i++ )
				{
					var saleData = {
							id: sales[i].id,
							alsale_allocation_id: sales[i].alsale_allocation_id,
							alsale_cashier_id: sales[i].alsale_cashier_id,
							alsale_sales_item_id: sales[i].alsale_sales_item_id,
							alsale_amount: sales[i].alsale_amount,
							alsale_remarks: sales[i].alsale_remarks,
							alsale_sales_item_status: sales[i].alsale_sales_item_status
						};

					// Change item status of voided items
					if( sales[i].markedVoid )
					{
						saleData.alsale_sales_item_status = 12 // TICKET_SALE_ITEM_VOIDED
					}

					data.sales.push( saleData );
				}

				return data;
			};

		Allocation.prototype.save = function( action )
			{
				var me = this;
				var deferred = $q.defer();

				if( this.checkAllocation( action ) )
				{
					var allocationData = this.prepareAllocationData();

					var allocationUrl = baseUrl + 'index.php/api/v1/allocations/';
					switch( action )
					{
						case 'allocate':
							allocationUrl += 'allocate';
							break;

						case 'complete':
						case 'remit':
							allocationUrl += 'remit';
							break;

						case 'cancel':
							allocationUrl += 'cancel';
							break;

						default:
							// do nothing
					}

					$http({
						method: 'POST',
						url: allocationUrl,
						data: allocationData
					}).then(
						function( response )
						{
							if( response.data.status == 'ok' )
							{
								me.loadData( response.data.data );
								me.updateAllocationSummary();
								deferred.resolve( me );
							}
							else
							{
								notifications.showMessages( response.data.errorMsg );
								deferred.reject( response.data.errorMsg );
							}
						},
						function( reason )
						{
							deferred.reject( reason );
						}
					);
				}
				else
				{
					deferred.reject( 'Failed allocation data check' );
				}

				return deferred.promise;
			};

		return Allocation;
	}
]);

angular.module( 'coreModels' ).factory( 'AllocationItem', [ '$http', '$q', '$filter', 'baseUrl', 'session', 'notifications',
	function( $http, $q, $filter, baseUrl, session, notifications )
	{
		var id;
		var allocation_id;
		var cashier_id;
		var allocated_item_id;
		var allocated_quantity;
		var allocation_category_id;
		var allocation_datetime;
		var allocation_item_status;
		var allocation_item_type;

		var item_class;

		var allocationItemStatus = {
				'10': 'Scheduled',
				'11': 'Allocated',
				'12': 'Cancelled',
				'13': 'Voided',
				'20': 'Pending',
				'21': 'Remitted',
				'22': 'Voided',
				'30': 'Pending',
				'31': 'Recorded',
				'32': 'Voided',
			};

		var iprice_currency;
		var iprice_unit_price;
		var item_class;
		var base_quantity;

		/**
		 * Constructor
		 */
		function AllocationItem( data, type )
		{
			this.loadData( data, type );
		}

		AllocationItem.prototype.loadData = function( data, type )
			{
				var me = this;

				me.id = null;
				me.allocation_id = null;
				me.cashier_id = null;
				me.allocated_item_id = null;
				me.allocated_quantity = null;
				me.allocation_category_id = null;
				me.allocation_datetime = new Date();

				me.iprice_currency = null;
				me.iprice_unit_price = null;
				me.item_class = null;
				me.base_quantity = null;

				switch( type )
				{
					case 'ticket_sale':
						me.allocation_item_type = 3;
						me.allocation_item_status = 30;
						break;

					case 'remittance':
					case 'cash_remittance':
						me.allocation_item_type = 2;
						me.allocation_item_status = 20;
						break;

					case 'allocation':
					case 'cash_allocation':
					default:
						me.allocation_item_type = 1;
						me.allocation_item_status = 10;
				}

				if( data )
				{
					angular.merge( me, data );

					if( me.allocation_datetime )
					{
						if( me.allocation_datetime.constructor == String )
						{
							me.allocation_datetime =  new Date( me.allocation_datetime );
						}
					}
				}
			};

		AllocationItem.prototype.get = function( field )
			{
				switch( field )
				{
					case 'allocationItemStatus':
						return allocationItemStatus[this.allocation_item_status.toString()];

					default:
						if( this.hasOwnProperty( field ) )
						{
							return this[field];
						}
						else
						{
							console.error( 'The property [' + field + '] does not exist!' );
							return undefined;
						}
				}
			};

		AllocationItem.prototype.void = function( status )
			{
				if( status == undefined)
				{
					return this.markedVoid;
				}
				else if( status == true || status == false )
				{
					this.markedVoid = status;
				}
			};

		return AllocationItem;
	}
]);

angular.module( 'coreModels' ).factory( 'AllocationSalesItem', [ '$http', '$q', '$filter', 'baseUrl', 'session', 'notifications',
	function( $http, $q, $filter, baseUrl, session, notifications )
	{
		var id;
		var alsale_allocation_id;
		var alsale_shift_id
		var alsale_cashier_id;
		var alsale_sales_item_id;
		var alsale_amount;
		var alsale_remarks;
		var alsale_sales_item_status;

		var allocationSalesItemStatus = {
				'10': 'Pending',
				'11': 'Recorded',
				'12': 'Voided',
			};

		/**
		 * Constructor
		 */
		function AllocationSalesItem( data )
		{
			this.loadData( data );
		}

		AllocationSalesItem.prototype.loadData = function( data )
			{
				var me = this;

				me.id = null;
				me.alsale_allocation_id = null;
				me.alsale_shift_id = null;
				me.alsale_cashier_id = null;
				me.alsale_sales_item_id = null;
				me.alsale_amount = null;
				me.alsale_remarks = null;
				me.alsale_sales_item_status = 10;

				if( data )
				{
					angular.merge( me, data );
				}
			};

		AllocationSalesItem.prototype.get = function( field )
			{
				switch( field )
				{
					case 'allocationSalesItemStatus':
						return allocationSalesItemStatus[this.alsale_sales_item_status.toString()];

					default:
						if( this.hasOwnProperty( field ) )
						{
							return this[field];
						}
						else
						{
							console.error( 'The property [' + field + '] does not exist!' );
							return undefined;
						}
				}
			};

		AllocationSalesItem.prototype.void = function( status )
			{
				if( status == undefined)
				{
					return this.markedVoid;
				}
				else if( status == true || status == false )
				{
					this.markedVoid = status;
				}
			};

		return AllocationSalesItem;
	}
]);

redpajama_set_name: RedPajamaGithub